{"version":3,"sources":["../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/@babel/runtime/helpers/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/superPropBase.js","../node_modules/@babel/runtime/helpers/set.js","../node_modules/@babel/runtime/helpers/get.js","../node_modules/@babel/runtime/helpers/isNativeFunction.js","../node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/construct.js","../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../node_modules/event-target-shim/es5.js","../node_modules/web-speech-cognitive-services/src/Util/arrayToMap.js","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Guid.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/PlatformEvent.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/AudioSourceEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/ConnectionEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Error.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/ConnectionMessage.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/ConnectionOpenResponse.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/DialogEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/EventSource.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Events.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IAudioSource.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IConnection.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IDetachable.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IDictionary.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IDisposable.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IEventSource.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/IErrorMessages.js","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/ITimer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IWebsocketMessageFormatter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/List.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Promise.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Queue.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/RawWebsocketMessage.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/RiffPcmEncoder.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Stream.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/TranslationStatus.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/ChunkedArrayBufferStream.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/IAudioDestination.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Timeout.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/OCSPEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/BackgroundError.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common/src/common/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/ConsoleLoggingListener.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/IRecorder.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/HeaderNames.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/IAuthentication.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/CognitiveSubscriptionKeyAuthentication.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/CognitiveTokenAuthentication.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/IConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/ISynthesisConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/Contracts.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioFileWriter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioStreamFormat.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioInputStream.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisOutputFormat.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioOutputFormat.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioOutputStream.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/AudioConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CancellationReason.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/PullAudioInputStreamCallback.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/PushAudioOutputStreamCallback.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/KeywordRecognitionModel.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SessionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/RecognitionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/OutputFormat.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/IntentRecognitionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/RecognitionResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechRecognitionResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/IntentRecognitionResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/LanguageUnderstandingModel.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechRecognitionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CancellationEventArgsBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechRecognitionCanceledEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationRecognitionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationSynthesisEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationRecognitionResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationSynthesisResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ResultReason.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechTranslationConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PropertyCollection.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PropertyId.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/Recognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/IntentRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfileType.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/Translations.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/NoMatchReason.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/NoMatchDetails.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TranslationRecognitionCanceledEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/IntentRecognitionCanceledEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CancellationDetailsBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CancellationDetails.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CancellationErrorCodes.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ConnectionEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ServiceEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ConnectionMessage.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/Connection.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PhraseListGrammar.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/DialogServiceConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/BotFrameworkConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/CustomCommandsConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/QueryParameterNames.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/ConnectionFactoryBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DialogConnectorFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/DialogServiceConnector.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ActivityReceivedEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/TurnStatusPayload.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/TurnStatusReceivedEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ServicePropertyChannel.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ProfanityOption.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/BaseAudioPlayer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ConnectionMessageEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfile.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfileEnrollmentResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfileResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfileAuthorizationPhraseResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/VoiceProfileClient.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeakerRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeakerIdentificationModel.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeakerVerificationModel.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/AutoDetectSourceLanguageConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/AutoDetectSourceLanguageResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SourceLanguageConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeakerRecognitionResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/Conversation.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationCommon.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationExpirationEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationParticipantsChangedEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationTranslationCanceledEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationTranslationEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationTranslationResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationTranslator.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ConversationTranscriber.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/IParticipant.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/ParticipantChangedReason.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Transcription/src/sdk/Transcription/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisWordBoundaryEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisBookmarkEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/SpeechSynthesisVisemeEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/Audio/src/sdk/Audio/SpeakerAudioDestination.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/ConversationTranscriptionCanceledEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PronunciationAssessmentGradingSystem.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PronunciationAssessmentGranularity.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PronunciationAssessmentConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/PronunciationAssessmentResult.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/sdk/src/sdk/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/IntentConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/RecognitionEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechConnectionMessage.Internal.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/ServiceRecognizerBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/RecognizerConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechServiceInterfaces.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/WebsocketMessageFormatter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/TranscriberConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/TranslationConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechSynthesisConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/EnumTranslation.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/Enums.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/TranslationSynthesisEnd.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/TranslationHypothesis.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/TranslationPhrase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/TranslationServiceRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/SpeechDetected.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/SpeechHypothesis.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/SpeechKeyword.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechServiceRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/TranscriptionServiceRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/DetailedSpeechPhrase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/SimpleSpeechPhrase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/AddedLmIntent.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/IntentServiceRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/IntentResponse.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/ServiceTelemetryListener.Internal.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/RequestSession.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeechContext.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DynamicGrammarBuilder.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DynamicGrammarInterfaces.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/ActivityResponsePayload.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DialogServiceTurnState.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DialogServiceTurnStateManager.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/DialogServiceAdapter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/AgentConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/RestConfigBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationConnectionConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationUtils.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationManager.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationConnectionMessage.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationWebsocketMessageFormatter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationConnectionFactory.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationRequestSession.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationTranslatorEventArgs.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationTranslatorInterfaces.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/ServiceMessages/src/common.speech/Transcription/ServiceMessages/CommandResponsePayload.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/ServiceMessages/src/common.speech/Transcription/ServiceMessages/ParticipantResponsePayload.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/ServiceMessages/src/common.speech/Transcription/ServiceMessages/TranslationResponsePayload.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/ServiceMessages/src/common.speech/Transcription/ServiceMessages/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationServiceAdapter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/ConversationTranslatorRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/TranscriberRecognizer.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/Transcription/src/common.speech/Transcription/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/ServiceMessages/src/common.speech/ServiceMessages/SynthesisAudioMetadata.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SynthesisAdapterBase.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SynthesisEvents.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SynthesisTurn.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SynthesizerConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SynthesisContext.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeakerRecognitionConfig.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/SpeakerIdMessageAdapter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.speech/src/common.speech/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/MicAudioSource.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/FileAudioSource.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/PCMRecorder.ts","../node_modules/requires-port/index.js","../node_modules/querystringify/index.js","../node_modules/url-parse/index.js","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/CertChecks.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/WebsocketMessageAdapter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/WebsocketConnection.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/ReplayableAudioNode.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/ProxyInfo.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/RestMessageAdapter.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/src/common.browser/src/common.browser/Exports.ts","../node_modules/microsoft-cognitiveservices-speech-sdk/distrib/es2015/microsoft.cognitiveservices.speech.sdk.ts","../node_modules/web-speech-cognitive-services/src/SpeechServices/SpeechSDK.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/SpeechToText/cognitiveServiceEventResultToWebSpeechRecognitionResultList.js","../node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js","../node_modules/core-js-pure/internals/global.js","../node_modules/core-js-pure/internals/fails.js","../node_modules/core-js-pure/internals/function-bind-native.js","../node_modules/core-js-pure/internals/function-apply.js","../node_modules/core-js-pure/internals/function-uncurry-this.js","../node_modules/core-js-pure/internals/document-all.js","../node_modules/core-js-pure/internals/is-callable.js","../node_modules/core-js-pure/internals/descriptors.js","../node_modules/core-js-pure/internals/function-call.js","../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../node_modules/core-js-pure/internals/create-property-descriptor.js","../node_modules/core-js-pure/internals/classof-raw.js","../node_modules/core-js-pure/internals/indexed-object.js","../node_modules/core-js-pure/internals/is-null-or-undefined.js","../node_modules/core-js-pure/internals/require-object-coercible.js","../node_modules/core-js-pure/internals/to-indexed-object.js","../node_modules/core-js-pure/internals/is-object.js","../node_modules/core-js-pure/internals/path.js","../node_modules/core-js-pure/internals/get-built-in.js","../node_modules/core-js-pure/internals/object-is-prototype-of.js","../node_modules/core-js-pure/internals/engine-user-agent.js","../node_modules/core-js-pure/internals/engine-v8-version.js","../node_modules/core-js-pure/internals/symbol-constructor-detection.js","../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../node_modules/core-js-pure/internals/is-symbol.js","../node_modules/core-js-pure/internals/try-to-string.js","../node_modules/core-js-pure/internals/a-callable.js","../node_modules/core-js-pure/internals/get-method.js","../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../node_modules/core-js-pure/internals/is-pure.js","../node_modules/core-js-pure/internals/define-global-property.js","../node_modules/core-js-pure/internals/shared-store.js","../node_modules/core-js-pure/internals/shared.js","../node_modules/core-js-pure/internals/to-object.js","../node_modules/core-js-pure/internals/has-own-property.js","../node_modules/core-js-pure/internals/uid.js","../node_modules/core-js-pure/internals/well-known-symbol.js","../node_modules/core-js-pure/internals/to-primitive.js","../node_modules/core-js-pure/internals/to-property-key.js","../node_modules/core-js-pure/internals/document-create-element.js","../node_modules/core-js-pure/internals/ie8-dom-define.js","../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../node_modules/core-js-pure/internals/is-forced.js","../node_modules/core-js-pure/internals/function-bind-context.js","../node_modules/core-js-pure/internals/v8-prototype-define-bug.js","../node_modules/core-js-pure/internals/an-object.js","../node_modules/core-js-pure/internals/object-define-property.js","../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../node_modules/core-js-pure/internals/export.js","../node_modules/core-js-pure/internals/shared-key.js","../node_modules/core-js-pure/internals/correct-prototype-getter.js","../node_modules/core-js-pure/internals/object-get-prototype-of.js","../node_modules/core-js-pure/internals/a-possible-prototype.js","../node_modules/core-js-pure/internals/object-set-prototype-of.js","../node_modules/core-js-pure/internals/math-trunc.js","../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../node_modules/core-js-pure/internals/to-absolute-index.js","../node_modules/core-js-pure/internals/to-length.js","../node_modules/core-js-pure/internals/length-of-array-like.js","../node_modules/core-js-pure/internals/array-includes.js","../node_modules/core-js-pure/internals/hidden-keys.js","../node_modules/core-js-pure/internals/object-keys-internal.js","../node_modules/core-js-pure/internals/enum-bug-keys.js","../node_modules/core-js-pure/internals/object-get-own-property-names.js","../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../node_modules/core-js-pure/internals/own-keys.js","../node_modules/core-js-pure/internals/copy-constructor-properties.js","../node_modules/core-js-pure/internals/object-keys.js","../node_modules/core-js-pure/internals/object-define-properties.js","../node_modules/core-js-pure/internals/html.js","../node_modules/core-js-pure/internals/object-create.js","../node_modules/core-js-pure/internals/error-stack-clear.js","../node_modules/core-js-pure/internals/install-error-cause.js","../node_modules/core-js-pure/internals/iterators.js","../node_modules/core-js-pure/internals/is-array-iterator-method.js","../node_modules/core-js-pure/internals/to-string-tag-support.js","../node_modules/core-js-pure/internals/classof.js","../node_modules/core-js-pure/internals/get-iterator-method.js","../node_modules/core-js-pure/internals/get-iterator.js","../node_modules/core-js-pure/internals/iterator-close.js","../node_modules/core-js-pure/internals/iterate.js","../node_modules/core-js-pure/internals/to-string.js","../node_modules/core-js-pure/internals/normalize-string-argument.js","../node_modules/core-js-pure/internals/error-stack-installable.js","../node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","../node_modules/core-js-pure/modules/es.aggregate-error.js","../node_modules/core-js-pure/internals/add-to-unscopables.js","../node_modules/core-js-pure/internals/weak-map-basic-detection.js","../node_modules/core-js-pure/internals/internal-state.js","../node_modules/core-js-pure/internals/function-name.js","../node_modules/core-js-pure/internals/define-built-in.js","../node_modules/core-js-pure/internals/iterators-core.js","../node_modules/core-js-pure/internals/object-to-string.js","../node_modules/core-js-pure/internals/set-to-string-tag.js","../node_modules/core-js-pure/internals/iterator-create-constructor.js","../node_modules/core-js-pure/internals/iterator-define.js","../node_modules/core-js-pure/internals/create-iter-result-object.js","../node_modules/core-js-pure/modules/es.array.iterator.js","../node_modules/core-js-pure/modules/es.object.to-string.js","../node_modules/core-js-pure/internals/engine-is-node.js","../node_modules/core-js-pure/internals/set-species.js","../node_modules/core-js-pure/internals/an-instance.js","../node_modules/core-js-pure/internals/inspect-source.js","../node_modules/core-js-pure/internals/is-constructor.js","../node_modules/core-js-pure/internals/a-constructor.js","../node_modules/core-js-pure/internals/species-constructor.js","../node_modules/core-js-pure/internals/array-slice.js","../node_modules/core-js-pure/internals/validate-arguments-length.js","../node_modules/core-js-pure/internals/engine-is-ios.js","../node_modules/core-js-pure/internals/task.js","../node_modules/core-js-pure/internals/engine-is-ios-pebble.js","../node_modules/core-js-pure/internals/engine-is-webos-webkit.js","../node_modules/core-js-pure/internals/microtask.js","../node_modules/core-js-pure/internals/host-report-errors.js","../node_modules/core-js-pure/internals/perform.js","../node_modules/core-js-pure/internals/queue.js","../node_modules/core-js-pure/internals/promise-native-constructor.js","../node_modules/core-js-pure/internals/engine-is-deno.js","../node_modules/core-js-pure/internals/engine-is-browser.js","../node_modules/core-js-pure/internals/promise-constructor-detection.js","../node_modules/core-js-pure/internals/new-promise-capability.js","../node_modules/core-js-pure/modules/es.promise.constructor.js","../node_modules/core-js-pure/internals/check-correctness-of-iteration.js","../node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js","../node_modules/core-js-pure/modules/es.promise.all.js","../node_modules/core-js-pure/modules/es.promise.catch.js","../node_modules/core-js-pure/modules/es.promise.race.js","../node_modules/core-js-pure/modules/es.promise.reject.js","../node_modules/core-js-pure/internals/promise-resolve.js","../node_modules/core-js-pure/modules/es.promise.resolve.js","../node_modules/core-js-pure/modules/es.promise.js","../node_modules/core-js-pure/modules/es.promise.all-settled.js","../node_modules/core-js-pure/modules/es.promise.any.js","../node_modules/core-js-pure/modules/es.promise.finally.js","../node_modules/core-js-pure/internals/string-multibyte.js","../node_modules/core-js-pure/modules/es.string.iterator.js","../node_modules/core-js-pure/es/promise/index.js","../node_modules/core-js-pure/internals/dom-iterables.js","../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../node_modules/core-js-pure/stable/promise/index.js","../node_modules/@babel/runtime-corejs3/core-js-stable/promise.js","../node_modules/p-defer-es5/lib/index.js","../node_modules/web-speech-cognitive-services/src/Util/createPromiseQueue.js","../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/resolveFunctionOrReturnValue.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/patchOptions.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/SpeechToText/SpeechGrammarList.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/SpeechToText/createSpeechRecognitionPonyfill.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/SpeechToText.js","../node_modules/on-error-resume-next/lib/index.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/AudioContextConsumer.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/AudioContextQueue.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/SpeechSynthesisVoice.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/fetchCustomVoices.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/fetchVoices.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/SpeechSynthesisEvent.js","../node_modules/event-as-promise/src/external/p-defer.js","../node_modules/event-as-promise/src/index.js","../node_modules/src/index.ts","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/buildSSML.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/isSSML.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/fetchSpeechData.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/subscribeEvent.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/SpeechSynthesisUtterance.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech/createSpeechSynthesisPonyfill.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/TextToSpeech.js","../node_modules/web-speech-cognitive-services/src/SpeechServices/fetchAuthorizationToken.js","../node_modules/web-speech-cognitive-services/src/SpeechServices.js","../src/FullComposer.tsx","../src/AddFullBundle.tsx","../src/adaptiveCards/AdaptiveCardsComposer.tsx","../src/adaptiveCards/AdaptiveCardsContext.ts","../src/useComposerProps.ts","../src/adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware.tsx","../src/adaptiveCards/AttachmentForScreenReader/AdaptiveCardAttachment.js","../src/adaptiveCards/hooks/internal/useAdaptiveCardsContext.ts","../src/adaptiveCards/hooks/useAdaptiveCardsPackage.ts","../src/adaptiveCards/hooks/internal/useParseAdaptiveCardJSON.ts","../src/hooks/useStyleOptions.ts","../src/adaptiveCards/hooks/internal/useUniqueId.ts","../src/adaptiveCards/AttachmentForScreenReader/RichCardAttachment.js","../src/adaptiveCards/createAdaptiveCardsAttachmentMiddleware.tsx","../src/adaptiveCards/Attachment/AdaptiveCardAttachment.tsx","../src/adaptiveCards/Attachment/AdaptiveCardContent.tsx","../src/adaptiveCards/Attachment/AdaptiveCardRenderer.tsx","../src/hooks/useStyleSet.ts","../src/adaptiveCards/hooks/useAdaptiveCardsHostConfig.ts","../src/adaptiveCards/Styles/adaptiveCardHostConfig.ts","../src/adaptiveCards/defaultStyleOptions.ts","../src/adaptiveCards/normalizeStyleOptions.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useValueRef.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/useActionShouldBePushButtonModEffect.ts","../src/adaptiveCards/DOMManipulationWithUndo/private/noOp.ts","../src/adaptiveCards/DOMManipulationWithUndo/addEventListenerWithUndo.ts","../src/adaptiveCards/DOMManipulationWithUndo/bunchUndos.tsx","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/closest.ts","../src/adaptiveCards/DOMManipulationWithUndo/private/addClass.tsx","../src/adaptiveCards/DOMManipulationWithUndo/durableAddClassWithUndo.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/findDOMNodeOwner.ts","../src/adaptiveCards/DOMManipulationWithUndo/private/getAttributeOrFalse.ts","../src/adaptiveCards/DOMManipulationWithUndo/private/setOrRemoveAttributeIfFalse.ts","../src/adaptiveCards/DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useAdaptiveCardModEffect.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/useLazyRef.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/private/usePrevious.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/useActiveElementModEffect.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/useDisabledModEffect.ts","../src/adaptiveCards/DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/usePersistValuesModEffect.ts","../src/adaptiveCards/Attachment/AdaptiveCardHacks/useRoleModEffect.ts","../src/adaptiveCards/Attachment/private/renderAdaptiveCard.ts","../src/adaptiveCards/Attachment/AnimationCardAttachment.js","../src/adaptiveCards/Attachment/AnimationCardContent.tsx","../src/adaptiveCards/Attachment/CommonCard.js","../src/adaptiveCards/Attachment/AdaptiveCardBuilder.ts","../src/adaptiveCards/Attachment/AudioCardAttachment.js","../src/adaptiveCards/Attachment/AudioCardContent.tsx","../src/adaptiveCards/Attachment/HeroCardAttachment.js","../src/adaptiveCards/Attachment/HeroCardContent.tsx","../src/adaptiveCards/Attachment/OAuthCardAttachment.js","../src/adaptiveCards/Attachment/OAuthCardContent.tsx","../src/adaptiveCards/Attachment/ReceiptCardAttachment.js","../src/adaptiveCards/Attachment/ReceiptCardContent.tsx","../src/adaptiveCards/Attachment/SignInCardAttachment.js","../src/adaptiveCards/Attachment/SignInCardContent.tsx","../src/adaptiveCards/Attachment/ThumbnailCardAttachment.js","../src/adaptiveCards/Attachment/ThumbnailCardContent.tsx","../src/adaptiveCards/Attachment/VideoCardAttachment.js","../src/adaptiveCards/Attachment/VideoCardContent.tsx","../src/adaptiveCards/Styles/createAdaptiveCardsStyleSet.ts","../src/adaptiveCards/Styles/StyleSet/AdaptiveCardRenderer.ts","../src/adaptiveCards/Styles/StyleSet/AnimationCardAttachment.js","../src/adaptiveCards/Styles/StyleSet/AudioCardAttachment.js","../src/markdown/renderMarkdown.ts","../src/markdown/markdownItPlugins/ariaLabel.ts","../src/markdown/markdownItPlugins/respectCRLF.ts","../src/markdown/private/betterLinkDocumentMod.ts","../src/markdown/private/iterateLinkDefinitions.ts","../src/FullReactWebChat.tsx","../src/createCognitiveServicesSpeechServicesPonyfillFactory.ts","../src/speech/createMicrophoneAudioConfigAndAudioContext.ts","../src/speech/bytesPerSample.ts","../src/speech/createAudioConfig.ts","../src/speech/CustomAudioInputStream.ts","../node_modules/p-defer-es5/lib/esm/index.mjs","../src/speech/createAudioContext.ts","../src/speech/getUserMedia.ts","../src/createDirectLineSpeechAdapters.ts","../src/createFullStyleSet.ts","../src/index.ts"],"sourcesContent":["function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\n\nfunction _regeneratorRuntime() {\n  \"use strict\";\n  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n\n  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n    return exports;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  var exports = {},\n      Op = Object.prototype,\n      hasOwn = Op.hasOwnProperty,\n      $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n      iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n      asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n      toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  function define(obj, key, value) {\n    return Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), obj[key];\n  }\n\n  try {\n    define({}, \"\");\n  } catch (err) {\n    define = function define(obj, key, value) {\n      return obj[key] = value;\n    };\n  }\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n        generator = Object.create(protoGenerator.prototype),\n        context = new Context(tryLocsList || []);\n    return generator._invoke = function (innerFn, self, context) {\n      var state = \"suspendedStart\";\n      return function (method, arg) {\n        if (\"executing\" === state) throw new Error(\"Generator is already running\");\n\n        if (\"completed\" === state) {\n          if (\"throw\" === method) throw arg;\n          return doneResult();\n        }\n\n        for (context.method = method, context.arg = arg;;) {\n          var delegate = context.delegate;\n\n          if (delegate) {\n            var delegateResult = maybeInvokeDelegate(delegate, context);\n\n            if (delegateResult) {\n              if (delegateResult === ContinueSentinel) continue;\n              return delegateResult;\n            }\n          }\n\n          if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n            if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n            context.dispatchException(context.arg);\n          } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n          state = \"executing\";\n          var record = tryCatch(innerFn, self, context);\n\n          if (\"normal\" === record.type) {\n            if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n            return {\n              value: record.arg,\n              done: context.done\n            };\n          }\n\n          \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n        }\n      };\n    }(innerFn, self, context), generator;\n  }\n\n  function tryCatch(fn, obj, arg) {\n    try {\n      return {\n        type: \"normal\",\n        arg: fn.call(obj, arg)\n      };\n    } catch (err) {\n      return {\n        type: \"throw\",\n        arg: err\n      };\n    }\n  }\n\n  exports.wrap = wrap;\n  var ContinueSentinel = {};\n\n  function Generator() {}\n\n  function GeneratorFunction() {}\n\n  function GeneratorFunctionPrototype() {}\n\n  var IteratorPrototype = {};\n  define(IteratorPrototype, iteratorSymbol, function () {\n    return this;\n  });\n  var getProto = Object.getPrototypeOf,\n      NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\n      define(prototype, method, function (arg) {\n        return this._invoke(method, arg);\n      });\n    });\n  }\n\n  function AsyncIterator(generator, PromiseImpl) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n\n      if (\"throw\" !== record.type) {\n        var result = record.arg,\n            value = result.value;\n        return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n          invoke(\"next\", value, resolve, reject);\n        }, function (err) {\n          invoke(\"throw\", err, resolve, reject);\n        }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n          result.value = unwrapped, resolve(result);\n        }, function (error) {\n          return invoke(\"throw\", error, resolve, reject);\n        });\n      }\n\n      reject(record.arg);\n    }\n\n    var previousPromise;\n\n    this._invoke = function (method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new PromiseImpl(function (resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n    };\n  }\n\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n\n    if (undefined === method) {\n      if (context.delegate = null, \"throw\" === context.method) {\n        if (delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel;\n        context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n    if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n    var info = record.arg;\n    return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n  }\n\n  function pushTryEntry(locs) {\n    var entry = {\n      tryLoc: locs[0]\n    };\n    1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\", delete record.arg, entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n  }\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) return iteratorMethod.call(iterable);\n      if (\"function\" == typeof iterable.next) return iterable;\n\n      if (!isNaN(iterable.length)) {\n        var i = -1,\n            next = function next() {\n          for (; ++i < iterable.length;) {\n            if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n          }\n\n          return next.value = undefined, next.done = !0, next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    return {\n      next: doneResult\n    };\n  }\n\n  function doneResult() {\n    return {\n      value: undefined,\n      done: !0\n    };\n  }\n\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n    var ctor = \"function\" == typeof genFun && genFun.constructor;\n    return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n  }, exports.mark = function (genFun) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n  }, exports.awrap = function (arg) {\n    return {\n      __await: arg\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n    return this;\n  }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n    void 0 === PromiseImpl && (PromiseImpl = Promise);\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n      return result.done ? result.value : iter.next();\n    });\n  }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n    return this;\n  }), define(Gp, \"toString\", function () {\n    return \"[object Generator]\";\n  }), exports.keys = function (object) {\n    var keys = [];\n\n    for (var key in object) {\n      keys.push(key);\n    }\n\n    return keys.reverse(), function next() {\n      for (; keys.length;) {\n        var key = keys.pop();\n        if (key in object) return next.value = key, next.done = !1, next;\n      }\n\n      return next.done = !0, next;\n    };\n  }, exports.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function reset(skipTempReset) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {\n        \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n      }\n    },\n    stop: function stop() {\n      this.done = !0;\n      var rootRecord = this.tryEntries[0].completion;\n      if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(exception) {\n      if (this.done) throw exception;\n      var context = this;\n\n      function handle(loc, caught) {\n        return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i],\n            record = entry.completion;\n        if (\"root\" === entry.tryLoc) return handle(\"end\");\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n              hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n          } else {\n            if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n            if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n      var record = finallyEntry ? finallyEntry.completion : {};\n      return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n    },\n    complete: function complete(record, afterLoc) {\n      if (\"throw\" === record.type) throw record.arg;\n      return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n    },\n    finish: function finish(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n      }\n    },\n    \"catch\": function _catch(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n\n          if (\"throw\" === record.type) {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n\n          return thrown;\n        }\n      }\n\n      throw new Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n      return this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n    }\n  }, exports;\n}\n\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) {\n    arr2[i] = arr[i];\n  }\n\n  return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\n\nvar iterableToArray = require(\"./iterableToArray.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\n\nfunction _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\n\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n        args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n\n      _next(undefined);\n    });\n  };\n}\n\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\n\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperty(subClass, \"prototype\", {\n    writable: false\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\n\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n\n  return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nfunction _superPropBase(object, property) {\n  while (!Object.prototype.hasOwnProperty.call(object, property)) {\n    object = getPrototypeOf(object);\n    if (object === null) break;\n  }\n\n  return object;\n}\n\nmodule.exports = _superPropBase, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var superPropBase = require(\"./superPropBase.js\");\n\nvar defineProperty = require(\"./defineProperty.js\");\n\nfunction set(target, property, value, receiver) {\n  if (typeof Reflect !== \"undefined\" && Reflect.set) {\n    set = Reflect.set;\n  } else {\n    set = function set(target, property, value, receiver) {\n      var base = superPropBase(target, property);\n      var desc;\n\n      if (base) {\n        desc = Object.getOwnPropertyDescriptor(base, property);\n\n        if (desc.set) {\n          desc.set.call(receiver, value);\n          return true;\n        } else if (!desc.writable) {\n          return false;\n        }\n      }\n\n      desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n      if (desc) {\n        if (!desc.writable) {\n          return false;\n        }\n\n        desc.value = value;\n        Object.defineProperty(receiver, property, desc);\n      } else {\n        defineProperty(receiver, property, value);\n      }\n\n      return true;\n    };\n  }\n\n  return set(target, property, value, receiver);\n}\n\nfunction _set(target, property, value, receiver, isStrict) {\n  var s = set(target, property, value, receiver || target);\n\n  if (!s && isStrict) {\n    throw new Error('failed to set property');\n  }\n\n  return value;\n}\n\nmodule.exports = _set, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var superPropBase = require(\"./superPropBase.js\");\n\nfunction _get() {\n  if (typeof Reflect !== \"undefined\" && Reflect.get) {\n    module.exports = _get = Reflect.get.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  } else {\n    module.exports = _get = function _get(target, property, receiver) {\n      var base = superPropBase(target, property);\n      if (!base) return;\n      var desc = Object.getOwnPropertyDescriptor(base, property);\n\n      if (desc.get) {\n        return desc.get.call(arguments.length < 3 ? target : receiver);\n      }\n\n      return desc.value;\n    }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  }\n\n  return _get.apply(this, arguments);\n}\n\nmodule.exports = _get, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(fn) {\n  return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\n\nfunction _construct(Parent, args, Class) {\n  if (isNativeReflectConstruct()) {\n    module.exports = _construct = Reflect.construct.bind(), module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  } else {\n    module.exports = _construct = function _construct(Parent, args, Class) {\n      var a = [null];\n      a.push.apply(a, args);\n      var Constructor = Function.bind.apply(Parent, a);\n      var instance = new Constructor();\n      if (Class) setPrototypeOf(instance, Class.prototype);\n      return instance;\n    }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  }\n\n  return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\n\nvar isNativeFunction = require(\"./isNativeFunction.js\");\n\nvar construct = require(\"./construct.js\");\n\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n  module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !isNativeFunction(Class)) return Class;\n\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n\n      _cache.set(Class, Wrapper);\n    }\n\n    function Wrapper() {\n      return construct(Class, arguments, getPrototypeOf(this).constructor);\n    }\n\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return setPrototypeOf(Wrapper, Class);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');\nvar _set = require('@babel/runtime/helpers/set');\nvar _get = require('@babel/runtime/helpers/get');\nvar _assertThisInitialized = require('@babel/runtime/helpers/assertThisInitialized');\nvar _inherits = require('@babel/runtime/helpers/inherits');\nvar _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstructorReturn');\nvar _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');\nvar _wrapNativeSuper = require('@babel/runtime/helpers/wrapNativeSuper');\nvar _defineProperty = require('@babel/runtime/helpers/defineProperty');\nvar _classCallCheck = require('@babel/runtime/helpers/classCallCheck');\nvar _createClass = require('@babel/runtime/helpers/createClass');\nvar _typeof = require('@babel/runtime/helpers/typeof');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);\nvar _set__default = /*#__PURE__*/_interopDefaultLegacy(_set);\nvar _get__default = /*#__PURE__*/_interopDefaultLegacy(_get);\nvar _assertThisInitialized__default = /*#__PURE__*/_interopDefaultLegacy(_assertThisInitialized);\nvar _inherits__default = /*#__PURE__*/_interopDefaultLegacy(_inherits);\nvar _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_possibleConstructorReturn);\nvar _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);\nvar _wrapNativeSuper__default = /*#__PURE__*/_interopDefaultLegacy(_wrapNativeSuper);\nvar _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);\nvar _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);\nvar _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);\nvar _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default['default'](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default['default'](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default['default'](this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/**\n * Assert a condition.\n * @param condition The condition that it should satisfy.\n * @param message The error message.\n * @param args The arguments for replacing placeholders in the message.\n */\nfunction assertType(condition, message) {\n  if (!condition) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    throw new TypeError(format(message, args));\n  }\n}\n/**\n * Convert a text and arguments to one string.\n * @param message The formating text\n * @param args The arguments.\n */\n\n\nfunction format(message, args) {\n  var i = 0;\n  return message.replace(/%[os]/g, function () {\n    return anyToString(args[i++]);\n  });\n}\n/**\n * Convert a value to a string representation.\n * @param x The value to get the string representation.\n */\n\n\nfunction anyToString(x) {\n  if (_typeof__default['default'](x) !== \"object\" || x === null) {\n    return String(x);\n  }\n\n  return Object.prototype.toString.call(x);\n}\n\nvar currentErrorHandler;\n/**\n * Set the error handler.\n * @param value The error handler to set.\n */\n\nfunction setErrorHandler(value) {\n  assertType(typeof value === \"function\" || value === undefined, \"The error handler must be a function or undefined, but got %o.\", value);\n  currentErrorHandler = value;\n}\n/**\n * Print a error message.\n * @param maybeError The error object.\n */\n\n\nfunction reportError(maybeError) {\n  try {\n    var error = maybeError instanceof Error ? maybeError : new Error(anyToString(maybeError)); // Call the user-defined error handler if exists.\n\n    if (currentErrorHandler) {\n      currentErrorHandler(error);\n      return;\n    } // Dispatch an `error` event if this is on a browser.\n\n\n    if (typeof dispatchEvent === \"function\" && typeof ErrorEvent === \"function\") {\n      dispatchEvent(new ErrorEvent(\"error\", {\n        error: error,\n        message: error.message\n      }));\n    } // Emit an `uncaughtException` event if this is on Node.js.\n    //istanbul ignore else\n    else if (typeof process !== \"undefined\" && typeof process.emit === \"function\") {\n        process.emit(\"uncaughtException\", error);\n        return;\n      } // Otherwise, print the error.\n\n\n    console.error(error);\n  } catch (_a) {// ignore.\n  }\n}\n/**\n * The global object.\n */\n//istanbul ignore next\n\n\nvar Global = typeof window !== \"undefined\" ? window : typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : typeof globalThis !== \"undefined\" ? globalThis : undefined;\nvar currentWarnHandler;\n/**\n * Set the warning handler.\n * @param value The warning handler to set.\n */\n\nfunction setWarningHandler(value) {\n  assertType(typeof value === \"function\" || value === undefined, \"The warning handler must be a function or undefined, but got %o.\", value);\n  currentWarnHandler = value;\n}\n/**\n * The warning information.\n */\n\n\nvar Warning = /*#__PURE__*/function () {\n  function Warning(code, message) {\n    _classCallCheck__default['default'](this, Warning);\n\n    this.code = code;\n    this.message = message;\n  }\n  /**\n   * Report this warning.\n   * @param args The arguments of the warning.\n   */\n\n\n  _createClass__default['default'](Warning, [{\n    key: \"warn\",\n    value: function warn() {\n      var _a;\n\n      try {\n        var _console;\n\n        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        // Call the user-defined warning handler if exists.\n        if (currentWarnHandler) {\n          currentWarnHandler(_objectSpread(_objectSpread({}, this), {}, {\n            args: args\n          }));\n          return;\n        } // Otherwise, print the warning.\n\n\n        var stack = ((_a = new Error().stack) !== null && _a !== void 0 ? _a : \"\").replace(/^(?:(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+?\\n){2}/g, \"\\n\");\n\n        (_console = console).warn.apply(_console, [this.message].concat(args, [stack]));\n      } catch (_b) {// Ignore.\n      }\n    }\n  }]);\n\n  return Warning;\n}();\n\nvar InitEventWasCalledWhileDispatching = new Warning(\"W01\", \"Unable to initialize event under dispatching.\");\nvar FalsyWasAssignedToCancelBubble = new Warning(\"W02\", \"Assigning any falsy value to 'cancelBubble' property has no effect.\");\nvar TruthyWasAssignedToReturnValue = new Warning(\"W03\", \"Assigning any truthy value to 'returnValue' property has no effect.\");\nvar NonCancelableEventWasCanceled = new Warning(\"W04\", \"Unable to preventDefault on non-cancelable events.\");\nvar CanceledInPassiveListener = new Warning(\"W05\", \"Unable to preventDefault inside passive event listener invocation.\");\nvar EventListenerWasDuplicated = new Warning(\"W06\", \"An event listener wasn't added because it has been added already: %o, %o\");\nvar OptionWasIgnored = new Warning(\"W07\", \"The %o option value was abandoned because the event listener wasn't added as duplicated.\");\nvar InvalidEventListener = new Warning(\"W08\", \"The 'callback' argument must be a function or an object that has 'handleEvent' method: %o\");\nvar InvalidAttributeHandler = new Warning(\"W09\", \"Event attribute handler must be a function: %o\");\n/*eslint-disable class-methods-use-this */\n\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * `EventTarget` shim can control the internal state of this `Event` objects.\n * @see https://dom.spec.whatwg.org/#event\n */\n\nvar Event = /*#__PURE__*/function () {\n  _createClass__default['default'](Event, null, [{\n    key: \"NONE\",\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n    get: function get() {\n      return NONE;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n\n  }, {\n    key: \"CAPTURING_PHASE\",\n    get: function get() {\n      return CAPTURING_PHASE;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n\n  }, {\n    key: \"AT_TARGET\",\n    get: function get() {\n      return AT_TARGET;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n\n  }, {\n    key: \"BUBBLING_PHASE\",\n    get: function get() {\n      return BUBBLING_PHASE;\n    }\n    /**\n     * Initialize this event instance.\n     * @param type The type of this event.\n     * @param eventInitDict Options to initialize.\n     * @see https://dom.spec.whatwg.org/#dom-event-event\n     */\n\n  }]);\n\n  function Event(type, eventInitDict) {\n    _classCallCheck__default['default'](this, Event);\n\n    Object.defineProperty(this, \"isTrusted\", {\n      value: false,\n      enumerable: true\n    });\n    var opts = eventInitDict !== null && eventInitDict !== void 0 ? eventInitDict : {};\n    internalDataMap.set(this, {\n      type: String(type),\n      bubbles: Boolean(opts.bubbles),\n      cancelable: Boolean(opts.cancelable),\n      composed: Boolean(opts.composed),\n      target: null,\n      currentTarget: null,\n      stopPropagationFlag: false,\n      stopImmediatePropagationFlag: false,\n      canceledFlag: false,\n      inPassiveListenerFlag: false,\n      dispatchFlag: false,\n      timeStamp: Date.now()\n    });\n  }\n  /**\n   * The type of this event.\n   * @see https://dom.spec.whatwg.org/#dom-event-type\n   */\n\n\n  _createClass__default['default'](Event, [{\n    key: \"composedPath\",\n\n    /**\n     * The event target of the current dispatching.\n     * This doesn't support node tree.\n     * @see https://dom.spec.whatwg.org/#dom-event-composedpath\n     */\n    value: function composedPath() {\n      var currentTarget = $(this).currentTarget;\n\n      if (currentTarget) {\n        return [currentTarget];\n      }\n\n      return [];\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n\n  }, {\n    key: \"stopPropagation\",\n\n    /**\n     * Stop event bubbling.\n     * Because this shim doesn't support node tree, this merely changes the `cancelBubble` property value.\n     * @see https://dom.spec.whatwg.org/#dom-event-stoppropagation\n     */\n    value: function stopPropagation() {\n      $(this).stopPropagationFlag = true;\n    }\n    /**\n     * `true` if event bubbling was stopped.\n     * @deprecated\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n\n  }, {\n    key: \"stopImmediatePropagation\",\n\n    /**\n     * Stop event bubbling and subsequent event listener callings.\n     * @see https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation\n     */\n    value: function stopImmediatePropagation() {\n      var data = $(this);\n      data.stopPropagationFlag = data.stopImmediatePropagationFlag = true;\n    }\n    /**\n     * `true` if this event will bubble.\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbles\n     */\n\n  }, {\n    key: \"preventDefault\",\n\n    /**\n     * Cancel the default behavior.\n     * @see https://dom.spec.whatwg.org/#dom-event-preventdefault\n     */\n    value: function preventDefault() {\n      setCancelFlag($(this));\n    }\n    /**\n     * `true` if the default behavior was canceled.\n     * @see https://dom.spec.whatwg.org/#dom-event-defaultprevented\n     */\n\n  }, {\n    key: \"initEvent\",\n\n    /**\n     * @deprecated Don't use this method. The constructor did initialization.\n     */\n    value: function initEvent(type) {\n      var bubbles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var cancelable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var data = $(this);\n\n      if (data.dispatchFlag) {\n        InitEventWasCalledWhileDispatching.warn();\n        return;\n      }\n\n      internalDataMap.set(this, _objectSpread(_objectSpread({}, data), {}, {\n        type: String(type),\n        bubbles: Boolean(bubbles),\n        cancelable: Boolean(cancelable),\n        target: null,\n        currentTarget: null,\n        stopPropagationFlag: false,\n        stopImmediatePropagationFlag: false,\n        canceledFlag: false\n      }));\n    }\n  }, {\n    key: \"type\",\n    get: function get() {\n      return $(this).type;\n    }\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-target\n     */\n\n  }, {\n    key: \"target\",\n    get: function get() {\n      return $(this).target;\n    }\n    /**\n     * The event target of the current dispatching.\n     * @deprecated Use the `target` property instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-srcelement\n     */\n\n  }, {\n    key: \"srcElement\",\n    get: function get() {\n      return $(this).target;\n    }\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-currenttarget\n     */\n\n  }, {\n    key: \"currentTarget\",\n    get: function get() {\n      return $(this).currentTarget;\n    }\n  }, {\n    key: \"NONE\",\n    get: function get() {\n      return NONE;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n\n  }, {\n    key: \"CAPTURING_PHASE\",\n    get: function get() {\n      return CAPTURING_PHASE;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n\n  }, {\n    key: \"AT_TARGET\",\n    get: function get() {\n      return AT_TARGET;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n\n  }, {\n    key: \"BUBBLING_PHASE\",\n    get: function get() {\n      return BUBBLING_PHASE;\n    }\n    /**\n     * The current event phase.\n     * @see https://dom.spec.whatwg.org/#dom-event-eventphase\n     */\n\n  }, {\n    key: \"eventPhase\",\n    get: function get() {\n      return $(this).dispatchFlag ? 2 : 0;\n    }\n  }, {\n    key: \"cancelBubble\",\n    get: function get() {\n      return $(this).stopPropagationFlag;\n    }\n    /**\n     * Stop event bubbling if `true` is set.\n     * @deprecated Use the `stopPropagation()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n    ,\n    set: function set(value) {\n      if (value) {\n        $(this).stopPropagationFlag = true;\n      } else {\n        FalsyWasAssignedToCancelBubble.warn();\n      }\n    }\n  }, {\n    key: \"bubbles\",\n    get: function get() {\n      return $(this).bubbles;\n    }\n    /**\n     * `true` if this event can be canceled by the `preventDefault()` method.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelable\n     */\n\n  }, {\n    key: \"cancelable\",\n    get: function get() {\n      return $(this).cancelable;\n    }\n    /**\n     * `true` if the default behavior will act.\n     * @deprecated Use the `defaultPrevented` proeprty instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n\n  }, {\n    key: \"returnValue\",\n    get: function get() {\n      return !$(this).canceledFlag;\n    }\n    /**\n     * Cancel the default behavior if `false` is set.\n     * @deprecated Use the `preventDefault()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n    ,\n    set: function set(value) {\n      if (!value) {\n        setCancelFlag($(this));\n      } else {\n        TruthyWasAssignedToReturnValue.warn();\n      }\n    }\n  }, {\n    key: \"defaultPrevented\",\n    get: function get() {\n      return $(this).canceledFlag;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-composed\n     */\n\n  }, {\n    key: \"composed\",\n    get: function get() {\n      return $(this).composed;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-istrusted\n     */\n    //istanbul ignore next\n\n  }, {\n    key: \"isTrusted\",\n    get: function get() {\n      return false;\n    }\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-timestamp\n     */\n\n  }, {\n    key: \"timeStamp\",\n    get: function get() {\n      return $(this).timeStamp;\n    }\n  }]);\n\n  return Event;\n}(); //------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n\nvar NONE = 0;\nvar CAPTURING_PHASE = 1;\nvar AT_TARGET = 2;\nvar BUBBLING_PHASE = 3;\n/**\n * Private data for event wrappers.\n */\n\nvar internalDataMap = new WeakMap();\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\n\nfunction $(event) {\n  var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"this\";\n  var retv = internalDataMap.get(event);\n  assertType(retv != null, \"'%s' must be an object that Event constructor created, but got another one: %o\", name, event);\n  return retv;\n}\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data private data.\n */\n\n\nfunction setCancelFlag(data) {\n  if (data.inPassiveListenerFlag) {\n    CanceledInPassiveListener.warn();\n    return;\n  }\n\n  if (!data.cancelable) {\n    NonCancelableEventWasCanceled.warn();\n    return;\n  }\n\n  data.canceledFlag = true;\n} // Set enumerable\n\n\nObject.defineProperty(Event, \"NONE\", {\n  enumerable: true\n});\nObject.defineProperty(Event, \"CAPTURING_PHASE\", {\n  enumerable: true\n});\nObject.defineProperty(Event, \"AT_TARGET\", {\n  enumerable: true\n});\nObject.defineProperty(Event, \"BUBBLING_PHASE\", {\n  enumerable: true\n});\nvar keys = Object.getOwnPropertyNames(Event.prototype);\n\nfor (var i = 0; i < keys.length; ++i) {\n  if (keys[i] === \"constructor\") {\n    continue;\n  }\n\n  Object.defineProperty(Event.prototype, keys[i], {\n    enumerable: true\n  });\n} // Ensure `event instanceof window.Event` is `true`.\n\n\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n  Object.setPrototypeOf(Event.prototype, Global.Event.prototype);\n}\n/**\n * Create a new InvalidStateError instance.\n * @param message The error message.\n */\n\n\nfunction createInvalidStateError(message) {\n  if (Global.DOMException) {\n    return new Global.DOMException(message, \"InvalidStateError\");\n  }\n\n  if (DOMException == null) {\n    DOMException = /*#__PURE__*/function (_Error) {\n      _inherits__default['default'](DOMException, _Error);\n\n      var _super = _createSuper(DOMException);\n\n      function DOMException(msg) {\n        var _this;\n\n        _classCallCheck__default['default'](this, DOMException);\n\n        _this = _super.call(this, msg);\n\n        if (Error.captureStackTrace) {\n          Error.captureStackTrace(_assertThisInitialized__default['default'](_this), DOMException);\n        }\n\n        return _this;\n      } // eslint-disable-next-line class-methods-use-this\n\n\n      _createClass__default['default'](DOMException, [{\n        key: \"code\",\n        get: function get() {\n          return 11;\n        } // eslint-disable-next-line class-methods-use-this\n\n      }, {\n        key: \"name\",\n        get: function get() {\n          return \"InvalidStateError\";\n        }\n      }]);\n\n      return DOMException;\n    }( /*#__PURE__*/_wrapNativeSuper__default['default'](Error));\n\n    Object.defineProperties(DOMException.prototype, {\n      code: {\n        enumerable: true\n      },\n      name: {\n        enumerable: true\n      }\n    });\n    defineErrorCodeProperties(DOMException);\n    defineErrorCodeProperties(DOMException.prototype);\n  }\n\n  return new DOMException(message);\n} //------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n\nvar DOMException;\nvar ErrorCodeMap = {\n  INDEX_SIZE_ERR: 1,\n  DOMSTRING_SIZE_ERR: 2,\n  HIERARCHY_REQUEST_ERR: 3,\n  WRONG_DOCUMENT_ERR: 4,\n  INVALID_CHARACTER_ERR: 5,\n  NO_DATA_ALLOWED_ERR: 6,\n  NO_MODIFICATION_ALLOWED_ERR: 7,\n  NOT_FOUND_ERR: 8,\n  NOT_SUPPORTED_ERR: 9,\n  INUSE_ATTRIBUTE_ERR: 10,\n  INVALID_STATE_ERR: 11,\n  SYNTAX_ERR: 12,\n  INVALID_MODIFICATION_ERR: 13,\n  NAMESPACE_ERR: 14,\n  INVALID_ACCESS_ERR: 15,\n  VALIDATION_ERR: 16,\n  TYPE_MISMATCH_ERR: 17,\n  SECURITY_ERR: 18,\n  NETWORK_ERR: 19,\n  ABORT_ERR: 20,\n  URL_MISMATCH_ERR: 21,\n  QUOTA_EXCEEDED_ERR: 22,\n  TIMEOUT_ERR: 23,\n  INVALID_NODE_TYPE_ERR: 24,\n  DATA_CLONE_ERR: 25\n};\n\nfunction defineErrorCodeProperties(obj) {\n  var keys = Object.keys(ErrorCodeMap);\n\n  var _loop = function _loop(_i) {\n    var key = keys[_i];\n    var value = ErrorCodeMap[key];\n    Object.defineProperty(obj, key, {\n      get: function get() {\n        return value;\n      },\n      configurable: true,\n      enumerable: true\n    });\n  };\n\n  for (var _i = 0; _i < keys.length; ++_i) {\n    _loop(_i);\n  }\n}\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * This class controls the internal state of `Event`.\n * @see https://dom.spec.whatwg.org/#interface-event\n */\n\n\nvar EventWrapper = /*#__PURE__*/function (_Event) {\n  _inherits__default['default'](EventWrapper, _Event);\n\n  var _super2 = _createSuper(EventWrapper);\n\n  _createClass__default['default'](EventWrapper, null, [{\n    key: \"wrap\",\n\n    /**\n     * Wrap a given event object to control states.\n     * @param event The event-like object to wrap.\n     */\n    value: function wrap(event) {\n      return new (getWrapperClassOf(event))(event);\n    }\n  }]);\n\n  function EventWrapper(event) {\n    var _thisSuper, _thisSuper2, _this2;\n\n    _classCallCheck__default['default'](this, EventWrapper);\n\n    _this2 = _super2.call(this, event.type, {\n      bubbles: event.bubbles,\n      cancelable: event.cancelable,\n      composed: event.composed\n    });\n\n    if (event.cancelBubble) {\n      _get__default['default']((_thisSuper = _assertThisInitialized__default['default'](_this2), _getPrototypeOf__default['default'](EventWrapper.prototype)), \"stopPropagation\", _thisSuper).call(_thisSuper);\n    }\n\n    if (event.defaultPrevented) {\n      _get__default['default']((_thisSuper2 = _assertThisInitialized__default['default'](_this2), _getPrototypeOf__default['default'](EventWrapper.prototype)), \"preventDefault\", _thisSuper2).call(_thisSuper2);\n    }\n\n    internalDataMap$1.set(_assertThisInitialized__default['default'](_this2), {\n      original: event\n    }); // Define accessors\n\n    var keys = Object.keys(event);\n\n    for (var _i2 = 0; _i2 < keys.length; ++_i2) {\n      var key = keys[_i2];\n\n      if (!(key in _assertThisInitialized__default['default'](_this2))) {\n        Object.defineProperty(_assertThisInitialized__default['default'](_this2), key, defineRedirectDescriptor(event, key));\n      }\n    }\n\n    return _this2;\n  }\n\n  _createClass__default['default'](EventWrapper, [{\n    key: \"stopPropagation\",\n    value: function stopPropagation() {\n      _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"stopPropagation\", this).call(this);\n\n      var _$$ = $$1(this),\n          original = _$$.original;\n\n      if (\"stopPropagation\" in original) {\n        original.stopPropagation();\n      }\n    }\n  }, {\n    key: \"stopImmediatePropagation\",\n    value: function stopImmediatePropagation() {\n      _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"stopImmediatePropagation\", this).call(this);\n\n      var _$$2 = $$1(this),\n          original = _$$2.original;\n\n      if (\"stopImmediatePropagation\" in original) {\n        original.stopImmediatePropagation();\n      }\n    }\n  }, {\n    key: \"preventDefault\",\n    value: function preventDefault() {\n      _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"preventDefault\", this).call(this);\n\n      var _$$3 = $$1(this),\n          original = _$$3.original;\n\n      if (\"preventDefault\" in original) {\n        original.preventDefault();\n      }\n    }\n  }, {\n    key: \"cancelBubble\",\n    get: function get() {\n      return _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"cancelBubble\", this);\n    },\n    set: function set(value) {\n      _set__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"cancelBubble\", value, this, true);\n\n      var _$$4 = $$1(this),\n          original = _$$4.original;\n\n      if (\"cancelBubble\" in original) {\n        original.cancelBubble = value;\n      }\n    }\n  }, {\n    key: \"returnValue\",\n    get: function get() {\n      return _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"returnValue\", this);\n    },\n    set: function set(value) {\n      _set__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"returnValue\", value, this, true);\n\n      var _$$5 = $$1(this),\n          original = _$$5.original;\n\n      if (\"returnValue\" in original) {\n        original.returnValue = value;\n      }\n    }\n  }, {\n    key: \"timeStamp\",\n    get: function get() {\n      var _$$6 = $$1(this),\n          original = _$$6.original;\n\n      if (\"timeStamp\" in original) {\n        return original.timeStamp;\n      }\n\n      return _get__default['default'](_getPrototypeOf__default['default'](EventWrapper.prototype), \"timeStamp\", this);\n    }\n  }]);\n\n  return EventWrapper;\n}(Event);\n/**\n * Private data for event wrappers.\n */\n\n\nvar internalDataMap$1 = new WeakMap();\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @returns The private data of the event.\n */\n\nfunction $$1(event) {\n  var retv = internalDataMap$1.get(event);\n  assertType(retv != null, \"'this' is expected an Event object, but got\", event);\n  return retv;\n}\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\n\n\nvar wrapperClassCache = new WeakMap(); // Make association for wrappers.\n\nwrapperClassCache.set(Object.prototype, EventWrapper);\n\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n  wrapperClassCache.set(Global.Event.prototype, EventWrapper);\n}\n/**\n * Get the wrapper class of a given prototype.\n * @param originalEvent The event object to wrap.\n */\n\n\nfunction getWrapperClassOf(originalEvent) {\n  var prototype = Object.getPrototypeOf(originalEvent);\n\n  if (prototype == null) {\n    return EventWrapper;\n  }\n\n  var wrapper = wrapperClassCache.get(prototype);\n\n  if (wrapper == null) {\n    wrapper = defineWrapper(getWrapperClassOf(prototype), prototype);\n    wrapperClassCache.set(prototype, wrapper);\n  }\n\n  return wrapper;\n}\n/**\n * Define new wrapper class.\n * @param BaseEventWrapper The base wrapper class.\n * @param originalPrototype The prototype of the original event.\n */\n\n\nfunction defineWrapper(BaseEventWrapper, originalPrototype) {\n  var CustomEventWrapper = /*#__PURE__*/function (_BaseEventWrapper) {\n    _inherits__default['default'](CustomEventWrapper, _BaseEventWrapper);\n\n    var _super3 = _createSuper(CustomEventWrapper);\n\n    function CustomEventWrapper() {\n      _classCallCheck__default['default'](this, CustomEventWrapper);\n\n      return _super3.apply(this, arguments);\n    }\n\n    return CustomEventWrapper;\n  }(BaseEventWrapper);\n\n  var keys = Object.keys(originalPrototype);\n\n  for (var _i3 = 0; _i3 < keys.length; ++_i3) {\n    Object.defineProperty(CustomEventWrapper.prototype, keys[_i3], defineRedirectDescriptor(originalPrototype, keys[_i3]));\n  }\n\n  return CustomEventWrapper;\n}\n/**\n * Get the property descriptor to redirect a given property.\n */\n\n\nfunction defineRedirectDescriptor(obj, key) {\n  var d = Object.getOwnPropertyDescriptor(obj, key);\n  return {\n    get: function get() {\n      var original = $$1(this).original;\n      var value = original[key];\n\n      if (typeof value === \"function\") {\n        return value.bind(original);\n      }\n\n      return value;\n    },\n    set: function set(value) {\n      var original = $$1(this).original;\n      original[key] = value;\n    },\n    configurable: d.configurable,\n    enumerable: d.enumerable\n  };\n}\n/**\n * Create a new listener.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n * @param signalListener The abort event listener for the abort signal.\n */\n\n\nfunction createListener(callback, capture, passive, once, signal, signalListener) {\n  return {\n    callback: callback,\n    flags: (capture ? 1\n    /* Capture */\n    : 0) | (passive ? 2\n    /* Passive */\n    : 0) | (once ? 4\n    /* Once */\n    : 0),\n    signal: signal,\n    signalListener: signalListener\n  };\n}\n/**\n * Set the `removed` flag to the given listener.\n * @param listener The listener to check.\n */\n\n\nfunction setRemoved(listener) {\n  listener.flags |= 8\n  /* Removed */\n  ;\n}\n/**\n * Check if the given listener has the `capture` flag or not.\n * @param listener The listener to check.\n */\n\n\nfunction isCapture(listener) {\n  return (listener.flags & 1\n  /* Capture */\n  ) === 1\n  /* Capture */\n  ;\n}\n/**\n * Check if the given listener has the `passive` flag or not.\n * @param listener The listener to check.\n */\n\n\nfunction isPassive(listener) {\n  return (listener.flags & 2\n  /* Passive */\n  ) === 2\n  /* Passive */\n  ;\n}\n/**\n * Check if the given listener has the `once` flag or not.\n * @param listener The listener to check.\n */\n\n\nfunction isOnce(listener) {\n  return (listener.flags & 4\n  /* Once */\n  ) === 4\n  /* Once */\n  ;\n}\n/**\n * Check if the given listener has the `removed` flag or not.\n * @param listener The listener to check.\n */\n\n\nfunction isRemoved(listener) {\n  return (listener.flags & 8\n  /* Removed */\n  ) === 8\n  /* Removed */\n  ;\n}\n/**\n * Call an event listener.\n * @param listener The listener to call.\n * @param target The event target object for `thisArg`.\n * @param event The event object for the first argument.\n * @param attribute `true` if this callback is an event attribute handler.\n */\n\n\nfunction invokeCallback(_ref, target, event) {\n  var callback = _ref.callback;\n\n  try {\n    if (typeof callback === \"function\") {\n      callback.call(target, event);\n    } else if (typeof callback.handleEvent === \"function\") {\n      callback.handleEvent(event);\n    }\n  } catch (thrownError) {\n    reportError(thrownError);\n  }\n}\n/**\n * Find the index of given listener.\n * This returns `-1` if not found.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n */\n\n\nfunction findIndexOfListener(_ref2, callback, capture) {\n  var listeners = _ref2.listeners;\n\n  for (var _i4 = 0; _i4 < listeners.length; ++_i4) {\n    if (listeners[_i4].callback === callback && isCapture(listeners[_i4]) === capture) {\n      return _i4;\n    }\n  }\n\n  return -1;\n}\n/**\n * Add the given listener.\n * Does copy-on-write if needed.\n * @param list The listener list.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n */\n\n\nfunction addListener(list, callback, capture, passive, once, signal) {\n  var signalListener;\n\n  if (signal) {\n    signalListener = removeListener.bind(null, list, callback, capture);\n    signal.addEventListener(\"abort\", signalListener);\n  }\n\n  var listener = createListener(callback, capture, passive, once, signal, signalListener);\n\n  if (list.cow) {\n    list.cow = false;\n    list.listeners = [].concat(_toConsumableArray__default['default'](list.listeners), [listener]);\n  } else {\n    list.listeners.push(listener);\n  }\n\n  return listener;\n}\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n * @returns `true` if it mutated the list directly.\n */\n\n\nfunction removeListener(list, callback, capture) {\n  var index = findIndexOfListener(list, callback, capture);\n\n  if (index !== -1) {\n    return removeListenerAt(list, index);\n  }\n\n  return false;\n}\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param index The index of the target listener.\n * @param disableCow Disable copy-on-write if true.\n * @returns `true` if it mutated the `listeners` array directly.\n */\n\n\nfunction removeListenerAt(list, index) {\n  var disableCow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var listener = list.listeners[index]; // Set the removed flag.\n\n  setRemoved(listener); // Dispose the abort signal listener if exists.\n\n  if (listener.signal) {\n    listener.signal.removeEventListener(\"abort\", listener.signalListener);\n  } // Remove it from the array.\n\n\n  if (list.cow && !disableCow) {\n    list.cow = false;\n    list.listeners = list.listeners.filter(function (_, i) {\n      return i !== index;\n    });\n    return false;\n  }\n\n  list.listeners.splice(index, 1);\n  return true;\n}\n/**\n * Create a new `ListenerListMap` object.\n */\n\n\nfunction createListenerListMap() {\n  return Object.create(null);\n}\n/**\n * Get the listener list of the given type.\n * If the listener list has not been initialized, initialize and return it.\n * @param listenerMap The listener list map.\n * @param type The event type to get.\n */\n\n\nfunction ensureListenerList(listenerMap, type) {\n  var _a;\n\n  return (_a = listenerMap[type]) !== null && _a !== void 0 ? _a : listenerMap[type] = {\n    attrCallback: undefined,\n    attrListener: undefined,\n    cow: false,\n    listeners: []\n  };\n}\n/**\n * An implementation of the `EventTarget` interface.\n * @see https://dom.spec.whatwg.org/#eventtarget\n */\n\n\nvar EventTarget = /*#__PURE__*/function () {\n  /**\n   * Initialize this instance.\n   */\n  function EventTarget() {\n    _classCallCheck__default['default'](this, EventTarget);\n\n    internalDataMap$2.set(this, createListenerListMap());\n  } // Implementation\n\n\n  _createClass__default['default'](EventTarget, [{\n    key: \"addEventListener\",\n    value: function addEventListener(type0, callback0, options0) {\n      var listenerMap = $$2(this);\n\n      var _normalizeAddOptions = normalizeAddOptions(type0, callback0, options0),\n          callback = _normalizeAddOptions.callback,\n          capture = _normalizeAddOptions.capture,\n          once = _normalizeAddOptions.once,\n          passive = _normalizeAddOptions.passive,\n          signal = _normalizeAddOptions.signal,\n          type = _normalizeAddOptions.type;\n\n      if (callback == null || (signal === null || signal === void 0 ? void 0 : signal.aborted)) {\n        return;\n      }\n\n      var list = ensureListenerList(listenerMap, type); // Find existing listener.\n\n      var i = findIndexOfListener(list, callback, capture);\n\n      if (i !== -1) {\n        warnDuplicate(list.listeners[i], passive, once, signal);\n        return;\n      } // Add the new listener.\n\n\n      addListener(list, callback, capture, passive, once, signal);\n    } // Implementation\n\n  }, {\n    key: \"removeEventListener\",\n    value: function removeEventListener(type0, callback0, options0) {\n      var listenerMap = $$2(this);\n\n      var _normalizeOptions = normalizeOptions(type0, callback0, options0),\n          callback = _normalizeOptions.callback,\n          capture = _normalizeOptions.capture,\n          type = _normalizeOptions.type;\n\n      var list = listenerMap[type];\n\n      if (callback != null && list) {\n        removeListener(list, callback, capture);\n      }\n    } // Implementation\n\n  }, {\n    key: \"dispatchEvent\",\n    value: function dispatchEvent(e) {\n      var list = $$2(this)[String(e.type)];\n\n      if (list == null) {\n        return true;\n      }\n\n      var event = e instanceof Event ? e : EventWrapper.wrap(e);\n      var eventData = $(event, \"event\");\n\n      if (eventData.dispatchFlag) {\n        throw createInvalidStateError(\"This event has been in dispatching.\");\n      }\n\n      eventData.dispatchFlag = true;\n      eventData.target = eventData.currentTarget = this;\n\n      if (!eventData.stopPropagationFlag) {\n        var cow = list.cow,\n            listeners = list.listeners; // Set copy-on-write flag.\n\n        list.cow = true; // Call listeners.\n\n        for (var _i5 = 0; _i5 < listeners.length; ++_i5) {\n          var listener = listeners[_i5]; // Skip if removed.\n\n          if (isRemoved(listener)) {\n            continue;\n          } // Remove this listener if has the `once` flag.\n\n\n          if (isOnce(listener) && removeListenerAt(list, _i5, !cow)) {\n            // Because this listener was removed, the next index is the\n            // same as the current value.\n            _i5 -= 1;\n          } // Call this listener with the `passive` flag.\n\n\n          eventData.inPassiveListenerFlag = isPassive(listener);\n          invokeCallback(listener, this, event);\n          eventData.inPassiveListenerFlag = false; // Stop if the `event.stopImmediatePropagation()` method was called.\n\n          if (eventData.stopImmediatePropagationFlag) {\n            break;\n          }\n        } // Restore copy-on-write flag.\n\n\n        if (!cow) {\n          list.cow = false;\n        }\n      }\n\n      eventData.target = null;\n      eventData.currentTarget = null;\n      eventData.stopImmediatePropagationFlag = false;\n      eventData.stopPropagationFlag = false;\n      eventData.dispatchFlag = false;\n      return !eventData.canceledFlag;\n    }\n  }]);\n\n  return EventTarget;\n}();\n/**\n * Internal data.\n */\n\n\nvar internalDataMap$2 = new WeakMap();\n/**\n * Get private data.\n * @param target The event target object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\n\nfunction $$2(target) {\n  var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"this\";\n  var retv = internalDataMap$2.get(target);\n  assertType(retv != null, \"'%s' must be an object that EventTarget constructor created, but got another one: %o\", name, target);\n  return retv;\n}\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\n\n\nfunction normalizeAddOptions(type, callback, options) {\n  var _a;\n\n  assertCallback(callback);\n\n  if (_typeof__default['default'](options) === \"object\" && options !== null) {\n    return {\n      type: String(type),\n      callback: callback !== null && callback !== void 0 ? callback : undefined,\n      capture: Boolean(options.capture),\n      passive: Boolean(options.passive),\n      once: Boolean(options.once),\n      signal: (_a = options.signal) !== null && _a !== void 0 ? _a : undefined\n    };\n  }\n\n  return {\n    type: String(type),\n    callback: callback !== null && callback !== void 0 ? callback : undefined,\n    capture: Boolean(options),\n    passive: false,\n    once: false,\n    signal: undefined\n  };\n}\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\n\n\nfunction normalizeOptions(type, callback, options) {\n  assertCallback(callback);\n\n  if (_typeof__default['default'](options) === \"object\" && options !== null) {\n    return {\n      type: String(type),\n      callback: callback !== null && callback !== void 0 ? callback : undefined,\n      capture: Boolean(options.capture)\n    };\n  }\n\n  return {\n    type: String(type),\n    callback: callback !== null && callback !== void 0 ? callback : undefined,\n    capture: Boolean(options)\n  };\n}\n/**\n * Assert the type of 'callback' argument.\n * @param callback The callback to check.\n */\n\n\nfunction assertCallback(callback) {\n  if (typeof callback === \"function\" || _typeof__default['default'](callback) === \"object\" && callback !== null && typeof callback.handleEvent === \"function\") {\n    return;\n  }\n\n  if (callback == null || _typeof__default['default'](callback) === \"object\") {\n    InvalidEventListener.warn(callback);\n    return;\n  }\n\n  throw new TypeError(format(InvalidEventListener.message, [callback]));\n}\n/**\n * Print warning for duplicated.\n * @param listener The current listener that is duplicated.\n * @param passive The passive flag of the new duplicated listener.\n * @param once The once flag of the new duplicated listener.\n * @param signal The signal object of the new duplicated listener.\n */\n\n\nfunction warnDuplicate(listener, passive, once, signal) {\n  EventListenerWasDuplicated.warn(isCapture(listener) ? \"capture\" : \"bubble\", listener.callback);\n\n  if (isPassive(listener) !== passive) {\n    OptionWasIgnored.warn(\"passive\");\n  }\n\n  if (isOnce(listener) !== once) {\n    OptionWasIgnored.warn(\"once\");\n  }\n\n  if (listener.signal !== signal) {\n    OptionWasIgnored.warn(\"signal\");\n  }\n} // Set enumerable\n\n\nvar keys$1 = Object.getOwnPropertyNames(EventTarget.prototype);\n\nfor (var _i6 = 0; _i6 < keys$1.length; ++_i6) {\n  if (keys$1[_i6] === \"constructor\") {\n    continue;\n  }\n\n  Object.defineProperty(EventTarget.prototype, keys$1[_i6], {\n    enumerable: true\n  });\n} // Ensure `eventTarget instanceof window.EventTarget` is `true`.\n\n\nif (typeof Global !== \"undefined\" && typeof Global.EventTarget !== \"undefined\") {\n  Object.setPrototypeOf(EventTarget.prototype, Global.EventTarget.prototype);\n}\n/**\n * Get the current value of a given event attribute.\n * @param target The `EventTarget` object to get.\n * @param type The event type.\n */\n\n\nfunction getEventAttributeValue(target, type) {\n  var _a, _b;\n\n  var listMap = $$2(target, \"target\");\n  return (_b = (_a = listMap[type]) === null || _a === void 0 ? void 0 : _a.attrCallback) !== null && _b !== void 0 ? _b : null;\n}\n/**\n * Set an event listener to a given event attribute.\n * @param target The `EventTarget` object to set.\n * @param type The event type.\n * @param callback The event listener.\n */\n\n\nfunction setEventAttributeValue(target, type, callback) {\n  if (callback != null && typeof callback !== \"function\") {\n    InvalidAttributeHandler.warn(callback);\n  }\n\n  if (typeof callback === \"function\" || _typeof__default['default'](callback) === \"object\" && callback !== null) {\n    upsertEventAttributeListener(target, type, callback);\n  } else {\n    removeEventAttributeListener(target, type);\n  }\n} //------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Update or insert the given event attribute handler.\n * @param target The `EventTarget` object to set.\n * @param type The event type.\n * @param callback The event listener.\n */\n\n\nfunction upsertEventAttributeListener(target, type, callback) {\n  var list = ensureListenerList($$2(target, \"target\"), String(type));\n  list.attrCallback = callback;\n\n  if (list.attrListener == null) {\n    list.attrListener = addListener(list, defineEventAttributeCallback(list), false, false, false, undefined);\n  }\n}\n/**\n * Remove the given event attribute handler.\n * @param target The `EventTarget` object to remove.\n * @param type The event type.\n * @param callback The event listener.\n */\n\n\nfunction removeEventAttributeListener(target, type) {\n  var listMap = $$2(target, \"target\");\n  var list = listMap[String(type)];\n\n  if (list && list.attrListener) {\n    removeListener(list, list.attrListener.callback, false);\n    list.attrCallback = list.attrListener = undefined;\n  }\n}\n/**\n * Define the callback function for the given listener list object.\n * It calls `attrCallback` property if the property value is a function.\n * @param list The `ListenerList` object.\n */\n\n\nfunction defineEventAttributeCallback(list) {\n  return function (event) {\n    var callback = list.attrCallback;\n\n    if (typeof callback === \"function\") {\n      callback.call(this, event);\n    }\n  };\n}\n/**\n * Define an `EventTarget` class that has event attibutes.\n * @param types The types to define event attributes.\n * @deprecated Use `getEventAttributeValue`/`setEventAttributeValue` pair on your derived class instead because of static analysis friendly.\n */\n\n\nfunction defineCustomEventTarget() {\n  var CustomEventTarget = /*#__PURE__*/function (_EventTarget) {\n    _inherits__default['default'](CustomEventTarget, _EventTarget);\n\n    var _super4 = _createSuper(CustomEventTarget);\n\n    function CustomEventTarget() {\n      _classCallCheck__default['default'](this, CustomEventTarget);\n\n      return _super4.apply(this, arguments);\n    }\n\n    return CustomEventTarget;\n  }(EventTarget);\n\n  for (var _i7 = 0; _i7 < arguments.length; ++_i7) {\n    defineEventAttribute(CustomEventTarget.prototype, _i7 < 0 || arguments.length <= _i7 ? undefined : arguments[_i7]);\n  }\n\n  return CustomEventTarget;\n}\n/**\n * Define an event attribute.\n * @param target The `EventTarget` object to define an event attribute.\n * @param type The event type to define.\n * @param _eventClass Unused, but to infer `Event` class type.\n * @deprecated Use `getEventAttributeValue`/`setEventAttributeValue` pair on your derived class instead because of static analysis friendly.\n */\n\n\nfunction defineEventAttribute(target, type, _eventClass) {\n  Object.defineProperty(target, \"on\".concat(type), {\n    get: function get() {\n      return getEventAttributeValue(this, type);\n    },\n    set: function set(value) {\n      setEventAttributeValue(this, type, value);\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n\nexports.Event = Event;\nexports.EventTarget = EventTarget;\nexports.default = EventTarget;\nexports.defineCustomEventTarget = defineCustomEventTarget;\nexports.defineEventAttribute = defineEventAttribute;\nexports.getEventAttributeValue = getEventAttributeValue;\nexports.setErrorHandler = setErrorHandler;\nexports.setEventAttributeValue = setEventAttributeValue;\nexports.setWarningHandler = setWarningHandler;\n","export default function(array, extras) {\n  const map = {\n    ...[].reduce.call(\n      array,\n      (map, value, index) => {\n        map[index] = value;\n\n        return map;\n      },\n      {}\n    ),\n    ...extras,\n    length: array.length,\n    [Symbol.iterator]: () => [].slice.call(map)[Symbol.iterator]()\n  };\n\n  return map;\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { v4 as uuid } from \"uuid\";\r\n\r\nconst createGuid: () => string = (): string => {\r\n    return uuid();\r\n};\r\n\r\nconst createNoDashGuid: () => string = (): string => {\r\n    return createGuid().replace(new RegExp(\"-\", \"g\"), \"\").toUpperCase();\r\n};\r\n\r\nexport { createGuid, createNoDashGuid };\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { createNoDashGuid } from \"./Guid\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\n\r\nexport enum EventType {\r\n    Debug,\r\n    Info,\r\n    Warning,\r\n    Error,\r\n}\r\n\r\nexport class PlatformEvent {\r\n    private privName: string;\r\n    private privEventId: string;\r\n    private privEventTime: string;\r\n    private privEventType: EventType;\r\n    private privMetadata: IStringDictionary<string>;\r\n\r\n    constructor(eventName: string, eventType: EventType) {\r\n        this.privName = eventName;\r\n        this.privEventId = createNoDashGuid();\r\n        this.privEventTime = new Date().toISOString();\r\n        this.privEventType = eventType;\r\n        this.privMetadata = { };\r\n    }\r\n\r\n    public get name(): string {\r\n        return this.privName;\r\n    }\r\n\r\n    public get eventId(): string {\r\n        return this.privEventId;\r\n    }\r\n\r\n    public get eventTime(): string {\r\n        return this.privEventTime;\r\n    }\r\n\r\n    public get eventType(): EventType {\r\n        return this.privEventType;\r\n    }\r\n\r\n    public get metadata(): IStringDictionary<string> {\r\n        return this.privMetadata;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class AudioSourceEvent extends PlatformEvent {\r\n    private privAudioSourceId: string;\r\n\r\n    constructor(eventName: string, audioSourceId: string, eventType: EventType = EventType.Info) {\r\n        super(eventName, eventType);\r\n        this.privAudioSourceId = audioSourceId;\r\n    }\r\n\r\n    public get audioSourceId(): string {\r\n        return this.privAudioSourceId;\r\n    }\r\n}\r\n\r\nexport class AudioSourceInitializingEvent extends AudioSourceEvent {\r\n    constructor(audioSourceId: string) {\r\n        super(\"AudioSourceInitializingEvent\", audioSourceId);\r\n    }\r\n}\r\n\r\nexport class AudioSourceReadyEvent extends AudioSourceEvent {\r\n    constructor(audioSourceId: string) {\r\n        super(\"AudioSourceReadyEvent\", audioSourceId);\r\n    }\r\n}\r\n\r\nexport class AudioSourceOffEvent extends AudioSourceEvent {\r\n    constructor(audioSourceId: string) {\r\n        super(\"AudioSourceOffEvent\", audioSourceId);\r\n    }\r\n}\r\n\r\nexport class AudioSourceErrorEvent extends AudioSourceEvent {\r\n    private privError: string;\r\n\r\n    constructor(audioSourceId: string, error: string) {\r\n        super(\"AudioSourceErrorEvent\", audioSourceId, EventType.Error);\r\n        this.privError = error;\r\n    }\r\n\r\n    public get error(): string {\r\n        return this.privError;\r\n    }\r\n}\r\n\r\nexport class AudioStreamNodeEvent extends AudioSourceEvent {\r\n    private privAudioNodeId: string;\r\n\r\n    constructor(eventName: string, audioSourceId: string, audioNodeId: string) {\r\n        super(eventName, audioSourceId);\r\n        this.privAudioNodeId = audioNodeId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n}\r\n\r\nexport class AudioStreamNodeAttachingEvent extends AudioStreamNodeEvent {\r\n    constructor(audioSourceId: string, audioNodeId: string) {\r\n        super(\"AudioStreamNodeAttachingEvent\", audioSourceId, audioNodeId);\r\n    }\r\n}\r\n\r\nexport class AudioStreamNodeAttachedEvent extends AudioStreamNodeEvent {\r\n    constructor(audioSourceId: string, audioNodeId: string) {\r\n        super(\"AudioStreamNodeAttachedEvent\", audioSourceId, audioNodeId);\r\n    }\r\n}\r\n\r\nexport class AudioStreamNodeDetachedEvent extends AudioStreamNodeEvent {\r\n    constructor(audioSourceId: string, audioNodeId: string) {\r\n        super(\"AudioStreamNodeDetachedEvent\", audioSourceId, audioNodeId);\r\n    }\r\n}\r\n\r\nexport class AudioStreamNodeErrorEvent extends AudioStreamNodeEvent {\r\n    private privError: string;\r\n\r\n    constructor(audioSourceId: string, audioNodeId: string, error: string) {\r\n        super(\"AudioStreamNodeErrorEvent\", audioSourceId, audioNodeId);\r\n        this.privError = error;\r\n    }\r\n\r\n    public get error(): string {\r\n        return this.privError;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { ConnectionMessage } from \"./ConnectionMessage\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class ServiceEvent extends PlatformEvent {\r\n    private privJsonResult: string;\r\n\r\n    constructor(eventName: string, jsonstring: string, eventType: EventType = EventType.Info) {\r\n      super(eventName, eventType);\r\n      this.privJsonResult = jsonstring;\r\n    }\r\n\r\n    public get jsonString(): string {\r\n        return this.privJsonResult;\r\n    }\r\n}\r\n\r\nexport class ConnectionEvent extends PlatformEvent {\r\n    private privConnectionId: string;\r\n\r\n    constructor(eventName: string, connectionId: string, eventType: EventType = EventType.Info) {\r\n        super(eventName, eventType);\r\n        this.privConnectionId = connectionId;\r\n    }\r\n\r\n    public get connectionId(): string {\r\n        return this.privConnectionId;\r\n    }\r\n}\r\n\r\nexport class ConnectionStartEvent extends ConnectionEvent {\r\n    private privUri: string;\r\n    private privHeaders: IStringDictionary<string>;\r\n\r\n    constructor(connectionId: string, uri: string, headers?: IStringDictionary<string>) {\r\n        super(\"ConnectionStartEvent\", connectionId);\r\n        this.privUri = uri;\r\n        this.privHeaders = headers;\r\n    }\r\n\r\n    public get uri(): string {\r\n        return this.privUri;\r\n    }\r\n\r\n    public get headers(): IStringDictionary<string> {\r\n        return this.privHeaders;\r\n    }\r\n}\r\n\r\nexport class ConnectionEstablishedEvent extends ConnectionEvent {\r\n    constructor(connectionId: string, metadata?: IStringDictionary<string>) {\r\n        super(\"ConnectionEstablishedEvent\", connectionId);\r\n    }\r\n}\r\n\r\nexport class ConnectionClosedEvent extends ConnectionEvent {\r\n    private privReason: string;\r\n    private privStatusCode: number;\r\n\r\n    constructor(connectionId: string, statusCode: number, reason: string) {\r\n        super(\"ConnectionClosedEvent\", connectionId, EventType.Debug);\r\n        this.privReason = reason;\r\n        this.privStatusCode = statusCode;\r\n    }\r\n\r\n    public get reason(): string {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get statusCode(): number {\r\n        return this.privStatusCode;\r\n    }\r\n}\r\n\r\nexport class ConnectionErrorEvent extends ConnectionEvent {\r\n    private readonly privMessage: string;\r\n    private readonly privType: string;\r\n\r\n    constructor(connectionId: string, message: string, type: string) {\r\n        super(\"ConnectionErrorEvent\", connectionId, EventType.Debug);\r\n        this.privMessage = message;\r\n        this.privType = type;\r\n    }\r\n\r\n    public get message(): string {\r\n        return this.privMessage;\r\n    }\r\n\r\n    public get type(): string {\r\n        return this.privType;\r\n    }\r\n}\r\n\r\nexport class ConnectionEstablishErrorEvent extends ConnectionEvent {\r\n    private privStatusCode: number;\r\n    private privReason: string;\r\n\r\n    constructor(connectionId: string, statuscode: number, reason: string) {\r\n        super(\"ConnectionEstablishErrorEvent\", connectionId, EventType.Error);\r\n        this.privStatusCode = statuscode;\r\n        this.privReason = reason;\r\n    }\r\n\r\n    public get reason(): string {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get statusCode(): number {\r\n        return this.privStatusCode;\r\n    }\r\n}\r\n\r\nexport class ConnectionMessageReceivedEvent extends ConnectionEvent {\r\n    private privNetworkReceivedTime: string;\r\n    private privMessage: ConnectionMessage;\r\n\r\n    constructor(connectionId: string, networkReceivedTimeISO: string, message: ConnectionMessage) {\r\n        super(\"ConnectionMessageReceivedEvent\", connectionId);\r\n        this.privNetworkReceivedTime = networkReceivedTimeISO;\r\n        this.privMessage = message;\r\n    }\r\n\r\n    public get networkReceivedTime(): string {\r\n        return this.privNetworkReceivedTime;\r\n    }\r\n\r\n    public get message(): ConnectionMessage {\r\n        return this.privMessage;\r\n    }\r\n}\r\n\r\nexport class ConnectionMessageSentEvent extends ConnectionEvent {\r\n    private privNetworkSentTime: string;\r\n    private privMessage: ConnectionMessage;\r\n\r\n    constructor(connectionId: string, networkSentTimeISO: string, message: ConnectionMessage) {\r\n        super(\"ConnectionMessageSentEvent\", connectionId);\r\n        this.privNetworkSentTime = networkSentTimeISO;\r\n        this.privMessage = message;\r\n    }\r\n\r\n    public get networkSentTime(): string {\r\n        return this.privNetworkSentTime;\r\n    }\r\n\r\n    public get message(): ConnectionMessage {\r\n        return this.privMessage;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\n/**\r\n * The error that is thrown when an argument passed in is null.\r\n *\r\n * @export\r\n * @class ArgumentNullError\r\n * @extends {Error}\r\n */\r\nexport class ArgumentNullError extends Error {\r\n\r\n    /**\r\n     * Creates an instance of ArgumentNullError.\r\n     *\r\n     * @param {string} argumentName - Name of the argument that is null\r\n     *\r\n     * @memberOf ArgumentNullError\r\n     */\r\n    public constructor(argumentName: string) {\r\n        super(argumentName);\r\n        this.name = \"ArgumentNull\";\r\n        this.message = argumentName;\r\n    }\r\n}\r\n\r\n/**\r\n * The error that is thrown when an invalid operation is performed in the code.\r\n *\r\n * @export\r\n * @class InvalidOperationError\r\n * @extends {Error}\r\n */\r\nexport class InvalidOperationError extends Error {\r\n\r\n    /**\r\n     * Creates an instance of InvalidOperationError.\r\n     *\r\n     * @param {string} error - The error\r\n     *\r\n     * @memberOf InvalidOperationError\r\n     */\r\n    public constructor(error: string) {\r\n        super(error);\r\n        this.name = \"InvalidOperation\";\r\n        this.message = error;\r\n    }\r\n}\r\n\r\n/**\r\n * The error that is thrown when an object is disposed.\r\n *\r\n * @export\r\n * @class ObjectDisposedError\r\n * @extends {Error}\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ObjectDisposedError extends Error {\r\n\r\n    /**\r\n     * Creates an instance of ObjectDisposedError.\r\n     *\r\n     * @param {string} objectName - The object that is disposed\r\n     * @param {string} error - The error\r\n     *\r\n     * @memberOf ObjectDisposedError\r\n     */\r\n    public constructor(objectName: string, error?: string) {\r\n        super(error);\r\n        this.name = objectName + \"ObjectDisposed\";\r\n        this.message = error;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { InvalidOperationError } from \"./Error\";\r\nimport { createNoDashGuid } from \"./Guid\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\n\r\nexport enum MessageType {\r\n    Text,\r\n    Binary,\r\n}\r\n\r\nexport class ConnectionMessage {\r\n\r\n    private privMessageType: MessageType;\r\n    private privHeaders: IStringDictionary<string>;\r\n    private privBody: any = null;\r\n    private privSize: number;\r\n\r\n    private privId: string;\r\n\r\n    public constructor(\r\n        messageType: MessageType,\r\n        body: any,\r\n        headers?: IStringDictionary<string>,\r\n        id?: string) {\r\n\r\n        if (messageType === MessageType.Text && body && !(typeof (body) === \"string\")) {\r\n            throw new InvalidOperationError(\"Payload must be a string\");\r\n        }\r\n\r\n        if (messageType === MessageType.Binary && body && !(body instanceof ArrayBuffer)) {\r\n            throw new InvalidOperationError(\"Payload must be ArrayBuffer\");\r\n        }\r\n\r\n        this.privMessageType = messageType;\r\n        this.privBody = body;\r\n        this.privHeaders = headers ? headers : {};\r\n        this.privId = id ? id : createNoDashGuid();\r\n        switch (this.messageType) {\r\n            case MessageType.Binary:\r\n                this.privSize = this.binaryBody !== null ? this.binaryBody.byteLength : 0;\r\n                break;\r\n            case MessageType.Text:\r\n                this.privSize = this.textBody.length;\r\n        }\r\n    }\r\n\r\n    public get messageType(): MessageType {\r\n        return this.privMessageType;\r\n    }\r\n\r\n    public get headers(): IStringDictionary<string> {\r\n        return this.privHeaders;\r\n    }\r\n\r\n    public get body(): any {\r\n        return this.privBody;\r\n    }\r\n\r\n    public get textBody(): string {\r\n        if (this.privMessageType === MessageType.Binary) {\r\n            throw new InvalidOperationError(\"Not supported for binary message\");\r\n        }\r\n\r\n        return this.privBody as string;\r\n    }\r\n\r\n    public get binaryBody(): ArrayBuffer {\r\n        if (this.privMessageType === MessageType.Text) {\r\n            throw new InvalidOperationError(\"Not supported for text message\");\r\n        }\r\n\r\n        return this.privBody;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport class ConnectionOpenResponse {\r\n    private privStatusCode: number;\r\n    private privReason: string;\r\n\r\n    constructor(statusCode: number, reason: string) {\r\n        this.privStatusCode = statusCode;\r\n        this.privReason = reason;\r\n    }\r\n\r\n    public get statusCode(): number {\r\n        return this.privStatusCode;\r\n    }\r\n\r\n    public get reason(): string {\r\n        return this.privReason;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { AgentConfig } from \"../common.speech/Exports\";\r\nimport { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class DialogEvent extends PlatformEvent {\r\n\r\n    constructor(eventName: string, eventType: EventType = EventType.Info) {\r\n        super(eventName, eventType);\r\n    }\r\n}\r\n\r\nexport class SendingAgentContextMessageEvent extends DialogEvent {\r\n    private privAgentConfig: AgentConfig;\r\n\r\n    constructor(agentConfig: AgentConfig) {\r\n        super(\"SendingAgentContextMessageEvent\");\r\n        this.privAgentConfig = agentConfig;\r\n    }\r\n\r\n    public get agentConfig(): AgentConfig {\r\n        return this.privAgentConfig;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ObjectDisposedError } from \"./Error\";\r\nimport { createNoDashGuid } from \"./Guid\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IEventListener, IEventSource } from \"./IEventSource\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class EventSource<TEvent extends PlatformEvent> implements IEventSource<TEvent> {\r\n    private privEventListeners: IStringDictionary<(event: TEvent) => void> = {};\r\n    private privMetadata: IStringDictionary<string>;\r\n    private privIsDisposed: boolean = false;\r\n\r\n    constructor(metadata?: IStringDictionary<string>) {\r\n        this.privMetadata = metadata;\r\n    }\r\n\r\n    public onEvent = (event: TEvent): void => {\r\n        if (this.isDisposed()) {\r\n            throw (new ObjectDisposedError(\"EventSource\"));\r\n        }\r\n\r\n        if (this.metadata) {\r\n            for (const paramName in this.metadata) {\r\n                if (paramName) {\r\n                    if (event.metadata) {\r\n                        if (!event.metadata[paramName]) {\r\n                            event.metadata[paramName] = this.metadata[paramName];\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        for (const eventId in this.privEventListeners) {\r\n            if (eventId && this.privEventListeners[eventId]) {\r\n                this.privEventListeners[eventId](event);\r\n            }\r\n        }\r\n    }\r\n\r\n    public attach = (onEventCallback: (event: TEvent) => void): IDetachable => {\r\n        const id = createNoDashGuid();\r\n        this.privEventListeners[id] = onEventCallback;\r\n        return {\r\n            detach: () => {\r\n                delete this.privEventListeners[id];\r\n                return Promise.resolve();\r\n            },\r\n        };\r\n    }\r\n\r\n    public attachListener = (listener: IEventListener<TEvent>): IDetachable => {\r\n        return this.attach(listener.onEvent);\r\n    }\r\n\r\n    public isDisposed = (): boolean => {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public dispose = (): void => {\r\n        this.privEventListeners = null;\r\n        this.privIsDisposed = true;\r\n    }\r\n\r\n    public get metadata(): IStringDictionary<string> {\r\n        return this.privMetadata;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ArgumentNullError } from \"./Error\";\r\nimport { EventSource } from \"./EventSource\";\r\nimport { IEventSource } from \"./IEventSource\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class Events {\r\n    private static privInstance: IEventSource<PlatformEvent> = new EventSource<PlatformEvent>();\r\n\r\n    public static setEventSource = (eventSource: IEventSource<PlatformEvent>): void => {\r\n        if (!eventSource) {\r\n            throw new ArgumentNullError(\"eventSource\");\r\n        }\r\n\r\n        Events.privInstance = eventSource;\r\n    }\r\n\r\n    public static get instance(): IEventSource<PlatformEvent> {\r\n        return Events.privInstance;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ISpeechConfigAudioDevice } from \"../common.speech/Exports\";\r\nimport { AudioStreamFormatImpl } from \"../sdk/Audio/AudioStreamFormat\";\r\nimport { AudioSourceEvent } from \"./AudioSourceEvents\";\r\nimport { EventSource } from \"./EventSource\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStreamChunk } from \"./Stream\";\r\n\r\nexport interface IAudioSource {\r\n    id(): string;\r\n    turnOn(): Promise<void>;\r\n    attach(audioNodeId: string): Promise<IAudioStreamNode>;\r\n    detach(audioNodeId: string): void;\r\n    turnOff(): Promise<void>;\r\n    events: EventSource<AudioSourceEvent>;\r\n    format: Promise<AudioStreamFormatImpl>;\r\n    deviceInfo: Promise<ISpeechConfigAudioDevice>;\r\n    blob: Promise<Blob | Buffer>;\r\n    setProperty?(name: string, value: string): void;\r\n    getProperty?(name: string, def?: string): string;\r\n}\r\n\r\nexport interface IAudioStreamNode extends IDetachable {\r\n    id(): string;\r\n    read(): Promise<IStreamChunk<ArrayBuffer>>;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ConnectionEvent } from \"./ConnectionEvents\";\r\nimport { ConnectionMessage } from \"./ConnectionMessage\";\r\nimport { ConnectionOpenResponse } from \"./ConnectionOpenResponse\";\r\nimport { EventSource } from \"./EventSource\";\r\n\r\nexport enum ConnectionState {\r\n    None,\r\n    Connected,\r\n    Connecting,\r\n    Disconnected,\r\n}\r\n\r\nexport interface IConnection {\r\n    id: string;\r\n    state(): ConnectionState;\r\n    open(): Promise<ConnectionOpenResponse>;\r\n    send(message: ConnectionMessage): Promise<void>;\r\n    read(): Promise<ConnectionMessage>;\r\n    events: EventSource<ConnectionEvent>;\r\n    dispose(disposing?: string): Promise<void>;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport interface IDetachable {\r\n    detach(): Promise<void>;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport interface IStringDictionary<TValue> {\r\n    [propName: string]: TValue;\r\n}\r\n\r\nexport interface INumberDictionary<TValue> extends Object {\r\n    [propName: number]: TValue;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * @export\r\n * @interface IDisposable\r\n */\r\nexport interface IDisposable {\r\n\r\n    /**\r\n     * @returns {boolean}\r\n     *\r\n     * @memberOf IDisposable\r\n     */\r\n    isDisposed(): boolean;\r\n\r\n    /**\r\n     * Performs cleanup operations on this instance\r\n     *\r\n     * @param {string} [reason] - optional reason for disposing the instance.\r\n     * This will be used to throw errors when a operations are performed on the disposed object.\r\n     *\r\n     * @memberOf IDisposable\r\n     */\r\n    dispose(reason?: string): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IDisposable } from \"./IDisposable\";\r\nimport { PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport interface IEventListener<TEvent extends PlatformEvent> {\r\n    onEvent(e: TEvent): void;\r\n}\r\n\r\nexport interface IEventSource<TEvent extends PlatformEvent> extends IDisposable {\r\n    metadata: IStringDictionary<string>;\r\n\r\n    onEvent(e: TEvent): void;\r\n\r\n    attach(onEventCallback: (event: TEvent) => void): IDetachable;\r\n\r\n    attachListener(listener: IEventListener<TEvent>): IDetachable;\r\n}\r\n","\n\n//# sourceMappingURL=IErrorMessages.js.map\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport interface ITimer {\r\n    /**\r\n     * start timer\r\n     *\r\n     * @param {number} delay\r\n     * @param {(...args: any[]) => any} successCallback\r\n     * @returns {*}\r\n     *\r\n     * @memberOf ITimer\r\n     */\r\n    start(): void;\r\n\r\n    /**\r\n     * stops timer\r\n     *\r\n     * @param {*} timerId\r\n     *\r\n     * @memberOf ITimer\r\n     */\r\n    stop(): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ConnectionMessage } from \"./ConnectionMessage\";\r\nimport { RawWebsocketMessage } from \"./RawWebsocketMessage\";\r\n\r\nexport interface IWebsocketMessageFormatter {\r\n    toConnectionMessage(message: RawWebsocketMessage): Promise<ConnectionMessage>;\r\n    fromConnectionMessage(message: ConnectionMessage): Promise<RawWebsocketMessage>;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ObjectDisposedError } from \"./Error\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IStringDictionary } from \"./IDictionary\";\r\nimport { IDisposable } from \"./IDisposable\";\r\n\r\nexport interface IList<TItem> extends IDisposable {\r\n    get(itemIndex: number): TItem;\r\n    first(): TItem;\r\n    last(): TItem;\r\n\r\n    add(item: TItem): void;\r\n    insertAt(index: number, item: TItem): void;\r\n\r\n    removeFirst(): TItem;\r\n    removeLast(): TItem;\r\n    removeAt(index: number): TItem;\r\n    remove(index: number, count: number): TItem[];\r\n    clear(): void;\r\n\r\n    length(): number;\r\n\r\n    onAdded(addedCallback: () => void): IDetachable;\r\n    onRemoved(removedCallback: () => void): IDetachable;\r\n    onDisposed(disposedCallback: () => void): IDetachable;\r\n\r\n    join(seperator?: string): string;\r\n\r\n    toArray(): TItem[];\r\n\r\n    any(callback?: (item: TItem, index: number) => boolean): boolean;\r\n    all(callback: (item: TItem) => boolean): boolean;\r\n    forEach(callback: (item: TItem, index: number) => void): void;\r\n    select<T2>(callback: (item: TItem, index: number) => T2): List<T2>;\r\n    where(callback: (item: TItem, index: number) => boolean): List<TItem>;\r\n    orderBy(compareFn: (a: TItem, b: TItem) => number): List<TItem>;\r\n    orderByDesc(compareFn: (a: TItem, b: TItem) => number): List<TItem>;\r\n    clone(): List<TItem>;\r\n    concat(list: List<TItem>): List<TItem>;\r\n    concatArray(array: TItem[]): List<TItem>;\r\n}\r\n\r\nexport class List<TItem> implements IList<TItem>  {\r\n    private privList: TItem[];\r\n    private privSubscriptionIdCounter: number = 0;\r\n    private privAddSubscriptions: IStringDictionary<() => void> = {};\r\n    private privRemoveSubscriptions: IStringDictionary<() => void> = {};\r\n    private privDisposedSubscriptions: IStringDictionary<() => void> = {};\r\n    private privDisposeReason: string = null;\r\n\r\n    public constructor(list?: TItem[]) {\r\n        this.privList = [];\r\n        // copy the list rather than taking as is.\r\n        if (list) {\r\n            for (const item of list) {\r\n                this.privList.push(item);\r\n            }\r\n        }\r\n    }\r\n\r\n    public get = (itemIndex: number): TItem => {\r\n        this.throwIfDisposed();\r\n        return this.privList[itemIndex];\r\n    }\r\n\r\n    public first = (): TItem => {\r\n        return this.get(0);\r\n    }\r\n\r\n    public last = (): TItem => {\r\n        return this.get(this.length() - 1);\r\n    }\r\n\r\n    public add = (item: TItem): void => {\r\n        this.throwIfDisposed();\r\n        this.insertAt(this.privList.length, item);\r\n    }\r\n\r\n    public insertAt = (index: number, item: TItem): void => {\r\n        this.throwIfDisposed();\r\n        if (index === 0) {\r\n            this.privList.unshift(item);\r\n        } else if (index === this.privList.length) {\r\n            this.privList.push(item);\r\n        } else {\r\n            this.privList.splice(index, 0, item);\r\n        }\r\n        this.triggerSubscriptions(this.privAddSubscriptions);\r\n    }\r\n\r\n    public removeFirst = (): TItem => {\r\n        this.throwIfDisposed();\r\n        return this.removeAt(0);\r\n    }\r\n\r\n    public removeLast = (): TItem => {\r\n        this.throwIfDisposed();\r\n        return this.removeAt(this.length() - 1);\r\n    }\r\n\r\n    public removeAt = (index: number): TItem => {\r\n        this.throwIfDisposed();\r\n        return this.remove(index, 1)[0];\r\n    }\r\n\r\n    public remove = (index: number, count: number): TItem[] => {\r\n        this.throwIfDisposed();\r\n        const removedElements = this.privList.splice(index, count);\r\n        this.triggerSubscriptions(this.privRemoveSubscriptions);\r\n        return removedElements;\r\n    }\r\n\r\n    public clear = (): void => {\r\n        this.throwIfDisposed();\r\n        this.remove(0, this.length());\r\n    }\r\n\r\n    public length = (): number => {\r\n        this.throwIfDisposed();\r\n        return this.privList.length;\r\n    }\r\n\r\n    public onAdded = (addedCallback: () => void): IDetachable => {\r\n        this.throwIfDisposed();\r\n        const subscriptionId = this.privSubscriptionIdCounter++;\r\n\r\n        this.privAddSubscriptions[subscriptionId] = addedCallback;\r\n\r\n        return {\r\n            detach: () => {\r\n                delete this.privAddSubscriptions[subscriptionId];\r\n                return Promise.resolve();\r\n            },\r\n        };\r\n    }\r\n\r\n    public onRemoved = (removedCallback: () => void): IDetachable => {\r\n        this.throwIfDisposed();\r\n        const subscriptionId = this.privSubscriptionIdCounter++;\r\n\r\n        this.privRemoveSubscriptions[subscriptionId] = removedCallback;\r\n\r\n        return {\r\n            detach: () => {\r\n                delete this.privRemoveSubscriptions[subscriptionId];\r\n                return Promise.resolve();\r\n            },\r\n        };\r\n    }\r\n\r\n    public onDisposed = (disposedCallback: () => void): IDetachable => {\r\n        this.throwIfDisposed();\r\n        const subscriptionId = this.privSubscriptionIdCounter++;\r\n\r\n        this.privDisposedSubscriptions[subscriptionId] = disposedCallback;\r\n\r\n        return {\r\n            detach: () => {\r\n                delete this.privDisposedSubscriptions[subscriptionId];\r\n                return Promise.resolve();\r\n            },\r\n        };\r\n    }\r\n\r\n    public join = (seperator?: string): string => {\r\n        this.throwIfDisposed();\r\n        return this.privList.join(seperator);\r\n    }\r\n\r\n    public toArray = (): TItem[] => {\r\n        const cloneCopy = Array<TItem>();\r\n        this.privList.forEach((val: TItem) => {\r\n            cloneCopy.push(val);\r\n        });\r\n        return cloneCopy;\r\n    }\r\n\r\n    public any = (callback?: (item: TItem, index: number) => boolean): boolean => {\r\n        this.throwIfDisposed();\r\n        if (callback) {\r\n            return this.where(callback).length() > 0;\r\n        } else {\r\n            return this.length() > 0;\r\n        }\r\n    }\r\n\r\n    public all = (callback: (item: TItem) => boolean): boolean => {\r\n        this.throwIfDisposed();\r\n        return this.where(callback).length() === this.length();\r\n    }\r\n\r\n    public forEach = (callback: (item: TItem, index: number) => void): void => {\r\n        this.throwIfDisposed();\r\n        for (let i = 0; i < this.length(); i++) {\r\n            callback(this.privList[i], i);\r\n        }\r\n    }\r\n\r\n    public select = <T2>(callback: (item: TItem, index: number) => T2): List<T2> => {\r\n        this.throwIfDisposed();\r\n        const selectList: T2[] = [];\r\n        for (let i = 0; i < this.privList.length; i++) {\r\n            selectList.push(callback(this.privList[i], i));\r\n        }\r\n\r\n        return new List<T2>(selectList);\r\n    }\r\n\r\n    public where = (callback: (item: TItem, index: number) => boolean): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        const filteredList = new List<TItem>();\r\n        for (let i = 0; i < this.privList.length; i++) {\r\n            if (callback(this.privList[i], i)) {\r\n                filteredList.add(this.privList[i]);\r\n            }\r\n        }\r\n        return filteredList;\r\n    }\r\n\r\n    public orderBy = (compareFn: (a: TItem, b: TItem) => number): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        const clonedArray = this.toArray();\r\n        const orderedArray = clonedArray.sort(compareFn);\r\n        return new List(orderedArray);\r\n    }\r\n\r\n    public orderByDesc = (compareFn: (a: TItem, b: TItem) => number): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        return this.orderBy((a: TItem, b: TItem) => compareFn(b, a));\r\n    }\r\n\r\n    public clone = (): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        return new List<TItem>(this.toArray());\r\n    }\r\n\r\n    public concat = (list: List<TItem>): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        return new List<TItem>(this.privList.concat(list.toArray()));\r\n    }\r\n\r\n    public concatArray = (array: TItem[]): List<TItem> => {\r\n        this.throwIfDisposed();\r\n        return new List<TItem>(this.privList.concat(array));\r\n    }\r\n\r\n    public isDisposed = (): boolean => {\r\n        return this.privList == null;\r\n    }\r\n\r\n    public dispose = (reason?: string): void => {\r\n        if (!this.isDisposed()) {\r\n            this.privDisposeReason = reason;\r\n            this.privList = null;\r\n            this.privAddSubscriptions = null;\r\n            this.privRemoveSubscriptions = null;\r\n            this.triggerSubscriptions(this.privDisposedSubscriptions);\r\n        }\r\n    }\r\n\r\n    private throwIfDisposed = (): void => {\r\n        if (this.isDisposed()) {\r\n            throw new ObjectDisposedError(\"List\", this.privDisposeReason);\r\n        }\r\n    }\r\n\r\n    private triggerSubscriptions = (subscriptions: IStringDictionary<() => void>): void => {\r\n        if (subscriptions) {\r\n            for (const subscriptionId in subscriptions) {\r\n                if (subscriptionId) {\r\n                    subscriptions[subscriptionId]();\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { ArgumentNullError } from \"./Error\";\r\n\r\nexport enum PromiseState {\r\n    None,\r\n    Resolved,\r\n    Rejected,\r\n}\r\n\r\nexport interface IDeferred<T> {\r\n    readonly promise: Promise<T>;\r\n\r\n    resolve(result: T): IDeferred<T>;\r\n\r\n    reject(error: string): IDeferred<T>;\r\n}\r\n\r\nexport class PromiseResult<T> {\r\n    protected privIsCompleted: boolean;\r\n    protected privIsError: boolean;\r\n    protected privError: string;\r\n    protected privResult: T;\r\n\r\n    public constructor(promiseResultEventSource: PromiseResultEventSource<T>) {\r\n        promiseResultEventSource.on((result: T) => {\r\n            if (!this.privIsCompleted) {\r\n                this.privIsCompleted = true;\r\n                this.privIsError = false;\r\n                this.privResult = result;\r\n            }\r\n        }, (error: string) => {\r\n            if (!this.privIsCompleted) {\r\n                this.privIsCompleted = true;\r\n                this.privIsError = true;\r\n                this.privError = error;\r\n            }\r\n        });\r\n    }\r\n\r\n    public get isCompleted(): boolean {\r\n        return this.privIsCompleted;\r\n    }\r\n\r\n    public get isError(): boolean {\r\n        return this.privIsError;\r\n    }\r\n\r\n    public get error(): string {\r\n        return this.privError;\r\n    }\r\n\r\n    public get result(): T {\r\n        return this.privResult;\r\n    }\r\n\r\n    public throwIfError = (): void => {\r\n        if (this.isError) {\r\n            throw this.error;\r\n        }\r\n    }\r\n}\r\n\r\nexport class PromiseResultEventSource<T>  {\r\n\r\n    private privOnSetResult: (result: T) => void;\r\n    private privOnSetError: (error: string) => void;\r\n\r\n    public setResult = (result: T): void => {\r\n        this.privOnSetResult(result);\r\n    }\r\n\r\n    public setError = (error: string): void => {\r\n        this.privOnSetError(error);\r\n    }\r\n\r\n    public on = (onSetResult: (result: T) => void, onSetError: (error: string) => void): void => {\r\n        this.privOnSetResult = onSetResult;\r\n        this.privOnSetError = onSetError;\r\n    }\r\n}\r\n\r\nexport class Deferred<T> implements IDeferred<T> {\r\n    private privPromise: Promise<T>;\r\n    private privResolve: (value?: T | PromiseLike<T>) => void;\r\n    private privReject: (reason?: any) => void;\r\n\r\n    public constructor() {\r\n        this.privPromise = new Promise<T>((resolve: (value: T) => void, reject: (reason: any) => void) => {\r\n            this.privResolve = resolve;\r\n            this.privReject = reject;\r\n        });\r\n    }\r\n\r\n    public get promise(): Promise<T> {\r\n        return this.privPromise;\r\n    }\r\n\r\n    public resolve = (result: T | Promise<T>): Deferred<T> => {\r\n        this.privResolve(result);\r\n        return this;\r\n    }\r\n\r\n    public reject = (error: string): Deferred<T> => {\r\n        this.privReject(error);\r\n        return this;\r\n    }\r\n}\r\n\r\nexport class Sink<T> {\r\n    private privState: PromiseState = PromiseState.None;\r\n    private privPromiseResult: PromiseResult<T> = null;\r\n    private privPromiseResultEvents: PromiseResultEventSource<T> = null;\r\n\r\n    private privSuccessHandlers: ((result: T) => void)[] = [];\r\n    private privErrorHandlers: ((e: string) => void)[] = [];\r\n\r\n    public constructor() {\r\n        this.privPromiseResultEvents = new PromiseResultEventSource();\r\n        this.privPromiseResult = new PromiseResult(this.privPromiseResultEvents);\r\n    }\r\n\r\n    public get state(): PromiseState {\r\n        return this.privState;\r\n    }\r\n\r\n    public get result(): PromiseResult<T> {\r\n        return this.privPromiseResult;\r\n    }\r\n\r\n    public resolve = (result: T): void => {\r\n        if (this.privState !== PromiseState.None) {\r\n            throw new Error(\"'Cannot resolve a completed promise'\");\r\n        }\r\n\r\n        this.privState = PromiseState.Resolved;\r\n        this.privPromiseResultEvents.setResult(result);\r\n\r\n        for (let i = 0; i < this.privSuccessHandlers.length; i++) {\r\n            this.executeSuccessCallback(result, this.privSuccessHandlers[i], this.privErrorHandlers[i]);\r\n        }\r\n\r\n        this.detachHandlers();\r\n    }\r\n\r\n    public reject = (error: string): void => {\r\n        if (this.privState !== PromiseState.None) {\r\n            throw new Error(\"'Cannot reject a completed promise'\");\r\n        }\r\n\r\n        this.privState = PromiseState.Rejected;\r\n        this.privPromiseResultEvents.setError(error);\r\n\r\n        for (const errorHandler of this.privErrorHandlers) {\r\n            this.executeErrorCallback(error, errorHandler);\r\n        }\r\n\r\n        this.detachHandlers();\r\n    }\r\n\r\n    public on = (\r\n        successCallback: (result: T) => void,\r\n        errorCallback: (error: string) => void): void => {\r\n\r\n        if (successCallback == null) {\r\n            successCallback = (r: T) => { return; };\r\n        }\r\n\r\n        if (this.privState === PromiseState.None) {\r\n            this.privSuccessHandlers.push(successCallback);\r\n            this.privErrorHandlers.push(errorCallback);\r\n        } else {\r\n            if (this.privState === PromiseState.Resolved) {\r\n                this.executeSuccessCallback(this.privPromiseResult.result, successCallback, errorCallback);\r\n            } else if (this.privState === PromiseState.Rejected) {\r\n                this.executeErrorCallback(this.privPromiseResult.error, errorCallback);\r\n            }\r\n\r\n            this.detachHandlers();\r\n        }\r\n    }\r\n\r\n    private executeSuccessCallback = (result: T, successCallback: (result: T) => void, errorCallback: (error: string) => void): void => {\r\n        try {\r\n            successCallback(result);\r\n        } catch (e) {\r\n            this.executeErrorCallback(`'Unhandled callback error: ${e}'`, errorCallback);\r\n        }\r\n    }\r\n\r\n    private executeErrorCallback = (error: string, errorCallback: (error: string) => void): void => {\r\n        if (errorCallback) {\r\n            try {\r\n                errorCallback(error);\r\n            } catch (e) {\r\n                throw new Error(`'Unhandled callback error: ${e}. InnerError: ${error}'`);\r\n            }\r\n        } else {\r\n            throw new Error(`'Unhandled error: ${error}'`);\r\n        }\r\n    }\r\n\r\n    private detachHandlers = (): void => {\r\n        this.privErrorHandlers = [];\r\n        this.privSuccessHandlers = [];\r\n    }\r\n}\r\n\r\nexport function marshalPromiseToCallbacks<T>(\r\n    promise: Promise<T>,\r\n    cb?: (value: T) => void,\r\n    err?: (error: string) => void): void {\r\n    promise.then((val: T): void => {\r\n        try {\r\n            if (!!cb) {\r\n                cb(val);\r\n            }\r\n        } catch (error) {\r\n            if (!!err) {\r\n                try {\r\n                    if (error instanceof Error) {\r\n                        const typedError: Error = error as Error;\r\n                        err(typedError.name + \": \" + typedError.message);\r\n                    } else {\r\n                        err(error);\r\n                    }\r\n                    /* tslint:disable:no-empty */\r\n                } catch (error) { }\r\n            }\r\n        }\r\n    }, (error: any): void => {\r\n        if (!!err) {\r\n            try {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n                } else {\r\n                    err(error);\r\n                }\r\n                /* tslint:disable:no-empty */\r\n            } catch (error) { }\r\n        }\r\n    });\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { InvalidOperationError, ObjectDisposedError } from \"./Error\";\r\nimport { IDetachable } from \"./IDetachable\";\r\nimport { IDisposable } from \"./IDisposable\";\r\nimport { List } from \"./List\";\r\nimport {\r\n    Deferred,\r\n} from \"./Promise\";\r\nexport interface IQueue<TItem> extends IDisposable {\r\n    enqueue(item: TItem): void;\r\n    enqueueFromPromise(promise: Promise<TItem>): void;\r\n    dequeue(): Promise<TItem>;\r\n    peek(): Promise<TItem>;\r\n    length(): number;\r\n}\r\n\r\nenum SubscriberType {\r\n    Dequeue,\r\n    Peek,\r\n}\r\n\r\nexport class Queue<TItem> implements IQueue<TItem> {\r\n    private privPromiseStore: List<Promise<TItem>> = new List<Promise<TItem>>();\r\n    private privList: List<TItem>;\r\n    private privDetachables: IDetachable[];\r\n    private privSubscribers: List<{ type: SubscriberType, deferral: Deferred<TItem> }>;\r\n    private privIsDrainInProgress: boolean = false;\r\n    private privIsDisposing: boolean = false;\r\n    private privDisposeReason: string = null;\r\n\r\n    public constructor(list?: List<TItem>) {\r\n        this.privList = list ? list : new List<TItem>();\r\n        this.privDetachables = [];\r\n        this.privSubscribers = new List<{ type: SubscriberType, deferral: Deferred<TItem> }>();\r\n        this.privDetachables.push(this.privList.onAdded(this.drain));\r\n    }\r\n\r\n    public enqueue = (item: TItem): void => {\r\n        this.throwIfDispose();\r\n        this.enqueueFromPromise(new Promise<TItem>((resolve: (value: TItem) => void, reject: (reason: any) => void) => { resolve(item); }));\r\n    }\r\n\r\n    public enqueueFromPromise = (promise: Promise<TItem>): void => {\r\n        this.throwIfDispose();\r\n        promise.then((val: TItem): void => {\r\n            this.privList.add(val);\r\n             /* tslint:disable:no-empty */\r\n        }, (error: string): void => { });\r\n    }\r\n\r\n    public dequeue = (): Promise<TItem> => {\r\n        this.throwIfDispose();\r\n        const deferredSubscriber = new Deferred<TItem>();\r\n\r\n        if (this.privSubscribers) {\r\n            this.privSubscribers.add({ deferral: deferredSubscriber, type: SubscriberType.Dequeue });\r\n            this.drain();\r\n        }\r\n\r\n        return deferredSubscriber.promise;\r\n    }\r\n\r\n    public peek = (): Promise<TItem> => {\r\n        this.throwIfDispose();\r\n        const deferredSubscriber = new Deferred<TItem>();\r\n\r\n        const subs = this.privSubscribers;\r\n        if (subs) {\r\n            this.privSubscribers.add({ deferral: deferredSubscriber, type: SubscriberType.Peek });\r\n            this.drain();\r\n        }\r\n\r\n        return deferredSubscriber.promise;\r\n    }\r\n\r\n    public length = (): number => {\r\n        this.throwIfDispose();\r\n        return this.privList.length();\r\n    }\r\n\r\n    public isDisposed = (): boolean => {\r\n        return this.privSubscribers == null;\r\n    }\r\n\r\n    public async drainAndDispose(pendingItemProcessor: (pendingItemInQueue: TItem) => void, reason?: string): Promise<void> {\r\n        if (!this.isDisposed() && !this.privIsDisposing) {\r\n            this.privDisposeReason = reason;\r\n            this.privIsDisposing = true;\r\n\r\n            const subs = this.privSubscribers;\r\n            if (subs) {\r\n                while (subs.length() > 0) {\r\n                    const subscriber = subs.removeFirst();\r\n                    // TODO: this needs work (Resolve(null) instead?).\r\n                    subscriber.deferral.resolve(undefined);\r\n                    // subscriber.deferral.reject(\"Disposed\");\r\n                }\r\n\r\n                // note: this block assumes cooperative multitasking, i.e.,\r\n                // between the if-statement and the assignment there are no\r\n                // thread switches.\r\n                // Reason is that between the initial const = this.; and this\r\n                // point there is the derral.resolve() operation that might have\r\n                // caused recursive calls to the Queue, especially, calling\r\n                // Dispose() on the queue alredy (which would reset the var\r\n                // here to null!).\r\n                // That should generally hold true for javascript...\r\n                if (this.privSubscribers === subs) {\r\n                    this.privSubscribers = subs;\r\n                }\r\n            }\r\n\r\n            for (const detachable of this.privDetachables) {\r\n                await detachable.detach();\r\n            }\r\n\r\n            if (this.privPromiseStore.length() > 0 && pendingItemProcessor) {\r\n                const promiseArray: Promise<TItem>[] = [];\r\n\r\n                this.privPromiseStore.toArray().forEach((wrapper: Promise<TItem>) => {\r\n                    promiseArray.push(wrapper);\r\n                });\r\n                return Promise.all(promiseArray).finally(() => {\r\n                    this.privSubscribers = null;\r\n                    this.privList.forEach((item: TItem, index: number): void => {\r\n                        pendingItemProcessor(item);\r\n                    });\r\n                    this.privList = null;\r\n                    return;\r\n                }).then<void>();\r\n            } else {\r\n                this.privSubscribers = null;\r\n                this.privList = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public async dispose(reason?: string): Promise<void> {\r\n        await this.drainAndDispose(null, reason);\r\n    }\r\n\r\n    private drain = (): void => {\r\n        if (!this.privIsDrainInProgress && !this.privIsDisposing) {\r\n            this.privIsDrainInProgress = true;\r\n\r\n            const subs = this.privSubscribers;\r\n            const lists = this.privList;\r\n            if (subs && lists) {\r\n                while (lists.length() > 0 && subs.length() > 0 && !this.privIsDisposing) {\r\n                    const subscriber = subs.removeFirst();\r\n                    if (subscriber.type === SubscriberType.Peek) {\r\n                        subscriber.deferral.resolve(lists.first());\r\n                    } else {\r\n                        const dequeuedItem = lists.removeFirst();\r\n                        subscriber.deferral.resolve(dequeuedItem);\r\n                    }\r\n                }\r\n\r\n                // note: this block assumes cooperative multitasking, i.e.,\r\n                // between the if-statement and the assignment there are no\r\n                // thread switches.\r\n                // Reason is that between the initial const = this.; and this\r\n                // point there is the derral.resolve() operation that might have\r\n                // caused recursive calls to the Queue, especially, calling\r\n                // Dispose() on the queue alredy (which would reset the var\r\n                // here to null!).\r\n                // That should generally hold true for javascript...\r\n                if (this.privSubscribers === subs) {\r\n                    this.privSubscribers = subs;\r\n                }\r\n\r\n                // note: this block assumes cooperative multitasking, i.e.,\r\n                // between the if-statement and the assignment there are no\r\n                // thread switches.\r\n                // Reason is that between the initial const = this.; and this\r\n                // point there is the derral.resolve() operation that might have\r\n                // caused recursive calls to the Queue, especially, calling\r\n                // Dispose() on the queue alredy (which would reset the var\r\n                // here to null!).\r\n                // That should generally hold true for javascript...\r\n                if (this.privList === lists) {\r\n                    this.privList = lists;\r\n                }\r\n            }\r\n\r\n            this.privIsDrainInProgress = false;\r\n        }\r\n    }\r\n\r\n    private throwIfDispose = (): void => {\r\n        if (this.isDisposed()) {\r\n            if (this.privDisposeReason) {\r\n                throw new InvalidOperationError(this.privDisposeReason);\r\n            }\r\n\r\n            throw new ObjectDisposedError(\"Queue\");\r\n        } else if (this.privIsDisposing) {\r\n            throw new InvalidOperationError(\"Queue disposing\");\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { MessageType } from \"./ConnectionMessage\";\r\nimport { ArgumentNullError, InvalidOperationError } from \"./Error\";\r\nimport { createNoDashGuid } from \"./Guid\";\r\n\r\nexport class RawWebsocketMessage {\r\n    private privMessageType: MessageType;\r\n    private privPayload: any = null;\r\n    private privId: string;\r\n\r\n    public constructor(messageType: MessageType, payload: any, id?: string) {\r\n        if (!payload) {\r\n            throw new ArgumentNullError(\"payload\");\r\n        }\r\n\r\n        if (messageType === MessageType.Binary && payload.__proto__.constructor.name !== \"ArrayBuffer\") {\r\n            throw new InvalidOperationError(\"Payload must be ArrayBuffer\");\r\n        }\r\n\r\n        if (messageType === MessageType.Text && !(typeof (payload) === \"string\")) {\r\n            throw new InvalidOperationError(\"Payload must be a string\");\r\n        }\r\n\r\n        this.privMessageType = messageType;\r\n        this.privPayload = payload;\r\n        this.privId = id ? id : createNoDashGuid();\r\n    }\r\n\r\n    public get messageType(): MessageType {\r\n        return this.privMessageType;\r\n    }\r\n\r\n    public get payload(): any {\r\n        return this.privPayload;\r\n    }\r\n\r\n    public get textContent(): string {\r\n        if (this.privMessageType === MessageType.Binary) {\r\n            throw new InvalidOperationError(\"Not supported for binary message\");\r\n        }\r\n\r\n        return this.privPayload as string;\r\n    }\r\n\r\n    public get binaryContent(): ArrayBuffer {\r\n        if (this.privMessageType === MessageType.Text) {\r\n            throw new InvalidOperationError(\"Not supported for text message\");\r\n        }\r\n\r\n        return this.privPayload;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport class RiffPcmEncoder {\r\n\r\n    private privActualSampleRate: number;\r\n    private privDesiredSampleRate: number;\r\n\r\n    public constructor(actualSampleRate: number, desiredSampleRate: number) {\r\n        this.privActualSampleRate = actualSampleRate;\r\n        this.privDesiredSampleRate = desiredSampleRate;\r\n    }\r\n\r\n    public encode = (\r\n        actualAudioFrame: Float32Array): ArrayBuffer => {\r\n\r\n        const audioFrame = this.downSampleAudioFrame(actualAudioFrame, this.privActualSampleRate, this.privDesiredSampleRate);\r\n\r\n        if (!audioFrame) {\r\n            return null;\r\n        }\r\n\r\n        const audioLength = audioFrame.length * 2;\r\n\r\n        const buffer = new ArrayBuffer(audioLength);\r\n        const view = new DataView(buffer);\r\n        this.floatTo16BitPCM(view, 0, audioFrame);\r\n\r\n        return buffer;\r\n    }\r\n\r\n    private setString = (view: DataView, offset: number, str: string): void => {\r\n        for (let i = 0; i < str.length; i++) {\r\n            view.setUint8(offset + i, str.charCodeAt(i));\r\n        }\r\n    }\r\n\r\n    private floatTo16BitPCM = (view: DataView, offset: number, input: Float32Array): void => {\r\n        for (let i = 0; i < input.length; i++ , offset += 2) {\r\n            const s = Math.max(-1, Math.min(1, input[i]));\r\n            view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true);\r\n        }\r\n    }\r\n\r\n    private downSampleAudioFrame = (\r\n        srcFrame: Float32Array,\r\n        srcRate: number,\r\n        dstRate: number): Float32Array => {\r\n\r\n        if (dstRate === srcRate || dstRate > srcRate) {\r\n            return srcFrame;\r\n        }\r\n\r\n        const ratio = srcRate / dstRate;\r\n        const dstLength = Math.round(srcFrame.length / ratio);\r\n        const dstFrame = new Float32Array(dstLength);\r\n        let srcOffset = 0;\r\n        let dstOffset = 0;\r\n        while (dstOffset < dstLength) {\r\n            const nextSrcOffset = Math.round((dstOffset + 1) * ratio);\r\n            let accum = 0;\r\n            let count = 0;\r\n            while (srcOffset < nextSrcOffset && srcOffset < srcFrame.length) {\r\n                accum += srcFrame[srcOffset++];\r\n                count++;\r\n            }\r\n            dstFrame[dstOffset++] = accum / count;\r\n        }\r\n\r\n        return dstFrame;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { InvalidOperationError } from \"./Error\";\r\nimport { createNoDashGuid } from \"./Guid\";\r\nimport { Queue } from \"./Queue\";\r\n\r\nexport interface IStreamChunk<TBuffer> {\r\n    isEnd: boolean;\r\n    buffer: TBuffer;\r\n    timeReceived: number;\r\n}\r\n\r\nexport class Stream<TBuffer> {\r\n    private privId: string;\r\n    private privIsWriteEnded: boolean = false;\r\n    private privIsReadEnded: boolean = false;\r\n    private privReaderQueue: Queue<IStreamChunk<TBuffer>>;\r\n\r\n    public constructor(streamId?: string) {\r\n        this.privId = streamId ? streamId : createNoDashGuid();\r\n        this.privReaderQueue = new Queue<IStreamChunk<TBuffer>>();\r\n    }\r\n\r\n    public get isClosed(): boolean {\r\n        return this.privIsWriteEnded;\r\n    }\r\n\r\n    public get isReadEnded(): boolean {\r\n        return this.privIsReadEnded;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public close(): void {\r\n        if (!this.privIsWriteEnded) {\r\n            this.writeStreamChunk({\r\n                buffer: null,\r\n                isEnd: true,\r\n                timeReceived: Date.now(),\r\n            });\r\n            this.privIsWriteEnded = true;\r\n        }\r\n    }\r\n\r\n    public writeStreamChunk(streamChunk: IStreamChunk<TBuffer>): void {\r\n        this.throwIfClosed();\r\n        if (!this.privReaderQueue.isDisposed()) {\r\n            try {\r\n                this.privReaderQueue.enqueue(streamChunk);\r\n            } catch (e) {\r\n                // Do nothing\r\n            }\r\n        }\r\n    }\r\n\r\n    public read = (): Promise<IStreamChunk<TBuffer>> => {\r\n        if (this.privIsReadEnded) {\r\n            throw new InvalidOperationError(\"Stream read has already finished\");\r\n        }\r\n\r\n        return this.privReaderQueue\r\n            .dequeue()\r\n            .then(async (streamChunk: IStreamChunk<TBuffer>) => {\r\n                if (streamChunk === undefined || streamChunk.isEnd) {\r\n                    await this.privReaderQueue.dispose(\"End of stream reached\");\r\n                }\r\n\r\n                return streamChunk;\r\n            });\r\n    }\r\n    public readEnded = (): void => {\r\n        if (!this.privIsReadEnded) {\r\n            this.privIsReadEnded = true;\r\n            this.privReaderQueue = new Queue<IStreamChunk<TBuffer>>();\r\n        }\r\n    }\r\n\r\n    private throwIfClosed = (): void => {\r\n        if (this.privIsWriteEnded) {\r\n            throw new InvalidOperationError(\"Stream closed\");\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines translation status.\r\n * @class TranslationStatus\r\n */\r\nexport enum TranslationStatus {\r\n    /**\r\n     * @member TranslationStatus.Success\r\n     */\r\n    Success = 0,\r\n\r\n    /**\r\n     * @member TranslationStatus.Error\r\n     */\r\n    Error,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IStreamChunk, Stream } from \"./Exports\";\r\n\r\nexport class ChunkedArrayBufferStream extends Stream<ArrayBuffer> {\r\n    private privTargetChunkSize: number;\r\n    private privNextBufferToWrite: ArrayBuffer;\r\n    private privNextBufferStartTime: number;\r\n    private privNextBufferReadyBytes: number;\r\n\r\n    constructor(targetChunkSize: number, streamId?: string) {\r\n        super(streamId);\r\n        this.privTargetChunkSize = targetChunkSize;\r\n        this.privNextBufferReadyBytes = 0;\r\n    }\r\n\r\n    public writeStreamChunk(chunk: IStreamChunk<ArrayBuffer>): void {\r\n        // No pending write, and the buffer is the right size so write it.\r\n        if (chunk.isEnd ||\r\n            (0 === this.privNextBufferReadyBytes && chunk.buffer.byteLength === this.privTargetChunkSize)) {\r\n            super.writeStreamChunk(chunk);\r\n            return;\r\n        }\r\n\r\n        let bytesCopiedFromBuffer: number = 0;\r\n\r\n        while (bytesCopiedFromBuffer < chunk.buffer.byteLength) {\r\n            // Fill the next buffer.\r\n            if (undefined === this.privNextBufferToWrite) {\r\n                this.privNextBufferToWrite = new ArrayBuffer(this.privTargetChunkSize);\r\n                this.privNextBufferStartTime = chunk.timeReceived;\r\n            }\r\n\r\n            // Find out how many bytes we can copy into the read buffer.\r\n            const bytesToCopy: number = Math.min(chunk.buffer.byteLength - bytesCopiedFromBuffer, this.privTargetChunkSize - this.privNextBufferReadyBytes);\r\n            const targetView: Uint8Array = new Uint8Array(this.privNextBufferToWrite);\r\n            const sourceView: Uint8Array = new Uint8Array(chunk.buffer.slice(bytesCopiedFromBuffer, bytesToCopy + bytesCopiedFromBuffer));\r\n\r\n            targetView.set(sourceView, this.privNextBufferReadyBytes);\r\n            this.privNextBufferReadyBytes += bytesToCopy;\r\n            bytesCopiedFromBuffer += bytesToCopy;\r\n\r\n            // Are we ready to write?\r\n            if (this.privNextBufferReadyBytes === this.privTargetChunkSize) {\r\n                super.writeStreamChunk({\r\n                    buffer: this.privNextBufferToWrite,\r\n                    isEnd: false,\r\n                    timeReceived: this.privNextBufferStartTime,\r\n                });\r\n                this.privNextBufferReadyBytes = 0;\r\n                this.privNextBufferToWrite = undefined;\r\n            }\r\n        }\r\n    }\r\n\r\n    public close(): void {\r\n        // Send whatever is pending, then close the base class.\r\n        if (0 !== this.privNextBufferReadyBytes && !this.isClosed) {\r\n            super.writeStreamChunk({\r\n                buffer: this.privNextBufferToWrite.slice(0, this.privNextBufferReadyBytes),\r\n                isEnd: false,\r\n                timeReceived: this.privNextBufferStartTime,\r\n            });\r\n        }\r\n\r\n        super.close();\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { AudioStreamFormat } from \"../sdk/Exports\";\r\n\r\nexport interface IAudioDestination {\r\n    id(): string;\r\n    write(buffer: ArrayBuffer): void;\r\n    format: AudioStreamFormat;\r\n    close(cb?: () => void, err?: (error: string) => void): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\ntype TWorkerMessage = ICallNotification | IClearResponse | IErrorNotification | IErrorResponse;\r\n\r\ninterface IClearResponse {\r\n    error: null;\r\n    id: number;\r\n}\r\n\r\ninterface IErrorNotification {\r\n    error: {\r\n        message: string;\r\n    };\r\n    id: null;\r\n    result: null;\r\n}\r\n\r\ninterface IErrorResponse {\r\n    error: {\r\n        message: string;\r\n    };\r\n    id: number;\r\n    result: null;\r\n}\r\n\r\ninterface ICallNotification {\r\n    id: null;\r\n    method: \"call\";\r\n    params: {\r\n        timerId: number;\r\n    };\r\n}\r\n\r\ninterface ISetNotification {\r\n    id: null;\r\n    method: \"set\";\r\n    params: {\r\n        delay: number;\r\n        now: number;\r\n        timerId: number;\r\n    };\r\n}\r\n\r\ninterface IClearRequest {\r\n    id: number;\r\n    method: \"clear\";\r\n    params: {\r\n        timerId: number;\r\n    };\r\n}\r\n\r\ninterface IWorkerEvent extends Event {\r\n    data: TWorkerMessage;\r\n}\r\n\r\ninterface IWorkerTimers {\r\n    clearTimeout: (timerId: number) => void;\r\n    setTimeout: (func: () => any, delay: number) => number;\r\n}\r\n\r\ndeclare type Func = () => any;\r\n\r\nexport class Timeout {\r\n\r\n    private static workerTimers: null | IWorkerTimers = null;\r\n\r\n    public static clearTimeout: IWorkerTimers[\"clearTimeout\"] = (timerId) => Timeout.timers().clearTimeout(timerId);\r\n\r\n    public static setTimeout: IWorkerTimers[\"setTimeout\"] = (func, delay) => Timeout.timers().setTimeout(func, delay);\r\n\r\n    public static load = (url: string) => {\r\n        // Prefilling the Maps with a function indexed by zero is necessary to be compliant with the specification.\r\n        const scheduledTimeoutFunctions: Map<number, number | Func> = new Map([[0, () => { }]]); // tslint:disable-line no-empty\r\n        const unhandledRequests: Map<number, number> = new Map();\r\n\r\n        const worker = new Worker(url);\r\n\r\n        worker.addEventListener(\"message\", ({ data }: IWorkerEvent) => {\r\n            if (Timeout.isCallNotification(data)) {\r\n                const {\r\n                    params: { timerId }\r\n                } = data;\r\n\r\n                const idOrFunc = scheduledTimeoutFunctions.get(timerId);\r\n\r\n                if (typeof idOrFunc === \"number\") {\r\n                    const unhandledTimerId = unhandledRequests.get(idOrFunc);\r\n\r\n                    if (\r\n                        unhandledTimerId === undefined ||\r\n                        unhandledTimerId !== timerId\r\n                    ) {\r\n                        throw new Error(\"The timer is in an undefined state.\");\r\n                    }\r\n                } else if (typeof idOrFunc !== \"undefined\") {\r\n                    idOrFunc();\r\n\r\n                    // A timeout can be safely deleted because it is only called once.\r\n                    scheduledTimeoutFunctions.delete(timerId);\r\n                } else {\r\n                    throw new Error(\"The timer is in an undefined state.\");\r\n                }\r\n            } else if (Timeout.isClearResponse(data)) {\r\n                const { id } = data;\r\n\r\n                const unhandledTimerId = unhandledRequests.get(id);\r\n\r\n                if (unhandledTimerId === undefined) {\r\n                    throw new Error(\"The timer is in an undefined state.\");\r\n                }\r\n\r\n                unhandledRequests.delete(id);\r\n\r\n                scheduledTimeoutFunctions.delete(unhandledTimerId);\r\n            } else {\r\n                const {\r\n                    error: { message }\r\n                } = data;\r\n\r\n                throw new Error(message);\r\n            }\r\n        });\r\n\r\n        const clearTimeout = (timerId: number) => {\r\n            const id = Math.random();\r\n\r\n            unhandledRequests.set(id, timerId);\r\n            scheduledTimeoutFunctions.set(timerId, id);\r\n\r\n            worker.postMessage({\r\n                id,\r\n                method: \"clear\",\r\n                params: { timerId }\r\n            } as IClearRequest);\r\n        };\r\n\r\n        const setTimeout = (func: () => void, delay: number) => {\r\n            const timerId = Math.random();\r\n\r\n            scheduledTimeoutFunctions.set(timerId, func);\r\n\r\n            worker.postMessage({\r\n                id: null,\r\n                method: \"set\",\r\n                params: {\r\n                    delay,\r\n                    now: performance.now(),\r\n                    timerId\r\n                }\r\n            } as ISetNotification);\r\n\r\n            return timerId;\r\n        };\r\n\r\n        return {\r\n            clearTimeout,\r\n            setTimeout\r\n        };\r\n    }\r\n\r\n    private static loadWorkerTimers = () => {\r\n        const worker = `!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=14)}([function(e,t,n){\"use strict\";n.d(t,\"a\",(function(){return i})),n.d(t,\"b\",(function(){return u})),n.d(t,\"c\",(function(){return a})),n.d(t,\"d\",(function(){return d}));const r=new Map,o=new Map,i=e=>{const t=r.get(e);if(void 0===t)throw new Error('There is no interval scheduled with the given id \"'.concat(e,'\".'));clearTimeout(t),r.delete(e)},u=e=>{const t=o.get(e);if(void 0===t)throw new Error('There is no timeout scheduled with the given id \"'.concat(e,'\".'));clearTimeout(t),o.delete(e)},f=(e,t)=>{let n,r;if(\"performance\"in self){const o=performance.now();n=o,r=e-Math.max(0,o-t)}else n=Date.now(),r=e;return{expected:n+r,remainingDelay:r}},c=(e,t,n,r)=>{const o=\"performance\"in self?performance.now():Date.now();o>n?postMessage({id:null,method:\"call\",params:{timerId:t}}):e.set(t,setTimeout(c,n-o,e,t,n))},a=(e,t,n)=>{const{expected:o,remainingDelay:i}=f(e,n);r.set(t,setTimeout(c,i,r,t,o))},d=(e,t,n)=>{const{expected:r,remainingDelay:i}=f(e,n);o.set(t,setTimeout(c,i,o,t,r))}},function(e,t,n){\"use strict\";n.r(t);var r=n(2);for(var o in r)\"default\"!==o&&function(e){n.d(t,e,(function(){return r[e]}))}(o);var i=n(3);for(var o in i)\"default\"!==o&&function(e){n.d(t,e,(function(){return i[e]}))}(o);var u=n(4);for(var o in u)\"default\"!==o&&function(e){n.d(t,e,(function(){return u[e]}))}(o);var f=n(5);for(var o in f)\"default\"!==o&&function(e){n.d(t,e,(function(){return f[e]}))}(o);var c=n(6);for(var o in c)\"default\"!==o&&function(e){n.d(t,e,(function(){return c[e]}))}(o);var a=n(7);for(var o in a)\"default\"!==o&&function(e){n.d(t,e,(function(){return a[e]}))}(o);var d=n(8);for(var o in d)\"default\"!==o&&function(e){n.d(t,e,(function(){return d[e]}))}(o);var s=n(9);for(var o in s)\"default\"!==o&&function(e){n.d(t,e,(function(){return s[e]}))}(o)},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t,n){\"use strict\";n.r(t);var r=n(11);for(var o in r)\"default\"!==o&&function(e){n.d(t,e,(function(){return r[e]}))}(o);var i=n(12);for(var o in i)\"default\"!==o&&function(e){n.d(t,e,(function(){return i[e]}))}(o);var u=n(13);for(var o in u)\"default\"!==o&&function(e){n.d(t,e,(function(){return u[e]}))}(o)},function(e,t){},function(e,t){},function(e,t){},function(e,t,n){\"use strict\";n.r(t);var r=n(0),o=n(1);for(var i in o)\"default\"!==i&&function(e){n.d(t,e,(function(){return o[e]}))}(i);var u=n(10);for(var i in u)\"default\"!==i&&function(e){n.d(t,e,(function(){return u[e]}))}(i);addEventListener(\"message\",({data:e})=>{try{if(\"clear\"===e.method){const{id:t,params:{timerId:n}}=e;Object(r.b)(n),postMessage({error:null,id:t})}else{if(\"set\"!==e.method)throw new Error('The given method \"'.concat(e.method,'\" is not supported'));{const{params:{delay:t,now:n,timerId:o}}=e;Object(r.d)(t,o,n)}}}catch(t){postMessage({error:{message:t.message},id:e.id,result:null})}})}]);`; // tslint:disable-line:max-line-length\r\n        return () => {\r\n            if (Timeout.workerTimers !== null) {\r\n                return Timeout.workerTimers;\r\n            }\r\n\r\n            const blob = new Blob([worker], { type: \"application/javascript; charset=utf-8\" });\r\n            const url = URL.createObjectURL(blob);\r\n\r\n            Timeout.workerTimers = Timeout.load(url);\r\n\r\n            // Edge doesn't like the URL to be revoked directly.\r\n            Timeout.workerTimers.setTimeout(() => URL.revokeObjectURL(url), 0);\r\n\r\n            return Timeout.workerTimers as IWorkerTimers;\r\n        };\r\n    }\r\n\r\n    public static timers: () => IWorkerTimers = Timeout.loadWorkerTimers();\r\n\r\n    private static isCallNotification = (message: TWorkerMessage): message is ICallNotification => {\r\n        return (message as ICallNotification).method !== undefined && (message as ICallNotification).method === \"call\";\r\n    }\r\n\r\n    private static isClearResponse = (message: TWorkerMessage): message is IClearResponse => {\r\n        return (message as IClearResponse).error === null && typeof message.id === \"number\";\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { EventType, PlatformEvent } from \"./PlatformEvent\";\r\n\r\nexport class OCSPEvent extends PlatformEvent {\r\n    private privSignature: string;\r\n\r\n    constructor(eventName: string, eventType: EventType, signature: string) {\r\n        super(eventName, eventType);\r\n\r\n        this.privSignature = signature;\r\n    }\r\n}\r\n\r\nexport class OCSPMemoryCacheHitEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPMemoryCacheHitEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPCacheMissEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPCacheMissEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPDiskCacheHitEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPDiskCacheHitEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPCacheUpdateNeededEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPCacheUpdateNeededEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPMemoryCacheStoreEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPMemoryCacheStoreEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPDiskCacheStoreEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPDiskCacheStoreEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPCacheUpdatehCompleteEvent extends OCSPEvent {\r\n    constructor(signature: string) {\r\n        super(\"OCSPCacheUpdatehCompleteEvent\", EventType.Debug, signature);\r\n    }\r\n}\r\n\r\nexport class OCSPStapleReceivedEvent extends OCSPEvent {\r\n    constructor() {\r\n        super(\"OCSPStapleReceivedEvent\", EventType.Debug, \"\");\r\n    }\r\n}\r\n\r\nexport class OCSPWSUpgradeStartedEvent extends OCSPEvent {\r\n    constructor(serialNumber: string) {\r\n        super(\"OCSPWSUpgradeStartedEvent\", EventType.Debug, serialNumber);\r\n    }\r\n}\r\n\r\nexport class OCSPCacheEntryExpiredEvent extends OCSPEvent {\r\n    private privExpireTime: number;\r\n\r\n    constructor(serialNumber: string, expireTime: number) {\r\n        super(\"OCSPCacheEntryExpiredEvent\", EventType.Debug, serialNumber);\r\n        this.privExpireTime = expireTime;\r\n    }\r\n}\r\n\r\nexport class OCSPCacheEntryNeedsRefreshEvent extends OCSPEvent {\r\n    private privExpireTime: number;\r\n    private privStartTime: number;\r\n\r\n    constructor(serialNumber: string, startTime: number, expireTime: number) {\r\n        super(\"OCSPCacheEntryNeedsRefreshEvent\", EventType.Debug, serialNumber);\r\n        this.privExpireTime = expireTime;\r\n        this.privStartTime = startTime;\r\n    }\r\n}\r\n\r\nexport class OCSPCacheHitEvent extends OCSPEvent {\r\n    private privExpireTime: number;\r\n    private privStartTime: number;\r\n    private privExpireTimeString: string;\r\n    private privStartTimeString: string;\r\n\r\n    constructor(serialNumber: string, startTime: number, expireTime: number) {\r\n        super(\"OCSPCacheHitEvent\", EventType.Debug, serialNumber);\r\n        this.privExpireTime = expireTime;\r\n        this.privExpireTimeString = new Date(expireTime).toLocaleDateString();\r\n        this.privStartTime = startTime;\r\n        this.privStartTimeString = new Date(startTime).toLocaleTimeString();\r\n    }\r\n}\r\n\r\nexport class OCSPVerificationFailedEvent extends OCSPEvent {\r\n    private privError: string;\r\n\r\n    constructor(serialNumber: string, error: string) {\r\n        super(\"OCSPVerificationFailedEvent\", EventType.Debug, serialNumber);\r\n        this.privError = error;\r\n    }\r\n}\r\n\r\nexport class OCSPCacheFetchErrorEvent extends OCSPEvent {\r\n    private privError: string;\r\n\r\n    constructor(serialNumber: string, error: string) {\r\n        super(\"OCSPCacheFetchErrorEvent\", EventType.Debug, serialNumber);\r\n        this.privError = error;\r\n    }\r\n}\r\n\r\nexport class OCSPResponseRetrievedEvent extends OCSPEvent {\r\n    constructor(serialNumber: string) {\r\n        super(\"OCSPResponseRetrievedEvent\", EventType.Debug, serialNumber);\r\n    }\r\n}\r\n\r\nexport class OCSPCacheUpdateErrorEvent extends OCSPEvent {\r\n    private privError: string;\r\n\r\n    constructor(serialNumber: string, error: string) {\r\n        super(\"OCSPCacheUpdateErrorEvent\", EventType.Debug, serialNumber);\r\n        this.privError = error;\r\n    }\r\n}\r\n","\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    EventType,\r\n    PlatformEvent\r\n} from \"./Exports\";\r\n\r\nexport class BackgroundEvent extends PlatformEvent {\r\n    private privError: string;\r\n\r\n    constructor(error: string) {\r\n        super(\"BackgroundEvent\", EventType.Error);\r\n        this.privError = error;\r\n    }\r\n\r\n    public get error(): string {\r\n        return this.privError;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport * from \"./AudioSourceEvents\";\r\nexport * from \"./ConnectionEvents\";\r\nexport * from \"./ConnectionMessage\";\r\nexport * from \"./ConnectionOpenResponse\";\r\nexport * from \"./DialogEvents\";\r\nexport * from \"./Error\";\r\nexport * from \"./Events\";\r\nexport * from \"./EventSource\";\r\nexport * from \"./Guid\";\r\nexport * from \"./IAudioSource\";\r\nexport * from \"./IConnection\";\r\nexport * from \"./IDetachable\";\r\nexport * from \"./IDictionary\";\r\nexport * from \"./IDisposable\";\r\nexport * from \"./IEventSource\";\r\nexport * from \"./IErrorMessages\";\r\nexport * from \"./ITimer\";\r\nexport * from \"./IWebsocketMessageFormatter\";\r\nexport * from \"./List\";\r\nexport * from \"./PlatformEvent\";\r\nexport * from \"./Promise\";\r\nexport * from \"./Queue\";\r\nexport * from \"./RawWebsocketMessage\";\r\nexport * from \"./RiffPcmEncoder\";\r\nexport * from \"./Stream\";\r\nexport { TranslationStatus } from \"../common.speech/TranslationStatus\";\r\nexport * from \"./ChunkedArrayBufferStream\";\r\nexport * from \"./IAudioDestination\";\r\nexport * from \"./Timeout\";\r\nexport * from \"./OCSPEvents\";\r\nexport * from \"./BackgroundError\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { EventType, IEventListener, PlatformEvent } from \"../common/Exports\";\r\n\r\nexport class ConsoleLoggingListener implements IEventListener<PlatformEvent> {\r\n    private privLogLevelFilter: EventType;\r\n\r\n    public constructor(logLevelFilter: EventType = EventType.Warning) {\r\n        this.privLogLevelFilter = logLevelFilter;\r\n    }\r\n\r\n    public onEvent = (event: PlatformEvent): void => {\r\n        if (event.eventType >= this.privLogLevelFilter) {\r\n            const log = this.toString(event);\r\n\r\n            switch (event.eventType) {\r\n                case EventType.Debug:\r\n                    // tslint:disable-next-line:no-console\r\n                    console.debug(log);\r\n                    break;\r\n                case EventType.Info:\r\n                    // tslint:disable-next-line:no-console\r\n                    console.info(log);\r\n                    break;\r\n                case EventType.Warning:\r\n                    // tslint:disable-next-line:no-console\r\n                    console.warn(log);\r\n                    break;\r\n                case EventType.Error:\r\n                    // tslint:disable-next-line:no-console\r\n                    console.error(log);\r\n                    break;\r\n                default:\r\n                    // tslint:disable-next-line:no-console\r\n                    console.log(log);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    private toString = (event: any): string => {\r\n        const logFragments = [\r\n            `${event.EventTime}`,\r\n            `${event.Name}`,\r\n        ];\r\n\r\n        for (const prop in event) {\r\n            if (prop && event.hasOwnProperty(prop) &&\r\n                prop !== \"eventTime\" && prop !== \"eventType\" &&\r\n                prop !== \"eventId\" && prop !== \"name\" &&\r\n                prop !== \"constructor\") {\r\n                const value = event[prop];\r\n                let valueToLog = \"<NULL>\";\r\n                if (value !== undefined && value !== null) {\r\n                    if (typeof (value) === \"number\" || typeof (value) === \"string\") {\r\n                        valueToLog = value.toString();\r\n                    } else {\r\n                        valueToLog = JSON.stringify(value);\r\n                    }\r\n                }\r\n\r\n                logFragments.push(`${prop}: ${valueToLog}`);\r\n            }\r\n\r\n        }\r\n\r\n        return logFragments.join(\" | \");\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Stream } from \"../common/Exports\";\r\n\r\nexport interface IRecorder {\r\n    record(context: AudioContext, mediaStream: MediaStream, outputStream: Stream<ArrayBuffer>): void;\r\n    releaseMediaResources(context: AudioContext): void;\r\n    setWorkletUrl(url: string): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport class HeaderNames {\r\n    public static AuthKey: string = \"Ocp-Apim-Subscription-Key\";\r\n    public static ConnectionId: string = \"X-ConnectionId\";\r\n    public static ContentType: string = \"Content-Type\";\r\n    public static CustomCommandsAppId: string = \"X-CommandsAppId\";\r\n    public static Path: string = \"Path\";\r\n    public static RequestId: string = \"X-RequestId\";\r\n    public static RequestStreamId: string = \"X-StreamId\";\r\n    public static RequestTimestamp: string = \"X-Timestamp\";\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport interface IAuthentication {\r\n    fetch(authFetchEventId: string): Promise<AuthInfo>;\r\n    fetchOnExpiry(authFetchEventId: string): Promise<AuthInfo>;\r\n}\r\n\r\nexport class AuthInfo {\r\n    private privHeaderName: string;\r\n    private privToken: string;\r\n\r\n    public constructor(headerName: string, token: string) {\r\n        this.privHeaderName = headerName;\r\n        this.privToken = token;\r\n    }\r\n\r\n    public get headerName(): string {\r\n        return this.privHeaderName;\r\n    }\r\n\r\n    public get token(): string {\r\n        return this.privToken;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ArgumentNullError,\r\n} from \"../common/Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport {\r\n    AuthInfo,\r\n    IAuthentication\r\n} from \"./IAuthentication\";\r\n\r\n/**\r\n * @class\r\n */\r\nexport class CognitiveSubscriptionKeyAuthentication implements IAuthentication {\r\n    private privAuthInfo: AuthInfo;\r\n\r\n    /**\r\n     * Creates and initializes an instance of the CognitiveSubscriptionKeyAuthentication class.\r\n     * @constructor\r\n     * @param {string} subscriptionKey - The subscription key\r\n     */\r\n    constructor(subscriptionKey: string) {\r\n        if (!subscriptionKey) {\r\n            throw new ArgumentNullError(\"subscriptionKey\");\r\n        }\r\n\r\n        this.privAuthInfo = new AuthInfo(HeaderNames.AuthKey, subscriptionKey);\r\n    }\r\n\r\n    /**\r\n     * Fetches the subscription key.\r\n     * @member\r\n     * @function\r\n     * @public\r\n     * @param {string} authFetchEventId - The id to fetch.\r\n     */\r\n    public fetch = (authFetchEventId: string): Promise<AuthInfo> => {\r\n        return Promise.resolve(this.privAuthInfo);\r\n    }\r\n\r\n    /**\r\n     * Fetches the subscription key.\r\n     * @member\r\n     * @function\r\n     * @public\r\n     * @param {string} authFetchEventId - The id to fetch.\r\n     */\r\n    public fetchOnExpiry = (authFetchEventId: string): Promise<AuthInfo> => {\r\n        return Promise.resolve(this.privAuthInfo);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ArgumentNullError } from \"../common/Exports\";\r\nimport { AuthInfo, IAuthentication } from \"./IAuthentication\";\r\n\r\nconst AuthHeader: string = \"Authorization\";\r\n\r\nexport class CognitiveTokenAuthentication implements IAuthentication {\r\n    private privFetchCallback: (authFetchEventId: string) => Promise<string>;\r\n    private privFetchOnExpiryCallback: (authFetchEventId: string) => Promise<string>;\r\n\r\n    constructor(fetchCallback: (authFetchEventId: string) => Promise<string>, fetchOnExpiryCallback: (authFetchEventId: string) => Promise<string>) {\r\n        if (!fetchCallback) {\r\n            throw new ArgumentNullError(\"fetchCallback\");\r\n        }\r\n\r\n        if (!fetchOnExpiryCallback) {\r\n            throw new ArgumentNullError(\"fetchOnExpiryCallback\");\r\n        }\r\n\r\n        this.privFetchCallback = fetchCallback;\r\n        this.privFetchOnExpiryCallback = fetchOnExpiryCallback;\r\n    }\r\n\r\n    public fetch = (authFetchEventId: string): Promise<AuthInfo> => {\r\n        return this.privFetchCallback(authFetchEventId).then((token: string) => new AuthInfo(AuthHeader, token));\r\n    }\r\n\r\n    public fetchOnExpiry = (authFetchEventId: string): Promise<AuthInfo> => {\r\n        return this.privFetchOnExpiryCallback(authFetchEventId).then((token: string) => new AuthInfo(AuthHeader, token));\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IConnection } from \"../common/Exports\";\r\nimport { AuthInfo } from \"./IAuthentication\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\n\r\nexport interface IConnectionFactory {\r\n    create(\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IConnection } from \"../common/Exports\";\r\nimport { AuthInfo } from \"./IAuthentication\";\r\nimport { SynthesizerConfig } from \"./SynthesizerConfig\";\r\n\r\nexport interface ISynthesisConnectionFactory {\r\n    create(\r\n        config: SynthesizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * @class Contracts\r\n * @private\r\n */\r\nexport class Contracts {\r\n    public static throwIfNullOrUndefined(param: any, name: string): void {\r\n        if (param === undefined || param === null) {\r\n            throw new Error(\"throwIfNullOrUndefined:\" + name);\r\n        }\r\n    }\r\n\r\n    public static throwIfNull(param: any, name: string): void {\r\n        if (param === null) {\r\n            throw new Error(\"throwIfNull:\" + name);\r\n        }\r\n    }\r\n\r\n    public static throwIfNullOrWhitespace(param: string, name: string): void {\r\n        Contracts.throwIfNullOrUndefined(param, name);\r\n\r\n        if ((\"\" + param).trim().length < 1) {\r\n            throw new Error(\"throwIfNullOrWhitespace:\" + name);\r\n        }\r\n    }\r\n\r\n    public static throwIfDisposed(isDisposed: boolean): void {\r\n        if (isDisposed) {\r\n            throw new Error(\"the object is already disposed\");\r\n        }\r\n    }\r\n\r\n    public static throwIfArrayEmptyOrWhitespace(array: string[], name: string): void {\r\n        Contracts.throwIfNullOrUndefined(array, name);\r\n\r\n        if (array.length === 0) {\r\n            throw new Error(\"throwIfArrayEmptyOrWhitespace:\" + name);\r\n        }\r\n\r\n        for (const item of array) {\r\n            Contracts.throwIfNullOrWhitespace(item, name);\r\n        }\r\n    }\r\n\r\n    public static throwIfFileDoesNotExist(param: any, name: string): void {\r\n        Contracts.throwIfNullOrWhitespace(param, name);\r\n\r\n        // TODO check for file existence.\r\n    }\r\n\r\n    public static throwIfNotUndefined(param: any, name: string): void {\r\n        if (param !== undefined) {\r\n            throw new Error(\"throwIfNotUndefined:\" + name);\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport * as fs from \"fs\";\r\nimport { IAudioDestination } from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport { AudioStreamFormat } from \"../Exports\";\r\nimport { AudioOutputFormatImpl } from \"./AudioOutputFormat\";\r\n\r\nexport class AudioFileWriter implements IAudioDestination {\r\n    private privAudioFormat: AudioOutputFormatImpl;\r\n    private privFd: number;\r\n    private privId: string;\r\n    private privWriteStream: fs.WriteStream;\r\n\r\n    public constructor(filename: fs.PathLike) {\r\n        Contracts.throwIfNullOrUndefined(fs.openSync, \"\\nFile System access not available, please use Push or PullAudioOutputStream\");\r\n        this.privFd = fs.openSync(filename, \"w\");\r\n    }\r\n\r\n    public set format(format: AudioStreamFormat) {\r\n        Contracts.throwIfNotUndefined(this.privAudioFormat, \"format is already set\");\r\n        this.privAudioFormat = format as AudioOutputFormatImpl;\r\n        let headerOffset: number = 0;\r\n        if (this.privAudioFormat.hasHeader) {\r\n            headerOffset = this.privAudioFormat.header.byteLength;\r\n        }\r\n        if (this.privFd !== undefined) {\r\n            this.privWriteStream = fs.createWriteStream(\"\", {fd: this.privFd, start: headerOffset, autoClose: false});\r\n        }\r\n    }\r\n\r\n    public write(buffer: ArrayBuffer): void {\r\n        Contracts.throwIfNullOrUndefined(this.privAudioFormat, \"must set format before writing.\");\r\n        if (this.privWriteStream !== undefined) {\r\n            this.privWriteStream.write(new Uint8Array(buffer.slice(0)));\r\n        }\r\n    }\r\n\r\n    public close(): void {\r\n        if (this.privFd !== undefined) {\r\n            this.privWriteStream.on(\"finish\", () => {\r\n                if (this.privAudioFormat.hasHeader) {\r\n                    this.privAudioFormat.updateHeader(this.privWriteStream.bytesWritten);\r\n                    fs.writeSync(this.privFd,\r\n                        new Int8Array(this.privAudioFormat.header),\r\n                        0,\r\n                        this.privAudioFormat.header.byteLength,\r\n                        0);\r\n                }\r\n                fs.closeSync(this.privFd);\r\n                this.privFd = undefined;\r\n            });\r\n            this.privWriteStream.end();\r\n        }\r\n    }\r\n\r\n    public id = (): string => {\r\n        return this.privId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport enum AudioFormatTag {\r\n    PCM = 1,\r\n    MuLaw,\r\n    Siren,\r\n    MP3,\r\n    SILKSkype,\r\n    OGG_OPUS,\r\n    WEBM_OPUS,\r\n    ALaw,\r\n}\r\n\r\n/**\r\n * Represents audio stream format used for custom audio input configurations.\r\n * @class AudioStreamFormat\r\n */\r\nexport abstract class AudioStreamFormat {\r\n    /**\r\n     * Creates an audio stream format object representing the default audio stream\r\n     * format (16KHz 16bit mono PCM).\r\n     * @member AudioStreamFormat.getDefaultInputFormat\r\n     * @function\r\n     * @public\r\n     * @returns {AudioStreamFormat} The audio stream format being created.\r\n     */\r\n    public static getDefaultInputFormat(): AudioStreamFormat {\r\n        return AudioStreamFormatImpl.getDefaultInputFormat();\r\n    }\r\n\r\n    /**\r\n     * Creates an audio stream format object with the specified pcm waveformat characteristics.\r\n     * @member AudioStreamFormat.getWaveFormatPCM\r\n     * @function\r\n     * @public\r\n     * @param {number} samplesPerSecond - Sample rate, in samples per second (Hertz).\r\n     * @param {number} bitsPerSample - Bits per sample, typically 16.\r\n     * @param {number} channels - Number of channels in the waveform-audio data. Monaural data\r\n     *        uses one channel and stereo data uses two channels.\r\n     * @returns {AudioStreamFormat} The audio stream format being created.\r\n     */\r\n    public static getWaveFormatPCM(samplesPerSecond: number, bitsPerSample: number, channels: number): AudioStreamFormat {\r\n        return new AudioStreamFormatImpl(samplesPerSecond, bitsPerSample, channels);\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member AudioStreamFormat.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * @private\r\n * @class AudioStreamFormatImpl\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioStreamFormatImpl extends AudioStreamFormat {\r\n    protected privHeader: ArrayBuffer;\r\n\r\n    /**\r\n     * Creates an instance with the given values.\r\n     * @constructor\r\n     * @param {number} samplesPerSec - Samples per second.\r\n     * @param {number} bitsPerSample - Bits per sample.\r\n     * @param {number} channels - Number of channels.\r\n     * @param {AudioFormatTag} format - Audio format (PCM, alaw or mulaw).\r\n     */\r\n    public constructor(samplesPerSec: number = 16000, bitsPerSample: number = 16, channels: number = 1, format: AudioFormatTag = AudioFormatTag.PCM) {\r\n        super();\r\n        /* 1 for PCM; 6 for alaw; 7 for mulaw */\r\n        switch (format) {\r\n            case AudioFormatTag.PCM:\r\n                this.formatTag = 1;\r\n                break;\r\n            case AudioFormatTag.ALaw:\r\n                this.formatTag = 6;\r\n                break;\r\n            case AudioFormatTag.MuLaw:\r\n                this.formatTag = 7;\r\n                break;\r\n            default:\r\n        }\r\n        this.bitsPerSample = bitsPerSample;\r\n        this.samplesPerSec = samplesPerSec;\r\n        this.channels = channels;\r\n        this.avgBytesPerSec = this.samplesPerSec * this.channels * (this.bitsPerSample / 8);\r\n        this.blockAlign = this.channels * Math.max(this.bitsPerSample, 8);\r\n\r\n        this.privHeader = new ArrayBuffer(44);\r\n\r\n        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView\r\n        const view = new DataView(this.privHeader);\r\n\r\n        /* RIFF identifier */\r\n        this.setString(view, 0, \"RIFF\");\r\n        /* file length */\r\n        view.setUint32(4, 0, true);\r\n        /* RIFF type & Format */\r\n        this.setString(view, 8, \"WAVEfmt \");\r\n        /* format chunk length */\r\n        view.setUint32(16, 16, true);\r\n        /* audio format */\r\n        view.setUint16(20, this.formatTag, true);\r\n        /* channel count */\r\n        view.setUint16(22, this.channels, true);\r\n        /* sample rate */\r\n        view.setUint32(24, this.samplesPerSec, true);\r\n        /* byte rate (sample rate * block align) */\r\n        view.setUint32(28, this.avgBytesPerSec, true);\r\n        /* block align (channel count * bytes per sample) */\r\n        view.setUint16(32, this.channels * (this.bitsPerSample / 8), true);\r\n        /* bits per sample */\r\n        view.setUint16(34, this.bitsPerSample, true);\r\n        /* data chunk identifier */\r\n        this.setString(view, 36, \"data\");\r\n        /* data chunk length */\r\n        view.setUint32(40, 0, true);\r\n    }\r\n\r\n    /**\r\n     * Retrieves the default input format.\r\n     * @member AudioStreamFormatImpl.getDefaultInputFormat\r\n     * @function\r\n     * @public\r\n     * @returns {AudioStreamFormatImpl} The default input format.\r\n     */\r\n    public static getDefaultInputFormat(): AudioStreamFormatImpl {\r\n        return new AudioStreamFormatImpl();\r\n    }\r\n\r\n    /**\r\n     * Creates an audio context appropriate to current browser\r\n     * @member AudioStreamFormatImpl.getAudioContext\r\n     * @function\r\n     * @public\r\n     * @returns {AudioContext} An audio context instance\r\n     */\r\n    public static getAudioContext(sampleRate?: number): AudioContext {\r\n        // Workaround for Speech SDK bug in Safari.\r\n        const AudioContext = (window as any).AudioContext // our preferred impl\r\n            || (window as any).webkitAudioContext // fallback, mostly when on Safari\r\n            || false; // could not find.\r\n\r\n        // https://developer.mozilla.org/en-US/docs/Web/API/AudioContext\r\n        if (!!AudioContext) {\r\n            if (sampleRate !== undefined && navigator.mediaDevices.getSupportedConstraints().sampleRate) {\r\n                return new AudioContext({ sampleRate });\r\n            } else {\r\n                return new AudioContext();\r\n            }\r\n        } else {\r\n            throw new Error(\"Browser does not support Web Audio API (AudioContext is not available).\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Closes the configuration object.\r\n     * @member AudioStreamFormatImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void { return; }\r\n\r\n    /**\r\n     * The format of the audio, valid values: 1 (PCM)\r\n     * @member AudioStreamFormatImpl.prototype.formatTag\r\n     * @function\r\n     * @public\r\n     */\r\n    public formatTag: number;\r\n\r\n    /**\r\n     * The number of channels, valid values: 1 (Mono).\r\n     * @member AudioStreamFormatImpl.prototype.channels\r\n     * @function\r\n     * @public\r\n     */\r\n    public channels: number;\r\n\r\n    /**\r\n     * The sample rate, valid values: 16000.\r\n     * @member AudioStreamFormatImpl.prototype.samplesPerSec\r\n     * @function\r\n     * @public\r\n     */\r\n    public samplesPerSec: number;\r\n\r\n    /**\r\n     * The bits per sample, valid values: 16\r\n     * @member AudioStreamFormatImpl.prototype.b\r\n     * @function\r\n     * @public\r\n     */\r\n    public bitsPerSample: number;\r\n\r\n    /**\r\n     * Average bytes per second, usually calculated as nSamplesPerSec * nChannels * ceil(wBitsPerSample, 8).\r\n     * @member AudioStreamFormatImpl.prototype.avgBytesPerSec\r\n     * @function\r\n     * @public\r\n     */\r\n    public avgBytesPerSec: number;\r\n\r\n    /**\r\n     * The size of a single frame, valid values: nChannels * ceil(wBitsPerSample, 8).\r\n     * @member AudioStreamFormatImpl.prototype.blockAlign\r\n     * @function\r\n     * @public\r\n     */\r\n    public blockAlign: number;\r\n\r\n    public get header(): ArrayBuffer {\r\n        return this.privHeader;\r\n    }\r\n\r\n    protected setString = (view: DataView, offset: number, str: string): void => {\r\n        for (let i = 0; i < str.length; i++) {\r\n            view.setUint8(offset + i, str.charCodeAt(i));\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport {\r\n    connectivity,\r\n    ISpeechConfigAudioDevice,\r\n    type,\r\n} from \"../../common.speech/Exports\";\r\nimport {\r\n    AudioSourceEvent,\r\n    AudioSourceInitializingEvent,\r\n    AudioSourceReadyEvent,\r\n    AudioStreamNodeAttachedEvent,\r\n    AudioStreamNodeAttachingEvent,\r\n    AudioStreamNodeDetachedEvent,\r\n    ChunkedArrayBufferStream,\r\n    Deferred,\r\n    Events,\r\n    EventSource,\r\n    IAudioSource,\r\n    IAudioStreamNode,\r\n    IStreamChunk,\r\n    Stream,\r\n} from \"../../common/Exports\";\r\nimport { createNoDashGuid } from \"../../common/Guid\";\r\nimport { AudioStreamFormat, PullAudioInputStreamCallback } from \"../Exports\";\r\nimport { AudioStreamFormatImpl } from \"./AudioStreamFormat\";\r\n\r\n/**\r\n * Represents audio input stream used for custom audio input configurations.\r\n * @class AudioInputStream\r\n */\r\nexport abstract class AudioInputStream {\r\n\r\n    /**\r\n     * Creates and initializes an instance.\r\n     * @constructor\r\n     */\r\n    protected constructor() { }\r\n\r\n    /**\r\n     * Creates a memory backed PushAudioInputStream with the specified audio format.\r\n     * @member AudioInputStream.createPushStream\r\n     * @function\r\n     * @public\r\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be\r\n     *        written to the push audio stream's write() method (Required if format is not 16 kHz 16bit mono PCM).\r\n     * @returns {PushAudioInputStream} The audio input stream being created.\r\n     */\r\n    public static createPushStream(format?: AudioStreamFormat): PushAudioInputStream {\r\n        return PushAudioInputStream.create(format);\r\n    }\r\n\r\n    /**\r\n     * Creates a PullAudioInputStream that delegates to the specified callback interface for read()\r\n     * and close() methods.\r\n     * @member AudioInputStream.createPullStream\r\n     * @function\r\n     * @public\r\n     * @param {PullAudioInputStreamCallback} callback - The custom audio input object, derived from\r\n     *        PullAudioInputStreamCallback\r\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be returned from\r\n     *        the callback's read() method (Required if format is not 16 kHz 16bit mono PCM).\r\n     * @returns {PullAudioInputStream} The audio input stream being created.\r\n     */\r\n    public static createPullStream(callback: PullAudioInputStreamCallback, format?: AudioStreamFormat): PullAudioInputStream {\r\n        return PullAudioInputStream.create(callback, format);\r\n        // throw new Error(\"Oops\");\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member AudioInputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * Represents memory backed push audio input stream used for custom audio input configurations.\r\n * @class PushAudioInputStream\r\n */\r\nexport abstract class PushAudioInputStream extends AudioInputStream {\r\n\r\n    /**\r\n     * Creates a memory backed PushAudioInputStream with the specified audio format.\r\n     * @member PushAudioInputStream.create\r\n     * @function\r\n     * @public\r\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be written to the\r\n     *        push audio stream's write() method (Required if format is not 16 kHz 16bit mono PCM).\r\n     * @returns {PushAudioInputStream} The push audio input stream being created.\r\n     */\r\n    public static create(format?: AudioStreamFormat): PushAudioInputStream {\r\n        return new PushAudioInputStreamImpl(format);\r\n    }\r\n\r\n    /**\r\n     * Writes the audio data specified by making an internal copy of the data.\r\n     * @member PushAudioInputStream.prototype.write\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - The audio buffer of which this function will make a copy.\r\n     */\r\n    public abstract write(dataBuffer: ArrayBuffer): void;\r\n\r\n    /**\r\n     * Closes the stream.\r\n     * @member PushAudioInputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * Represents memory backed push audio input stream used for custom audio input configurations.\r\n * @private\r\n * @class PushAudioInputStreamImpl\r\n */\r\nexport class PushAudioInputStreamImpl extends PushAudioInputStream implements IAudioSource {\r\n\r\n    private privFormat: AudioStreamFormatImpl;\r\n    private privId: string;\r\n    private privEvents: EventSource<AudioSourceEvent>;\r\n    private privStream: Stream<ArrayBuffer>;\r\n\r\n    /**\r\n     * Creates and initalizes an instance with the given values.\r\n     * @constructor\r\n     * @param {AudioStreamFormat} format - The audio stream format.\r\n     */\r\n    public constructor(format?: AudioStreamFormat) {\r\n        super();\r\n        if (format === undefined) {\r\n            this.privFormat = AudioStreamFormatImpl.getDefaultInputFormat();\r\n        } else {\r\n            this.privFormat = format as AudioStreamFormatImpl;\r\n        }\r\n        this.privEvents = new EventSource<AudioSourceEvent>();\r\n        this.privId = createNoDashGuid();\r\n        this.privStream = new ChunkedArrayBufferStream(this.privFormat.avgBytesPerSec / 10);\r\n    }\r\n\r\n    /**\r\n     * Format information for the audio\r\n     */\r\n    public get format(): Promise<AudioStreamFormatImpl> {\r\n        return Promise.resolve(this.privFormat);\r\n    }\r\n\r\n    /**\r\n     * Writes the audio data specified by making an internal copy of the data.\r\n     * @member PushAudioInputStreamImpl.prototype.write\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - The audio buffer of which this function will make a copy.\r\n     */\r\n    public write(dataBuffer: ArrayBuffer): void {\r\n        this.privStream.writeStreamChunk({\r\n            buffer: dataBuffer,\r\n            isEnd: false,\r\n            timeReceived: Date.now()\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Closes the stream.\r\n     * @member PushAudioInputStreamImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        this.privStream.close();\r\n    }\r\n\r\n    public id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public get blob(): Promise<Blob | Buffer> {\r\n        return this.attach(\"id\").then<Blob | Buffer>((audioNode: IAudioStreamNode) => {\r\n            const data: ArrayBuffer[] = [];\r\n            let bufferData = Buffer.from(\"\");\r\n            const readCycle = (): Promise<Blob | Buffer> => {\r\n                return audioNode.read().then<Blob | Buffer>((audioStreamChunk: IStreamChunk<ArrayBuffer>) => {\r\n                    if (!audioStreamChunk || audioStreamChunk.isEnd) {\r\n                        if (typeof (XMLHttpRequest) !== \"undefined\" && typeof (Blob) !== \"undefined\") {\r\n                            return Promise.resolve(new Blob(data));\r\n                        } else {\r\n                            return Promise.resolve(Buffer.from(bufferData));\r\n                        }\r\n                    } else {\r\n                        if (typeof (Blob) !== \"undefined\") {\r\n                            data.push(audioStreamChunk.buffer);\r\n                        } else {\r\n                            bufferData = Buffer.concat([bufferData, this.toBuffer(audioStreamChunk.buffer)]);\r\n                        }\r\n                        return readCycle();\r\n                    }\r\n                });\r\n            };\r\n            return readCycle();\r\n        });\r\n    }\r\n\r\n    public turnOn(): Promise<void> {\r\n        this.onEvent(new AudioSourceInitializingEvent(this.privId)); // no stream id\r\n        this.onEvent(new AudioSourceReadyEvent(this.privId));\r\n        return;\r\n    }\r\n\r\n    public async attach(audioNodeId: string): Promise<IAudioStreamNode> {\r\n        this.onEvent(new AudioStreamNodeAttachingEvent(this.privId, audioNodeId));\r\n\r\n        await this.turnOn();\r\n        const stream = this.privStream;\r\n        this.onEvent(new AudioStreamNodeAttachedEvent(this.privId, audioNodeId));\r\n        return {\r\n            detach: async () => {\r\n                stream.readEnded();\r\n                this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n                return this.turnOff();\r\n            },\r\n            id: () => {\r\n                return audioNodeId;\r\n            },\r\n            read: () => {\r\n                return stream.read();\r\n            },\r\n        };\r\n    }\r\n\r\n    public detach(audioNodeId: string): void {\r\n        this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n    }\r\n\r\n    public turnOff(): Promise<void> {\r\n        return;\r\n    }\r\n\r\n    public get events(): EventSource<AudioSourceEvent> {\r\n        return this.privEvents;\r\n    }\r\n\r\n    public get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\r\n        return Promise.resolve({\r\n            bitspersample: this.privFormat.bitsPerSample,\r\n            channelcount: this.privFormat.channels,\r\n            connectivity: connectivity.Unknown,\r\n            manufacturer: \"Speech SDK\",\r\n            model: \"PushStream\",\r\n            samplerate: this.privFormat.samplesPerSec,\r\n            type: type.Stream,\r\n        });\r\n    }\r\n\r\n    private onEvent = (event: AudioSourceEvent): void => {\r\n        this.privEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private toBuffer(arrayBuffer: ArrayBuffer): Buffer {\r\n        const buf: Buffer = Buffer.alloc(arrayBuffer.byteLength);\r\n        const view: Uint8Array = new Uint8Array(arrayBuffer);\r\n        for (let i = 0; i < buf.length; ++i) {\r\n            buf[i] = view[i];\r\n        }\r\n        return buf;\r\n    }\r\n}\r\n\r\n/*\r\n * Represents audio input stream used for custom audio input configurations.\r\n * @class PullAudioInputStream\r\n */\r\nexport abstract class PullAudioInputStream extends AudioInputStream {\r\n    /**\r\n     * Creates and initializes and instance.\r\n     * @constructor\r\n     */\r\n    protected constructor() { super(); }\r\n\r\n    /**\r\n     * Creates a PullAudioInputStream that delegates to the specified callback interface for\r\n     * read() and close() methods, using the default format (16 kHz 16bit mono PCM).\r\n     * @member PullAudioInputStream.create\r\n     * @function\r\n     * @public\r\n     * @param {PullAudioInputStreamCallback} callback - The custom audio input object,\r\n     *        derived from PullAudioInputStreamCustomCallback\r\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be\r\n     *        returned from the callback's read() method (Required if format is not 16 kHz 16bit mono PCM).\r\n     * @returns {PullAudioInputStream} The push audio input stream being created.\r\n     */\r\n    public static create(callback: PullAudioInputStreamCallback, format?: AudioStreamFormat): PullAudioInputStream {\r\n        return new PullAudioInputStreamImpl(callback, format as AudioStreamFormatImpl);\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member PullAudioInputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n\r\n}\r\n\r\n/**\r\n * Represents audio input stream used for custom audio input configurations.\r\n * @private\r\n * @class PullAudioInputStreamImpl\r\n */\r\nexport class PullAudioInputStreamImpl extends PullAudioInputStream implements IAudioSource {\r\n\r\n    private privCallback: PullAudioInputStreamCallback;\r\n    private privFormat: AudioStreamFormatImpl;\r\n    private privId: string;\r\n    private privEvents: EventSource<AudioSourceEvent>;\r\n    private privIsClosed: boolean;\r\n    private privBufferSize: number;\r\n\r\n    /**\r\n     * Creates a PullAudioInputStream that delegates to the specified callback interface for\r\n     * read() and close() methods, using the default format (16 kHz 16bit mono PCM).\r\n     * @constructor\r\n     * @param {PullAudioInputStreamCallback} callback - The custom audio input object,\r\n     *        derived from PullAudioInputStreamCustomCallback\r\n     * @param {AudioStreamFormat} format - The audio data format in which audio will be\r\n     *        returned from the callback's read() method (Required if format is not 16 kHz 16bit mono PCM).\r\n     */\r\n    public constructor(callback: PullAudioInputStreamCallback, format?: AudioStreamFormatImpl) {\r\n        super();\r\n        if (undefined === format) {\r\n            this.privFormat = AudioStreamFormat.getDefaultInputFormat() as AudioStreamFormatImpl;\r\n        } else {\r\n            this.privFormat = format;\r\n        }\r\n        this.privEvents = new EventSource<AudioSourceEvent>();\r\n        this.privId = createNoDashGuid();\r\n        this.privCallback = callback;\r\n        this.privIsClosed = false;\r\n        this.privBufferSize = this.privFormat.avgBytesPerSec / 10;\r\n    }\r\n\r\n    /**\r\n     * Format information for the audio\r\n     */\r\n    public get format(): Promise<AudioStreamFormatImpl> {\r\n        return Promise.resolve(this.privFormat);\r\n    }\r\n\r\n    /**\r\n     * Closes the stream.\r\n     * @member PullAudioInputStreamImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        this.privIsClosed = true;\r\n        this.privCallback.close();\r\n    }\r\n\r\n    public id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public get blob(): Promise<Blob | Buffer> {\r\n        return Promise.reject(\"Not implemented\");\r\n    }\r\n\r\n    public turnOn(): Promise<void> {\r\n        this.onEvent(new AudioSourceInitializingEvent(this.privId)); // no stream id\r\n        this.onEvent(new AudioSourceReadyEvent(this.privId));\r\n        return;\r\n    }\r\n\r\n    public async attach(audioNodeId: string): Promise<IAudioStreamNode> {\r\n        this.onEvent(new AudioStreamNodeAttachingEvent(this.privId, audioNodeId));\r\n\r\n        await this.turnOn();\r\n        this.onEvent(new AudioStreamNodeAttachedEvent(this.privId, audioNodeId));\r\n        return {\r\n            detach: () => {\r\n                this.privCallback.close();\r\n                this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n                return this.turnOff();\r\n            },\r\n            id: () => {\r\n                return audioNodeId;\r\n            },\r\n            read: (): Promise<IStreamChunk<ArrayBuffer>> => {\r\n                let totalBytes: number = 0;\r\n                let transmitBuff: ArrayBuffer;\r\n                // Until we have the minimum number of bytes to send in a transmission, keep asking for more.\r\n                while (totalBytes < this.privBufferSize) {\r\n                    // Sizing the read buffer to the delta between the perfect size and what's left means we won't ever get too much\r\n                    // data back.\r\n                    const readBuff: ArrayBuffer = new ArrayBuffer(this.privBufferSize - totalBytes);\r\n                    const pulledBytes: number = this.privCallback.read(readBuff);\r\n                    // If there is no return buffer yet defined, set the return buffer to the that was just populated.\r\n                    // This was, if we have enough data there's no copy penalty, but if we don't we have a buffer that's the\r\n                    // preferred size allocated.\r\n                    if (undefined === transmitBuff) {\r\n                        transmitBuff = readBuff;\r\n                    } else {\r\n                        // Not the first bite at the apple, so fill the return buffer with the data we got back.\r\n                        const intView: Int8Array = new Int8Array(transmitBuff);\r\n                        intView.set(new Int8Array(readBuff), totalBytes);\r\n                    }\r\n                    // If there are no bytes to read, just break out and be done.\r\n                    if (0 === pulledBytes) {\r\n                        break;\r\n                    }\r\n                    totalBytes += pulledBytes;\r\n                }\r\n                return Promise.resolve<IStreamChunk<ArrayBuffer>>({\r\n                    buffer: transmitBuff.slice(0, totalBytes),\r\n                    isEnd: this.privIsClosed || totalBytes === 0,\r\n                    timeReceived: Date.now(),\r\n                });\r\n            },\r\n        };\r\n    }\r\n\r\n    public detach(audioNodeId: string): void {\r\n        this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n    }\r\n\r\n    public turnOff(): Promise<void> {\r\n        return;\r\n    }\r\n\r\n    public get events(): EventSource<AudioSourceEvent> {\r\n        return this.privEvents;\r\n    }\r\n\r\n    public get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\r\n        return Promise.resolve({\r\n            bitspersample: this.privFormat.bitsPerSample,\r\n            channelcount: this.privFormat.channels,\r\n            connectivity: connectivity.Unknown,\r\n            manufacturer: \"Speech SDK\",\r\n            model: \"PullStream\",\r\n            samplerate: this.privFormat.samplesPerSec,\r\n            type: type.Stream,\r\n        });\r\n    }\r\n\r\n    private onEvent = (event: AudioSourceEvent): void => {\r\n        this.privEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Define speech synthesis audio output formats.\r\n * @enum SpeechSynthesisOutputFormat\r\n * Updated in version 1.17.0\r\n */\r\nexport enum SpeechSynthesisOutputFormat {\r\n    /**\r\n     * raw-8khz-8bit-mono-mulaw\r\n     * @member SpeechSynthesisOutputFormat.Raw8Khz8BitMonoMULaw,\r\n     */\r\n    Raw8Khz8BitMonoMULaw,\r\n\r\n    /**\r\n     * riff-16khz-16kbps-mono-siren\r\n     * @note Unsupported by the service. Do not use this value.\r\n     * @member SpeechSynthesisOutputFormat.Riff16Khz16KbpsMonoSiren\r\n     */\r\n    Riff16Khz16KbpsMonoSiren ,\r\n\r\n    /**\r\n     * audio-16khz-16kbps-mono-siren\r\n     * @note Unsupported by the service. Do not use this value.\r\n     * @member SpeechSynthesisOutputFormat.Audio16Khz16KbpsMonoSiren\r\n     */\r\n    Audio16Khz16KbpsMonoSiren,\r\n\r\n    /**\r\n     * audio-16khz-32kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio16Khz32KBitRateMonoMp3\r\n     */\r\n    Audio16Khz32KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-16khz-128kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio16Khz128KBitRateMonoMp3\r\n     */\r\n    Audio16Khz128KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-16khz-64kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio16Khz64KBitRateMonoMp3\r\n     */\r\n    Audio16Khz64KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-24khz-48kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio24Khz48KBitRateMonoMp3\r\n     */\r\n    Audio24Khz48KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-24khz-96kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio24Khz96KBitRateMonoMp3\r\n     */\r\n    Audio24Khz96KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-24khz-160kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio24Khz160KBitRateMonoMp3\r\n     */\r\n    Audio24Khz160KBitRateMonoMp3,\r\n\r\n    /**\r\n     * raw-16khz-16bit-mono-truesilk\r\n     * @member SpeechSynthesisOutputFormat.Raw16Khz16BitMonoTrueSilk\r\n     */\r\n    Raw16Khz16BitMonoTrueSilk,\r\n\r\n    /**\r\n     * riff-16khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Riff16Khz16BitMonoPcm\r\n     */\r\n    Riff16Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * riff-8khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Riff8Khz16BitMonoPcm\r\n     */\r\n    Riff8Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * riff-24khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm\r\n     */\r\n    Riff24Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * riff-8khz-8bit-mono-mulaw\r\n     * @member SpeechSynthesisOutputFormat.Riff8Khz8BitMonoMULaw\r\n     */\r\n    Riff8Khz8BitMonoMULaw,\r\n\r\n    /**\r\n     * raw-16khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Raw16Khz16BitMonoPcm\r\n     */\r\n    Raw16Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * raw-24khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Raw24Khz16BitMonoPcm\r\n     */\r\n    Raw24Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * raw-8khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Raw8Khz16BitMonoPcm\r\n     */\r\n    Raw8Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * ogg-16khz-16bit-mono-opus\r\n     * @member SpeechSynthesisOutputFormat.Ogg16Khz16BitMonoOpus\r\n     */\r\n    Ogg16Khz16BitMonoOpus,\r\n\r\n    /**\r\n     * ogg-24khz-16bit-mono-opus\r\n     * @member SpeechSynthesisOutputFormat.Ogg24Khz16BitMonoOpus\r\n     */\r\n    Ogg24Khz16BitMonoOpus,\r\n\r\n    /**\r\n     * raw-48khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Raw48Khz16BitMonoPcm\r\n     */\r\n    Raw48Khz16BitMonoPcm,\r\n\r\n    /**\r\n     * riff-48khz-16bit-mono-pcm\r\n     * @member SpeechSynthesisOutputFormat.Riff48Khz16BitMonoPcm\r\n     */\r\n\r\n    Riff48Khz16BitMonoPcm,\r\n    /**\r\n     * audio-48khz-96kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio48Khz96KBitRateMonoMp3\r\n     */\r\n    Audio48Khz96KBitRateMonoMp3,\r\n\r\n    /**\r\n     * audio-48khz-192kbitrate-mono-mp3\r\n     * @member SpeechSynthesisOutputFormat.Audio48Khz192KBitRateMonoMp3\r\n     */\r\n    Audio48Khz192KBitRateMonoMp3,\r\n\r\n    /**\r\n     * ogg-48khz-16bit-mono-opus\r\n     * Added in version 1.16.0\r\n     * @member SpeechSynthesisOutputFormat.Ogg48Khz16BitMonoOpus\r\n     */\r\n    Ogg48Khz16BitMonoOpus,\r\n\r\n    /**\r\n     * webm-16khz-16bit-mono-opus\r\n     * Added in version 1.16.0\r\n     * @member SpeechSynthesisOutputFormat.Webm16Khz16BitMonoOpus\r\n     */\r\n    Webm16Khz16BitMonoOpus,\r\n\r\n    /**\r\n     * webm-24khz-16bit-mono-opus\r\n     * Added in version 1.16.0\r\n     * @member SpeechSynthesisOutputFormat.Webm24Khz16BitMonoOpus\r\n     */\r\n    Webm24Khz16BitMonoOpus,\r\n\r\n    /**\r\n     * raw-24khz-16bit-mono-truesilk\r\n     * Added in version 1.17.0\r\n     * @member SpeechSynthesisOutputFormat.Raw24Khz16BitMonoTrueSilk\r\n     */\r\n     Raw24Khz16BitMonoTrueSilk,\r\n\r\n    /**\r\n     * raw-8khz-8bit-mono-alaw\r\n     * Added in version 1.17.0\r\n     * @member SpeechSynthesisOutputFormat.Raw8Khz8BitMonoALaw\r\n     */\r\n     Raw8Khz8BitMonoALaw,\r\n\r\n    /**\r\n     * riff-8khz-8bit-mono-alaw\r\n     * Added in version 1.17.0\r\n     * @member SpeechSynthesisOutputFormat.Riff8Khz8BitMonoALaw\r\n     */\r\n     Riff8Khz8BitMonoALaw,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { INumberDictionary } from \"../../common/Exports\";\r\nimport { SpeechSynthesisOutputFormat } from \"../SpeechSynthesisOutputFormat\";\r\nimport { AudioFormatTag, AudioStreamFormatImpl } from \"./AudioStreamFormat\";\r\n\r\n/**\r\n * @private\r\n * @class AudioOutputFormatImpl\r\n * Updated in version 1.17.0\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AudioOutputFormatImpl extends AudioStreamFormatImpl {\r\n    public static SpeechSynthesisOutputFormatToString: INumberDictionary<string> = {\r\n        [SpeechSynthesisOutputFormat.Raw8Khz8BitMonoMULaw]: \"raw-8khz-8bit-mono-mulaw\",\r\n        [SpeechSynthesisOutputFormat.Riff16Khz16KbpsMonoSiren]: \"riff-16khz-16kbps-mono-siren\",\r\n        [SpeechSynthesisOutputFormat.Audio16Khz16KbpsMonoSiren]: \"audio-16khz-16kbps-mono-siren\",\r\n        [SpeechSynthesisOutputFormat.Audio16Khz32KBitRateMonoMp3]: \"audio-16khz-32kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio16Khz128KBitRateMonoMp3]: \"audio-16khz-128kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio16Khz64KBitRateMonoMp3]: \"audio-16khz-64kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio24Khz48KBitRateMonoMp3]: \"audio-24khz-48kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio24Khz96KBitRateMonoMp3]: \"audio-24khz-96kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio24Khz160KBitRateMonoMp3]: \"audio-24khz-160kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Raw16Khz16BitMonoTrueSilk]: \"raw-16khz-16bit-mono-truesilk\",\r\n        [SpeechSynthesisOutputFormat.Riff16Khz16BitMonoPcm]: \"riff-16khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Riff8Khz16BitMonoPcm]: \"riff-8khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm]: \"riff-24khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Riff8Khz8BitMonoMULaw]: \"riff-8khz-8bit-mono-mulaw\",\r\n        [SpeechSynthesisOutputFormat.Raw16Khz16BitMonoPcm]: \"raw-16khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Raw24Khz16BitMonoPcm]: \"raw-24khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Raw8Khz16BitMonoPcm]: \"raw-8khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Ogg16Khz16BitMonoOpus]: \"ogg-16khz-16bit-mono-opus\",\r\n        [SpeechSynthesisOutputFormat.Ogg24Khz16BitMonoOpus]: \"ogg-24khz-16bit-mono-opus\",\r\n        [SpeechSynthesisOutputFormat.Raw48Khz16BitMonoPcm]: \"raw-48khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Riff48Khz16BitMonoPcm]: \"riff-48khz-16bit-mono-pcm\",\r\n        [SpeechSynthesisOutputFormat.Audio48Khz96KBitRateMonoMp3]: \"audio-48khz-96kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Audio48Khz192KBitRateMonoMp3]: \"audio-48khz-192kbitrate-mono-mp3\",\r\n        [SpeechSynthesisOutputFormat.Ogg48Khz16BitMonoOpus]: \"ogg-48khz-16bit-mono-opus\",\r\n        [SpeechSynthesisOutputFormat.Webm16Khz16BitMonoOpus]: \"webm-16khz-16bit-mono-opus\",\r\n        [SpeechSynthesisOutputFormat.Webm24Khz16BitMonoOpus]: \"webm-24khz-16bit-mono-opus\",\r\n        [SpeechSynthesisOutputFormat.Raw24Khz16BitMonoTrueSilk]: \"raw-24khz-16bit-mono-truesilk\",\r\n        [SpeechSynthesisOutputFormat.Raw8Khz8BitMonoALaw]: \"raw-8khz-8bit-mono-alaw\",\r\n        [SpeechSynthesisOutputFormat.Riff8Khz8BitMonoALaw]: \"riff-8khz-8bit-mono-alaw\",\r\n    };\r\n    private priAudioFormatString: string;\r\n    /**\r\n     * audio format string for synthesis request, which may differ from priAudioFormatString.\r\n     * e.g. for riff format, we will request raw format and add a header in SDK side.\r\n     */\r\n    private readonly priRequestAudioFormatString: string;\r\n    private readonly priHasHeader: boolean;\r\n\r\n    /**\r\n     * Creates an instance with the given values.\r\n     * @constructor\r\n     * @param formatTag\r\n     * @param {number} channels - Number of channels.\r\n     * @param {number} samplesPerSec - Samples per second.\r\n     * @param {number} avgBytesPerSec - Average bytes per second.\r\n     * @param {number} blockAlign - Block alignment.\r\n     * @param {number} bitsPerSample - Bits per sample.\r\n     * @param {string} audioFormatString - Audio format string\r\n     * @param {string} requestAudioFormatString - Audio format string sent to service.\r\n     * @param {boolean} hasHeader - If the format has header or not.\r\n     */\r\n    public constructor(formatTag: AudioFormatTag,\r\n                       channels: number,\r\n                       samplesPerSec: number,\r\n                       avgBytesPerSec: number,\r\n                       blockAlign: number,\r\n                       bitsPerSample: number,\r\n                       audioFormatString: string,\r\n                       requestAudioFormatString: string,\r\n                       hasHeader: boolean) {\r\n        super(samplesPerSec, bitsPerSample, channels, formatTag);\r\n        this.formatTag = formatTag;\r\n        this.avgBytesPerSec = avgBytesPerSec;\r\n        this.blockAlign = blockAlign;\r\n        this.priAudioFormatString = audioFormatString;\r\n        this.priRequestAudioFormatString = requestAudioFormatString;\r\n        this.priHasHeader = hasHeader;\r\n    }\r\n\r\n    public static fromSpeechSynthesisOutputFormat(speechSynthesisOutputFormat?: SpeechSynthesisOutputFormat): AudioOutputFormatImpl {\r\n        if (speechSynthesisOutputFormat === undefined) {\r\n            return AudioOutputFormatImpl.getDefaultOutputFormat();\r\n        }\r\n        return AudioOutputFormatImpl.fromSpeechSynthesisOutputFormatString(\r\n            AudioOutputFormatImpl.SpeechSynthesisOutputFormatToString[speechSynthesisOutputFormat]);\r\n    }\r\n\r\n    public static fromSpeechSynthesisOutputFormatString(speechSynthesisOutputFormatString: string): AudioOutputFormatImpl {\r\n        switch (speechSynthesisOutputFormatString) {\r\n            case \"raw-8khz-8bit-mono-mulaw\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MuLaw,\r\n                    1,\r\n                    8000,\r\n                    8000,\r\n                    1,\r\n                    8,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"riff-16khz-16kbps-mono-siren\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.Siren,\r\n                    1,\r\n                    16000,\r\n                    2000,\r\n                    40,\r\n                    0,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"audio-16khz-16kbps-mono-siren\",\r\n                    true);\r\n            case \"audio-16khz-16kbps-mono-siren\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.Siren,\r\n                    1,\r\n                    16000,\r\n                    2000,\r\n                    40,\r\n                    0,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-16khz-32kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    16000,\r\n                    32 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-16khz-128kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    16000,\r\n                    128 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-16khz-64kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    16000,\r\n                    64 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-24khz-48kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    24000,\r\n                    48 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-24khz-96kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    24000,\r\n                    96 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-24khz-160kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    24000,\r\n                    160 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"raw-16khz-16bit-mono-truesilk\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.SILKSkype,\r\n                    1,\r\n                    16000,\r\n                    32000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n\r\n            case \"riff-8khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    8000,\r\n                    16000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-8khz-16bit-mono-pcm\",\r\n                    true);\r\n            case \"riff-24khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    24000,\r\n                    48000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-24khz-16bit-mono-pcm\",\r\n                    true);\r\n            case \"riff-8khz-8bit-mono-mulaw\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MuLaw,\r\n                    1,\r\n                    8000,\r\n                    8000,\r\n                    1,\r\n                    8,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-8khz-8bit-mono-mulaw\",\r\n                    true);\r\n            case \"raw-16khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    16000,\r\n                    32000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-16khz-16bit-mono-pcm\",\r\n                    false);\r\n            case \"raw-24khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    24000,\r\n                    48000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-24khz-16bit-mono-pcm\",\r\n                    false);\r\n            case \"raw-8khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    8000,\r\n                    16000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-8khz-16bit-mono-pcm\",\r\n                    false);\r\n            case \"ogg-16khz-16bit-mono-opus\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.OGG_OPUS,\r\n                    1,\r\n                    16000,\r\n                    8192,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"ogg-24khz-16bit-mono-opus\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.OGG_OPUS,\r\n                    1,\r\n                    24000,\r\n                    8192,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"raw-48khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    48000,\r\n                    96000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-48khz-16bit-mono-pcm\",\r\n                    false);\r\n            case \"riff-48khz-16bit-mono-pcm\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    48000,\r\n                    96000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-48khz-16bit-mono-pcm\",\r\n                    true);\r\n            case \"audio-48khz-96kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    48000,\r\n                    96 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"audio-48khz-192kbitrate-mono-mp3\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.MP3,\r\n                    1,\r\n                    48000,\r\n                    192 << 7,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"ogg-48khz-16bit-mono-opus\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.OGG_OPUS,\r\n                    1,\r\n                    48000,\r\n                    12000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"webm-16khz-16bit-mono-opus\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.WEBM_OPUS,\r\n                    1,\r\n                    16000,\r\n                    8000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"webm-24khz-16bit-mono-opus\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.WEBM_OPUS,\r\n                    1,\r\n                    24000,\r\n                    8000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"raw-24khz-16bit-mono-truesilk\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.SILKSkype,\r\n                    1,\r\n                    24000,\r\n                    48000,\r\n                    2,\r\n                    16,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"raw-8khz-8bit-mono-alaw\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.ALaw,\r\n                    1,\r\n                    8000,\r\n                    8000,\r\n                    1,\r\n                    8,\r\n                    speechSynthesisOutputFormatString,\r\n                    speechSynthesisOutputFormatString,\r\n                    false);\r\n            case \"riff-8khz-8bit-mono-alaw\":\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.ALaw,\r\n                    1,\r\n                    8000,\r\n                    8000,\r\n                    1,\r\n                    8,\r\n                    speechSynthesisOutputFormatString,\r\n                    \"raw-8khz-8bit-mono-alaw\",\r\n                    true);\r\n            case \"riff-16khz-16bit-mono-pcm\":\r\n            default:\r\n                return new AudioOutputFormatImpl(\r\n                    AudioFormatTag.PCM,\r\n                    1,\r\n                    16000,\r\n                    32000,\r\n                    2,\r\n                    16,\r\n                    \"riff-16khz-16bit-mono-pcm\",\r\n                    \"raw-16khz-16bit-mono-pcm\",\r\n                    true);\r\n        }\r\n    }\r\n\r\n    public static getDefaultOutputFormat(): AudioOutputFormatImpl {\r\n        return AudioOutputFormatImpl.fromSpeechSynthesisOutputFormatString(\r\n            (typeof window !== \"undefined\") ? \"audio-24khz-48kbitrate-mono-mp3\" : \"riff-16khz-16bit-mono-pcm\");\r\n    }\r\n\r\n    /**\r\n     * The format tag of the audio\r\n     * @AudioFormatTag AudioOutputFormatImpl.prototype.formatTag\r\n     * @function\r\n     * @public\r\n     */\r\n    public formatTag: AudioFormatTag;\r\n\r\n    /**\r\n     * Specifies if this audio output format has a header\r\n     * @boolean AudioOutputFormatImpl.prototype.hasHeader\r\n     * @function\r\n     * @public\r\n     */\r\n    public get hasHeader(): boolean {\r\n        return this.priHasHeader;\r\n    }\r\n\r\n    /**\r\n     * Specifies the header of this format\r\n     * @ArrayBuffer AudioOutputFormatImpl.prototype.header\r\n     * @function\r\n     * @public\r\n     */\r\n    public get header(): ArrayBuffer {\r\n        if (this.hasHeader) {\r\n            return this.privHeader;\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    /**\r\n     * Updates the header based on the audio length\r\n     * @member AudioOutputFormatImpl.updateHeader\r\n     * @function\r\n     * @public\r\n     * @param {number} audioLength - the audio length\r\n     */\r\n    public updateHeader(audioLength: number): void {\r\n        if (this.priHasHeader) {\r\n            const view = new DataView(this.privHeader);\r\n            view.setUint32(40, audioLength, true);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Specifies the audio format string to be sent to the service\r\n     * @string AudioOutputFormatImpl.prototype.requestAudioFormatString\r\n     * @function\r\n     * @public\r\n     */\r\n    public get requestAudioFormatString(): string {\r\n        return this.priRequestAudioFormatString;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport {\r\n    createNoDashGuid,\r\n    Deferred,\r\n    IAudioDestination,\r\n    IStreamChunk,\r\n    Stream,\r\n} from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport {\r\n    AudioStreamFormat,\r\n    PushAudioOutputStreamCallback\r\n} from \"../Exports\";\r\nimport { AudioOutputFormatImpl } from \"./AudioOutputFormat\";\r\n\r\n/**\r\n * Represents audio output stream used for custom audio output configurations.\r\n * @class AudioOutputStream\r\n */\r\nexport abstract class AudioOutputStream {\r\n\r\n    /**\r\n     * Creates and initializes an instance.\r\n     * @constructor\r\n     */\r\n    protected constructor() { }\r\n\r\n    /**\r\n     * Sets the format of the AudioOutputStream\r\n     * Note: the format is set by the synthesizer before writing. Do not set it before passing it to AudioConfig\r\n     * @member AudioOutputStream.prototype.format\r\n     */\r\n    public abstract set format(format: AudioStreamFormat);\r\n\r\n    /**\r\n     * Creates a memory backed PullAudioOutputStream with the specified audio format.\r\n     * @member AudioOutputStream.createPullStream\r\n     * @function\r\n     * @public\r\n     * @returns {PullAudioOutputStream} The audio output stream being created.\r\n     */\r\n    public static createPullStream(): PullAudioOutputStream {\r\n        return PullAudioOutputStream.create();\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member AudioOutputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * Represents memory backed push audio output stream used for custom audio output configurations.\r\n * @class PullAudioOutputStream\r\n */\r\nexport abstract class PullAudioOutputStream extends AudioOutputStream {\r\n\r\n    /**\r\n     * Creates a memory backed PullAudioOutputStream with the specified audio format.\r\n     * @member PullAudioOutputStream.create\r\n     * @function\r\n     * @public\r\n     * @returns {PullAudioOutputStream} The push audio output stream being created.\r\n     */\r\n    public static create(): PullAudioOutputStream {\r\n        return new PullAudioOutputStreamImpl();\r\n    }\r\n\r\n    /**\r\n     * Reads audio data from the internal buffer.\r\n     * @member PullAudioOutputStream.prototype.read\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - An ArrayBuffer to store the read data.\r\n     * @returns {Promise<number>} Audio buffer length has been read.\r\n     */\r\n    public abstract read(dataBuffer: ArrayBuffer): Promise<number>;\r\n\r\n    /**\r\n     * Closes the stream.\r\n     * @member PullAudioOutputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * Represents memory backed push audio output stream used for custom audio output configurations.\r\n * @private\r\n * @class PullAudioOutputStreamImpl\r\n */\r\nexport class PullAudioOutputStreamImpl extends PullAudioOutputStream implements IAudioDestination {\r\n    private privFormat: AudioOutputFormatImpl;\r\n    private privId: string;\r\n    private privStream: Stream<ArrayBuffer>;\r\n    private privLastChunkView: Int8Array;\r\n\r\n    /**\r\n     * Creates and initializes an instance with the given values.\r\n     * @constructor\r\n     */\r\n    public constructor() {\r\n        super();\r\n        this.privId = createNoDashGuid();\r\n        this.privStream = new Stream<ArrayBuffer>();\r\n    }\r\n\r\n    /**\r\n     * Sets the format information to the stream. For internal use only.\r\n     * @param {AudioStreamFormat} format - the format to be set.\r\n     */\r\n    public set format(format: AudioStreamFormat) {\r\n        if (format === undefined || format === null) {\r\n            this.privFormat = AudioOutputFormatImpl.getDefaultOutputFormat();\r\n        }\r\n        this.privFormat = format as AudioOutputFormatImpl;\r\n    }\r\n\r\n    /**\r\n     * Format information for the audio\r\n     */\r\n    public get format(): AudioStreamFormat {\r\n        return this.privFormat;\r\n    }\r\n\r\n    /**\r\n     * Checks if the stream is closed\r\n     * @member PullAudioOutputStreamImpl.prototype.isClosed\r\n     * @property\r\n     * @public\r\n     */\r\n    public get isClosed(): boolean {\r\n        return this.privStream.isClosed;\r\n    }\r\n\r\n    /**\r\n     * Gets the id of the stream\r\n     * @member PullAudioOutputStreamImpl.prototype.id\r\n     * @property\r\n     * @public\r\n     */\r\n    public id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    /**\r\n     * Reads audio data from the internal buffer.\r\n     * @member PullAudioOutputStreamImpl.prototype.read\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - An ArrayBuffer to store the read data.\r\n     * @returns {Promise<number>} - Audio buffer length has been read.\r\n     */\r\n    public async read(dataBuffer: ArrayBuffer): Promise<number> {\r\n        const intView: Int8Array = new Int8Array(dataBuffer);\r\n        let totalBytes: number = 0;\r\n\r\n        if (this.privLastChunkView !== undefined) {\r\n            if (this.privLastChunkView.length > dataBuffer.byteLength) {\r\n                intView.set(this.privLastChunkView.slice(0, dataBuffer.byteLength));\r\n                this.privLastChunkView = this.privLastChunkView.slice(dataBuffer.byteLength);\r\n                return Promise.resolve(dataBuffer.byteLength);\r\n            }\r\n            intView.set(this.privLastChunkView);\r\n            totalBytes = this.privLastChunkView.length;\r\n            this.privLastChunkView = undefined;\r\n        }\r\n\r\n        // Until we have the minimum number of bytes to send in a transmission, keep asking for more.\r\n        while (totalBytes < dataBuffer.byteLength && !this.privStream.isReadEnded) {\r\n            const chunk: IStreamChunk<ArrayBuffer> = await this.privStream.read();\r\n            if (chunk !== undefined && !chunk.isEnd) {\r\n                let tmpBuffer: ArrayBuffer;\r\n                if (chunk.buffer.byteLength > dataBuffer.byteLength - totalBytes) {\r\n                    tmpBuffer = chunk.buffer.slice(0, dataBuffer.byteLength - totalBytes);\r\n                    this.privLastChunkView = new Int8Array(chunk.buffer.slice(dataBuffer.byteLength - totalBytes));\r\n                } else {\r\n                    tmpBuffer = chunk.buffer;\r\n                }\r\n                intView.set(new Int8Array(tmpBuffer), totalBytes);\r\n                totalBytes += tmpBuffer.byteLength;\r\n            } else {\r\n                await this.privStream.readEnded();\r\n            }\r\n        }\r\n        return totalBytes;\r\n    }\r\n\r\n    /**\r\n     * Writes the audio data specified by making an internal copy of the data.\r\n     * @member PullAudioOutputStreamImpl.prototype.write\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - The audio buffer of which this function will make a copy.\r\n     */\r\n    public write(dataBuffer: ArrayBuffer): void {\r\n        Contracts.throwIfNullOrUndefined(this.privStream, \"must set format before writing\");\r\n        this.privStream.writeStreamChunk({\r\n            buffer: dataBuffer,\r\n            isEnd: false,\r\n            timeReceived: Date.now()\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Closes the stream.\r\n     * @member PullAudioOutputStreamImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        this.privStream.close();\r\n    }\r\n}\r\n\r\n/*\r\n * Represents audio output stream used for custom audio output configurations.\r\n * @class PushAudioOutputStream\r\n */\r\nexport abstract class PushAudioOutputStream extends AudioOutputStream {\r\n    /**\r\n     * Creates and initializes and instance.\r\n     * @constructor\r\n     */\r\n    protected constructor() { super(); }\r\n\r\n    /**\r\n     * Creates a PushAudioOutputStream that delegates to the specified callback interface for\r\n     * write() and close() methods.\r\n     * @member PushAudioOutputStream.create\r\n     * @function\r\n     * @public\r\n     * @param {PushAudioOutputStreamCallback} callback - The custom audio output object,\r\n     *        derived from PushAudioOutputStreamCallback\r\n     * @returns {PushAudioOutputStream} The push audio output stream being created.\r\n     */\r\n    public static create(callback: PushAudioOutputStreamCallback): PushAudioOutputStream {\r\n        return new PushAudioOutputStreamImpl(callback);\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member PushAudioOutputStream.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n\r\n}\r\n\r\n/**\r\n * Represents audio output stream used for custom audio output configurations.\r\n * @private\r\n * @class PushAudioOutputStreamImpl\r\n */\r\nexport class PushAudioOutputStreamImpl extends PushAudioOutputStream implements IAudioDestination {\r\n    private readonly privId: string;\r\n    private privCallback: PushAudioOutputStreamCallback;\r\n\r\n    /**\r\n     * Creates a PushAudioOutputStream that delegates to the specified callback interface for\r\n     * read() and close() methods.\r\n     * @constructor\r\n     * @param {PushAudioOutputStreamCallback} callback - The custom audio output object,\r\n     *        derived from PushAudioOutputStreamCallback\r\n     */\r\n    public constructor(callback: PushAudioOutputStreamCallback) {\r\n        super();\r\n        this.privId = createNoDashGuid();\r\n        this.privCallback = callback;\r\n    }\r\n\r\n    // tslint:disable-next-line:no-empty\r\n    public set format(format: AudioStreamFormat) { }\r\n\r\n    public write(buffer: ArrayBuffer): void {\r\n        if (!!this.privCallback.write) {\r\n            this.privCallback.write(buffer);\r\n        }\r\n    }\r\n\r\n    public close(): void {\r\n        if (!!this.privCallback.close) {\r\n            this.privCallback.close();\r\n        }\r\n    }\r\n\r\n    public id(): string {\r\n        return this.privId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { PathLike } from \"fs\";\r\nimport {\r\n    FileAudioSource,\r\n    MicAudioSource,\r\n    PcmRecorder,\r\n} from \"../../common.browser/Exports\";\r\nimport { ISpeechConfigAudioDevice } from \"../../common.speech/Exports\";\r\nimport {\r\n    AudioSourceEvent,\r\n    Deferred,\r\n    EventSource,\r\n    IAudioDestination,\r\n    IAudioSource,\r\n    IAudioStreamNode\r\n} from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport {\r\n    AudioInputStream,\r\n    AudioOutputStream,\r\n    AudioStreamFormat,\r\n    IPlayer,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    PullAudioInputStreamCallback,\r\n    PullAudioOutputStream,\r\n    PushAudioOutputStream,\r\n    PushAudioOutputStreamCallback,\r\n    SpeakerAudioDestination\r\n} from \"../Exports\";\r\nimport { AudioFileWriter } from \"./AudioFileWriter\";\r\nimport { PullAudioInputStreamImpl, PushAudioInputStreamImpl } from \"./AudioInputStream\";\r\nimport { PullAudioOutputStreamImpl, PushAudioOutputStreamImpl } from \"./AudioOutputStream\";\r\nimport { AudioStreamFormatImpl } from \"./AudioStreamFormat\";\r\n\r\n/**\r\n * Represents audio input configuration used for specifying what type of input to use (microphone, file, stream).\r\n * @class AudioConfig\r\n * Updated in version 1.11.0\r\n */\r\nexport abstract class AudioConfig {\r\n    /**\r\n     * Creates an AudioConfig object representing the default microphone on the system.\r\n     * @member AudioConfig.fromDefaultMicrophoneInput\r\n     * @function\r\n     * @public\r\n     * @returns {AudioConfig} The audio input configuration being created.\r\n     */\r\n    public static fromDefaultMicrophoneInput(): AudioConfig {\r\n        const pcmRecorder = new PcmRecorder();\r\n        return new AudioConfigImpl(new MicAudioSource(pcmRecorder));\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing a microphone with the specified device ID.\r\n     * @member AudioConfig.fromMicrophoneInput\r\n     * @function\r\n     * @public\r\n     * @param {string | undefined} deviceId - Specifies the device ID of the microphone to be used.\r\n     *        Default microphone is used the value is omitted.\r\n     * @returns {AudioConfig} The audio input configuration being created.\r\n     */\r\n    public static fromMicrophoneInput(deviceId?: string): AudioConfig {\r\n        const pcmRecorder = new PcmRecorder();\r\n        return new AudioConfigImpl(new MicAudioSource(pcmRecorder, deviceId));\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing the specified file.\r\n     * @member AudioConfig.fromWavFileInput\r\n     * @function\r\n     * @public\r\n     * @param {File} fileName - Specifies the audio input file. Currently, only WAV / PCM is supported.\r\n     * @returns {AudioConfig} The audio input configuration being created.\r\n     */\r\n    public static fromWavFileInput(file: File | Buffer, name: string = \"unnamedBuffer.wav\"): AudioConfig {\r\n        return new AudioConfigImpl(new FileAudioSource(file, name));\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing the specified stream.\r\n     * @member AudioConfig.fromStreamInput\r\n     * @function\r\n     * @public\r\n     * @param {AudioInputStream | PullAudioInputStreamCallback | MediaStream} audioStream - Specifies the custom audio input\r\n     *        stream. Currently, only WAV / PCM is supported.\r\n     * @returns {AudioConfig} The audio input configuration being created.\r\n     */\r\n    public static fromStreamInput(audioStream: AudioInputStream | PullAudioInputStreamCallback\r\n        | MediaStream): AudioConfig {\r\n        if (audioStream instanceof PullAudioInputStreamCallback) {\r\n            return new AudioConfigImpl(new PullAudioInputStreamImpl(audioStream as PullAudioInputStreamCallback));\r\n        }\r\n\r\n        if (audioStream instanceof AudioInputStream) {\r\n            return new AudioConfigImpl(audioStream as PushAudioInputStreamImpl);\r\n        }\r\n        if (typeof MediaStream !== \"undefined\" && audioStream instanceof MediaStream) {\r\n            const pcmRecorder = new PcmRecorder();\r\n            return new AudioConfigImpl(new MicAudioSource(pcmRecorder, null, null, audioStream));\r\n        }\r\n\r\n        throw new Error(\"Not Supported Type\");\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing the default speaker.\r\n     * @member AudioConfig.fromDefaultSpeakerOutput\r\n     * @function\r\n     * @public\r\n     * @returns {AudioConfig} The audio output configuration being created.\r\n     * Added in version 1.11.0\r\n     */\r\n    public static fromDefaultSpeakerOutput(): AudioConfig {\r\n        return new AudioOutputConfigImpl(new SpeakerAudioDestination());\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing the custom IPlayer object.\r\n     * You can use the IPlayer object to control pause, resume, etc.\r\n     * @member AudioConfig.fromSpeakerOutput\r\n     * @function\r\n     * @public\r\n     * @param {IPlayer} player - the IPlayer object for playback.\r\n     * @returns {AudioConfig} The audio output configuration being created.\r\n     * Added in version 1.12.0\r\n     */\r\n    public static fromSpeakerOutput(player?: IPlayer): AudioConfig {\r\n        if (player === undefined) {\r\n            return AudioConfig.fromDefaultSpeakerOutput();\r\n        }\r\n        if (player instanceof SpeakerAudioDestination) {\r\n            return new AudioOutputConfigImpl(player as SpeakerAudioDestination);\r\n        }\r\n\r\n        throw new Error(\"Not Supported Type\");\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing a specified output audio file\r\n     * @member AudioConfig.fromAudioFileOutput\r\n     * @function\r\n     * @public\r\n     * @param {PathLike} filename - the filename of the output audio file\r\n     * @returns {AudioConfig} The audio output configuration being created.\r\n     * Added in version 1.11.0\r\n     */\r\n    public static fromAudioFileOutput(filename: PathLike): AudioConfig {\r\n        return new AudioOutputConfigImpl(new AudioFileWriter(filename));\r\n    }\r\n\r\n    /**\r\n     * Creates an AudioConfig object representing a specified audio output stream\r\n     * @member AudioConfig.fromStreamOutput\r\n     * @function\r\n     * @public\r\n     * @param {AudioOutputStream | PushAudioOutputStreamCallback} audioStream - Specifies the custom audio output\r\n     *        stream.\r\n     * @returns {AudioConfig} The audio output configuration being created.\r\n     * Added in version 1.11.0\r\n     */\r\n    public static fromStreamOutput(audioStream: AudioOutputStream | PushAudioOutputStreamCallback): AudioConfig {\r\n        if (audioStream instanceof PushAudioOutputStreamCallback) {\r\n            return new AudioOutputConfigImpl(new PushAudioOutputStreamImpl(audioStream as PushAudioOutputStreamCallback));\r\n        }\r\n\r\n        if (audioStream instanceof PushAudioOutputStream) {\r\n            return new AudioOutputConfigImpl(audioStream as PushAudioOutputStreamImpl);\r\n        }\r\n\r\n        if (audioStream instanceof PullAudioOutputStream) {\r\n            return new AudioOutputConfigImpl(audioStream as PullAudioOutputStreamImpl);\r\n        }\r\n\r\n        throw new Error(\"Not Supported Type\");\r\n    }\r\n\r\n    /**\r\n     * Explicitly frees any external resource attached to the object\r\n     * @member AudioConfig.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n\r\n    /**\r\n     * Sets an arbitrary property.\r\n     * @member SpeechConfig.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to set.\r\n     * @param {string} value - The new value of the property.\r\n     */\r\n    public abstract setProperty(name: string, value: string): void;\r\n\r\n    /**\r\n     * Returns the current value of an arbitrary property.\r\n     * @member SpeechConfig.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to query.\r\n     * @param {string} def - The value to return in case the property is not known.\r\n     * @returns {string} The current value, or provided default, of the given property.\r\n     */\r\n    public abstract getProperty(name: string, def?: string): string;\r\n\r\n}\r\n\r\n/**\r\n * Represents audio input stream used for custom audio input configurations.\r\n * @private\r\n * @class AudioConfigImpl\r\n */\r\nexport class AudioConfigImpl extends AudioConfig implements IAudioSource {\r\n    private privSource: IAudioSource;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {IAudioSource} source - An audio source.\r\n     */\r\n    public constructor(source: IAudioSource) {\r\n        super();\r\n        this.privSource = source;\r\n    }\r\n\r\n    /**\r\n     * Format information for the audio\r\n     */\r\n    public get format(): Promise<AudioStreamFormatImpl> {\r\n        return this.privSource.format;\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, err?: (error: string) => void): void {\r\n        this.privSource.turnOff().then(() => {\r\n            if (!!cb) {\r\n                cb();\r\n            }\r\n        }, (error: string) => {\r\n            if (!!err) {\r\n                err(error);\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.id\r\n     * @function\r\n     * @public\r\n     */\r\n    public id(): string {\r\n        return this.privSource.id();\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.blob\r\n     * @function\r\n     * @public\r\n     */\r\n    public get blob(): Promise<Blob | Buffer> {\r\n        return this.privSource.blob;\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.turnOn\r\n     * @function\r\n     * @public\r\n     * @returns {Promise<void>} A promise.\r\n     */\r\n    public turnOn(): Promise<void> {\r\n        return this.privSource.turnOn();\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.attach\r\n     * @function\r\n     * @public\r\n     * @param {string} audioNodeId - The audio node id.\r\n     * @returns {Promise<IAudioStreamNode>} A promise.\r\n     */\r\n    public attach(audioNodeId: string): Promise<IAudioStreamNode> {\r\n        return this.privSource.attach(audioNodeId);\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.detach\r\n     * @function\r\n     * @public\r\n     * @param {string} audioNodeId - The audio node id.\r\n     */\r\n    public detach(audioNodeId: string): void {\r\n        return this.privSource.detach(audioNodeId);\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.turnOff\r\n     * @function\r\n     * @public\r\n     * @returns {Promise<void>} A promise.\r\n     */\r\n    public turnOff(): Promise<void> {\r\n        return this.privSource.turnOff();\r\n    }\r\n\r\n    /**\r\n     * @member AudioConfigImpl.prototype.events\r\n     * @function\r\n     * @public\r\n     * @returns {EventSource<AudioSourceEvent>} An event source for audio events.\r\n     */\r\n    public get events(): EventSource<AudioSourceEvent> {\r\n        return this.privSource.events;\r\n    }\r\n\r\n    public setProperty(name: string, value: string): void {\r\n        Contracts.throwIfNull(value, \"value\");\r\n\r\n        if (undefined !== this.privSource.setProperty) {\r\n            this.privSource.setProperty(name, value);\r\n        } else {\r\n            throw new Error(\"This AudioConfig instance does not support setting properties.\");\r\n        }\r\n\r\n    }\r\n\r\n    public getProperty(name: string, def?: string): string {\r\n        if (undefined !== this.privSource.getProperty) {\r\n            return this.privSource.getProperty(name, def);\r\n        } else {\r\n            throw new Error(\"This AudioConfig instance does not support getting properties.\");\r\n        }\r\n\r\n        return def;\r\n    }\r\n\r\n    public get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\r\n        return this.privSource.deviceInfo;\r\n    }\r\n}\r\n\r\nexport class AudioOutputConfigImpl extends AudioConfig implements IAudioDestination {\r\n    private privDestination: IAudioDestination;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {IAudioDestination} destination - An audio destination.\r\n     */\r\n    public constructor(destination: IAudioDestination) {\r\n        super();\r\n        this.privDestination = destination;\r\n    }\r\n\r\n    public set format(format: AudioStreamFormat) {\r\n        this.privDestination.format = format;\r\n    }\r\n\r\n    public write(buffer: ArrayBuffer): void {\r\n        this.privDestination.write(buffer);\r\n    }\r\n\r\n    public close(): void {\r\n        this.privDestination.close();\r\n    }\r\n\r\n    public id(): string {\r\n        return this.privDestination.id();\r\n    }\r\n\r\n    public setProperty(name: string, value: string): void {\r\n        throw new Error(\"This AudioConfig instance does not support setting properties.\");\r\n    }\r\n\r\n    public getProperty(name: string, def?: string): string {\r\n        throw new Error(\"This AudioConfig instance does not support getting properties.\");\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the possible reasons a recognition result might be canceled.\r\n * @class CancellationReason\r\n */\r\nexport enum CancellationReason {\r\n    /**\r\n     * Indicates that an error occurred during speech recognition.\r\n     * @member CancellationReason.Error\r\n     */\r\n    Error,\r\n\r\n    /**\r\n     * Indicates that the end of the audio stream was reached.\r\n     * @member CancellationReason.EndOfStream\r\n     */\r\n    EndOfStream,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n /**\r\n  * An abstract base class that defines callback methods (read() and close()) for\r\n  * custom audio input streams).\r\n  * @class PullAudioInputStreamCallback\r\n  */\r\nexport abstract class PullAudioInputStreamCallback {\r\n\r\n    /**\r\n     * Reads data from audio input stream into the data buffer. The maximal number of bytes\r\n     * to be read is determined by the size of dataBuffer.\r\n     * @member PullAudioInputStreamCallback.prototype.read\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - The byte array to store the read data.\r\n     * @returns {number} the number of bytes have been read.\r\n     */\r\n    public abstract read(dataBuffer: ArrayBuffer): number;\r\n\r\n    /**\r\n     * Closes the audio input stream.\r\n     * @member PullAudioInputStreamCallback.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n/**\r\n * An abstract base class that defines callback methods (write() and close()) for\r\n * custom audio output streams).\r\n * @class PushAudioOutputStreamCallback\r\n */\r\nexport abstract class PushAudioOutputStreamCallback {\r\n\r\n    /**\r\n     * Writes audio data into the data buffer.\r\n     * @member PushAudioOutputStreamCallback.prototype.write\r\n     * @function\r\n     * @public\r\n     * @param {ArrayBuffer} dataBuffer - The byte array that stores the audio data to write.\r\n     */\r\n    public abstract write(dataBuffer: ArrayBuffer): void;\r\n\r\n    /**\r\n     * Closes the audio output stream.\r\n     * @member PushAudioOutputStreamCallback.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\n\r\n/**\r\n * Represents a keyword recognition model for recognizing when\r\n * the user says a keyword to initiate further speech recognition.\r\n * @class KeywordRecognitionModel\r\n */\r\nexport class KeywordRecognitionModel {\r\n    private privDisposed: boolean = false;\r\n\r\n    /**\r\n     * Create and initializes a new instance.\r\n     * @constructor\r\n     */\r\n    private constructor() {\r\n    }\r\n\r\n    /**\r\n     * Creates a keyword recognition model using the specified filename.\r\n     * @member KeywordRecognitionModel.fromFile\r\n     * @function\r\n     * @public\r\n     * @param {string} fileName - A string that represents file name for the keyword recognition model.\r\n     *        Note, the file can point to a zip file in which case the model\r\n     *        will be extracted from the zip.\r\n     * @returns {KeywordRecognitionModel} The keyword recognition model being created.\r\n     */\r\n    public static fromFile(fileName: string): KeywordRecognitionModel {\r\n        Contracts.throwIfFileDoesNotExist(fileName, \"fileName\");\r\n\r\n        throw new Error(\"Not yet implemented.\");\r\n    }\r\n\r\n    /**\r\n     * Creates a keyword recognition model using the specified filename.\r\n     * @member KeywordRecognitionModel.fromStream\r\n     * @function\r\n     * @public\r\n     * @param {string} file - A File that represents file for the keyword recognition model.\r\n     *        Note, the file can point to a zip file in which case the model will be extracted from the zip.\r\n     * @returns {KeywordRecognitionModel} The keyword recognition model being created.\r\n     */\r\n    public static fromStream(file: File): KeywordRecognitionModel {\r\n        Contracts.throwIfNull(file, \"file\");\r\n\r\n        throw new Error(\"Not yet implemented.\");\r\n    }\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member KeywordRecognitionModel.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        if (this.privDisposed) {\r\n            return;\r\n        }\r\n\r\n        this.privDisposed = true;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines content for session events like SessionStarted/Stopped, SoundStarted/Stopped.\r\n * @class SessionEventArgs\r\n */\r\nexport class SessionEventArgs {\r\n    private privSessionId: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(sessionId: string) {\r\n        this.privSessionId = sessionId;\r\n    }\r\n\r\n    /**\r\n     * Represents the session identifier.\r\n     * @member SessionEventArgs.prototype.sessionId\r\n     * @function\r\n     * @public\r\n     * @returns {string} Represents the session identifier.\r\n     */\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { SessionEventArgs } from \"./Exports\";\r\n\r\n/**\r\n * Defines payload for session events like Speech Start/End Detected\r\n * @class\r\n */\r\nexport class RecognitionEventArgs extends SessionEventArgs {\r\n    private privOffset: number;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {number} offset - The offset.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(offset: number, sessionId?: string) {\r\n        super(sessionId);\r\n\r\n        this.privOffset = offset;\r\n    }\r\n\r\n    /**\r\n     * Represents the message offset\r\n     * @member RecognitionEventArgs.prototype.offset\r\n     * @function\r\n     * @public\r\n     */\r\n    public get offset(): number {\r\n        return this.privOffset;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Define Speech Recognizer output formats.\r\n * @class OutputFormat\r\n */\r\nexport enum OutputFormat {\r\n    /**\r\n     * @member OutputFormat.Simple\r\n     */\r\n    Simple = 0,\r\n\r\n    /**\r\n     * @member OutputFormat.Detailed\r\n     */\r\n    Detailed,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IntentRecognitionResult, RecognitionEventArgs } from \"./Exports\";\r\n\r\n/**\r\n * Intent recognition result event arguments.\r\n * @class\r\n */\r\nexport class IntentRecognitionEventArgs extends RecognitionEventArgs {\r\n    private privResult: IntentRecognitionResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param result - The result of the intent recognition.\r\n     * @param offset - The offset.\r\n     * @param sessionId - The session id.\r\n     */\r\n    public constructor(result: IntentRecognitionResult, offset?: number, sessionId?: string) {\r\n        super(offset, sessionId);\r\n\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Represents the intent recognition result.\r\n     * @member IntentRecognitionEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {IntentRecognitionResult} Represents the intent recognition result.\r\n     */\r\n    public get result(): IntentRecognitionResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection, ResultReason } from \"./Exports\";\r\n\r\n/**\r\n * Defines result of speech recognition.\r\n * @class RecognitionResult\r\n */\r\nexport class RecognitionResult {\r\n    private privResultId: string;\r\n    private privReason: ResultReason;\r\n    private privText: string;\r\n    private privDuration: number;\r\n    private privOffset: number;\r\n    private privLanguage: string;\r\n    private privLanguageDetectionConfidence: string;\r\n    private privErrorDetails: string;\r\n    private privJson: string;\r\n    private privProperties: PropertyCollection;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} resultId - The result id.\r\n     * @param {ResultReason} reason - The reason.\r\n     * @param {string} text - The recognized text.\r\n     * @param {number} duration - The duration.\r\n     * @param {number} offset - The offset into the stream.\r\n     * @param {string} language - Primary Language detected, if provided.\r\n     * @param {string} languageDetectionConfidence - Primary Language confidence (\"Unknown,\" \"Low,\" \"Medium,\" \"High\"...), if provided.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {string} json - Additional Json, if provided.\r\n     * @param {PropertyCollection} properties - Additional properties, if provided.\r\n     */\r\n    constructor(resultId?: string, reason?: ResultReason, text?: string, duration?: number,\r\n                offset?: number, language?: string, languageDetectionConfidence?: string, errorDetails?: string, json?: string, properties?: PropertyCollection) {\r\n        this.privResultId = resultId;\r\n        this.privReason = reason;\r\n        this.privText = text;\r\n        this.privDuration = duration;\r\n        this.privOffset = offset;\r\n        this.privLanguage = language;\r\n        this.privLanguageDetectionConfidence = languageDetectionConfidence;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privJson = json;\r\n        this.privProperties = properties;\r\n    }\r\n\r\n    /**\r\n     * Specifies the result identifier.\r\n     * @member RecognitionResult.prototype.resultId\r\n     * @function\r\n     * @public\r\n     * @returns {string} Specifies the result identifier.\r\n     */\r\n    public get resultId(): string {\r\n        return this.privResultId;\r\n    }\r\n\r\n    /**\r\n     * Specifies status of the result.\r\n     * @member RecognitionResult.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {ResultReason} Specifies status of the result.\r\n     */\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    /**\r\n     * Presents the recognized text in the result.\r\n     * @member RecognitionResult.prototype.text\r\n     * @function\r\n     * @public\r\n     * @returns {string} Presents the recognized text in the result.\r\n     */\r\n    public get text(): string {\r\n        return this.privText;\r\n    }\r\n\r\n    /**\r\n     * Duration of recognized speech in 100 nano second incements.\r\n     * @member RecognitionResult.prototype.duration\r\n     * @function\r\n     * @public\r\n     * @returns {number} Duration of recognized speech in 100 nano second incements.\r\n     */\r\n    public get duration(): number {\r\n        return this.privDuration;\r\n    }\r\n\r\n    /**\r\n     * Offset of recognized speech in 100 nano second incements.\r\n     * @member RecognitionResult.prototype.offset\r\n     * @function\r\n     * @public\r\n     * @returns {number} Offset of recognized speech in 100 nano second incements.\r\n     */\r\n    public get offset(): number {\r\n        return this.privOffset;\r\n    }\r\n\r\n    /**\r\n     * Primary Language detected.\r\n     * @member RecognitionResult.prototype.language\r\n     * @function\r\n     * @public\r\n     * @returns {string} language detected.\r\n     */\r\n    public get language(): string {\r\n        return this.privLanguage;\r\n    }\r\n\r\n    /**\r\n     * Primary Language detection confidence (Unknown, Low, Medium, High).\r\n     * @member RecognitionResult.prototype.languageDetectionConfidence\r\n     * @function\r\n     * @public\r\n     * @returns {string} detection confidence strength.\r\n     */\r\n    public get languageDetectionConfidence(): string {\r\n        return this.privLanguageDetectionConfidence;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful recognition, provides details of the occurred error.\r\n     * @member RecognitionResult.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} a brief description of an error.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n\r\n    /**\r\n     * A string containing Json serialized recognition result as it was received from the service.\r\n     * @member RecognitionResult.prototype.json\r\n     * @function\r\n     * @private\r\n     * @returns {string} Json serialized representation of the result.\r\n     */\r\n    public get json(): string {\r\n        return this.privJson;\r\n    }\r\n\r\n    /**\r\n     *  The set of properties exposed in the result.\r\n     * @member RecognitionResult.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The set of properties exposed in the result.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection, RecognitionResult, ResultReason } from \"./Exports\";\r\n\r\n/**\r\n * Defines result of speech recognition.\r\n * @class SpeechRecognitionResult\r\n */\r\nexport class SpeechRecognitionResult extends RecognitionResult {\r\n    private readonly privSpeakerId: string;\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @public\r\n     * @param {string} resultId - The result id.\r\n     * @param {ResultReason} reason - The reason.\r\n     * @param {string} text - The recognized text.\r\n     * @param {number} duration - The duration.\r\n     * @param {number} offset - The offset into the stream.\r\n     * @param {string} language - Primary Language detected, if provided.\r\n     * @param {string} languageDetectionConfidence - Primary Language confidence (\"Unknown,\" \"Low,\" \"Medium,\" \"High\"...), if provided.\r\n     * @param {string} speakerId - speaker id for conversation transcription, if provided.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {string} json - Additional Json, if provided.\r\n     * @param {PropertyCollection} properties - Additional properties, if provided.\r\n     */\r\n    public constructor(resultId?: string, reason?: ResultReason, text?: string,\r\n                       duration?: number, offset?: number, language?: string,\r\n                       languageDetectionConfidence?: string, speakerId?: string, errorDetails?: string,\r\n                       json?: string, properties?: PropertyCollection) {\r\n        super(resultId, reason, text, duration, offset, language, languageDetectionConfidence, errorDetails, json, properties);\r\n        this.privSpeakerId = speakerId;\r\n    }\r\n\r\n    /**\r\n     * speaker id from conversation transcription/id scenarios\r\n     * @member SpeechRecognitionResult.prototype.speakerId\r\n     * @function\r\n     * @public\r\n     * @returns {string} id of speaker in given result\r\n     */\r\n    public get speakerId(): string {\r\n        return this.privSpeakerId;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection, ResultReason, SpeechRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Intent recognition result.\r\n * @class\r\n */\r\nexport class IntentRecognitionResult extends SpeechRecognitionResult {\r\n    private privIntentId: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param intentId - The intent id.\r\n     * @param resultId - The result id.\r\n     * @param reason - The reason.\r\n     * @param text - The recognized text.\r\n     * @param duration - The duration.\r\n     * @param offset - The offset into the stream.\r\n     * @param language - Primary Language detected, if provided.\r\n     * @param languageDetectionConfidence - Primary Language confidence (\"Unknown,\" \"Low,\" \"Medium,\" \"High\"...), if provided.\r\n     * @param errorDetails - Error details, if provided.\r\n     * @param json - Additional Json, if provided.\r\n     * @param properties - Additional properties, if provided.\r\n     */\r\n    constructor(intentId?: string, resultId?: string, reason?: ResultReason, text?: string,\r\n                duration?: number, offset?: number, language?: string, languageDetectionConfidence?: string,\r\n                errorDetails?: string, json?: string, properties?: PropertyCollection) {\r\n        super(resultId, reason, text, duration, offset, language, languageDetectionConfidence, undefined, errorDetails, json, properties);\r\n\r\n        this.privIntentId = intentId;\r\n    }\r\n\r\n    /**\r\n     * A String that represents the intent identifier being recognized.\r\n     * @member IntentRecognitionResult.prototype.intentId\r\n     * @function\r\n     * @public\r\n     * @returns {string} A String that represents the intent identifier being recognized.\r\n     */\r\n    public get intentId(): string {\r\n        return this.privIntentId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\n\r\n/**\r\n * Language understanding model\r\n * @class LanguageUnderstandingModel\r\n */\r\nexport class LanguageUnderstandingModel {\r\n    /**\r\n     * Creates and initializes a new instance\r\n     * @constructor\r\n     */\r\n    protected constructor() {\r\n    }\r\n\r\n    /**\r\n     * Creates an language understanding model using the specified endpoint.\r\n     * @member LanguageUnderstandingModel.fromEndpoint\r\n     * @function\r\n     * @public\r\n     * @param {URL} uri - A String that represents the endpoint of the language understanding model.\r\n     * @returns {LanguageUnderstandingModel} The language understanding model being created.\r\n     */\r\n    public static fromEndpoint(uri: URL): LanguageUnderstandingModel {\r\n        Contracts.throwIfNull(uri, \"uri\");\r\n        Contracts.throwIfNullOrWhitespace(uri.hostname, \"uri\");\r\n\r\n        const langModelImp: LanguageUnderstandingModelImpl = new LanguageUnderstandingModelImpl();\r\n        // Need to extract the app ID from the URL.\r\n        // URL is in the format: https://<region>.api.cognitive.microsoft.com/luis/v2.0/apps/<Guid>?subscription-key=<key>&timezoneOffset=-360\r\n\r\n        // Start tearing the string apart.\r\n\r\n        // region can be extracted from the host name.\r\n        const firstDot: number = uri.host.indexOf(\".\");\r\n        if (-1 === firstDot) {\r\n            throw new Error(\"Could not determine region from endpoint\");\r\n        }\r\n        langModelImp.region = uri.host.substr(0, firstDot);\r\n\r\n        // Now the app ID.\r\n\r\n        const lastSegment: number = uri.pathname.lastIndexOf(\"/\") + 1;\r\n        if (-1 === lastSegment) {\r\n            throw new Error(\"Could not determine appId from endpoint\");\r\n        }\r\n\r\n        langModelImp.appId = uri.pathname.substr(lastSegment);\r\n\r\n        // And finally the key.\r\n        langModelImp.subscriptionKey = uri.searchParams.get(\"subscription-key\");\r\n        if (undefined === langModelImp.subscriptionKey) {\r\n            throw new Error(\"Could not determine subscription key from endpoint\");\r\n        }\r\n\r\n        return langModelImp;\r\n    }\r\n\r\n    /**\r\n     * Creates an language understanding model using the application id of Language Understanding service.\r\n     * @member LanguageUnderstandingModel.fromAppId\r\n     * @function\r\n     * @public\r\n     * @param {string} appId - A String that represents the application id of Language Understanding service.\r\n     * @returns {LanguageUnderstandingModel} The language understanding model being created.\r\n     */\r\n    public static fromAppId(appId: string): LanguageUnderstandingModel {\r\n        Contracts.throwIfNullOrWhitespace(appId, \"appId\");\r\n\r\n        const langModelImp: LanguageUnderstandingModelImpl = new LanguageUnderstandingModelImpl();\r\n        langModelImp.appId = appId;\r\n        return langModelImp;\r\n    }\r\n\r\n    /**\r\n     * Creates a language understanding model using hostname, subscription key and application\r\n     * id of Language Understanding service.\r\n     * @member LanguageUnderstandingModel.fromSubscription\r\n     * @function\r\n     * @public\r\n     * @param {string} subscriptionKey - A String that represents the subscription key of\r\n     *        Language Understanding service.\r\n     * @param {string} appId - A String that represents the application id of Language\r\n     *        Understanding service.\r\n     * @param {LanguageUnderstandingModel} region - A String that represents the region\r\n     *        of the Language Understanding service (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {LanguageUnderstandingModel} The language understanding model being created.\r\n     */\r\n    public static fromSubscription(subscriptionKey: string, appId: string, region: string): LanguageUnderstandingModel {\r\n        Contracts.throwIfNullOrWhitespace(subscriptionKey, \"subscriptionKey\");\r\n        Contracts.throwIfNullOrWhitespace(appId, \"appId\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const langModelImp: LanguageUnderstandingModelImpl = new LanguageUnderstandingModelImpl();\r\n        langModelImp.appId = appId;\r\n        langModelImp.region = region;\r\n        langModelImp.subscriptionKey = subscriptionKey;\r\n        return langModelImp;\r\n    }\r\n}\r\n\r\n/**\r\n * @private\r\n * @class LanguageUnderstandingModelImpl\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class LanguageUnderstandingModelImpl extends LanguageUnderstandingModel {\r\n    public appId: string;\r\n    public region: string;\r\n    public subscriptionKey: string;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognitionEventArgs, SpeechRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Defines contents of speech recognizing/recognized event.\r\n * @class SpeechRecognitionEventArgs\r\n */\r\nexport class SpeechRecognitionEventArgs extends RecognitionEventArgs {\r\n    private privResult: SpeechRecognitionResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {SpeechRecognitionResult} result - The speech recognition result.\r\n     * @param {number} offset - The offset.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(result: SpeechRecognitionResult, offset?: number, sessionId?: string) {\r\n        super(offset, sessionId);\r\n\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Specifies the recognition result.\r\n     * @member SpeechRecognitionEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {SpeechRecognitionResult} the recognition result.\r\n     */\r\n    public get result(): SpeechRecognitionResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n\r\n/**\r\n * Defines contents of conversation transcribed/transcribing event.\r\n * @class ConversationTranscriptionEventArgs\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConversationTranscriptionEventArgs extends SpeechRecognitionEventArgs {\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationEventArgs,\r\n    CancellationReason,\r\n    RecognitionEventArgs\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Defines content of a CancellationEvent.\r\n * @class CancellationEventArgsBase\r\n */\r\nexport class CancellationEventArgsBase extends RecognitionEventArgs implements CancellationEventArgs {\r\n    private privReason: CancellationReason;\r\n    private privErrorDetails: string;\r\n    private privErrorCode: CancellationErrorCode;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {CancellationReason} reason - The cancellation reason.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {number} offset - The offset.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(reason: CancellationReason, errorDetails: string,\r\n                       errorCode: CancellationErrorCode, offset?: number, sessionId?: string) {\r\n        super(offset, sessionId);\r\n\r\n        this.privReason = reason;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privErrorCode = errorCode;\r\n    }\r\n\r\n    /**\r\n     * The reason the recognition was canceled.\r\n     * @member CancellationEventArgsBase.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {CancellationReason} Specifies the reason canceled.\r\n     */\r\n    public get reason(): CancellationReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    /**\r\n     * The error code in case of an unsuccessful operation.\r\n     * @return An error code that represents the error reason.\r\n     */\r\n    public get errorCode(): CancellationErrorCode {\r\n        return this.privErrorCode;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful operation, provides details of the occurred error.\r\n     * @member CancellationEventArgsBase.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} A String that represents the error details.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CancellationEventArgsBase,\r\n} from \"./CancellationEventArgsBase\";\r\n\r\nexport class SpeechRecognitionCanceledEventArgs extends CancellationEventArgsBase {\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognitionEventArgs, TranslationRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Translation text result event arguments.\r\n * @class TranslationRecognitionEventArgs\r\n */\r\nexport class TranslationRecognitionEventArgs extends RecognitionEventArgs {\r\n    private privResult: TranslationRecognitionResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {TranslationRecognitionResult} result - The translation recognition result.\r\n     * @param {number} offset - The offset.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(result: TranslationRecognitionResult, offset?: number, sessionId?: string) {\r\n        super(offset, sessionId);\r\n\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Specifies the recognition result.\r\n     * @member TranslationRecognitionEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {TranslationRecognitionResult} the recognition result.\r\n     */\r\n    public get result(): TranslationRecognitionResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { SessionEventArgs, TranslationSynthesisResult } from \"./Exports\";\r\n\r\n/**\r\n * Translation Synthesis event arguments\r\n * @class TranslationSynthesisEventArgs\r\n */\r\nexport class TranslationSynthesisEventArgs extends SessionEventArgs {\r\n    private privResult: TranslationSynthesisResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {TranslationSynthesisResult} result - The translation synthesis result.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(result: TranslationSynthesisResult, sessionId?: string) {\r\n        super(sessionId);\r\n\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Specifies the translation synthesis result.\r\n     * @member TranslationSynthesisEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {TranslationSynthesisResult} Specifies the translation synthesis result.\r\n     */\r\n    public get result(): TranslationSynthesisResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection, ResultReason, SpeechRecognitionResult, Translations } from \"./Exports\";\r\n\r\n/**\r\n * Translation text result.\r\n * @class TranslationRecognitionResult\r\n */\r\nexport class TranslationRecognitionResult extends SpeechRecognitionResult {\r\n    private privTranslations: Translations;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {Translations} translations - The translations.\r\n     * @param {string} resultId - The result id.\r\n     * @param {ResultReason} reason - The reason.\r\n     * @param {string} text - The recognized text.\r\n     * @param {number} duration - The duration.\r\n     * @param {number} offset - The offset into the stream.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {string} json - Additional Json, if provided.\r\n     * @param {PropertyCollection} properties - Additional properties, if provided.\r\n     */\r\n    public constructor(translations: Translations, resultId?: string, reason?: ResultReason,\r\n                       text?: string, duration?: number, offset?: number, errorDetails?: string,\r\n                       json?: string, properties?: PropertyCollection) {\r\n        super(resultId, reason, text, duration, offset, undefined, undefined, undefined, errorDetails, json, properties);\r\n\r\n        this.privTranslations = translations;\r\n    }\r\n\r\n    /**\r\n     * Presents the translation results. Each item in the dictionary represents\r\n     * a translation result in one of target languages, where the key is the name\r\n     * of the target language, in BCP-47 format, and the value is the translation\r\n     * text in the specified language.\r\n     * @member TranslationRecognitionResult.prototype.translations\r\n     * @function\r\n     * @public\r\n     * @returns {Translations} the current translation map that holds all translations requested.\r\n     */\r\n    public get translations(): Translations {\r\n        return this.privTranslations;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ResultReason } from \"./ResultReason\";\r\n\r\n/**\r\n * Defines translation synthesis result, i.e. the voice output of the translated\r\n * text in the target language.\r\n * @class TranslationSynthesisResult\r\n */\r\nexport class TranslationSynthesisResult {\r\n    private privReason: ResultReason;\r\n    private privAudio: ArrayBuffer;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {ResultReason} reason - The synthesis reason.\r\n     * @param {ArrayBuffer} audio - The audio data.\r\n     */\r\n    constructor(reason: ResultReason, audio: ArrayBuffer) {\r\n        this.privReason = reason;\r\n        this.privAudio = audio;\r\n    }\r\n\r\n    /**\r\n     * Translated text in the target language.\r\n     * @member TranslationSynthesisResult.prototype.audio\r\n     * @function\r\n     * @public\r\n     * @returns {ArrayBuffer} Translated audio in the target language.\r\n     */\r\n    public get audio(): ArrayBuffer {\r\n        return this.privAudio;\r\n    }\r\n\r\n    /**\r\n     * The synthesis status.\r\n     * @member TranslationSynthesisResult.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {ResultReason} The synthesis status.\r\n     */\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the possible reasons a recognition result might be generated.\r\n * @class ResultReason\r\n */\r\nexport enum ResultReason {\r\n    /**\r\n     * Indicates speech could not be recognized. More details\r\n     * can be found in the NoMatchDetails object.\r\n     * @member ResultReason.NoMatch\r\n     */\r\n    NoMatch,\r\n\r\n    /**\r\n     * Indicates that the recognition was canceled. More details\r\n     * can be found using the CancellationDetails object.\r\n     * @member ResultReason.Canceled\r\n     */\r\n    Canceled,\r\n\r\n    /**\r\n     * Indicates the speech result contains hypothesis text.\r\n     * @member ResultReason.RecognizedSpeech\r\n     */\r\n    RecognizingSpeech,\r\n\r\n    /**\r\n     * Indicates the speech result contains final text that has been recognized.\r\n     * Speech Recognition is now complete for this phrase.\r\n     * @member ResultReason.RecognizedSpeech\r\n     */\r\n    RecognizedSpeech,\r\n\r\n    /**\r\n     * Indicates the speech result contains a finalized acceptance of a provided keyword.\r\n     * Speech recognition will continue unless otherwise configured.\r\n     * @member ResultReason.RecognizedKeyword\r\n     */\r\n    RecognizedKeyword,\r\n\r\n    /**\r\n     * Indicates the intent result contains hypothesis text and intent.\r\n     * @member ResultReason.RecognizingIntent\r\n     */\r\n    RecognizingIntent,\r\n\r\n    /**\r\n     * Indicates the intent result contains final text and intent.\r\n     * Speech Recognition and Intent determination are now complete for this phrase.\r\n     * @member ResultReason.RecognizedIntent\r\n     */\r\n    RecognizedIntent,\r\n\r\n    /**\r\n     * Indicates the translation result contains hypothesis text and its translation(s).\r\n     * @member ResultReason.TranslatingSpeech\r\n     */\r\n    TranslatingSpeech,\r\n\r\n    /**\r\n     * Indicates the translation result contains final text and corresponding translation(s).\r\n     * Speech Recognition and Translation are now complete for this phrase.\r\n     * @member ResultReason.TranslatedSpeech\r\n     */\r\n    TranslatedSpeech,\r\n\r\n    /**\r\n     * Indicates the synthesized audio result contains a non-zero amount of audio data\r\n     * @member ResultReason.SynthesizingAudio\r\n     */\r\n    SynthesizingAudio,\r\n\r\n    /**\r\n     * Indicates the synthesized audio is now complete for this phrase.\r\n     * @member ResultReason.SynthesizingAudioCompleted\r\n     */\r\n    SynthesizingAudioCompleted,\r\n\r\n    /**\r\n     * Indicates the speech synthesis is now started\r\n     * @member ResultReason.SynthesizingAudioStarted\r\n     */\r\n    SynthesizingAudioStarted,\r\n\r\n    /**\r\n     * Indicates the voice profile is being enrolled and customers need to send more audio to create a voice profile.\r\n     * @member ResultReason.EnrollingVoiceProfile\r\n     */\r\n    EnrollingVoiceProfile,\r\n\r\n    /**\r\n     * Indicates the voice profile has been enrolled.\r\n     * @member ResultReason.EnrolledVoiceProfile\r\n     */\r\n    EnrolledVoiceProfile,\r\n\r\n    /**\r\n     * Indicates successful identification of some speakers.\r\n     * @member ResultReason.RecognizedSpeakers\r\n     */\r\n    RecognizedSpeakers,\r\n\r\n    /**\r\n     * Indicates successfully verified one speaker.\r\n     * @member ResultReason.RecognizedSpeaker\r\n     */\r\n    RecognizedSpeaker,\r\n\r\n    /**\r\n     * Indicates a voice profile has been reset successfully.\r\n     * @member ResultReason.ResetVoiceProfile\r\n     */\r\n    ResetVoiceProfile,\r\n\r\n    /**\r\n     * Indicates a voice profile has been deleted successfully.\r\n     * @member ResultReason.DeletedVoiceProfile\r\n     */\r\n    DeletedVoiceProfile,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ForceDictationPropertyName,\r\n    OutputFormatPropertyName,\r\n    ServicePropertiesPropertyName\r\n} from \"../common.speech/Exports\";\r\nimport {IStringDictionary} from \"../common/Exports\";\r\nimport {Contracts} from \"./Contracts\";\r\nimport {\r\n    OutputFormat,\r\n    ProfanityOption,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ServicePropertyChannel,\r\n    SpeechSynthesisOutputFormat,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Speech configuration.\r\n * @class SpeechConfig\r\n */\r\nexport abstract class SpeechConfig {\r\n    /**\r\n     * Creates and initializes an instance.\r\n     * @constructor\r\n     */\r\n    protected constructor() { }\r\n\r\n    /**\r\n     * Static instance of SpeechConfig returned by passing subscriptionKey and service region.\r\n     * Note: Please use your LanguageUnderstanding subscription key in case you want to use the Intent recognizer.\r\n     * @member SpeechConfig.fromSubscription\r\n     * @function\r\n     * @public\r\n     * @param {string} subscriptionKey - The subscription key.\r\n     * @param {string} region - The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {SpeechConfig} The speech factory\r\n     */\r\n    public static fromSubscription(subscriptionKey: string, region: string): SpeechConfig {\r\n        Contracts.throwIfNullOrWhitespace(subscriptionKey, \"subscriptionKey\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const speechImpl: SpeechConfigImpl = new SpeechConfigImpl();\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_IntentRegion, region);\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n\r\n        return speechImpl;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the speech config with specified endpoint and subscription key.\r\n     * This method is intended only for users who use a non-standard service endpoint or parameters.\r\n     * Note: Please use your LanguageUnderstanding subscription key in case you want to use the Intent recognizer.\r\n     * Note: The query parameters specified in the endpoint URL are not changed, even if they are set by any other APIs.\r\n     * For example, if language is defined in the uri as query parameter \"language=de-DE\", and also set by\r\n     *              SpeechConfig.speechRecognitionLanguage = \"en-US\", the language setting in uri takes precedence,\r\n     *              and the effective language is \"de-DE\". Only the parameters that are not specified in the\r\n     *              endpoint URL can be set by other APIs.\r\n     * Note: To use authorization token with fromEndpoint, pass an empty string to the subscriptionKey in the\r\n     *       fromEndpoint method, and then set authorizationToken=\"token\" on the created SpeechConfig instance to\r\n     *       use the authorization token.\r\n     * @member SpeechConfig.fromEndpoint\r\n     * @function\r\n     * @public\r\n     * @param {URL} endpoint - The service endpoint to connect to.\r\n     * @param {string} subscriptionKey - The subscription key. If a subscription key is not specified, an authorization token must be set.\r\n     * @returns {SpeechConfig} A speech factory instance.\r\n     */\r\n    public static fromEndpoint(endpoint: URL, subscriptionKey?: string): SpeechConfig {\r\n        Contracts.throwIfNull(endpoint, \"endpoint\");\r\n\r\n        const speechImpl: SpeechConfigImpl = new SpeechConfigImpl();\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Endpoint, endpoint.href);\r\n\r\n        if (undefined !== subscriptionKey) {\r\n            speechImpl.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        }\r\n        return speechImpl;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the speech config with specified host and subscription key.\r\n     * This method is intended only for users who use a non-default service host. Standard resource path will be assumed.\r\n     * For services with a non-standard resource path or no path at all, use fromEndpoint instead.\r\n     * Note: Query parameters are not allowed in the host URI and must be set by other APIs.\r\n     * Note: To use an authorization token with fromHost, use fromHost(URL),\r\n     * and then set the AuthorizationToken property on the created SpeechConfig instance.\r\n     * Note: Added in version 1.9.0.\r\n     * @member SpeechConfig.fromHost\r\n     * @function\r\n     * @public\r\n     * @param {URL} host - The service endpoint to connect to. Format is \"protocol://host:port\" where \":port\" is optional.\r\n     * @param {string} subscriptionKey - The subscription key. If a subscription key is not specified, an authorization token must be set.\r\n     * @returns {SpeechConfig} A speech factory instance.\r\n     */\r\n    public static fromHost(hostName: URL, subscriptionKey?: string): SpeechConfig {\r\n        Contracts.throwIfNull(hostName, \"hostName\");\r\n\r\n        const speechImpl: SpeechConfigImpl = new SpeechConfigImpl();\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Host, hostName.protocol + \"//\" + hostName.hostname + (hostName.port === \"\" ? \"\" : \":\" + hostName.port));\r\n\r\n        if (undefined !== subscriptionKey) {\r\n            speechImpl.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        }\r\n        return speechImpl;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the speech factory with specified initial authorization token and region.\r\n     * Note: The caller needs to ensure that the authorization token is valid. Before the authorization token\r\n     *       expires, the caller needs to refresh it by calling this setter with a new valid token.\r\n     * Note: Please use a token derived from your LanguageUnderstanding subscription key in case you want\r\n     *       to use the Intent recognizer. As configuration values are copied when creating a new recognizer,\r\n     *       the new token value will not apply to recognizers that have already been created. For recognizers\r\n     *       that have been created before, you need to set authorization token of the corresponding recognizer\r\n     *       to refresh the token. Otherwise, the recognizers will encounter errors during recognition.\r\n     * @member SpeechConfig.fromAuthorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} authorizationToken - The initial authorization token.\r\n     * @param {string} region - The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {SpeechConfig} A speech factory instance.\r\n     */\r\n    public static fromAuthorizationToken(authorizationToken: string, region: string): SpeechConfig {\r\n        Contracts.throwIfNull(authorizationToken, \"authorizationToken\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const speechImpl: SpeechConfigImpl = new SpeechConfigImpl();\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_IntentRegion, region);\r\n        speechImpl.authorizationToken = authorizationToken;\r\n        return speechImpl;\r\n    }\r\n\r\n    /**\r\n     * Sets the proxy configuration.\r\n     * Only relevant in Node.js environments.\r\n     * Added in version 1.4.0.\r\n     * @param proxyHostName The host name of the proxy server.\r\n     * @param proxyPort The port number of the proxy server.\r\n     */\r\n    public abstract setProxy(proxyHostName: string, proxyPort: number): void;\r\n\r\n    /**\r\n     * Sets the proxy configuration.\r\n     * Only relevant in Node.js environments.\r\n     * Added in version 1.4.0.\r\n     * @param proxyHostName The host name of the proxy server, without the protocol scheme (http://)\r\n     * @param proxyPort The port number of the proxy server.\r\n     * @param proxyUserName The user name of the proxy server.\r\n     * @param proxyPassword The password of the proxy server.\r\n     */\r\n    public abstract setProxy(proxyHostName: string, proxyPort: number, proxyUserName: string, proxyPassword: string): void;\r\n\r\n    /**\r\n     * Gets the authorization token.\r\n     * @member SpeechConfig.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract get authorizationToken(): string;\r\n\r\n    /**\r\n     * Gets/Sets the authorization token.\r\n     * Note: The caller needs to ensure that the authorization token is valid. Before the authorization token\r\n     * expires, the caller needs to refresh it by calling this setter with a new valid token.\r\n     * @member SpeechConfig.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public abstract set authorizationToken(value: string);\r\n\r\n    /**\r\n     * Returns the configured language.\r\n     * @member SpeechConfig.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract get speechRecognitionLanguage(): string;\r\n\r\n    /**\r\n     * Gets/Sets the input language.\r\n     * @member SpeechConfig.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public abstract set speechRecognitionLanguage(value: string);\r\n\r\n    /**\r\n     * Sets an arbitrary property.\r\n     * @member SpeechConfig.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to set.\r\n     * @param {string} value - The new value of the property.\r\n     */\r\n    public abstract setProperty(name: string, value: string): void;\r\n\r\n    /**\r\n     * Returns the current value of an arbitrary property.\r\n     * @member SpeechConfig.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to query.\r\n     * @param {string} def - The value to return in case the property is not known.\r\n     * @returns {string} The current value, or provided default, of the given property.\r\n     */\r\n    public abstract getProperty(name: string, def?: string): string;\r\n\r\n    /**\r\n     * Gets speech recognition output format (simple or detailed).\r\n     * Note: This output format is for speech recognition result, use [SpeechConfig.speechSynthesisOutputFormat] to\r\n     * get synthesized audio output format.\r\n     * @member SpeechConfig.prototype.outputFormat\r\n     * @function\r\n     * @public\r\n     * @returns {OutputFormat} Returns the output format.\r\n     */\r\n    public abstract get outputFormat(): OutputFormat;\r\n\r\n    /**\r\n     * Gets/Sets speech recognition output format (simple or detailed).\r\n     * Note: This output format is for speech recognition result, use [SpeechConfig.speechSynthesisOutputFormat] to\r\n     * set synthesized audio output format.\r\n     * @member SpeechConfig.prototype.outputFormat\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract set outputFormat(format: OutputFormat);\r\n\r\n    /**\r\n     * Gets the endpoint ID of a customized speech model that is used for speech recognition.\r\n     * @member SpeechConfig.prototype.endpointId\r\n     * @function\r\n     * @public\r\n     * @return {string} The endpoint ID\r\n     */\r\n    public abstract get endpointId(): string;\r\n\r\n    /**\r\n     * Gets/Sets the endpoint ID of a customized speech model that is used for speech recognition.\r\n     * @member SpeechConfig.prototype.endpointId\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The endpoint ID\r\n     */\r\n    public abstract set endpointId(value: string);\r\n\r\n    /**\r\n     * Closes the configuration.\r\n     * @member SpeechConfig.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    /* tslint:disable:no-empty */\r\n    public close(): void { }\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.subscriptionKey\r\n     * @function\r\n     * @public\r\n     * @return {string} The subscription key set on the config.\r\n     */\r\n    public abstract get subscriptionKey(): string;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.region\r\n     * @function\r\n     * @public\r\n     * @return {region} The region set on the config.\r\n     */\r\n    public abstract get region(): string;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.setServiceProperty\r\n     * @function\r\n     * @public\r\n     * @param {name} The name of the property.\r\n     * @param {value} Value to set.\r\n     * @param {channel} The channel used to pass the specified property to service.\r\n     * @summary Sets a property value that will be passed to service using the specified channel.\r\n     * Added in version 1.7.0.\r\n     */\r\n    public abstract setServiceProperty(name: string, value: string, channel: ServicePropertyChannel): void;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.setProfanity\r\n     * @function\r\n     * @public\r\n     * @param {profanity} Profanity option to set.\r\n     * @summary Sets profanity option.\r\n     * Added in version 1.7.0.\r\n     */\r\n    public abstract setProfanity(profanity: ProfanityOption): void;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.enableAudioLogging\r\n     * @function\r\n     * @public\r\n     * @summary Enable audio logging in service.\r\n     * Added in version 1.7.0.\r\n     */\r\n    public abstract enableAudioLogging(): void;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.requestWordLevelTimestamps\r\n     * @function\r\n     * @public\r\n     * @summary Includes word-level timestamps.\r\n     * Added in version 1.7.0.\r\n     */\r\n    public abstract requestWordLevelTimestamps(): void;\r\n\r\n    /**\r\n     * @member SpeechConfig.prototype.enableDictation\r\n     * @function\r\n     * @public\r\n     * @summary Enable dictation. Only supported in speech continuous recognition.\r\n     * Added in version 1.7.0.\r\n     */\r\n    public abstract enableDictation(): void;\r\n\r\n    /**\r\n     * Gets the language of the speech synthesizer.\r\n     * @member SpeechConfig.prototype.speechSynthesisLanguage\r\n     * @function\r\n     * @public\r\n     * @returns {string} Returns the speech synthesis language.\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract get speechSynthesisLanguage(): string;\r\n\r\n    /**\r\n     * Sets the language of the speech synthesizer.\r\n     * @member SpeechConfig.prototype.speechSynthesisLanguage\r\n     * @function\r\n     * @public\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract set speechSynthesisLanguage(language: string);\r\n\r\n    /**\r\n     * Gets the voice of the speech synthesizer.\r\n     * @member SpeechConfig.prototype.speechSynthesisVoiceName\r\n     * @function\r\n     * @public\r\n     * @returns {string} Returns the speech synthesis voice.\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract get speechSynthesisVoiceName(): string;\r\n\r\n    /**\r\n     * Sets the voice of the speech synthesizer. (see <a href=\"https://aka.ms/speech/tts-languages\">available voices</a>).\r\n     * @member SpeechConfig.prototype.speechSynthesisVoiceName\r\n     * @function\r\n     * @public\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract set speechSynthesisVoiceName(voice: string);\r\n\r\n    /**\r\n     * Gets the speech synthesis output format.\r\n     * @member SpeechConfig.prototype.speechSynthesisOutputFormat\r\n     * @function\r\n     * @public\r\n     * @returns {SpeechSynthesisOutputFormat} Returns the speech synthesis output format\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract get speechSynthesisOutputFormat(): SpeechSynthesisOutputFormat;\r\n\r\n    /**\r\n     * Sets the speech synthesis output format (e.g. Riff16Khz16BitMonoPcm).\r\n     * @member SpeechConfig.prototype.speechSynthesisOutputFormat\r\n     * @function\r\n     * @public\r\n     * The default format is Audio16Khz64KBitRateMonoMp3 for browser and Riff16Khz16BitMonoPcm for Node.JS\r\n     * Added in version 1.11.0.\r\n     */\r\n    public abstract set speechSynthesisOutputFormat(format: SpeechSynthesisOutputFormat);\r\n}\r\n\r\n/**\r\n * @public\r\n * @class SpeechConfigImpl\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechConfigImpl extends SpeechConfig {\r\n\r\n    private privProperties: PropertyCollection;\r\n\r\n    public constructor() {\r\n        super();\r\n        this.privProperties = new PropertyCollection();\r\n        this.speechRecognitionLanguage = \"en-US\"; // Should we have a default?\r\n        this.outputFormat = OutputFormat.Simple;\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public get endPoint(): URL {\r\n        return new URL(this.privProperties.getProperty(PropertyId.SpeechServiceConnection_Endpoint));\r\n    }\r\n\r\n    public get subscriptionKey(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_Key);\r\n    }\r\n\r\n    public get region(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_Region);\r\n    }\r\n\r\n    public get authorizationToken(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    public set authorizationToken(value: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceAuthorization_Token, value);\r\n    }\r\n\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    public set speechRecognitionLanguage(value: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_RecoLanguage, value);\r\n    }\r\n\r\n    public get autoDetectSourceLanguages(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages);\r\n    }\r\n\r\n    public set autoDetectSourceLanguages(value: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages, value);\r\n    }\r\n\r\n    public get outputFormat(): OutputFormat {\r\n        return (OutputFormat as any)[this.privProperties.getProperty(OutputFormatPropertyName, undefined)];\r\n    }\r\n\r\n    public set outputFormat(value: OutputFormat) {\r\n        this.privProperties.setProperty(OutputFormatPropertyName, OutputFormat[value]);\r\n    }\r\n\r\n    public get endpointId(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_EndpointId);\r\n    }\r\n\r\n    public set endpointId(value: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_EndpointId, value);\r\n    }\r\n\r\n    public setProperty(name: string | PropertyId, value: string): void {\r\n        Contracts.throwIfNull(value, \"value\");\r\n\r\n        this.privProperties.setProperty(name, value);\r\n    }\r\n\r\n    public getProperty(name: string | PropertyId, def?: string): string {\r\n\r\n        return this.privProperties.getProperty(name, def);\r\n    }\r\n\r\n    public setProxy(proxyHostName: string, proxyPort: number): void;\r\n    public setProxy(proxyHostName: string, proxyPort: number, proxyUserName: string, proxyPassword: string): void;\r\n    public setProxy(proxyHostName: any, proxyPort: any, proxyUserName?: any, proxyPassword?: any): void {\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyHostName], proxyHostName);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyPort], proxyPort);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyUserName], proxyUserName);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyPassword], proxyPassword);\r\n    }\r\n\r\n    public setServiceProperty(name: string, value: string, channel: ServicePropertyChannel): void {\r\n        const currentProperties: IStringDictionary<string> = JSON.parse(this.privProperties.getProperty(ServicePropertiesPropertyName, \"{}\"));\r\n\r\n        currentProperties[name] = value;\r\n\r\n        this.privProperties.setProperty(ServicePropertiesPropertyName, JSON.stringify(currentProperties));\r\n    }\r\n\r\n    public setProfanity(profanity: ProfanityOption): void {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceResponse_ProfanityOption, ProfanityOption[profanity]);\r\n    }\r\n\r\n    public enableAudioLogging(): void {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_EnableAudioLogging, \"true\");\r\n    }\r\n    public requestWordLevelTimestamps(): void {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceResponse_RequestWordLevelTimestamps, \"true\");\r\n    }\r\n    public enableDictation(): void {\r\n        this.privProperties.setProperty(ForceDictationPropertyName, \"true\");\r\n    }\r\n\r\n    public clone(): SpeechConfigImpl {\r\n        const ret: SpeechConfigImpl = new SpeechConfigImpl();\r\n        ret.privProperties = this.privProperties.clone();\r\n        return ret;\r\n    }\r\n\r\n    public get speechSynthesisLanguage(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_SynthLanguage);\r\n    }\r\n\r\n    public set speechSynthesisLanguage(language: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_SynthLanguage, language);\r\n    }\r\n\r\n    public get speechSynthesisVoiceName(): string {\r\n        return this.privProperties.getProperty(PropertyId.SpeechServiceConnection_SynthVoice);\r\n    }\r\n\r\n    public set speechSynthesisVoiceName(voice: string) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_SynthVoice, voice);\r\n    }\r\n\r\n    public get speechSynthesisOutputFormat(): SpeechSynthesisOutputFormat {\r\n        return (SpeechSynthesisOutputFormat as any)[this.privProperties.getProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, undefined)];\r\n    }\r\n\r\n    public set speechSynthesisOutputFormat(format: SpeechSynthesisOutputFormat) {\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, SpeechSynthesisOutputFormat[format]);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ForceDictationPropertyName,\r\n    OutputFormatPropertyName,\r\n    ServicePropertiesPropertyName\r\n} from \"../common.speech/Exports\";\r\nimport { IStringDictionary } from \"../common/Exports\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    OutputFormat,\r\n    ProfanityOption,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ServicePropertyChannel,\r\n    SpeechConfig, SpeechSynthesisOutputFormat,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Speech translation configuration.\r\n * @class SpeechTranslationConfig\r\n */\r\nexport abstract class SpeechTranslationConfig extends SpeechConfig {\r\n\r\n    /**\r\n     * Creates an instance of recognizer config.\r\n     */\r\n    protected constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Static instance of SpeechTranslationConfig returned by passing a subscription key and service region.\r\n     * @member SpeechTranslationConfig.fromSubscription\r\n     * @function\r\n     * @public\r\n     * @param {string} subscriptionKey - The subscription key.\r\n     * @param {string} region - The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {SpeechTranslationConfig} The speech translation config.\r\n     */\r\n    public static fromSubscription(subscriptionKey: string, region: string): SpeechTranslationConfig {\r\n        Contracts.throwIfNullOrWhitespace(subscriptionKey, \"subscriptionKey\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const ret: SpeechTranslationConfigImpl = new SpeechTranslationConfigImpl();\r\n        ret.properties.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        ret.properties.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Static instance of SpeechTranslationConfig returned by passing authorization token and service region.\r\n     * Note: The caller needs to ensure that the authorization token is valid. Before the authorization token\r\n     *       expires, the caller needs to refresh it by setting the property authorizationToken with a new\r\n     *       valid token. Otherwise, all the recognizers created by this SpeechTranslationConfig instance\r\n     *       will encounter errors during recognition.\r\n     * As configuration values are copied when creating a new recognizer, the new token value will not apply\r\n     * to recognizers that have already been created.\r\n     * For recognizers that have been created before, you need to set authorization token of the corresponding recognizer\r\n     * to refresh the token. Otherwise, the recognizers will encounter errors during recognition.\r\n     * @member SpeechTranslationConfig.fromAuthorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} authorizationToken - The authorization token.\r\n     * @param {string} region - The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {SpeechTranslationConfig} The speech translation config.\r\n     */\r\n    public static fromAuthorizationToken(authorizationToken: string, region: string): SpeechTranslationConfig {\r\n        Contracts.throwIfNullOrWhitespace(authorizationToken, \"authorizationToken\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const ret: SpeechTranslationConfigImpl = new SpeechTranslationConfigImpl();\r\n        ret.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, authorizationToken);\r\n        ret.properties.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the speech config with specified host and subscription key.\r\n     * This method is intended only for users who use a non-default service host. Standard resource path will be assumed.\r\n     * For services with a non-standard resource path or no path at all, use fromEndpoint instead.\r\n     * Note: Query parameters are not allowed in the host URI and must be set by other APIs.\r\n     * Note: To use an authorization token with fromHost, use fromHost(URL),\r\n     * and then set the AuthorizationToken property on the created SpeechConfig instance.\r\n     * Note: Added in version 1.9.0.\r\n     * @member SpeechConfig.fromHost\r\n     * @function\r\n     * @public\r\n     * @param {URL} host - The service endpoint to connect to. Format is \"protocol://host:port\" where \":port\" is optional.\r\n     * @param {string} subscriptionKey - The subscription key. If a subscription key is not specified, an authorization token must be set.\r\n     * @returns {SpeechConfig} A speech factory instance.\r\n     */\r\n    public static fromHost(hostName: URL, subscriptionKey?: string): SpeechConfig {\r\n        Contracts.throwIfNull(hostName, \"hostName\");\r\n\r\n        const speechImpl: SpeechTranslationConfigImpl = new SpeechTranslationConfigImpl();\r\n        speechImpl.setProperty(PropertyId.SpeechServiceConnection_Host, hostName.protocol + \"//\" + hostName.hostname + (hostName.port === \"\" ? \"\" : \":\" + hostName.port));\r\n\r\n        if (undefined !== subscriptionKey) {\r\n            speechImpl.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        }\r\n        return speechImpl;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the speech translation config with specified endpoint and subscription key.\r\n     * This method is intended only for users who use a non-standard service endpoint or paramters.\r\n     * Note: The query properties specified in the endpoint URL are not changed, even if they are\r\n     *       set by any other APIs. For example, if language is defined in the uri as query parameter\r\n     *       \"language=de-DE\", and also set by the speechRecognitionLanguage property, the language\r\n     *       setting in uri takes precedence, and the effective language is \"de-DE\".\r\n     * Only the properties that are not specified in the endpoint URL can be set by other APIs.\r\n     * Note: To use authorization token with fromEndpoint, pass an empty string to the subscriptionKey in the\r\n     *       fromEndpoint method, and then set authorizationToken=\"token\" on the created SpeechConfig instance to\r\n     *       use the authorization token.\r\n     * @member SpeechTranslationConfig.fromEndpoint\r\n     * @function\r\n     * @public\r\n     * @param {URL} endpoint - The service endpoint to connect to.\r\n     * @param {string} subscriptionKey - The subscription key.\r\n     * @returns {SpeechTranslationConfig} A speech config instance.\r\n     */\r\n    public static fromEndpoint(endpoint: URL, subscriptionKey: string): SpeechTranslationConfig {\r\n        Contracts.throwIfNull(endpoint, \"endpoint\");\r\n        Contracts.throwIfNull(subscriptionKey, \"subscriptionKey\");\r\n\r\n        const ret: SpeechTranslationConfigImpl = new SpeechTranslationConfigImpl();\r\n        ret.properties.setProperty(PropertyId.SpeechServiceConnection_Endpoint, endpoint.href);\r\n        ret.properties.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token.\r\n     * Note: The caller needs to ensure that the authorization token is valid. Before the authorization token\r\n     * expires, the caller needs to refresh it by calling this setter with a new valid token.\r\n     * @member SpeechTranslationConfig.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public abstract set authorizationToken(value: string);\r\n\r\n    /**\r\n     * Gets/Sets the speech recognition language.\r\n     * @member SpeechTranslationConfig.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public abstract set speechRecognitionLanguage(value: string);\r\n\r\n    /**\r\n     * Add a (text) target language to translate into.\r\n     * @member SpeechTranslationConfig.prototype.addTargetLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language such as de-DE\r\n     */\r\n    public abstract addTargetLanguage(value: string): void;\r\n\r\n    /**\r\n     * Gets the (text) target language to translate into.\r\n     * @member SpeechTranslationConfig.prototype.targetLanguages\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language such as de-DE\r\n     */\r\n    public abstract get targetLanguages(): string[];\r\n\r\n    /**\r\n     * Gets the selected voice name.\r\n     * @member SpeechTranslationConfig.prototype.voiceName\r\n     * @function\r\n     * @public\r\n     * @returns {string} The voice name.\r\n     */\r\n    public abstract get voiceName(): string;\r\n\r\n    /**\r\n     * Gets/Sets voice of the translated language, enable voice synthesis output.\r\n     * @member SpeechTranslationConfig.prototype.voiceName\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The name of the voice.\r\n     */\r\n    public abstract set voiceName(value: string);\r\n\r\n    /**\r\n     * Sets a named property as value\r\n     * @member SpeechTranslationConfig.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property.\r\n     * @param {string} value - The value.\r\n     */\r\n    public abstract setProperty(name: string, value: string): void;\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member SpeechTranslationConfig.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract close(): void;\r\n}\r\n\r\n/**\r\n * @private\r\n * @class SpeechTranslationConfigImpl\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechTranslationConfigImpl extends SpeechTranslationConfig {\r\n\r\n    private privSpeechProperties: PropertyCollection;\r\n\r\n    public constructor() {\r\n        super();\r\n        this.privSpeechProperties = new PropertyCollection();\r\n        this.outputFormat = OutputFormat.Simple;\r\n    }\r\n    /**\r\n     * Gets/Sets the authorization token.\r\n     * If this is set, subscription key is ignored.\r\n     * User needs to make sure the provided authorization token is valid and not expired.\r\n     * @member SpeechTranslationConfigImpl.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public set authorizationToken(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceAuthorization_Token, value);\r\n    }\r\n\r\n    /**\r\n     * Sets the speech recognition language.\r\n     * @member SpeechTranslationConfigImpl.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The authorization token.\r\n     */\r\n    public set speechRecognitionLanguage(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_RecoLanguage, value);\r\n    }\r\n\r\n    /**\r\n     * Gets the speech recognition language.\r\n     * @member SpeechTranslationConfigImpl.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @return {string} The speechRecognitionLanguage.\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n    }\r\n\r\n    /**\r\n     * @member SpeechTranslationConfigImpl.prototype.subscriptionKey\r\n     * @function\r\n     * @public\r\n     */\r\n    public get subscriptionKey(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId[PropertyId.SpeechServiceConnection_Key]);\r\n    }\r\n\r\n    /**\r\n     * Gets the output format\r\n     * @member SpeechTranslationConfigImpl.prototype.outputFormat\r\n     * @function\r\n     * @public\r\n     */\r\n    public get outputFormat(): OutputFormat {\r\n        return (OutputFormat as any)[this.privSpeechProperties.getProperty(OutputFormatPropertyName, undefined)];\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the output format\r\n     * @member SpeechTranslationConfigImpl.prototype.outputFormat\r\n     * @function\r\n     * @public\r\n     */\r\n    public set outputFormat(value: OutputFormat) {\r\n        this.privSpeechProperties.setProperty(OutputFormatPropertyName, OutputFormat[value]);\r\n    }\r\n\r\n    /**\r\n     * Gets the endpoint id.\r\n     * @member SpeechTranslationConfigImpl.prototype.endpointId\r\n     * @function\r\n     * @public\r\n     */\r\n    public get endpointId(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_EndpointId);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the endpoint id.\r\n     * @member SpeechTranslationConfigImpl.prototype.endpointId\r\n     * @function\r\n     * @public\r\n     */\r\n    public set endpointId(value: string) {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_EndpointId, value);\r\n    }\r\n\r\n    /**\r\n     * Add a (text) target language to translate into.\r\n     * @member SpeechTranslationConfigImpl.prototype.addTargetLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language such as de-DE\r\n     */\r\n    public addTargetLanguage(value: string): void {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n\r\n        const languages: string[] = this.targetLanguages;\r\n        languages.push(value);\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages, languages.join(\",\"));\r\n    }\r\n\r\n    /**\r\n     * Gets the (text) target language to translate into.\r\n     * @member SpeechTranslationConfigImpl.prototype.targetLanguages\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language such as de-DE\r\n     */\r\n    public get targetLanguages(): string[] {\r\n\r\n        if (this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages, undefined) !== undefined) {\r\n            return this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages).split(\",\");\r\n        } else {\r\n            return [];\r\n        }\r\n\r\n    }\r\n\r\n    /**\r\n     * Gets the voice name.\r\n     * @member SpeechTranslationConfigImpl.prototype.voiceName\r\n     * @function\r\n     * @public\r\n     */\r\n    public get voiceName(): string {\r\n        return this.getProperty(PropertyId[PropertyId.SpeechServiceConnection_TranslationVoice]);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the voice of the translated language, enable voice synthesis output.\r\n     * @member SpeechTranslationConfigImpl.prototype.voiceName\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The name of the voice.\r\n     */\r\n    public set voiceName(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_TranslationVoice, value);\r\n    }\r\n\r\n    /**\r\n     * Provides the region.\r\n     * @member SpeechTranslationConfigImpl.prototype.region\r\n     * @function\r\n     * @public\r\n     * @returns {string} The region.\r\n     */\r\n    public get region(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_Region);\r\n    }\r\n\r\n    public setProxy(proxyHostName: string, proxyPort: number): void;\r\n    public setProxy(proxyHostName: string, proxyPort: number, proxyUserName: string, proxyPassword: string): void;\r\n    public setProxy(proxyHostName: any, proxyPort: any, proxyUserName?: any, proxyPassword?: any): void {\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyHostName], proxyHostName);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyPort], proxyPort);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyUserName], proxyUserName);\r\n        this.setProperty(PropertyId[PropertyId.SpeechServiceConnection_ProxyPassword], proxyPassword);\r\n    }\r\n\r\n    /**\r\n     * Gets an arbitrary property value.\r\n     * @member SpeechTranslationConfigImpl.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property.\r\n     * @param {string} def - The default value of the property in case it is not set.\r\n     * @returns {string} The value of the property.\r\n     */\r\n    public getProperty(name: string, def?: string): string {\r\n        return this.privSpeechProperties.getProperty(name, def);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets an arbitrary property value.\r\n     * @member SpeechTranslationConfigImpl.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property.\r\n     * @param {string} value - The value of the property.\r\n     */\r\n    public setProperty(name: string | PropertyId, value: string): void {\r\n        this.privSpeechProperties.setProperty(name, value);\r\n    }\r\n\r\n    /**\r\n     * Provides access to custom properties.\r\n     * @member SpeechTranslationConfigImpl.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The properties.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privSpeechProperties;\r\n    }\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member SpeechTranslationConfigImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        return;\r\n    }\r\n\r\n    public setServiceProperty(name: string, value: string, channel: ServicePropertyChannel): void {\r\n        const currentProperties: IStringDictionary<string> = JSON.parse(this.privSpeechProperties.getProperty(ServicePropertiesPropertyName, \"{}\"));\r\n\r\n        currentProperties[name] = value;\r\n\r\n        this.privSpeechProperties.setProperty(ServicePropertiesPropertyName, JSON.stringify(currentProperties));\r\n    }\r\n\r\n    public setProfanity(profanity: ProfanityOption): void {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceResponse_ProfanityOption, ProfanityOption[profanity]);\r\n    }\r\n\r\n    public enableAudioLogging(): void {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_EnableAudioLogging, \"true\");\r\n    }\r\n    public requestWordLevelTimestamps(): void {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceResponse_RequestWordLevelTimestamps, \"true\");\r\n    }\r\n    public enableDictation(): void {\r\n        this.privSpeechProperties.setProperty(ForceDictationPropertyName, \"true\");\r\n    }\r\n\r\n    public get speechSynthesisLanguage(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_SynthLanguage);\r\n    }\r\n\r\n    public set speechSynthesisLanguage(language: string) {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_SynthLanguage, language);\r\n    }\r\n\r\n    public get speechSynthesisVoiceName(): string {\r\n        return this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_SynthVoice);\r\n    }\r\n\r\n    public set speechSynthesisVoiceName(voice: string) {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_SynthVoice, voice);\r\n    }\r\n\r\n    public get speechSynthesisOutputFormat(): SpeechSynthesisOutputFormat {\r\n        return (SpeechSynthesisOutputFormat as any)[this.privSpeechProperties.getProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, undefined)];\r\n    }\r\n\r\n    public set speechSynthesisOutputFormat(format: SpeechSynthesisOutputFormat) {\r\n        this.privSpeechProperties.setProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, SpeechSynthesisOutputFormat[format]);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyId } from \"./Exports\";\r\n\r\n/**\r\n * Represents collection of properties and their values.\r\n * @class PropertyCollection\r\n */\r\nexport class PropertyCollection {\r\n    private privKeys: string[] = [] as string[];\r\n    private privValues: string[] = [] as string[];\r\n\r\n    /**\r\n     * Returns the property value in type String. The parameter must have the same type as String.\r\n     * Currently only String, int and bool are allowed.\r\n     * If the name is not available, the specified defaultValue is returned.\r\n     * @member PropertyCollection.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} key - The parameter name.\r\n     * @param {string} def - The default value which is returned if the parameter\r\n     *        is not available in the collection.\r\n     * @returns {string} value of the parameter.\r\n     */\r\n    public getProperty(key: PropertyId | string, def?: string): string {\r\n        let keyToUse: string;\r\n\r\n        if (typeof key === \"string\") {\r\n            keyToUse = key;\r\n        } else {\r\n            keyToUse = PropertyId[key];\r\n        }\r\n\r\n        for (let n = 0; n < this.privKeys.length; n++) {\r\n            if (this.privKeys[n] === keyToUse) {\r\n                return this.privValues[n];\r\n            }\r\n        }\r\n\r\n        return def;\r\n    }\r\n\r\n    /**\r\n     * Sets the String value of the parameter specified by name.\r\n     * @member PropertyCollection.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} key - The parameter name.\r\n     * @param {string} value - The value of the parameter.\r\n     */\r\n    public setProperty(key: string | PropertyId, value: string): void {\r\n        let keyToUse: string;\r\n\r\n        if (typeof key === \"string\") {\r\n            keyToUse = key;\r\n        } else {\r\n            keyToUse = PropertyId[key];\r\n        }\r\n\r\n        for (let n = 0; n < this.privKeys.length; n++) {\r\n            if (this.privKeys[n] === keyToUse) {\r\n                this.privValues[n] = value;\r\n                return;\r\n            }\r\n        }\r\n\r\n        this.privKeys.push(keyToUse);\r\n        this.privValues.push(value);\r\n    }\r\n\r\n    /**\r\n     * Clones the collection.\r\n     * @member PropertyCollection.prototype.clone\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} A copy of the collection.\r\n     */\r\n    public clone(): PropertyCollection {\r\n        const clonedMap = new PropertyCollection();\r\n\r\n        for (let n = 0; n < this.privKeys.length; n++) {\r\n            clonedMap.privKeys.push(this.privKeys[n]);\r\n            clonedMap.privValues.push(this.privValues[n]);\r\n        }\r\n\r\n        return clonedMap;\r\n    }\r\n\r\n    /**\r\n     * Merges this set of properties into another, no overwrites.\r\n     * @member PropertyCollection.prototype.mergeTo\r\n     * @function\r\n     * @public\r\n     * @param {PropertyCollection} The collection to merge into.\r\n     */\r\n    public mergeTo(destinationCollection: PropertyCollection): void {\r\n        this.privKeys.forEach((key: string | PropertyId) => {\r\n            if (destinationCollection.getProperty(key, undefined) === undefined) {\r\n                const value = this.getProperty(key);\r\n                destinationCollection.setProperty(key, value);\r\n            }\r\n        });\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines speech property ids.\r\n * @class PropertyId\r\n */\r\nexport enum PropertyId {\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service subscription Key. If you are using an intent recognizer, you need to specify\r\n     * to specify the LUIS endpoint key for your particular LUIS app. Under normal circumstances, you shouldn't\r\n     * have to use this property directly.\r\n     * Instead, use [[SpeechConfig.fromSubscription]].\r\n     * @member PropertyId.SpeechServiceConnection_Key\r\n     */\r\n    SpeechServiceConnection_Key = 0,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service endpoint (url). Under normal circumstances, you shouldn't\r\n     * have to use this property directly.\r\n     * Instead, use [[SpeechConfig.fromEndpoint]].\r\n     * NOTE: This endpoint is not the same as the endpoint used to obtain an access token.\r\n     * @member PropertyId.SpeechServiceConnection_Endpoint\r\n     */\r\n    SpeechServiceConnection_Endpoint,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service region. Under normal circumstances, you shouldn't have to\r\n     * use this property directly.\r\n     * Instead, use [[SpeechConfig.fromSubscription]], [[SpeechConfig.fromEndpoint]], [[SpeechConfig.fromAuthorizationToken]].\r\n     * @member PropertyId.SpeechServiceConnection_Region\r\n     */\r\n    SpeechServiceConnection_Region,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service authorization token (aka access token). Under normal circumstances,\r\n     * you shouldn't have to use this property directly.\r\n     * Instead, use [[SpeechConfig.fromAuthorizationToken]], [[SpeechRecognizer.authorizationToken]],\r\n     * [[IntentRecognizer.authorizationToken]], [[TranslationRecognizer.authorizationToken]], [[SpeakerRecognizer.authorizationToken]].\r\n     * @member PropertyId.SpeechServiceAuthorization_Token\r\n     */\r\n    SpeechServiceAuthorization_Token,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service authorization type. Currently unused.\r\n     * @member PropertyId.SpeechServiceAuthorization_Type\r\n     */\r\n    SpeechServiceAuthorization_Type,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service endpoint id. Under normal circumstances, you shouldn't\r\n     * have to use this property directly.\r\n     * Instead, use [[SpeechConfig.endpointId]].\r\n     * NOTE: The endpoint id is available in the Speech Portal, listed under Endpoint Details.\r\n     * @member PropertyId.SpeechServiceConnection_EndpointId\r\n     */\r\n    SpeechServiceConnection_EndpointId,\r\n\r\n    /**\r\n     * The list of comma separated languages (BCP-47 format) used as target translation languages. Under normal circumstances,\r\n     * you shouldn't have to use this property directly.\r\n     * Instead use [[SpeechTranslationConfig.addTargetLanguage]],\r\n     * [[SpeechTranslationConfig.targetLanguages]], [[TranslationRecognizer.targetLanguages]].\r\n     * @member PropertyId.SpeechServiceConnection_TranslationToLanguages\r\n     */\r\n    SpeechServiceConnection_TranslationToLanguages,\r\n\r\n    /**\r\n     * The name of the Cognitive Service Text to Speech Service Voice. Under normal circumstances, you shouldn't have to use this\r\n     * property directly.\r\n     * Instead, use [[SpeechTranslationConfig.voiceName]].\r\n     * NOTE: Valid voice names can be found <a href=\"https://aka.ms/csspeech/voicenames\">here</a>.\r\n     * @member PropertyId.SpeechServiceConnection_TranslationVoice\r\n     */\r\n    SpeechServiceConnection_TranslationVoice,\r\n\r\n    /**\r\n     * Translation features.\r\n     * @member PropertyId.SpeechServiceConnection_TranslationFeatures\r\n     */\r\n    SpeechServiceConnection_TranslationFeatures,\r\n\r\n    /**\r\n     * The Language Understanding Service Region. Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Instead, use [[LanguageUnderstandingModel]].\r\n     * @member PropertyId.SpeechServiceConnection_IntentRegion\r\n     */\r\n    SpeechServiceConnection_IntentRegion,\r\n\r\n    /**\r\n     * The host name of the proxy server used to connect to the Cognitive Services Speech Service. Only relevant in Node.js environments.\r\n     * You shouldn't have to use this property directly.\r\n     * Instead use <see cref=\"SpeechConfig.SetProxy(string,int,string,string)\"/>.\r\n     * Added in version 1.4.0.\r\n     */\r\n    SpeechServiceConnection_ProxyHostName,\r\n\r\n    /**\r\n     * The port of the proxy server used to connect to the Cognitive Services Speech Service. Only relevant in Node.js environments.\r\n     * You shouldn't have to use this property directly.\r\n     * Instead use <see cref=\"SpeechConfig.SetProxy(string,int,string,string)\"/>.\r\n     * Added in version 1.4.0.\r\n     */\r\n    SpeechServiceConnection_ProxyPort,\r\n\r\n    /**\r\n     * The user name of the proxy server used to connect to the Cognitive Services Speech Service. Only relevant in Node.js environments.\r\n     * You shouldn't have to use this property directly.\r\n     * Instead use <see cref=\"SpeechConfig.SetProxy(string,int,string,string)\"/>.\r\n     * Added in version 1.4.0.\r\n     */\r\n    SpeechServiceConnection_ProxyUserName,\r\n\r\n    /**\r\n     * The password of the proxy server used to connect to the Cognitive Services Speech Service. Only relevant in Node.js environments.\r\n     * You shouldn't have to use this property directly.\r\n     * Instead use <see cref=\"SpeechConfig.SetProxy(string,int,string,string)\"/>.\r\n     * Added in version 1.4.0.\r\n     */\r\n    SpeechServiceConnection_ProxyPassword,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service recognition Mode. Can be \"INTERACTIVE\", \"CONVERSATION\", \"DICTATION\".\r\n     * This property is intended to be read-only. The SDK is using it internally.\r\n     * @member PropertyId.SpeechServiceConnection_RecoMode\r\n     */\r\n    SpeechServiceConnection_RecoMode,\r\n\r\n    /**\r\n     * The spoken language to be recognized (in BCP-47 format). Under normal circumstances, you shouldn't have to use this property\r\n     * directly.\r\n     * Instead, use [[SpeechConfig.speechRecognitionLanguage]].\r\n     * @member PropertyId.SpeechServiceConnection_RecoLanguage\r\n     */\r\n    SpeechServiceConnection_RecoLanguage,\r\n\r\n    /**\r\n     * The session id. This id is a universally unique identifier (aka UUID) representing a specific binding of an audio input stream\r\n     * and the underlying speech recognition instance to which it is bound. Under normal circumstances, you shouldn't have to use this\r\n     * property directly.\r\n     * Instead use [[SessionEventArgs.sessionId]].\r\n     * @member PropertyId.Speech_SessionId\r\n     */\r\n    Speech_SessionId,\r\n\r\n    /**\r\n     * The spoken language to be synthesized (e.g. en-US)\r\n     * @member PropertyId.SpeechServiceConnection_SynthLanguage\r\n     */\r\n    SpeechServiceConnection_SynthLanguage,\r\n\r\n    /**\r\n     * The name of the TTS voice to be used for speech synthesis\r\n     * @member PropertyId.SpeechServiceConnection_SynthVoice\r\n     */\r\n    SpeechServiceConnection_SynthVoice,\r\n\r\n    /**\r\n     * The string to specify TTS output audio format\r\n     * @member PropertyId.SpeechServiceConnection_SynthOutputFormat\r\n     */\r\n    SpeechServiceConnection_SynthOutputFormat,\r\n\r\n    /**\r\n     * The list of comma separated languages used as possible source languages\r\n     * Added in version 1.13.0\r\n     * @member PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages\r\n     */\r\n    SpeechServiceConnection_AutoDetectSourceLanguages,\r\n\r\n    /**\r\n     * The requested Cognitive Services Speech Service response output format (simple or detailed). Under normal circumstances, you shouldn't have\r\n     * to use this property directly.\r\n     * Instead use [[SpeechConfig.outputFormat]].\r\n     * @member PropertyId.SpeechServiceResponse_RequestDetailedResultTrueFalse\r\n     */\r\n    SpeechServiceResponse_RequestDetailedResultTrueFalse,\r\n\r\n    /**\r\n     * The requested Cognitive Services Speech Service response output profanity level. Currently unused.\r\n     * @member PropertyId.SpeechServiceResponse_RequestProfanityFilterTrueFalse\r\n     */\r\n    SpeechServiceResponse_RequestProfanityFilterTrueFalse,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service response output (in JSON format). This property is available on recognition result objects only.\r\n     * @member PropertyId.SpeechServiceResponse_JsonResult\r\n     */\r\n    SpeechServiceResponse_JsonResult,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service error details (in JSON format). Under normal circumstances, you shouldn't have to\r\n     * use this property directly. Instead use [[CancellationDetails.errorDetails]].\r\n     * @member PropertyId.SpeechServiceResponse_JsonErrorDetails\r\n     */\r\n    SpeechServiceResponse_JsonErrorDetails,\r\n\r\n    /**\r\n     * The cancellation reason. Currently unused.\r\n     * @member PropertyId.CancellationDetails_Reason\r\n     */\r\n    CancellationDetails_Reason,\r\n\r\n    /**\r\n     * The cancellation text. Currently unused.\r\n     * @member PropertyId.CancellationDetails_ReasonText\r\n     */\r\n    CancellationDetails_ReasonText,\r\n\r\n    /**\r\n     * The Cancellation detailed text. Currently unused.\r\n     * @member PropertyId.CancellationDetails_ReasonDetailedText\r\n     */\r\n    CancellationDetails_ReasonDetailedText,\r\n\r\n    /**\r\n     * The Language Understanding Service response output (in JSON format). Available via [[IntentRecognitionResult]]\r\n     * @member PropertyId.LanguageUnderstandingServiceResponse_JsonResult\r\n     */\r\n    LanguageUnderstandingServiceResponse_JsonResult,\r\n\r\n    /**\r\n     * The URL string built from speech configuration.\r\n     * This property is intended to be read-only. The SDK is using it internally.\r\n     * NOTE: Added in version 1.7.0.\r\n     */\r\n    SpeechServiceConnection_Url,\r\n\r\n    /**\r\n     * The initial silence timeout value (in milliseconds) used by the service.\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceConnection_InitialSilenceTimeoutMs,\r\n\r\n    /**\r\n     * The end silence timeout value (in milliseconds) used by the service.\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceConnection_EndSilenceTimeoutMs,\r\n\r\n    /**\r\n     * A boolean value specifying whether audio logging is enabled in the service or not.\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceConnection_EnableAudioLogging,\r\n\r\n    /**\r\n     * The requested Cognitive Services Speech Service response output profanity setting.\r\n     * Allowed values are \"masked\", \"removed\", and \"raw\".\r\n     * Added in version 1.7.0.\r\n     */\r\n    SpeechServiceResponse_ProfanityOption,\r\n\r\n    /**\r\n     * A string value specifying which post processing option should be used by service.\r\n     * Allowed values are \"TrueText\".\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceResponse_PostProcessingOption,\r\n\r\n    /**\r\n     *  A boolean value specifying whether to include word-level timestamps in the response result.\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceResponse_RequestWordLevelTimestamps,\r\n\r\n    /**\r\n     * The number of times a word has to be in partial results to be returned.\r\n     * Added in version 1.7.0\r\n     */\r\n    SpeechServiceResponse_StablePartialResultThreshold,\r\n\r\n    /**\r\n     * A string value specifying the output format option in the response result. Internal use only.\r\n     * Added in version 1.7.0.\r\n     */\r\n    SpeechServiceResponse_OutputFormatOption,\r\n\r\n    /**\r\n     * A boolean value to request for stabilizing translation partial results by omitting words in the end.\r\n     * Added in version 1.7.0.\r\n     */\r\n    SpeechServiceResponse_TranslationRequestStablePartialResult,\r\n\r\n    /**\r\n     * Identifier used to connect to the backend service.\r\n     * @member PropertyId.Conversation_ApplicationId\r\n     */\r\n    Conversation_ApplicationId,\r\n\r\n    /**\r\n     * Type of dialog backend to connect to.\r\n     * @member PropertyId.Conversation_DialogType\r\n     */\r\n    Conversation_DialogType,\r\n\r\n    /**\r\n     * Silence timeout for listening\r\n     * @member PropertyId.Conversation_Initial_Silence_Timeout\r\n     */\r\n    Conversation_Initial_Silence_Timeout,\r\n\r\n    /**\r\n     * From Id to add to speech recognition activities.\r\n     * @member PropertyId.Conversation_From_Id\r\n     */\r\n    Conversation_From_Id,\r\n\r\n    /**\r\n     * ConversationId for the session.\r\n     * @member PropertyId.Conversation_Conversation_Id\r\n     */\r\n    Conversation_Conversation_Id,\r\n\r\n    /**\r\n     * Comma separated list of custom voice deployment ids.\r\n     * @member PropertyId.Conversation_Custom_Voice_Deployment_Ids\r\n     */\r\n    Conversation_Custom_Voice_Deployment_Ids,\r\n\r\n    /**\r\n     * Speech activity template, stamp properties from the template on the activity generated by the service for speech.\r\n     * @member PropertyId.Conversation_Speech_Activity_Template\r\n     * Added in version 1.10.0.\r\n     */\r\n    Conversation_Speech_Activity_Template,\r\n\r\n    /**\r\n     * Enables or disables the receipt of turn status messages as obtained on the turnStatusReceived event.\r\n     * @member PropertyId.Conversation_Request_Bot_Status_Messages\r\n     * Added in version 1.15.0.\r\n     */\r\n    Conversation_Request_Bot_Status_Messages,\r\n\r\n    /**\r\n     * Specifies the connection ID to be provided in the Agent configuration message, e.g. a Direct Line token for\r\n     * channel authentication.\r\n     * Added in version 1.15.1.\r\n     */\r\n    Conversation_Agent_Connection_Id,\r\n\r\n    /**\r\n     * The Cognitive Services Speech Service host (url). Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Instead, use [[SpeechConfig.fromHost]].\r\n     */\r\n    SpeechServiceConnection_Host,\r\n\r\n    /**\r\n     * Set the host for service calls to the Conversation Translator REST management and websocket calls.\r\n     */\r\n    ConversationTranslator_Host,\r\n\r\n    /**\r\n     * Optionally set the the host's display name.\r\n     * Used when joining a conversation.\r\n     */\r\n    ConversationTranslator_Name,\r\n\r\n    /**\r\n     * Optionally set a value for the X-CorrelationId request header.\r\n     * Used for troubleshooting errors in the server logs. It should be a valid guid.\r\n     */\r\n    ConversationTranslator_CorrelationId,\r\n\r\n    /**\r\n     * Set the conversation token to be sent to the speech service. This enables the\r\n     * service to service call from the speech service to the Conversation Translator service for relaying\r\n     * recognitions. For internal use.\r\n     */\r\n    ConversationTranslator_Token,\r\n\r\n    /**\r\n     * The reference text of the audio for pronunciation evaluation.\r\n     * For this and the following pronunciation assessment parameters, see\r\n     * https://docs.microsoft.com/azure/cognitive-services/speech-service/rest-speech-to-text#pronunciation-assessment-parameters for details.\r\n     * Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_ReferenceText,\r\n\r\n    /**\r\n     * The point system for pronunciation score calibration (FivePoint or HundredMark).\r\n     * Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_GradingSystem,\r\n\r\n    /**\r\n     * The pronunciation evaluation granularity (Phoneme, Word, or FullText).\r\n     * Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_Granularity,\r\n\r\n    /**\r\n     * Defines if enable miscue calculation.\r\n     * With this enabled, the pronounced words will be compared to the reference text,\r\n     * and will be marked with omission/insertion based on the comparison. The default setting is False.\r\n     * Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_EnableMiscue,\r\n\r\n    /**\r\n     * The json string of pronunciation assessment parameters\r\n     * Under normal circumstances, you shouldn't have to use this property directly.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_Json,\r\n\r\n    /**\r\n     * Pronunciation assessment parameters.\r\n     * This property is intended to be read-only. The SDK is using it internally.\r\n     * Added in version 1.15.0\r\n     */\r\n    PronunciationAssessment_Params\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CognitiveSubscriptionKeyAuthentication,\r\n    CognitiveTokenAuthentication,\r\n    Context,\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    OS,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    Deferred,\r\n    marshalPromiseToCallbacks\r\n} from \"../common/Exports\";\r\nimport {\r\n    Contracts\r\n} from \"./Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    Connection,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    RecognitionEventArgs,\r\n    SessionEventArgs,\r\n    SpeechRecognitionResult,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Defines the base class Recognizer which mainly contains common event handlers.\r\n * @class Recognizer\r\n */\r\nexport abstract class Recognizer {\r\n    private privDisposed: boolean;\r\n    protected audioConfig: AudioConfig;\r\n    protected privReco: ServiceRecognizerBase;\r\n    protected privProperties: PropertyCollection;\r\n    private privConnectionFactory: IConnectionFactory;\r\n\r\n    /**\r\n     * Creates and initializes an instance of a Recognizer\r\n     * @constructor\r\n     * @param {AudioConfig} audioInput - An optional audio input stream associated with the recognizer\r\n     */\r\n    protected constructor(audioConfig: AudioConfig, properties: PropertyCollection, connectionFactory: IConnectionFactory) {\r\n        this.audioConfig = (audioConfig !== undefined) ? audioConfig : AudioConfig.fromDefaultMicrophoneInput();\r\n        this.privDisposed = false;\r\n        this.privProperties = properties.clone();\r\n        this.privConnectionFactory = connectionFactory;\r\n        this.implCommonRecognizerSetup();\r\n    }\r\n\r\n    /**\r\n     * Defines event handler for session started events.\r\n     * @member Recognizer.prototype.sessionStarted\r\n     * @function\r\n     * @public\r\n     */\r\n    public sessionStarted: (sender: Recognizer, event: SessionEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for session stopped events.\r\n     * @member Recognizer.prototype.sessionStopped\r\n     * @function\r\n     * @public\r\n     */\r\n    public sessionStopped: (sender: Recognizer, event: SessionEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for speech started events.\r\n     * @member Recognizer.prototype.speechStartDetected\r\n     * @function\r\n     * @public\r\n     */\r\n    public speechStartDetected: (sender: Recognizer, event: RecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for speech stopped events.\r\n     * @member Recognizer.prototype.speechEndDetected\r\n     * @function\r\n     * @public\r\n     */\r\n    public speechEndDetected: (sender: Recognizer, event: RecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member Recognizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, errorCb?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposed);\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, errorCb);\r\n    }\r\n\r\n    /**\r\n     * @Internal\r\n     * Internal data member to support fromRecognizer* pattern methods on other classes.\r\n     * Do not use externally, object returned will change without warning or notice.\r\n     */\r\n    public get internalData(): object {\r\n        return this.privReco;\r\n    }\r\n\r\n    /**\r\n     * This method performs cleanup of resources.\r\n     * The Boolean parameter disposing indicates whether the method is called\r\n     * from Dispose (if disposing is true) or from the finalizer (if disposing is false).\r\n     * Derived classes should override this method to dispose resource if needed.\r\n     * @member Recognizer.prototype.dispose\r\n     * @function\r\n     * @public\r\n     * @param {boolean} disposing - Flag to request disposal.\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposed) {\r\n            return;\r\n        }\r\n\r\n        this.privDisposed = true;\r\n\r\n        if (disposing) {\r\n            if (this.privReco) {\r\n                await this.privReco.audioSource.turnOff();\r\n                await this.privReco.dispose();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This method returns the current state of the telemetry setting.\r\n     * @member Recognizer.prototype.telemetryEnabled\r\n     * @function\r\n     * @public\r\n     * @returns true if the telemetry is enabled, false otherwise.\r\n     */\r\n    public static get telemetryEnabled(): boolean {\r\n        return ServiceRecognizerBase.telemetryDataEnabled;\r\n    }\r\n\r\n    /**\r\n     * This method globally enables or disables telemetry.\r\n     * @member Recognizer.prototype.enableTelemetry\r\n     * @function\r\n     * @public\r\n     * @param enabled - Global setting for telemetry collection.\r\n     * If set to true, telemetry information like microphone errors,\r\n     * recognition errors are collected and sent to Microsoft.\r\n     * If set to false, no telemetry is sent to Microsoft.\r\n     */\r\n    /* tslint:disable:member-ordering */\r\n    public static enableTelemetry(enabled: boolean): void {\r\n        ServiceRecognizerBase.telemetryDataEnabled = enabled;\r\n    }\r\n\r\n    //\r\n    // ################################################################################################################\r\n    // IMPLEMENTATION.\r\n    // Move to independent class\r\n    // ################################################################################################################\r\n    //\r\n    protected abstract createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig;\r\n\r\n    // Creates the correct service recognizer for the type\r\n    protected abstract createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase;\r\n\r\n    // Does the generic recognizer setup that is common across all recognizer types.\r\n    protected implCommonRecognizerSetup(): void {\r\n\r\n        let osPlatform = (typeof window !== \"undefined\") ? \"Browser\" : \"Node\";\r\n        let osName = \"unknown\";\r\n        let osVersion = \"unknown\";\r\n\r\n        if (typeof navigator !== \"undefined\") {\r\n            osPlatform = osPlatform + \"/\" + navigator.platform;\r\n            osName = navigator.userAgent;\r\n            osVersion = navigator.appVersion;\r\n        }\r\n\r\n        const recognizerConfig = this.createRecognizerConfig(\r\n            new SpeechServiceConfig(\r\n                new Context(new OS(osPlatform, osName, osVersion))));\r\n\r\n        this.privReco = this.createServiceRecognizer(\r\n            Recognizer.getAuthFromProperties(this.privProperties),\r\n            this.privConnectionFactory,\r\n            this.audioConfig,\r\n            recognizerConfig);\r\n    }\r\n\r\n    protected async recognizeOnceAsyncImpl(recognitionMode: RecognitionMode): Promise<SpeechRecognitionResult> {\r\n        Contracts.throwIfDisposed(this.privDisposed);\r\n        const ret: Deferred<SpeechRecognitionResult> = new Deferred<SpeechRecognitionResult>();\r\n\r\n        await this.implRecognizerStop();\r\n        await this.privReco.recognize(recognitionMode, ret.resolve, ret.reject);\r\n        const result: SpeechRecognitionResult = await ret.promise;\r\n        await this.implRecognizerStop();\r\n\r\n        return result;\r\n\r\n    }\r\n\r\n    protected async startContinuousRecognitionAsyncImpl(recognitionMode: RecognitionMode): Promise<void> {\r\n        Contracts.throwIfDisposed(this.privDisposed);\r\n\r\n        await this.implRecognizerStop();\r\n        await this.privReco.recognize(recognitionMode, undefined, undefined);\r\n    }\r\n\r\n    protected async stopContinuousRecognitionAsyncImpl(): Promise<void> {\r\n        Contracts.throwIfDisposed(this.privDisposed);\r\n        await this.implRecognizerStop();\r\n    }\r\n\r\n    protected async implRecognizerStop(): Promise<void> {\r\n        if (this.privReco) {\r\n            await this.privReco.stopRecognizing();\r\n        }\r\n        return;\r\n    }\r\n\r\n    protected static getAuthFromProperties(properties: PropertyCollection): IAuthentication {\r\n        const subscriptionKey = properties.getProperty(PropertyId.SpeechServiceConnection_Key, undefined);\r\n        const authentication = (subscriptionKey && subscriptionKey !== \"\") ?\r\n            new CognitiveSubscriptionKeyAuthentication(subscriptionKey) :\r\n            new CognitiveTokenAuthentication(\r\n                (authFetchEventId: string): Promise<string> => {\r\n                    const authorizationToken = properties.getProperty(PropertyId.SpeechServiceAuthorization_Token, undefined);\r\n                    return Promise.resolve(authorizationToken);\r\n                },\r\n                (authFetchEventId: string): Promise<string> => {\r\n                    const authorizationToken = properties.getProperty(PropertyId.SpeechServiceAuthorization_Token, undefined);\r\n                    return Promise.resolve(authorizationToken);\r\n                });\r\n\r\n        return authentication;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    OutputFormatPropertyName,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechConnectionFactory,\r\n    SpeechServiceConfig,\r\n    SpeechServiceRecognizer,\r\n} from \"../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../common/Exports\";\r\nimport { AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    AutoDetectSourceLanguageConfig,\r\n    KeywordRecognitionModel,\r\n    OutputFormat,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    Recognizer,\r\n    SpeechRecognitionCanceledEventArgs,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechRecognitionResult,\r\n} from \"./Exports\";\r\nimport { SpeechConfig, SpeechConfigImpl } from \"./SpeechConfig\";\r\n\r\n/**\r\n * Performs speech recognition from microphone, file, or other audio input streams, and gets transcribed text as result.\r\n * @class SpeechRecognizer\r\n */\r\nexport class SpeechRecognizer extends Recognizer {\r\n    private privDisposedRecognizer: boolean;\r\n\r\n    /**\r\n     * SpeechRecognizer constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - an set of initial properties for this recognizer\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the recognizer\r\n     */\r\n    public constructor(speechConfig: SpeechConfig, audioConfig?: AudioConfig) {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        Contracts.throwIfNull(speechConfigImpl, \"speechConfig\");\r\n\r\n        Contracts.throwIfNullOrWhitespace(\r\n            speechConfigImpl.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage),\r\n            PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n\r\n        super(audioConfig, speechConfigImpl.properties, new SpeechConnectionFactory());\r\n        this.privDisposedRecognizer = false;\r\n    }\r\n\r\n    /**\r\n     * SpeechRecognizer constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - an set of initial properties for this recognizer\r\n     * @param {AutoDetectSourceLanguageConfig} autoDetectSourceLanguageConfig - An source language detection configuration associated with the recognizer\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the recognizer\r\n     */\r\n    public static FromConfig(speechConfig: SpeechConfig, autoDetectSourceLanguageConfig: AutoDetectSourceLanguageConfig, audioConfig?: AudioConfig): SpeechRecognizer {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        autoDetectSourceLanguageConfig.properties.mergeTo(speechConfigImpl.properties);\r\n        const recognizer = new SpeechRecognizer(speechConfig, audioConfig);\r\n        return recognizer;\r\n    }\r\n\r\n    /**\r\n     * The event recognizing signals that an intermediate recognition result is received.\r\n     * @member SpeechRecognizer.prototype.recognizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognizing: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event recognized signals that a final recognition result is received.\r\n     * @member SpeechRecognizer.prototype.recognized\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognized: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event canceled signals that an error occurred during recognition.\r\n     * @member SpeechRecognizer.prototype.canceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public canceled: (sender: Recognizer, event: SpeechRecognitionCanceledEventArgs) => void;\r\n\r\n    /**\r\n     * Gets the endpoint id of a customized speech model that is used for speech recognition.\r\n     * @member SpeechRecognizer.prototype.endpointId\r\n     * @function\r\n     * @public\r\n     * @returns {string} the endpoint id of a customized speech model that is used for speech recognition.\r\n     */\r\n    public get endpointId(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_EndpointId, \"00000000-0000-0000-0000-000000000000\");\r\n    }\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member SpeechRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member SpeechRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * Gets the spoken language of recognition.\r\n     * @member SpeechRecognizer.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @returns {string} The spoken language of recognition.\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    /**\r\n     * Gets the output format of recognition.\r\n     * @member SpeechRecognizer.prototype.outputFormat\r\n     * @function\r\n     * @public\r\n     * @returns {OutputFormat} The output format of recognition.\r\n     */\r\n    public get outputFormat(): OutputFormat {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n\r\n        if (this.properties.getProperty(OutputFormatPropertyName, OutputFormat[OutputFormat.Simple]) === OutputFormat[OutputFormat.Simple]) {\r\n            return OutputFormat.Simple;\r\n        } else {\r\n            return OutputFormat.Detailed;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this SpeechRecognizer.\r\n     * @member SpeechRecognizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this SpeechRecognizer.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Starts speech recognition, and stops after the first utterance is recognized.\r\n     * The task returns the recognition text as result.\r\n     * Note: RecognizeOnceAsync() returns when the first utterance has been recognized,\r\n     *       so it is suitable only for single shot recognition\r\n     *       like command or query. For long-running recognition, use StartContinuousRecognitionAsync() instead.\r\n     * @member SpeechRecognizer.prototype.recognizeOnceAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the SpeechRecognitionResult.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public recognizeOnceAsync(cb?: (e: SpeechRecognitionResult) => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.recognizeOnceAsyncImpl(RecognitionMode.Interactive), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts speech recognition, until stopContinuousRecognitionAsync() is called.\r\n     * User must subscribe to events to receive recognition results.\r\n     * @member SpeechRecognizer.prototype.startContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.startContinuousRecognitionAsyncImpl(RecognitionMode.Conversation), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Stops continuous speech recognition.\r\n     * @member SpeechRecognizer.prototype.stopContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has stopped.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.stopContinuousRecognitionAsyncImpl(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts speech recognition with keyword spotting, until\r\n     * stopKeywordRecognitionAsync() is called.\r\n     * User must subscribe to events to receive recognition results.\r\n     * Note: Key word spotting functionality is only available on the\r\n     *      Speech Devices SDK. This functionality is currently not included in the SDK itself.\r\n     * @member SpeechRecognizer.prototype.startKeywordRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param {KeywordRecognitionModel} model The keyword recognition model that\r\n     *        specifies the keyword to be recognized.\r\n     * @param cb - Callback invoked once the recognition has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startKeywordRecognitionAsync(model: KeywordRecognitionModel, cb?: () => void, err?: (e: string) => void): void {\r\n        Contracts.throwIfNull(model, \"model\");\r\n\r\n        if (!!err) {\r\n            err(\"Not yet implemented.\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Stops continuous speech recognition.\r\n     * Note: Key word spotting functionality is only available on the\r\n     *       Speech Devices SDK. This functionality is currently not included in the SDK itself.\r\n     * @member SpeechRecognizer.prototype.stopKeywordRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has stopped.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopKeywordRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        if (!!cb) {\r\n            cb();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * closes all external resources held by an instance of this class.\r\n     * @member SpeechRecognizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, errorCb?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, errorCb);\r\n    }\r\n\r\n    /**\r\n     * Disposes any resources held by the object.\r\n     * @member SpeechRecognizer.prototype.dispose\r\n     * @function\r\n     * @public\r\n     * @param {boolean} disposing - true if disposing the object.\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposedRecognizer) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            this.privDisposedRecognizer = true;\r\n            await this.implRecognizerStop();\r\n        }\r\n\r\n        await super.dispose(disposing);\r\n    }\r\n\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(\r\n            speechConfig,\r\n            this.properties);\r\n    }\r\n\r\n    protected createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n        const configImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n        return new SpeechServiceRecognizer(authentication, connectionFactory, configImpl, recognizerConfig, this);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    AddedLmIntent,\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    IntentConnectionFactory,\r\n    IntentServiceRecognizer,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig,\r\n} from \"../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../common/Exports\";\r\nimport { AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    IntentRecognitionCanceledEventArgs,\r\n    IntentRecognitionEventArgs,\r\n    IntentRecognitionResult,\r\n    KeywordRecognitionModel,\r\n    LanguageUnderstandingModel,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    Recognizer,\r\n    SpeechConfig,\r\n} from \"./Exports\";\r\nimport { LanguageUnderstandingModelImpl } from \"./LanguageUnderstandingModel\";\r\nimport { SpeechConfigImpl } from \"./SpeechConfig\";\r\n\r\n/**\r\n * Intent recognizer.\r\n * @class\r\n */\r\nexport class IntentRecognizer extends Recognizer {\r\n    private privDisposedIntentRecognizer: boolean;\r\n    private privAddedIntents: string[][];\r\n    private privAddedLmIntents: { [id: string]: AddedLmIntent; };\r\n    private privUmbrellaIntent: AddedLmIntent;\r\n\r\n    /**\r\n     * Initializes an instance of the IntentRecognizer.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - The set of configuration properties.\r\n     * @param {AudioConfig} audioConfig - An optional audio input config associated with the recognizer\r\n     */\r\n    public constructor(speechConfig: SpeechConfig, audioConfig?: AudioConfig) {\r\n        Contracts.throwIfNullOrUndefined(speechConfig, \"speechConfig\");\r\n        const configImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        Contracts.throwIfNullOrUndefined(configImpl, \"speechConfig\");\r\n\r\n        super(audioConfig, configImpl.properties, new IntentConnectionFactory());\r\n        this.privAddedIntents = [];\r\n        this.privAddedLmIntents = {};\r\n\r\n        this.privDisposedIntentRecognizer = false;\r\n        this.privProperties = configImpl.properties;\r\n\r\n        Contracts.throwIfNullOrWhitespace(this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage), PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n    }\r\n\r\n    /**\r\n     * The event recognizing signals that an intermediate recognition result is received.\r\n     * @member IntentRecognizer.prototype.recognizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognizing: (sender: IntentRecognizer, event: IntentRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event recognized signals that a final recognition result is received.\r\n     * @member IntentRecognizer.prototype.recognized\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognized: (sender: IntentRecognizer, event: IntentRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event canceled signals that an error occurred during recognition.\r\n     * @member IntentRecognizer.prototype.canceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public canceled: (sender: IntentRecognizer, event: IntentRecognitionCanceledEventArgs) => void;\r\n\r\n    /**\r\n     * Gets the spoken language of recognition.\r\n     * @member IntentRecognizer.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @returns {string} the spoken language of recognition.\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedIntentRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member IntentRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * Note: Please use a token derived from your LanguageUnderstanding subscription key for the Intent recognizer.\r\n     * @member IntentRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} value - Authorization token.\r\n     */\r\n    public set authorizationToken(value: string) {\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, value);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this IntentRecognizer.\r\n     * @member IntentRecognizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their\r\n     *          values defined for this IntentRecognizer.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Starts intent recognition, and stops after the first utterance is recognized.\r\n     * The task returns the recognition text and intent as result.\r\n     * Note: RecognizeOnceAsync() returns when the first utterance has been recognized,\r\n     *       so it is suitable only for single shot recognition like command or query.\r\n     *       For long-running recognition, use StartContinuousRecognitionAsync() instead.\r\n     * @member IntentRecognizer.prototype.recognizeOnceAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the recognition has finished with an IntentRecognitionResult.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public recognizeOnceAsync(cb?: (e: IntentRecognitionResult) => void, err?: (e: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedIntentRecognizer);\r\n\r\n        if (Object.keys(this.privAddedLmIntents).length !== 0 || undefined !== this.privUmbrellaIntent) {\r\n            const context: IIntentContext = this.buildSpeechContext();\r\n\r\n            this.privReco.speechContext.setSection(\"intent\", context.Intent);\r\n            this.privReco.dynamicGrammar.addReferenceGrammar(context.ReferenceGrammars);\r\n\r\n            const intentReco: IntentServiceRecognizer = this.privReco as IntentServiceRecognizer;\r\n            intentReco.setIntents(this.privAddedLmIntents, this.privUmbrellaIntent);\r\n        }\r\n\r\n        marshalPromiseToCallbacks(this.recognizeOnceAsyncImpl(RecognitionMode.Interactive), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts speech recognition, until stopContinuousRecognitionAsync() is called.\r\n     * User must subscribe to events to receive recognition results.\r\n     * @member IntentRecognizer.prototype.startContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        if (Object.keys(this.privAddedLmIntents).length !== 0 || undefined !== this.privUmbrellaIntent) {\r\n            const context: IIntentContext = this.buildSpeechContext();\r\n\r\n            this.privReco.speechContext.setSection(\"intent\", context.Intent);\r\n            this.privReco.dynamicGrammar.addReferenceGrammar(context.ReferenceGrammars);\r\n\r\n            const intentReco: IntentServiceRecognizer = this.privReco as IntentServiceRecognizer;\r\n            intentReco.setIntents(this.privAddedLmIntents, this.privUmbrellaIntent);\r\n        }\r\n\r\n        marshalPromiseToCallbacks(this.startContinuousRecognitionAsyncImpl(RecognitionMode.Conversation), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Stops continuous intent recognition.\r\n     * @member IntentRecognizer.prototype.stopContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has stopped.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.stopContinuousRecognitionAsyncImpl(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts speech recognition with keyword spotting, until stopKeywordRecognitionAsync() is called.\r\n     * User must subscribe to events to receive recognition results.\r\n     * Note: Key word spotting functionality is only available on the Speech Devices SDK.\r\n     *       This functionality is currently not included in the SDK itself.\r\n     * @member IntentRecognizer.prototype.startKeywordRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param {KeywordRecognitionModel} model - The keyword recognition model that specifies the keyword to be recognized.\r\n     * @param cb - Callback invoked once the recognition has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startKeywordRecognitionAsync(model: KeywordRecognitionModel, cb?: () => void, err?: (e: string) => void): void {\r\n        Contracts.throwIfNull(model, \"model\");\r\n\r\n        if (!!err) {\r\n            err(\"Not yet implemented.\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Stops continuous speech recognition.\r\n     * Note: Key word spotting functionality is only available on the Speech Devices SDK.\r\n     *       This functionality is currently not included in the SDK itself.\r\n     * @member IntentRecognizer.prototype.stopKeywordRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the recognition has stopped.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopKeywordRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        if (!!cb) {\r\n            cb();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Adds a phrase that should be recognized as intent.\r\n     * @member IntentRecognizer.prototype.addIntent\r\n     * @function\r\n     * @public\r\n     * @param {string} intentId - A String that represents the identifier of the intent to be recognized.\r\n     * @param {string} phrase - A String that specifies the phrase representing the intent.\r\n     */\r\n    public addIntent(simplePhrase: string, intentId?: string): void {\r\n        Contracts.throwIfDisposed(this.privDisposedIntentRecognizer);\r\n        Contracts.throwIfNullOrWhitespace(intentId, \"intentId\");\r\n        Contracts.throwIfNullOrWhitespace(simplePhrase, \"simplePhrase\");\r\n\r\n        this.privAddedIntents.push([intentId, simplePhrase]);\r\n    }\r\n\r\n    /**\r\n     * Adds an intent from Language Understanding service for recognition.\r\n     * @member IntentRecognizer.prototype.addIntentWithLanguageModel\r\n     * @function\r\n     * @public\r\n     * @param {string} intentId - A String that represents the identifier of the intent\r\n     *        to be recognized. Ignored if intentName is empty.\r\n     * @param {string} model - The intent model from Language Understanding service.\r\n     * @param {string} intentName - The intent name defined in the intent model. If it\r\n     *        is empty, all intent names defined in the model will be added.\r\n     */\r\n    public addIntentWithLanguageModel(intentId: string, model: LanguageUnderstandingModel, intentName?: string): void {\r\n        Contracts.throwIfDisposed(this.privDisposedIntentRecognizer);\r\n        Contracts.throwIfNullOrWhitespace(intentId, \"intentId\");\r\n        Contracts.throwIfNull(model, \"model\");\r\n\r\n        const modelImpl: LanguageUnderstandingModelImpl = model as LanguageUnderstandingModelImpl;\r\n        Contracts.throwIfNullOrWhitespace(modelImpl.appId, \"model.appId\");\r\n\r\n        this.privAddedLmIntents[intentId] = new AddedLmIntent(modelImpl, intentName);\r\n    }\r\n\r\n    /**\r\n     * @summary Adds all intents from the specified Language Understanding Model.\r\n     * @member IntentRecognizer.prototype.addAllIntents\r\n     * @function\r\n     * @public\r\n     * @function\r\n     * @public\r\n     * @param {LanguageUnderstandingModel} model - The language understanding model containing the intents.\r\n     * @param {string} intentId - A custom id String to be returned in the IntentRecognitionResult's getIntentId() method.\r\n     */\r\n    public addAllIntents(model: LanguageUnderstandingModel, intentId?: string): void {\r\n        Contracts.throwIfNull(model, \"model\");\r\n\r\n        const modelImpl: LanguageUnderstandingModelImpl = model as LanguageUnderstandingModelImpl;\r\n        Contracts.throwIfNullOrWhitespace(modelImpl.appId, \"model.appId\");\r\n\r\n        this.privUmbrellaIntent = new AddedLmIntent(modelImpl, intentId);\r\n    }\r\n\r\n    /**\r\n     * closes all external resources held by an instance of this class.\r\n     * @member IntentRecognizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, errorCb?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedIntentRecognizer);\r\n\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, errorCb);\r\n    }\r\n\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(speechConfig, this.properties);\r\n    }\r\n\r\n    protected createServiceRecognizer(authentication: IAuthentication, connectionFactory: IConnectionFactory, audioConfig: AudioConfig, recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n        const audioImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n        return new IntentServiceRecognizer(authentication, connectionFactory, audioImpl, recognizerConfig, this);\r\n    }\r\n\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposedIntentRecognizer) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            this.privDisposedIntentRecognizer = true;\r\n            await super.dispose(disposing);\r\n        }\r\n    }\r\n\r\n    private buildSpeechContext(): IIntentContext {\r\n        let appId: string;\r\n        let region: string;\r\n        let subscriptionKey: string;\r\n        const refGrammers: string[] = [];\r\n\r\n        if (undefined !== this.privUmbrellaIntent) {\r\n            appId = this.privUmbrellaIntent.modelImpl.appId;\r\n            region = this.privUmbrellaIntent.modelImpl.region;\r\n            subscriptionKey = this.privUmbrellaIntent.modelImpl.subscriptionKey;\r\n        }\r\n\r\n        // Build the reference grammer array.\r\n        for (const intentId of Object.keys(this.privAddedLmIntents)) {\r\n            const addedLmIntent: AddedLmIntent = this.privAddedLmIntents[intentId];\r\n\r\n            // validate all the same model, region, and key...\r\n            if (appId === undefined) {\r\n                appId = addedLmIntent.modelImpl.appId;\r\n            } else {\r\n                if (appId !== addedLmIntent.modelImpl.appId) {\r\n                    throw new Error(\"Intents must all be from the same LUIS model\");\r\n                }\r\n            }\r\n\r\n            if (region === undefined) {\r\n                region = addedLmIntent.modelImpl.region;\r\n            } else {\r\n                if (region !== addedLmIntent.modelImpl.region) {\r\n                    throw new Error(\"Intents must all be from the same LUIS model in a single region\");\r\n                }\r\n            }\r\n\r\n            if (subscriptionKey === undefined) {\r\n                subscriptionKey = addedLmIntent.modelImpl.subscriptionKey;\r\n            } else {\r\n                if (subscriptionKey !== addedLmIntent.modelImpl.subscriptionKey) {\r\n                    throw new Error(\"Intents must all use the same subscription key\");\r\n                }\r\n            }\r\n\r\n            const grammer: string = \"luis/\" + appId + \"-PRODUCTION#\" + intentId;\r\n            refGrammers.push(grammer);\r\n        }\r\n\r\n        return {\r\n            Intent: {\r\n                id: appId,\r\n                key: (subscriptionKey === undefined) ? this.privProperties.getProperty(PropertyId[PropertyId.SpeechServiceConnection_Key]) : subscriptionKey,\r\n                provider: \"LUIS\",\r\n            },\r\n            ReferenceGrammars: (undefined === this.privUmbrellaIntent) ? refGrammers : [\"luis/\" + appId + \"-PRODUCTION\"],\r\n        };\r\n    }\r\n}\r\n\r\ninterface IIntentContext {\r\n    Intent: {\r\n        id: string,\r\n        key: string,\r\n        provider: string,\r\n    };\r\n    ReferenceGrammars: string[];\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Output format\r\n * @class VoiceProfileType\r\n */\r\nexport enum VoiceProfileType {\r\n\r\n    /**\r\n     * Text independent speaker identification\r\n     * @member VoiceProfileType.TextIndependentIdentification\r\n     */\r\n    TextIndependentIdentification,\r\n\r\n    /**\r\n     * Text dependent speaker verification\r\n     * @member VoiceProfileType.TextDependentVerification\r\n     */\r\n    TextDependentVerification,\r\n\r\n    /**\r\n     * Text independent speaker verification\r\n     * @member VoiceProfileType.TextIndependentVerification\r\n     */\r\n    TextIndependentVerification,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig,\r\n    TranslationConnectionFactory,\r\n    TranslationServiceRecognizer,\r\n} from \"../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../common/Exports\";\r\nimport { AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    Recognizer,\r\n    TranslationRecognitionCanceledEventArgs,\r\n    TranslationRecognitionEventArgs,\r\n    TranslationRecognitionResult,\r\n    TranslationSynthesisEventArgs,\r\n} from \"./Exports\";\r\nimport { SpeechTranslationConfig, SpeechTranslationConfigImpl } from \"./SpeechTranslationConfig\";\r\n\r\n/**\r\n * Translation recognizer\r\n * @class TranslationRecognizer\r\n */\r\nexport class TranslationRecognizer extends Recognizer {\r\n    private privDisposedTranslationRecognizer: boolean;\r\n\r\n    /**\r\n     * Initializes an instance of the TranslationRecognizer.\r\n     * @constructor\r\n     * @param {SpeechTranslationConfig} speechConfig - Set of properties to configure this recognizer.\r\n     * @param {AudioConfig} audioConfig - An optional audio config associated with the recognizer\r\n     */\r\n    public constructor(speechConfig: SpeechTranslationConfig, audioConfig?: AudioConfig) {\r\n        const configImpl = speechConfig as SpeechTranslationConfigImpl;\r\n        Contracts.throwIfNull(configImpl, \"speechConfig\");\r\n\r\n        super(audioConfig, configImpl.properties, new TranslationConnectionFactory());\r\n\r\n        this.privDisposedTranslationRecognizer = false;\r\n        this.privProperties = configImpl.properties.clone();\r\n\r\n        if (this.properties.getProperty(PropertyId.SpeechServiceConnection_TranslationVoice, undefined) !== undefined) {\r\n            Contracts.throwIfNullOrWhitespace(\r\n                this.properties.getProperty(PropertyId.SpeechServiceConnection_TranslationVoice),\r\n                PropertyId[PropertyId.SpeechServiceConnection_TranslationVoice]);\r\n        }\r\n\r\n        Contracts.throwIfNullOrWhitespace(\r\n            this.properties.getProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages),\r\n            PropertyId[PropertyId.SpeechServiceConnection_TranslationToLanguages]);\r\n\r\n        Contracts.throwIfNullOrWhitespace(this.properties.getProperty(\r\n            PropertyId.SpeechServiceConnection_RecoLanguage),\r\n            PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n\r\n    }\r\n\r\n    /**\r\n     * The event recognizing signals that an intermediate recognition result is received.\r\n     * @member TranslationRecognizer.prototype.recognizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognizing: (sender: TranslationRecognizer, event: TranslationRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event recognized signals that a final recognition result is received.\r\n     * @member TranslationRecognizer.prototype.recognized\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognized: (sender: TranslationRecognizer, event: TranslationRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event canceled signals that an error occurred during recognition.\r\n     * @member TranslationRecognizer.prototype.canceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public canceled: (sender: TranslationRecognizer, event: TranslationRecognitionCanceledEventArgs) => void;\r\n\r\n    /**\r\n     * The event synthesizing signals that a translation synthesis result is received.\r\n     * @member TranslationRecognizer.prototype.synthesizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public synthesizing: (sender: TranslationRecognizer, event: TranslationSynthesisEventArgs) => void;\r\n\r\n    /**\r\n     * Gets the language name that was set when the recognizer was created.\r\n     * @member TranslationRecognizer.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @returns {string} Gets the language name that was set when the recognizer was created.\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedTranslationRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    /**\r\n     * Gets target languages for translation that were set when the recognizer was created.\r\n     * The language is specified in BCP-47 format. The translation will provide translated text for each of language.\r\n     * @member TranslationRecognizer.prototype.targetLanguages\r\n     * @function\r\n     * @public\r\n     * @returns {string[]} Gets target languages for translation that were set when the recognizer was created.\r\n     */\r\n    public get targetLanguages(): string[] {\r\n        Contracts.throwIfDisposed(this.privDisposedTranslationRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages).split(\",\");\r\n    }\r\n\r\n    /**\r\n     * Gets the name of output voice.\r\n     * @member TranslationRecognizer.prototype.voiceName\r\n     * @function\r\n     * @public\r\n     * @returns {string} the name of output voice.\r\n     */\r\n    public get voiceName(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedTranslationRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_TranslationVoice, undefined);\r\n    }\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member TranslationRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member TranslationRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} value - Authorization token.\r\n     */\r\n    public set authorizationToken(value: string) {\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, value);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this TranslationRecognizer.\r\n     * @member TranslationRecognizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this TranslationRecognizer.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Starts recognition and translation, and stops after the first utterance is recognized.\r\n     * The task returns the translation text as result.\r\n     * Note: recognizeOnceAsync returns when the first utterance has been recognized, so it is suitableonly\r\n     *       for single shot recognition like command or query. For long-running recognition,\r\n     *       use startContinuousRecognitionAsync() instead.\r\n     * @member TranslationRecognizer.prototype.recognizeOnceAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the result when the translation has completed.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public recognizeOnceAsync(cb?: (e: TranslationRecognitionResult) => void, err?: (e: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedTranslationRecognizer);\r\n        marshalPromiseToCallbacks(this.recognizeOnceAsyncImpl(RecognitionMode.Conversation), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts recognition and translation, until stopContinuousRecognitionAsync() is called.\r\n     * User must subscribe to events to receive translation results.\r\n     * @member TranslationRecognizer.prototype.startContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the translation has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.startContinuousRecognitionAsyncImpl(RecognitionMode.Conversation), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Stops continuous recognition and translation.\r\n     * @member TranslationRecognizer.prototype.stopContinuousRecognitionAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the translation has stopped.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.stopContinuousRecognitionAsyncImpl(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * closes all external resources held by an instance of this class.\r\n     * @member TranslationRecognizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, errorCb?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedTranslationRecognizer);\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, errorCb);\r\n    }\r\n\r\n    /**\r\n     * handles ConnectionEstablishedEvent for conversation translation scenarios.\r\n     * @member TranslationRecognizer.prototype.onConnection\r\n     * @function\r\n     * @public\r\n     */\r\n    /* tslint:disable:no-empty */\r\n    public onConnection(): void { }\r\n\r\n    /**\r\n     * handles disconnection events for conversation translation scenarios.\r\n     * @member TranslationRecognizer.prototype.onDisconnection\r\n     * @function\r\n     * @public\r\n     */\r\n    /* tslint:disable:no-empty */\r\n    public async onDisconnection(): Promise<void> { }\r\n\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposedTranslationRecognizer) {\r\n            return;\r\n        }\r\n\r\n        this.privDisposedTranslationRecognizer = true;\r\n\r\n        if (disposing) {\r\n            await this.implRecognizerStop();\r\n            await super.dispose(disposing);\r\n        }\r\n    }\r\n\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(speechConfig, this.properties);\r\n    }\r\n\r\n    protected createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n\r\n        const configImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n\r\n        return new TranslationServiceRecognizer(authentication, connectionFactory, configImpl, recognizerConfig, this);\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection } from \"./Exports\";\r\n\r\n/**\r\n * Represents collection of parameters and their values.\r\n * @class Translation\r\n */\r\nexport class Translations {\r\n    // Use an PropertyCollection internally, just wrapping it to hide the | enum syntax it has.\r\n    private privMap: PropertyCollection = new PropertyCollection();\r\n\r\n    /**\r\n     * Returns the parameter value in type String. The parameter must have the same type as String.\r\n     * Currently only String, int and bool are allowed.\r\n     * If the name is not available, the specified defaultValue is returned.\r\n     * @member Translation.prototype.get\r\n     * @function\r\n     * @public\r\n     * @param {string} key - The parameter name.\r\n     * @param {string} def - The default value which is returned if the parameter is not available in the collection.\r\n     * @returns {string} value of the parameter.\r\n     */\r\n    public get(key: string, def?: string): string {\r\n        return this.privMap.getProperty(key, def);\r\n    }\r\n\r\n    /**\r\n     * Sets the String value of the parameter specified by name.\r\n     * @member Translation.prototype.set\r\n     * @function\r\n     * @public\r\n     * @param {string} key - The parameter name.\r\n     * @param {string} value - The value of the parameter.\r\n     */\r\n    public set(key: string, value: string): void {\r\n        this.privMap.setProperty(key, value);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the possible reasons a recognition result might not be recognized.\r\n * @class NoMatchReason\r\n */\r\nexport enum NoMatchReason {\r\n\r\n    /**\r\n     * Indicates that speech was detected, but not recognized.\r\n     * @member NoMatchReason.NotRecognized\r\n     */\r\n    NotRecognized,\r\n\r\n    /**\r\n     * Indicates that the start of the audio stream contained only silence,\r\n     * and the service timed out waiting for speech.\r\n     * @member NoMatchReason.InitialSilenceTimeout\r\n     */\r\n    InitialSilenceTimeout,\r\n\r\n    /**\r\n     * Indicates that the start of the audio stream contained only noise,\r\n     * and the service timed out waiting for speech.\r\n     * @member NoMatchReason.InitialBabbleTimeout\r\n     */\r\n    InitialBabbleTimeout,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognitionStatus, SimpleSpeechPhrase } from \"../../src/common.speech/Exports\";\r\nimport { IntentRecognitionResult, NoMatchReason, SpeechRecognitionResult, TranslationRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Contains detailed information for NoMatch recognition results.\r\n * @class NoMatchDetails\r\n */\r\nexport class NoMatchDetails {\r\n    private privReason: NoMatchReason;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {NoMatchReason} reason - The no-match reason.\r\n     */\r\n    private constructor(reason: NoMatchReason) {\r\n        this.privReason = reason;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of NoMatchDetails object for the NoMatch SpeechRecognitionResults.\r\n     * @member NoMatchDetails.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {SpeechRecognitionResult | IntentRecognitionResult | TranslationRecognitionResult}\r\n     *        result - The recognition result that was not recognized.\r\n     * @returns {NoMatchDetails} The no match details object being created.\r\n     */\r\n    public static fromResult(result: SpeechRecognitionResult | IntentRecognitionResult | TranslationRecognitionResult): NoMatchDetails {\r\n        const simpleSpeech: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(result.json);\r\n\r\n        let reason: NoMatchReason = NoMatchReason.NotRecognized;\r\n\r\n        switch (simpleSpeech.RecognitionStatus) {\r\n            case RecognitionStatus.BabbleTimeout:\r\n                reason = NoMatchReason.InitialBabbleTimeout;\r\n                break;\r\n            case RecognitionStatus.InitialSilenceTimeout:\r\n                reason = NoMatchReason.InitialSilenceTimeout;\r\n                break;\r\n            default:\r\n                reason = NoMatchReason.NotRecognized;\r\n                break;\r\n        }\r\n\r\n        return new NoMatchDetails(reason);\r\n    }\r\n\r\n    /**\r\n     * The reason the recognition was canceled.\r\n     * @member NoMatchDetails.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {NoMatchReason} Specifies the reason canceled.\r\n     */\r\n    public get reason(): NoMatchReason {\r\n        return this.privReason;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationErrorCode, CancellationReason, TranslationRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Define payload of speech recognition canceled result events.\r\n * @class TranslationRecognitionCanceledEventArgs\r\n */\r\nexport class TranslationRecognitionCanceledEventArgs {\r\n    private privResult: TranslationRecognitionResult;\r\n    private privSessionId: string;\r\n    private privCancelReason: CancellationReason;\r\n    private privErrorDetails: string;\r\n    private privErrorCode: CancellationErrorCode;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} sessionid - The session id.\r\n     * @param {CancellationReason} cancellationReason - The cancellation reason.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {TranslationRecognitionResult} result - The result.\r\n     */\r\n    public constructor(\r\n        sessionid: string,\r\n        cancellationReason: CancellationReason,\r\n        errorDetails: string,\r\n        errorCode: CancellationErrorCode,\r\n        result: TranslationRecognitionResult) {\r\n        this.privCancelReason = cancellationReason;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privResult = result;\r\n        this.privSessionId = sessionid;\r\n        this.privErrorCode = errorCode;\r\n    }\r\n\r\n    /**\r\n     * Specifies the recognition result.\r\n     * @member TranslationRecognitionCanceledEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {TranslationRecognitionResult} the recognition result.\r\n     */\r\n    public get result(): TranslationRecognitionResult {\r\n        return this.privResult;\r\n    }\r\n\r\n    /**\r\n     * Specifies the session identifier.\r\n     * @member TranslationRecognitionCanceledEventArgs.prototype.sessionId\r\n     * @function\r\n     * @public\r\n     * @returns {string} the session identifier.\r\n     */\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n\r\n    /**\r\n     * The reason the recognition was canceled.\r\n     * @member TranslationRecognitionCanceledEventArgs.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {CancellationReason} Specifies the reason canceled.\r\n     */\r\n    public get reason(): CancellationReason {\r\n        return this.privCancelReason;\r\n    }\r\n\r\n    /**\r\n     * The error code in case of an unsuccessful recognition.\r\n     * Added in version 1.1.0.\r\n     * @return An error code that represents the error reason.\r\n     */\r\n    public get errorCode(): CancellationErrorCode {\r\n        return this.privErrorCode;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful recognition, provides details of the occurred error.\r\n     * @member TranslationRecognitionCanceledEventArgs.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} A String that represents the error details.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationEventArgs } from \"./CancellationEventArgs\";\r\nimport { CancellationErrorCode, CancellationReason, IntentRecognitionEventArgs, IntentRecognitionResult } from \"./Exports\";\r\n\r\n/**\r\n * Define payload of intent recognition canceled result events.\r\n * @class IntentRecognitionCanceledEventArgs\r\n */\r\nexport class IntentRecognitionCanceledEventArgs extends IntentRecognitionEventArgs implements CancellationEventArgs {\r\n    private privReason: CancellationReason;\r\n    private privErrorDetails: string;\r\n    private privErrorCode: CancellationErrorCode;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {CancellationReason} result - The result of the intent recognition.\r\n     * @param {string} offset - The offset.\r\n     * @param {IntentRecognitionResult} sessionId - The session id.\r\n     */\r\n    public constructor(\r\n        reason: CancellationReason,\r\n        errorDetails: string,\r\n        errorCode: CancellationErrorCode,\r\n        result?: IntentRecognitionResult,\r\n        offset?: number,\r\n        sessionId?: string) {\r\n        super(result, offset, sessionId);\r\n\r\n        this.privReason = reason;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privErrorCode = errorCode;\r\n    }\r\n\r\n    /**\r\n     * The reason the recognition was canceled.\r\n     * @member IntentRecognitionCanceledEventArgs.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {CancellationReason} Specifies the reason canceled.\r\n     */\r\n    public get reason(): CancellationReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    /**\r\n     * The error code in case of an unsuccessful recognition.\r\n     * Added in version 1.1.0.\r\n     * @return An error code that represents the error reason.\r\n     */\r\n    public get errorCode(): CancellationErrorCode {\r\n        return this.privErrorCode;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful recognition, provides details of the occurred error.\r\n     * @member IntentRecognitionCanceledEventArgs.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} A String that represents the error details.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Contains detailed information about why a result was canceled.\r\n * @class CancellationDetailsBase\r\n */\r\nexport class CancellationDetailsBase {\r\n    private privReason: CancellationReason;\r\n    private privErrorDetails: string;\r\n    private privErrorCode: CancellationErrorCode;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {CancellationReason} reason - The cancellation reason.\r\n     * @param {string} errorDetails - The error details, if provided.\r\n     */\r\n    protected constructor(reason: CancellationReason, errorDetails: string, errorCode: CancellationErrorCode) {\r\n        this.privReason = reason;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privErrorCode = errorCode;\r\n    }\r\n\r\n    /**\r\n     * The reason the recognition was canceled.\r\n     * @member CancellationDetailsBase.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {CancellationReason} Specifies the reason canceled.\r\n     */\r\n    public get reason(): CancellationReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful recognition, provides details of the occurred error.\r\n     * @member CancellationDetailsBase.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} A String that represents the error details.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n\r\n    /**\r\n     * The error code in case of an unsuccessful recognition.\r\n     * Added in version 1.1.0.\r\n     * @return An error code that represents the error reason.\r\n     */\r\n    public get ErrorCode(): CancellationErrorCode {\r\n        return this.privErrorCode;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationErrorCodePropertyName, EnumTranslation, SimpleSpeechPhrase } from \"../common.speech/Exports\";\r\nimport { CancellationDetailsBase } from \"./CancellationDetailsBase\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    RecognitionResult,\r\n    SpeechSynthesisResult\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Contains detailed information about why a result was canceled.\r\n * @class CancellationDetails\r\n */\r\nexport class CancellationDetails extends CancellationDetailsBase {\r\n\r\n    private constructor(reason: CancellationReason, errorDetails: string, errorCode: CancellationErrorCode) {\r\n        super(reason, errorDetails, errorCode);\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of CancellationDetails object for the canceled RecognitionResult.\r\n     * @member CancellationDetails.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {RecognitionResult | SpeechSynthesisResult} result - The result that was canceled.\r\n     * @returns {CancellationDetails} The cancellation details object being created.\r\n     */\r\n    public static fromResult(result: RecognitionResult | SpeechSynthesisResult): CancellationDetails {\r\n        let reason = CancellationReason.Error;\r\n        let errorCode: CancellationErrorCode = CancellationErrorCode.NoError;\r\n\r\n        if (result instanceof RecognitionResult && !!result.json) {\r\n            const simpleSpeech: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(result.json);\r\n            reason = EnumTranslation.implTranslateCancelResult(simpleSpeech.RecognitionStatus);\r\n        }\r\n\r\n        if (!!result.properties) {\r\n            errorCode = (CancellationErrorCode as any)[result.properties.getProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.NoError])];\r\n        }\r\n\r\n        return new CancellationDetails(reason, result.errorDetails, errorCode);\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n *  Defines error code in case that CancellationReason is Error.\r\n *  Added in version 1.1.0.\r\n */\r\nexport enum CancellationErrorCode {\r\n    /**\r\n     * Indicates that no error occurred during speech recognition.\r\n     */\r\n    NoError,\r\n\r\n    /**\r\n     * Indicates an authentication error.\r\n     */\r\n    AuthenticationFailure,\r\n\r\n    /**\r\n     * Indicates that one or more recognition parameters are invalid.\r\n     */\r\n    BadRequestParameters,\r\n\r\n    /**\r\n     * Indicates that the number of parallel requests exceeded the number of allowed\r\n     * concurrent transcriptions for the subscription.\r\n     */\r\n    TooManyRequests,\r\n\r\n    /**\r\n     * Indicates a connection error.\r\n     */\r\n    ConnectionFailure,\r\n\r\n    /**\r\n     * Indicates a time-out error when waiting for response from service.\r\n     */\r\n    ServiceTimeout,\r\n\r\n    /**\r\n     * Indicates that an error is returned by the service.\r\n     */\r\n    ServiceError,\r\n\r\n    /**\r\n     * Indicates an unexpected runtime error.\r\n     */\r\n    RuntimeError,\r\n}\r\n","//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.\r\n//\r\n\r\nimport { SessionEventArgs } from \"./Exports\";\r\n\r\n/**\r\n * Defines payload for connection events like Connected/Disconnected.\r\n * Added in version 1.2.0\r\n */\r\nexport class ConnectionEventArgs extends SessionEventArgs {\r\n}\r\n","//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.\r\n//\r\n\r\nimport { SessionEventArgs } from \"./Exports\";\r\n\r\n/**\r\n * Defines payload for any Service message event\r\n * Added in version 1.9.0\r\n */\r\n\r\nexport class ServiceEventArgs extends SessionEventArgs {\r\n    private privJsonResult: string;\r\n    private privEventName: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} json - json payload of the USP message.\r\n     */\r\n    public constructor(json: string,  name: string, sessionId?: string) {\r\n        super(sessionId);\r\n        this.privJsonResult = json;\r\n        this.privEventName = name;\r\n    }\r\n\r\n    public get jsonString(): string {\r\n        return this.privJsonResult;\r\n    }\r\n\r\n    public get eventName(): string {\r\n        return this.privEventName;\r\n    }\r\n}\r\n","//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.\r\n//\r\n\r\nimport { HeaderNames } from \"../common.speech/HeaderNames\";\r\nimport {\r\n    ConnectionMessage as IntConnectionMessage,\r\n    MessageType\r\n} from \"../common/Exports\";\r\nimport {\r\n    PropertyCollection\r\n} from \"./PropertyCollection\";\r\nimport { PropertyId } from \"./PropertyId\";\r\n\r\n/**\r\n * ConnectionMessage represents implementation specific messages sent to and received from\r\n * the speech service. These messages are provided for debugging purposes and should not\r\n * be used for production use cases with the Azure Cognitive Services Speech Service.\r\n * Messages sent to and received from the Speech Service are subject to change without\r\n * notice. This includes message contents, headers, payloads, ordering, etc.\r\n * Added in version 1.11.0.\r\n */\r\nexport abstract class ConnectionMessage {\r\n    /**\r\n     * The message path.\r\n     */\r\n    public abstract get path(): string;\r\n\r\n    /**\r\n     * Checks to see if the ConnectionMessage is a text message.\r\n     * See also IsBinaryMessage().\r\n     */\r\n    public abstract get isTextMessage(): boolean;\r\n\r\n    /**\r\n     * Checks to see if the ConnectionMessage is a binary message.\r\n     * See also GetBinaryMessage().\r\n     */\r\n    public abstract get isBinaryMessage(): boolean;\r\n\r\n    /**\r\n     * Gets the text message payload. Typically the text message content-type is\r\n     * application/json. To determine other content-types use\r\n     * Properties.GetProperty(\"Content-Type\").\r\n     */\r\n    public abstract get TextMessage(): string;\r\n\r\n    /**\r\n     * Gets the binary message payload.\r\n     */\r\n    public abstract get binaryMessage(): ArrayBuffer;\r\n\r\n    /**\r\n     * A collection of properties and their values defined for this <see cref=\"ConnectionMessage\"/>.\r\n     * Message headers can be accessed via this collection (e.g. \"Content-Type\").\r\n     */\r\n    public abstract get properties(): PropertyCollection;\r\n\r\n    /**\r\n     * Returns a string that represents the connection message.\r\n     */\r\n    public abstract toString(): string;\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConnectionMessageImpl {\r\n\r\n    private privConnectionMessage: IntConnectionMessage;\r\n    private privProperties: PropertyCollection;\r\n\r\n    constructor(message: IntConnectionMessage) {\r\n        this.privConnectionMessage = message;\r\n        this.privProperties = new PropertyCollection();\r\n        if (!!this.privConnectionMessage.headers[HeaderNames.ConnectionId]) {\r\n            this.privProperties.setProperty(PropertyId.Speech_SessionId, this.privConnectionMessage.headers[HeaderNames.ConnectionId]);\r\n        }\r\n\r\n        Object.keys(this.privConnectionMessage.headers).forEach((header: string, index: number, array: string[]): void => {\r\n            this.privProperties.setProperty(header, this.privConnectionMessage.headers[header]);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * The message path.\r\n     */\r\n    public get path(): string {\r\n        return this.privConnectionMessage.headers[Object.keys(this.privConnectionMessage.headers).find((key: string) => key.toLowerCase() === \"path\".toLowerCase())];\r\n    }\r\n\r\n    /**\r\n     * Checks to see if the ConnectionMessage is a text message.\r\n     * See also IsBinaryMessage().\r\n     */\r\n    public get isTextMessage(): boolean {\r\n        return this.privConnectionMessage.messageType === MessageType.Text;\r\n    }\r\n\r\n    /**\r\n     * Checks to see if the ConnectionMessage is a binary message.\r\n     * See also GetBinaryMessage().\r\n     */\r\n    public get isBinaryMessage(): boolean {\r\n        return this.privConnectionMessage.messageType === MessageType.Binary;\r\n    }\r\n\r\n    /**\r\n     * Gets the text message payload. Typically the text message content-type is\r\n     * application/json. To determine other content-types use\r\n     * Properties.GetProperty(\"Content-Type\").\r\n     */\r\n    public get TextMessage(): string {\r\n        return this.privConnectionMessage.textBody;\r\n    }\r\n\r\n    /**\r\n     * Gets the binary message payload.\r\n     */\r\n    public get binaryMessage(): ArrayBuffer {\r\n        return this.privConnectionMessage.binaryBody;\r\n    }\r\n\r\n    /**\r\n     * A collection of properties and their values defined for this <see cref=\"ConnectionMessage\"/>.\r\n     * Message headers can be accessed via this collection (e.g. \"Content-Type\").\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Returns a string that represents the connection message.\r\n     */\r\n    public toString(): string {\r\n        return \"\";\r\n    }\r\n}\r\n","//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.\r\n//\r\n\r\nimport {\r\n    ServiceRecognizerBase,\r\n    SynthesisAdapterBase,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    ConnectionEvent,\r\n    ConnectionMessageReceivedEvent,\r\n    ConnectionMessageSentEvent,\r\n    IDetachable,\r\n    marshalPromiseToCallbacks,\r\n    ServiceEvent,\r\n} from \"../common/Exports\";\r\nimport {\r\n    ConnectionMessageImpl\r\n} from \"./ConnectionMessage\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    ConnectionEventArgs,\r\n    ConnectionMessageEventArgs,\r\n    Recognizer,\r\n    ServiceEventArgs,\r\n    SpeechSynthesizer,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Connection is a proxy class for managing connection to the speech service of the specified Recognizer.\r\n * By default, a Recognizer autonomously manages connection to service when needed.\r\n * The Connection class provides additional methods for users to explicitly open or close a connection and\r\n * to subscribe to connection status changes.\r\n * The use of Connection is optional, and mainly for scenarios where fine tuning of application\r\n * behavior based on connection status is needed. Users can optionally call Open() to manually set up a connection\r\n * in advance before starting recognition on the Recognizer associated with this Connection.\r\n * If the Recognizer needs to connect or disconnect to service, it will\r\n * setup or shutdown the connection independently. In this case the Connection will be notified by change of connection\r\n * status via Connected/Disconnected events.\r\n * Added in version 1.2.1.\r\n */\r\nexport class Connection {\r\n    private privInternalData: ServiceRecognizerBase | SynthesisAdapterBase;\r\n    private privEventListener: IDetachable;\r\n    private privServiceEventListener: IDetachable;\r\n\r\n    /**\r\n     * Gets the Connection instance from the specified recognizer.\r\n     * @param recognizer The recognizer associated with the connection.\r\n     * @return The Connection instance of the recognizer.\r\n     */\r\n    public static fromRecognizer(recognizer: Recognizer): Connection {\r\n        const recoBase: ServiceRecognizerBase = recognizer.internalData as ServiceRecognizerBase;\r\n\r\n        const ret: Connection = new Connection();\r\n\r\n        ret.privInternalData = recoBase;\r\n        ret.setupEvents();\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Gets the Connection instance from the specified synthesizer.\r\n     * @param synthesizer The synthesizer associated with the connection.\r\n     * @return The Connection instance of the synthesizer.\r\n     */\r\n    public static fromSynthesizer(synthesizer: SpeechSynthesizer): Connection {\r\n        const synthBase: SynthesisAdapterBase = synthesizer.internalData as SynthesisAdapterBase;\r\n\r\n        const ret: Connection = new Connection();\r\n\r\n        ret.privInternalData = synthBase;\r\n        ret.setupEvents();\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Starts to set up connection to the service.\r\n     * Users can optionally call openConnection() to manually set up a connection in advance before starting recognition on the\r\n     * Recognizer associated with this Connection. After starting recognition, calling Open() will have no effect\r\n     *\r\n     * Note: On return, the connection might not be ready yet. Please subscribe to the Connected event to\r\n     * be notified when the connection is established.\r\n     */\r\n    public openConnection(cb?: () => void, err?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks(this.privInternalData.connect(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Closes the connection the service.\r\n     * Users can optionally call closeConnection() to manually shutdown the connection of the associated Recognizer.\r\n     *\r\n     * If closeConnection() is called during recognition, recognition will fail and cancel with an error.\r\n     */\r\n    public closeConnection(cb?: () => void, err?: (error: string) => void): void {\r\n        if (this.privInternalData instanceof SynthesisAdapterBase) {\r\n            throw new Error(\"Disconnecting a synthesizer's connection is currently not supported\");\r\n        } else {\r\n            marshalPromiseToCallbacks((this.privInternalData as ServiceRecognizerBase).disconnect(), cb, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Appends a parameter in a message to service.\r\n     * Added in version 1.12.1.\r\n     * @param path The path of the network message.\r\n     * @param propertyName Name of the property\r\n     * @param propertyValue Value of the property. This is a json string.\r\n     */\r\n    public setMessageProperty(path: string, propertyName: string, propertyValue: string): void {\r\n        Contracts.throwIfNullOrWhitespace(propertyName, \"propertyName\");\r\n\r\n        if (this.privInternalData instanceof ServiceRecognizerBase) {\r\n            if (path.toLowerCase() !== \"speech.context\") {\r\n                throw new Error(\"Only speech.context message property sets are currently supported for recognizer\");\r\n            } else {\r\n                (this.privInternalData as ServiceRecognizerBase).speechContext.setSection(propertyName, propertyValue);\r\n            }\r\n        } else if (this.privInternalData instanceof SynthesisAdapterBase) {\r\n            if (path.toLowerCase() !== \"synthesis.context\") {\r\n                throw new Error(\"Only synthesis.context message property sets are currently supported for synthesizer\");\r\n            } else {\r\n                (this.privInternalData as SynthesisAdapterBase).synthesisContext.setSection(propertyName, propertyValue);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sends a message to the speech service.\r\n     * Added in version 1.13.0.\r\n     * @param path The WebSocket path of the message\r\n     * @param payload The payload of the message. This is a json string or a ArrayBuffer.\r\n     * @param success A callback to indicate success.\r\n     * @param error A callback to indicate an error.\r\n     */\r\n    public sendMessageAsync(path: string, payload: string | ArrayBuffer, success?: () => void, error?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks(this.privInternalData.sendNetworkMessage(path, payload), success, error);\r\n    }\r\n\r\n    /**\r\n     * Any message from service that is not being processed by any other top level recognizers.\r\n     *\r\n     * Will be removed in 2.0.\r\n     */\r\n    public receivedServiceMessage: (args: ServiceEventArgs) => void;\r\n\r\n    /**\r\n     * Any message received from the Speech Service.\r\n     */\r\n    public messageReceived: (args: ConnectionMessageEventArgs) => void;\r\n\r\n    /**\r\n     * Any message sent to the Speech Service.\r\n     */\r\n    public messageSent: (args: ConnectionMessageEventArgs) => void;\r\n\r\n    /**\r\n     * The Connected event to indicate that the recognizer is connected to service.\r\n     */\r\n    public connected: (args: ConnectionEventArgs) => void;\r\n\r\n    /**\r\n     * The Disconnected event to indicate that the recognizer is disconnected from service.\r\n     */\r\n    public disconnected: (args: ConnectionEventArgs) => void;\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     */\r\n    public close(): void {\r\n        /* tslint:disable:no-empty */\r\n    }\r\n\r\n    private setupEvents(): void {\r\n        this.privEventListener = this.privInternalData.connectionEvents.attach((connectionEvent: ConnectionEvent): void => {\r\n            if (connectionEvent.name === \"ConnectionEstablishedEvent\") {\r\n                if (!!this.connected) {\r\n                    this.connected(new ConnectionEventArgs(connectionEvent.connectionId));\r\n                }\r\n            } else if (connectionEvent.name === \"ConnectionClosedEvent\") {\r\n                if (!!this.disconnected) {\r\n                    this.disconnected(new ConnectionEventArgs(connectionEvent.connectionId));\r\n                }\r\n            } else if (connectionEvent.name === \"ConnectionMessageSentEvent\") {\r\n                if (!!this.messageSent) {\r\n                    this.messageSent(new ConnectionMessageEventArgs(new ConnectionMessageImpl((connectionEvent as ConnectionMessageSentEvent).message)));\r\n                }\r\n            } else if (connectionEvent.name === \"ConnectionMessageReceivedEvent\") {\r\n                if (!!this.messageReceived) {\r\n                    this.messageReceived(new ConnectionMessageEventArgs(new ConnectionMessageImpl((connectionEvent as ConnectionMessageReceivedEvent).message)));\r\n                }\r\n            }\r\n        });\r\n\r\n        this.privServiceEventListener = this.privInternalData.serviceEvents.attach((e: ServiceEvent): void => {\r\n            if (!!this.receivedServiceMessage) {\r\n                this.receivedServiceMessage(new ServiceEventArgs(e.jsonString, e.name));\r\n            }\r\n        });\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    DynamicGrammarBuilder,\r\n    ServiceRecognizerBase,\r\n} from \"../common.speech/Exports\";\r\nimport { Recognizer } from \"./Exports\";\r\n\r\n/**\r\n * Allows additions of new phrases to improve speech recognition.\r\n *\r\n * Phrases added to the recognizer are effective at the start of the next recognition, or the next time the SpeechSDK must reconnect\r\n * to the speech service.\r\n */\r\nexport class PhraseListGrammar {\r\n    private privGrammerBuilder: DynamicGrammarBuilder;\r\n\r\n    private constructor(recogBase: ServiceRecognizerBase) {\r\n        this.privGrammerBuilder = recogBase.dynamicGrammar;\r\n    }\r\n\r\n    /**\r\n     * Creates a PhraseListGrammar from a given speech recognizer. Will accept any recognizer that derives from @class Recognizer.\r\n     * @param recognizer The recognizer to add phrase lists to.\r\n     */\r\n    public static fromRecognizer(recognizer: Recognizer): PhraseListGrammar {\r\n        const recoBase: ServiceRecognizerBase = recognizer.internalData as ServiceRecognizerBase;\r\n\r\n        return new PhraseListGrammar(recoBase);\r\n    }\r\n\r\n    /**\r\n     * Adds a single phrase to the current recognizer.\r\n     * @param phrase Phrase to add.\r\n     */\r\n    public addPhrase(phrase: string): void {\r\n        this.privGrammerBuilder.addPhrase(phrase);\r\n    }\r\n\r\n    /**\r\n     * Adds multiple phrases to the current recognizer.\r\n     * @param phrases Array of phrases to add.\r\n     */\r\n    public addPhrases(phrases: string[]): void {\r\n        this.privGrammerBuilder.addPhrase(phrases);\r\n    }\r\n\r\n    /**\r\n     * Clears all phrases added to the current recognizer.\r\n     */\r\n    public clear(): void {\r\n        this.privGrammerBuilder.clearPhrases();\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport { PropertyCollection, PropertyId, ServicePropertyChannel, SpeechConfigImpl } from \"./Exports\";\r\nimport { OutputFormat } from \"./OutputFormat\";\r\n\r\n/**\r\n * Class that defines base configurations for dialog service connector\r\n * @class DialogServiceConfig\r\n */\r\nexport abstract class DialogServiceConfig {\r\n\r\n    /**\r\n     * Creates an instance of DialogService config.\r\n     * @constructor\r\n     */\r\n    protected constructor() { }\r\n\r\n    /**\r\n     * Sets an arbitrary property.\r\n     * @member DialogServiceConfig.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to set.\r\n     * @param {string} value - The new value of the property.\r\n     */\r\n    public abstract setProperty(name: string | PropertyId, value: string): void;\r\n\r\n    /**\r\n     * Returns the current value of an arbitrary property.\r\n     * @member DialogServiceConfig.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {string} name - The name of the property to query.\r\n     * @param {string} def - The value to return in case the property is not known.\r\n     * @returns {string} The current value, or provided default, of the given property.\r\n     */\r\n    public abstract getProperty(name: string | PropertyId, def?: string): string;\r\n\r\n    /**\r\n     * @member DialogServiceConfig.prototype.setServiceProperty\r\n     * @function\r\n     * @public\r\n     * @param {name} The name of the property.\r\n     * @param {value} Value to set.\r\n     * @param {channel} The channel used to pass the specified property to service.\r\n     * @summary Sets a property value that will be passed to service using the specified channel.\r\n     */\r\n    public abstract setServiceProperty(name: string, value: string, channel: ServicePropertyChannel): void;\r\n\r\n    /**\r\n     * Sets the proxy configuration.\r\n     * Only relevant in Node.js environments.\r\n     * Added in version 1.4.0.\r\n     * @param proxyHostName The host name of the proxy server.\r\n     * @param proxyPort The port number of the proxy server.\r\n     */\r\n    public abstract setProxy(proxyHostName: string, proxyPort: number): void;\r\n\r\n    /**\r\n     * Sets the proxy configuration.\r\n     * Only relevant in Node.js environments.\r\n     * Added in version 1.4.0.\r\n     * @param proxyHostName The host name of the proxy server, without the protocol scheme (http://)\r\n     * @param porxyPort The port number of the proxy server.\r\n     * @param proxyUserName The user name of the proxy server.\r\n     * @param proxyPassword The password of the proxy server.\r\n     */\r\n    public abstract setProxy(proxyHostName: string, proxyPort: number, proxyUserName: string, proxyPassword: string): void;\r\n\r\n    /**\r\n     * Returns the configured language.\r\n     * @member DialogServiceConfig.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     */\r\n    public abstract get speechRecognitionLanguage(): string;\r\n\r\n    /**\r\n     * Gets/Sets the input language.\r\n     * @member DialogServiceConfig.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language to use for recognition.\r\n     */\r\n    public abstract set speechRecognitionLanguage(value: string);\r\n\r\n    /**\r\n     * Sets the corresponding backend application identifier.\r\n     * @member DialogServiceConfig.prototype.Conversation_ApplicationId\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The application identifier to set.\r\n     */\r\n    // tslint:disable-next-line: no-empty\r\n    public set applicationId(value: string) { }\r\n\r\n    public static DialogTypes: any = class {\r\n        public static BotFramework: string = \"bot_framework\";\r\n        public static CustomCommands: string = \"custom_commands\";\r\n    };\r\n}\r\n\r\n/**\r\n * Dialog Service configuration.\r\n * @class DialogServiceConfigImpl\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class DialogServiceConfigImpl extends DialogServiceConfig {\r\n\r\n    private privSpeechConfig: SpeechConfigImpl;\r\n\r\n    /**\r\n     * Creates an instance of dialogService config.\r\n     */\r\n    public constructor() {\r\n        super();\r\n        this.privSpeechConfig = new SpeechConfigImpl();\r\n    }\r\n\r\n    /**\r\n     * Provides access to custom properties.\r\n     * @member DialogServiceConfigImpl.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The properties.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privSpeechConfig.properties;\r\n    }\r\n\r\n    /**\r\n     * Gets the speech recognition language.\r\n     * @member DialogServiceConfigImpl.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privSpeechConfig.speechRecognitionLanguage;\r\n    }\r\n\r\n    /**\r\n     * Sets the speech recognition language.\r\n     * @member DialogServiceConfigImpl.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The language to set.\r\n     */\r\n    public set speechRecognitionLanguage(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n        this.privSpeechConfig.speechRecognitionLanguage = value;\r\n    }\r\n\r\n    public get outputFormat(): OutputFormat {\r\n        return this.privSpeechConfig.outputFormat;\r\n    }\r\n\r\n    public set outputFormat(value: OutputFormat) {\r\n        this.privSpeechConfig.outputFormat = value;\r\n    }\r\n\r\n    /**\r\n     * Sets a named property as value\r\n     * @member DialogServiceConfigImpl.prototype.setProperty\r\n     * @function\r\n     * @public\r\n     * @param {PropertyId | string} name - The property to set.\r\n     * @param {string} value - The value.\r\n     */\r\n    public setProperty(name: string | PropertyId, value: string): void {\r\n        this.privSpeechConfig.setProperty(name, value);\r\n    }\r\n\r\n    /**\r\n     * Sets a named property as value\r\n     * @member DialogServiceConfigImpl.prototype.getProperty\r\n     * @function\r\n     * @public\r\n     * @param {PropertyId | string} name - The property to get.\r\n     * @param {string} def - The default value to return in case the property is not known.\r\n     * @returns {string} The current value, or provided default, of the given property.\r\n     */\r\n    public getProperty(name: string | PropertyId, def?: string): string {\r\n        return this.privSpeechConfig.getProperty(name);\r\n    }\r\n\r\n    /**\r\n     * Sets the proxy configuration.\r\n     * Only relevant in Node.js environments.\r\n     * Added in version 1.4.0.\r\n     * @param proxyHostName The host name of the proxy server, without the protocol scheme (http://)\r\n     * @param proxyPort The port number of the proxy server.\r\n     * @param proxyUserName The user name of the proxy server.\r\n     * @param proxyPassword The password of the proxy server.\r\n     */\r\n    public setProxy(proxyHostName: string, proxyPort: number, proxyUserName?: string, proxyPassword?: string): void {\r\n        this.setProperty(PropertyId.SpeechServiceConnection_ProxyHostName, proxyHostName);\r\n        this.setProperty(PropertyId.SpeechServiceConnection_ProxyPort, `${proxyPort}`);\r\n        if (proxyUserName) {\r\n            this.setProperty(PropertyId.SpeechServiceConnection_ProxyUserName, proxyUserName);\r\n        }\r\n        if (proxyPassword) {\r\n            this.setProperty(PropertyId.SpeechServiceConnection_ProxyPassword, proxyPassword);\r\n        }\r\n    }\r\n\r\n    public setServiceProperty(name: string, value: string, channel: ServicePropertyChannel): void {\r\n        this.privSpeechConfig.setServiceProperty(name, value, channel);\r\n    }\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member DialogServiceConfigImpl.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        return;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport { DialogServiceConfig, DialogServiceConfigImpl } from \"./DialogServiceConfig\";\r\nimport { PropertyId } from \"./Exports\";\r\n\r\n/**\r\n * Class that defines configurations for the dialog service connector object for using a Bot Framework backend.\r\n * @class BotFrameworkConfig\r\n */\r\nexport class BotFrameworkConfig extends DialogServiceConfigImpl {\r\n\r\n    /**\r\n     * Creates an instance of BotFrameworkConfig.\r\n     */\r\n    public constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Creates a bot framework configuration instance with the provided subscription information.\r\n     * @member BotFrameworkConfig.fromSubscription\r\n     * @function\r\n     * @public\r\n     * @param subscription Subscription key associated with the bot\r\n     * @param region The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @param botId Optional. Identifier for using a specific bot within an Azure resource group. Equivalent to the\r\n     *        resource name.\r\n     * @returns {BotFrameworkConfig} A new bot framework configuration instance.\r\n     */\r\n    public static fromSubscription(subscription: string, region: string, botId?: string): BotFrameworkConfig {\r\n        Contracts.throwIfNullOrWhitespace(subscription, \"subscription\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const botFrameworkConfig: BotFrameworkConfig = new DialogServiceConfigImpl();\r\n        botFrameworkConfig.setProperty(\r\n            PropertyId.Conversation_DialogType,\r\n            DialogServiceConfig.DialogTypes.BotFramework);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Key, subscription);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n\r\n        if (botId) {\r\n            botFrameworkConfig.setProperty(PropertyId.Conversation_ApplicationId, botId);\r\n        }\r\n\r\n        return botFrameworkConfig;\r\n    }\r\n\r\n    /**\r\n     * Creates a bot framework configuration instance for the specified authorization token and region.\r\n     * Note: The caller must ensure that an authorization token is valid. Before an authorization token expires, the\r\n     *       caller must refresh it by setting the authorizationToken property on the corresponding\r\n     *       DialogServiceConnector instance created with this config. The contents of configuration objects are copied\r\n     *       when connectors are created, so setting authorizationToken on a DialogServiceConnector will not update the\r\n     *       original configuration's authorization token. Create a new configuration instance or set the\r\n     *       SpeechServiceAuthorization_Token property to update an existing instance if it will be used to create\r\n     *       further DialogServiceConnectors.\r\n     * @member BotFrameworkConfig.fromAuthorizationToken\r\n     * @function\r\n     * @public\r\n     * @param authorizationToken The authorization token associated with the bot\r\n     * @param region The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @param botId Optional. Identifier for using a specific bot within an Azure resource group. Equivalent to the\r\n     *        resource name.\r\n     * @returns {BotFrameworkConfig} A new bot framework configuration instance.\r\n     */\r\n    public static fromAuthorizationToken(\r\n        authorizationToken: string, region: string, botId?: string\r\n    ): BotFrameworkConfig {\r\n        Contracts.throwIfNullOrWhitespace(authorizationToken, \"authorizationToken\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const botFrameworkConfig: BotFrameworkConfig = new DialogServiceConfigImpl();\r\n        botFrameworkConfig.setProperty(\r\n            PropertyId.Conversation_DialogType,\r\n            DialogServiceConfig.DialogTypes.BotFramework);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceAuthorization_Token, authorizationToken);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n\r\n        if (botId) {\r\n            botFrameworkConfig.setProperty(PropertyId.Conversation_ApplicationId, botId);\r\n        }\r\n\r\n        return botFrameworkConfig;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of a BotFrameworkConfig.\r\n     * This method is intended only for users who use a non-default service host. The standard resource path will be\r\n     * assumed. For services with a non-standard resource path or no path at all, use fromEndpoint instead.\r\n     * Note: Query parameters are not allowed in the host URI and must be set by other APIs.\r\n     * Note: To use an authorization token with fromHost, use fromHost(URL) and then set the AuthorizationToken\r\n     *       property on the created BotFrameworkConfig instance.\r\n     * Note: Added in version 1.15.0.\r\n     * @member BotFrameworkConfig.fromHost\r\n     * @function\r\n     * @public\r\n     * @param {URL | string} host - If a URL is provided, the fully-qualified host with protocol (e.g.\r\n     *        wss://your.host.com:1234) will be used. If a string is provided, it will be embedded in\r\n     *        wss://{host}.convai.speech.azure.us.\r\n     * @param {string} subscriptionKey - The subscription key. If a subscription key is not specified, an authorization\r\n     *        token must be set.\r\n     * @param botId Optional. Identifier for using a specific bot within an Azure resource group. Equivalent to the\r\n     *        resource name.\r\n     * @returns {BotFrameworkConfig} A new bot framework configuration instance.\r\n     */\r\n    public static fromHost(\r\n        host: URL | string,\r\n        subscriptionKey?: string,\r\n        botId?: string): BotFrameworkConfig {\r\n\r\n        Contracts.throwIfNullOrUndefined(host, \"host\");\r\n        const resolvedHost: URL = host instanceof URL ? host : new URL(`wss://${host}.convai.speech.azure.us`);\r\n        Contracts.throwIfNullOrUndefined(resolvedHost, \"resolvedHost\");\r\n\r\n        const botFrameworkConfig: BotFrameworkConfig = new DialogServiceConfigImpl();\r\n        botFrameworkConfig.setProperty(\r\n            PropertyId.Conversation_DialogType,\r\n            DialogServiceConfig.DialogTypes.BotFramework);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Host, resolvedHost.toString());\r\n\r\n        if (undefined !== subscriptionKey) {\r\n            botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        }\r\n\r\n        return botFrameworkConfig;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of a BotFrameworkConfig.\r\n     * This method is intended only for users who use a non-standard service endpoint or parameters.\r\n     * Note: The query parameters specified in the endpoint URL are not changed, even if they are set by any other APIs.\r\n     * Note: To use authorization token with fromEndpoint, pass an empty string to the subscriptionKey in the\r\n     *       fromEndpoint method, and then set authorizationToken=\"token\" on the created BotFrameworkConfig instance to\r\n     *       use the authorization token.\r\n     * Note: Added in version 1.15.0.\r\n     * @member BotFrameworkConfig.fromEndpoint\r\n     * @function\r\n     * @public\r\n     * @param {URL} endpoint - The service endpoint to connect to.\r\n     * @param {string} subscriptionKey - The subscription key. If a subscription key is not specified, an authorization\r\n     *        token must be set.\r\n     * @returns {BotFrameworkConfig} - A new bot framework configuration instance using the provided endpoint.\r\n     */\r\n    public static fromEndpoint(endpoint: URL, subscriptionKey?: string): BotFrameworkConfig {\r\n        Contracts.throwIfNull(endpoint, \"endpoint\");\r\n\r\n        const botFrameworkConfig: BotFrameworkConfig = new DialogServiceConfigImpl();\r\n        botFrameworkConfig.setProperty(\r\n            PropertyId.Conversation_DialogType,\r\n            DialogServiceConfig.DialogTypes.BotFramework);\r\n        botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Endpoint, endpoint.toString());\r\n\r\n        if (undefined !== subscriptionKey) {\r\n            botFrameworkConfig.setProperty(PropertyId.SpeechServiceConnection_Key, subscriptionKey);\r\n        }\r\n\r\n        return botFrameworkConfig;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport { DialogServiceConfig, DialogServiceConfigImpl } from \"./DialogServiceConfig\";\r\nimport { PropertyId } from \"./Exports\";\r\n\r\n/**\r\n * Class that defines configurations for the dialog service connector object for using a CustomCommands backend.\r\n * @class CustomCommandsConfig\r\n */\r\nexport class CustomCommandsConfig extends DialogServiceConfigImpl {\r\n\r\n    /**\r\n     * Creates an instance of CustomCommandsConfig.\r\n     */\r\n    public constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the bot framework config with the specified subscription and region.\r\n     * @member CustomCommandsConfig.fromSubscription\r\n     * @function\r\n     * @public\r\n     * @param applicationId Speech Commands application id.\r\n     * @param subscription Subscription key associated with the bot\r\n     * @param region The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {CustomCommandsConfig} A new bot framework config.\r\n     */\r\n    public static fromSubscription(applicationId: string, subscription: string, region: string): CustomCommandsConfig {\r\n        Contracts.throwIfNullOrWhitespace(applicationId, \"applicationId\");\r\n        Contracts.throwIfNullOrWhitespace(subscription, \"subscription\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const customCommandsConfig: CustomCommandsConfig = new DialogServiceConfigImpl();\r\n        customCommandsConfig.setProperty(PropertyId.Conversation_DialogType, DialogServiceConfig.DialogTypes.CustomCommands);\r\n        customCommandsConfig.setProperty(PropertyId.Conversation_ApplicationId, applicationId);\r\n        customCommandsConfig.setProperty(PropertyId.SpeechServiceConnection_Key, subscription);\r\n        customCommandsConfig.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        return customCommandsConfig;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of the bot framework config with the specified Speech Commands application id, authorization token and region.\r\n     * Note: The caller needs to ensure that the authorization token is valid. Before the authorization token\r\n     * expires, the caller needs to refresh it by calling this setter with a new valid token.\r\n     * As configuration values are copied when creating a new recognizer, the new token value will not apply to recognizers that have already been created.\r\n     * For recognizers that have been created before, you need to set authorization token of the corresponding recognizer\r\n     * to refresh the token. Otherwise, the recognizers will encounter errors during recognition.\r\n     * @member CustomCommandsConfig.fromAuthorizationToken\r\n     * @function\r\n     * @public\r\n     * @param applicationId Speech Commands application id.\r\n     * @param authorizationToken The authorization token associated with the application.\r\n     * @param region The region name (see the <a href=\"https://aka.ms/csspeech/region\">region page</a>).\r\n     * @returns {CustomCommandsConfig} A new speech commands config.\r\n     */\r\n    public static fromAuthorizationToken(applicationId: string, authorizationToken: string, region: string): CustomCommandsConfig {\r\n        Contracts.throwIfNullOrWhitespace(applicationId, \"applicationId\");\r\n        Contracts.throwIfNullOrWhitespace(authorizationToken, \"authorizationToken\");\r\n        Contracts.throwIfNullOrWhitespace(region, \"region\");\r\n\r\n        const customCommandsConfig: CustomCommandsConfig = new DialogServiceConfigImpl();\r\n        customCommandsConfig.setProperty(PropertyId.Conversation_DialogType, DialogServiceConfig.DialogTypes.CustomCommands);\r\n        customCommandsConfig.setProperty(PropertyId.Conversation_ApplicationId, applicationId);\r\n        customCommandsConfig.setProperty(PropertyId.SpeechServiceAuthorization_Token, authorizationToken);\r\n        customCommandsConfig.setProperty(PropertyId.SpeechServiceConnection_Region, region);\r\n        return customCommandsConfig;\r\n    }\r\n\r\n    /**\r\n     * Sets the corresponding backend application identifier.\r\n     * @member CustomCommandsConfig.prototype.Conversation_ApplicationId\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The application identifier to set.\r\n     */\r\n    public set applicationId(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"value\");\r\n        this.setProperty(PropertyId.Conversation_ApplicationId, value);\r\n    }\r\n\r\n    /**\r\n     * Gets the corresponding backend application identifier.\r\n     * @member CustomCommandsConfig.prototype.Conversation_ApplicationId\r\n     * @function\r\n     * @public\r\n     * @param {string} value - The application identifier to get.\r\n     */\r\n    public get applicationId(): string {\r\n        return this.getProperty(PropertyId.Conversation_ApplicationId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport class QueryParameterNames {\r\n    public static BotId: string = \"botid\";\r\n    public static CustomSpeechDeploymentId: string = \"cid\";\r\n    public static CustomVoiceDeploymentId: string = \"deploymentId\";\r\n    public static EnableAudioLogging: string = \"storeAudio\";\r\n    public static EnableLanguageId: string = \"lidEnabled\";\r\n    public static EnableWordLevelTimestamps: string = \"wordLevelTimestamps\";\r\n    public static EndSilenceTimeoutMs: string = \"endSilenceTimeoutMs\";\r\n    public static Format: string = \"format\";\r\n    public static InitialSilenceTimeoutMs: string = \"initialSilenceTimeoutMs\";\r\n    public static Language: string = \"language\";\r\n    public static Profanity: string = \"profanity\";\r\n    public static RequestBotStatusMessages: string = \"enableBotMessageStatus\";\r\n    public static StableIntermediateThreshold: string = \"stableIntermediateThreshold\";\r\n    public static StableTranslation: string = \"stableTranslation\";\r\n    public static TestHooks: string = \"testhooks\";\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ServicePropertiesPropertyName,\r\n} from \"../common.speech/Exports\";\r\nimport { IConnection, IStringDictionary } from \"../common/Exports\";\r\nimport { OutputFormat, PropertyId } from \"../sdk/Exports\";\r\nimport { AuthInfo, IConnectionFactory, RecognitionMode, RecognizerConfig, WebsocketMessageFormatter } from \"./Exports\";\r\nimport { QueryParameterNames } from \"./QueryParameterNames\";\r\n\r\nexport abstract class ConnectionFactoryBase implements IConnectionFactory {\r\n    public abstract create(\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection;\r\n\r\n    protected setCommonUrlParams(\r\n        config: RecognizerConfig,\r\n        queryParams: IStringDictionary<string>,\r\n        endpoint: string): void {\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceConnection_EnableAudioLogging,\r\n            QueryParameterNames.EnableAudioLogging,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceResponse_RequestWordLevelTimestamps,\r\n            QueryParameterNames.EnableWordLevelTimestamps,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceResponse_ProfanityOption,\r\n            QueryParameterNames.Profanity,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs,\r\n            QueryParameterNames.InitialSilenceTimeoutMs,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceConnection_EndSilenceTimeoutMs,\r\n            QueryParameterNames.EndSilenceTimeoutMs,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        this.setUrlParameter(PropertyId.SpeechServiceResponse_StablePartialResultThreshold,\r\n            QueryParameterNames.StableIntermediateThreshold,\r\n            config,\r\n            queryParams,\r\n            endpoint);\r\n\r\n        const serviceProperties: IStringDictionary<string> = JSON.parse(config.parameters.getProperty(ServicePropertiesPropertyName, \"{}\"));\r\n\r\n        Object.keys(serviceProperties).forEach((value: string, num: number, array: string[]) => {\r\n            queryParams[value] = serviceProperties[value];\r\n        });\r\n    }\r\n\r\n    protected setUrlParameter(\r\n        propId: PropertyId,\r\n        parameterName: string,\r\n        config: RecognizerConfig,\r\n        queryParams: IStringDictionary<string>,\r\n        endpoint: string): void {\r\n\r\n        const value: string = config.parameters.getProperty(propId, undefined);\r\n\r\n        if (value && (!endpoint || endpoint.search(parameterName) === -1)) {\r\n            queryParams[parameterName] = value.toLocaleLowerCase();\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection,\r\n} from \"../common.browser/Exports\";\r\nimport { OutputFormatPropertyName } from \"../common.speech/Exports\";\r\nimport { IConnection, IStringDictionary } from \"../common/Exports\";\r\nimport { DialogServiceConfig, OutputFormat, PropertyId } from \"../sdk/Exports\";\r\nimport { ConnectionFactoryBase } from \"./ConnectionFactoryBase\";\r\nimport { AuthInfo, RecognizerConfig, WebsocketMessageFormatter } from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { QueryParameterNames } from \"./QueryParameterNames\";\r\n\r\nexport class DialogConnectionFactory extends ConnectionFactoryBase {\r\n\r\n    private static Constants: any = class {\r\n        private static ApiKey: string = \"api\";\r\n        private static BaseUrl: string = \"convai.speech\";\r\n    };\r\n\r\n    public create = (\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        const applicationId: string = config.parameters.getProperty(PropertyId.Conversation_ApplicationId, \"\");\r\n        const dialogType: string = config.parameters.getProperty(PropertyId.Conversation_DialogType);\r\n        const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region);\r\n        const language: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage, \"en-US\");\r\n        const requestTurnStatus: string = config.parameters.getProperty(PropertyId.Conversation_Request_Bot_Status_Messages, \"true\");\r\n\r\n        const queryParams: IStringDictionary<string> = {};\r\n        queryParams[HeaderNames.ConnectionId] = connectionId;\r\n        queryParams[QueryParameterNames.Format] = config.parameters.getProperty(OutputFormatPropertyName, OutputFormat[OutputFormat.Simple]).toLowerCase();\r\n        queryParams[QueryParameterNames.Language] = language;\r\n        queryParams[QueryParameterNames.RequestBotStatusMessages] = requestTurnStatus;\r\n        if (applicationId) {\r\n            queryParams[QueryParameterNames.BotId] = applicationId;\r\n            if (dialogType === DialogServiceConfig.DialogTypes.CustomCommands) {\r\n                queryParams[HeaderNames.CustomCommandsAppId] = applicationId;\r\n            }\r\n        }\r\n\r\n        const resourceInfix: string =\r\n            dialogType === DialogServiceConfig.DialogTypes.CustomCommands ? \"commands/\"\r\n            : \"\";\r\n        const version: string =\r\n            dialogType === DialogServiceConfig.DialogTypes.CustomCommands ? \"v1\"\r\n            : dialogType === DialogServiceConfig.DialogTypes.BotFramework ? \"v3\"\r\n            : \"v0\";\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n\r\n        if (authInfo.token != null && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n\r\n        // The URL used for connection is chosen in a priority order of specification:\r\n        //  1. If a custom endpoint is provided, that URL is used verbatim.\r\n        //  2. If a custom host is provided (e.g. \"wss://my.custom.endpoint.com:1123\"), a URL is constructed from it.\r\n        //  3. If no custom connection details are provided, a URL is constructed from default values.\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, \"\");\r\n        if (!endpoint) {\r\n            const hostSuffix = (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n            const host: string = config.parameters.getProperty(\r\n                PropertyId.SpeechServiceConnection_Host,\r\n                `wss://${region}.${DialogConnectionFactory.Constants.BaseUrl}${hostSuffix}`);\r\n            const standardizedHost: string = host.endsWith(\"/\") ? host : host + \"/\";\r\n            endpoint = `${standardizedHost}${resourceInfix}${DialogConnectionFactory.Constants.ApiKey}/${version}`;\r\n        }\r\n\r\n        this.setCommonUrlParams(config, queryParams, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { DialogConnectionFactory } from \"../common.speech/DialogConnectorFactory\";\r\nimport {\r\n    DialogServiceAdapter,\r\n    IAgentConfig,\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    Deferred,\r\n    marshalPromiseToCallbacks\r\n} from \"../common/Exports\";\r\nimport { ActivityReceivedEventArgs } from \"./ActivityReceivedEventArgs\";\r\nimport { AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { AudioOutputFormatImpl } from \"./Audio/AudioOutputFormat\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport { DialogServiceConfig, DialogServiceConfigImpl } from \"./DialogServiceConfig\";\r\nimport {\r\n    AudioConfig,\r\n    PropertyCollection,\r\n    Recognizer,\r\n    SpeechRecognitionCanceledEventArgs,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechRecognitionResult\r\n} from \"./Exports\";\r\nimport { PropertyId } from \"./PropertyId\";\r\nimport { TurnStatusReceivedEventArgs } from \"./TurnStatusReceivedEventArgs\";\r\n\r\n/**\r\n * Dialog Service Connector\r\n * @class DialogServiceConnector\r\n */\r\nexport class DialogServiceConnector extends Recognizer {\r\n    private privIsDisposed: boolean;\r\n    private isTurnComplete: boolean;\r\n\r\n    /**\r\n     * Initializes an instance of the DialogServiceConnector.\r\n     * @constructor\r\n     * @param {DialogServiceConfig} dialogConfig - Set of properties to configure this recognizer.\r\n     * @param {AudioConfig} audioConfig - An optional audio config associated with the recognizer\r\n     */\r\n    public constructor(dialogConfig: DialogServiceConfig, audioConfig?: AudioConfig) {\r\n        const dialogServiceConfigImpl = dialogConfig as DialogServiceConfigImpl;\r\n        Contracts.throwIfNull(dialogConfig, \"dialogConfig\");\r\n\r\n        super(audioConfig, dialogServiceConfigImpl.properties, new DialogConnectionFactory());\r\n\r\n        this.isTurnComplete = true;\r\n        this.privIsDisposed = false;\r\n        this.privProperties = dialogServiceConfigImpl.properties.clone();\r\n\r\n        const agentConfig = this.buildAgentConfig();\r\n        this.privReco.agentConfig.set(agentConfig);\r\n    }\r\n\r\n    /**\r\n     * The event recognizing signals that an intermediate recognition result is received.\r\n     * @member DialogServiceConnector.prototype.recognizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognizing: (sender: DialogServiceConnector, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event recognized signals that a final recognition result is received.\r\n     * @member DialogServiceConfig.prototype.recognized\r\n     * @function\r\n     * @public\r\n     */\r\n    public recognized: (sender: DialogServiceConnector, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    /**\r\n     * The event canceled signals that an error occurred during recognition.\r\n     * @member DialogServiceConnector.prototype.canceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public canceled: (sender: DialogServiceConnector, event: SpeechRecognitionCanceledEventArgs) => void;\r\n\r\n    /**\r\n     * The event activityReceived signals that an activity has been received.\r\n     * @member DialogServiceConnector.prototype.activityReceived\r\n     * @function\r\n     * @public\r\n     */\r\n    public activityReceived: (sender: DialogServiceConnector, event: ActivityReceivedEventArgs) => void;\r\n\r\n    /**\r\n     * The event turnStatusReceived signals that a turn status message has been received. These messages are\r\n     * associated with both an interaction and a conversation. They are used to notify the client in the event\r\n     * of an interaction failure with the dialog backend, e.g. in the event of a network issue, timeout, crash,\r\n     * or other problem.\r\n     * @member DialogServiceConnector.prototype.turnStatusReceived\r\n     * @function\r\n     * @public\r\n     */\r\n    public turnStatusReceived: (sender: DialogServiceConnector, event: TurnStatusReceivedEventArgs) => void;\r\n\r\n    /**\r\n     * Starts a connection to the service.\r\n     * Users can optionally call connect() to manually set up a connection in advance, before starting interactions.\r\n     *\r\n     * Note: On return, the connection might not be ready yet. Please subscribe to the Connected event to\r\n     * be notified when the connection is established.\r\n     * @member DialogServiceConnector.prototype.connect\r\n     * @function\r\n     * @public\r\n     */\r\n    public connect(cb?: () => void, err?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks(this.privReco.connect(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Closes the connection the service.\r\n     * Users can optionally call disconnect() to manually shutdown the connection of the associated DialogServiceConnector.\r\n     *\r\n     * If disconnect() is called during a recognition, recognition will fail and cancel with an error.\r\n     */\r\n    public disconnect(cb?: () => void, err?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks(this.privReco.disconnect(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member DialogServiceConnector.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Sets the authorization token used to communicate with the service.\r\n     * @member DialogServiceConnector.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this DialogServiceConnector.\r\n     * @member DialogServiceConnector.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this DialogServiceConnector.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /** Gets the template for the activity generated by service from speech.\r\n     * Properties from the template will be stamped on the generated activity.\r\n     * It can be empty\r\n     */\r\n    public get speechActivityTemplate(): string {\r\n        return this.properties.getProperty(PropertyId.Conversation_Speech_Activity_Template);\r\n    }\r\n\r\n    /** Sets the template for the activity generated by service from speech.\r\n     * Properties from the template will be stamped on the generated activity.\r\n     * It can be null or empty.\r\n     * Note: it has to be a valid Json object.\r\n     */\r\n    public set speechActivityTemplate(speechActivityTemplate: string) {\r\n        this.properties.setProperty(PropertyId.Conversation_Speech_Activity_Template, speechActivityTemplate);\r\n    }\r\n\r\n    /**\r\n     * Starts recognition and stops after the first utterance is recognized.\r\n     * @member DialogServiceConnector.prototype.listenOnceAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback that received the result when the reco has completed.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public listenOnceAsync(cb?: (e: SpeechRecognitionResult) => void, err?: (e: string) => void): void {\r\n        if (this.isTurnComplete) {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            const callbackHolder = async (): Promise<SpeechRecognitionResult> => {\r\n                await this.privReco.connect();\r\n                await this.implRecognizerStop();\r\n                this.isTurnComplete = false;\r\n\r\n                const ret: Deferred<SpeechRecognitionResult> = new Deferred<SpeechRecognitionResult>();\r\n                await this.privReco.recognize(RecognitionMode.Conversation, ret.resolve, ret.reject);\r\n\r\n                const e: SpeechRecognitionResult = await ret.promise;\r\n                await this.implRecognizerStop();\r\n\r\n                return e;\r\n            };\r\n\r\n            const retPromise: Promise<SpeechRecognitionResult> = callbackHolder();\r\n\r\n            retPromise.catch(() => {\r\n                // Destroy the recognizer.\r\n                /* tslint:disable:no-empty */ // We've done all we can here.\r\n                this.dispose(true).catch(() => { });\r\n            });\r\n\r\n            marshalPromiseToCallbacks(retPromise.finally((): void => {\r\n                this.isTurnComplete = true;\r\n            }), cb, err);\r\n        }\r\n    }\r\n\r\n    public sendActivityAsync(activity: string, cb?: () => void, errCb?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks((this.privReco as DialogServiceAdapter).sendMessage(activity), cb, errCb);\r\n    }\r\n\r\n    /**\r\n     * closes all external resources held by an instance of this class.\r\n     * @member DialogServiceConnector.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, err?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privIsDisposed);\r\n\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, err);\r\n    }\r\n\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privIsDisposed) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            this.privIsDisposed = true;\r\n            await this.implRecognizerStop();\r\n            await super.dispose(disposing);\r\n        }\r\n    }\r\n\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(speechConfig, this.privProperties);\r\n    }\r\n\r\n    protected createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n\r\n        const audioSource: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n\r\n        return new DialogServiceAdapter(authentication, connectionFactory, audioSource, recognizerConfig, this);\r\n    }\r\n\r\n    private buildAgentConfig(): IAgentConfig {\r\n        const communicationType = this.properties.getProperty(\"Conversation_Communication_Type\", \"Default\");\r\n\r\n        return {\r\n            botInfo: {\r\n                commType: communicationType,\r\n                commandsCulture: undefined,\r\n                connectionId: this.properties.getProperty(PropertyId.Conversation_Agent_Connection_Id),\r\n                conversationId: this.properties.getProperty(PropertyId.Conversation_Conversation_Id, undefined),\r\n                fromId: this.properties.getProperty(PropertyId.Conversation_From_Id, undefined),\r\n                ttsAudioFormat: this.properties.getProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, undefined)\r\n            },\r\n            version: 0.2\r\n        };\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PullAudioOutputStream } from \"./Audio/AudioOutputStream\";\r\n\r\n/**\r\n * Defines contents of received message/events.\r\n * @class ActivityReceivedEventArgs\r\n */\r\nexport class ActivityReceivedEventArgs {\r\n    private privActivity: any;\r\n    private privAudioStream: PullAudioOutputStream;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {any} activity - The activity..\r\n     */\r\n    public constructor(activity: any, audioStream?: PullAudioOutputStream) {\r\n        this.privActivity = activity;\r\n        this.privAudioStream = audioStream;\r\n    }\r\n\r\n    /**\r\n     * Gets the received activity\r\n     * @member ActivityReceivedEventArgs.prototype.activity\r\n     * @function\r\n     * @public\r\n     * @returns {any} the received activity.\r\n     */\r\n    public get activity(): any {\r\n        return this.privActivity;\r\n    }\r\n\r\n    public get audioStream(): PullAudioOutputStream {\r\n        return this.privAudioStream;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport interface ITurnStatusResponsePayload {\r\n    interactionId: string;\r\n    conversationId: string;\r\n    statusCode: any;\r\n}\r\n\r\nexport class TurnStatusResponsePayload implements ITurnStatusResponsePayload {\r\n    private privMessageStatusResponse: ITurnStatusResponsePayload;\r\n\r\n    private constructor(json: string) {\r\n        this.privMessageStatusResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): TurnStatusResponsePayload {\r\n        return new TurnStatusResponsePayload(json);\r\n    }\r\n\r\n    public get interactionId(): string {\r\n        return this.privMessageStatusResponse.interactionId;\r\n    }\r\n\r\n    public get conversationId(): string {\r\n        return this.privMessageStatusResponse.conversationId;\r\n    }\r\n\r\n    public get statusCode(): any {\r\n        // Payloads may contain a limited set of textual representations or a numeric status\r\n        // code. The textual values are here converted into numeric ones.\r\n        switch (this.privMessageStatusResponse.statusCode) {\r\n            case \"Success\":\r\n                return 200;\r\n            case \"Failed\":\r\n                return 400;\r\n            case \"TimedOut\":\r\n                return 429;\r\n            default:\r\n                return this.privMessageStatusResponse.statusCode;\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ITurnStatusResponsePayload,\r\n    TurnStatusResponsePayload\r\n    } from \"../common.speech/ServiceMessages/TurnStatusPayload\";\r\n\r\n/**\r\n * Defines contents of received message/events.\r\n * @class TurnStatusReceivedEventArgs\r\n */\r\nexport class TurnStatusReceivedEventArgs {\r\n    private privTurnStatus: ITurnStatusResponsePayload;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} turnStatus - The JSON-encoded turn status message.\r\n     */\r\n    public constructor(turnStatus: string) {\r\n        this.privTurnStatus = TurnStatusResponsePayload.fromJSON(turnStatus);\r\n    }\r\n\r\n    /**\r\n     * Gets the interaction identifier associated with this turn status event.\r\n     * @member TurnStatusReceivedEventArgs.prototype.interactionId\r\n     * @function\r\n     * @public\r\n     * @returns {any} the received interaction id.\r\n     */\r\n    public get interactionId(): any {\r\n        return this.privTurnStatus.interactionId;\r\n    }\r\n\r\n    /**\r\n     * Gets the conversation identifier associated with this turn status event.\r\n     * @member TurnStatusReceivedEventArgs.prototype.conversationId\r\n     * @function\r\n     * @public\r\n     * @returns {any} the received conversation id.\r\n     */\r\n    public get conversationId(): any {\r\n        return this.privTurnStatus.conversationId;\r\n    }\r\n\r\n    /**\r\n     * Gets the received turn status code.\r\n     * @member TurnStatusReceivedEventArgs.prototype.statusCode\r\n     * @function\r\n     * @public\r\n     * @returns {number} the received turn status.\r\n     */\r\n    public get statusCode(): number {\r\n        return this.privTurnStatus.statusCode;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines channels used to pass property settings to service.\r\n * Added in version 1.7.0.\r\n */\r\nexport enum ServicePropertyChannel {\r\n    /**\r\n     * Uses URI query parameter to pass property settings to service.\r\n     */\r\n    UriQueryParameter = 0.\r\n}\r\n","// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Profanity option.\r\n * Added in version 1.7.0.\r\n */\r\nexport enum ProfanityOption {\r\n    Masked = 0,\r\n    Removed = 1,\r\n    Raw = 2\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { InvalidOperationError } from \"../../common/Error\";\r\nimport { marshalPromiseToCallbacks } from \"../../common/Promise\";\r\nimport { AudioStreamFormat, PullAudioInputStreamCallback } from \"../Exports\";\r\nimport { AudioStreamFormatImpl } from \"./AudioStreamFormat\";\r\n\r\ntype AudioDataTypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array;\r\n/**\r\n * Base audio player class\r\n * TODO: Plays only PCM for now.\r\n * @class\r\n */\r\nexport class BaseAudioPlayer {\r\n\r\n    private audioContext: AudioContext = null;\r\n    private gainNode: GainNode = null;\r\n    private audioFormat: AudioStreamFormatImpl;\r\n    private autoUpdateBufferTimer: any = 0;\r\n    private samples: Float32Array;\r\n    private startTime: number;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {AudioStreamFormat} audioFormat audio stream format recognized by the player.\r\n     */\r\n    public constructor(audioFormat?: AudioStreamFormat) {\r\n        if (audioFormat === undefined) {\r\n            audioFormat = AudioStreamFormat.getDefaultInputFormat();\r\n        }\r\n        this.init(audioFormat);\r\n    }\r\n\r\n    /**\r\n     * play Audio sample\r\n     * @param newAudioData audio data to be played.\r\n     */\r\n    public playAudioSample(newAudioData: ArrayBuffer, cb?: () => void, err?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<void> => {\r\n                this.ensureInitializedContext();\r\n                const audioData = this.formatAudioData(newAudioData);\r\n                const newSamplesData = new Float32Array(this.samples.length + audioData.length);\r\n                newSamplesData.set(this.samples, 0);\r\n                newSamplesData.set(audioData, this.samples.length);\r\n                this.samples = newSamplesData;\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * stops audio and clears the buffers\r\n     */\r\n    public stopAudio(cb?: () => void, err?: (error: string) => void): void {\r\n        if (this.audioContext !== null) {\r\n            this.samples = new Float32Array();\r\n            clearInterval(this.autoUpdateBufferTimer);\r\n            this.audioContext.close().then(() => {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            }, (error: string) => {\r\n                if (!!err) {\r\n                    err(error);\r\n                }\r\n            });\r\n            this.audioContext = null;\r\n        }\r\n    }\r\n\r\n    private init(audioFormat: AudioStreamFormat): void {\r\n        this.audioFormat = audioFormat as AudioStreamFormatImpl;\r\n        this.samples = new Float32Array();\r\n    }\r\n\r\n    private ensureInitializedContext(): void {\r\n        if (this.audioContext === null) {\r\n            this.createAudioContext();\r\n            const timerPeriod = 200;\r\n            this.autoUpdateBufferTimer = setInterval(() => {\r\n                this.updateAudioBuffer();\r\n            }, timerPeriod);\r\n        }\r\n    }\r\n\r\n    private createAudioContext(): void {\r\n        // new ((window as any).AudioContext || (window as any).webkitAudioContext)();\r\n        this.audioContext = AudioStreamFormatImpl.getAudioContext();\r\n\r\n        // TODO: Various examples shows this gain node, it does not seem to be needed unless we plan\r\n        // to control the volume, not likely\r\n        this.gainNode = this.audioContext.createGain();\r\n        this.gainNode.gain.value = 1;\r\n        this.gainNode.connect(this.audioContext.destination);\r\n        this.startTime = this.audioContext.currentTime;\r\n    }\r\n\r\n    private formatAudioData(audioData: ArrayBuffer): Float32Array {\r\n        switch (this.audioFormat.bitsPerSample) {\r\n            case 8:\r\n                return this.formatArrayBuffer(new Int8Array(audioData), 128);\r\n            case 16:\r\n                return this.formatArrayBuffer(new Int16Array(audioData), 32768);\r\n            case 32:\r\n                return this.formatArrayBuffer(new Int32Array(audioData), 2147483648);\r\n            default:\r\n                throw new InvalidOperationError(\"Only WAVE_FORMAT_PCM (8/16/32 bps) format supported at this time\");\r\n        }\r\n    }\r\n\r\n    private formatArrayBuffer(audioData: AudioDataTypedArray, maxValue: number): Float32Array {\r\n        const float32Data = new Float32Array(audioData.length);\r\n        for (let i = 0; i < audioData.length; i++) {\r\n            float32Data[i] = audioData[i] / maxValue;\r\n        }\r\n        return float32Data;\r\n    }\r\n\r\n    private updateAudioBuffer(): void {\r\n        if (this.samples.length === 0) {\r\n            return;\r\n        }\r\n\r\n        const channelCount = this.audioFormat.channels;\r\n        const bufferSource = this.audioContext.createBufferSource();\r\n        const frameCount = this.samples.length / channelCount;\r\n        const audioBuffer = this.audioContext.createBuffer(channelCount, frameCount, this.audioFormat.samplesPerSec);\r\n\r\n        // TODO: Should we do the conversion in the pushAudioSample instead?\r\n        for (let channel = 0; channel < channelCount; channel++) {\r\n            // Fill in individual channel data\r\n            let channelOffset = channel;\r\n            const audioData = audioBuffer.getChannelData(channel);\r\n            for (let i = 0; i < this.samples.length; i++, channelOffset += channelCount) {\r\n                audioData[i] = this.samples[channelOffset];\r\n            }\r\n        }\r\n\r\n        if (this.startTime < this.audioContext.currentTime) {\r\n            this.startTime = this.audioContext.currentTime;\r\n        }\r\n\r\n        bufferSource.buffer = audioBuffer;\r\n        bufferSource.connect(this.gainNode);\r\n        bufferSource.start(this.startTime);\r\n\r\n        // Make sure we play the next sample after the current one.\r\n        this.startTime += audioBuffer.duration;\r\n\r\n        // Clear the samples for the next pushed data.\r\n        this.samples = new Float32Array();\r\n    }\r\n\r\n    private async playAudio(audioData: ArrayBuffer): Promise<void> {\r\n        if (this.audioContext === null) {\r\n            this.createAudioContext();\r\n        }\r\n        const source: AudioBufferSourceNode = this.audioContext.createBufferSource();\r\n        const destination: AudioDestinationNode = this.audioContext.destination;\r\n        await this.audioContext.decodeAudioData(audioData, (newBuffer: AudioBuffer): void => {\r\n            source.buffer = newBuffer;\r\n            source.connect(destination);\r\n            source.start(0);\r\n        });\r\n    }\r\n}\r\n","//\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.\r\n//\r\n\r\nimport {\r\n    ConnectionMessage,\r\n    SessionEventArgs\r\n} from \"./Exports\";\r\n\r\nexport class ConnectionMessageEventArgs {\r\n\r\n    private privConnectionMessage: ConnectionMessage;\r\n\r\n    constructor(message: ConnectionMessage) {\r\n        this.privConnectionMessage = message;\r\n    }\r\n\r\n    /**\r\n     * Gets the <see cref=\"ConnectionMessage\"/> associated with this <see cref=\"ConnectionMessageEventArgs\"/>.\r\n     */\r\n    public get message(): ConnectionMessage {\r\n        return this.privConnectionMessage;\r\n    }\r\n\r\n    /**\r\n     * Returns a string that represents the connection message event.\r\n     */\r\n    public toString(): string {\r\n        return \"Message: \" + this.privConnectionMessage.toString();\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { VoiceProfileType } from \"./Exports\";\r\n\r\n/**\r\n * Defines Voice Profile class for Speaker Recognition\r\n * @class VoiceProfile\r\n */\r\nexport class VoiceProfile {\r\n    private privId: string;\r\n    private privProfileType: VoiceProfileType;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} profileId - profileId of this Voice Profile.\r\n     * @param {VoiceProfileType} profileType - profileType of this Voice Profile.\r\n     */\r\n    constructor(profileId: string, profileType: VoiceProfileType) {\r\n        this.privId = profileId;\r\n        this.privProfileType = profileType;\r\n    }\r\n\r\n    /**\r\n     * profileId of this Voice Profile instance\r\n     * @member VoiceProfile.prototype.profileId\r\n     * @function\r\n     * @public\r\n     * @returns {string} profileId of this Voice Profile instance.\r\n     */\r\n    public get profileId(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    /**\r\n     * profileType of this Voice Profile instance\r\n     * @member VoiceProfile.prototype.profileType\r\n     * @function\r\n     * @public\r\n     * @returns {VoiceProfileType} profile type of this Voice Profile instance.\r\n     */\r\n    public get profileType(): VoiceProfileType {\r\n        return this.privProfileType;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationErrorCodePropertyName } from \"../common.speech/Exports\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    CancellationDetailsBase,\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyCollection,\r\n    ResultReason,\r\n} from \"./Exports\";\r\n\r\nexport interface EnrollmentResultDetails {\r\n    profileId: string;\r\n    enrollmentsCount: number;\r\n    enrollmentsLength: number;\r\n    enrollmentsSpeechLength: number;\r\n    remainingEnrollmentsCount: number;\r\n    remainingEnrollmentsSpeechLength: number;\r\n    audioLength: number;\r\n    audioSpeechLength: number;\r\n    enrollmentStatus: string;\r\n}\r\n\r\n/**\r\n * Output format\r\n * @class VoiceProfileEnrollmentResult\r\n */\r\nexport class VoiceProfileEnrollmentResult {\r\n    private privReason: ResultReason;\r\n    private privDetails: EnrollmentResultDetails;\r\n    private privProperties: PropertyCollection;\r\n    private privErrorDetails: string;\r\n\r\n    public constructor(reason: ResultReason, json: string, statusText: string) {\r\n        this.privReason = reason;\r\n        this.privProperties = new PropertyCollection();\r\n        if (this.privReason !== ResultReason.Canceled) {\r\n            if (!!json) {\r\n                this.privDetails = JSON.parse(json);\r\n                if (this.privDetails.enrollmentStatus.toLowerCase() === \"enrolling\") {\r\n                    this.privReason = ResultReason.EnrollingVoiceProfile;\r\n                }\r\n            }\r\n        } else {\r\n            this.privErrorDetails = statusText;\r\n            this.privProperties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.ServiceError]);\r\n        }\r\n    }\r\n\r\n    public static FromIdentificationProfileList(json: { profiles: any[] }): VoiceProfileEnrollmentResult[] {\r\n        const results: VoiceProfileEnrollmentResult[] = [];\r\n        for (const item of json.profiles) {\r\n            const reason: ResultReason = item.enrollmentStatus.toLowerCase() === \"enrolling\" ?\r\n                ResultReason.EnrollingVoiceProfile : item.enrollmentStatus.toLowerCase() === \"enrolled\" ?\r\n                ResultReason.EnrolledVoiceProfile : ResultReason.Canceled;\r\n            const result = new VoiceProfileEnrollmentResult(reason, null, null);\r\n            result.privDetails = this.getIdentificationDetails(item);\r\n            results.push(result);\r\n        }\r\n        return results;\r\n    }\r\n\r\n    public static FromVerificationProfileList(json: { profiles: any[] }): VoiceProfileEnrollmentResult[] {\r\n        const results: VoiceProfileEnrollmentResult[] = [];\r\n        for (const item of json.profiles) {\r\n            const reason: ResultReason = item.enrollmentStatus.toLowerCase() === \"enrolling\" ?\r\n                ResultReason.EnrollingVoiceProfile : item.enrollmentStatus.toLowerCase() === \"enrolled\" ?\r\n                ResultReason.EnrolledVoiceProfile : ResultReason.Canceled;\r\n            const result = new VoiceProfileEnrollmentResult(reason, null, null);\r\n            result.privDetails = this.getVerificationDetails(item);\r\n            results.push(result);\r\n        }\r\n        return results;\r\n    }\r\n\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get enrollmentsCount(): number {\r\n        return this.privDetails.enrollmentsCount;\r\n    }\r\n\r\n    public get enrollmentsLength(): number {\r\n        return this.privDetails.enrollmentsLength;\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public get enrollmentResultDetails(): EnrollmentResultDetails {\r\n        return this.privDetails;\r\n    }\r\n\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n\r\n    private static getIdentificationDetails(json: any): any {\r\n        return {\r\n            audioSpeechLength: json.speechTime ? parseFloat(json.speechTime) : 0,\r\n            enrollmentStatus: json.enrollmentStatus,\r\n            enrollmentsLength: json.enrollmentSpeechTime ? parseFloat(json.enrollmentSpeechTime) : 0,\r\n            profileId: json.profileId || json.identificationProfileId,\r\n            remainingEnrollmentSpeechLength: json.remainingEnrollmentSpeechTime ? parseFloat(json.remainingEnrollmentSpeechTime) : 0\r\n        };\r\n    }\r\n\r\n    private static getVerificationDetails(json: any): any {\r\n        return {\r\n            enrollmentStatus: json.enrollmentStatus,\r\n            enrollmentsCount: json.enrollmentsCount,\r\n            profileId: json.profileId || json.verificationProfileId,\r\n            remainingEnrollmentSpeechLength: json.remainingEnrollmentSpeechLength ? parseFloat(json.remainingEnrollmentSpeechLength) : 0,\r\n            remainingEnrollmentsCount: json.remainingEnrollments || json.remainingEnrollmentsCount\r\n        };\r\n    }\r\n}\r\n\r\n/**\r\n * @class VoiceProfileEnrollmentCancellationDetails\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class VoiceProfileEnrollmentCancellationDetails extends CancellationDetailsBase {\r\n\r\n    private constructor(reason: CancellationReason, errorDetails: string, errorCode: CancellationErrorCode) {\r\n        super(reason, errorDetails, errorCode);\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of VoiceProfileEnrollmentCancellationDetails object for the canceled VoiceProfileEnrollmentResult.\r\n     * @member VoiceProfileEnrollmentCancellationDetails.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfileEnrollmentResult} result - The result that was canceled.\r\n     * @returns {VoiceProfileEnrollmentCancellationDetails} The cancellation details object being created.\r\n     */\r\n    public static fromResult(result: VoiceProfileEnrollmentResult): VoiceProfileEnrollmentCancellationDetails {\r\n        const reason = CancellationReason.Error;\r\n        let errorCode: CancellationErrorCode = CancellationErrorCode.NoError;\r\n\r\n        if (!!result.properties) {\r\n            errorCode = (CancellationErrorCode as any)[result.properties.getProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.NoError])];\r\n        }\r\n\r\n        return new VoiceProfileEnrollmentCancellationDetails(reason, result.errorDetails, errorCode);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationErrorCodePropertyName } from \"../common.speech/Exports\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    CancellationDetailsBase,\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyCollection,\r\n    ResultReason,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Output format\r\n * @class VoiceProfileResult\r\n */\r\nexport class VoiceProfileResult {\r\n    private privReason: ResultReason;\r\n    private privProperties: PropertyCollection;\r\n    private privErrorDetails: string;\r\n\r\n    public constructor(reason: ResultReason, statusText: string) {\r\n        this.privReason = reason;\r\n        this.privProperties = new PropertyCollection();\r\n        if (reason === ResultReason.Canceled) {\r\n            Contracts.throwIfNullOrUndefined(statusText, \"statusText\");\r\n            this.privErrorDetails = statusText;\r\n            this.privProperties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.ServiceError]);\r\n        }\r\n    }\r\n\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n}\r\n\r\n/**\r\n * @class VoiceProfileCancellationDetails\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class VoiceProfileCancellationDetails extends CancellationDetailsBase {\r\n\r\n    private constructor(reason: CancellationReason, errorDetails: string, errorCode: CancellationErrorCode) {\r\n        super(reason, errorDetails, errorCode);\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of VoiceProfileCancellationDetails object for the canceled VoiceProfileResult.\r\n     * @member VoiceProfileCancellationDetails.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfileResult} result - The result that was canceled.\r\n     * @returns {VoiceProfileCancellationDetails} The cancellation details object being created.\r\n     */\r\n    public static fromResult(result: VoiceProfileResult): VoiceProfileCancellationDetails {\r\n        const reason = CancellationReason.Error;\r\n        let errorCode: CancellationErrorCode = CancellationErrorCode.NoError;\r\n\r\n        if (!!result.properties) {\r\n            errorCode = (CancellationErrorCode as any)[result.properties.getProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.NoError])];\r\n        }\r\n\r\n        return new VoiceProfileCancellationDetails(reason, result.errorDetails, errorCode);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    ResultReason,\r\n    VoiceProfileResult\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Output format\r\n * @class VoiceProfileAuthorizationPhraseResult\r\n */\r\nexport class VoiceProfileAuthorizationPhraseResult extends VoiceProfileResult {\r\n    private privPhrases: string[] = [];\r\n\r\n    public constructor(reason: ResultReason, statusText: string, json: any) {\r\n        super(reason, statusText);\r\n        Contracts.throwIfNullOrUndefined(json, \"phrases array\");\r\n        for (const item of json) {\r\n            this.privPhrases.push(item.passPhrase);\r\n        }\r\n    }\r\n\r\n    public get phrases(): string[] {\r\n        return this.privPhrases;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IRestResponse,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    Context,\r\n    OS,\r\n    SpeakerIdMessageAdapter,\r\n    SpeakerRecognitionConfig,\r\n} from \"../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../common/Exports\";\r\nimport { AudioConfig, AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    VoiceProfile,\r\n    VoiceProfileAuthorizationPhraseResult,\r\n    VoiceProfileEnrollmentResult,\r\n    VoiceProfileResult,\r\n    VoiceProfileType,\r\n} from \"./Exports\";\r\nimport { SpeechConfig, SpeechConfigImpl } from \"./SpeechConfig\";\r\n\r\n/**\r\n * Defines VoiceProfileClient class for Speaker Recognition\r\n * Handles operations from user for Voice Profile operations (e.g. createProfile, deleteProfile)\r\n * @class VoiceProfileClient\r\n */\r\nexport class VoiceProfileClient {\r\n    protected privProperties: PropertyCollection;\r\n    private privAdapter: SpeakerIdMessageAdapter;\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member VoiceProfileClient.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member VoiceProfileClient.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this VoiceProfileClient.\r\n     * @member VoiceProfileClient.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this VoiceProfileClient.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * VoiceProfileClient constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - An set of initial properties for this synthesizer (authentication key, region, &c)\r\n     */\r\n    public constructor(speechConfig: SpeechConfig) {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        Contracts.throwIfNull(speechConfigImpl, \"speechConfig\");\r\n\r\n        this.privProperties = speechConfigImpl.properties.clone();\r\n        this.implClientSetup();\r\n    }\r\n\r\n    /**\r\n     * Create a speaker recognition voice profile\r\n     * @member VoiceProfileClient.prototype.createProfileAsync\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfileType} profileType Type of Voice Profile to be created\r\n     *        specifies the keyword to be recognized.\r\n     * @param {string} lang Language string (locale) for Voice Profile\r\n     * @param cb - Callback invoked once Voice Profile has been created.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public createProfileAsync(profileType: VoiceProfileType, lang: string, cb?: (e: VoiceProfile) => void, err?: (e: string) => void): void {\r\n\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfile> => {\r\n            const result: IRestResponse = await this.privAdapter.createProfile(profileType, lang);\r\n            const response: { profileId: string } = result.json();\r\n            const profile = new VoiceProfile(response.profileId, profileType);\r\n            return profile;\r\n        })(), cb, err);\r\n    }\r\n     /**\r\n      * Get current information of a voice profile\r\n      * @member VoiceProfileClient.prototype.retrieveEnrollmentResultAsync\r\n      * @function\r\n      * @public\r\n      * @param {VoiceProfile} profile Voice Profile to retrieve info for\r\n      * @param cb - Callback invoked once Voice Profile has been created.\r\n      * @param err - Callback invoked in case of an error.\r\n      */\r\n    public retrieveEnrollmentResultAsync(profile: VoiceProfile, cb?: (e: VoiceProfileEnrollmentResult) => void, err?: (e: string) => void): void {\r\n                marshalPromiseToCallbacks((async (): Promise<VoiceProfileEnrollmentResult> => {\r\n            const result: IRestResponse = await this.privAdapter.getProfileStatus(profile);\r\n            return new VoiceProfileEnrollmentResult(\r\n                result.ok ? ResultReason.EnrolledVoiceProfile : ResultReason.Canceled,\r\n                result.data,\r\n                result.statusText,\r\n            );\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Get all voice profiles on account with given voice profile type\r\n     * @member VoiceProfileClient.prototype.getAllProfilesAsync\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfileType} profileType profile type (identification/verification) for which to list profiles\r\n     * @param cb - Callback invoked once Profile list has been returned.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public getAllProfilesAsync(profileType: VoiceProfileType, cb?: (e: VoiceProfileEnrollmentResult[]) => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfileEnrollmentResult[]> => {\r\n            const result: IRestResponse = await this.privAdapter.getProfiles(profileType);\r\n            if (profileType === VoiceProfileType.TextIndependentIdentification) {\r\n                return VoiceProfileEnrollmentResult.FromIdentificationProfileList(result.json());\r\n            }\r\n            return VoiceProfileEnrollmentResult.FromVerificationProfileList(result.json());\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Get valid authorization phrases for voice profile enrollment\r\n     * @member VoiceProfileClient.prototype.getAuthorizationPhrasesAsync\r\n     * @function\r\n     * @public\r\n     * @param {string} lang Language string (locale) for Voice Profile\r\n     * @param cb - Callback invoked once phrases have been returned.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public getAuthorizationPhrasesAsync(lang: string, cb?: (e: VoiceProfileAuthorizationPhraseResult) => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfileAuthorizationPhraseResult> => {\r\n            const result: IRestResponse = await this.privAdapter.getAuthorizationPhrases(lang);\r\n            return new VoiceProfileAuthorizationPhraseResult(\r\n                result.ok ? ResultReason.EnrollingVoiceProfile : ResultReason.Canceled,\r\n                result.statusText,\r\n                result.json()\r\n            );\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Create a speaker recognition voice profile\r\n     * @member VoiceProfileClient.prototype.enrollProfileAsync\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfile} profile Voice Profile to create enrollment for\r\n     * @param {AudioConfig} audioConfig source info from which to create enrollment\r\n     * @param cb - Callback invoked once Enrollment request has been submitted.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public enrollProfileAsync(profile: VoiceProfile, audioConfig: AudioConfig, cb?: (e: VoiceProfileEnrollmentResult) => void, err?: (e: string) => void): void {\r\n        const configImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n        Contracts.throwIfNullOrUndefined(configImpl, \"audioConfig\");\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfileEnrollmentResult> => {\r\n            const result: IRestResponse = await this.privAdapter.createEnrollment(profile, configImpl);\r\n            return new VoiceProfileEnrollmentResult(\r\n                result.ok ? ResultReason.EnrolledVoiceProfile : ResultReason.Canceled,\r\n                result.data,\r\n                result.statusText,\r\n            );\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Delete a speaker recognition voice profile\r\n     * @member VoiceProfileClient.prototype.deleteProfileAsync\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfile} profile Voice Profile to be deleted\r\n     * @param cb - Callback invoked once Voice Profile has been deleted.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public deleteProfileAsync(profile: VoiceProfile, cb?: (response: VoiceProfileResult) => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfileResult> => {\r\n            const result: IRestResponse = await this.privAdapter.deleteProfile(profile);\r\n            return this.getResult(result, ResultReason.DeletedVoiceProfile);\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Remove all enrollments for a speaker recognition voice profile\r\n     * @member VoiceProfileClient.prototype.resetProfileAsync\r\n     * @function\r\n     * @public\r\n     * @param {VoiceProfile} profile Voice Profile to be reset\r\n     * @param cb - Callback invoked once Voice Profile has been reset.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public resetProfileAsync(profile: VoiceProfile, cb?: (response: VoiceProfileResult) => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<VoiceProfileResult> => {\r\n            const result: IRestResponse = await this.privAdapter.resetProfile(profile);\r\n            return this.getResult(result, ResultReason.ResetVoiceProfile);\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Included for compatibility\r\n     * @member VoiceProfileClient.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        return;\r\n    }\r\n\r\n    // Does class setup, swiped from Recognizer.\r\n    protected implClientSetup(): void {\r\n\r\n        let osPlatform = (typeof window !== \"undefined\") ? \"Browser\" : \"Node\";\r\n        let osName = \"unknown\";\r\n        let osVersion = \"unknown\";\r\n\r\n        if (typeof navigator !== \"undefined\") {\r\n            osPlatform = osPlatform + \"/\" + navigator.platform;\r\n            osName = navigator.userAgent;\r\n            osVersion = navigator.appVersion;\r\n        }\r\n\r\n        const recognizerConfig =\r\n            new SpeakerRecognitionConfig(\r\n                new Context(new OS(osPlatform, osName, osVersion)),\r\n                this.privProperties);\r\n\r\n        this.privAdapter = new SpeakerIdMessageAdapter(recognizerConfig);\r\n    }\r\n\r\n    private getResult(result: IRestResponse, successReason: ResultReason, cb?: (response: VoiceProfileResult) => void): VoiceProfileResult {\r\n        const response: VoiceProfileResult =\r\n            new VoiceProfileResult(\r\n                result.ok ? successReason : ResultReason.Canceled,\r\n                result.statusText\r\n            );\r\n        return (response);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IRestResponse,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    Context,\r\n    OS,\r\n    SpeakerIdMessageAdapter,\r\n    SpeakerRecognitionConfig,\r\n} from \"../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../common/Exports\";\r\nimport { AudioConfig, AudioConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeakerIdentificationModel,\r\n    SpeakerRecognitionResult,\r\n    SpeakerRecognitionResultType,\r\n    SpeakerVerificationModel,\r\n} from \"./Exports\";\r\nimport { SpeechConfig, SpeechConfigImpl } from \"./SpeechConfig\";\r\n\r\n/**\r\n * Defines SpeakerRecognizer class for Speaker Recognition\r\n * Handles operations from user for Voice Profile operations (e.g. createProfile, deleteProfile)\r\n * @class SpeakerRecognizer\r\n */\r\nexport class SpeakerRecognizer {\r\n    protected privProperties: PropertyCollection;\r\n    private privAdapter: SpeakerIdMessageAdapter;\r\n    private privAudioConfigImpl: AudioConfigImpl;\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member SpeakerRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member SpeakerRecognizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this SpeakerRecognizer.\r\n     * @member SpeakerRecognizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this SpeakerRecognizer.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * SpeakerRecognizer constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - An set of initial properties for this recognizer (authentication key, region, &c)\r\n     */\r\n    public constructor(speechConfig: SpeechConfig, audioConfig: AudioConfig) {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        Contracts.throwIfNull(speechConfigImpl, \"speechConfig\");\r\n\r\n        this.privAudioConfigImpl = audioConfig as AudioConfigImpl;\r\n        Contracts.throwIfNull(this.privAudioConfigImpl, \"audioConfig\");\r\n\r\n        this.privProperties = speechConfigImpl.properties.clone();\r\n        this.implSRSetup();\r\n    }\r\n\r\n    /**\r\n     * Get recognition result for model using given audio\r\n     * @member SpeakerRecognizer.prototype.recognizeOnceAsync\r\n     * @function\r\n     * @public\r\n     * @param {SpeakerIdentificationModel} model Model containing Voice Profiles to be identified\r\n     * @param cb - Callback invoked once result is returned.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public recognizeOnceAsync(model: SpeakerIdentificationModel | SpeakerVerificationModel, cb?: (e: SpeakerRecognitionResult) => void, err?: (e: string) => void): void {\r\n\r\n        if (model instanceof SpeakerIdentificationModel) {\r\n            const responsePromise: Promise<IRestResponse> = this.privAdapter.identifySpeaker(model, this.privAudioConfigImpl);\r\n            marshalPromiseToCallbacks(this.getResult(responsePromise, SpeakerRecognitionResultType.Identify, undefined), cb, err);\r\n        } else if (model instanceof SpeakerVerificationModel) {\r\n            const responsePromise: Promise<IRestResponse> = this.privAdapter.verifySpeaker(model, this.privAudioConfigImpl);\r\n            marshalPromiseToCallbacks(this.getResult(responsePromise, SpeakerRecognitionResultType.Verify, model.voiceProfile.profileId), cb, err);\r\n        } else {\r\n            throw new Error(\"SpeakerRecognizer.recognizeOnce: Unexpected model type\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Included for compatibility\r\n     * @member SpeakerRecognizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(): void {\r\n        return;\r\n    }\r\n\r\n    // Does class setup, swiped from Recognizer.\r\n    private implSRSetup(): void {\r\n\r\n        let osPlatform = (typeof window !== \"undefined\") ? \"Browser\" : \"Node\";\r\n        let osName = \"unknown\";\r\n        let osVersion = \"unknown\";\r\n\r\n        if (typeof navigator !== \"undefined\") {\r\n            osPlatform = osPlatform + \"/\" + navigator.platform;\r\n            osName = navigator.userAgent;\r\n            osVersion = navigator.appVersion;\r\n        }\r\n\r\n        const recognizerConfig =\r\n            new SpeakerRecognitionConfig(\r\n                new Context(new OS(osPlatform, osName, osVersion)),\r\n                this.privProperties);\r\n\r\n        this.privAdapter = new SpeakerIdMessageAdapter(recognizerConfig);\r\n    }\r\n\r\n    private async getResult(responsePromise: Promise<IRestResponse>, resultType: SpeakerRecognitionResultType, profileId?: string): Promise<SpeakerRecognitionResult> {\r\n        const response: IRestResponse = await responsePromise;\r\n        return new SpeakerRecognitionResult(\r\n            resultType,\r\n            response.data,\r\n            profileId,\r\n            response.ok ? ResultReason.RecognizedSpeaker : ResultReason.Canceled,\r\n        );\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    VoiceProfile,\r\n    VoiceProfileType,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Defines SpeakerIdentificationModel class for Speaker Recognition\r\n * Model contains a set of profiles against which to identify speaker(s)\r\n * @class SpeakerIdentificationModel\r\n */\r\nexport class SpeakerIdentificationModel {\r\n    private privVoiceProfiles: VoiceProfile[] = [];\r\n\r\n    private constructor(profiles: VoiceProfile[]) {\r\n        Contracts.throwIfNullOrUndefined(profiles, \"VoiceProfiles\");\r\n        if (profiles.length === 0) {\r\n            throw new Error(\"Empty Voice Profiles array\");\r\n        }\r\n        profiles.forEach((profile: VoiceProfile) => {\r\n            if (profile.profileType !== VoiceProfileType.TextIndependentIdentification) {\r\n                throw new Error(\"Identification model can only be created from Identification profile: \" + profile.profileId);\r\n            }\r\n            this.privVoiceProfiles.push(profile);\r\n        });\r\n    }\r\n    public static fromProfiles(profiles: VoiceProfile[]): SpeakerIdentificationModel {\r\n        return new SpeakerIdentificationModel(profiles);\r\n    }\r\n\r\n    public get voiceProfileIds(): string {\r\n        return this.privVoiceProfiles.map((profile: VoiceProfile) => profile.profileId).join(\",\");\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    VoiceProfile,\r\n    VoiceProfileType,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Defines SpeakerVerificationModel class for Speaker Recognition\r\n * Model contains a profile against which to verify a speaker\r\n * @class SpeakerVerificationModel\r\n */\r\nexport class SpeakerVerificationModel {\r\n    private privVoiceProfile: VoiceProfile;\r\n\r\n    private constructor(profile: VoiceProfile) {\r\n        Contracts.throwIfNullOrUndefined(profile, \"VoiceProfile\");\r\n        if (profile.profileType === VoiceProfileType.TextIndependentIdentification) {\r\n            throw new Error(\"Verification model cannot be created from Identification profile\");\r\n        }\r\n        this.privVoiceProfile = profile;\r\n    }\r\n\r\n    public static fromProfile(profile: VoiceProfile): SpeakerVerificationModel {\r\n        return new SpeakerVerificationModel(profile);\r\n    }\r\n\r\n    public get voiceProfile(): VoiceProfile {\r\n        return this.privVoiceProfile;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { AutoDetectSourceLanguagesOpenRangeOptionName } from \"../common.speech/Exports\";\r\nimport {Contracts} from \"./Contracts\";\r\nimport {\r\n    PropertyCollection,\r\n    PropertyId,\r\n    SourceLanguageConfig,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Language auto detect configuration.\r\n * @class AutoDetectSourceLanguageConfig\r\n * Added in version 1.13.0.\r\n */\r\nexport class AutoDetectSourceLanguageConfig {\r\n    private privProperties: PropertyCollection;\r\n\r\n    private constructor() {\r\n        this.privProperties = new PropertyCollection();\r\n    }\r\n\r\n    /**\r\n     * @member AutoDetectSourceLanguageConfig.fromOpenRange\r\n     * @function\r\n     * @public\r\n     * Only [[SpeechSynthesizer]] supports source language auto detection from open range,\r\n     * for [[Recognizer]], please use AutoDetectSourceLanguageConfig with specific source languages.\r\n     * @return {AutoDetectSourceLanguageConfig} Instance of AutoDetectSourceLanguageConfig\r\n     * @summary Creates an instance of the AutoDetectSourceLanguageConfig with open range.\r\n     */\r\n    public static fromOpenRange(): AutoDetectSourceLanguageConfig {\r\n        const config = new AutoDetectSourceLanguageConfig();\r\n        config.properties.setProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages, AutoDetectSourceLanguagesOpenRangeOptionName);\r\n        return config;\r\n    }\r\n\r\n    /**\r\n     * @member AutoDetectSourceLanguageConfig.fromLanguages\r\n     * @function\r\n     * @public\r\n     * @param {string[]} languages Comma-separated string of languages (eg. \"en-US,fr-FR\") to populate properties of config.\r\n     * @return {AutoDetectSourceLanguageConfig} Instance of AutoDetectSourceLanguageConfig\r\n     * @summary Creates an instance of the AutoDetectSourceLanguageConfig with given languages.\r\n     */\r\n    public static fromLanguages(languages: string[]): AutoDetectSourceLanguageConfig {\r\n        Contracts.throwIfArrayEmptyOrWhitespace(languages, \"languages\");\r\n        const config = new AutoDetectSourceLanguageConfig();\r\n        config.properties.setProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages, languages.join());\r\n        return config;\r\n    }\r\n\r\n    /**\r\n     * @member AutoDetectSourceLanguageConfig.fromSourceLanguageConfigs\r\n     * @function\r\n     * @public\r\n     * @param {SourceLanguageConfig[]} configs SourceLanguageConfigs to populate properties of config.\r\n     * @return {AutoDetectSourceLanguageConfig} Instance of AutoDetectSourceLanguageConfig\r\n     * @summary Creates an instance of the AutoDetectSourceLanguageConfig with given SourceLanguageConfigs.\r\n     */\r\n    public static fromSourceLanguageConfigs(configs: SourceLanguageConfig[]): AutoDetectSourceLanguageConfig {\r\n        if (configs.length < 1) {\r\n            throw new Error(\"Expected non-empty SourceLanguageConfig array.\");\r\n        }\r\n        const autoConfig = new AutoDetectSourceLanguageConfig();\r\n        const langs: string[] = [];\r\n        configs.forEach((config: SourceLanguageConfig) => {\r\n            langs.push(config.language);\r\n            if (config.endpointId !== undefined && config.endpointId !== \"\") {\r\n                const customProperty = config.language + PropertyId.SpeechServiceConnection_EndpointId.toString();\r\n                autoConfig.properties.setProperty(customProperty, config.endpointId);\r\n            }\r\n        });\r\n        autoConfig.properties.setProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages, langs.join());\r\n\r\n        return autoConfig;\r\n    }\r\n\r\n    /**\r\n     * @member AutoDetectSourceLanguageConfig.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @return {PropertyCollection} Properties of the config.\r\n     * @summary Gets an auto detected language config properties\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    SpeechRecognitionResult,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Output format\r\n * @class AutoDetectSourceLanguageResult\r\n */\r\nexport class AutoDetectSourceLanguageResult {\r\n\r\n    private privLanguage: string;\r\n    private privLanguageDetectionConfidence: string;\r\n\r\n    private constructor(language: string, languageDetectionConfidence: string) {\r\n        Contracts.throwIfNullOrUndefined(language, \"language\");\r\n        Contracts.throwIfNullOrUndefined(languageDetectionConfidence, \"languageDetectionConfidence\");\r\n        this.privLanguage = language;\r\n        this.privLanguageDetectionConfidence = languageDetectionConfidence;\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of AutoDetectSourceLanguageResult object from a SpeechRecognitionResult instance.\r\n     * @member AutoDetectSourceLanguageResult.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {SpeechRecognitionResult} result - The recognition result.\r\n     * @returns {AutoDetectSourceLanguageResult} AutoDetectSourceLanguageResult object being created.\r\n     */\r\n    public static fromResult(result: SpeechRecognitionResult): AutoDetectSourceLanguageResult {\r\n        return new AutoDetectSourceLanguageResult(result.language, result.languageDetectionConfidence);\r\n    }\r\n\r\n    public get language(): string {\r\n        return this.privLanguage;\r\n    }\r\n\r\n    public get languageDetectionConfidence(): string {\r\n        return this.privLanguageDetectionConfidence;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Contracts } from \"./Contracts\";\r\n\r\n/**\r\n * Source Language configuration.\r\n * @class SourceLanguageConfig\r\n */\r\nexport class SourceLanguageConfig {\r\n    private privLanguage: string;\r\n    private privEndpointId: string;\r\n\r\n    private constructor(language: string, endpointId?: string) {\r\n        Contracts.throwIfNullOrUndefined(language, \"language\");\r\n        this.privLanguage = language;\r\n        this.privEndpointId = endpointId;\r\n    }\r\n\r\n    /**\r\n     * @member SourceLanguageConfig.fromLanguage\r\n     * @function\r\n     * @public\r\n     * @param {string} language language (eg. \"en-US\") value of config.\r\n     * @param {string?} endpointId endpointId of model bound to given language of config.\r\n     * @return {SourceLanguageConfig} Instance of SourceLanguageConfig\r\n     * @summary Creates an instance of the SourceLanguageConfig with the given language and optional endpointId.\r\n     * Added in version 1.13.0.\r\n     */\r\n    public static fromLanguage(language: string, endpointId?: string): SourceLanguageConfig {\r\n        return new SourceLanguageConfig(language, endpointId);\r\n    }\r\n\r\n    public get language(): string {\r\n        return this.privLanguage;\r\n    }\r\n\r\n    public get endpointId(): string {\r\n        return this.privEndpointId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { CancellationErrorCodePropertyName } from \"../common.speech/Exports\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    CancellationDetailsBase,\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n} from \"./Exports\";\r\n\r\nexport enum SpeakerRecognitionResultType {\r\n    Verify,\r\n    Identify\r\n}\r\n/**\r\n * Output format\r\n * @class SpeakerRecognitionResult\r\n */\r\nexport class SpeakerRecognitionResult {\r\n    private privReason: ResultReason;\r\n    private privProperties: PropertyCollection;\r\n    private privProfileId: string;\r\n    private privScore: number;\r\n    private privErrorDetails: string;\r\n\r\n    public constructor(resultType: SpeakerRecognitionResultType, data: string, profileId: string, resultReason: ResultReason = ResultReason.RecognizedSpeaker) {\r\n        this.privProperties = new PropertyCollection();\r\n        this.privReason = resultReason;\r\n        if (this.privReason !== ResultReason.Canceled) {\r\n            if (resultType === SpeakerRecognitionResultType.Identify) {\r\n                const json: { identifiedProfile: { profileId: string, score: number } } = JSON.parse(data);\r\n                Contracts.throwIfNullOrUndefined(json, \"JSON\");\r\n                this.privProfileId = json.identifiedProfile.profileId;\r\n                this.privScore = json.identifiedProfile.score;\r\n            } else {\r\n                const json: { recognitionResult: string, score: number } = JSON.parse(data);\r\n                Contracts.throwIfNullOrUndefined(json, \"JSON\");\r\n                this.privScore = json.score;\r\n                if (json.recognitionResult.toLowerCase() !== \"accept\") {\r\n                    this.privReason = ResultReason.NoMatch;\r\n                }\r\n                if (profileId !== undefined && profileId !== \"\") {\r\n                    this.privProfileId = profileId;\r\n                }\r\n            }\r\n        } else {\r\n            const json: { statusText: string } = JSON.parse(data);\r\n            Contracts.throwIfNullOrUndefined(json, \"JSON\");\r\n            this.privErrorDetails = json.statusText;\r\n            this.privProperties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.ServiceError]);\r\n        }\r\n        this.privProperties.setProperty(PropertyId.SpeechServiceResponse_JsonResult, data);\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get profileId(): string {\r\n        return this.privProfileId;\r\n    }\r\n\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n\r\n    public get score(): number {\r\n        return this.privScore;\r\n    }\r\n}\r\n\r\n/**\r\n * @class SpeakerRecognitionCancellationDetails\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeakerRecognitionCancellationDetails extends CancellationDetailsBase {\r\n\r\n    private constructor(reason: CancellationReason, errorDetails: string, errorCode: CancellationErrorCode) {\r\n        super(reason, errorDetails, errorCode);\r\n    }\r\n\r\n    /**\r\n     * Creates an instance of SpeakerRecognitionCancellationDetails object for the canceled SpeakerRecognitionResult\r\n     * @member SpeakerRecognitionCancellationDetails.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {SpeakerRecognitionResult} result - The result that was canceled.\r\n     * @returns {SpeakerRecognitionCancellationDetails} The cancellation details object being created.\r\n     */\r\n    public static fromResult(result: SpeakerRecognitionResult): SpeakerRecognitionCancellationDetails {\r\n        const reason = CancellationReason.Error;\r\n        let errorCode: CancellationErrorCode = CancellationErrorCode.NoError;\r\n\r\n        if (!!result.properties) {\r\n            errorCode = (CancellationErrorCode as any)[result.properties.getProperty(CancellationErrorCodePropertyName, CancellationErrorCode[CancellationErrorCode.NoError])];\r\n        }\r\n\r\n        return new SpeakerRecognitionCancellationDetails(reason, result.errorDetails, errorCode);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport {\r\n    ConversationConnectionConfig,\r\n    ConversationManager,\r\n    ConversationReceivedTranslationEventArgs,\r\n    ConversationRecognizer,\r\n    ConversationRecognizerFactory,\r\n    ConversationTranslatorCommandTypes,\r\n    ConversationTranslatorMessageTypes,\r\n    IInternalConversation,\r\n    IInternalParticipant,\r\n    InternalParticipants,\r\n    LockRoomEventArgs,\r\n    MuteAllEventArgs,\r\n    ParticipantAttributeEventArgs,\r\n    ParticipantEventArgs,\r\n    ParticipantsListEventArgs,\r\n    TranscriberRecognizer\r\n} from \"../../common.speech/Exports\";\r\nimport {\r\n    IDisposable,\r\n    IErrorMessages,\r\n    marshalPromiseToCallbacks\r\n} from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport {\r\n    Connection,\r\n    ConnectionEventArgs,\r\n    ConversationExpirationEventArgs,\r\n    ConversationParticipantsChangedEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    ConversationTranslationEventArgs,\r\n    ConversationTranslator,\r\n    Participant,\r\n    ParticipantChangedReason,\r\n    ProfanityOption,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    SpeechTranslationConfig,\r\n} from \"../Exports\";\r\nimport { SpeechTranslationConfigImpl } from \"../SpeechTranslationConfig\";\r\nimport { Callback, ConversationInfo, IConversation } from \"./IConversation\";\r\nimport { IParticipant, IUser, TranscriptionParticipant } from \"./IParticipant\";\r\n\r\nexport abstract class Conversation implements IConversation {\r\n\r\n    public abstract get authorizationToken(): string;\r\n    public abstract set authorizationToken(value: string);\r\n\r\n    public abstract get config(): SpeechTranslationConfig;\r\n\r\n    public abstract get conversationId(): string;\r\n    public abstract get conversationInfo(): ConversationInfo;\r\n    public abstract get properties(): PropertyCollection;\r\n    public abstract get speechRecognitionLanguage(): string;\r\n    public abstract get participants(): Participant[];\r\n\r\n    protected constructor() { }\r\n\r\n    /**\r\n     * Create a conversation\r\n     * @param speechConfig\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public static createConversationAsync(speechConfig: SpeechTranslationConfig, arg2?: string | Callback, arg3?: Callback, arg4?: Callback): Conversation {\r\n        Contracts.throwIfNullOrUndefined(speechConfig, ConversationConnectionConfig.restErrors.invalidArgs.replace(\"{arg}\", \"config\"));\r\n        Contracts.throwIfNullOrUndefined(speechConfig.region, ConversationConnectionConfig.restErrors.invalidArgs.replace(\"{arg}\", \"SpeechServiceConnection_Region\"));\r\n        if (!speechConfig.subscriptionKey && !speechConfig.getProperty(PropertyId[PropertyId.SpeechServiceAuthorization_Token])) {\r\n            Contracts.throwIfNullOrUndefined(speechConfig.subscriptionKey, ConversationConnectionConfig.restErrors.invalidArgs.replace(\"{arg}\", \"SpeechServiceConnection_Key\"));\r\n        }\r\n        if (typeof arg2 === \"string\") {\r\n            const conversationImpl: ConversationImpl = new ConversationImpl(speechConfig, arg2);\r\n            marshalPromiseToCallbacks((async (): Promise<void> => { return; })(), arg3, arg4);\r\n            return conversationImpl;\r\n        } else {\r\n            const conversationImpl: ConversationImpl = new ConversationImpl(speechConfig);\r\n            const cb: Callback = arg2;\r\n            const err: Callback = arg3;\r\n            conversationImpl.createConversationAsync(\r\n                (() => {\r\n                    if (!!cb) {\r\n                        cb();\r\n                    }\r\n                }),\r\n                (error: any) => {\r\n                    if (!!err) {\r\n                        err(error);\r\n                    }\r\n                });\r\n            return conversationImpl;\r\n        }\r\n\r\n    }\r\n\r\n    /** Start a conversation. */\r\n    public abstract startConversationAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /** Delete a conversation. After this no one will be able to join the conversation. */\r\n    public abstract deleteConversationAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /** End a conversation. */\r\n    public abstract endConversationAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /** Lock a conversation. This will prevent new participants from joining. */\r\n    public abstract lockConversationAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /** Add Participant to Conversation. */\r\n    public abstract addParticipantAsync(participant: IParticipant, cb?: Callback, err?: Callback): void;\r\n\r\n    /**\r\n     * Mute all other participants in the conversation. After this no other participants will\r\n     * have their speech recognitions broadcast, nor be able to send text messages.\r\n     */\r\n    public abstract muteAllParticipantsAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /**\r\n     * Mute a participant.\r\n     * @param userId A user identifier\r\n     */\r\n    public abstract muteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;\r\n\r\n    /**\r\n     * Remove a participant from a conversation using the user id, Participant or User object\r\n     * @param userId A user identifier\r\n     */\r\n    public abstract removeParticipantAsync(userId: string | IParticipant | IUser, cb?: Callback, err?: Callback): void;\r\n\r\n    /** Unlocks a conversation. */\r\n    public abstract unlockConversationAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /** Unmute all other participants in the conversation. */\r\n    public abstract unmuteAllParticipantsAsync(cb?: Callback, err?: Callback): void;\r\n\r\n    /**\r\n     * Unmute a participant.\r\n     * @param userId A user identifier\r\n     */\r\n    public abstract unmuteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void;\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConversationImpl extends Conversation implements IDisposable {\r\n\r\n    private privConfig: SpeechTranslationConfig;\r\n    private privProperties: PropertyCollection;\r\n    private privLanguage: string;\r\n    private privToken: string;\r\n    private privIsDisposed: boolean = false;\r\n    private privRoom: IInternalConversation;\r\n    private privManager: ConversationManager;\r\n    private privConversationRecognizer: ConversationRecognizer;\r\n    private privIsConnected: boolean = false;\r\n    private privParticipants: InternalParticipants;\r\n    private privIsReady: boolean;\r\n    private privConversationTranslator: ConversationTranslator;\r\n    private privTranscriberRecognizer: TranscriberRecognizer;\r\n    private privErrors: IErrorMessages = ConversationConnectionConfig.restErrors;\r\n    private privConversationId: string = \"\";\r\n    private readonly privTextMessageMaxLength: number;\r\n\r\n    public set conversationTranslator(value: ConversationTranslator) {\r\n        this.privConversationTranslator = value;\r\n    }\r\n\r\n    // get the internal data about a conversation\r\n    public get room(): IInternalConversation {\r\n        return this.privRoom;\r\n    }\r\n\r\n    // get the wrapper for connecting to the websockets\r\n    public get connection(): ConversationRecognizer {\r\n        return this.privConversationRecognizer; // this.privConnection;\r\n    }\r\n\r\n    // get / set the speech auth token\r\n    public get authorizationToken(): string {\r\n        return this.privToken;\r\n    }\r\n\r\n    public set authorizationToken(value: string) {\r\n        Contracts.throwIfNullOrWhitespace(value, \"authorizationToken\");\r\n        this.privToken = value;\r\n    }\r\n\r\n    // get the config\r\n    public get config(): SpeechTranslationConfig {\r\n        return this.privConfig;\r\n    }\r\n\r\n    // get the conversation Id\r\n    public get conversationId(): string {\r\n        return this.privRoom ? this.privRoom.roomId : this.privConversationId;\r\n    }\r\n\r\n    // get the properties\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    // get the speech language\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privLanguage;\r\n    }\r\n\r\n    public get isMutedByHost(): boolean {\r\n        return this.privParticipants.me?.isHost ? false : this.privParticipants.me?.isMuted;\r\n    }\r\n\r\n    public get isConnected(): boolean {\r\n        return this.privIsConnected && this.privIsReady;\r\n    }\r\n\r\n    public get participants(): Participant[] {\r\n        return this.toParticipants(true);\r\n    }\r\n\r\n    public get me(): Participant {\r\n        return this.toParticipant(this.privParticipants.me);\r\n    }\r\n\r\n    public get host(): Participant {\r\n        return this.toParticipant(this.privParticipants.host);\r\n    }\r\n\r\n    /**\r\n     * Create a conversation impl\r\n     * @param speechConfig\r\n     * @param {string} id - optional conversationId\r\n     */\r\n    public constructor(speechConfig: SpeechTranslationConfig, id?: string) {\r\n        super();\r\n        this.privProperties = new PropertyCollection();\r\n        this.privManager = new ConversationManager();\r\n\r\n        // check the speech language\r\n        const language: string = speechConfig.getProperty(PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n        if (!language) {\r\n            speechConfig.setProperty(PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage], ConversationConnectionConfig.defaultLanguageCode);\r\n        }\r\n        this.privLanguage = speechConfig.getProperty(PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n\r\n        if (!id) {\r\n            // check the target language(s)\r\n            if (speechConfig.targetLanguages.length === 0) {\r\n                speechConfig.addTargetLanguage(this.privLanguage);\r\n            }\r\n\r\n            // check the profanity setting: speech and conversationTranslator should be in sync\r\n            const profanity: string = speechConfig.getProperty(PropertyId[PropertyId.SpeechServiceResponse_ProfanityOption]);\r\n            if (!profanity) {\r\n                speechConfig.setProfanity(ProfanityOption.Masked);\r\n            }\r\n            // check the nickname: it should pass this regex: ^\\w+([\\s-][\\w\\(\\)]+)*$\"\r\n            // TODO: specify the regex required. Nicknames must be unique or get the duplicate nickname error\r\n            // TODO: check what the max length is and if a truncation is required or if the service handles it without an error\r\n            let hostNickname: string = speechConfig.getProperty(PropertyId[PropertyId.ConversationTranslator_Name]);\r\n            if (hostNickname === undefined || hostNickname === null || hostNickname.length <= 1 || hostNickname.length > 50) {\r\n                hostNickname = \"Host\";\r\n            }\r\n            speechConfig.setProperty(PropertyId[PropertyId.ConversationTranslator_Name], hostNickname);\r\n\r\n        } else {\r\n            this.privConversationId = id;\r\n        }\r\n\r\n        // save the speech config for future usage\r\n        this.privConfig = speechConfig;\r\n\r\n        // save the config properties\r\n        const configImpl = speechConfig as SpeechTranslationConfigImpl;\r\n        Contracts.throwIfNull(configImpl, \"speechConfig\");\r\n        this.privProperties = configImpl.properties.clone();\r\n        this.privIsConnected = false;\r\n        this.privParticipants = new InternalParticipants();\r\n        this.privIsReady = false;\r\n        this.privTextMessageMaxLength = 1000;\r\n    }\r\n\r\n    /**\r\n     * Create a new conversation as Host\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public createConversationAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            if (!!this.privConversationRecognizer) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedStart), err);\r\n            }\r\n            this.privManager.createOrJoin(this.privProperties, undefined,\r\n                ((room: IInternalConversation) => {\r\n                    if (!room) {\r\n                        this.handleError(new Error(this.privErrors.permissionDeniedConnect), err);\r\n                    }\r\n                    this.privRoom = room;\r\n                    this.handleCallback(cb, err);\r\n                }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Starts a new conversation as host.\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public startConversationAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            // check if there is already a recognizer\r\n            if (!!this.privConversationRecognizer) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedStart), err);\r\n            }\r\n            // check if there is conversation data available\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedConnect);\r\n            // connect to the conversation websocket\r\n            this.privParticipants.meId = this.privRoom.participantId;\r\n            this.privConversationRecognizer = ConversationRecognizerFactory.fromConfig(this.privConfig);\r\n\r\n            // Because ConversationTranslator manually sets up and manages the connection, Conversation\r\n            // has to forward serviceRecognizer connection events that usually get passed automatically\r\n            this.privConversationRecognizer.connected = this.onConnected;\r\n            this.privConversationRecognizer.disconnected = this.onDisconnected;\r\n            this.privConversationRecognizer.canceled = this.onCanceled;\r\n\r\n            this.privConversationRecognizer.participantUpdateCommandReceived = this.onParticipantUpdateCommandReceived;\r\n            this.privConversationRecognizer.lockRoomCommandReceived = this.onLockRoomCommandReceived;\r\n            this.privConversationRecognizer.muteAllCommandReceived = this.onMuteAllCommandReceived;\r\n            this.privConversationRecognizer.participantJoinCommandReceived = this.onParticipantJoinCommandReceived;\r\n            this.privConversationRecognizer.participantLeaveCommandReceived = this.onParticipantLeaveCommandReceived;\r\n            this.privConversationRecognizer.translationReceived = this.onTranslationReceived;\r\n            this.privConversationRecognizer.participantsListReceived = this.onParticipantsListReceived;\r\n            this.privConversationRecognizer.conversationExpiration = this.onConversationExpiration;\r\n            this.privConversationRecognizer.connect(this.privRoom.token,\r\n                (() => {\r\n                    this.handleCallback(cb, err);\r\n                }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Join a conversation as a participant.\r\n     * @param { IParticipant } participant - participant to add\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public addParticipantAsync(participant: IParticipant, cb?: Callback, err?: Callback): void {\r\n        Contracts.throwIfNullOrUndefined(participant, \"Participant\");\r\n        marshalPromiseToCallbacks(this.addParticipantImplAsync(participant), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Join a conversation as a participant.\r\n     * @param conversation\r\n     * @param nickname\r\n     * @param lang\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public joinConversationAsync(conversationId: string, nickname: string, lang: string, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            // TODO\r\n            // if (!!this.privConversationRecognizer) {\r\n            //     throw new Error(this.privErrors.permissionDeniedStart);\r\n            // }\r\n            Contracts.throwIfNullOrWhitespace(conversationId, this.privErrors.invalidArgs.replace(\"{arg}\", \"conversationId\"));\r\n            Contracts.throwIfNullOrWhitespace(nickname, this.privErrors.invalidArgs.replace(\"{arg}\", \"nickname\"));\r\n            Contracts.throwIfNullOrWhitespace(lang, this.privErrors.invalidArgs.replace(\"{arg}\", \"language\"));\r\n            // join the conversation\r\n            this.privManager.createOrJoin(this.privProperties, conversationId,\r\n                ((room: IInternalConversation) => {\r\n                    Contracts.throwIfNullOrUndefined(room, this.privErrors.permissionDeniedConnect);\r\n                    this.privRoom = room;\r\n                    this.privConfig.authorizationToken = room.cognitiveSpeechAuthToken;\r\n                    // join callback\r\n                    if (!!cb) {\r\n                        cb(room.cognitiveSpeechAuthToken);\r\n                    }\r\n                }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Deletes a conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public deleteConversationAsync(cb?: Callback, err?: Callback): void {\r\n        marshalPromiseToCallbacks(this.deleteConversationImplAsync(), cb, err);\r\n    }\r\n\r\n    public async deleteConversationImplAsync(): Promise<void> {\r\n            Contracts.throwIfNullOrUndefined(this.privProperties, this.privErrors.permissionDeniedConnect);\r\n            Contracts.throwIfNullOrWhitespace(this.privRoom.token, this.privErrors.permissionDeniedConnect);\r\n            await this.privManager.leave(this.privProperties, this.privRoom.token);\r\n\r\n            this.dispose();\r\n    }\r\n\r\n    /**\r\n     * Issues a request to close the client websockets\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public endConversationAsync(cb?: Callback, err?: Callback): void {\r\n        marshalPromiseToCallbacks(this.endConversationImplAsync(), cb, err);\r\n    }\r\n\r\n    public endConversationImplAsync(): Promise<void> {\r\n        return this.close(true);\r\n    }\r\n\r\n    /**\r\n     * Issues a request to lock the conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public lockConversationAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            if (!this.canSendAsHost) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedConversation.replace(\"{command}\", \"lock\")), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getLockCommand(true),\r\n                (() => {\r\n                    this.handleCallback(cb, err);\r\n                }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to mute the conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public muteAllParticipantsAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrUndefined(this.privConversationRecognizer, this.privErrors.permissionDeniedSend);\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            // check the user's permissions\r\n            if (!this.canSendAsHost) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedConversation.replace(\"{command}\", \"mute\")), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getMuteAllCommand(true),\r\n                (() => {\r\n                    this.handleCallback(cb, err);\r\n                }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to mute a participant in the conversation\r\n     * @param userId\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public muteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrWhitespace(userId, this.privErrors.invalidArgs.replace(\"{arg}\", \"userId\"));\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            // check the connection is open (host + participant can perform the mute command)\r\n            if (!this.canSend) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedSend), err);\r\n            }\r\n            // if not host, check the participant is not muting another participant\r\n            if (!this.me.isHost && this.me.id !== userId) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedParticipant.replace(\"{command}\", \"mute\")), err);\r\n            }\r\n            // check the user exists\r\n            const exists: number = this.privParticipants.getParticipantIndex(userId);\r\n            if (exists === -1) {\r\n                this.handleError(new Error(this.privErrors.invalidParticipantRequest), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getMuteCommand(userId, true), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to remove a participant from the conversation\r\n     * @param userId\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public removeParticipantAsync(userId: string | IParticipant | IUser, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            if (!!this.privTranscriberRecognizer && userId.hasOwnProperty(\"id\")) {\r\n                // Assume this is a transcription participant\r\n                marshalPromiseToCallbacks(this.removeParticipantImplAsync(userId as IParticipant), cb, err);\r\n            } else {\r\n                Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n                Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n                if (!this.canSendAsHost) {\r\n                    this.handleError(new Error(this.privErrors.permissionDeniedParticipant.replace(\"{command}\", \"remove\")), err);\r\n                }\r\n                let participantId: string = \"\";\r\n                if (typeof userId === \"string\") {\r\n                    participantId = userId as string;\r\n                } else if (userId.hasOwnProperty(\"id\")) {\r\n                    const participant: IParticipant = userId as IParticipant;\r\n                    participantId = participant.id;\r\n                } else if (userId.hasOwnProperty(\"userId\")) {\r\n                    const user: IUser = userId as IUser;\r\n                    participantId = user.userId;\r\n                }\r\n                Contracts.throwIfNullOrWhitespace(participantId, this.privErrors.invalidArgs.replace(\"{arg}\", \"userId\"));\r\n                // check the participant exists\r\n                const index: number = this.participants.findIndex((p: Participant) => p.id === participantId);\r\n                if (index === -1) {\r\n                    this.handleError(new Error(this.privErrors.invalidParticipantRequest), err);\r\n                }\r\n                this.privConversationRecognizer?.sendRequest(this.getEjectCommand(participantId), (() => {\r\n                    this.handleCallback(cb, err);\r\n                }),\r\n                    ((error: any) => {\r\n                        this.handleError(error, err);\r\n                    }));\r\n            }\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to unlock the conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public unlockConversationAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            if (!this.canSendAsHost) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedConversation.replace(\"{command}\", \"unlock\")), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getLockCommand(false), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to unmute all participants in the conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public unmuteAllParticipantsAsync(cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            if (!this.canSendAsHost) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedConversation.replace(\"{command}\", \"unmute all\")), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getMuteAllCommand(false), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Issues a request to unmute a participant in the conversation\r\n     * @param userId\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public unmuteParticipantAsync(userId: string, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrWhitespace(userId, this.privErrors.invalidArgs.replace(\"{arg}\", \"userId\"));\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            // check the connection is open (host + participant can perform the mute command)\r\n            if (!this.canSend) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedSend), err);\r\n            }\r\n            // if not host, check the participant is not muting another participant\r\n            if (!this.me.isHost && this.me.id !== userId) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedParticipant.replace(\"{command}\", \"mute\")), err);\r\n            }\r\n            // check the user exists\r\n            const exists: number = this.privParticipants.getParticipantIndex(userId);\r\n            if (exists === -1) {\r\n                this.handleError(new Error(this.privErrors.invalidParticipantRequest), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getMuteCommand(userId, false), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Send a text message\r\n     * @param message\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public sendTextMessageAsync(message: string, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrWhitespace(message, this.privErrors.invalidArgs.replace(\"{arg}\", \"message\"));\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            if (!this.canSend) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedSend), err);\r\n            }\r\n            // TODO: is a max length check required?\r\n            if (message.length > this.privTextMessageMaxLength) {\r\n                this.handleError(new Error(this.privErrors.invalidArgs.replace(\"{arg}\", \"message length\")), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getMessageCommand(message), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Change nickname\r\n     * @param message\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public changeNicknameAsync(nickname: string, cb?: Callback, err?: Callback): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfDisposed(this.privConversationRecognizer.isDisposed());\r\n            Contracts.throwIfNullOrWhitespace(nickname, this.privErrors.invalidArgs.replace(\"{arg}\", \"nickname\"));\r\n            Contracts.throwIfNullOrUndefined(this.privRoom, this.privErrors.permissionDeniedSend);\r\n            if (!this.canSend) {\r\n                this.handleError(new Error(this.privErrors.permissionDeniedSend), err);\r\n            }\r\n            this.privConversationRecognizer?.sendRequest(this.getChangeNicknameCommand(nickname), (() => {\r\n                this.handleCallback(cb, err);\r\n            }),\r\n                ((error: any) => {\r\n                    this.handleError(error, err);\r\n                }));\r\n        } catch (error) {\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public dispose(reason?: string): void {\r\n        if (this.isDisposed) {\r\n            return;\r\n        }\r\n        this.privIsDisposed = true;\r\n        this.config?.close();\r\n        this.privConfig = undefined;\r\n        this.privLanguage = undefined;\r\n        this.privProperties = undefined;\r\n        this.privRoom = undefined;\r\n        this.privToken = undefined;\r\n        this.privManager = undefined;\r\n        this.privConversationRecognizer = undefined;\r\n        this.privIsConnected = false;\r\n        this.privIsReady = false;\r\n        this.privParticipants = undefined;\r\n    }\r\n\r\n    public get transcriberRecognizer(): TranscriberRecognizer {\r\n        return this.privTranscriberRecognizer;\r\n    }\r\n\r\n    public async connectTranscriberRecognizer(recognizer: TranscriberRecognizer): Promise<void> {\r\n        if (!!this.privTranscriberRecognizer) {\r\n            await this.privTranscriberRecognizer.close();\r\n        }\r\n        this.privTranscriberRecognizer = recognizer;\r\n        this.privTranscriberRecognizer.conversation = this;\r\n    }\r\n\r\n    public get conversationInfo(): ConversationInfo {\r\n        const convId: string = this.conversationId;\r\n        const p: TranscriptionParticipant[] = this.participants.map((part: Participant) => {\r\n            return {\r\n                id: part.id,\r\n                preferredLanguage: part.preferredLanguage,\r\n                voice: part.voice\r\n            };\r\n        });\r\n        const props: { [id: string]: string } = {};\r\n        for (const key of ConversationConnectionConfig.transcriptionEventKeys) {\r\n            const val: string = this.properties.getProperty(key, \"\");\r\n            if (val !== \"\") {\r\n                props[key] = val;\r\n            }\r\n        }\r\n        const info: ConversationInfo = { id: convId, participants: p, conversationProperties: props };\r\n        return info;\r\n    }\r\n\r\n    private addParticipantImplAsync(participant: IParticipant): Promise<void> {\r\n        const newParticipant: IInternalParticipant = this.privParticipants.addOrUpdateParticipant(participant);\r\n        if (newParticipant !== undefined) {\r\n            if (!!this.privTranscriberRecognizer) {\r\n                const conversationInfo = this.conversationInfo;\r\n                conversationInfo.participants = [participant];\r\n                return this.privTranscriberRecognizer.pushConversationEvent(conversationInfo, \"join\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeParticipantImplAsync(participant: IParticipant): Promise<void> {\r\n        this.privParticipants.deleteParticipant(participant.id);\r\n        const conversationInfo = this.conversationInfo;\r\n        conversationInfo.participants = [participant];\r\n        return this.privTranscriberRecognizer.pushConversationEvent(conversationInfo, \"leave\");\r\n    }\r\n\r\n    /** websocket callbacks */\r\n    private onConnected = (e: ConnectionEventArgs): void => {\r\n        this.privIsConnected = true;\r\n        try {\r\n            if (!!this.privConversationTranslator.sessionStarted) {\r\n                this.privConversationTranslator.sessionStarted(this.privConversationTranslator, e);\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onDisconnected = async (e: ConnectionEventArgs): Promise<void> => {\r\n        await this.close(false);\r\n        try {\r\n            if (!!this.privConversationTranslator.sessionStopped) {\r\n                this.privConversationTranslator.sessionStopped(this.privConversationTranslator, e);\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onCanceled = async (r: ConversationRecognizer, e: ConversationTranslationCanceledEventArgs): Promise<void> => {\r\n        await this.close(false); // ?\r\n        try {\r\n            if (!!this.privConversationTranslator.canceled) {\r\n                this.privConversationTranslator.canceled(this.privConversationTranslator, e);\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onParticipantUpdateCommandReceived = (r: ConversationRecognizer, e: ParticipantAttributeEventArgs): void => {\r\n        try {\r\n            const updatedParticipant: any = this.privParticipants.getParticipant(e.id);\r\n            if (updatedParticipant !== undefined) {\r\n\r\n                switch (e.key) {\r\n                    case ConversationTranslatorCommandTypes.changeNickname:\r\n                        updatedParticipant.displayName = e.value;\r\n                        break;\r\n                    case ConversationTranslatorCommandTypes.setUseTTS:\r\n                        updatedParticipant.useTts = e.value;\r\n                        break;\r\n                    case ConversationTranslatorCommandTypes.setProfanityFiltering:\r\n                        updatedParticipant.profanity = e.value;\r\n                        break;\r\n                    case ConversationTranslatorCommandTypes.setMute:\r\n                        updatedParticipant.isMuted = e.value;\r\n                        break;\r\n                    case ConversationTranslatorCommandTypes.setTranslateToLanguages:\r\n                        updatedParticipant.translateToLanguages = e.value;\r\n                        break;\r\n                }\r\n                this.privParticipants.addOrUpdateParticipant(updatedParticipant);\r\n\r\n                if (!!this.privConversationTranslator?.participantsChanged) {\r\n                    this.privConversationTranslator?.participantsChanged(\r\n                        this.privConversationTranslator,\r\n                        new ConversationParticipantsChangedEventArgs(ParticipantChangedReason.Updated,\r\n                            [this.toParticipant(updatedParticipant)], e.sessionId));\r\n                }\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onLockRoomCommandReceived = (r: ConversationRecognizer, e: LockRoomEventArgs): void => {\r\n        // TODO\r\n    }\r\n\r\n    private onMuteAllCommandReceived = (r: ConversationRecognizer, e: MuteAllEventArgs): void => {\r\n        try {\r\n            this.privParticipants.participants.forEach((p: IInternalParticipant) => p.isMuted = (p.isHost ? false : e.isMuted));\r\n            if (!!this.privConversationTranslator?.participantsChanged) {\r\n                this.privConversationTranslator?.participantsChanged(\r\n                    this.privConversationTranslator,\r\n                    new ConversationParticipantsChangedEventArgs(ParticipantChangedReason.Updated,\r\n                        this.toParticipants(false), e.sessionId));\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onParticipantJoinCommandReceived = (r: ConversationRecognizer, e: ParticipantEventArgs): void => {\r\n        try {\r\n            const newParticipant: IInternalParticipant = this.privParticipants.addOrUpdateParticipant(e.participant);\r\n            if (newParticipant !== undefined) {\r\n                if (!!this.privConversationTranslator?.participantsChanged) {\r\n                    this.privConversationTranslator?.participantsChanged(\r\n                        this.privConversationTranslator,\r\n                        new ConversationParticipantsChangedEventArgs(ParticipantChangedReason.JoinedConversation,\r\n                            [this.toParticipant(newParticipant)], e.sessionId));\r\n                }\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onParticipantLeaveCommandReceived = (r: ConversationRecognizer, e: ParticipantEventArgs): void => {\r\n        try {\r\n            const ejectedParticipant: IInternalParticipant = this.privParticipants.getParticipant(e.participant.id);\r\n            if (ejectedParticipant !== undefined) {\r\n                // remove the participant from the internal participants list\r\n                this.privParticipants.deleteParticipant(e.participant.id);\r\n                if (!!this.privConversationTranslator?.participantsChanged) {\r\n                    // notify subscribers that the participant has left the conversation\r\n                    this.privConversationTranslator?.participantsChanged(\r\n                        this.privConversationTranslator,\r\n                        new ConversationParticipantsChangedEventArgs(ParticipantChangedReason.LeftConversation,\r\n                            [this.toParticipant(ejectedParticipant)], e.sessionId));\r\n                }\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onTranslationReceived = (r: ConversationRecognizer, e: ConversationReceivedTranslationEventArgs): void => {\r\n        try {\r\n            switch (e.command) {\r\n                case ConversationTranslatorMessageTypes.final:\r\n                    if (!!this.privConversationTranslator?.transcribed) {\r\n                        this.privConversationTranslator?.transcribed(\r\n                            this.privConversationTranslator,\r\n                            new ConversationTranslationEventArgs(e.payload, undefined, e.sessionId));\r\n                    }\r\n                    break;\r\n                case ConversationTranslatorMessageTypes.partial:\r\n                    if (!!this.privConversationTranslator?.transcribing) {\r\n                        this.privConversationTranslator?.transcribing(\r\n                            this.privConversationTranslator,\r\n                            new ConversationTranslationEventArgs(e.payload, undefined, e.sessionId));\r\n                    }\r\n                    break;\r\n                case ConversationTranslatorMessageTypes.instantMessage:\r\n                    if (!!this.privConversationTranslator?.textMessageReceived) {\r\n                        this.privConversationTranslator?.textMessageReceived(\r\n                            this.privConversationTranslator,\r\n                            new ConversationTranslationEventArgs(e.payload, undefined, e.sessionId));\r\n                    }\r\n                    break;\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onParticipantsListReceived = (r: ConversationRecognizer, e: ParticipantsListEventArgs): void => {\r\n        try {\r\n            // check if the session token needs to be updated\r\n            if (e.sessionToken !== undefined && e.sessionToken !== null) {\r\n                this.privRoom.token = e.sessionToken;\r\n            }\r\n            // save the participants\r\n            this.privParticipants.participants = [...e.participants];\r\n            // enable the conversation\r\n            if (this.privParticipants.me !== undefined) {\r\n                this.privIsReady = true;\r\n            }\r\n            if (!!this.privConversationTranslator?.participantsChanged) {\r\n                this.privConversationTranslator?.participantsChanged(\r\n                    this.privConversationTranslator,\r\n                    new ConversationParticipantsChangedEventArgs(ParticipantChangedReason.JoinedConversation, this.toParticipants(true), e.sessionId));\r\n            }\r\n            // if this is the host, update the nickname if needed\r\n            if (this.me.isHost) {\r\n                const nickname: string = this.privConversationTranslator?.properties.getProperty(PropertyId.ConversationTranslator_Name);\r\n                if (nickname !== undefined && nickname.length > 0 && nickname !== this.me.displayName) {\r\n                    // issue a change nickname request\r\n                    this.changeNicknameAsync(nickname);\r\n                }\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private onConversationExpiration = (r: ConversationRecognizer, e: ConversationExpirationEventArgs): void => {\r\n        try {\r\n            if (!!this.privConversationTranslator?.conversationExpiration) {\r\n                this.privConversationTranslator?.conversationExpiration(\r\n                    this.privConversationTranslator,\r\n                    e);\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private async close(dispose: boolean): Promise<void> {\r\n        try {\r\n            this.privIsConnected = false;\r\n            await this.privConversationRecognizer.close();\r\n            await this.privTranscriberRecognizer?.close();\r\n            this.privConversationRecognizer = undefined;\r\n            this.privConversationTranslator?.dispose();\r\n        } catch (e) {\r\n            // ignore error\r\n        }\r\n        if (dispose) {\r\n            this.dispose();\r\n        }\r\n    }\r\n\r\n    /** Helpers */\r\n    private get canSend(): boolean {\r\n        return this.privIsConnected && !this.privParticipants.me?.isMuted;\r\n    }\r\n\r\n    private get canSendAsHost(): boolean {\r\n        return this.privIsConnected && this.privParticipants.me?.isHost;\r\n    }\r\n\r\n    private handleCallback(cb: any, err: any): void {\r\n        if (!!cb) {\r\n            try {\r\n                cb();\r\n            } catch (e) {\r\n                if (!!err) {\r\n                    err(e);\r\n                }\r\n            }\r\n            cb = undefined;\r\n        }\r\n    }\r\n\r\n    private handleError(error: any, err: any): void {\r\n        if (!!err) {\r\n            if (error instanceof Error) {\r\n                const typedError: Error = error as Error;\r\n                err(typedError.name + \": \" + typedError.message);\r\n\r\n            } else {\r\n                err(error);\r\n            }\r\n        }\r\n    }\r\n\r\n    /** Participant Helpers */\r\n    private toParticipants(includeHost: boolean): Participant[] {\r\n\r\n        const participants: Participant[] = this.privParticipants.participants.map((p: IInternalParticipant) => {\r\n            return this.toParticipant(p);\r\n        });\r\n        if (!includeHost) {\r\n            return participants.filter((p: Participant) => p.isHost === false);\r\n        } else {\r\n            return participants;\r\n        }\r\n    }\r\n\r\n    private toParticipant(p: IInternalParticipant): Participant {\r\n        return new Participant(p.id, p.avatar, p.displayName, p.isHost, p.isMuted, p.isUsingTts, p.preferredLanguage, p.voice);\r\n    }\r\n\r\n    private getMuteAllCommand(isMuted: boolean): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\r\n\r\n        return JSON.stringify({\r\n            command: ConversationTranslatorCommandTypes.setMuteAll,\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: this.privRoom.participantId, // the id of the host\r\n            roomid: this.privRoom.roomId,\r\n            type: ConversationTranslatorMessageTypes.participantCommand,\r\n            value: isMuted\r\n        });\r\n    }\r\n\r\n    private getMuteCommand(participantId: string, isMuted: boolean): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(participantId, \"participantId\");\r\n\r\n        return JSON.stringify({\r\n            command: ConversationTranslatorCommandTypes.setMute,\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: participantId, // the id of the host\r\n            roomid: this.privRoom.roomId,\r\n            type: ConversationTranslatorMessageTypes.participantCommand,\r\n            value: isMuted\r\n        });\r\n    }\r\n\r\n    private getLockCommand(isLocked: boolean): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\r\n\r\n        return JSON.stringify({\r\n            command: ConversationTranslatorCommandTypes.setLockState,\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: this.privRoom.participantId,\r\n            roomid: this.privRoom.roomId,\r\n            type: ConversationTranslatorMessageTypes.participantCommand,\r\n            value: isLocked\r\n        });\r\n    }\r\n\r\n    private getEjectCommand(participantId: string): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(participantId, \"participantId\");\r\n\r\n        return JSON.stringify({\r\n            command: ConversationTranslatorCommandTypes.ejectParticipant,\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: participantId,\r\n            roomid: this.privRoom.roomId,\r\n            type: ConversationTranslatorMessageTypes.participantCommand,\r\n        });\r\n    }\r\n\r\n    private getChangeNicknameCommand(nickname: string): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(nickname, \"nickname\");\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\r\n\r\n        return JSON.stringify({\r\n            command: ConversationTranslatorCommandTypes.changeNickname,\r\n            nickname,\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: this.privRoom.participantId, // the id of the host\r\n            roomid: this.privRoom.roomId,\r\n            type: ConversationTranslatorMessageTypes.participantCommand,\r\n            value: nickname\r\n        });\r\n    }\r\n\r\n    private getMessageCommand(message: string): string {\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.roomId, \"conversationId\");\r\n        Contracts.throwIfNullOrWhitespace(this.privRoom.participantId, \"participantId\");\r\n        Contracts.throwIfNullOrWhitespace(message, \"message\");\r\n\r\n        return JSON.stringify({\r\n            // tslint:disable-next-line: object-literal-shorthand\r\n            participantId: this.privRoom.participantId,\r\n            roomId: this.privRoom.roomId,\r\n            text: message,\r\n            type: ConversationTranslatorMessageTypes.instantMessage\r\n        });\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    AudioConfig,\r\n    SpeechTranslationConfig,\r\n} from \"../Exports\";\r\nimport { Callback, IConversation } from \"./IConversation\";\r\n\r\nexport class ConversationCommon {\r\n\r\n    protected privAudioConfig: AudioConfig;\r\n    protected privSpeechTranslationConfig: SpeechTranslationConfig;\r\n\r\n    public constructor(audioConfig?: AudioConfig) {\r\n        this.privAudioConfig = audioConfig;\r\n    }\r\n\r\n    protected handleCallback(cb: Callback, err: Callback): void {\r\n        if (!!cb) {\r\n            try {\r\n                cb();\r\n            } catch (e) {\r\n                if (!!err) {\r\n                    err(e);\r\n                }\r\n            }\r\n            cb = undefined;\r\n        }\r\n    }\r\n\r\n    protected handleError(error: any, err: Callback): void {\r\n        if (!!err) {\r\n            if (error instanceof Error) {\r\n                const typedError: Error = error as Error;\r\n                err(typedError.name + \": \" + typedError.message);\r\n\r\n            } else {\r\n                err(error);\r\n            }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { SessionEventArgs } from \"../Exports\";\r\n\r\nexport class ConversationExpirationEventArgs extends SessionEventArgs {\r\n    private privExpirationTime: number;\r\n\r\n    constructor(expirationTime: number, sessionId?: string) {\r\n        super(sessionId);\r\n        this.privExpirationTime = expirationTime;\r\n    }\r\n\r\n    /** How much longer until the conversation expires (in minutes). */\r\n    get expirationTime(): number {\r\n        return this.privExpirationTime;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { SessionEventArgs } from \"../Exports\";\r\nimport { ParticipantChangedReason } from \"./Exports\";\r\nimport { IParticipant } from \"./IParticipant\";\r\n\r\nexport class ConversationParticipantsChangedEventArgs extends SessionEventArgs {\r\n    private privReason: ParticipantChangedReason;\r\n    private privParticipant: IParticipant[];\r\n\r\n    public constructor(reason: ParticipantChangedReason, participants: IParticipant[], sessionId?: string) {\r\n        super(sessionId);\r\n        this.privReason = reason;\r\n        this.privParticipant = participants;\r\n    }\r\n\r\n    public get reason(): ParticipantChangedReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    public get participants(): IParticipant[] {\r\n        return this.privParticipant;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { CancellationEventArgsBase } from \"../CancellationEventArgsBase\";\r\n\r\nexport class ConversationTranslationCanceledEventArgs extends CancellationEventArgsBase {\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { RecognitionEventArgs } from \"../Exports\";\r\nimport { ConversationTranslationResult } from \"./Exports\";\r\n\r\nexport class ConversationTranslationEventArgs extends RecognitionEventArgs {\r\n    private privResult: ConversationTranslationResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {ConversationTranslationResult} result - The translation recognition result.\r\n     * @param {number} offset - The offset.\r\n     * @param {string} sessionId - The session id.\r\n     */\r\n    public constructor(result: ConversationTranslationResult, offset?: number, sessionId?: string) {\r\n        super(offset, sessionId);\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Specifies the recognition result.\r\n     * @returns {ConversationTranslationResult} the recognition result.\r\n     */\r\n    public get result(): ConversationTranslationResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { PropertyCollection } from \"../PropertyCollection\";\r\nimport { ResultReason } from \"../ResultReason\";\r\nimport { TranslationRecognitionResult } from \"../TranslationRecognitionResult\";\r\nimport { Translations } from \"../Translations\";\r\n\r\nexport class ConversationTranslationResult extends TranslationRecognitionResult {\r\n    private privId: string;\r\n    private privOrigLang: string;\r\n\r\n    public constructor(participantId: string,\r\n                       translations: Translations,\r\n                       originalLanguage?: string,\r\n                       resultId?: string,\r\n                       reason?: ResultReason,\r\n                       text?: string,\r\n                       duration?: number,\r\n                       offset?: number,\r\n                       errorDetails?: string,\r\n                       json?: string,\r\n                       properties?: PropertyCollection) {\r\n        super(translations, resultId, reason, text, duration, offset, errorDetails, json, properties);\r\n        this.privId = participantId;\r\n        this.privOrigLang = originalLanguage;\r\n    }\r\n\r\n    /**\r\n     * The unique identifier for the participant this result is for.\r\n     */\r\n    public get participantId(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    /**\r\n     * The original language this result was in.\r\n     */\r\n    public get originalLang(): string {\r\n        return this.privOrigLang;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { ConversationConnectionConfig } from \"../../common.speech/Exports\";\r\nimport {\r\n    IDisposable,\r\n    IErrorMessages,\r\n    marshalPromiseToCallbacks\r\n} from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    ProfanityOption,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    SessionEventArgs,\r\n    SpeechTranslationConfig,\r\n    TranslationRecognitionCanceledEventArgs,\r\n    TranslationRecognitionEventArgs,\r\n    TranslationRecognizer\r\n} from \"../Exports\";\r\nimport { ConversationImpl } from \"./Conversation\";\r\nimport {\r\n    ConversationCommon,\r\n    ConversationExpirationEventArgs,\r\n    ConversationHandler,\r\n    ConversationParticipantsChangedEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    ConversationTranslationEventArgs,\r\n    IConversationTranslator,\r\n    Participant,\r\n} from \"./Exports\";\r\nimport { Callback, IConversation } from \"./IConversation\";\r\n\r\nexport enum SpeechState {\r\n    Inactive, Connecting, Connected\r\n}\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\n// child class of TranslationRecognizer meant only for use with ConversationTranslator\r\nclass ConversationTranslationRecognizer extends TranslationRecognizer {\r\n    private privTranslator: ConversationTranslator;\r\n    private privSpeechState: SpeechState;\r\n    public constructor(speechConfig: SpeechTranslationConfig, audioConfig?: AudioConfig, translator?: ConversationTranslator) {\r\n        super(speechConfig, audioConfig);\r\n        this.privSpeechState = SpeechState.Inactive;\r\n        if (!!translator) {\r\n            this.privTranslator = translator;\r\n            this.sessionStarted = () => {\r\n                this.privSpeechState = SpeechState.Connected;\r\n            };\r\n\r\n            this.sessionStopped = () => {\r\n                this.privSpeechState = SpeechState.Inactive;\r\n            };\r\n\r\n            this.recognized = async (tr: TranslationRecognizer, e: TranslationRecognitionEventArgs) => {\r\n                // TODO: add support for getting recognitions from here if own speech\r\n\r\n                // if there is an error connecting to the conversation service from the speech service the error will be returned in the ErrorDetails field.\r\n                if (e.result?.errorDetails) {\r\n                    await this.cancelSpeech();\r\n                    // TODO: format the error message contained in 'errorDetails'\r\n                    this.fireCancelEvent(e.result.errorDetails);\r\n                }\r\n            };\r\n\r\n            this.canceled = async (r: TranslationRecognizer, e: TranslationRecognitionCanceledEventArgs) => {\r\n                if (this.privSpeechState !== SpeechState.Inactive) {\r\n                    try {\r\n                        await this.cancelSpeech();\r\n                    } catch (error) {\r\n                        this.privSpeechState = SpeechState.Inactive;\r\n                    }\r\n                }\r\n            };\r\n        }\r\n    }\r\n    public get state(): SpeechState {\r\n        return this.privSpeechState;\r\n    }\r\n\r\n    public set state(newState: SpeechState) {\r\n        this.privSpeechState = newState;\r\n    }\r\n\r\n    public onConnection(): void {\r\n        this.privSpeechState = SpeechState.Connected;\r\n    }\r\n\r\n    public async onDisconnection(): Promise<void> {\r\n        this.privSpeechState = SpeechState.Inactive;\r\n        await this.cancelSpeech();\r\n    }\r\n\r\n    /**\r\n     * Fire a cancel event\r\n     * @param error\r\n     */\r\n    private fireCancelEvent(error: any): void {\r\n        try {\r\n            if (!!this.privTranslator.canceled) {\r\n                const cancelEvent: ConversationTranslationCanceledEventArgs = new ConversationTranslationCanceledEventArgs(\r\n                    error?.reason ?? CancellationReason.Error,\r\n                    error?.errorDetails ?? error,\r\n                    error?.errorCode ?? CancellationErrorCode.RuntimeError,\r\n                    undefined,\r\n                    error?.sessionId);\r\n\r\n                this.privTranslator.canceled(this.privTranslator, cancelEvent);\r\n            }\r\n        } catch (e) {\r\n            //\r\n        }\r\n    }\r\n\r\n    private async cancelSpeech(): Promise<void> {\r\n        try {\r\n            this.stopContinuousRecognitionAsync();\r\n            await this.privReco?.disconnect();\r\n            this.privSpeechState = SpeechState.Inactive;\r\n        } catch (e) {\r\n            // ignore the error\r\n        }\r\n    }\r\n\r\n}\r\n\r\n/***\r\n * Join, leave or connect to a conversation.\r\n */\r\nexport class ConversationTranslator extends ConversationCommon implements IConversationTranslator, IDisposable {\r\n\r\n    private privSpeechRecognitionLanguage: string;\r\n    private privProperties: PropertyCollection;\r\n    private privIsDisposed: boolean = false;\r\n    private privCTRecognizer: ConversationTranslationRecognizer;\r\n    private privIsSpeaking: boolean = false;\r\n    private privConversation: ConversationImpl;\r\n    private privErrors: IErrorMessages = ConversationConnectionConfig.restErrors;\r\n    private privPlaceholderKey: string = \"abcdefghijklmnopqrstuvwxyz012345\";\r\n    private privPlaceholderRegion: string = \"westus\";\r\n\r\n    public constructor(audioConfig?: AudioConfig) {\r\n        super(audioConfig);\r\n        this.privProperties = new PropertyCollection();\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privSpeechRecognitionLanguage;\r\n    }\r\n\r\n    public get participants(): Participant[] {\r\n        return this.privConversation?.participants;\r\n    }\r\n\r\n    public canceled: (sender: ConversationHandler, event: ConversationTranslationCanceledEventArgs) => void;\r\n    public conversationExpiration: (sender: IConversationTranslator, event: ConversationExpirationEventArgs) => void;\r\n    public participantsChanged: (sender: IConversationTranslator, event: ConversationParticipantsChangedEventArgs) => void;\r\n    public sessionStarted: (sender: ConversationHandler, event: SessionEventArgs) => void;\r\n    public sessionStopped: (sender: ConversationHandler, event: SessionEventArgs) => void;\r\n    public textMessageReceived: (sender: IConversationTranslator, event: ConversationTranslationEventArgs) => void;\r\n    public transcribed: (sender: IConversationTranslator, event: ConversationTranslationEventArgs) => void;\r\n    public transcribing: (sender: IConversationTranslator, event: ConversationTranslationEventArgs) => void;\r\n\r\n    /**\r\n     * Join a conversation. If this is the host, pass in the previously created Conversation object.\r\n     * @param conversation\r\n     * @param nickname\r\n     * @param lang\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public joinConversationAsync(conversation: IConversation, nickname: string, cb?: Callback, err?: Callback): void;\r\n    public joinConversationAsync(conversationId: string, nickname: string, lang: string, cb?: Callback, err?: Callback): void;\r\n    public joinConversationAsync(conversation: any, nickname: string, param1?: string | Callback, param2?: Callback, param3?: Callback): void {\r\n\r\n        try {\r\n\r\n            if (typeof conversation === \"string\") {\r\n\r\n                Contracts.throwIfNullOrUndefined(conversation, this.privErrors.invalidArgs.replace(\"{arg}\", \"conversation id\"));\r\n                Contracts.throwIfNullOrWhitespace(nickname, this.privErrors.invalidArgs.replace(\"{arg}\", \"nickname\"));\r\n\r\n                if (!!this.privConversation) {\r\n                    this.handleError(new Error(this.privErrors.permissionDeniedStart), param3);\r\n                }\r\n\r\n                let lang: string = param1 as string;\r\n                if (lang === undefined || lang === null || lang === \"\") { lang = ConversationConnectionConfig.defaultLanguageCode; }\r\n\r\n                // create a placeholder config\r\n                this.privSpeechTranslationConfig = SpeechTranslationConfig.fromSubscription(\r\n                    this.privPlaceholderKey,\r\n                    this.privPlaceholderRegion);\r\n                this.privSpeechTranslationConfig.setProfanity(ProfanityOption.Masked);\r\n                this.privSpeechTranslationConfig.addTargetLanguage(lang);\r\n                this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage], lang);\r\n                this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.ConversationTranslator_Name], nickname);\r\n\r\n                const endpoint: string = this.privProperties.getProperty(PropertyId.ConversationTranslator_Host);\r\n                if (endpoint) {\r\n                    this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.ConversationTranslator_Host], endpoint);\r\n                }\r\n                const speechEndpointHost: string = this.privProperties.getProperty(PropertyId.SpeechServiceConnection_Host);\r\n                if (speechEndpointHost) {\r\n                    this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.SpeechServiceConnection_Host], speechEndpointHost);\r\n                }\r\n\r\n                // join the conversation\r\n                this.privConversation = new ConversationImpl(this.privSpeechTranslationConfig);\r\n                this.privConversation.conversationTranslator = this;\r\n\r\n                this.privConversation.joinConversationAsync(\r\n                    conversation,\r\n                    nickname,\r\n                    lang,\r\n                    ((result: string) => {\r\n\r\n                        if (!result) {\r\n                            this.handleError(new Error(this.privErrors.permissionDeniedConnect), param3);\r\n                        }\r\n\r\n                        this.privSpeechTranslationConfig.authorizationToken = result;\r\n\r\n                        // connect to the ws\r\n                        this.privConversation.startConversationAsync(\r\n                            (() => {\r\n                                this.handleCallback(param2, param3);\r\n                            }),\r\n                            ((error: any) => {\r\n                                this.handleError(error, param3);\r\n                            }));\r\n\r\n                    }),\r\n                    ((error: any) => {\r\n                        this.handleError(error, param3);\r\n                    }));\r\n\r\n            } else if (typeof conversation === \"object\") {\r\n\r\n                Contracts.throwIfNullOrUndefined(conversation, this.privErrors.invalidArgs.replace(\"{arg}\", \"conversation id\"));\r\n                Contracts.throwIfNullOrWhitespace(nickname, this.privErrors.invalidArgs.replace(\"{arg}\", \"nickname\"));\r\n\r\n                // save the nickname\r\n                this.privProperties.setProperty(PropertyId.ConversationTranslator_Name, nickname);\r\n                // ref the conversation object\r\n                this.privConversation = conversation as ConversationImpl;\r\n                // ref the conversation translator object\r\n                this.privConversation.conversationTranslator = this;\r\n\r\n                Contracts.throwIfNullOrUndefined(this.privConversation, this.privErrors.permissionDeniedConnect);\r\n                Contracts.throwIfNullOrUndefined(this.privConversation.room.token, this.privErrors.permissionDeniedConnect);\r\n\r\n                this.privSpeechTranslationConfig = conversation.config;\r\n\r\n                this.handleCallback(param1 as Callback, param2);\r\n            } else {\r\n                this.handleError(\r\n                    new Error(this.privErrors.invalidArgs.replace(\"{arg}\", \"invalid conversation type\")),\r\n                    param2);\r\n            }\r\n\r\n        } catch (error) {\r\n            this.handleError(error, typeof param1 === \"string\" ? param3 : param2);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Leave the conversation\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public leaveConversationAsync(cb?: Callback, err?: Callback): void {\r\n\r\n        marshalPromiseToCallbacks((async (): Promise<void> => {\r\n\r\n            // stop the speech websocket\r\n            await this.cancelSpeech();\r\n            // stop the websocket\r\n            await this.privConversation.endConversationImplAsync();\r\n            // https delete request\r\n            await this.privConversation.deleteConversationImplAsync();\r\n            this.dispose();\r\n\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Send a text message\r\n     * @param message\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public sendTextMessageAsync(message: string, cb?: Callback, err?: Callback): void {\r\n\r\n        try {\r\n            Contracts.throwIfNullOrUndefined(this.privConversation, this.privErrors.permissionDeniedSend);\r\n            Contracts.throwIfNullOrWhitespace(message, this.privErrors.invalidArgs.replace(\"{arg}\", message));\r\n\r\n            this.privConversation?.sendTextMessageAsync(message, cb, err);\r\n        } catch (error) {\r\n\r\n            this.handleError(error, err);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Start speaking\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public startTranscribingAsync(cb?: Callback, err?: Callback): void {\r\n        marshalPromiseToCallbacks((async (): Promise<void> => {\r\n            try {\r\n                Contracts.throwIfNullOrUndefined(this.privConversation, this.privErrors.permissionDeniedSend);\r\n                Contracts.throwIfNullOrUndefined(this.privConversation.room.token, this.privErrors.permissionDeniedConnect);\r\n\r\n                if (this.privCTRecognizer === undefined) {\r\n                    await this.connectTranslatorRecognizer();\r\n                }\r\n                Contracts.throwIfNullOrUndefined(this.privCTRecognizer, this.privErrors.permissionDeniedSend);\r\n\r\n                if (!this.canSpeak) {\r\n                    this.handleError(new Error(this.privErrors.permissionDeniedSend), err);\r\n                }\r\n\r\n                await this.startContinuousRecognition();\r\n\r\n                this.privIsSpeaking = true;\r\n            } catch (error) {\r\n                this.privIsSpeaking = false;\r\n                await this.cancelSpeech();\r\n                throw error;\r\n            }\r\n        })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * Stop speaking\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    public stopTranscribingAsync(cb?: Callback, err?: Callback): void {\r\n        marshalPromiseToCallbacks((async (): Promise<void> => {\r\n            try {\r\n                if (!this.privIsSpeaking) {\r\n                    // stop speech\r\n                    await this.cancelSpeech();\r\n                    return;\r\n                }\r\n\r\n                // stop the recognition but leave the websocket open\r\n                this.privIsSpeaking = false;\r\n                await new Promise((resolve: () => void, reject: (error: string) => void): void => {\r\n                    this.privCTRecognizer?.stopContinuousRecognitionAsync(resolve, reject);\r\n                });\r\n\r\n            } catch (error) {\r\n                await this.cancelSpeech();\r\n            }\r\n        })(), cb, err);\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public dispose(reason?: string, success?: () => void, err?: (error: string) => void): void {\r\n        marshalPromiseToCallbacks((async (): Promise<void> => {\r\n            if (this.isDisposed && !this.privIsSpeaking) {\r\n                return;\r\n            }\r\n            await this.cancelSpeech();\r\n            this.privIsDisposed = true;\r\n            this.privSpeechTranslationConfig?.close();\r\n            this.privSpeechRecognitionLanguage = undefined;\r\n            this.privProperties = undefined;\r\n            this.privAudioConfig = undefined;\r\n            this.privSpeechTranslationConfig = undefined;\r\n            this.privConversation?.dispose();\r\n            this.privConversation = undefined;\r\n        })(), success, err);\r\n    }\r\n\r\n    /**\r\n     * Cancel the speech websocket\r\n     */\r\n    private async cancelSpeech(): Promise<void> {\r\n        try {\r\n            this.privIsSpeaking = false;\r\n            await this.privCTRecognizer?.onDisconnection();\r\n            this.privCTRecognizer = undefined;\r\n        } catch (e) {\r\n            // ignore the error\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Connect to the speech translation recognizer.\r\n     * Currently there is no language validation performed before sending the SpeechLanguage code to the service.\r\n     * If it's an invalid language the raw error will be: 'Error during WebSocket handshake: Unexpected response code: 400'\r\n     * e.g. pass in 'fr' instead of 'fr-FR', or a text-only language 'cy'\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    private async connectTranslatorRecognizer(): Promise<void> {\r\n        try {\r\n\r\n            if (this.privAudioConfig === undefined) {\r\n                this.privAudioConfig = AudioConfig.fromDefaultMicrophoneInput();\r\n            }\r\n\r\n            // clear the temp subscription key if it's a participant joining\r\n            if (this.privSpeechTranslationConfig.getProperty(PropertyId[PropertyId.SpeechServiceConnection_Key])\r\n                === this.privPlaceholderKey) {\r\n                this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.SpeechServiceConnection_Key], \"\");\r\n            }\r\n\r\n            // TODO\r\n            const token: string = encodeURIComponent(this.privConversation.room.token);\r\n\r\n            let endpointHost: string = this.privSpeechTranslationConfig.getProperty(\r\n                PropertyId[PropertyId.SpeechServiceConnection_Host], ConversationConnectionConfig.speechHost);\r\n            endpointHost = endpointHost.replace(\"{region}\", this.privConversation.room.cognitiveSpeechRegion);\r\n\r\n            const url: string = `wss://${endpointHost}${ConversationConnectionConfig.speechPath}?${ConversationConnectionConfig.configParams.token}=${token}`;\r\n\r\n            this.privSpeechTranslationConfig.setProperty(PropertyId[PropertyId.SpeechServiceConnection_Endpoint], url);\r\n\r\n            this.privCTRecognizer = new ConversationTranslationRecognizer(this.privSpeechTranslationConfig, this.privAudioConfig, this);\r\n        } catch (error) {\r\n            await this.cancelSpeech();\r\n            throw error;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handle the start speaking request\r\n     * @param cb\r\n     * @param err\r\n     */\r\n    private startContinuousRecognition(): Promise<void> {\r\n        return new Promise((resolve: () => void, reject: (error: string) => void): void => {\r\n            this.privCTRecognizer.startContinuousRecognitionAsync(resolve, reject);\r\n        });\r\n    }\r\n\r\n    private get canSpeak(): boolean {\r\n\r\n        // is there a Conversation websocket available and has the Recognizer been set up\r\n        if (!this.privConversation.isConnected || !this.privCTRecognizer) {\r\n            return false;\r\n        }\r\n\r\n        // is the user already speaking\r\n        if (this.privIsSpeaking || this.privCTRecognizer.state === SpeechState.Connected || this.privCTRecognizer.state === SpeechState.Connecting) {\r\n            return false;\r\n        }\r\n\r\n        // is the user muted\r\n        if (this.privConversation.isMutedByHost) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { TranscriberRecognizer } from \"../../common.speech/Exports\";\r\nimport { marshalPromiseToCallbacks } from \"../../common/Exports\";\r\nimport { Contracts } from \"../Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    CancellationEventArgs,\r\n    ConversationTranscriptionEventArgs,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    SessionEventArgs,\r\n} from \"../Exports\";\r\nimport {\r\n    ConversationHandler,\r\n    ConversationImpl,\r\n    ConversationTranscriptionHandler,\r\n} from \"./Exports\";\r\nimport { Callback, IConversation } from \"./IConversation\";\r\n\r\nexport class ConversationTranscriber implements ConversationTranscriptionHandler {\r\n    private privDisposedRecognizer: boolean;\r\n    private privRecognizer: TranscriberRecognizer;\r\n    private privProperties: PropertyCollection;\r\n    protected privAudioConfig: AudioConfig;\r\n\r\n    /**\r\n     * ConversationTranscriber constructor.\r\n     * @constructor\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the recognizer\r\n     */\r\n    public constructor(audioConfig?: AudioConfig) {\r\n        this.privAudioConfig = audioConfig;\r\n        this.privProperties = new PropertyCollection();\r\n        this.privRecognizer = undefined;\r\n        this.privDisposedRecognizer = false;\r\n    }\r\n\r\n    /**\r\n     * The event canceled signals that an error occurred during transcription.\r\n     * @member ConversationTranscriber.prototype.canceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public canceled: (sender: ConversationHandler, event: CancellationEventArgs) => void;\r\n\r\n    /**\r\n     * @param {Conversation} converation - conversation to be recognized\r\n     */\r\n    public joinConversationAsync(conversation: IConversation, cb?: Callback, err?: Callback): void {\r\n        const conversationImpl = conversation as ConversationImpl;\r\n        Contracts.throwIfNullOrUndefined(conversationImpl, \"Conversation\");\r\n\r\n        // ref the conversation object\r\n        // create recognizer and subscribe to recognizer events\r\n        this.privRecognizer = new TranscriberRecognizer(conversation.config, this.privAudioConfig);\r\n        Contracts.throwIfNullOrUndefined(this.privRecognizer, \"Recognizer\");\r\n        this.privRecognizer.connectCallbacks(this);\r\n\r\n        marshalPromiseToCallbacks(conversationImpl.connectTranscriberRecognizer(this.privRecognizer), cb, err);\r\n    }\r\n\r\n     /**\r\n      * The event recognized signals that a final conversation transcription result is received.\r\n      * @member ConversationTranscriber.prototype.transcribed\r\n      * @function\r\n      * @public\r\n      */\r\n    public transcribed: (sender: ConversationTranscriptionHandler, event: ConversationTranscriptionEventArgs) => void;\r\n\r\n     /**\r\n      * The event recognizing signals that an intermediate conversation transcription result is received.\r\n      * @member ConversationTranscriber.prototype.transcribing\r\n      * @function\r\n      * @public\r\n      */\r\n    public transcribing: (sender: ConversationTranscriptionHandler, event: ConversationTranscriptionEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for session started events.\r\n     * @member ConversationTranscriber.prototype.sessionStarted\r\n     * @function\r\n     * @public\r\n     */\r\n    public sessionStarted: (sender: ConversationHandler, event: SessionEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for session stopped events.\r\n     * @member ConversationTranscriber.prototype.sessionStopped\r\n     * @function\r\n     * @public\r\n     */\r\n    public sessionStopped: (sender: ConversationHandler, event: SessionEventArgs) => void;\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member ConversationTranscriber.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member ConversationTranscriber.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * Gets the spoken language of recognition.\r\n     * @member ConversationTranscriber.prototype.speechRecognitionLanguage\r\n     * @function\r\n     * @public\r\n     * @returns {string} The spoken language of recognition.\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this ConversationTranscriber.\r\n     * @member ConversationTranscriber.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this ConversationTranscriber.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Starts conversation transcription, until stopTranscribingAsync() is called.\r\n     * User must subscribe to events to receive transcription results.\r\n     * @member ConversationTranscriber.prototype.startTranscribingAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the transcription has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public startTranscribingAsync(cb?: Callback, err?: Callback): void {\r\n        this.privRecognizer.startContinuousRecognitionAsync(cb, err);\r\n    }\r\n\r\n    /**\r\n     * Starts conversation transcription, until stopTranscribingAsync() is called.\r\n     * User must subscribe to events to receive transcription results.\r\n     * @member ConversationTranscriber.prototype.stopTranscribingAsync\r\n     * @function\r\n     * @public\r\n     * @param cb - Callback invoked once the transcription has started.\r\n     * @param err - Callback invoked in case of an error.\r\n     */\r\n    public stopTranscribingAsync(cb?: Callback, err?: Callback): void {\r\n        this.privRecognizer.stopContinuousRecognitionAsync(cb, err);\r\n    }\r\n\r\n    /**\r\n     * Leave the current conversation. After this is called, you will no longer receive any events.\r\n     */\r\n    public leaveConversationAsync(cb?: Callback, err?: Callback): void {\r\n        this.privRecognizer.disconnectCallbacks();\r\n        marshalPromiseToCallbacks((async (): Promise<void> => { return; })(), cb, err);\r\n    }\r\n\r\n    /**\r\n     * closes all external resources held by an instance of this class.\r\n     * @member ConversationTranscriber.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, errorCb?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, errorCb);\r\n    }\r\n\r\n    /**\r\n     * Disposes any resources held by the object.\r\n     * @member ConversationTranscriber.prototype.dispose\r\n     * @function\r\n     * @public\r\n     * @param {boolean} disposing - true if disposing the object.\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposedRecognizer) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            this.privDisposedRecognizer = true;\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nimport { PropertyCollection } from \"../Exports\";\r\n\r\n/**\r\n * Represents a user in a conversation.\r\n * Added in version 1.4.0\r\n */\r\nexport interface IUser {\r\n    /** Gets the user's ID */\r\n    readonly userId: string;\r\n}\r\n\r\nexport class User implements IUser {\r\n    private privUserId: string;\r\n\r\n    constructor(userId: string) {\r\n        this.privUserId = userId;\r\n    }\r\n\r\n    public get userId(): string {\r\n        return this.privUserId;\r\n    }\r\n}\r\n\r\nexport interface VoiceSignature {\r\n    Version: number;\r\n    Tag: string;\r\n    Data: string;\r\n}\r\n\r\nexport interface TranscriptionParticipant {\r\n    /** The unique identifier for the participant. */\r\n    readonly id: string;\r\n    /** The participant's preferred spoken language. */\r\n    readonly preferredLanguage: string;\r\n    /** The participant's voice signature */\r\n    readonly voice: string;\r\n}\r\n\r\n/**\r\n * Represents a participant in a conversation.\r\n * Added in version 1.4.0\r\n */\r\nexport interface IParticipant extends TranscriptionParticipant {\r\n    /** Gets the colour of the user's avatar as an HTML hex string (e.g. FF0000 for red). */\r\n    readonly avatar: string;\r\n    /**\r\n     * The participant's display name. Please note that there may be more than one participant\r\n     * with the same name. You can use <see cref=\"Id\"/> property to tell them apart.\r\n     */\r\n    readonly displayName: string;\r\n    /** Gets whether or not this participant is the host. */\r\n    readonly isHost: boolean;\r\n    /** Gets whether or not this participant is muted. */\r\n    readonly isMuted: boolean;\r\n    /** Gets whether or not the participant is using Text To Speech (TTS). */\r\n    readonly isUsingTts: boolean;\r\n    /** Contains properties of the participant. */\r\n    readonly properties: PropertyCollection;\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class Participant implements IParticipant {\r\n    private privAvatar: string;\r\n    private privDisplayName: string;\r\n    private privId: string;\r\n    private privIsHost: boolean;\r\n    private privIsMuted: boolean;\r\n    private privIsUsingTts: boolean;\r\n    private privPreferredLanguage: string;\r\n    private privVoice: string;\r\n    private privProperties: PropertyCollection;\r\n\r\n    constructor(id: string, avatar: string, displayName: string, isHost: boolean, isMuted: boolean, isUsingTts: boolean, preferredLanguage: string, voice?: string) {\r\n        this.privId = id;\r\n        this.privAvatar = avatar;\r\n        this.privDisplayName = displayName;\r\n        this.privIsHost = isHost;\r\n        this.privIsMuted = isMuted;\r\n        this.privIsUsingTts = isUsingTts;\r\n        this.privPreferredLanguage = preferredLanguage;\r\n        this.privVoice = voice;\r\n        this.privProperties = new PropertyCollection();\r\n    }\r\n\r\n    public static From(id: string, language: string, voice: string): IParticipant {\r\n        return new Participant(id, \"\", id, false, false, false, language, voice);\r\n    }\r\n\r\n    public get avatar(): string {\r\n        return this.privAvatar;\r\n    }\r\n\r\n    public get displayName(): string {\r\n        return this.privDisplayName;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public get preferredLanguage(): string {\r\n        return this.privPreferredLanguage;\r\n    }\r\n\r\n    public get isHost(): boolean {\r\n        return this.privIsHost;\r\n    }\r\n\r\n    public get isMuted(): boolean {\r\n        return this.privIsMuted;\r\n    }\r\n\r\n    public get isUsingTts(): boolean {\r\n        return this.privIsUsingTts;\r\n    }\r\n\r\n    public get voice(): string {\r\n        return this.privVoice;\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nexport enum ParticipantChangedReason {\r\n    /** Participant has joined the conversation. */\r\n    JoinedConversation,\r\n\r\n    /** Participant has left the conversation. This could be voluntary, or involuntary\r\n     *  (e.g. they are experiencing networking issues).\r\n     */\r\n    LeftConversation,\r\n\r\n    /** The participants' state has changed (e.g. they became muted, changed their nickname). */\r\n    Updated\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// Multi-device Conversation is a Preview feature.\r\n\r\nexport { Conversation, ConversationImpl } from \"./Conversation\";\r\nexport { ConversationInfo } from \"./IConversation\";\r\nexport { ConversationCommon } from \"./ConversationCommon\";\r\nexport { ConversationExpirationEventArgs } from \"./ConversationExpirationEventArgs\";\r\nexport { ConversationParticipantsChangedEventArgs } from \"./ConversationParticipantsChangedEventArgs\";\r\nexport { ConversationTranslationCanceledEventArgs } from \"./ConversationTranslationCanceledEventArgs\";\r\nexport { ConversationTranslationEventArgs } from \"./ConversationTranslationEventArgs\";\r\nexport { ConversationTranslationResult } from \"./ConversationTranslationResult\";\r\nexport { ConversationTranslator } from \"./ConversationTranslator\";\r\nexport { ConversationTranscriber } from \"./ConversationTranscriber\";\r\nexport { IParticipant, Participant, User, VoiceSignature } from \"./IParticipant\";\r\nexport { ParticipantChangedReason } from \"./ParticipantChangedReason\";\r\nexport { ConversationHandler, ConversationTranscriptionHandler, IConversationTranslator } from \"./ConversationHandler\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PathLike } from \"fs\";\r\nimport {\r\n    AutoDetectSourceLanguagesOpenRangeOptionName,\r\n    CognitiveSubscriptionKeyAuthentication,\r\n    CognitiveTokenAuthentication,\r\n    Context,\r\n    IAuthentication,\r\n    ISynthesisConnectionFactory,\r\n    OS,\r\n    SpeechServiceConfig,\r\n    SpeechSynthesisConnectionFactory,\r\n    SynthesisAdapterBase,\r\n    SynthesizerConfig,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    createNoDashGuid,\r\n    IAudioDestination,\r\n    IStringDictionary,\r\n    marshalPromiseToCallbacks,\r\n    Queue\r\n} from \"../common/Exports\";\r\nimport { AudioOutputConfigImpl } from \"./Audio/AudioConfig\";\r\nimport { AudioFileWriter } from \"./Audio/AudioFileWriter\";\r\nimport { AudioOutputFormatImpl } from \"./Audio/AudioOutputFormat\";\r\nimport {\r\n    PullAudioOutputStreamImpl,\r\n    PushAudioOutputStreamImpl\r\n} from \"./Audio/AudioOutputStream\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    AudioOutputStream,\r\n    AutoDetectSourceLanguageConfig,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    PullAudioOutputStream,\r\n    PushAudioOutputStreamCallback,\r\n    SpeechConfig,\r\n    SpeechSynthesisBookmarkEventArgs,\r\n    SpeechSynthesisEventArgs,\r\n    SpeechSynthesisOutputFormat,\r\n    SpeechSynthesisResult,\r\n    SpeechSynthesisVisemeEventArgs,\r\n    SpeechSynthesisWordBoundaryEventArgs,\r\n} from \"./Exports\";\r\nimport { SpeechConfigImpl } from \"./SpeechConfig\";\r\n\r\n/**\r\n * Defines the class SpeechSynthesizer for text to speech.\r\n * Updated in version 1.16.0\r\n * @class SpeechSynthesizer\r\n */\r\nexport class SpeechSynthesizer {\r\n    protected audioConfig: AudioConfig;\r\n    protected privAdapter: SynthesisAdapterBase;\r\n    protected privProperties: PropertyCollection;\r\n    protected synthesisRequestQueue: Queue<SynthesisRequest>;\r\n\r\n    /**\r\n     * Defines event handler for synthesis start events.\r\n     * @member SpeechSynthesizer.prototype.synthesisStarted\r\n     * @function\r\n     * @public\r\n     */\r\n    public synthesisStarted: (sender: SpeechSynthesizer, event: SpeechSynthesisEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for synthesizing events.\r\n     * @member SpeechSynthesizer.prototype.synthesizing\r\n     * @function\r\n     * @public\r\n     */\r\n    public synthesizing: (sender: SpeechSynthesizer, event: SpeechSynthesisEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for synthesis completed events.\r\n     * @member SpeechSynthesizer.prototype.synthesisCompleted\r\n     * @function\r\n     * @public\r\n     */\r\n    public synthesisCompleted: (sender: SpeechSynthesizer, event: SpeechSynthesisEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for synthesis cancelled events.\r\n     * @member SpeechSynthesizer.prototype.SynthesisCanceled\r\n     * @function\r\n     * @public\r\n     */\r\n    public SynthesisCanceled: (sender: SpeechSynthesizer, event: SpeechSynthesisEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for word boundary events\r\n     * @member SpeechSynthesizer.prototype.wordBoundary\r\n     * @function\r\n     * @public\r\n     */\r\n    public wordBoundary: (sender: SpeechSynthesizer, event: SpeechSynthesisWordBoundaryEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for bookmark reached events\r\n     * Added in version 1.16.0\r\n     * @member SpeechSynthesizer.prototype.bookmarkReached\r\n     * @function\r\n     * @public\r\n     */\r\n    public bookmarkReached: (sender: SpeechSynthesizer, event: SpeechSynthesisBookmarkEventArgs) => void;\r\n\r\n    /**\r\n     * Defines event handler for viseme received event\r\n     * Added in version 1.16.0\r\n     * @member SpeechSynthesizer.prototype.visemeReceived\r\n     * @function\r\n     * @public\r\n     */\r\n    public visemeReceived: (sender: SpeechSynthesizer, event: SpeechSynthesisVisemeEventArgs) => void;\r\n\r\n    /**\r\n     * Gets the authorization token used to communicate with the service.\r\n     * @member SpeechSynthesizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @returns {string} Authorization token.\r\n     */\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the authorization token used to communicate with the service.\r\n     * @member SpeechSynthesizer.prototype.authorizationToken\r\n     * @function\r\n     * @public\r\n     * @param {string} token - Authorization token.\r\n     */\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    /**\r\n     * The collection of properties and their values defined for this SpeechSynthesizer.\r\n     * @member SpeechSynthesizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The collection of properties and their values defined for this SpeechSynthesizer.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    /**\r\n     * Indicates if auto detect source language is enabled\r\n     * @member SpeechSynthesizer.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {boolean} if auto detect source language is enabled\r\n     */\r\n    public get autoDetectSourceLanguage(): boolean {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages) === AutoDetectSourceLanguagesOpenRangeOptionName;\r\n    }\r\n\r\n    private privDisposed: boolean;\r\n    private privConnectionFactory: ISynthesisConnectionFactory;\r\n    private privSynthesizing: boolean;\r\n\r\n    /**\r\n     * SpeechSynthesizer constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - An set of initial properties for this synthesizer.\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the synthesizer.\r\n     */\r\n    public constructor(speechConfig: SpeechConfig, audioConfig?: AudioConfig) {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        Contracts.throwIfNull(speechConfigImpl, \"speechConfig\");\r\n\r\n        if (audioConfig !== null) {\r\n            if (audioConfig === undefined) {\r\n                this.audioConfig = (typeof window === \"undefined\") ? undefined : AudioConfig.fromDefaultSpeakerOutput();\r\n            } else {\r\n                this.audioConfig = audioConfig;\r\n            }\r\n        }\r\n\r\n        this.privProperties = speechConfigImpl.properties.clone();\r\n        this.privDisposed = false;\r\n        this.privSynthesizing = false;\r\n        this.privConnectionFactory = new SpeechSynthesisConnectionFactory();\r\n        this.synthesisRequestQueue = new Queue<SynthesisRequest>();\r\n        this.implCommonSynthesizeSetup();\r\n    }\r\n\r\n    /**\r\n     * SpeechSynthesizer constructor.\r\n     * @constructor\r\n     * @param {SpeechConfig} speechConfig - an set of initial properties for this synthesizer\r\n     * @param {AutoDetectSourceLanguageConfig} autoDetectSourceLanguageConfig - An source language detection configuration associated with the synthesizer\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the synthesizer\r\n     */\r\n    public static FromConfig(speechConfig: SpeechConfig, autoDetectSourceLanguageConfig: AutoDetectSourceLanguageConfig, audioConfig?: AudioConfig): SpeechSynthesizer {\r\n        const speechConfigImpl: SpeechConfigImpl = speechConfig as SpeechConfigImpl;\r\n        autoDetectSourceLanguageConfig.properties.mergeTo(speechConfigImpl.properties);\r\n        return new SpeechSynthesizer(speechConfig, audioConfig);\r\n    }\r\n\r\n    public buildSsml(text: string): string {\r\n        const languageToDefaultVoice: IStringDictionary<string>  = {\r\n            [\"ar-EG\"]: \"Microsoft Server Speech Text to Speech Voice (ar-EG, Hoda)\",\r\n            [\"ar-SA\"]: \"Microsoft Server Speech Text to Speech Voice (ar-SA, Naayf)\",\r\n            [\"bg-BG\"]: \"Microsoft Server Speech Text to Speech Voice (bg-BG, Ivan)\",\r\n            [\"ca-ES\"]: \"Microsoft Server Speech Text to Speech Voice (ca-ES, HerenaRUS)\",\r\n            [\"cs-CZ\"]: \"Microsoft Server Speech Text to Speech Voice (cs-CZ, Jakub)\",\r\n            [\"da-DK\"]: \"Microsoft Server Speech Text to Speech Voice (da-DK, HelleRUS)\",\r\n            [\"de-AT\"]: \"Microsoft Server Speech Text to Speech Voice (de-AT, Michael)\",\r\n            [\"de-CH\"]: \"Microsoft Server Speech Text to Speech Voice (de-CH, Karsten)\",\r\n            [\"de-DE\"]: \"Microsoft Server Speech Text to Speech Voice (de-DE, HeddaRUS)\",\r\n            [\"el-GR\"]: \"Microsoft Server Speech Text to Speech Voice (el-GR, Stefanos)\",\r\n            [\"en-AU\"]: \"Microsoft Server Speech Text to Speech Voice (en-AU, HayleyRUS)\",\r\n            [\"en-CA\"]: \"Microsoft Server Speech Text to Speech Voice (en-CA, HeatherRUS)\",\r\n            [\"en-GB\"]: \"Microsoft Server Speech Text to Speech Voice (en-GB, HazelRUS)\",\r\n            [\"en-IE\"]: \"Microsoft Server Speech Text to Speech Voice (en-IE, Sean)\",\r\n            [\"en-IN\"]: \"Microsoft Server Speech Text to Speech Voice (en-IN, PriyaRUS)\",\r\n            [\"en-US\"]: \"Microsoft Server Speech Text to Speech Voice (en-US, AriaRUS)\",\r\n            [\"es-ES\"]: \"Microsoft Server Speech Text to Speech Voice (es-ES, HelenaRUS)\",\r\n            [\"es-MX\"]: \"Microsoft Server Speech Text to Speech Voice (es-MX, HildaRUS)\",\r\n            [\"fi-FI\"]: \"Microsoft Server Speech Text to Speech Voice (fi-FI, HeidiRUS)\",\r\n            [\"fr-CA\"]: \"Microsoft Server Speech Text to Speech Voice (fr-CA, HarmonieRUS)\",\r\n            [\"fr-CH\"]: \"Microsoft Server Speech Text to Speech Voice (fr-CH, Guillaume)\",\r\n            [\"fr-FR\"]: \"Microsoft Server Speech Text to Speech Voice (fr-FR, HortenseRUS)\",\r\n            [\"he-IL\"]: \"Microsoft Server Speech Text to Speech Voice (he-IL, Asaf)\",\r\n            [\"hi-IN\"]: \"Microsoft Server Speech Text to Speech Voice (hi-IN, Kalpana)\",\r\n            [\"hr-HR\"]: \"Microsoft Server Speech Text to Speech Voice (hr-HR, Matej)\",\r\n            [\"hu-HU\"]: \"Microsoft Server Speech Text to Speech Voice (hu-HU, Szabolcs)\",\r\n            [\"id-ID\"]: \"Microsoft Server Speech Text to Speech Voice (id-ID, Andika)\",\r\n            [\"it-IT\"]: \"Microsoft Server Speech Text to Speech Voice (it-IT, LuciaRUS)\",\r\n            [\"ja-JP\"]: \"Microsoft Server Speech Text to Speech Voice (ja-JP, HarukaRUS)\",\r\n            [\"ko-KR\"]: \"Microsoft Server Speech Text to Speech Voice (ko-KR, HeamiRUS)\",\r\n            [\"ms-MY\"]: \"Microsoft Server Speech Text to Speech Voice (ms-MY, Rizwan)\",\r\n            [\"nb-NO\"]: \"Microsoft Server Speech Text to Speech Voice (nb-NO, HuldaRUS)\",\r\n            [\"nl-NL\"]: \"Microsoft Server Speech Text to Speech Voice (nl-NL, HannaRUS)\",\r\n            [\"pl-PL\"]: \"Microsoft Server Speech Text to Speech Voice (pl-PL, PaulinaRUS)\",\r\n            [\"pt-BR\"]: \"Microsoft Server Speech Text to Speech Voice (pt-BR, HeloisaRUS)\",\r\n            [\"pt-PT\"]: \"Microsoft Server Speech Text to Speech Voice (pt-PT, HeliaRUS)\",\r\n            [\"ro-RO\"]: \"Microsoft Server Speech Text to Speech Voice (ro-RO, Andrei)\",\r\n            [\"ru-RU\"]: \"Microsoft Server Speech Text to Speech Voice (ru-RU, EkaterinaRUS)\",\r\n            [\"sk-SK\"]: \"Microsoft Server Speech Text to Speech Voice (sk-SK, Filip)\",\r\n            [\"sl-SI\"]: \"Microsoft Server Speech Text to Speech Voice (sl-SI, Lado)\",\r\n            [\"sv-SE\"]: \"Microsoft Server Speech Text to Speech Voice (sv-SE, HedvigRUS)\",\r\n            [\"ta-IN\"]: \"Microsoft Server Speech Text to Speech Voice (ta-IN, Valluvar)\",\r\n            [\"te-IN\"]: \"Microsoft Server Speech Text to Speech Voice (te-IN, Chitra)\",\r\n            [\"th-TH\"]: \"Microsoft Server Speech Text to Speech Voice (th-TH, Pattara)\",\r\n            [\"tr-TR\"]: \"Microsoft Server Speech Text to Speech Voice (tr-TR, SedaRUS)\",\r\n            [\"vi-VN\"]: \"Microsoft Server Speech Text to Speech Voice (vi-VN, An)\",\r\n            [\"zh-CN\"]: \"Microsoft Server Speech Text to Speech Voice (zh-CN, HuihuiRUS)\",\r\n            [\"zh-HK\"]: \"Microsoft Server Speech Text to Speech Voice (zh-HK, TracyRUS)\",\r\n            [\"zh-TW\"]: \"Microsoft Server Speech Text to Speech Voice (zh-TW, HanHanRUS)\",\r\n        };\r\n\r\n        let language = this.properties.getProperty(PropertyId.SpeechServiceConnection_SynthLanguage, \"en-US\");\r\n        let voice = this.properties.getProperty(PropertyId.SpeechServiceConnection_SynthVoice, \"\");\r\n        let ssml: string = SpeechSynthesizer.XMLEncode(text);\r\n        if (this.autoDetectSourceLanguage) {\r\n            language = \"en-US\";\r\n        } else {\r\n            voice = voice || languageToDefaultVoice[language];\r\n        }\r\n        if (voice) {\r\n            ssml = `<voice name='${voice}'>${ssml}</voice>`;\r\n        }\r\n        ssml = `<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xmlns:mstts='http://www.w3.org/2001/mstts' xmlns:emo='http://www.w3.org/2009/10/emotionml' xml:lang='${language}'>${ssml}</speak>`;\r\n        return ssml;\r\n    }\r\n\r\n    /**\r\n     * Executes speech synthesis on plain text.\r\n     * The task returns the synthesis result.\r\n     * @member SpeechSynthesizer.prototype.speakTextAsync\r\n     * @function\r\n     * @public\r\n     * @param text - Text to be synthesized.\r\n     * @param cb - Callback that received the SpeechSynthesisResult.\r\n     * @param err - Callback invoked in case of an error.\r\n     * @param stream - AudioOutputStream to receive the synthesized audio.\r\n     */\r\n    public speakTextAsync(text: string, cb?: (e: SpeechSynthesisResult) => void, err?: (e: string) => void, stream?: AudioOutputStream | PushAudioOutputStreamCallback | PathLike): void {\r\n        this.speakImpl(text, false, cb, err, stream);\r\n    }\r\n\r\n    /**\r\n     * Executes speech synthesis on SSML.\r\n     * The task returns the synthesis result.\r\n     * @member SpeechSynthesizer.prototype.speakSsmlAsync\r\n     * @function\r\n     * @public\r\n     * @param ssml - SSML to be synthesized.\r\n     * @param cb - Callback that received the SpeechSynthesisResult.\r\n     * @param err - Callback invoked in case of an error.\r\n     * @param stream - AudioOutputStream to receive the synthesized audio.\r\n     */\r\n    public speakSsmlAsync(ssml: string, cb?: (e: SpeechSynthesisResult) => void, err?: (e: string) => void, stream?: AudioOutputStream | PushAudioOutputStreamCallback | PathLike): void {\r\n        this.speakImpl(ssml, true, cb, err, stream);\r\n    }\r\n\r\n    /**\r\n     * Dispose of associated resources.\r\n     * @member SpeechSynthesizer.prototype.close\r\n     * @function\r\n     * @public\r\n     */\r\n    public close(cb?: () => void, err?: (error: string) => void): void {\r\n        Contracts.throwIfDisposed(this.privDisposed);\r\n\r\n        marshalPromiseToCallbacks(this.dispose(true), cb, err);\r\n    }\r\n\r\n    /**\r\n     * @Internal\r\n     * Do not use externally, object returned will change without warning or notice.\r\n     */\r\n    public get internalData(): object {\r\n        return this.privAdapter;\r\n    }\r\n\r\n    /**\r\n     * This method performs cleanup of resources.\r\n     * The Boolean parameter disposing indicates whether the method is called\r\n     * from Dispose (if disposing is true) or from the finalizer (if disposing is false).\r\n     * Derived classes should override this method to dispose resource if needed.\r\n     * @member SpeechSynthesizer.prototype.dispose\r\n     * @function\r\n     * @public\r\n     * @param {boolean} disposing - Flag to request disposal.\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposed) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            if (this.privAdapter) {\r\n                await this.privAdapter.dispose();\r\n            }\r\n        }\r\n\r\n        this.privDisposed = true;\r\n    }\r\n\r\n    //\r\n    // ################################################################################################################\r\n    // IMPLEMENTATION.\r\n    // Move to independent class\r\n    // ################################################################################################################\r\n    //\r\n    protected createSynthesizerConfig(speechConfig: SpeechServiceConfig): SynthesizerConfig {\r\n        return new SynthesizerConfig(\r\n            speechConfig,\r\n            this.privProperties);\r\n    }\r\n\r\n    // Creates the synthesis adapter\r\n    protected createSynthesisAdapter(\r\n        authentication: IAuthentication,\r\n        connectionFactory: ISynthesisConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        synthesizerConfig: SynthesizerConfig): SynthesisAdapterBase {\r\n        return new SynthesisAdapterBase(authentication, connectionFactory,\r\n            synthesizerConfig, this, this.audioConfig as AudioOutputConfigImpl);\r\n    }\r\n\r\n    protected implCommonSynthesizeSetup(): void {\r\n\r\n        let osPlatform = (typeof window !== \"undefined\") ? \"Browser\" : \"Node\";\r\n        let osName = \"unknown\";\r\n        let osVersion = \"unknown\";\r\n\r\n        if (typeof navigator !== \"undefined\") {\r\n            osPlatform = osPlatform + \"/\" + navigator.platform;\r\n            osName = navigator.userAgent;\r\n            osVersion = navigator.appVersion;\r\n        }\r\n\r\n        const synthesizerConfig = this.createSynthesizerConfig(\r\n            new SpeechServiceConfig(\r\n                new Context(new OS(osPlatform, osName, osVersion))));\r\n\r\n        const subscriptionKey = this.privProperties.getProperty(PropertyId.SpeechServiceConnection_Key, undefined);\r\n        const authentication = (subscriptionKey && subscriptionKey !== \"\") ?\r\n            new CognitiveSubscriptionKeyAuthentication(subscriptionKey) :\r\n            new CognitiveTokenAuthentication(\r\n                (authFetchEventId: string): Promise<string> => {\r\n                    const authorizationToken = this.privProperties.getProperty(PropertyId.SpeechServiceAuthorization_Token, undefined);\r\n                    return Promise.resolve(authorizationToken);\r\n                },\r\n                (authFetchEventId: string): Promise<string> => {\r\n                    const authorizationToken = this.privProperties.getProperty(PropertyId.SpeechServiceAuthorization_Token, undefined);\r\n                    return Promise.resolve(authorizationToken);\r\n                });\r\n\r\n        this.privAdapter = this.createSynthesisAdapter(\r\n            authentication,\r\n            this.privConnectionFactory,\r\n            this.audioConfig,\r\n            synthesizerConfig);\r\n\r\n        this.privAdapter.audioOutputFormat = AudioOutputFormatImpl.fromSpeechSynthesisOutputFormat(\r\n            (SpeechSynthesisOutputFormat as any)[this.properties.getProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, undefined)]\r\n        );\r\n    }\r\n\r\n    protected speakImpl(text: string, IsSsml: boolean, cb?: (e: SpeechSynthesisResult) => void, err?: (e: string) => void, dataStream?: AudioOutputStream | PushAudioOutputStreamCallback | PathLike): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privDisposed);\r\n            const requestId = createNoDashGuid();\r\n            let audioDestination;\r\n            if (dataStream instanceof PushAudioOutputStreamCallback) {\r\n                audioDestination = new PushAudioOutputStreamImpl(dataStream);\r\n            } else if (dataStream instanceof PullAudioOutputStream) {\r\n                audioDestination = dataStream as PullAudioOutputStreamImpl;\r\n            } else if (dataStream !== undefined) {\r\n                audioDestination = new AudioFileWriter(dataStream as PathLike);\r\n            } else {\r\n                audioDestination = undefined;\r\n            }\r\n            this.synthesisRequestQueue.enqueue(new SynthesisRequest(requestId, text, IsSsml, (e: SpeechSynthesisResult): void => {\r\n                this.privSynthesizing = false;\r\n                if (!!cb) {\r\n                    try {\r\n                        cb(e);\r\n                    } catch (e) {\r\n                        if (!!err) {\r\n                            err(e);\r\n                        }\r\n                    }\r\n                }\r\n                cb = undefined;\r\n                /* tslint:disable:no-empty */\r\n                this.adapterSpeak().catch(() => { });\r\n\r\n            }, (e: string): void => {\r\n                if (!!err) {\r\n                    err(e);\r\n                }\r\n            }, audioDestination));\r\n\r\n            /* tslint:disable:no-empty */\r\n            this.adapterSpeak().catch(() => { });\r\n\r\n        } catch (error) {\r\n            if (!!err) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n                } else {\r\n                    err(error);\r\n                }\r\n            }\r\n\r\n            // Destroy the synthesizer.\r\n            /* tslint:disable:no-empty */\r\n            this.dispose(true).catch(() => { });\r\n        }\r\n    }\r\n\r\n    protected async adapterSpeak(): Promise<void> {\r\n        if (!this.privDisposed && !this.privSynthesizing) {\r\n            this.privSynthesizing = true;\r\n            const request: SynthesisRequest = await this.synthesisRequestQueue.dequeue();\r\n            return this.privAdapter.Speak(request.text, request.isSSML, request.requestId, request.cb, request.err, request.dataStream);\r\n        }\r\n    }\r\n\r\n    private static XMLEncode(text: string): string {\r\n        return text.replace(/&/g, \"&amp;\")\r\n            .replace(/</g, \"&lt;\")\r\n            .replace(/>/g, \"&gt;\")\r\n            .replace(/\"/g, \"&quot;\")\r\n            .replace(/'/g, \"&apos;\");\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SynthesisRequest {\r\n    public requestId: string;\r\n    public text: string;\r\n    public isSSML: boolean;\r\n    public cb: (e: SpeechSynthesisResult) => void;\r\n    public err: (e: string) => void;\r\n    public dataStream: IAudioDestination;\r\n\r\n    constructor(requestId: string, text: string, isSSML: boolean, cb?: (e: SpeechSynthesisResult) => void, err?: (e: string) => void, dataStream?: IAudioDestination) {\r\n        this.requestId = requestId;\r\n        this.text = text;\r\n        this.isSSML = isSSML;\r\n        this.cb = cb;\r\n        this.err = err;\r\n        this.dataStream = dataStream;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection, ResultReason } from \"./Exports\";\r\n\r\n/**\r\n * Defines result of speech synthesis.\r\n * @class SpeechSynthesisResult\r\n * Added in version 1.11.0\r\n */\r\nexport class SpeechSynthesisResult {\r\n    private privResultId: string;\r\n    private privReason: ResultReason;\r\n    private privAudioData: ArrayBuffer;\r\n    private privErrorDetails: string;\r\n    private privProperties: PropertyCollection;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {string} resultId - The result id.\r\n     * @param {ResultReason} reason - The reason.\r\n     * @param {number} audioData - The offset into the stream.\r\n     * @param {string} errorDetails - Error details, if provided.\r\n     * @param {PropertyCollection} properties - Additional properties, if provided.\r\n     */\r\n    constructor(resultId?: string, reason?: ResultReason,  audioData?: ArrayBuffer,\r\n                errorDetails?: string, properties?: PropertyCollection) {\r\n        this.privResultId = resultId;\r\n        this.privReason = reason;\r\n        this.privAudioData = audioData;\r\n        this.privErrorDetails = errorDetails;\r\n        this.privProperties = properties;\r\n    }\r\n\r\n    /**\r\n     * Specifies the result identifier.\r\n     * @member SpeechSynthesisResult.prototype.resultId\r\n     * @function\r\n     * @public\r\n     * @returns {string} Specifies the result identifier.\r\n     */\r\n    public get resultId(): string {\r\n        return this.privResultId;\r\n    }\r\n\r\n    /**\r\n     * Specifies status of the result.\r\n     * @member SpeechSynthesisResult.prototype.reason\r\n     * @function\r\n     * @public\r\n     * @returns {ResultReason} Specifies status of the result.\r\n     */\r\n    public get reason(): ResultReason {\r\n        return this.privReason;\r\n    }\r\n\r\n    /**\r\n     * The synthesized audio data\r\n     * @member SpeechSynthesisResult.prototype.audioData\r\n     * @function\r\n     * @public\r\n     * @returns {ArrayBuffer} The synthesized audio data.\r\n     */\r\n    public get audioData(): ArrayBuffer {\r\n        return this.privAudioData;\r\n    }\r\n\r\n    /**\r\n     * In case of an unsuccessful synthesis, provides details of the occurred error.\r\n     * @member SpeechSynthesisResult.prototype.errorDetails\r\n     * @function\r\n     * @public\r\n     * @returns {string} a brief description of an error.\r\n     */\r\n    public get errorDetails(): string {\r\n        return this.privErrorDetails;\r\n    }\r\n\r\n    /**\r\n     *  The set of properties exposed in the result.\r\n     * @member SpeechSynthesisResult.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @returns {PropertyCollection} The set of properties exposed in the result.\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { SpeechSynthesisResult } from \"./Exports\";\r\n\r\n/**\r\n * Defines contents of speech synthesis events.\r\n * @class SpeechSynthesisEventArgs\r\n * Added in version 1.11.0\r\n */\r\nexport class SpeechSynthesisEventArgs {\r\n    private readonly privResult: SpeechSynthesisResult;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {SpeechSynthesisResult} result - The speech synthesis result.\r\n     */\r\n    public constructor(result: SpeechSynthesisResult) {\r\n        this.privResult = result;\r\n    }\r\n\r\n    /**\r\n     * Specifies the synthesis result.\r\n     * @member SpeechSynthesisEventArgs.prototype.result\r\n     * @function\r\n     * @public\r\n     * @returns {SpeechSynthesisResult} the synthesis result.\r\n     */\r\n    public get result(): SpeechSynthesisResult {\r\n        return this.privResult;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines contents of speech synthesis word boundary event.\r\n * @class SpeechSynthesisWordBoundaryEventArgs\r\n * Added in version 1.11.0\r\n */\r\nexport class SpeechSynthesisWordBoundaryEventArgs {\r\n    private privAudioOffset: number;\r\n    private privText: string;\r\n    private privWordLength: number;\r\n    private privTextOffset: number;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {number} audioOffset - The audio offset.\r\n     * @param {string} text - The text.\r\n     * @param {number} wordLength - The length of the word.\r\n     * @param {number} textOffset - The text offset.\r\n     */\r\n    public constructor(audioOffset: number, text: string, wordLength: number, textOffset: number) {\r\n        this.privAudioOffset = audioOffset;\r\n        this.privText = text;\r\n        this.privWordLength = wordLength;\r\n        this.privTextOffset = textOffset;\r\n    }\r\n\r\n    /**\r\n     * Specifies the audio offset.\r\n     * @member SpeechSynthesisWordBoundaryEventArgs.prototype.audioOffset\r\n     * @function\r\n     * @public\r\n     * @returns {number} the audio offset.\r\n     */\r\n    public get audioOffset(): number {\r\n        return this.privAudioOffset;\r\n    }\r\n\r\n    /**\r\n     * Specifies the text of the word boundary event.\r\n     * @member SpeechSynthesisWordBoundaryEventArgs.prototype.text\r\n     * @function\r\n     * @public\r\n     * @returns {string} the text.\r\n     */\r\n    public get text(): string {\r\n        return this.privText;\r\n    }\r\n\r\n    /**\r\n     * Specifies the word length\r\n     * @member SpeechSynthesisWordBoundaryEventArgs.prototype.wordLength\r\n     * @function\r\n     * @public\r\n     * @returns {number} the word length\r\n     */\r\n    public get wordLength(): number {\r\n        return this.privWordLength;\r\n    }\r\n\r\n    /**\r\n     * Specifies the text offset.\r\n     * @member SpeechSynthesisWordBoundaryEventArgs.prototype.textOffset\r\n     * @function\r\n     * @public\r\n     * @returns {number} the text offset.\r\n     */\r\n    public get textOffset(): number {\r\n        return this.privTextOffset;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines contents of speech synthesis bookmark event.\r\n * @class SpeechSynthesisBookmarkEventArgs\r\n * Added in version 1.16.0\r\n */\r\nexport class SpeechSynthesisBookmarkEventArgs {\r\n    private privAudioOffset: number;\r\n    private privText: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {number} audioOffset - The audio offset.\r\n     * @param {string} text - The bookmark text.\r\n     */\r\n    public constructor(audioOffset: number, text: string) {\r\n        this.privAudioOffset = audioOffset;\r\n        this.privText = text;\r\n    }\r\n\r\n    /**\r\n     * Specifies the audio offset.\r\n     * @member SpeechSynthesisBookmarkEventArgs.prototype.audioOffset\r\n     * @function\r\n     * @public\r\n     * @returns {number} the audio offset.\r\n     */\r\n    public get audioOffset(): number {\r\n        return this.privAudioOffset;\r\n    }\r\n\r\n    /**\r\n     * Specifies the bookmark.\r\n     * @member SpeechSynthesisBookmarkEventArgs.prototype.text\r\n     * @function\r\n     * @public\r\n     * @returns {string} the bookmark text.\r\n     */\r\n    public get text(): string {\r\n        return this.privText;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines contents of speech synthesis viseme event.\r\n * @class SpeechSynthesisVisemeEventArgs\r\n * Added in version 1.16.0\r\n */\r\nexport class SpeechSynthesisVisemeEventArgs {\r\n    private privAudioOffset: number;\r\n    private privVisemeId: number;\r\n    private privAnimation: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param {number} audioOffset - The audio offset.\r\n     * @param {number} visemeId - The viseme ID.\r\n     * @param {string} animation - The animation, could be in svg or other format.\r\n     */\r\n    public constructor(audioOffset: number, visemeId: number, animation: string) {\r\n        this.privAudioOffset = audioOffset;\r\n        this.privVisemeId = visemeId;\r\n        this.privAnimation = animation;\r\n    }\r\n\r\n    /**\r\n     * Specifies the audio offset.\r\n     * @member SpeechSynthesisVisemeEventArgs.prototype.audioOffset\r\n     * @function\r\n     * @public\r\n     * @returns {number} the audio offset.\r\n     */\r\n    public get audioOffset(): number {\r\n        return this.privAudioOffset;\r\n    }\r\n\r\n    /**\r\n     * Specifies the viseme ID.\r\n     * @member SpeechSynthesisVisemeEventArgs.prototype.visemeId\r\n     * @function\r\n     * @public\r\n     * @returns {number} the viseme ID.\r\n     */\r\n    public get visemeId(): number {\r\n        return this.privVisemeId;\r\n    }\r\n\r\n    /**\r\n     * Specifies the animation.\r\n     * @member SpeechSynthesisVisemeEventArgs.prototype.animation\r\n     * @function\r\n     * @public\r\n     * @returns {string} the animation, could be in svg or other format.\r\n     */\r\n    public get animation(): string {\r\n        return this.privAnimation;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { SynthesisAdapterBase } from \"../../common.speech/Exports\";\r\nimport {\r\n    BackgroundEvent,\r\n    createNoDashGuid,\r\n    Events,\r\n    IAudioDestination,\r\n    INumberDictionary\r\n} from \"../../common/Exports\";\r\nimport { AudioStreamFormat, IPlayer } from \"../Exports\";\r\nimport { AudioOutputFormatImpl } from \"./AudioOutputFormat\";\r\nimport { PullAudioOutputStreamImpl } from \"./AudioOutputStream\";\r\nimport { AudioFormatTag } from \"./AudioStreamFormat\";\r\n\r\nconst MediaDurationPlaceholderSeconds = 60 * 30;\r\n\r\nconst AudioFormatToMimeType: INumberDictionary<string> = {\r\n    [AudioFormatTag.PCM]: \"audio/wav\",\r\n    [AudioFormatTag.MuLaw]: \"audio/x-wav\",\r\n    [AudioFormatTag.MP3]: \"audio/mpeg\",\r\n    [AudioFormatTag.OGG_OPUS]: \"audio/ogg\",\r\n    [AudioFormatTag.WEBM_OPUS]: \"audio/webm; codecs=opus\",\r\n    [AudioFormatTag.ALaw]: \"audio/x-wav\",\r\n};\r\n\r\n/**\r\n * Represents the speaker playback audio destination, which only works in browser.\r\n * Note: the SDK will try to use <a href=\"https://www.w3.org/TR/media-source/\">Media Source Extensions</a> to play audio.\r\n * Mp3 format has better supports on Microsoft Edge, Chrome and Safari (desktop), so, it's better to specify mp3 format for playback.\r\n * @class SpeakerAudioDestination\r\n * Updated in version 1.17.0\r\n */\r\nexport class SpeakerAudioDestination implements IAudioDestination, IPlayer {\r\n    private readonly privId: string;\r\n    private privFormat: AudioOutputFormatImpl;\r\n    private privAudio: HTMLAudioElement;\r\n    private privMediaSource: MediaSource;\r\n    private privSourceBuffer: SourceBuffer;\r\n    private privPlaybackStarted: boolean = false;\r\n    private privAudioBuffer: ArrayBuffer[];\r\n    private privAppendingToBuffer: boolean = false;\r\n    private privMediaSourceOpened: boolean = false;\r\n    private privIsClosed: boolean;\r\n    private privIsPaused: boolean;\r\n    private privAudioOutputStream: PullAudioOutputStreamImpl;\r\n    private privBytesReceived: number = 0;\r\n\r\n    public constructor(audioDestinationId?: string) {\r\n        this.privId = audioDestinationId ? audioDestinationId : createNoDashGuid();\r\n        this.privIsPaused = false;\r\n        this.privIsClosed = false;\r\n    }\r\n\r\n    public id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public write(buffer: ArrayBuffer, cb?: () => void, err?: (error: string) => void): void {\r\n        if (this.privAudioBuffer !== undefined) {\r\n            this.privAudioBuffer.push(buffer);\r\n            this.updateSourceBuffer().then(() => {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            }, (error: string): void => {\r\n                if (!!err) {\r\n                    err(error);\r\n                }\r\n            });\r\n        } else if (this.privAudioOutputStream !== undefined) {\r\n            this.privAudioOutputStream.write(buffer);\r\n            this.privBytesReceived += buffer.byteLength;\r\n        }\r\n    }\r\n\r\n    public close(cb?: () => void, err?: (error: string) => void): void {\r\n        this.privIsClosed = true;\r\n        if (this.privSourceBuffer !== undefined) {\r\n            this.handleSourceBufferUpdateEnd().then(() => {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            }, (error: string): void => {\r\n                if (!!err) {\r\n                    err(error);\r\n                }\r\n            });\r\n        } else if (this.privAudioOutputStream !== undefined) {\r\n            if ((this.privFormat.formatTag === AudioFormatTag.PCM || this.privFormat.formatTag === AudioFormatTag.MuLaw\r\n                || this.privFormat.formatTag === AudioFormatTag.ALaw) && this.privFormat.hasHeader === false) {\r\n                // tslint:disable-next-line:no-console\r\n                console.warn(`Play back is not supported for raw PCM, mulaw or alaw format without header.`);\r\n                if (!!this.onAudioEnd) {\r\n                    this.onAudioEnd(this);\r\n                }\r\n            } else {\r\n                let receivedAudio = new ArrayBuffer(this.privBytesReceived);\r\n                this.privAudioOutputStream.read(receivedAudio).then((_: number): void => {\r\n                    receivedAudio = SynthesisAdapterBase.addHeader(receivedAudio, this.privFormat);\r\n                    const audioBlob = new Blob([receivedAudio], { type: AudioFormatToMimeType[this.privFormat.formatTag] });\r\n                    this.privAudio.src = window.URL.createObjectURL(audioBlob);\r\n                    this.notifyPlayback().then(() => {\r\n                        if (!!cb) {\r\n                            cb();\r\n                        }\r\n                    }, (error: string): void => {\r\n                        if (!!err) {\r\n                            err(error);\r\n                        }\r\n                    });\r\n                }, (error: string): void => {\r\n                    if (!!err) {\r\n                        err(error);\r\n                    }\r\n                });\r\n            }\r\n        } else {\r\n            // unsupported format, call onAudioEnd directly.\r\n            if (!!this.onAudioEnd) {\r\n                this.onAudioEnd(this);\r\n            }\r\n        }\r\n    }\r\n\r\n    set format(format: AudioStreamFormat) {\r\n        if (typeof (AudioContext) !== \"undefined\" || typeof ((window as any).webkitAudioContext) !== \"undefined\") {\r\n            this.privFormat = format as AudioOutputFormatImpl;\r\n            const mimeType: string = AudioFormatToMimeType[this.privFormat.formatTag];\r\n            if (mimeType === undefined) {\r\n                // tslint:disable-next-line:no-console\r\n                console.warn(\r\n                    `Unknown mimeType for format ${AudioFormatTag[this.privFormat.formatTag]}; playback is not supported.`);\r\n\r\n            } else if (typeof (MediaSource) !== \"undefined\" && MediaSource.isTypeSupported(mimeType)) {\r\n                this.privAudio = new Audio();\r\n                this.privAudioBuffer = [];\r\n                this.privMediaSource = new MediaSource();\r\n                this.privAudio.src = URL.createObjectURL(this.privMediaSource);\r\n                this.privAudio.load();\r\n                this.privMediaSource.onsourceopen = (event: Event): void => {\r\n                    this.privMediaSourceOpened = true;\r\n                    this.privMediaSource.duration = MediaDurationPlaceholderSeconds;\r\n                    this.privSourceBuffer = this.privMediaSource.addSourceBuffer(mimeType);\r\n                    this.privSourceBuffer.onupdate = (_: Event) => {\r\n                        this.updateSourceBuffer().catch((reason: string): void => {\r\n                            Events.instance.onEvent(new BackgroundEvent(reason));\r\n                        });\r\n                    };\r\n                    this.privSourceBuffer.onupdateend = (_: Event) => {\r\n                        this.handleSourceBufferUpdateEnd().catch((reason: string): void => {\r\n                            Events.instance.onEvent(new BackgroundEvent(reason));\r\n                        });\r\n                    };\r\n                    this.privSourceBuffer.onupdatestart = (_: Event) => {\r\n                        this.privAppendingToBuffer = false;\r\n                    };\r\n                };\r\n                this.updateSourceBuffer().catch((reason: string): void => {\r\n                    Events.instance.onEvent(new BackgroundEvent(reason));\r\n                });\r\n\r\n            } else {\r\n                // tslint:disable-next-line:no-console\r\n                console.warn(\r\n                    `Format ${AudioFormatTag[this.privFormat.formatTag]} could not be played by MSE, streaming playback is not enabled.`);\r\n                this.privAudioOutputStream = new PullAudioOutputStreamImpl();\r\n                this.privAudioOutputStream.format = this.privFormat;\r\n                this.privAudio = new Audio();\r\n            }\r\n        }\r\n    }\r\n\r\n    public get isClosed(): boolean {\r\n        return this.privIsClosed;\r\n    }\r\n\r\n    public get currentTime(): number {\r\n        if (this.privAudio !== undefined) {\r\n            return this.privAudio.currentTime;\r\n        }\r\n        return -1;\r\n    }\r\n\r\n    public pause(): void {\r\n        if (!this.privIsPaused && this.privAudio !== undefined) {\r\n            this.privAudio.pause();\r\n            this.privIsPaused = true;\r\n        }\r\n    }\r\n\r\n    public resume(cb?: () => void, err?: (error: string) => void): void {\r\n        if (this.privIsPaused && this.privAudio !== undefined) {\r\n            this.privAudio.play().then(() => {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            }, (error: string): void => {\r\n                if (!!err) {\r\n                    err(error);\r\n                }\r\n            });\r\n            this.privIsPaused = false;\r\n        }\r\n    }\r\n\r\n    public onAudioStart: (sender: IPlayer) => void;\r\n\r\n    public onAudioEnd: (sender: IPlayer) => void;\r\n\r\n    public get internalAudio(): HTMLAudioElement {\r\n        return this.privAudio;\r\n    }\r\n\r\n    private async updateSourceBuffer(): Promise<void> {\r\n        if (this.privAudioBuffer !== undefined && (this.privAudioBuffer.length > 0) && this.sourceBufferAvailable()) {\r\n            this.privAppendingToBuffer = true;\r\n            const binary = this.privAudioBuffer.shift();\r\n            try {\r\n                this.privSourceBuffer.appendBuffer(binary);\r\n            } catch (error) {\r\n                this.privAudioBuffer.unshift(binary);\r\n                // tslint:disable-next-line:no-console\r\n                console.log(\r\n                    \"buffer filled, pausing addition of binaries until space is made\");\r\n                return;\r\n            }\r\n            await this.notifyPlayback();\r\n        } else if (this.canEndStream()) {\r\n            await this.handleSourceBufferUpdateEnd();\r\n        }\r\n    }\r\n\r\n    private async handleSourceBufferUpdateEnd(): Promise<void> {\r\n        if (this.canEndStream() && this.sourceBufferAvailable()) {\r\n            this.privMediaSource.endOfStream();\r\n            await this.notifyPlayback();\r\n        }\r\n    }\r\n\r\n    private async notifyPlayback(): Promise<void> {\r\n        if (!this.privPlaybackStarted && this.privAudio !== undefined) {\r\n            this.privPlaybackStarted = true;\r\n            if (!!this.onAudioStart) {\r\n                this.onAudioStart(this);\r\n            }\r\n            this.privAudio.onended = (): void => {\r\n                if (!!this.onAudioEnd) {\r\n                    this.onAudioEnd(this);\r\n                }\r\n            };\r\n            if (!this.privIsPaused) {\r\n                await this.privAudio.play();\r\n            }\r\n        }\r\n    }\r\n\r\n    private canEndStream(): boolean {\r\n        return (this.isClosed && this.privSourceBuffer !== undefined && (this.privAudioBuffer.length === 0)\r\n            && this.privMediaSourceOpened && !this.privAppendingToBuffer && this.privMediaSource.readyState === \"open\");\r\n    }\r\n\r\n    private sourceBufferAvailable(): boolean {\r\n        return (this.privSourceBuffer !== undefined && !this.privSourceBuffer.updating);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CancellationEventArgsBase,\r\n} from \"./CancellationEventArgsBase\";\r\n\r\n/**\r\n * Defines content of a RecognitionErrorEvent.\r\n * @class ConversationTranscriptionCanceledEventArgs\r\n */\r\nexport class ConversationTranscriptionCanceledEventArgs extends CancellationEventArgsBase {\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the point system for pronunciation score calibration; default value is FivePoint.\r\n * Added in version 1.15.0\r\n * @class PronunciationAssessmentGradingSystem\r\n */\r\nexport enum PronunciationAssessmentGradingSystem {\r\n    /**\r\n     * Five point calibration\r\n     * @member PronunciationAssessmentGradingSystem.FivePoint\r\n     */\r\n    FivePoint = 1,\r\n\r\n    /**\r\n     * Hundred mark\r\n     * @member PronunciationAssessmentGradingSystem.HundredMark\r\n     */\r\n    HundredMark,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the pronunciation evaluation granularity; default value is Phoneme.\r\n * Added in version 1.15.0\r\n * @class PronunciationAssessmentGranularity\r\n */\r\nexport enum PronunciationAssessmentGranularity {\r\n    /**\r\n     * Shows the score on the full text, word and phoneme level\r\n     * @member PronunciationAssessmentGranularity.Phoneme\r\n     */\r\n    Phoneme = 1,\r\n\r\n    /**\r\n     * Shows the score on the full text and word level\r\n     * @member PronunciationAssessmentGranularity.Word\r\n     */\r\n    Word,\r\n\r\n    /**\r\n     * Shows the score on the full text level only\r\n     * @member PronunciationAssessmentGranularity.FullText\r\n     */\r\n    FullText,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ServiceRecognizerBase } from \"../common.speech/ServiceRecognizerBase\";\r\nimport { Contracts } from \"./Contracts\";\r\nimport {\r\n    PronunciationAssessmentGradingSystem,\r\n    PronunciationAssessmentGranularity,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    Recognizer\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Pronunciation assessment configuration.\r\n * @class PronunciationAssessmentConfig\r\n * Added in version 1.15.0.\r\n */\r\nexport class PronunciationAssessmentConfig {\r\n    private privProperties: PropertyCollection;\r\n\r\n    /**\r\n     * PronunciationAssessmentConfig constructor.\r\n     * @constructor\r\n     * @param {string} referenceText\r\n     * @param gradingSystem\r\n     * @param granularity\r\n     * @param enableMiscue\r\n     */\r\n    public constructor(referenceText: string,\r\n                       gradingSystem: PronunciationAssessmentGradingSystem = PronunciationAssessmentGradingSystem.FivePoint,\r\n                       granularity: PronunciationAssessmentGranularity = PronunciationAssessmentGranularity.Phoneme,\r\n                       enableMiscue: boolean = false) {\r\n        Contracts.throwIfNullOrUndefined(referenceText, \"referenceText\");\r\n        this.privProperties = new PropertyCollection();\r\n        this.privProperties.setProperty(PropertyId.PronunciationAssessment_ReferenceText, referenceText);\r\n        this.privProperties.setProperty(PropertyId.PronunciationAssessment_GradingSystem, PronunciationAssessmentGradingSystem[gradingSystem]);\r\n        this.privProperties.setProperty(PropertyId.PronunciationAssessment_Granularity, PronunciationAssessmentGranularity[granularity]);\r\n        this.privProperties.setProperty(PropertyId.PronunciationAssessment_EnableMiscue, String(enableMiscue));\r\n    }\r\n\r\n    /**\r\n     * @member PronunciationAssessmentConfig.fromJSON\r\n     * @function\r\n     * @public\r\n     * @param {string} json The json string containing the pronunciation assessment parameters.\r\n     * @return {PronunciationAssessmentConfig} Instance of PronunciationAssessmentConfig\r\n     * @summary Creates an instance of the PronunciationAssessmentConfig from json.\r\n     */\r\n    public static fromJSON(json: string): PronunciationAssessmentConfig {\r\n        Contracts.throwIfNullOrUndefined(json, \"json\");\r\n        const config = new PronunciationAssessmentConfig(\"\");\r\n        config.privProperties = new PropertyCollection();\r\n        config.properties.setProperty(PropertyId.PronunciationAssessment_Json, json);\r\n        return config;\r\n    }\r\n\r\n    public toJSON(): string {\r\n        this.updateJson();\r\n        return this.privProperties.getProperty(PropertyId.PronunciationAssessment_Params);\r\n    }\r\n\r\n    public applyTo(recognizer: Recognizer): void {\r\n        this.updateJson();\r\n        const recoBase = recognizer.internalData as ServiceRecognizerBase;\r\n        recoBase.speechContext.setPronunciationAssessmentParams(this.properties.getProperty(PropertyId.PronunciationAssessment_Params));\r\n    }\r\n\r\n    /**\r\n     * Gets the reference text.\r\n     * @member PronunciationAssessmentConfig.prototype.referenceText\r\n     * @function\r\n     * @public\r\n     * @returns {string} Reference text.\r\n     */\r\n    public get referenceText(): string {\r\n        return this.properties.getProperty(PropertyId.PronunciationAssessment_ReferenceText);\r\n    }\r\n\r\n    /**\r\n     * Gets/Sets the reference text.\r\n     * @member PronunciationAssessmentConfig.prototype.referenceText\r\n     * @function\r\n     * @public\r\n     * @param {string} referenceText - Reference text.\r\n     */\r\n    public set referenceText(referenceText: string) {\r\n        Contracts.throwIfNullOrWhitespace(referenceText, \"referenceText\");\r\n        this.properties.setProperty(PropertyId.PronunciationAssessment_ReferenceText, referenceText);\r\n    }\r\n\r\n    /**\r\n     * @member PronunciationAssessmentConfig.prototype.properties\r\n     * @function\r\n     * @public\r\n     * @return {PropertyCollection} Properties of the config.\r\n     * @summary Gets a pronunciation assessment config properties\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    private updateJson(): void {\r\n        const jsonString = this.privProperties.getProperty(PropertyId.PronunciationAssessment_Json, \"{}\");\r\n        const paramsJson = JSON.parse(jsonString);\r\n\r\n        const referenceText = this.privProperties.getProperty(PropertyId.PronunciationAssessment_ReferenceText);\r\n        if (referenceText) {\r\n            paramsJson.referenceText = referenceText;\r\n        }\r\n\r\n        const gradingSystem = this.privProperties.getProperty(PropertyId.PronunciationAssessment_GradingSystem);\r\n        if (gradingSystem) {\r\n            paramsJson.gradingSystem = gradingSystem;\r\n        }\r\n\r\n        const granularity = this.privProperties.getProperty(PropertyId.PronunciationAssessment_Granularity);\r\n        if (granularity) {\r\n            paramsJson.granularity = granularity;\r\n        }\r\n\r\n        // always set dimension to Comprehensive\r\n        paramsJson.dimension = \"Comprehensive\";\r\n\r\n        const enableMiscueString = this.privProperties.getProperty(PropertyId.PronunciationAssessment_EnableMiscue);\r\n        if (enableMiscueString === \"true\") {\r\n            paramsJson.enableMiscue = true;\r\n        } else if (enableMiscueString === \"false\") {\r\n            paramsJson.enableMiscue = false;\r\n        }\r\n\r\n        this.privProperties.setProperty(PropertyId.PronunciationAssessment_Params, JSON.stringify(paramsJson));\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {Contracts} from \"./Contracts\";\r\nimport {\r\n    PropertyId,\r\n    RecognitionResult\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Pronunciation assessment results.\r\n * @class PronunciationAssessmentResult\r\n * Added in version 1.15.0.\r\n */\r\nexport class PronunciationAssessmentResult {\r\n    private privPronJson: any;\r\n\r\n    private constructor(jsonString: string) {\r\n        const j = JSON.parse(jsonString);\r\n        Contracts.throwIfNullOrUndefined(j.NBest[0], \"NBest\");\r\n        this.privPronJson = j.NBest[0];\r\n    }\r\n\r\n    /**\r\n     * @member PronunciationAssessmentResult.fromResult\r\n     * @function\r\n     * @public\r\n     * @param {RecognitionResult} result The recognition result.\r\n     * @return {PronunciationAssessmentConfig} Instance of PronunciationAssessmentConfig\r\n     * @summary Creates an instance of the PronunciationAssessmentResult from recognition result.\r\n     */\r\n    public static fromResult(result: RecognitionResult): PronunciationAssessmentResult {\r\n        Contracts.throwIfNullOrUndefined(result, \"result\");\r\n        const json: string = result.properties.getProperty(PropertyId.SpeechServiceResponse_JsonResult);\r\n        Contracts.throwIfNullOrUndefined(json, \"json\");\r\n        return new PronunciationAssessmentResult(json);\r\n    }\r\n\r\n    /**\r\n     * Gets the detail result of pronunciation assessment.\r\n     * @member PronunciationAssessmentConfig.prototype.detailResult\r\n     * @function\r\n     * @public\r\n     * @returns {any} detail result.\r\n     */\r\n    public get detailResult(): any {\r\n        return this.privPronJson;\r\n    }\r\n\r\n    /**\r\n     * The score indicating the pronunciation accuracy of the given speech, which indicates\r\n     * how closely the phonemes match a native speaker's pronunciation.\r\n     * @member PronunciationAssessmentResult.prototype.accuracyScore\r\n     * @function\r\n     * @public\r\n     * @returns {number} Accuracy score.\r\n     */\r\n    public get accuracyScore(): number {\r\n        return this.detailResult.PronunciationAssessment.AccuracyScore;\r\n    }\r\n\r\n    /**\r\n     * The overall score indicating the pronunciation quality of the given speech.\r\n     * This is calculated from AccuracyScore, FluencyScore and CompletenessScore with weight.\r\n     * @member PronunciationAssessmentResult.prototype.pronunciationScore\r\n     * @function\r\n     * @public\r\n     * @returns {number} Pronunciation score.\r\n     */\r\n    public get pronunciationScore(): number {\r\n        return this.detailResult.PronunciationAssessment.PronScore;\r\n    }\r\n\r\n    /**\r\n     * The score indicating the completeness of the given speech by calculating the ratio of pronounced words towards entire input.\r\n     * @member PronunciationAssessmentResult.prototype.completenessScore\r\n     * @function\r\n     * @public\r\n     * @returns {number} Completeness score.\r\n     */\r\n    public get completenessScore(): number {\r\n        return this.detailResult.PronunciationAssessment.CompletenessScore;\r\n    }\r\n\r\n    /**\r\n     * The score indicating the fluency of the given speech.\r\n     * @member PronunciationAssessmentResult.prototype.fluencyScore\r\n     * @function\r\n     * @public\r\n     * @returns {number} Fluency score.\r\n     */\r\n    public get fluencyScore(): number {\r\n        return this.detailResult.PronunciationAssessment.FluencyScore;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport { AudioConfig } from \"./Audio/AudioConfig\";\r\nexport { AudioStreamFormat } from \"./Audio/AudioStreamFormat\";\r\nexport { AudioInputStream, PullAudioInputStream, PushAudioInputStream } from \"./Audio/AudioInputStream\";\r\nexport { AudioOutputStream, PullAudioOutputStream, PushAudioOutputStream} from \"./Audio/AudioOutputStream\";\r\nexport { CancellationReason } from \"./CancellationReason\";\r\nexport { PullAudioInputStreamCallback } from \"./Audio/PullAudioInputStreamCallback\";\r\nexport { PushAudioOutputStreamCallback } from \"./Audio/PushAudioOutputStreamCallback\";\r\nexport { KeywordRecognitionModel } from \"./KeywordRecognitionModel\";\r\nexport { SessionEventArgs } from \"./SessionEventArgs\";\r\nexport { RecognitionEventArgs } from \"./RecognitionEventArgs\";\r\nexport { OutputFormat } from \"./OutputFormat\";\r\nexport { IntentRecognitionEventArgs } from \"./IntentRecognitionEventArgs\";\r\nexport { RecognitionResult } from \"./RecognitionResult\";\r\nexport { SpeechRecognitionResult } from \"./SpeechRecognitionResult\";\r\nexport { IntentRecognitionResult } from \"./IntentRecognitionResult\";\r\nexport { LanguageUnderstandingModel } from \"./LanguageUnderstandingModel\";\r\nexport { SpeechRecognitionEventArgs, ConversationTranscriptionEventArgs } from \"./SpeechRecognitionEventArgs\";\r\nexport { SpeechRecognitionCanceledEventArgs } from \"./SpeechRecognitionCanceledEventArgs\";\r\nexport { TranslationRecognitionEventArgs } from \"./TranslationRecognitionEventArgs\";\r\nexport { TranslationSynthesisEventArgs } from \"./TranslationSynthesisEventArgs\";\r\nexport { TranslationRecognitionResult } from \"./TranslationRecognitionResult\";\r\nexport { TranslationSynthesisResult } from \"./TranslationSynthesisResult\";\r\nexport { ResultReason } from \"./ResultReason\";\r\nexport { SpeechConfig, SpeechConfigImpl } from \"./SpeechConfig\";\r\nexport { SpeechTranslationConfig, SpeechTranslationConfigImpl } from \"./SpeechTranslationConfig\";\r\nexport { PropertyCollection } from \"./PropertyCollection\";\r\nexport { PropertyId } from \"./PropertyId\";\r\nexport { Recognizer } from \"./Recognizer\";\r\nexport { SpeechRecognizer } from \"./SpeechRecognizer\";\r\nexport { IntentRecognizer } from \"./IntentRecognizer\";\r\nexport { VoiceProfileType } from \"./VoiceProfileType\";\r\nexport { TranslationRecognizer } from \"./TranslationRecognizer\";\r\nexport { Translations } from \"./Translations\";\r\nexport { NoMatchReason } from \"./NoMatchReason\";\r\nexport { NoMatchDetails } from \"./NoMatchDetails\";\r\nexport { TranslationRecognitionCanceledEventArgs } from \"./TranslationRecognitionCanceledEventArgs\";\r\nexport { IntentRecognitionCanceledEventArgs } from \"./IntentRecognitionCanceledEventArgs\";\r\nexport { CancellationDetailsBase } from \"./CancellationDetailsBase\";\r\nexport { CancellationDetails } from \"./CancellationDetails\";\r\nexport { CancellationErrorCode } from \"./CancellationErrorCodes\";\r\nexport { ConnectionEventArgs } from \"./ConnectionEventArgs\";\r\nexport { ServiceEventArgs } from \"./ServiceEventArgs\";\r\nexport { Connection } from \"./Connection\";\r\nexport { PhraseListGrammar } from \"./PhraseListGrammar\";\r\nexport { DialogServiceConfig } from \"./DialogServiceConfig\";\r\nexport { BotFrameworkConfig } from \"./BotFrameworkConfig\";\r\nexport { CustomCommandsConfig } from \"./CustomCommandsConfig\";\r\nexport { DialogServiceConnector } from \"./DialogServiceConnector\";\r\nexport { ActivityReceivedEventArgs } from \"./ActivityReceivedEventArgs\";\r\nexport { TurnStatusReceivedEventArgs } from \"./TurnStatusReceivedEventArgs\";\r\nexport { ServicePropertyChannel } from \"./ServicePropertyChannel\";\r\nexport { ProfanityOption } from \"./ProfanityOption\";\r\nexport { BaseAudioPlayer } from \"./Audio/BaseAudioPlayer\";\r\nexport { ConnectionMessageEventArgs } from \"./ConnectionMessageEventArgs\";\r\nexport { ConnectionMessage } from \"./ConnectionMessage\";\r\nexport { VoiceProfile } from \"./VoiceProfile\";\r\nexport { VoiceProfileEnrollmentResult, VoiceProfileEnrollmentCancellationDetails } from \"./VoiceProfileEnrollmentResult\";\r\nexport { VoiceProfileResult, VoiceProfileCancellationDetails } from \"./VoiceProfileResult\";\r\nexport { VoiceProfileAuthorizationPhraseResult } from \"./VoiceProfileAuthorizationPhraseResult\";\r\nexport { VoiceProfileClient } from \"./VoiceProfileClient\";\r\nexport { SpeakerRecognizer } from \"./SpeakerRecognizer\";\r\nexport { SpeakerIdentificationModel } from \"./SpeakerIdentificationModel\";\r\nexport { SpeakerVerificationModel } from \"./SpeakerVerificationModel\";\r\nexport { AutoDetectSourceLanguageConfig } from \"./AutoDetectSourceLanguageConfig\";\r\nexport { AutoDetectSourceLanguageResult } from \"./AutoDetectSourceLanguageResult\";\r\nexport { SourceLanguageConfig } from \"./SourceLanguageConfig\";\r\nexport { SpeakerRecognitionResult, SpeakerRecognitionResultType, SpeakerRecognitionCancellationDetails } from \"./SpeakerRecognitionResult\";\r\nexport { Conversation,\r\n    ConversationExpirationEventArgs,\r\n    ConversationInfo,\r\n    ConversationParticipantsChangedEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    ConversationTranslationEventArgs,\r\n    ConversationTranslationResult,\r\n    ConversationTranslator,\r\n    ConversationTranscriber,\r\n    IParticipant,\r\n    Participant,\r\n    ParticipantChangedReason,\r\n    User,\r\n    VoiceSignature\r\n    } from \"./Transcription/Exports\";\r\nexport { SpeechSynthesisOutputFormat } from \"./SpeechSynthesisOutputFormat\";\r\nexport { SpeechSynthesizer } from \"./SpeechSynthesizer\";\r\nexport { SpeechSynthesisResult } from \"./SpeechSynthesisResult\";\r\nexport { SpeechSynthesisEventArgs } from \"./SpeechSynthesisEventArgs\";\r\nexport { SpeechSynthesisWordBoundaryEventArgs } from \"./SpeechSynthesisWordBoundaryEventArgs\";\r\nexport { SpeechSynthesisBookmarkEventArgs } from \"./SpeechSynthesisBookmarkEventArgs\";\r\nexport { SpeechSynthesisVisemeEventArgs } from \"./SpeechSynthesisVisemeEventArgs\";\r\nexport { IPlayer } from \"./Audio/IPlayer\";\r\nexport { SpeakerAudioDestination } from \"./Audio/SpeakerAudioDestination\";\r\nexport { CancellationEventArgs } from \"./CancellationEventArgs\";\r\nexport { ConversationTranscriptionCanceledEventArgs } from \"./ConversationTranscriptionCanceledEventArgs\";\r\nexport { PronunciationAssessmentGradingSystem } from \"./PronunciationAssessmentGradingSystem\";\r\nexport { PronunciationAssessmentGranularity } from \"./PronunciationAssessmentGranularity\";\r\nexport { PronunciationAssessmentConfig } from \"./PronunciationAssessmentConfig\";\r\nexport { PronunciationAssessmentResult } from \"./PronunciationAssessmentResult\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    IConnection,\r\n    IStringDictionary\r\n} from \"../common/Exports\";\r\nimport {\r\n    PropertyId\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    ConnectionFactoryBase\r\n} from \"./ConnectionFactoryBase\";\r\nimport {\r\n    AuthInfo,\r\n    RecognizerConfig,\r\n    WebsocketMessageFormatter,\r\n} from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\n\r\nexport class IntentConnectionFactory extends ConnectionFactoryBase {\r\n\r\n    public create = (\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint);\r\n        if (!endpoint) {\r\n            const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_IntentRegion);\r\n            const hostSuffix = (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n            const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, \"wss://\" + region + \".sr.speech\" + hostSuffix);\r\n            endpoint = host + \"/speech/recognition/interactive/cognitiveservices/v1\";\r\n        }\r\n\r\n        const queryParams: IStringDictionary<string> = {\r\n            format: \"simple\",\r\n            language: config.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage),\r\n        };\r\n\r\n        this.setCommonUrlParams(config, queryParams, endpoint);\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        if (authInfo.token !== undefined && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n        headers[HeaderNames.ConnectionId] = connectionId;\r\n\r\n        config.parameters.setProperty(PropertyId.SpeechServiceConnection_Url, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n\r\n    private getSpeechRegionFromIntentRegion(intentRegion: string): string {\r\n        switch (intentRegion) {\r\n            case \"West US\":\r\n            case \"US West\":\r\n            case \"westus\":\r\n                return \"uswest\";\r\n            case \"West US 2\":\r\n            case \"US West 2\":\r\n            case \"westus2\":\r\n                return \"uswest2\";\r\n            case \"South Central US\":\r\n            case \"US South Central\":\r\n            case \"southcentralus\":\r\n                return \"ussouthcentral\";\r\n            case \"West Central US\":\r\n            case \"US West Central\":\r\n            case \"westcentralus\":\r\n                return \"uswestcentral\";\r\n            case \"East US\":\r\n            case \"US East\":\r\n            case \"eastus\":\r\n                return \"useast\";\r\n            case \"East US 2\":\r\n            case \"US East 2\":\r\n            case \"eastus2\":\r\n                return \"useast2\";\r\n            case \"West Europe\":\r\n            case \"Europe West\":\r\n            case \"westeurope\":\r\n                return \"europewest\";\r\n            case \"North Europe\":\r\n            case \"Europe North\":\r\n            case \"northeurope\":\r\n                return \"europenorth\";\r\n            case \"Brazil South\":\r\n            case \"South Brazil\":\r\n            case \"southbrazil\":\r\n                return \"brazilsouth\";\r\n            case \"Australia East\":\r\n            case \"East Australia\":\r\n            case \"eastaustralia\":\r\n                return \"australiaeast\";\r\n            case \"Southeast Asia\":\r\n            case \"Asia Southeast\":\r\n            case \"southeastasia\":\r\n                return \"asiasoutheast\";\r\n            case \"East Asia\":\r\n            case \"Asia East\":\r\n            case \"eastasia\":\r\n                return \"asiaeast\";\r\n            default:\r\n                return intentRegion;\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { EventType, PlatformEvent } from \"../common/Exports\";\r\n\r\nexport class SpeechRecognitionEvent extends PlatformEvent {\r\n    private privRequestId: string;\r\n    private privSessionId: string;\r\n\r\n    constructor(eventName: string, requestId: string, sessionId: string, eventType: EventType = EventType.Info) {\r\n        super(eventName, eventType);\r\n\r\n        this.privRequestId = requestId;\r\n        this.privSessionId = sessionId;\r\n    }\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n}\r\n\r\nexport class RecognitionTriggeredEvent extends SpeechRecognitionEvent {\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n\r\n    constructor(requestId: string, sessionId: string, audioSourceId: string, audioNodeId: string) {\r\n        super(\"RecognitionTriggeredEvent\", requestId, sessionId);\r\n\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privAudioNodeId = audioNodeId;\r\n    }\r\n\r\n    public get audioSourceId(): string {\r\n        return this.privAudioSourceId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n}\r\n\r\nexport class ListeningStartedEvent extends SpeechRecognitionEvent {\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n\r\n    constructor(requestId: string, sessionId: string, audioSourceId: string, audioNodeId: string) {\r\n        super(\"ListeningStartedEvent\", requestId, sessionId);\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privAudioNodeId = audioNodeId;\r\n    }\r\n\r\n    public get audioSourceId(): string {\r\n        return this.privAudioSourceId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n}\r\n\r\nexport class ConnectingToServiceEvent extends SpeechRecognitionEvent {\r\n    private privAuthFetchEventid: string;\r\n\r\n    constructor(requestId: string, authFetchEventid: string, sessionId: string) {\r\n        super(\"ConnectingToServiceEvent\", requestId, sessionId);\r\n        this.privAuthFetchEventid = authFetchEventid;\r\n    }\r\n\r\n    public get authFetchEventid(): string {\r\n        return this.privAuthFetchEventid;\r\n    }\r\n}\r\n\r\nexport class RecognitionStartedEvent extends SpeechRecognitionEvent {\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n    private privAuthFetchEventId: string;\r\n\r\n    constructor(requestId: string, audioSourceId: string, audioNodeId: string, authFetchEventId: string, sessionId: string) {\r\n        super(\"RecognitionStartedEvent\", requestId, sessionId);\r\n\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privAudioNodeId = audioNodeId;\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n    }\r\n\r\n    public get audioSourceId(): string {\r\n        return this.privAudioSourceId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n\r\n    public get authFetchEventId(): string {\r\n        return this.privAuthFetchEventId;\r\n    }\r\n}\r\n\r\nexport enum RecognitionCompletionStatus {\r\n    Success,\r\n    AudioSourceError,\r\n    AudioSourceTimeout,\r\n    AuthTokenFetchError,\r\n    AuthTokenFetchTimeout,\r\n    UnAuthorized,\r\n    ConnectTimeout,\r\n    ConnectError,\r\n    ClientRecognitionActivityTimeout,\r\n    UnknownError,\r\n}\r\n\r\nexport class RecognitionEndedEvent extends SpeechRecognitionEvent {\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n    private privAuthFetchEventId: string;\r\n    private privServiceTag: string;\r\n    private privStatus: RecognitionCompletionStatus;\r\n    private privError: string;\r\n\r\n    constructor(\r\n        requestId: string,\r\n        audioSourceId: string,\r\n        audioNodeId: string,\r\n        authFetchEventId: string,\r\n        sessionId: string,\r\n        serviceTag: string,\r\n        status: RecognitionCompletionStatus,\r\n        error: string) {\r\n\r\n        super(\"RecognitionEndedEvent\", requestId, sessionId, status === RecognitionCompletionStatus.Success ? EventType.Info : EventType.Error);\r\n\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privAudioNodeId = audioNodeId;\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n        this.privStatus = status;\r\n        this.privError = error;\r\n        this.privServiceTag = serviceTag;\r\n    }\r\n\r\n    public get audioSourceId(): string {\r\n        return this.privAudioSourceId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n\r\n    public get authFetchEventId(): string {\r\n        return this.privAuthFetchEventId;\r\n    }\r\n\r\n    public get serviceTag(): string {\r\n        return this.privServiceTag;\r\n    }\r\n\r\n    public get status(): RecognitionCompletionStatus {\r\n        return this.privStatus;\r\n    }\r\n\r\n    public get error(): string {\r\n        return this.privError;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ArgumentNullError, ConnectionMessage, IStringDictionary, MessageType } from \"../common/Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\n\r\nexport class SpeechConnectionMessage extends ConnectionMessage {\r\n\r\n    private privPath: string;\r\n    private privRequestId: string;\r\n    private privContentType: string;\r\n    private privStreamId: string;\r\n    private privAdditionalHeaders: IStringDictionary<string>;\r\n\r\n    public constructor(\r\n        messageType: MessageType,\r\n        path: string,\r\n        requestId: string,\r\n        contentType: string,\r\n        body: any,\r\n        streamId?: string,\r\n        additionalHeaders?: IStringDictionary<string>,\r\n        id?: string) {\r\n\r\n        if (!path) {\r\n            throw new ArgumentNullError(\"path\");\r\n        }\r\n\r\n        if (!requestId) {\r\n            throw new ArgumentNullError(\"requestId\");\r\n        }\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        headers[HeaderNames.Path] = path;\r\n        headers[HeaderNames.RequestId] = requestId;\r\n        headers[HeaderNames.RequestTimestamp] = new Date().toISOString();\r\n        if (contentType) {\r\n            headers[HeaderNames.ContentType] = contentType;\r\n        }\r\n\r\n        if (streamId) {\r\n            headers[HeaderNames.RequestStreamId] = streamId;\r\n        }\r\n\r\n        if (additionalHeaders) {\r\n            for (const headerName in additionalHeaders) {\r\n                if (headerName) {\r\n                    headers[headerName] = additionalHeaders[headerName];\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n        if (id) {\r\n            super(messageType, body, headers, id);\r\n        } else {\r\n            super(messageType, body, headers);\r\n        }\r\n\r\n        this.privPath = path;\r\n        this.privRequestId = requestId;\r\n        this.privContentType = contentType;\r\n        this.privStreamId = streamId;\r\n        this.privAdditionalHeaders = additionalHeaders;\r\n    }\r\n\r\n    public get path(): string {\r\n        return this.privPath;\r\n    }\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n\r\n    public get contentType(): string {\r\n        return this.privContentType;\r\n    }\r\n\r\n    public get streamId(): string {\r\n        return this.privStreamId;\r\n    }\r\n\r\n    public get additionalHeaders(): IStringDictionary<string> {\r\n        return this.privAdditionalHeaders;\r\n    }\r\n\r\n    public static fromConnectionMessage = (message: ConnectionMessage): SpeechConnectionMessage => {\r\n        let path = null;\r\n        let requestId = null;\r\n        let contentType = null;\r\n        let requestTimestamp = null;\r\n        let streamId = null;\r\n        const additionalHeaders: IStringDictionary<string> = {};\r\n\r\n        if (message.headers) {\r\n            for (const headerName in message.headers) {\r\n                if (headerName) {\r\n                    if (headerName.toLowerCase() === HeaderNames.Path.toLowerCase()) {\r\n                        path = message.headers[headerName];\r\n                    } else if (headerName.toLowerCase() === HeaderNames.RequestId.toLowerCase()) {\r\n                        requestId = message.headers[headerName];\r\n                    } else if (headerName.toLowerCase() === HeaderNames.RequestTimestamp.toLowerCase()) {\r\n                        requestTimestamp = message.headers[headerName];\r\n                    } else if (headerName.toLowerCase() === HeaderNames.ContentType.toLowerCase()) {\r\n                        contentType = message.headers[headerName];\r\n                    } else if (headerName.toLowerCase() === HeaderNames.RequestStreamId.toLowerCase()) {\r\n                        streamId = message.headers[headerName];\r\n                    } else {\r\n                        additionalHeaders[headerName] = message.headers[headerName];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return new SpeechConnectionMessage(\r\n            message.messageType,\r\n            path,\r\n            requestId,\r\n            contentType,\r\n            message.body,\r\n            streamId,\r\n            additionalHeaders,\r\n            message.id);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ReplayableAudioNode } from \"../common.browser/Exports\";\r\nimport { ConnectionOpenResponse } from \"../common/ConnectionOpenResponse\";\r\nimport {\r\n    ArgumentNullError,\r\n    ConnectionClosedEvent,\r\n    ConnectionEvent,\r\n    ConnectionState,\r\n    createNoDashGuid,\r\n    EventSource,\r\n    IAudioSource,\r\n    IAudioStreamNode,\r\n    IConnection,\r\n    IDisposable,\r\n    IStreamChunk,\r\n    MessageType,\r\n    ServiceEvent,\r\n    Timeout\r\n} from \"../common/Exports\";\r\nimport { AudioStreamFormatImpl } from \"../sdk/Audio/AudioStreamFormat\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyId,\r\n    RecognitionEventArgs,\r\n    Recognizer,\r\n    SessionEventArgs,\r\n    SpeechRecognitionResult,\r\n} from \"../sdk/Exports\";\r\nimport { Callback } from \"../sdk/Transcription/IConversation\";\r\nimport {\r\n    AgentConfig,\r\n    DynamicGrammarBuilder,\r\n    ISpeechConfigAudioDevice,\r\n    RecognitionMode,\r\n    RequestSession,\r\n    SpeechContext,\r\n    SpeechDetected,\r\n    type\r\n} from \"./Exports\";\r\nimport {\r\n    AuthInfo,\r\n    IAuthentication,\r\n} from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\nexport abstract class ServiceRecognizerBase implements IDisposable {\r\n    private privAuthentication: IAuthentication;\r\n    private privConnectionFactory: IConnectionFactory;\r\n\r\n    // A promise for a configured connection.\r\n    // Do not consume directly, call fetchConnection instead.\r\n    private privConnectionConfigurationPromise: Promise<IConnection>;\r\n\r\n    // A promise for a connection, but one that has not had the speech context sent yet.\r\n    // Do not consume directly, call fetchConnection instead.\r\n    private privConnectionPromise: Promise<IConnection>;\r\n    private privAuthFetchEventId: string;\r\n    private privIsDisposed: boolean;\r\n    private privMustReportEndOfStream: boolean;\r\n    private privConnectionEvents: EventSource<ConnectionEvent>;\r\n    private privServiceEvents: EventSource<ServiceEvent>;\r\n    private privDynamicGrammar: DynamicGrammarBuilder;\r\n    private privAgentConfig: AgentConfig;\r\n    private privServiceHasSentMessage: boolean;\r\n    private privActivityTemplate: string;\r\n    private privSetTimeout: (cb: () => void, delay: number) => number = setTimeout;\r\n    private privAudioSource: IAudioSource;\r\n    private privIsLiveAudio: boolean = false;\r\n    protected privSpeechContext: SpeechContext;\r\n    protected privRequestSession: RequestSession;\r\n    protected privConnectionId: string;\r\n    protected privRecognizerConfig: RecognizerConfig;\r\n    protected privRecognizer: Recognizer;\r\n    protected privSuccessCallback: (e: SpeechRecognitionResult) => void;\r\n    protected privErrorCallback: (e: string) => void;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        recognizer: Recognizer) {\r\n\r\n        if (!authentication) {\r\n            throw new ArgumentNullError(\"authentication\");\r\n        }\r\n\r\n        if (!connectionFactory) {\r\n            throw new ArgumentNullError(\"connectionFactory\");\r\n        }\r\n\r\n        if (!audioSource) {\r\n            throw new ArgumentNullError(\"audioSource\");\r\n        }\r\n\r\n        if (!recognizerConfig) {\r\n            throw new ArgumentNullError(\"recognizerConfig\");\r\n        }\r\n\r\n        this.privMustReportEndOfStream = false;\r\n        this.privAuthentication = authentication;\r\n        this.privConnectionFactory = connectionFactory;\r\n        this.privAudioSource = audioSource;\r\n        this.privRecognizerConfig = recognizerConfig;\r\n        this.privIsDisposed = false;\r\n        this.privRecognizer = recognizer;\r\n        this.privRequestSession = new RequestSession(this.privAudioSource.id());\r\n        this.privConnectionEvents = new EventSource<ConnectionEvent>();\r\n        this.privServiceEvents = new EventSource<ServiceEvent>();\r\n        this.privDynamicGrammar = new DynamicGrammarBuilder();\r\n        this.privSpeechContext = new SpeechContext(this.privDynamicGrammar);\r\n        this.privAgentConfig = new AgentConfig();\r\n        if (typeof (Blob) !== \"undefined\" && typeof (Worker) !== \"undefined\") {\r\n            this.privSetTimeout = Timeout.setTimeout;\r\n        }\r\n\r\n        this.connectionEvents.attach(async (connectionEvent: ConnectionEvent): Promise<void> => {\r\n            if (connectionEvent.name === \"ConnectionClosedEvent\") {\r\n                const connectionClosedEvent = connectionEvent as ConnectionClosedEvent;\r\n                if (connectionClosedEvent.statusCode === 1003 ||\r\n                    connectionClosedEvent.statusCode === 1007 ||\r\n                    connectionClosedEvent.statusCode === 1002 ||\r\n                    connectionClosedEvent.statusCode === 4000 ||\r\n                    this.privRequestSession.numConnectionAttempts > this.privRecognizerConfig.maxRetryCount\r\n                ) {\r\n                    await this.cancelRecognitionLocal(CancellationReason.Error,\r\n                        connectionClosedEvent.statusCode === 1007 ? CancellationErrorCode.BadRequestParameters : CancellationErrorCode.ConnectionFailure,\r\n                        connectionClosedEvent.reason + \" websocket error code: \" + connectionClosedEvent.statusCode);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    public get audioSource(): IAudioSource {\r\n        return this.privAudioSource;\r\n    }\r\n\r\n    public get speechContext(): SpeechContext {\r\n        return this.privSpeechContext;\r\n    }\r\n\r\n    public get dynamicGrammar(): DynamicGrammarBuilder {\r\n        return this.privDynamicGrammar;\r\n    }\r\n\r\n    public get agentConfig(): AgentConfig {\r\n        return this.privAgentConfig;\r\n    }\r\n\r\n    public set conversationTranslatorToken(token: string) {\r\n        this.privRecognizerConfig.parameters.setProperty(PropertyId.ConversationTranslator_Token, token);\r\n    }\r\n\r\n    public set authentication(auth: IAuthentication) {\r\n        this.privAuthentication = this.authentication;\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public async dispose(reason?: string): Promise<void> {\r\n        this.privIsDisposed = true;\r\n        if (this.privConnectionConfigurationPromise) {\r\n            try {\r\n                const connection: IConnection = await this.privConnectionConfigurationPromise;\r\n                await connection.dispose(reason);\r\n            } catch (error) {\r\n                // The connection is in a bad state. But we're trying to kill it, so...\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    public get connectionEvents(): EventSource<ConnectionEvent> {\r\n        return this.privConnectionEvents;\r\n    }\r\n\r\n    public get serviceEvents(): EventSource<ServiceEvent> {\r\n        return this.privServiceEvents;\r\n    }\r\n\r\n    public get recognitionMode(): RecognitionMode {\r\n        return this.privRecognizerConfig.recognitionMode;\r\n    }\r\n\r\n    protected recognizeOverride: (recoMode: RecognitionMode, sc: (e: SpeechRecognitionResult) => void, ec: (e: string) => void) => any = undefined;\r\n\r\n    public async recognize(\r\n        recoMode: RecognitionMode,\r\n        successCallback: (e: SpeechRecognitionResult) => void,\r\n        errorCallBack: (e: string) => void,\r\n    ): Promise<void> {\r\n\r\n        if (this.recognizeOverride !== undefined) {\r\n            return this.recognizeOverride(recoMode, successCallback, errorCallBack);\r\n        }\r\n        // Clear the existing configuration promise to force a re-transmission of config and context.\r\n        this.privConnectionConfigurationPromise = null;\r\n        this.privRecognizerConfig.recognitionMode = recoMode;\r\n\r\n        this.privSuccessCallback = successCallback;\r\n        this.privErrorCallback = errorCallBack;\r\n\r\n        this.privRequestSession.startNewRecognition();\r\n        this.privRequestSession.listenForServiceTelemetry(this.privAudioSource.events);\r\n\r\n        // Start the connection to the service. The promise this will create is stored and will be used by configureConnection().\r\n        const conPromise: Promise<IConnection> = this.connectImpl();\r\n        let audioNode: ReplayableAudioNode;\r\n\r\n        try {\r\n            const audioStreamNode: IAudioStreamNode = await this.audioSource.attach(this.privRequestSession.audioNodeId);\r\n            const format: AudioStreamFormatImpl = await this.audioSource.format;\r\n            const deviceInfo: ISpeechConfigAudioDevice = await this.audioSource.deviceInfo;\r\n            this.privIsLiveAudio = deviceInfo.type && deviceInfo.type === type.Microphones;\r\n\r\n            audioNode = new ReplayableAudioNode(audioStreamNode, format.avgBytesPerSec);\r\n            await this.privRequestSession.onAudioSourceAttachCompleted(audioNode, false);\r\n            this.privRecognizerConfig.SpeechServiceConfig.Context.audio = { source: deviceInfo };\r\n\r\n        } catch (error) {\r\n            await this.privRequestSession.onStopRecognizing();\r\n            throw error;\r\n        }\r\n\r\n        try {\r\n            await conPromise;\r\n        } catch (error) {\r\n            await this.cancelRecognitionLocal(CancellationReason.Error, CancellationErrorCode.ConnectionFailure, error);\r\n            return;\r\n        }\r\n\r\n        const sessionStartEventArgs: SessionEventArgs = new SessionEventArgs(this.privRequestSession.sessionId);\r\n\r\n        if (!!this.privRecognizer.sessionStarted) {\r\n            this.privRecognizer.sessionStarted(this.privRecognizer, sessionStartEventArgs);\r\n        }\r\n\r\n        const messageRetrievalPromise = this.receiveMessage();\r\n        const audioSendPromise = this.sendAudio(audioNode);\r\n\r\n        audioSendPromise.catch(async (error: string) => {\r\n            await this.cancelRecognitionLocal(CancellationReason.Error, CancellationErrorCode.RuntimeError, error);\r\n        });\r\n\r\n        return;\r\n    }\r\n\r\n    public async stopRecognizing(): Promise<void> {\r\n        if (this.privRequestSession.isRecognizing) {\r\n            try {\r\n                await this.audioSource.turnOff();\r\n                await this.sendFinalAudio();\r\n                await this.privRequestSession.onStopRecognizing();\r\n                await this.privRequestSession.turnCompletionPromise;\r\n            } finally {\r\n                await this.privRequestSession.dispose();\r\n            }\r\n        }\r\n        return;\r\n    }\r\n\r\n    public async connect(): Promise<void> {\r\n        await this.connectImpl();\r\n        return Promise.resolve();\r\n    }\r\n\r\n    public connectAsync(cb?: Callback, err?: Callback): void {\r\n        this.connectImpl().then((connection: IConnection): void => {\r\n            try {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            } catch (e) {\r\n                if (!!err) {\r\n                    err(e);\r\n                }\r\n            }\r\n        }, (reason: any): void => {\r\n            try {\r\n                if (!!err) {\r\n                    err(reason);\r\n                }\r\n                /* tslint:disable:no-empty */\r\n            } catch (error) {\r\n            }\r\n        });\r\n    }\r\n\r\n    protected disconnectOverride: () => Promise<void> = undefined;\r\n\r\n    public async disconnect(): Promise<void> {\r\n        await this.cancelRecognitionLocal(CancellationReason.Error,\r\n            CancellationErrorCode.NoError,\r\n            \"Disconnecting\");\r\n\r\n        if (this.disconnectOverride !== undefined) {\r\n            await this.disconnectOverride();\r\n        }\r\n\r\n        try {\r\n            await (await this.privConnectionPromise).dispose();\r\n        } catch (error) {\r\n\r\n        }\r\n\r\n        this.privConnectionPromise = null;\r\n    }\r\n\r\n    // Called when telemetry data is sent to the service.\r\n    // Used for testing Telemetry capture.\r\n    public static telemetryData: (json: string) => void;\r\n    public static telemetryDataEnabled: boolean = true;\r\n\r\n    public sendMessage(message: string): void { }\r\n\r\n    public async sendNetworkMessage(path: string, payload: string | ArrayBuffer): Promise<void> {\r\n        const type: MessageType = typeof payload === \"string\" ? MessageType.Text : MessageType.Binary;\r\n        const contentType: string = typeof payload === \"string\" ? \"application/json\" : \"\";\r\n\r\n        const connection: IConnection = await this.fetchConnection();\r\n        return connection.send(new SpeechConnectionMessage(type, path, this.privRequestSession.requestId, contentType, payload));\r\n    }\r\n\r\n    public set activityTemplate(messagePayload: string) { this.privActivityTemplate = messagePayload; }\r\n    public get activityTemplate(): string { return this.privActivityTemplate; }\r\n\r\n    protected abstract processTypeSpecificMessages(\r\n        connectionMessage: SpeechConnectionMessage,\r\n        successCallback?: (e: SpeechRecognitionResult) => void,\r\n        errorCallBack?: (e: string) => void): Promise<boolean>;\r\n\r\n    protected async sendTelemetryData(): Promise<void> {\r\n        const telemetryData = this.privRequestSession.getTelemetry();\r\n        if (ServiceRecognizerBase.telemetryDataEnabled !== true ||\r\n            this.privIsDisposed ||\r\n            null === telemetryData) {\r\n            return;\r\n        }\r\n\r\n        if (!!ServiceRecognizerBase.telemetryData) {\r\n            try {\r\n                ServiceRecognizerBase.telemetryData(telemetryData);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        const connection: IConnection = await this.fetchConnection();\r\n        await connection.send(new SpeechConnectionMessage(\r\n            MessageType.Text,\r\n            \"telemetry\",\r\n            this.privRequestSession.requestId,\r\n            \"application/json\",\r\n            telemetryData));\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected abstract cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void;\r\n\r\n    // Cancels recognition.\r\n    protected async cancelRecognitionLocal(\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): Promise<void> {\r\n\r\n        if (!!this.privRequestSession.isRecognizing) {\r\n            await this.privRequestSession.onStopRecognizing();\r\n\r\n            this.cancelRecognition(\r\n                this.privRequestSession.sessionId,\r\n                this.privRequestSession.requestId,\r\n                cancellationReason,\r\n                errorCode,\r\n                error);\r\n        }\r\n    }\r\n\r\n    protected receiveMessageOverride: () => Promise<void> = undefined;\r\n\r\n    protected async receiveMessage(): Promise<void> {\r\n        try {\r\n            if (this.privIsDisposed) {\r\n                // We're done.\r\n                return;\r\n            }\r\n\r\n            let connection = await this.fetchConnection();\r\n            const message = await connection.read();\r\n\r\n            if (this.receiveMessageOverride !== undefined) {\r\n                return this.receiveMessageOverride();\r\n            }\r\n\r\n            // indicates we are draining the queue and it came with no message;\r\n            if (!message) {\r\n                if (!this.privRequestSession.isRecognizing) {\r\n                    return;\r\n                } else {\r\n                    return this.receiveMessage();\r\n                }\r\n            }\r\n\r\n            this.privServiceHasSentMessage = true;\r\n            const connectionMessage = SpeechConnectionMessage.fromConnectionMessage(message);\r\n\r\n            if (connectionMessage.requestId.toLowerCase() === this.privRequestSession.requestId.toLowerCase()) {\r\n                switch (connectionMessage.path.toLowerCase()) {\r\n                    case \"turn.start\":\r\n                        this.privMustReportEndOfStream = true;\r\n                        this.privRequestSession.onServiceTurnStartResponse();\r\n                        break;\r\n\r\n                    case \"speech.startdetected\":\r\n                        const speechStartDetected: SpeechDetected = SpeechDetected.fromJSON(connectionMessage.textBody);\r\n                        const speechStartEventArgs = new RecognitionEventArgs(speechStartDetected.Offset, this.privRequestSession.sessionId);\r\n                        if (!!this.privRecognizer.speechStartDetected) {\r\n                            this.privRecognizer.speechStartDetected(this.privRecognizer, speechStartEventArgs);\r\n                        }\r\n                        break;\r\n\r\n                    case \"speech.enddetected\":\r\n                        let json: string;\r\n                        if (connectionMessage.textBody.length > 0) {\r\n                            json = connectionMessage.textBody;\r\n                        } else {\r\n                            // If the request was empty, the JSON returned is empty.\r\n                            json = \"{ Offset: 0 }\";\r\n                        }\r\n                        const speechStopDetected: SpeechDetected = SpeechDetected.fromJSON(json);\r\n                        // Only shrink the buffers for continuous recognition.\r\n                        // For single shot, the speech.phrase message will come after the speech.end and it should own buffer shrink.\r\n                        if (this.privRecognizerConfig.isContinuousRecognition) {\r\n                            this.privRequestSession.onServiceRecognized(speechStopDetected.Offset + this.privRequestSession.currentTurnAudioOffset);\r\n                        }\r\n                        const speechStopEventArgs = new RecognitionEventArgs(speechStopDetected.Offset + this.privRequestSession.currentTurnAudioOffset, this.privRequestSession.sessionId);\r\n                        if (!!this.privRecognizer.speechEndDetected) {\r\n                            this.privRecognizer.speechEndDetected(this.privRecognizer, speechStopEventArgs);\r\n                        }\r\n                        break;\r\n\r\n                    case \"turn.end\":\r\n                        await this.sendTelemetryData();\r\n                        if (this.privRequestSession.isSpeechEnded && this.privMustReportEndOfStream) {\r\n                            this.privMustReportEndOfStream = false;\r\n                            await this.cancelRecognitionLocal(CancellationReason.EndOfStream, CancellationErrorCode.NoError, undefined);\r\n                        }\r\n                        const sessionStopEventArgs: SessionEventArgs = new SessionEventArgs(this.privRequestSession.sessionId);\r\n                        await this.privRequestSession.onServiceTurnEndResponse(this.privRecognizerConfig.isContinuousRecognition);\r\n                        if (!this.privRecognizerConfig.isContinuousRecognition || this.privRequestSession.isSpeechEnded || !this.privRequestSession.isRecognizing) {\r\n                            if (!!this.privRecognizer.sessionStopped) {\r\n                                this.privRecognizer.sessionStopped(this.privRecognizer, sessionStopEventArgs);\r\n                            }\r\n                            return;\r\n                        } else {\r\n                            connection = await this.fetchConnection();\r\n                            await this.sendPrePayloadJSON(connection);\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n                        if (!await this.processTypeSpecificMessages(connectionMessage)) {\r\n                            // here are some messages that the derived class has not processed, dispatch them to connect class\r\n                            if (!!this.privServiceEvents) {\r\n                                this.serviceEvents.onEvent(new ServiceEvent(connectionMessage.path.toLowerCase(), connectionMessage.textBody));\r\n                            }\r\n                        }\r\n                }\r\n            }\r\n            return this.receiveMessage();\r\n        } catch (error) {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    protected sendSpeechContext = (connection: IConnection): Promise<void> => {\r\n        const speechContextJson = this.speechContext.toJSON();\r\n\r\n        if (speechContextJson) {\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"speech.context\",\r\n                this.privRequestSession.requestId,\r\n                \"application/json\",\r\n                speechContextJson));\r\n        }\r\n        return;\r\n    }\r\n\r\n    protected sendPrePayloadJSONOverride: (connection: IConnection) => Promise<void> = undefined;\r\n\r\n    // Encapsulated for derived service recognizers that need to send additional JSON\r\n    protected async sendPrePayloadJSON(connection: IConnection): Promise<void> {\r\n        if (this.sendPrePayloadJSONOverride !== undefined) {\r\n            return this.sendPrePayloadJSONOverride(connection);\r\n        }\r\n\r\n        await this.sendSpeechContext(connection);\r\n        await this.sendWaveHeader(connection);\r\n        return;\r\n    }\r\n\r\n    protected async sendWaveHeader(connection: IConnection): Promise<void> {\r\n        const format: AudioStreamFormatImpl = await this.audioSource.format;\r\n        // this.writeBufferToConsole(format.header);\r\n        return connection.send(new SpeechConnectionMessage(\r\n            MessageType.Binary,\r\n            \"audio\",\r\n            this.privRequestSession.requestId,\r\n            \"audio/x-wav\",\r\n            format.header\r\n        ));\r\n    }\r\n\r\n    protected postConnectImplOverride: (connection: Promise<IConnection>) => Promise<IConnection> = undefined;\r\n\r\n    // Establishes a websocket connection to the end point.\r\n    protected connectImpl(): Promise<IConnection> {\r\n        if (this.privConnectionPromise) {\r\n            return this.privConnectionPromise.then((connection: IConnection): Promise<IConnection> => {\r\n                if (connection.state() === ConnectionState.Disconnected) {\r\n                    this.privConnectionId = null;\r\n                    this.privConnectionPromise = null;\r\n                    this.privServiceHasSentMessage = false;\r\n                    return this.connectImpl();\r\n                }\r\n                return this.privConnectionPromise;\r\n            }, (error: string): Promise<IConnection> => {\r\n                this.privConnectionId = null;\r\n                this.privConnectionPromise = null;\r\n                this.privServiceHasSentMessage = false;\r\n                return this.connectImpl();\r\n            });\r\n        }\r\n\r\n        this.privConnectionPromise = this.retryableConnect();\r\n\r\n        // Attach an empty handler to allow the promise to run in the background while\r\n        // other startup events happen. It'll eventually be awaited on.\r\n        this.privConnectionPromise.catch(() => { });\r\n\r\n        if (this.postConnectImplOverride !== undefined) {\r\n            return this.postConnectImplOverride(this.privConnectionPromise);\r\n        }\r\n\r\n        return this.privConnectionPromise;\r\n    }\r\n\r\n    protected configConnectionOverride: (connection: IConnection) => Promise<IConnection> = undefined;\r\n\r\n    protected sendSpeechServiceConfig = (connection: IConnection, requestSession: RequestSession, SpeechServiceConfigJson: string): Promise<void> => {\r\n        // filter out anything that is not required for the service to work.\r\n        if (ServiceRecognizerBase.telemetryDataEnabled !== true) {\r\n            const withTelemetry = JSON.parse(SpeechServiceConfigJson);\r\n\r\n            const replacement: any = {\r\n                context: {\r\n                    system: withTelemetry.context.system,\r\n                },\r\n            };\r\n\r\n            SpeechServiceConfigJson = JSON.stringify(replacement);\r\n        }\r\n\r\n        if (this.privRecognizerConfig.parameters.getProperty(\"TranscriptionService_SingleChannel\", \"false\").toLowerCase() === \"true\") {\r\n            const json: { context: any } = JSON.parse(SpeechServiceConfigJson);\r\n            json.context.DisableReferenceChannel = \"True\";\r\n            json.context.MicSpec = \"1_0_0\";\r\n            SpeechServiceConfigJson = JSON.stringify(json);\r\n        }\r\n\r\n        if (SpeechServiceConfigJson) {\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"speech.config\",\r\n                requestSession.requestId,\r\n                \"application/json\",\r\n                SpeechServiceConfigJson));\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    protected async fetchConnection(): Promise<IConnection> {\r\n        if (this.privConnectionConfigurationPromise) {\r\n            return this.privConnectionConfigurationPromise.then((connection: IConnection): Promise<IConnection> => {\r\n                if (connection.state() === ConnectionState.Disconnected) {\r\n                    this.privConnectionId = null;\r\n                    this.privConnectionConfigurationPromise = null;\r\n                    this.privServiceHasSentMessage = false;\r\n                    return this.fetchConnection();\r\n                }\r\n                return this.privConnectionConfigurationPromise;\r\n            }, (error: string): Promise<IConnection> => {\r\n                this.privConnectionId = null;\r\n                this.privConnectionConfigurationPromise = null;\r\n                this.privServiceHasSentMessage = false;\r\n                return this.fetchConnection();\r\n            });\r\n        }\r\n\r\n        this.privConnectionConfigurationPromise = this.configureConnection();\r\n        return await this.privConnectionConfigurationPromise;\r\n    }\r\n\r\n    protected async sendAudio(audioStreamNode: IAudioStreamNode): Promise<void> {\r\n        const audioFormat: AudioStreamFormatImpl = await this.audioSource.format;\r\n\r\n        // The time we last sent data to the service.\r\n        let nextSendTime: number = Date.now();\r\n\r\n        // Max amount to send before we start to throttle\r\n        const fastLaneSizeMs: string = this.privRecognizerConfig.parameters.getProperty(\"SPEECH-TransmitLengthBeforThrottleMs\", \"5000\");\r\n        const maxSendUnthrottledBytes: number = audioFormat.avgBytesPerSec / 1000 * parseInt(fastLaneSizeMs, 10);\r\n        const startRecogNumber: number = this.privRequestSession.recogNumber;\r\n\r\n        const readAndUploadCycle = async (): Promise<void> => {\r\n            // If speech is done, stop sending audio.\r\n            if (!this.privIsDisposed &&\r\n                !this.privRequestSession.isSpeechEnded &&\r\n                this.privRequestSession.isRecognizing &&\r\n                this.privRequestSession.recogNumber === startRecogNumber) {\r\n\r\n                const connection: IConnection = await this.fetchConnection();\r\n                const audioStreamChunk: IStreamChunk<ArrayBuffer> = await audioStreamNode.read();\r\n                // we have a new audio chunk to upload.\r\n                if (this.privRequestSession.isSpeechEnded) {\r\n                    // If service already recognized audio end then don't send any more audio\r\n                    return;\r\n                }\r\n\r\n                let payload: ArrayBuffer;\r\n                let sendDelay: number;\r\n\r\n                if (!audioStreamChunk || audioStreamChunk.isEnd) {\r\n                    payload = null;\r\n                    sendDelay = 0;\r\n                } else {\r\n                    payload = audioStreamChunk.buffer;\r\n\r\n                    this.privRequestSession.onAudioSent(payload.byteLength);\r\n\r\n                    if (maxSendUnthrottledBytes >= this.privRequestSession.bytesSent) {\r\n                        sendDelay = 0;\r\n                    } else {\r\n                        sendDelay = Math.max(0, nextSendTime - Date.now());\r\n                    }\r\n                }\r\n\r\n                if (0 !== sendDelay) {\r\n                    await this.delay(sendDelay);\r\n                }\r\n\r\n                if (payload !== null) {\r\n                    nextSendTime = Date.now() + (payload.byteLength * 1000 / (audioFormat.avgBytesPerSec * 2));\r\n                }\r\n\r\n                // Are we still alive?\r\n                if (!this.privIsDisposed &&\r\n                    !this.privRequestSession.isSpeechEnded &&\r\n                    this.privRequestSession.isRecognizing &&\r\n                    this.privRequestSession.recogNumber === startRecogNumber) {\r\n                    connection.send(\r\n                        new SpeechConnectionMessage(MessageType.Binary, \"audio\", this.privRequestSession.requestId, null, payload)\r\n                    ).catch(() => {\r\n                        this.privRequestSession.onServiceTurnEndResponse(this.privRecognizerConfig.isContinuousRecognition).catch(() => { });\r\n                    });\r\n\r\n                    if (!audioStreamChunk?.isEnd) {\r\n                        // this.writeBufferToConsole(payload);\r\n                        // Regardless of success or failure, schedule the next upload.\r\n                        // If the underlying connection was broken, the next cycle will\r\n                        // get a new connection and re-transmit missing audio automatically.\r\n                        return readAndUploadCycle();\r\n                    } else {\r\n                        // the audio stream has been closed, no need to schedule next\r\n                        // read-upload cycle.\r\n                        if (!this.privIsLiveAudio) {\r\n                            this.privRequestSession.onSpeechEnded();\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        return readAndUploadCycle();\r\n    }\r\n\r\n    private async retryableConnect(): Promise<IConnection> {\r\n        let isUnAuthorized: boolean = false;\r\n\r\n        this.privAuthFetchEventId = createNoDashGuid();\r\n        const sessionId: string = this.privRequestSession.sessionId;\r\n        this.privConnectionId = (sessionId !== undefined) ? sessionId : createNoDashGuid();\r\n\r\n        this.privRequestSession.onPreConnectionStart(this.privAuthFetchEventId, this.privConnectionId);\r\n        let lastStatusCode: number = 0;\r\n        let lastReason: string = \"\";\r\n\r\n        while (this.privRequestSession.numConnectionAttempts <= this.privRecognizerConfig.maxRetryCount) {\r\n\r\n            // Get the auth information for the connection. This is a bit of overkill for the current API surface, but leaving the plumbing in place to be able to raise a developer-customer\r\n            // facing event when a connection fails to let them try and provide new auth information.\r\n            const authPromise = isUnAuthorized ? this.privAuthentication.fetchOnExpiry(this.privAuthFetchEventId) : this.privAuthentication.fetch(this.privAuthFetchEventId);\r\n            const auth: AuthInfo = await authPromise;\r\n\r\n            await this.privRequestSession.onAuthCompleted(false);\r\n\r\n            // Create the connection\r\n            const connection: IConnection = this.privConnectionFactory.create(this.privRecognizerConfig, auth, this.privConnectionId);\r\n            // Attach the telemetry handlers.\r\n            this.privRequestSession.listenForServiceTelemetry(connection.events);\r\n\r\n            // Attach to the underlying event. No need to hold onto the detach pointers as in the event the connection goes away,\r\n            // it'll stop sending events.\r\n            connection.events.attach((event: ConnectionEvent) => {\r\n                this.connectionEvents.onEvent(event);\r\n            });\r\n\r\n            const response: ConnectionOpenResponse = await connection.open();\r\n            // 200 == everything is fine.\r\n            if (response.statusCode === 200) {\r\n                await this.privRequestSession.onConnectionEstablishCompleted(response.statusCode);\r\n                return Promise.resolve(connection);\r\n            } else if (response.statusCode === 1006) {\r\n                isUnAuthorized = true;\r\n            }\r\n\r\n            lastStatusCode = response.statusCode;\r\n            lastReason = response.reason;\r\n\r\n            this.privRequestSession.onRetryConnection();\r\n        }\r\n\r\n        await this.privRequestSession.onConnectionEstablishCompleted(lastStatusCode, lastReason);\r\n        return Promise.reject(`Unable to contact server. StatusCode: ${lastStatusCode}, ${this.privRecognizerConfig.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint)} Reason: ${lastReason}`);\r\n    }\r\n\r\n    private delay(delayMs: number): Promise<void> {\r\n        return new Promise((resolve: () => void, reject: (error: string) => void) => {\r\n            this.privSetTimeout(resolve, delayMs);\r\n        });\r\n    }\r\n\r\n    private writeBufferToConsole(buffer: ArrayBuffer): void {\r\n        let out: string = \"Buffer Size: \";\r\n        if (null === buffer) {\r\n            out += \"null\";\r\n        } else {\r\n            const readView: Uint8Array = new Uint8Array(buffer);\r\n            out += buffer.byteLength + \"\\r\\n\";\r\n            for (let i: number = 0; i < buffer.byteLength; i++) {\r\n                out += readView[i].toString(16).padStart(2, \"0\") + \" \";\r\n            }\r\n        }\r\n        // tslint:disable-next-line:no-console\r\n        console.info(out);\r\n    }\r\n\r\n    private async sendFinalAudio(): Promise<void> {\r\n        const connection: IConnection = await this.fetchConnection();\r\n        await connection.send(new SpeechConnectionMessage(MessageType.Binary, \"audio\", this.privRequestSession.requestId, null, null));\r\n        return;\r\n    }\r\n\r\n    // Takes an established websocket connection to the endpoint and sends speech configuration information.\r\n    private async configureConnection(): Promise<IConnection> {\r\n        const connection: IConnection = await this.connectImpl();\r\n        if (this.configConnectionOverride !== undefined) {\r\n            return this.configConnectionOverride(connection);\r\n        }\r\n        await this.sendSpeechServiceConfig(connection, this.privRequestSession, this.privRecognizerConfig.SpeechServiceConfig.serialize());\r\n        await this.sendPrePayloadJSON(connection);\r\n        return connection;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { PropertyCollection, PropertyId } from \"../sdk/Exports\";\r\n\r\nexport enum RecognitionMode {\r\n    Interactive,\r\n    Conversation,\r\n    Dictation,\r\n}\r\n\r\nexport enum SpeechResultFormat {\r\n    Simple,\r\n    Detailed,\r\n}\r\n\r\nexport class RecognizerConfig {\r\n    private privRecognitionMode: RecognitionMode = RecognitionMode.Interactive;\r\n    private privSpeechServiceConfig: SpeechServiceConfig;\r\n    private privRecognitionActivityTimeout: number;\r\n    private privParameters: PropertyCollection;\r\n    private privMaxRetryCount: number;\r\n\r\n    constructor(\r\n        speechServiceConfig: SpeechServiceConfig,\r\n        parameters: PropertyCollection) {\r\n        this.privSpeechServiceConfig = speechServiceConfig ? speechServiceConfig : new SpeechServiceConfig(new Context(null));\r\n        this.privParameters = parameters;\r\n        this.privMaxRetryCount = parseInt(parameters.getProperty(\"SPEECH-Error-MaxRetryCount\", \"4\"), 10);\r\n    }\r\n\r\n    public get parameters(): PropertyCollection {\r\n        return this.privParameters;\r\n    }\r\n\r\n    public get recognitionMode(): RecognitionMode {\r\n        return this.privRecognitionMode;\r\n    }\r\n\r\n    public set recognitionMode(value: RecognitionMode) {\r\n        this.privRecognitionMode = value;\r\n        this.privRecognitionActivityTimeout = value === RecognitionMode.Interactive ? 8000 : 25000;\r\n        this.privSpeechServiceConfig.Recognition = RecognitionMode[value];\r\n    }\r\n\r\n    public get SpeechServiceConfig(): SpeechServiceConfig {\r\n        return this.privSpeechServiceConfig;\r\n    }\r\n\r\n    public get recognitionActivityTimeout(): number {\r\n        return this.privRecognitionActivityTimeout;\r\n    }\r\n\r\n    public get isContinuousRecognition(): boolean {\r\n        return this.privRecognitionMode !== RecognitionMode.Interactive;\r\n    }\r\n\r\n    public get autoDetectSourceLanguages(): string {\r\n        return this.parameters.getProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguages, undefined);\r\n    }\r\n\r\n    public get maxRetryCount(): number {\r\n        return this.privMaxRetryCount;\r\n    }\r\n}\r\n\r\n// The config is serialized and sent as the Speech.Config\r\nexport class SpeechServiceConfig {\r\n    private context: Context;\r\n    private recognition: string;\r\n\r\n    constructor(context: Context) {\r\n        this.context = context;\r\n    }\r\n\r\n    public serialize = (): string => {\r\n        return JSON.stringify(this, (key: any, value: any): any => {\r\n            if (value && typeof value === \"object\") {\r\n                const replacement: any = {};\r\n                for (const k in value) {\r\n                    if (Object.hasOwnProperty.call(value, k)) {\r\n                        replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k];\r\n                    }\r\n                }\r\n                return replacement;\r\n            }\r\n            return value;\r\n        });\r\n    }\r\n\r\n    public get Context(): Context {\r\n        return this.context;\r\n    }\r\n\r\n    public get Recognition(): string {\r\n        return this.recognition;\r\n    }\r\n\r\n    public set Recognition(value: string) {\r\n        this.recognition = value.toLowerCase();\r\n    }\r\n}\r\n\r\nexport class Context {\r\n    public system: System;\r\n    public os: OS;\r\n    public audio: ISpeechConfigAudio;\r\n\r\n    constructor(os: OS) {\r\n        this.system = new System();\r\n        this.os = os;\r\n    }\r\n}\r\n\r\nexport class System {\r\n    public name: string;\r\n    public version: string;\r\n    public build: string;\r\n    public lang: string;\r\n\r\n    constructor() {\r\n        // Note: below will be patched for official builds.\r\n        const SPEECHSDK_CLIENTSDK_VERSION = \"1.17.0\";\r\n\r\n        this.name = \"SpeechSDK\";\r\n        this.version = SPEECHSDK_CLIENTSDK_VERSION;\r\n        this.build = \"JavaScript\";\r\n        this.lang = \"JavaScript\";\r\n    }\r\n}\r\n\r\nexport class OS {\r\n    public platform: string;\r\n    public name: string;\r\n    public version: string;\r\n\r\n    constructor(platform: string, name: string, version: string) {\r\n        this.platform = platform;\r\n        this.name = name;\r\n        this.version = version;\r\n    }\r\n}\r\n\r\nexport class Device {\r\n    public manufacturer: string;\r\n    public model: string;\r\n    public version: string;\r\n\r\n    constructor(manufacturer: string, model: string, version: string) {\r\n        this.manufacturer = manufacturer;\r\n        this.model = model;\r\n        this.version = version;\r\n    }\r\n}\r\n\r\nexport interface ISpeechConfigAudio {\r\n    source?: ISpeechConfigAudioDevice;\r\n    playback?: ISpeechConfigAudioDevice;\r\n}\r\n\r\nexport interface ISpeechConfigAudioDevice {\r\n    manufacturer: string;\r\n    model: string;\r\n    connectivity: connectivity;\r\n    type: type;\r\n    samplerate: number;\r\n    bitspersample: number;\r\n    channelcount: number;\r\n}\r\n\r\nexport enum connectivity {\r\n    Bluetooth = \"Bluetooth\",\r\n    Wired = \"Wired\",\r\n    WiFi = \"WiFi\",\r\n    Cellular = \"Cellular\",\r\n    InBuilt = \"InBuilt\",\r\n    Unknown = \"Unknown\",\r\n}\r\n\r\nexport enum type {\r\n    Phone = \"Phone\",\r\n    Speaker = \"Speaker\",\r\n    Car = \"Car\",\r\n    Headset = \"Headset\",\r\n    Thermostat = \"Thermostat\",\r\n    Microphones = \"Microphones\",\r\n    Deskphone = \"Deskphone\",\r\n    RemoteControl = \"RemoteControl\",\r\n    Unknown = \"Unknown\",\r\n    File = \"File\",\r\n    Stream = \"Stream\",\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognitionCompletionStatus } from \"../../src/common.speech/Exports\";\r\nimport { TranslationStatus } from \"./TranslationStatus\";\r\n\r\nexport interface ITranslations {\r\n    TranslationStatus: TranslationStatus;\r\n    Translations: ITranslation[];\r\n    FailureReason: string;\r\n}\r\n\r\nexport interface ITranslation {\r\n    Language: string;\r\n    Text: string;\r\n}\r\n\r\nexport interface ISpeechEndDetectedResult {\r\n    Offset?: number;\r\n}\r\n\r\n// turn.start\r\nexport interface ITurnStart {\r\n    context: ITurnStartContext;\r\n}\r\n\r\nexport interface ITurnStartContext {\r\n    serviceTag: string;\r\n}\r\n\r\nexport interface IResultErrorDetails {\r\n    errorText: string;\r\n    recogSate: RecognitionCompletionStatus;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ConnectionMessage,\r\n    Deferred,\r\n    IStringDictionary,\r\n    IWebsocketMessageFormatter,\r\n    MessageType,\r\n    RawWebsocketMessage,\r\n} from \"../common/Exports\";\r\n\r\nconst CRLF: string = \"\\r\\n\";\r\n\r\nexport class WebsocketMessageFormatter implements IWebsocketMessageFormatter {\r\n\r\n    public toConnectionMessage = (message: RawWebsocketMessage): Promise<ConnectionMessage> => {\r\n        const deferral = new Deferred<ConnectionMessage>();\r\n\r\n        try {\r\n            if (message.messageType === MessageType.Text) {\r\n                const textMessage: string = message.textContent;\r\n                let headers: IStringDictionary<string> = {};\r\n                let body: string = null;\r\n\r\n                if (textMessage) {\r\n                    const headerBodySplit = textMessage.split(\"\\r\\n\\r\\n\");\r\n                    if (headerBodySplit && headerBodySplit.length > 0) {\r\n                        headers = this.parseHeaders(headerBodySplit[0]);\r\n                        if (headerBodySplit.length > 1) {\r\n                            body = headerBodySplit[1];\r\n                        }\r\n                    }\r\n                }\r\n\r\n                deferral.resolve(new ConnectionMessage(message.messageType, body, headers, message.id));\r\n            } else if (message.messageType === MessageType.Binary) {\r\n                const binaryMessage: ArrayBuffer = message.binaryContent;\r\n                let headers: IStringDictionary<string> = {};\r\n                let body: ArrayBuffer = null;\r\n\r\n                if (!binaryMessage || binaryMessage.byteLength < 2) {\r\n                    throw new Error(\"Invalid binary message format. Header length missing.\");\r\n                }\r\n\r\n                const dataView = new DataView(binaryMessage);\r\n                const headerLength = dataView.getInt16(0);\r\n\r\n                if (binaryMessage.byteLength < headerLength + 2) {\r\n                    throw new Error(\"Invalid binary message format. Header content missing.\");\r\n                }\r\n\r\n                let headersString = \"\";\r\n                for (let i = 0; i < headerLength; i++) {\r\n                    headersString += String.fromCharCode((dataView).getInt8(i + 2));\r\n                }\r\n\r\n                headers = this.parseHeaders(headersString);\r\n\r\n                if (binaryMessage.byteLength > headerLength + 2) {\r\n                    body = binaryMessage.slice(2 + headerLength);\r\n                }\r\n\r\n                deferral.resolve(new ConnectionMessage(message.messageType, body, headers, message.id));\r\n            }\r\n        } catch (e) {\r\n            deferral.reject(`Error formatting the message. Error: ${e}`);\r\n        }\r\n\r\n        return deferral.promise;\r\n    }\r\n\r\n    public fromConnectionMessage = (message: ConnectionMessage): Promise<RawWebsocketMessage> => {\r\n        const deferral = new Deferred<RawWebsocketMessage>();\r\n\r\n        try {\r\n            if (message.messageType === MessageType.Text) {\r\n                const payload = `${this.makeHeaders(message)}${CRLF}${message.textBody ? message.textBody : \"\"}`;\r\n\r\n                deferral.resolve(new RawWebsocketMessage(MessageType.Text, payload, message.id));\r\n\r\n            } else if (message.messageType === MessageType.Binary) {\r\n                const headersString = this.makeHeaders(message);\r\n                const content = message.binaryBody;\r\n\r\n                const headerBuffer = this.stringToArrayBuffer(headersString);\r\n                const headerInt8Array = new Int8Array(headerBuffer);\r\n                const headerLength = headerInt8Array.byteLength;\r\n\r\n                const payloadInt8Array = new Int8Array(2 + headerLength + (content ? content.byteLength : 0));\r\n                payloadInt8Array[0] = ((headerLength >> 8) & 0xff);\r\n                payloadInt8Array[1] = headerLength & 0xff;\r\n                payloadInt8Array.set(headerInt8Array, 2);\r\n\r\n                if (content) {\r\n                    const bodyInt8Array = new Int8Array(content);\r\n                    payloadInt8Array.set(bodyInt8Array, 2 + headerLength);\r\n                }\r\n\r\n                const payload: ArrayBuffer = payloadInt8Array.buffer;\r\n\r\n                deferral.resolve(new RawWebsocketMessage(MessageType.Binary, payload, message.id));\r\n            }\r\n        } catch (e) {\r\n            deferral.reject(`Error formatting the message. ${e}`);\r\n        }\r\n\r\n        return deferral.promise;\r\n    }\r\n\r\n    private makeHeaders = (message: ConnectionMessage): string => {\r\n        let headersString: string = \"\";\r\n\r\n        if (message.headers) {\r\n            for (const header in message.headers) {\r\n                if (header) {\r\n                    headersString += `${header}: ${message.headers[header]}${CRLF}`;\r\n                }\r\n            }\r\n        }\r\n\r\n        return headersString;\r\n    }\r\n\r\n    private parseHeaders = (headersString: string): IStringDictionary<string> => {\r\n        const headers: IStringDictionary<string> = {};\r\n\r\n        if (headersString) {\r\n            const headerMatches = headersString.match(/[^\\r\\n]+/g);\r\n            if (headers) {\r\n                for (const header of headerMatches) {\r\n                    if (header) {\r\n                        const separatorIndex = header.indexOf(\":\");\r\n                        const headerName = separatorIndex > 0 ? header.substr(0, separatorIndex).trim().toLowerCase() : header;\r\n                        const headerValue =\r\n                            separatorIndex > 0 && header.length > (separatorIndex + 1) ?\r\n                                header.substr(separatorIndex + 1).trim() :\r\n                                \"\";\r\n\r\n                        headers[headerName] = headerValue;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return headers;\r\n    }\r\n\r\n    private stringToArrayBuffer = (str: string): ArrayBuffer => {\r\n        const buffer = new ArrayBuffer(str.length);\r\n        const view = new DataView(buffer);\r\n        for (let i = 0; i < str.length; i++) {\r\n            view.setUint8(i, str.charCodeAt(i));\r\n        }\r\n        return buffer;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    ForceDictationPropertyName,\r\n    OutputFormatPropertyName,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    IConnection,\r\n    IStringDictionary\r\n} from \"../common/Exports\";\r\nimport {\r\n    OutputFormat,\r\n    PropertyId\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    ConnectionFactoryBase\r\n} from \"./ConnectionFactoryBase\";\r\nimport {\r\n    AuthInfo,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    WebsocketMessageFormatter\r\n} from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport {\r\n    QueryParameterNames\r\n} from \"./QueryParameterNames\";\r\n\r\nexport class SpeechConnectionFactory extends ConnectionFactoryBase {\r\n\r\n    private readonly interactiveRelativeUri: string = \"/speech/recognition/interactive/cognitiveservices/v1\";\r\n    private readonly conversationRelativeUri: string = \"/speech/recognition/conversation/cognitiveservices/v1\";\r\n    private readonly dictationRelativeUri: string = \"/speech/recognition/dictation/cognitiveservices/v1\";\r\n\r\n    public create = (\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, undefined);\r\n        const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region, undefined);\r\n        const hostSuffix: string =  (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n        const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, \"wss://\" + region + \".stt.speech\" + hostSuffix);\r\n\r\n        const queryParams: IStringDictionary<string> = {};\r\n\r\n        const endpointId: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_EndpointId, undefined);\r\n        const language: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage, undefined);\r\n\r\n        if (endpointId) {\r\n            if (!endpoint || endpoint.search(QueryParameterNames.CustomSpeechDeploymentId) === -1) {\r\n                queryParams[QueryParameterNames.CustomSpeechDeploymentId] = endpointId;\r\n            }\r\n        } else if (language) {\r\n            if (!endpoint || endpoint.search(QueryParameterNames.Language) === -1) {\r\n                queryParams[QueryParameterNames.Language] = language;\r\n            }\r\n        }\r\n\r\n        if (!endpoint || endpoint.search(QueryParameterNames.Format) === -1) {\r\n            queryParams[QueryParameterNames.Format] = config.parameters.getProperty(OutputFormatPropertyName, OutputFormat[OutputFormat.Simple]).toLowerCase();\r\n        }\r\n\r\n        if (config.autoDetectSourceLanguages !== undefined) {\r\n            queryParams[QueryParameterNames.EnableLanguageId] = \"true\";\r\n        }\r\n\r\n        this.setCommonUrlParams(config, queryParams, endpoint);\r\n\r\n        if (!endpoint) {\r\n            switch (config.recognitionMode) {\r\n                case RecognitionMode.Conversation:\r\n                    if (config.parameters.getProperty(ForceDictationPropertyName, \"false\") === \"true\") {\r\n                        endpoint = host + this.dictationRelativeUri;\r\n                    } else {\r\n                        endpoint = host + this.conversationRelativeUri;\r\n                    }\r\n                    break;\r\n                case RecognitionMode.Dictation:\r\n                    endpoint = host + this.dictationRelativeUri;\r\n                    break;\r\n                default:\r\n                    endpoint = host + this.interactiveRelativeUri; // default is interactive\r\n                    break;\r\n            }\r\n        }\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        if (authInfo.token !== undefined && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n        headers[HeaderNames.ConnectionId] = connectionId;\r\n\r\n        config.parameters.setProperty(PropertyId.SpeechServiceConnection_Url, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    OutputFormatPropertyName,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    IConnection,\r\n    IStringDictionary\r\n} from \"../common/Exports\";\r\nimport {\r\n    OutputFormat,\r\n    PropertyId\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    ConnectionFactoryBase\r\n} from \"./ConnectionFactoryBase\";\r\nimport {\r\n    AuthInfo,\r\n    RecognizerConfig,\r\n    WebsocketMessageFormatter\r\n} from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport {\r\n    QueryParameterNames\r\n} from \"./QueryParameterNames\";\r\n\r\nexport class TranscriberConnectionFactory extends ConnectionFactoryBase {\r\n\r\n    private readonly multiaudioRelativeUri: string = \"/speech/recognition/multiaudio\";\r\n\r\n    public create = (\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, undefined);\r\n        const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region, \"centralus\");\r\n        const hostSuffix: string =  (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n        const hostDefault: string = \"wss://transcribe.\" + region + \".cts.speech\" + hostSuffix + this.multiaudioRelativeUri;\r\n        const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, hostDefault);\r\n\r\n        const queryParams: IStringDictionary<string> = {};\r\n\r\n        const endpointId: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_EndpointId, undefined);\r\n        const language: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage, undefined);\r\n\r\n        if (endpointId) {\r\n            if (!endpoint || endpoint.search(QueryParameterNames.CustomSpeechDeploymentId) === -1) {\r\n                queryParams[QueryParameterNames.CustomSpeechDeploymentId] = endpointId;\r\n            }\r\n        } else if (language) {\r\n            if (!endpoint || endpoint.search(QueryParameterNames.Language) === -1) {\r\n                queryParams[QueryParameterNames.Language] = language;\r\n            }\r\n        }\r\n\r\n        this.setCommonUrlParams(config, queryParams, endpoint);\r\n        if (!endpoint) {\r\n            endpoint = host;\r\n        }\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        if (authInfo.token !== undefined && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n        headers[HeaderNames.ConnectionId] = connectionId;\r\n\r\n        config.parameters.setProperty(PropertyId.SpeechServiceConnection_Url, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    IConnection,\r\n    IStringDictionary,\r\n} from \"../common/Exports\";\r\nimport {\r\n    PropertyId\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    ConnectionFactoryBase\r\n} from \"./ConnectionFactoryBase\";\r\nimport {\r\n    AuthInfo,\r\n    IConnectionFactory,\r\n    RecognizerConfig,\r\n    WebsocketMessageFormatter,\r\n} from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { QueryParameterNames } from \"./QueryParameterNames\";\r\n\r\nexport class TranslationConnectionFactory extends ConnectionFactoryBase {\r\n\r\n    public create = (\r\n        config: RecognizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, undefined);\r\n        if (!endpoint) {\r\n            const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region, undefined);\r\n            const hostSuffix: string = (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n            const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, \"wss://\" + region + \".s2s.speech\" + hostSuffix);\r\n            endpoint = host + \"/speech/translation/cognitiveservices/v1\";\r\n        }\r\n\r\n        const queryParams: IStringDictionary<string> = {\r\n            from: config.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage),\r\n            to: config.parameters.getProperty(PropertyId.SpeechServiceConnection_TranslationToLanguages),\r\n        };\r\n\r\n        this.setCommonUrlParams(config, queryParams, endpoint);\r\n        this.setUrlParameter(\r\n            PropertyId.SpeechServiceResponse_TranslationRequestStablePartialResult,\r\n            QueryParameterNames.StableTranslation,\r\n            config,\r\n            queryParams,\r\n            endpoint\r\n        );\r\n\r\n        const voiceName: string = \"voice\";\r\n        const featureName: string = \"features\";\r\n\r\n        if (config.parameters.getProperty(PropertyId.SpeechServiceConnection_TranslationVoice, undefined) !== undefined) {\r\n            queryParams[voiceName] = config.parameters.getProperty(PropertyId.SpeechServiceConnection_TranslationVoice);\r\n            queryParams[featureName] = \"texttospeech\";\r\n        }\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        if (authInfo.token !== undefined && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n        headers[HeaderNames.ConnectionId] = connectionId;\r\n\r\n        config.parameters.setProperty(PropertyId.SpeechServiceConnection_Url, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ProxyInfo,\r\n    WebsocketConnection, WebsocketMessageAdapter,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    IConnection,\r\n    IStringDictionary\r\n} from \"../common/Exports\";\r\nimport { PropertyId } from \"../sdk/Exports\";\r\nimport {\r\n    AuthInfo,\r\n    SynthesizerConfig,\r\n    WebsocketMessageFormatter\r\n} from \"./Exports\";\r\nimport { HeaderNames } from \"./HeaderNames\";\r\nimport { ISynthesisConnectionFactory } from \"./ISynthesisConnectionFactory\";\r\nimport {\r\n    QueryParameterNames\r\n} from \"./QueryParameterNames\";\r\n\r\nexport class SpeechSynthesisConnectionFactory implements ISynthesisConnectionFactory {\r\n\r\n    private readonly synthesisUri: string = \"/cognitiveservices/websocket/v1\";\r\n\r\n    public create = (\r\n        config: SynthesizerConfig,\r\n        authInfo: AuthInfo,\r\n        connectionId?: string): IConnection => {\r\n\r\n        let endpoint: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, undefined);\r\n        const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region, undefined);\r\n        const hostSuffix = (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n        const endpointId = config.parameters.getProperty(PropertyId.SpeechServiceConnection_EndpointId, undefined);\r\n        const hostPrefix = (endpointId === undefined) ? \"tts\" : \"voice\";\r\n        const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, \"wss://\" + region + \".\" + hostPrefix + \".speech\" + hostSuffix);\r\n\r\n        const queryParams: IStringDictionary<string> = {};\r\n\r\n        if (!endpoint) {\r\n            endpoint = host + this.synthesisUri;\r\n        }\r\n\r\n        const headers: IStringDictionary<string> = {};\r\n        if (authInfo.token !== undefined && authInfo.token !== \"\") {\r\n            headers[authInfo.headerName] = authInfo.token;\r\n        }\r\n        headers[HeaderNames.ConnectionId] = connectionId;\r\n        if (endpointId !== undefined) {\r\n            headers[QueryParameterNames.CustomVoiceDeploymentId] = endpointId;\r\n        }\r\n\r\n        config.parameters.setProperty(PropertyId.SpeechServiceConnection_Url, endpoint);\r\n\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, headers, new WebsocketMessageFormatter(), ProxyInfo.fromParameters(config.parameters), enableCompression, connectionId);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    ResultReason\r\n} from \"../sdk/Exports\";\r\nimport { RecognitionStatus } from \"./Exports\";\r\n\r\nexport class EnumTranslation {\r\n    public static implTranslateRecognitionResult(recognitionStatus: RecognitionStatus): ResultReason {\r\n        let reason = ResultReason.Canceled;\r\n        switch (recognitionStatus) {\r\n            case RecognitionStatus.Success:\r\n                reason = ResultReason.RecognizedSpeech;\r\n                break;\r\n            case RecognitionStatus.NoMatch:\r\n            case RecognitionStatus.InitialSilenceTimeout:\r\n            case RecognitionStatus.BabbleTimeout:\r\n            case RecognitionStatus.EndOfDictation:\r\n                reason = ResultReason.NoMatch;\r\n                break;\r\n            case RecognitionStatus.Error:\r\n            default:\r\n                reason = ResultReason.Canceled;\r\n                break;\r\n        }\r\n        return reason;\r\n    }\r\n\r\n    public static implTranslateCancelResult(recognitionStatus: RecognitionStatus): CancellationReason {\r\n        let reason = CancellationReason.EndOfStream;\r\n        switch (recognitionStatus) {\r\n            case RecognitionStatus.Success:\r\n            case RecognitionStatus.EndOfDictation:\r\n            case RecognitionStatus.NoMatch:\r\n                reason = CancellationReason.EndOfStream;\r\n                break;\r\n            case RecognitionStatus.InitialSilenceTimeout:\r\n            case RecognitionStatus.BabbleTimeout:\r\n            case RecognitionStatus.Error:\r\n            default:\r\n                reason = CancellationReason.Error;\r\n                break;\r\n        }\r\n        return reason;\r\n    }\r\n\r\n    public static implTranslateCancelErrorCode(recognitionStatus: RecognitionStatus): CancellationErrorCode {\r\n        let reason: CancellationErrorCode = CancellationErrorCode.NoError;\r\n        switch (recognitionStatus) {\r\n            case RecognitionStatus.Error:\r\n                reason = CancellationErrorCode.ServiceError;\r\n                break;\r\n            case RecognitionStatus.TooManyRequests:\r\n                reason = CancellationErrorCode.TooManyRequests;\r\n                break;\r\n            default:\r\n                reason = CancellationErrorCode.NoError;\r\n                break;\r\n        }\r\n\r\n        return reason;\r\n\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * @class SynthesisStatus\r\n * @private\r\n */\r\nexport enum SynthesisStatus {\r\n    /**\r\n     * The response contains valid audio data.\r\n     * @member SynthesisStatus.Success\r\n     */\r\n    Success,\r\n\r\n    /**\r\n     * Indicates the end of audio data. No valid audio data is included in the message.\r\n     * @member SynthesisStatus.SynthesisEnd\r\n     */\r\n    SynthesisEnd,\r\n\r\n    /**\r\n     * Indicates an error occurred during synthesis data processing.\r\n     * @member SynthesisStatus.Error\r\n     */\r\n    Error,\r\n}\r\n\r\nexport enum RecognitionStatus {\r\n    Success,\r\n    NoMatch,\r\n    InitialSilenceTimeout,\r\n    BabbleTimeout,\r\n    Error,\r\n    EndOfDictation,\r\n    TooManyRequests,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { SynthesisStatus } from \"../Exports\";\r\n\r\n// translation.synthesis.end\r\nexport interface ITranslationSynthesisEnd {\r\n    SynthesisStatus: SynthesisStatus;\r\n    FailureReason: string;\r\n}\r\n\r\nexport class TranslationSynthesisEnd implements ITranslationSynthesisEnd {\r\n    private privSynthesisEnd: ITranslationSynthesisEnd;\r\n\r\n    private constructor(json: string) {\r\n        this.privSynthesisEnd = JSON.parse(json);\r\n        this.privSynthesisEnd.SynthesisStatus = (SynthesisStatus as any)[this.privSynthesisEnd.SynthesisStatus];\r\n    }\r\n\r\n    public static fromJSON(json: string): TranslationSynthesisEnd {\r\n        return new TranslationSynthesisEnd(json);\r\n    }\r\n\r\n    public get SynthesisStatus(): SynthesisStatus {\r\n        return this.privSynthesisEnd.SynthesisStatus;\r\n    }\r\n\r\n    public get FailureReason(): string {\r\n        return this.privSynthesisEnd.FailureReason;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ITranslations } from \"../Exports\";\r\nimport { TranslationStatus } from \"../TranslationStatus\";\r\n\r\n// translation.hypothesis\r\nexport interface ITranslationHypothesis {\r\n    Duration: number;\r\n    Offset: number;\r\n    Text: string;\r\n    Translation: ITranslations;\r\n}\r\n\r\nexport class TranslationHypothesis implements ITranslationHypothesis {\r\n    private privTranslationHypothesis: ITranslationHypothesis;\r\n\r\n    private constructor(json: string) {\r\n        this.privTranslationHypothesis = JSON.parse(json);\r\n        this.privTranslationHypothesis.Translation.TranslationStatus = (TranslationStatus as any)[this.privTranslationHypothesis.Translation.TranslationStatus];\r\n    }\r\n\r\n    public static fromJSON(json: string): TranslationHypothesis {\r\n        return new TranslationHypothesis(json);\r\n    }\r\n\r\n    public get Duration(): number {\r\n        return this.privTranslationHypothesis.Duration;\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privTranslationHypothesis.Offset;\r\n    }\r\n\r\n    public get Text(): string {\r\n        return this.privTranslationHypothesis.Text;\r\n    }\r\n\r\n    public get Translation(): ITranslations {\r\n        return this.privTranslationHypothesis.Translation;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ITranslations, RecognitionStatus } from \"../Exports\";\r\nimport { TranslationStatus } from \"../TranslationStatus\";\r\n\r\n// translation.phrase\r\nexport interface ITranslationPhrase {\r\n    RecognitionStatus: RecognitionStatus;\r\n    Offset: number;\r\n    Duration: number;\r\n    Text: string;\r\n    Translation: ITranslations;\r\n}\r\n\r\nexport class TranslationPhrase implements ITranslationPhrase {\r\n    private privTranslationPhrase: ITranslationPhrase;\r\n\r\n    private constructor(json: string) {\r\n        this.privTranslationPhrase = JSON.parse(json);\r\n        this.privTranslationPhrase.RecognitionStatus = (RecognitionStatus as any)[this.privTranslationPhrase.RecognitionStatus];\r\n        if (this.privTranslationPhrase.Translation !== undefined) {\r\n            this.privTranslationPhrase.Translation.TranslationStatus = (TranslationStatus as any)[this.privTranslationPhrase.Translation.TranslationStatus];\r\n        }\r\n    }\r\n\r\n    public static fromJSON(json: string): TranslationPhrase {\r\n        return new TranslationPhrase(json);\r\n    }\r\n\r\n    public get RecognitionStatus(): RecognitionStatus {\r\n        return this.privTranslationPhrase.RecognitionStatus;\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privTranslationPhrase.Offset;\r\n    }\r\n\r\n    public get Duration(): number {\r\n        return this.privTranslationPhrase.Duration;\r\n    }\r\n\r\n    public get Text(): string {\r\n        return this.privTranslationPhrase.Text;\r\n    }\r\n\r\n    public get Translation(): ITranslations {\r\n        return this.privTranslationPhrase.Translation;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ConnectionEvent,\r\n    IAudioSource,\r\n    MessageType,\r\n    TranslationStatus,\r\n} from \"../common/Exports\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeechRecognitionResult,\r\n    TranslationRecognitionCanceledEventArgs,\r\n    TranslationRecognitionEventArgs,\r\n    TranslationRecognitionResult,\r\n    TranslationRecognizer,\r\n    Translations,\r\n    TranslationSynthesisEventArgs,\r\n    TranslationSynthesisResult,\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    CancellationErrorCodePropertyName,\r\n    EnumTranslation,\r\n    RecognitionStatus,\r\n    ServiceRecognizerBase,\r\n    SynthesisStatus,\r\n    TranslationHypothesis,\r\n    TranslationPhrase,\r\n    TranslationSynthesisEnd,\r\n} from \"./Exports\";\r\nimport { IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class TranslationServiceRecognizer extends ServiceRecognizerBase {\r\n    private privTranslationRecognizer: TranslationRecognizer;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        translationRecognizer: TranslationRecognizer) {\r\n\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, translationRecognizer);\r\n        this.privTranslationRecognizer = translationRecognizer;\r\n        this.connectionEvents.attach(async (connectionEvent: ConnectionEvent): Promise<void> => {\r\n            if (connectionEvent.name === \"ConnectionEstablishedEvent\") {\r\n                this.privTranslationRecognizer.onConnection();\r\n            } else if (connectionEvent.name === \"ConnectionClosedEvent\") {\r\n                await this.privTranslationRecognizer.onDisconnection();\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(connectionMessage: SpeechConnectionMessage): Promise<boolean> {\r\n\r\n        const resultProps: PropertyCollection = new PropertyCollection();\r\n        let processed: boolean = false;\r\n\r\n        if (connectionMessage.messageType === MessageType.Text) {\r\n            resultProps.setProperty(PropertyId.SpeechServiceResponse_JsonResult, connectionMessage.textBody);\r\n        }\r\n\r\n        switch (connectionMessage.path.toLowerCase()) {\r\n            case \"translation.hypothesis\":\r\n\r\n                const result: TranslationRecognitionEventArgs = this.fireEventForResult(TranslationHypothesis.fromJSON(connectionMessage.textBody), resultProps);\r\n                this.privRequestSession.onHypothesis(this.privRequestSession.currentTurnAudioOffset + result.offset);\r\n\r\n                if (!!this.privTranslationRecognizer.recognizing) {\r\n                    try {\r\n                        this.privTranslationRecognizer.recognizing(this.privTranslationRecognizer, result);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"translation.phrase\":\r\n                const translatedPhrase: TranslationPhrase = TranslationPhrase.fromJSON(connectionMessage.textBody);\r\n\r\n                this.privRequestSession.onPhraseRecognized(this.privRequestSession.currentTurnAudioOffset + translatedPhrase.Offset + translatedPhrase.Duration);\r\n\r\n                if (translatedPhrase.RecognitionStatus === RecognitionStatus.Success) {\r\n\r\n                    // OK, the recognition was successful. How'd the translation do?\r\n                    const result: TranslationRecognitionEventArgs = this.fireEventForResult(translatedPhrase, resultProps);\r\n                    if (!!this.privTranslationRecognizer.recognized) {\r\n                        try {\r\n                            this.privTranslationRecognizer.recognized(this.privTranslationRecognizer, result);\r\n                            /* tslint:disable:no-empty */\r\n                        } catch (error) {\r\n                            // Not going to let errors in the event handler\r\n                            // trip things up.\r\n                        }\r\n                    }\r\n\r\n                    // report result to promise.\r\n                    if (!!this.privSuccessCallback) {\r\n                        try {\r\n                            this.privSuccessCallback(result.result);\r\n                        } catch (e) {\r\n                            if (!!this.privErrorCallback) {\r\n                                this.privErrorCallback(e);\r\n                            }\r\n                        }\r\n                        // Only invoke the call back once.\r\n                        // and if it's successful don't invoke the\r\n                        // error after that.\r\n                        this.privSuccessCallback = undefined;\r\n                        this.privErrorCallback = undefined;\r\n                    }\r\n\r\n                    break;\r\n                } else {\r\n                    const reason: ResultReason = EnumTranslation.implTranslateRecognitionResult(translatedPhrase.RecognitionStatus);\r\n\r\n                    const result = new TranslationRecognitionResult(\r\n                        undefined,\r\n                        this.privRequestSession.requestId,\r\n                        reason,\r\n                        translatedPhrase.Text,\r\n                        translatedPhrase.Duration,\r\n                        this.privRequestSession.currentTurnAudioOffset + translatedPhrase.Offset,\r\n                        undefined,\r\n                        connectionMessage.textBody,\r\n                        resultProps);\r\n\r\n                    if (reason === ResultReason.Canceled) {\r\n                        const cancelReason: CancellationReason = EnumTranslation.implTranslateCancelResult(translatedPhrase.RecognitionStatus);\r\n\r\n                        await this.cancelRecognitionLocal(\r\n                            cancelReason,\r\n                            EnumTranslation.implTranslateCancelErrorCode(translatedPhrase.RecognitionStatus),\r\n                            undefined);\r\n                    } else {\r\n                        if (!(this.privRequestSession.isSpeechEnded && reason === ResultReason.NoMatch && translatedPhrase.RecognitionStatus !== RecognitionStatus.InitialSilenceTimeout)) {\r\n                            const ev = new TranslationRecognitionEventArgs(result, result.offset, this.privRequestSession.sessionId);\r\n\r\n                            if (!!this.privTranslationRecognizer.recognized) {\r\n                                try {\r\n                                    this.privTranslationRecognizer.recognized(this.privTranslationRecognizer, ev);\r\n                                    /* tslint:disable:no-empty */\r\n                                } catch (error) {\r\n                                    // Not going to let errors in the event handler\r\n                                    // trip things up.\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        // report result to promise.\r\n                        if (!!this.privSuccessCallback) {\r\n                            try {\r\n                                this.privSuccessCallback(result);\r\n                            } catch (e) {\r\n                                if (!!this.privErrorCallback) {\r\n                                    this.privErrorCallback(e);\r\n                                }\r\n                            }\r\n                            // Only invoke the call back once.\r\n                            // and if it's successful don't invoke the\r\n                            // error after that.\r\n                            this.privSuccessCallback = undefined;\r\n                            this.privErrorCallback = undefined;\r\n                        }\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n\r\n            case \"translation.synthesis\":\r\n                this.sendSynthesisAudio(connectionMessage.binaryBody, this.privRequestSession.sessionId);\r\n                processed = true;\r\n                break;\r\n\r\n            case \"translation.synthesis.end\":\r\n                const synthEnd: TranslationSynthesisEnd = TranslationSynthesisEnd.fromJSON(connectionMessage.textBody);\r\n\r\n                switch (synthEnd.SynthesisStatus) {\r\n                    case SynthesisStatus.Error:\r\n                        if (!!this.privTranslationRecognizer.synthesizing) {\r\n                            const result = new TranslationSynthesisResult(ResultReason.Canceled, undefined);\r\n                            const retEvent: TranslationSynthesisEventArgs = new TranslationSynthesisEventArgs(result, this.privRequestSession.sessionId);\r\n\r\n                            try {\r\n                                this.privTranslationRecognizer.synthesizing(this.privTranslationRecognizer, retEvent);\r\n                                /* tslint:disable:no-empty */\r\n                            } catch (error) {\r\n                                // Not going to let errors in the event handler\r\n                                // trip things up.\r\n                            }\r\n                        }\r\n\r\n                        if (!!this.privTranslationRecognizer.canceled) {\r\n                            // And raise a canceled event to send the rich(er) error message back.\r\n                            const canceledResult: TranslationRecognitionCanceledEventArgs = new TranslationRecognitionCanceledEventArgs(\r\n                                this.privRequestSession.sessionId,\r\n                                CancellationReason.Error,\r\n                                synthEnd.FailureReason,\r\n                                CancellationErrorCode.ServiceError,\r\n                                null);\r\n\r\n                            try {\r\n                                this.privTranslationRecognizer.canceled(this.privTranslationRecognizer, canceledResult);\r\n                                /* tslint:disable:no-empty */\r\n                            } catch (error) {\r\n                                // Not going to let errors in the event handler\r\n                                // trip things up.\r\n                            }\r\n                        }\r\n                        break;\r\n                    case SynthesisStatus.Success:\r\n                        this.sendSynthesisAudio(undefined, this.privRequestSession.sessionId);\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n                processed = true;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return processed;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        const properties: PropertyCollection = new PropertyCollection();\r\n        properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n\r\n        if (!!this.privTranslationRecognizer.canceled) {\r\n\r\n            const cancelEvent: TranslationRecognitionCanceledEventArgs = new TranslationRecognitionCanceledEventArgs(\r\n                sessionId,\r\n                cancellationReason,\r\n                error,\r\n                errorCode,\r\n                undefined);\r\n\r\n            try {\r\n                this.privTranslationRecognizer.canceled(this.privTranslationRecognizer, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        if (!!this.privSuccessCallback) {\r\n            const result: TranslationRecognitionResult = new TranslationRecognitionResult(\r\n                undefined, // Translations\r\n                requestId,\r\n                ResultReason.Canceled,\r\n                undefined, // Text\r\n                undefined, // Druation\r\n                undefined, // Offset\r\n                error,\r\n                undefined, // Json\r\n                properties);\r\n            try {\r\n                this.privSuccessCallback(result);\r\n                /* tslint:disable:no-empty */\r\n                this.privSuccessCallback = undefined;\r\n            } catch { }\r\n        }\r\n    }\r\n\r\n    private fireEventForResult(serviceResult: TranslationHypothesis | TranslationPhrase, properties: PropertyCollection): TranslationRecognitionEventArgs {\r\n        let translations: Translations;\r\n\r\n        if (undefined !== serviceResult.Translation.Translations) {\r\n            translations = new Translations();\r\n            for (const translation of serviceResult.Translation.Translations) {\r\n                translations.set(translation.Language, translation.Text);\r\n            }\r\n        }\r\n\r\n        let resultReason: ResultReason;\r\n        if (serviceResult instanceof TranslationPhrase) {\r\n            if (serviceResult.Translation.TranslationStatus === TranslationStatus.Success) {\r\n                resultReason = ResultReason.TranslatedSpeech;\r\n            } else {\r\n                resultReason = ResultReason.RecognizedSpeech;\r\n            }\r\n        } else {\r\n            resultReason = ResultReason.TranslatingSpeech;\r\n        }\r\n\r\n        const offset: number = serviceResult.Offset + this.privRequestSession.currentTurnAudioOffset;\r\n\r\n        const result = new TranslationRecognitionResult(\r\n            translations,\r\n            this.privRequestSession.requestId,\r\n            resultReason,\r\n            serviceResult.Text,\r\n            serviceResult.Duration,\r\n            offset,\r\n            serviceResult.Translation.FailureReason,\r\n            JSON.stringify(serviceResult),\r\n            properties);\r\n\r\n        const ev = new TranslationRecognitionEventArgs(result, offset, this.privRequestSession.sessionId);\r\n        return ev;\r\n    }\r\n\r\n    private sendSynthesisAudio(audio: ArrayBuffer, sessionId: string): void {\r\n        const reason = (undefined === audio) ? ResultReason.SynthesizingAudioCompleted : ResultReason.SynthesizingAudio;\r\n        const result = new TranslationSynthesisResult(reason, audio);\r\n        const retEvent: TranslationSynthesisEventArgs = new TranslationSynthesisEventArgs(result, sessionId);\r\n\r\n        if (!!this.privTranslationRecognizer.synthesizing) {\r\n            try {\r\n                this.privTranslationRecognizer.synthesizing(this.privTranslationRecognizer, retEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch (error) {\r\n                // Not going to let errors in the event handler\r\n                // trip things up.\r\n            }\r\n        }\r\n\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// speech.endDetected\r\nexport interface ISpeechDetected {\r\n    Offset: number;\r\n}\r\n\r\nexport class SpeechDetected implements ISpeechDetected {\r\n    private privSpeechStartDetected: ISpeechDetected;\r\n\r\n    private constructor(json: string) {\r\n        this.privSpeechStartDetected = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): SpeechDetected {\r\n        return new SpeechDetected(json);\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privSpeechStartDetected.Offset;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IPrimaryLanguage } from \"./SimpleSpeechPhrase\";\r\n\r\n// speech.hypothesis\r\nexport interface ISpeechHypothesis {\r\n    Text: string;\r\n    Offset: number;\r\n    Duration: number;\r\n    PrimaryLanguage?: IPrimaryLanguage;\r\n    SpeakerId?: string;\r\n}\r\n\r\nexport class SpeechHypothesis implements ISpeechHypothesis {\r\n    private privSpeechHypothesis: ISpeechHypothesis;\r\n\r\n    private constructor(json: string) {\r\n        this.privSpeechHypothesis = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): SpeechHypothesis {\r\n        return new SpeechHypothesis(json);\r\n    }\r\n\r\n    public get Text(): string {\r\n        return this.privSpeechHypothesis.Text;\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privSpeechHypothesis.Offset;\r\n    }\r\n\r\n    public get Duration(): number {\r\n        return this.privSpeechHypothesis.Duration;\r\n    }\r\n\r\n    public get Language(): string {\r\n        return this.privSpeechHypothesis.PrimaryLanguage === undefined ? undefined : this.privSpeechHypothesis.PrimaryLanguage.Language;\r\n    }\r\n\r\n    public get LanguageDetectionConfidence(): string {\r\n        return this.privSpeechHypothesis.PrimaryLanguage === undefined ? undefined : this.privSpeechHypothesis.PrimaryLanguage.Confidence;\r\n    }\r\n\r\n    public get SpeakerId(): string {\r\n        return this.privSpeechHypothesis.SpeakerId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// speech.keyword\r\nexport interface ISpeechKeyword {\r\n    Status: string;\r\n    Text: string;\r\n    Offset: number;\r\n    Duration: number;\r\n}\r\n\r\nexport class SpeechKeyword implements ISpeechKeyword {\r\n    private privSpeechKeyword: ISpeechKeyword;\r\n\r\n    private constructor(json: string) {\r\n        this.privSpeechKeyword = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): SpeechKeyword {\r\n        return new SpeechKeyword(json);\r\n    }\r\n\r\n    public get Status(): string {\r\n        return this.privSpeechKeyword.Status;\r\n    }\r\n\r\n    public get Text(): string {\r\n        return this.privSpeechKeyword.Text;\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privSpeechKeyword.Offset;\r\n    }\r\n\r\n    public get Duration(): number {\r\n        return this.privSpeechKeyword.Duration;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IAudioSource } from \"../common/Exports\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    OutputFormat,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeechRecognitionCanceledEventArgs,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechRecognitionResult,\r\n    SpeechRecognizer,\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    CancellationErrorCodePropertyName,\r\n    DetailedSpeechPhrase,\r\n    EnumTranslation,\r\n    OutputFormatPropertyName,\r\n    RecognitionStatus,\r\n    ServiceRecognizerBase,\r\n    SimpleSpeechPhrase,\r\n    SpeechHypothesis,\r\n} from \"./Exports\";\r\nimport { IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class SpeechServiceRecognizer extends ServiceRecognizerBase {\r\n\r\n    private privSpeechRecognizer: SpeechRecognizer;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        speechRecognizer: SpeechRecognizer) {\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, speechRecognizer);\r\n        this.privSpeechRecognizer = speechRecognizer;\r\n        if (recognizerConfig.autoDetectSourceLanguages !== undefined) {\r\n            const sourceLanguages: string[] = recognizerConfig.autoDetectSourceLanguages.split(\",\");\r\n            this.privSpeechContext.setSection(\"languageId\", {\r\n                languages: sourceLanguages,\r\n                onSuccess: { action: \"Recognize\" },\r\n                onUnknown: { action: \"None\" }\r\n            });\r\n            this.privSpeechContext.setSection(\"phraseOutput\", {\r\n                interimResults: {\r\n                    resultType: \"Auto\"\r\n                },\r\n                phraseResults: {\r\n                    resultType: \"Always\"\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(connectionMessage: SpeechConnectionMessage): Promise<boolean> {\r\n\r\n        let result: SpeechRecognitionResult;\r\n        const resultProps: PropertyCollection = new PropertyCollection();\r\n        resultProps.setProperty(PropertyId.SpeechServiceResponse_JsonResult, connectionMessage.textBody);\r\n        let processed: boolean = false;\r\n\r\n        switch (connectionMessage.path.toLowerCase()) {\r\n            case \"speech.hypothesis\":\r\n            case \"speech.fragment\":\r\n                const hypothesis: SpeechHypothesis = SpeechHypothesis.fromJSON(connectionMessage.textBody);\r\n                const offset: number = hypothesis.Offset + this.privRequestSession.currentTurnAudioOffset;\r\n\r\n                result = new SpeechRecognitionResult(\r\n                    this.privRequestSession.requestId,\r\n                    ResultReason.RecognizingSpeech,\r\n                    hypothesis.Text,\r\n                    hypothesis.Duration,\r\n                    offset,\r\n                    hypothesis.Language,\r\n                    hypothesis.LanguageDetectionConfidence,\r\n                    undefined, // Speaker Id\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                this.privRequestSession.onHypothesis(offset);\r\n\r\n                const ev = new SpeechRecognitionEventArgs(result, hypothesis.Duration, this.privRequestSession.sessionId);\r\n\r\n                if (!!this.privSpeechRecognizer.recognizing) {\r\n                    try {\r\n                        this.privSpeechRecognizer.recognizing(this.privSpeechRecognizer, ev);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"speech.phrase\":\r\n                const simple: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n                const resultReason: ResultReason = EnumTranslation.implTranslateRecognitionResult(simple.RecognitionStatus);\r\n\r\n                this.privRequestSession.onPhraseRecognized(this.privRequestSession.currentTurnAudioOffset + simple.Offset + simple.Duration);\r\n\r\n                if (ResultReason.Canceled === resultReason) {\r\n                    const cancelReason: CancellationReason = EnumTranslation.implTranslateCancelResult(simple.RecognitionStatus);\r\n\r\n                    await this.cancelRecognitionLocal(\r\n                        cancelReason,\r\n                        EnumTranslation.implTranslateCancelErrorCode(simple.RecognitionStatus),\r\n                        undefined);\r\n\r\n                } else {\r\n                    if (!(this.privRequestSession.isSpeechEnded && resultReason === ResultReason.NoMatch && simple.RecognitionStatus !== RecognitionStatus.InitialSilenceTimeout)) {\r\n                        if (this.privRecognizerConfig.parameters.getProperty(OutputFormatPropertyName) === OutputFormat[OutputFormat.Simple]) {\r\n                            result = new SpeechRecognitionResult(\r\n                                this.privRequestSession.requestId,\r\n                                resultReason,\r\n                                simple.DisplayText,\r\n                                simple.Duration,\r\n                                simple.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                                simple.Language,\r\n                                simple.LanguageDetectionConfidence,\r\n                                undefined, // Speaker Id\r\n                                undefined,\r\n                                connectionMessage.textBody,\r\n                                resultProps);\r\n                        } else {\r\n                            const detailed: DetailedSpeechPhrase = DetailedSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n\r\n                            result = new SpeechRecognitionResult(\r\n                                this.privRequestSession.requestId,\r\n                                resultReason,\r\n                                detailed.RecognitionStatus === RecognitionStatus.Success ? detailed.NBest[0].Display : undefined,\r\n                                detailed.Duration,\r\n                                detailed.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                                detailed.Language,\r\n                                detailed.LanguageDetectionConfidence,\r\n                                undefined, // Speaker Id\r\n                                undefined,\r\n                                connectionMessage.textBody,\r\n                                resultProps);\r\n                        }\r\n\r\n                        const event: SpeechRecognitionEventArgs = new SpeechRecognitionEventArgs(result, result.offset, this.privRequestSession.sessionId);\r\n\r\n                        if (!!this.privSpeechRecognizer.recognized) {\r\n                            try {\r\n                                this.privSpeechRecognizer.recognized(this.privSpeechRecognizer, event);\r\n                                /* tslint:disable:no-empty */\r\n                            } catch (error) {\r\n                                // Not going to let errors in the event handler\r\n                                // trip things up.\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (!!this.privSuccessCallback) {\r\n                        try {\r\n                            this.privSuccessCallback(result);\r\n                        } catch (e) {\r\n                            if (!!this.privErrorCallback) {\r\n                                this.privErrorCallback(e);\r\n                            }\r\n                        }\r\n                        // Only invoke the call back once.\r\n                        // and if it's successful don't invoke the\r\n                        // error after that.\r\n                        this.privSuccessCallback = undefined;\r\n                        this.privErrorCallback = undefined;\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return processed;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        const properties: PropertyCollection = new PropertyCollection();\r\n        properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n\r\n        if (!!this.privSpeechRecognizer.canceled) {\r\n            const cancelEvent: SpeechRecognitionCanceledEventArgs = new SpeechRecognitionCanceledEventArgs(\r\n                cancellationReason,\r\n                error,\r\n                errorCode,\r\n                undefined,\r\n                sessionId);\r\n            try {\r\n                this.privSpeechRecognizer.canceled(this.privSpeechRecognizer, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        if (!!this.privSuccessCallback) {\r\n            const result: SpeechRecognitionResult = new SpeechRecognitionResult(\r\n                requestId,\r\n                ResultReason.Canceled,\r\n                undefined, // Text\r\n                undefined, // Duration\r\n                undefined, // Offset\r\n                undefined, // Language\r\n                undefined, // Language Detection Confidence\r\n                undefined, // Speaker Id\r\n                error,\r\n                undefined, // Json\r\n                properties);\r\n            try {\r\n                this.privSuccessCallback(result);\r\n                this.privSuccessCallback = undefined;\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IAudioSource,\r\n    IConnection,\r\n    MessageType\r\n} from \"../common/Exports\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    ConversationTranscriptionCanceledEventArgs,\r\n    OutputFormat,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechRecognitionResult,\r\n} from \"../sdk/Exports\";\r\nimport { ConversationInfo } from \"../sdk/Transcription/Exports\";\r\nimport {\r\n    CancellationErrorCodePropertyName,\r\n    DetailedSpeechPhrase,\r\n    EnumTranslation,\r\n    OutputFormatPropertyName,\r\n    RecognitionStatus,\r\n    ServiceRecognizerBase,\r\n    SimpleSpeechPhrase,\r\n    SpeechHypothesis,\r\n    TranscriberRecognizer\r\n} from \"./Exports\";\r\nimport { IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class TranscriptionServiceRecognizer extends ServiceRecognizerBase {\r\n\r\n    private privTranscriberRecognizer: TranscriberRecognizer;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        transcriber: TranscriberRecognizer) {\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, transcriber);\r\n        this.privTranscriberRecognizer = transcriber;\r\n        this.sendPrePayloadJSONOverride = this.sendTranscriptionStartJSON;\r\n    }\r\n\r\n    public async sendSpeechEventAsync(info: ConversationInfo, command: string): Promise<void> {\r\n        if (!!this.privRequestSession.isRecognizing) {\r\n            const connection: IConnection = await this.fetchConnection();\r\n            await this.sendSpeechEvent(connection, this.createSpeechEventPayload(info, command));\r\n        }\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(connectionMessage: SpeechConnectionMessage): Promise<boolean> {\r\n\r\n        let result: SpeechRecognitionResult;\r\n        const resultProps: PropertyCollection = new PropertyCollection();\r\n        resultProps.setProperty(PropertyId.SpeechServiceResponse_JsonResult, connectionMessage.textBody);\r\n        let processed: boolean = false;\r\n\r\n        switch (connectionMessage.path.toLowerCase()) {\r\n            case \"speech.hypothesis\":\r\n            case \"speech.fragment\":\r\n                const hypothesis: SpeechHypothesis = SpeechHypothesis.fromJSON(connectionMessage.textBody);\r\n                const offset: number = hypothesis.Offset + this.privRequestSession.currentTurnAudioOffset;\r\n\r\n                result = new SpeechRecognitionResult(\r\n                    this.privRequestSession.requestId,\r\n                    ResultReason.RecognizingSpeech,\r\n                    hypothesis.Text,\r\n                    hypothesis.Duration,\r\n                    offset,\r\n                    hypothesis.Language,\r\n                    hypothesis.LanguageDetectionConfidence,\r\n                    hypothesis.SpeakerId,\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                this.privRequestSession.onHypothesis(offset);\r\n\r\n                const ev = new SpeechRecognitionEventArgs(result, hypothesis.Duration, this.privRequestSession.sessionId);\r\n\r\n                if (!!this.privTranscriberRecognizer.recognizing) {\r\n                    try {\r\n                        this.privTranscriberRecognizer.recognizing(this.privTranscriberRecognizer, ev);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"speech.phrase\":\r\n                const simple: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n                const resultReason: ResultReason = EnumTranslation.implTranslateRecognitionResult(simple.RecognitionStatus);\r\n\r\n                this.privRequestSession.onPhraseRecognized(this.privRequestSession.currentTurnAudioOffset + simple.Offset + simple.Duration);\r\n\r\n                if (ResultReason.Canceled === resultReason) {\r\n                    const cancelReason: CancellationReason = EnumTranslation.implTranslateCancelResult(simple.RecognitionStatus);\r\n\r\n                    await this.cancelRecognitionLocal(\r\n                        cancelReason,\r\n                        EnumTranslation.implTranslateCancelErrorCode(simple.RecognitionStatus),\r\n                        undefined);\r\n\r\n                } else {\r\n                    if (!(this.privRequestSession.isSpeechEnded && resultReason === ResultReason.NoMatch && simple.RecognitionStatus !== RecognitionStatus.InitialSilenceTimeout)) {\r\n                        if (this.privRecognizerConfig.parameters.getProperty(OutputFormatPropertyName) === OutputFormat[OutputFormat.Simple]) {\r\n                            result = new SpeechRecognitionResult(\r\n                                this.privRequestSession.requestId,\r\n                                resultReason,\r\n                                simple.DisplayText,\r\n                                simple.Duration,\r\n                                simple.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                                simple.Language,\r\n                                simple.LanguageDetectionConfidence,\r\n                                simple.SpeakerId,\r\n                                undefined,\r\n                                connectionMessage.textBody,\r\n                                resultProps);\r\n                        } else {\r\n                            const detailed: DetailedSpeechPhrase = DetailedSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n\r\n                            result = new SpeechRecognitionResult(\r\n                                this.privRequestSession.requestId,\r\n                                resultReason,\r\n                                detailed.RecognitionStatus === RecognitionStatus.Success ? detailed.NBest[0].Display : undefined,\r\n                                detailed.Duration,\r\n                                detailed.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                                detailed.Language,\r\n                                detailed.LanguageDetectionConfidence,\r\n                                undefined,\r\n                                undefined,\r\n                                connectionMessage.textBody,\r\n                                resultProps);\r\n                        }\r\n\r\n                        const event: SpeechRecognitionEventArgs = new SpeechRecognitionEventArgs(result, result.offset, this.privRequestSession.sessionId);\r\n\r\n                        if (!!this.privTranscriberRecognizer.recognized) {\r\n                            try {\r\n                                this.privTranscriberRecognizer.recognized(this.privTranscriberRecognizer, event);\r\n                                /* tslint:disable:no-empty */\r\n                            } catch (error) {\r\n                                // Not going to let errors in the event handler\r\n                                // trip things up.\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (!!this.privSuccessCallback) {\r\n                        try {\r\n                            this.privSuccessCallback(result);\r\n                        } catch (e) {\r\n                            if (!!this.privErrorCallback) {\r\n                                this.privErrorCallback(e);\r\n                            }\r\n                        }\r\n                        // Only invoke the call back once.\r\n                        // and if it's successful don't invoke the\r\n                        // error after that.\r\n                        this.privSuccessCallback = undefined;\r\n                        this.privErrorCallback = undefined;\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return processed;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        const properties: PropertyCollection = new PropertyCollection();\r\n        properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n\r\n        if (!!this.privTranscriberRecognizer.canceled) {\r\n            const cancelEvent: ConversationTranscriptionCanceledEventArgs = new ConversationTranscriptionCanceledEventArgs(\r\n                cancellationReason,\r\n                error,\r\n                errorCode,\r\n                undefined,\r\n                sessionId);\r\n            try {\r\n                this.privTranscriberRecognizer.canceled(this.privTranscriberRecognizer, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        if (!!this.privSuccessCallback) {\r\n            const result: SpeechRecognitionResult = new SpeechRecognitionResult(\r\n                requestId,\r\n                ResultReason.Canceled,\r\n                undefined, // Text\r\n                undefined, // Duration\r\n                undefined, // Offset\r\n                undefined, // Language\r\n                undefined, // Language Detection Confidence\r\n                undefined, // Speaker Id\r\n                error,\r\n                undefined, // Json\r\n                properties);\r\n            try {\r\n                this.privSuccessCallback(result);\r\n                this.privSuccessCallback = undefined;\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n    }\r\n\r\n    // Encapsulated for derived service recognizers that need to send additional JSON\r\n    protected async sendTranscriptionStartJSON(connection: IConnection): Promise<void> {\r\n        await this.sendSpeechContext(connection);\r\n        const info: ConversationInfo = this.privTranscriberRecognizer.getConversationInfo();\r\n        const payload: { [id: string]: any } = this.createSpeechEventPayload(info, \"start\");\r\n        await this.sendSpeechEvent(connection, payload);\r\n        await this.sendWaveHeader(connection);\r\n        return;\r\n    }\r\n\r\n    protected sendSpeechEvent = (connection: IConnection, payload: { [id: string]: any }): Promise<void> => {\r\n        const speechEventJson = JSON.stringify(payload);\r\n\r\n        if (speechEventJson) {\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"speech.event\",\r\n                this.privRequestSession.requestId,\r\n                \"application/json\",\r\n                speechEventJson));\r\n        }\r\n        return;\r\n    }\r\n\r\n    private createSpeechEventPayload(info: ConversationInfo, command: string): { [id: string]: any } {\r\n        const meeting: string = \"meeting\";\r\n        const eventDict: { [id: string]: any } = { id: meeting, name: command, meeting: info.conversationProperties };\r\n        const idString: string = \"id\";\r\n        const attendees: string = \"attendees\";\r\n        const record: string = \"record\";\r\n        eventDict[meeting][idString] = info.id;\r\n        eventDict[meeting][attendees] = info.participants;\r\n        eventDict[meeting][record] = info.conversationProperties.audiorecording === \"on\" ? \"true\" : \"false\";\r\n        return eventDict;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IPrimaryLanguage, RecognitionStatus } from \"../Exports\";\r\n\r\n// speech.phrase for detailed\r\nexport interface IDetailedSpeechPhrase {\r\n    RecognitionStatus: RecognitionStatus;\r\n    NBest: IPhrase[];\r\n    Duration?: number;\r\n    Offset?: number;\r\n    PrimaryLanguage?: IPrimaryLanguage;\r\n}\r\n\r\nexport interface IPhrase {\r\n    Confidence?: number;\r\n    Lexical: string;\r\n    ITN: string;\r\n    MaskedITN: string;\r\n    Display: string;\r\n}\r\n\r\nexport class DetailedSpeechPhrase implements IDetailedSpeechPhrase {\r\n    private privDetailedSpeechPhrase: IDetailedSpeechPhrase;\r\n\r\n    private constructor(json: string) {\r\n        this.privDetailedSpeechPhrase = JSON.parse(json);\r\n        this.privDetailedSpeechPhrase.RecognitionStatus = (RecognitionStatus as any)[this.privDetailedSpeechPhrase.RecognitionStatus];\r\n    }\r\n\r\n    public static fromJSON(json: string): DetailedSpeechPhrase {\r\n        return new DetailedSpeechPhrase(json);\r\n    }\r\n\r\n    public get RecognitionStatus(): RecognitionStatus {\r\n        return this.privDetailedSpeechPhrase.RecognitionStatus;\r\n    }\r\n    public get NBest(): IPhrase[] {\r\n        return this.privDetailedSpeechPhrase.NBest;\r\n    }\r\n    public get Duration(): number {\r\n        return this.privDetailedSpeechPhrase.Duration;\r\n    }\r\n    public get Offset(): number {\r\n        return this.privDetailedSpeechPhrase.Offset;\r\n    }\r\n    public get Language(): string {\r\n        return this.privDetailedSpeechPhrase.PrimaryLanguage === undefined ? undefined : this.privDetailedSpeechPhrase.PrimaryLanguage.Language;\r\n    }\r\n    public get LanguageDetectionConfidence(): string {\r\n        return this.privDetailedSpeechPhrase.PrimaryLanguage === undefined ? undefined : this.privDetailedSpeechPhrase.PrimaryLanguage.Confidence;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognitionStatus } from \"../Exports\";\r\n\r\n// speech.phrase\r\nexport interface ISimpleSpeechPhrase {\r\n    RecognitionStatus: RecognitionStatus;\r\n    DisplayText: string;\r\n    Offset?: number;\r\n    Duration?: number;\r\n    PrimaryLanguage?: IPrimaryLanguage;\r\n    SpeakerId?: string;\r\n}\r\n\r\nexport interface IPrimaryLanguage {\r\n    Language: string;\r\n    Confidence: string;\r\n}\r\n\r\nexport class SimpleSpeechPhrase implements ISimpleSpeechPhrase {\r\n    private privSimpleSpeechPhrase: ISimpleSpeechPhrase;\r\n\r\n    private constructor(json: string) {\r\n        this.privSimpleSpeechPhrase = JSON.parse(json);\r\n        this.privSimpleSpeechPhrase.RecognitionStatus = (RecognitionStatus as any)[this.privSimpleSpeechPhrase.RecognitionStatus];\r\n    }\r\n\r\n    public static fromJSON(json: string): SimpleSpeechPhrase {\r\n        return new SimpleSpeechPhrase(json);\r\n    }\r\n\r\n    public get RecognitionStatus(): RecognitionStatus {\r\n        return this.privSimpleSpeechPhrase.RecognitionStatus;\r\n    }\r\n\r\n    public get DisplayText(): string {\r\n        return this.privSimpleSpeechPhrase.DisplayText;\r\n    }\r\n\r\n    public get Offset(): number {\r\n        return this.privSimpleSpeechPhrase.Offset;\r\n    }\r\n\r\n    public get Duration(): number {\r\n        return this.privSimpleSpeechPhrase.Duration;\r\n    }\r\n\r\n    public get Language(): string {\r\n        return this.privSimpleSpeechPhrase.PrimaryLanguage === undefined ? undefined : this.privSimpleSpeechPhrase.PrimaryLanguage.Language;\r\n    }\r\n\r\n    public get LanguageDetectionConfidence(): string {\r\n        return this.privSimpleSpeechPhrase.PrimaryLanguage === undefined ? undefined : this.privSimpleSpeechPhrase.PrimaryLanguage.Confidence;\r\n    }\r\n\r\n    public get SpeakerId(): string {\r\n        return this.privSimpleSpeechPhrase.SpeakerId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { LanguageUnderstandingModelImpl } from \"../sdk/LanguageUnderstandingModel\";\r\n\r\n/**\r\n * @class AddedLmIntent\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class AddedLmIntent {\r\n    public modelImpl: LanguageUnderstandingModelImpl;\r\n    public intentName: string;\r\n\r\n    /**\r\n     * Creates and initializes an instance of this class.\r\n     * @constructor\r\n     * @param modelImpl - The model.\r\n     * @param intentName - The intent name.\r\n     */\r\n    public constructor(modelImpl: LanguageUnderstandingModelImpl, intentName: string) {\r\n        this.modelImpl = modelImpl;\r\n        this.intentName = intentName;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IAudioSource,\r\n    MessageType,\r\n} from \"../common/Exports\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    IntentRecognitionCanceledEventArgs,\r\n    IntentRecognitionEventArgs,\r\n    IntentRecognitionResult,\r\n    IntentRecognizer,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeechRecognitionResult,\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    AddedLmIntent,\r\n    CancellationErrorCodePropertyName,\r\n    EnumTranslation,\r\n    IntentResponse,\r\n    ServiceRecognizerBase,\r\n    SimpleSpeechPhrase,\r\n    SpeechHypothesis,\r\n} from \"./Exports\";\r\nimport { IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class IntentServiceRecognizer extends ServiceRecognizerBase {\r\n    private privIntentRecognizer: IntentRecognizer;\r\n    private privAddedLmIntents: { [id: string]: AddedLmIntent; };\r\n    private privIntentDataSent: boolean;\r\n    private privUmbrellaIntent: AddedLmIntent;\r\n    private privPendingIntentArgs: IntentRecognitionEventArgs;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        recognizer: IntentRecognizer) {\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, recognizer);\r\n        this.privIntentRecognizer = recognizer;\r\n        this.privIntentDataSent = false;\r\n    }\r\n\r\n    public setIntents(addedIntents: { [id: string]: AddedLmIntent; }, umbrellaIntent: AddedLmIntent): void {\r\n        this.privAddedLmIntents = addedIntents;\r\n        this.privUmbrellaIntent = umbrellaIntent;\r\n        this.privIntentDataSent = true;\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(connectionMessage: SpeechConnectionMessage): Promise<boolean> {\r\n\r\n        let result: IntentRecognitionResult;\r\n        let ev: IntentRecognitionEventArgs;\r\n        let processed: boolean = false;\r\n\r\n        const resultProps: PropertyCollection = new PropertyCollection();\r\n        if (connectionMessage.messageType === MessageType.Text) {\r\n            resultProps.setProperty(PropertyId.SpeechServiceResponse_JsonResult, connectionMessage.textBody);\r\n        }\r\n\r\n        switch (connectionMessage.path.toLowerCase()) {\r\n            case \"speech.hypothesis\":\r\n                const speechHypothesis: SpeechHypothesis = SpeechHypothesis.fromJSON(connectionMessage.textBody);\r\n\r\n                result = new IntentRecognitionResult(\r\n                    undefined,\r\n                    this.privRequestSession.requestId,\r\n                    ResultReason.RecognizingIntent,\r\n                    speechHypothesis.Text,\r\n                    speechHypothesis.Duration,\r\n                    speechHypothesis.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                    speechHypothesis.Language,\r\n                    speechHypothesis.LanguageDetectionConfidence,\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                this.privRequestSession.onHypothesis(result.offset);\r\n\r\n                ev = new IntentRecognitionEventArgs(result, speechHypothesis.Offset + this.privRequestSession.currentTurnAudioOffset, this.privRequestSession.sessionId);\r\n\r\n                if (!!this.privIntentRecognizer.recognizing) {\r\n                    try {\r\n                        this.privIntentRecognizer.recognizing(this.privIntentRecognizer, ev);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"speech.phrase\":\r\n                const simple: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n                result = new IntentRecognitionResult(\r\n                    undefined,\r\n                    this.privRequestSession.requestId,\r\n                    EnumTranslation.implTranslateRecognitionResult(simple.RecognitionStatus),\r\n                    simple.DisplayText,\r\n                    simple.Duration,\r\n                    simple.Offset + this.privRequestSession.currentTurnAudioOffset,\r\n                    simple.Language,\r\n                    simple.LanguageDetectionConfidence,\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                ev = new IntentRecognitionEventArgs(result, result.offset, this.privRequestSession.sessionId);\r\n\r\n                const sendEvent: () => void = () => {\r\n                    if (!!this.privIntentRecognizer.recognized) {\r\n                        try {\r\n                            this.privIntentRecognizer.recognized(this.privIntentRecognizer, ev);\r\n                            /* tslint:disable:no-empty */\r\n                        } catch (error) {\r\n                            // Not going to let errors in the event handler\r\n                            // trip things up.\r\n                        }\r\n                    }\r\n\r\n                    // report result to promise.\r\n                    if (!!this.privSuccessCallback) {\r\n                        try {\r\n                            this.privSuccessCallback(result);\r\n                        } catch (e) {\r\n                            if (!!this.privErrorCallback) {\r\n                                this.privErrorCallback(e);\r\n                            }\r\n                        }\r\n                        // Only invoke the call back once.\r\n                        // and if it's successful don't invoke the\r\n                        // error after that.\r\n                        this.privSuccessCallback = undefined;\r\n                        this.privErrorCallback = undefined;\r\n                    }\r\n                };\r\n\r\n                // If intent data was sent, the terminal result for this recognizer is an intent being found.\r\n                // If no intent data was sent, the terminal event is speech recognition being successful.\r\n                if (false === this.privIntentDataSent || ResultReason.NoMatch === ev.result.reason) {\r\n                    // Advance the buffers.\r\n                    this.privRequestSession.onPhraseRecognized(ev.offset + ev.result.duration);\r\n                    sendEvent();\r\n                } else {\r\n                    // Squirrel away the args, when the response event arrives it will build upon them\r\n                    // and then return\r\n                    this.privPendingIntentArgs = ev;\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"response\":\r\n                // Response from LUIS\r\n                ev = this.privPendingIntentArgs;\r\n                this.privPendingIntentArgs = undefined;\r\n\r\n                if (undefined === ev) {\r\n                    if (\"\" === connectionMessage.textBody) {\r\n                        // This condition happens if there is nothing but silence in the\r\n                        // audio sent to the service.\r\n                        return;\r\n                    }\r\n\r\n                    // Odd... Not sure this can happen\r\n                    ev = new IntentRecognitionEventArgs(new IntentRecognitionResult(), 0 /*TODO*/, this.privRequestSession.sessionId);\r\n                }\r\n\r\n                const intentResponse: IntentResponse = IntentResponse.fromJSON(connectionMessage.textBody);\r\n\r\n                // If LUIS didn't return anything, send the existing event, else\r\n                // modify it to show the match.\r\n                // See if the intent found is in the list of intents asked for.\r\n                let addedIntent: AddedLmIntent = this.privAddedLmIntents[intentResponse.topScoringIntent.intent];\r\n\r\n                if (this.privUmbrellaIntent !== undefined) {\r\n                    addedIntent = this.privUmbrellaIntent;\r\n                }\r\n\r\n                if (null !== intentResponse && addedIntent !== undefined) {\r\n                    const intentId = addedIntent.intentName === undefined ? intentResponse.topScoringIntent.intent : addedIntent.intentName;\r\n                    let reason = ev.result.reason;\r\n\r\n                    if (undefined !== intentId) {\r\n                        reason = ResultReason.RecognizedIntent;\r\n                    }\r\n\r\n                    // make sure, properties is set.\r\n                    const properties = (undefined !== ev.result.properties) ?\r\n                        ev.result.properties : new PropertyCollection();\r\n\r\n                    properties.setProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult, connectionMessage.textBody);\r\n\r\n                    ev = new IntentRecognitionEventArgs(\r\n                        new IntentRecognitionResult(\r\n                            intentId,\r\n                            ev.result.resultId,\r\n                            reason,\r\n                            ev.result.text,\r\n                            ev.result.duration,\r\n                            ev.result.offset,\r\n                            undefined,\r\n                            undefined,\r\n                            ev.result.errorDetails,\r\n                            ev.result.json,\r\n                            properties),\r\n                        ev.offset,\r\n                        ev.sessionId);\r\n                }\r\n                this.privRequestSession.onPhraseRecognized(ev.offset + ev.result.duration);\r\n\r\n                if (!!this.privIntentRecognizer.recognized) {\r\n                    try {\r\n                        this.privIntentRecognizer.recognized(this.privIntentRecognizer, ev);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n\r\n                // report result to promise.\r\n                if (!!this.privSuccessCallback) {\r\n                    try {\r\n                        this.privSuccessCallback(ev.result);\r\n                    } catch (e) {\r\n                        if (!!this.privErrorCallback) {\r\n                            this.privErrorCallback(e);\r\n                        }\r\n                    }\r\n                    // Only invoke the call back once.\r\n                    // and if it's successful don't invoke the\r\n                    // error after that.\r\n                    this.privSuccessCallback = undefined;\r\n                    this.privErrorCallback = undefined;\r\n                }\r\n                processed = true;\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n        return processed;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        const properties: PropertyCollection = new PropertyCollection();\r\n        properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n\r\n        if (!!this.privIntentRecognizer.canceled) {\r\n\r\n            const cancelEvent: IntentRecognitionCanceledEventArgs = new IntentRecognitionCanceledEventArgs(\r\n                cancellationReason,\r\n                error,\r\n                errorCode,\r\n                undefined,\r\n                undefined,\r\n                sessionId);\r\n            try {\r\n                this.privIntentRecognizer.canceled(this.privIntentRecognizer, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        if (!!this.privSuccessCallback) {\r\n            const result: IntentRecognitionResult = new IntentRecognitionResult(\r\n                undefined, // Intent Id\r\n                requestId,\r\n                ResultReason.Canceled,\r\n                undefined, // Text\r\n                undefined, // Duration\r\n                undefined, // Offset\r\n                undefined, // Language\r\n                undefined, // LanguageDetectionConfidence\r\n                error,\r\n                undefined, // Json\r\n                properties);\r\n            try {\r\n                this.privSuccessCallback(result);\r\n                this.privSuccessCallback = undefined;\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// response\r\n\r\nexport interface IIntentResponse {\r\n    query: string;\r\n    topScoringIntent: ISingleIntent;\r\n    entities: IIntentEntity[];\r\n}\r\n\r\nexport interface IIntentEntity {\r\n    entity: string;\r\n    type: string;\r\n    startIndex: number;\r\n    endIndex: number;\r\n    score: number;\r\n}\r\n\r\nexport interface ISingleIntent {\r\n    intent: string;\r\n    score: number;\r\n}\r\n\r\nexport class IntentResponse implements IIntentResponse {\r\n    private privIntentResponse: IIntentResponse;\r\n\r\n    private constructor(json: string) {\r\n        this.privIntentResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): IntentResponse {\r\n        return new IntentResponse(json);\r\n    }\r\n\r\n    public get query(): string {\r\n        return this.privIntentResponse.query;\r\n    }\r\n\r\n    public get topScoringIntent(): ISingleIntent {\r\n        return this.privIntentResponse.topScoringIntent;\r\n    }\r\n\r\n    public get entities(): IIntentEntity[] {\r\n        return this.privIntentResponse.entities;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport {\r\n    AudioSourceErrorEvent,\r\n    AudioStreamNodeAttachedEvent,\r\n    AudioStreamNodeAttachingEvent,\r\n    AudioStreamNodeDetachedEvent,\r\n    AudioStreamNodeErrorEvent,\r\n    ConnectionEstablishedEvent,\r\n    ConnectionEstablishErrorEvent,\r\n    ConnectionMessageReceivedEvent,\r\n    ConnectionStartEvent,\r\n    IEventListener,\r\n    IStringDictionary,\r\n    PlatformEvent,\r\n} from \"../common/Exports\";\r\nimport { ConnectingToServiceEvent, RecognitionTriggeredEvent } from \"./RecognitionEvents\";\r\n\r\nexport interface ITelemetry {\r\n    Metrics: IMetric[];\r\n    ReceivedMessages: IStringDictionary<string[]>;\r\n}\r\n\r\nexport interface IMetric {\r\n    End?: string;\r\n    Error?: string;\r\n    Id?: string;\r\n    Name?: string;\r\n    Start?: string;\r\n    PhraseLatencyMs?: number[];\r\n    FirstHypothesisLatencyMs?: number[];\r\n}\r\n\r\nexport class ServiceTelemetryListener implements IEventListener<PlatformEvent> {\r\n    private privIsDisposed: boolean = false;\r\n\r\n    private privRequestId: string;\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n\r\n    private privListeningTriggerMetric: IMetric = null;\r\n    private privMicMetric: IMetric = null;\r\n    private privConnectionEstablishMetric: IMetric = null;\r\n\r\n    private privMicStartTime: string;\r\n\r\n    private privConnectionId: string;\r\n    private privConnectionStartTime: string;\r\n\r\n    private privReceivedMessages: IStringDictionary<string[]>;\r\n    private privPhraseLatencies: number[];\r\n    private privHypothesisLatencies: number[];\r\n\r\n    constructor(requestId: string, audioSourceId: string, audioNodeId: string) {\r\n        this.privRequestId = requestId;\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privAudioNodeId = audioNodeId;\r\n\r\n        this.privReceivedMessages = {};\r\n        this.privPhraseLatencies = [];\r\n        this.privHypothesisLatencies = [];\r\n    }\r\n\r\n    public phraseReceived(audioReceivedTime: number): void {\r\n        if (audioReceivedTime > 0) { // 0 indicates the time is unknown. Drop it.\r\n            this.privPhraseLatencies.push(Date.now() - audioReceivedTime);\r\n        }\r\n    }\r\n\r\n    public hypothesisReceived(audioReceivedTime: number): void {\r\n        if (audioReceivedTime > 0) { // 0 indicates the time is unknown. Drop it.\r\n            this.privHypothesisLatencies.push(Date.now() - audioReceivedTime);\r\n        }\r\n    }\r\n\r\n    public onEvent = (e: PlatformEvent): void => {\r\n        if (this.privIsDisposed) {\r\n            return;\r\n        }\r\n\r\n        if (e instanceof RecognitionTriggeredEvent && e.requestId === this.privRequestId) {\r\n            this.privListeningTriggerMetric = {\r\n                End: e.eventTime,\r\n                Name: \"ListeningTrigger\",\r\n                Start: e.eventTime,\r\n            };\r\n        }\r\n\r\n        if (e instanceof AudioStreamNodeAttachingEvent && e.audioSourceId === this.privAudioSourceId && e.audioNodeId === this.privAudioNodeId) {\r\n            this.privMicStartTime = e.eventTime;\r\n        }\r\n\r\n        if (e instanceof AudioStreamNodeAttachedEvent && e.audioSourceId === this.privAudioSourceId && e.audioNodeId === this.privAudioNodeId) {\r\n            this.privMicStartTime = e.eventTime;\r\n        }\r\n\r\n        if (e instanceof AudioSourceErrorEvent && e.audioSourceId === this.privAudioSourceId) {\r\n            if (!this.privMicMetric) {\r\n                this.privMicMetric = {\r\n                    End: e.eventTime,\r\n                    Error: e.error,\r\n                    Name: \"Microphone\",\r\n                    Start: this.privMicStartTime,\r\n                };\r\n            }\r\n        }\r\n\r\n        if (e instanceof AudioStreamNodeErrorEvent && e.audioSourceId === this.privAudioSourceId && e.audioNodeId === this.privAudioNodeId) {\r\n            if (!this.privMicMetric) {\r\n                this.privMicMetric = {\r\n                    End: e.eventTime,\r\n                    Error: e.error,\r\n                    Name: \"Microphone\",\r\n                    Start: this.privMicStartTime,\r\n                };\r\n            }\r\n        }\r\n\r\n        if (e instanceof AudioStreamNodeDetachedEvent && e.audioSourceId === this.privAudioSourceId && e.audioNodeId === this.privAudioNodeId) {\r\n            if (!this.privMicMetric) {\r\n                this.privMicMetric = {\r\n                    End: e.eventTime,\r\n                    Name: \"Microphone\",\r\n                    Start: this.privMicStartTime,\r\n                };\r\n            }\r\n        }\r\n\r\n        if (e instanceof ConnectingToServiceEvent && e.requestId === this.privRequestId) {\r\n            this.privConnectionId = e.sessionId;\r\n        }\r\n\r\n        if (e instanceof ConnectionStartEvent && e.connectionId === this.privConnectionId) {\r\n            this.privConnectionStartTime = e.eventTime;\r\n        }\r\n\r\n        if (e instanceof ConnectionEstablishedEvent && e.connectionId === this.privConnectionId) {\r\n            if (!this.privConnectionEstablishMetric) {\r\n                this.privConnectionEstablishMetric = {\r\n                    End: e.eventTime,\r\n                    Id: this.privConnectionId,\r\n                    Name: \"Connection\",\r\n                    Start: this.privConnectionStartTime,\r\n                };\r\n            }\r\n        }\r\n\r\n        if (e instanceof ConnectionEstablishErrorEvent && e.connectionId === this.privConnectionId) {\r\n            if (!this.privConnectionEstablishMetric) {\r\n                this.privConnectionEstablishMetric = {\r\n                    End: e.eventTime,\r\n                    Error: this.getConnectionError(e.statusCode),\r\n                    Id: this.privConnectionId,\r\n                    Name: \"Connection\",\r\n                    Start: this.privConnectionStartTime,\r\n                };\r\n            }\r\n        }\r\n\r\n        if (e instanceof ConnectionMessageReceivedEvent && e.connectionId === this.privConnectionId) {\r\n            if (e.message && e.message.headers && e.message.headers.path) {\r\n                if (!this.privReceivedMessages[e.message.headers.path]) {\r\n                    this.privReceivedMessages[e.message.headers.path] = new Array<string>();\r\n                }\r\n\r\n                this.privReceivedMessages[e.message.headers.path].push(e.networkReceivedTime);\r\n            }\r\n        }\r\n    }\r\n\r\n    public getTelemetry = (): string => {\r\n        const metrics = new Array<IMetric>();\r\n\r\n        if (this.privListeningTriggerMetric) {\r\n            metrics.push(this.privListeningTriggerMetric);\r\n        }\r\n\r\n        if (this.privMicMetric) {\r\n            metrics.push(this.privMicMetric);\r\n        }\r\n\r\n        if (this.privConnectionEstablishMetric) {\r\n            metrics.push(this.privConnectionEstablishMetric);\r\n        }\r\n\r\n        if (this.privPhraseLatencies.length > 0) {\r\n            metrics.push({\r\n                PhraseLatencyMs: this.privPhraseLatencies,\r\n            });\r\n        }\r\n\r\n        if (this.privHypothesisLatencies.length > 0) {\r\n            metrics.push({\r\n                FirstHypothesisLatencyMs: this.privHypothesisLatencies,\r\n            });\r\n        }\r\n\r\n        const telemetry: ITelemetry = {\r\n            Metrics: metrics,\r\n            ReceivedMessages: this.privReceivedMessages,\r\n        };\r\n\r\n        const json = JSON.stringify(telemetry);\r\n\r\n        // We dont want to send the same telemetry again. So clean those out.\r\n        this.privReceivedMessages = {};\r\n        this.privListeningTriggerMetric = null;\r\n        this.privMicMetric = null;\r\n        this.privConnectionEstablishMetric = null;\r\n        this.privPhraseLatencies = [];\r\n        this.privHypothesisLatencies = [];\r\n        return json;\r\n    }\r\n\r\n    // Determines if there are any telemetry events to send to the service.\r\n    public get hasTelemetry(): boolean {\r\n        return (Object.keys(this.privReceivedMessages).length !== 0 ||\r\n            this.privListeningTriggerMetric !== null ||\r\n            this.privMicMetric !== null ||\r\n            this.privConnectionEstablishMetric !== null ||\r\n            this.privPhraseLatencies.length !== 0 ||\r\n            this.privHypothesisLatencies.length !== 0);\r\n    }\r\n\r\n    public dispose = (): void => {\r\n        this.privIsDisposed = true;\r\n    }\r\n\r\n    private getConnectionError = (statusCode: number): string => {\r\n        /*\r\n        -- Websocket status codes --\r\n        NormalClosure = 1000,\r\n        EndpointUnavailable = 1001,\r\n        ProtocolError = 1002,\r\n        InvalidMessageType = 1003,\r\n        Empty = 1005,\r\n        InvalidPayloadData = 1007,\r\n        PolicyViolation = 1008,\r\n        MessageTooBig = 1009,\r\n        MandatoryExtension = 1010,\r\n        InternalServerError = 1011\r\n        */\r\n\r\n        switch (statusCode) {\r\n            case 400:\r\n            case 1002:\r\n            case 1003:\r\n            case 1005:\r\n            case 1007:\r\n            case 1008:\r\n            case 1009: return \"BadRequest\";\r\n            case 401: return \"Unauthorized\";\r\n            case 403: return \"Forbidden\";\r\n            case 503:\r\n            case 1001: return \"ServerUnavailable\";\r\n            case 500:\r\n            case 1011: return \"ServerError\";\r\n            case 408:\r\n            case 504: return \"Timeout\";\r\n            default: return \"statuscode:\" + statusCode.toString();\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { Z_NO_COMPRESSION } from \"zlib\";\r\nimport { ReplayableAudioNode } from \"../common.browser/Exports\";\r\nimport {\r\n    createNoDashGuid,\r\n    Deferred,\r\n    Events,\r\n    IDetachable,\r\n    IEventSource,\r\n    PlatformEvent\r\n} from \"../common/Exports\";\r\nimport {\r\n    ConnectingToServiceEvent,\r\n    ListeningStartedEvent,\r\n    RecognitionStartedEvent,\r\n    RecognitionTriggeredEvent,\r\n    SpeechRecognitionEvent,\r\n} from \"./RecognitionEvents\";\r\nimport { ServiceTelemetryListener } from \"./ServiceTelemetryListener.Internal\";\r\n\r\nexport class RequestSession {\r\n    private privIsDisposed: boolean = false;\r\n    private privServiceTelemetryListener: ServiceTelemetryListener;\r\n    private privDetachables: IDetachable[] = new Array<IDetachable>();\r\n    private privRequestId: string;\r\n    private privAudioSourceId: string;\r\n    private privAudioNodeId: string;\r\n    private privAudioNode: ReplayableAudioNode;\r\n    private privAuthFetchEventId: string;\r\n    private privIsAudioNodeDetached: boolean = false;\r\n    private privIsRecognizing: boolean = false;\r\n    private privIsSpeechEnded: boolean = false;\r\n    private privTurnStartAudioOffset: number = 0;\r\n    private privLastRecoOffset: number = 0;\r\n    private privHypothesisReceived: boolean = false;\r\n    private privBytesSent: number = 0;\r\n    private privRecogNumber: number = 0;\r\n    private privSessionId: string;\r\n    private privTurnDeferral: Deferred<void>;\r\n    private privInTurn: boolean = false;\r\n    private privConnectionAttempts: number = 0;\r\n\r\n    constructor(audioSourceId: string) {\r\n        this.privAudioSourceId = audioSourceId;\r\n        this.privRequestId = createNoDashGuid();\r\n        this.privAudioNodeId = createNoDashGuid();\r\n        this.privTurnDeferral = new Deferred<void>();\r\n\r\n        // We're not in a turn, so resolve.\r\n        this.privTurnDeferral.resolve();\r\n    }\r\n\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n\r\n    public get audioNodeId(): string {\r\n        return this.privAudioNodeId;\r\n    }\r\n\r\n    public get turnCompletionPromise(): Promise<void> {\r\n        return this.privTurnDeferral.promise;\r\n    }\r\n\r\n    public get isSpeechEnded(): boolean {\r\n        return this.privIsSpeechEnded;\r\n    }\r\n\r\n    public get isRecognizing(): boolean {\r\n        return this.privIsRecognizing;\r\n    }\r\n\r\n    public get currentTurnAudioOffset(): number {\r\n        return this.privTurnStartAudioOffset;\r\n    }\r\n\r\n    public get recogNumber(): number {\r\n        return this.privRecogNumber;\r\n    }\r\n\r\n    public get numConnectionAttempts(): number {\r\n        return this.privConnectionAttempts;\r\n    }\r\n\r\n    // The number of bytes sent for the current connection.\r\n    // Counter is reset to 0 each time a connection is established.\r\n    public get bytesSent(): number {\r\n        return this.privBytesSent;\r\n    }\r\n    public listenForServiceTelemetry(eventSource: IEventSource<PlatformEvent>): void {\r\n        if (!!this.privServiceTelemetryListener) {\r\n            this.privDetachables.push(eventSource.attachListener(this.privServiceTelemetryListener));\r\n        }\r\n    }\r\n\r\n    public startNewRecognition(): void {\r\n        this.privIsSpeechEnded = false;\r\n        this.privIsRecognizing = true;\r\n        this.privTurnStartAudioOffset = 0;\r\n        this.privLastRecoOffset = 0;\r\n        this.privRequestId = createNoDashGuid();\r\n        this.privRecogNumber++;\r\n        this.privServiceTelemetryListener = new ServiceTelemetryListener(this.privRequestId, this.privAudioSourceId, this.privAudioNodeId);\r\n        this.onEvent(new RecognitionTriggeredEvent(this.requestId, this.privSessionId, this.privAudioSourceId, this.privAudioNodeId));\r\n    }\r\n\r\n    public async onAudioSourceAttachCompleted(audioNode: ReplayableAudioNode, isError: boolean, error?: string): Promise<void> {\r\n        this.privAudioNode = audioNode;\r\n        this.privIsAudioNodeDetached = false;\r\n\r\n        if (isError) {\r\n            await this.onComplete();\r\n        } else {\r\n            this.onEvent(new ListeningStartedEvent(this.privRequestId, this.privSessionId, this.privAudioSourceId, this.privAudioNodeId));\r\n        }\r\n    }\r\n\r\n    public onPreConnectionStart = (authFetchEventId: string, connectionId: string): void => {\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n        this.privSessionId = connectionId;\r\n        this.onEvent(new ConnectingToServiceEvent(this.privRequestId, this.privAuthFetchEventId, this.privSessionId));\r\n    }\r\n\r\n    public async onAuthCompleted(isError: boolean, error?: string): Promise<void> {\r\n        if (isError) {\r\n            await this.onComplete();\r\n        }\r\n    }\r\n\r\n    public async onConnectionEstablishCompleted(statusCode: number, reason?: string): Promise<void> {\r\n        if (statusCode === 200) {\r\n            this.onEvent(new RecognitionStartedEvent(this.requestId, this.privAudioSourceId, this.privAudioNodeId, this.privAuthFetchEventId, this.privSessionId));\r\n            if (!!this.privAudioNode) {\r\n                this.privAudioNode.replay();\r\n            }\r\n            this.privTurnStartAudioOffset = this.privLastRecoOffset;\r\n            this.privBytesSent = 0;\r\n            return;\r\n        } else if (statusCode === 403) {\r\n            await this.onComplete();\r\n        }\r\n    }\r\n\r\n    public async onServiceTurnEndResponse(continuousRecognition: boolean): Promise<void> {\r\n        this.privTurnDeferral.resolve();\r\n\r\n        if (!continuousRecognition || this.isSpeechEnded) {\r\n            await this.onComplete();\r\n            this.privInTurn = false;\r\n        } else {\r\n            // Start a new request set.\r\n            this.privTurnStartAudioOffset = this.privLastRecoOffset;\r\n            this.privRequestId = createNoDashGuid();\r\n            this.privAudioNode.replay();\r\n        }\r\n    }\r\n\r\n    public onServiceTurnStartResponse = (): void => {\r\n        if (!!this.privTurnDeferral && !!this.privInTurn) {\r\n            // What? How are we starting a turn with another not done?\r\n            this.privTurnDeferral.reject(\"Another turn started before current completed.\");\r\n            // Avoid UnhandledPromiseRejection if privTurnDeferral is not being awaited\r\n            /* tslint:disable:no-empty */\r\n            this.privTurnDeferral.promise.then().catch(() => { });\r\n        }\r\n        this.privInTurn = true;\r\n        this.privTurnDeferral = new Deferred<void>();\r\n    }\r\n\r\n    public onHypothesis(offset: number): void {\r\n        if (!this.privHypothesisReceived) {\r\n            this.privHypothesisReceived = true;\r\n            this.privServiceTelemetryListener.hypothesisReceived(this.privAudioNode.findTimeAtOffset(offset));\r\n        }\r\n    }\r\n\r\n    public onPhraseRecognized(offset: number): void {\r\n        this.privServiceTelemetryListener.phraseReceived(this.privAudioNode.findTimeAtOffset(offset));\r\n        this.onServiceRecognized(offset);\r\n    }\r\n\r\n    public onServiceRecognized(offset: number): void {\r\n        this.privLastRecoOffset = offset;\r\n        this.privHypothesisReceived = false;\r\n        this.privAudioNode.shrinkBuffers(offset);\r\n        this.privConnectionAttempts = 0;\r\n    }\r\n\r\n    public onAudioSent(bytesSent: number): void {\r\n        this.privBytesSent += bytesSent;\r\n    }\r\n\r\n    public onRetryConnection(): void {\r\n        this.privConnectionAttempts++;\r\n    }\r\n\r\n    public async dispose(error?: string): Promise<void> {\r\n        if (!this.privIsDisposed) {\r\n            // we should have completed by now. If we did not its an unknown error.\r\n            this.privIsDisposed = true;\r\n            for (const detachable of this.privDetachables) {\r\n                await detachable.detach();\r\n            }\r\n\r\n            this.privServiceTelemetryListener.dispose();\r\n            this.privIsRecognizing = false;\r\n        }\r\n    }\r\n\r\n    public getTelemetry = (): string => {\r\n        if (this.privServiceTelemetryListener.hasTelemetry) {\r\n            return this.privServiceTelemetryListener.getTelemetry();\r\n        } else {\r\n            return null;\r\n        }\r\n    }\r\n\r\n    public async onStopRecognizing(): Promise<void> {\r\n        await this.onComplete();\r\n    }\r\n\r\n    // Should be called with the audioNode for this session has indicated that it is out of speech.\r\n    public onSpeechEnded(): void {\r\n        this.privIsSpeechEnded = true;\r\n    }\r\n\r\n    protected onEvent = (event: SpeechRecognitionEvent): void => {\r\n        if (!!this.privServiceTelemetryListener) {\r\n            this.privServiceTelemetryListener.onEvent(event);\r\n        }\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private async onComplete(): Promise<void> {\r\n        if (!!this.privIsRecognizing) {\r\n            this.privIsRecognizing = false;\r\n            await this.detachAudioNode();\r\n        }\r\n    }\r\n\r\n    private async detachAudioNode(): Promise<void> {\r\n        if (!this.privIsAudioNodeDetached) {\r\n            this.privIsAudioNodeDetached = true;\r\n            if (this.privAudioNode) {\r\n                await this.privAudioNode.detach();\r\n            }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    DynamicGrammarBuilder,\r\n    IDynamicGrammar,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Represents the JSON used in the speech.context message sent to the speech service.\r\n * The dynamic grammar is always refreshed from the encapsulated dynamic grammar object.\r\n */\r\nexport class SpeechContext {\r\n    private privContext: { [section: string]: any } = {};\r\n    private privDynamicGrammar: DynamicGrammarBuilder;\r\n\r\n    constructor(dynamicGrammar: DynamicGrammarBuilder) {\r\n        this.privDynamicGrammar = dynamicGrammar;\r\n    }\r\n\r\n    /**\r\n     * Adds a section to the speech.context object.\r\n     * @param sectionName Name of the section to add.\r\n     * @param value JSON serializable object that represents the value.\r\n     */\r\n    public setSection(sectionName: string, value: any): void {\r\n        this.privContext[sectionName] = value;\r\n    }\r\n\r\n    /**\r\n     * @Internal\r\n     * This is only used by pronunciation assessment config.\r\n     * Do not use externally, object returned will change without warning or notice.\r\n     */\r\n    public setPronunciationAssessmentParams(params: string): void {\r\n        if (this.privContext.phraseDetection === undefined) {\r\n            this.privContext.phraseDetection = {\r\n                enrichment: {\r\n                    pronunciationAssessment: {}\r\n                }\r\n            };\r\n        }\r\n        this.privContext.phraseDetection.enrichment.pronunciationAssessment = JSON.parse(params);\r\n        if (this.privContext.phraseOutput === undefined) {\r\n            this.privContext.phraseOutput = {\r\n                detailed: {\r\n                    options: []\r\n                },\r\n                format: {}\r\n            };\r\n        }\r\n        this.privContext.phraseOutput.format = \"Detailed\";\r\n        this.privContext.phraseOutput.detailed.options.push(\"PronunciationAssessment\");\r\n        if (this.privContext.phraseOutput.detailed.options.indexOf(\"WordTimings\") === -1) {\r\n            this.privContext.phraseOutput.detailed.options.push(\"WordTimings\");\r\n        }\r\n    }\r\n\r\n    public toJSON(): string {\r\n\r\n        const dgi: IDynamicGrammar = this.privDynamicGrammar.generateGrammarObject();\r\n        this.setSection(\"dgi\", dgi);\r\n\r\n        const ret: string = JSON.stringify(this.privContext);\r\n        return ret;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IDynamicGrammar,\r\n    IDynamicGrammarGeneric,\r\n} from \"./Exports\";\r\n\r\n/**\r\n * Responsible for building the object to be sent to the speech service to support dynamic grammars.\r\n * @class DynamicGrammarBuilder\r\n */\r\nexport class DynamicGrammarBuilder {\r\n\r\n    private privPhrases: string[];\r\n    private privGrammars: string[];\r\n\r\n    // Adds one more reference phrases to the dynamic grammar to send.\r\n    // All added phrases are generic phrases.\r\n    public addPhrase(phrase: string | string[]): void {\r\n        if (!this.privPhrases) {\r\n            this.privPhrases = [];\r\n        }\r\n\r\n        if (phrase instanceof Array) {\r\n            this.privPhrases = this.privPhrases.concat(phrase as string[]);\r\n        } else {\r\n            this.privPhrases.push(phrase as string);\r\n        }\r\n    }\r\n\r\n    // Clears all phrases stored in the current object.\r\n    public clearPhrases(): void {\r\n        this.privPhrases = undefined;\r\n    }\r\n\r\n    // Adds one or more reference grammars to the current grammar.\r\n    public addReferenceGrammar(grammar: string | string[]): void {\r\n        if (!this.privGrammars) {\r\n            this.privGrammars = [];\r\n        }\r\n\r\n        if (grammar instanceof Array) {\r\n            this.privGrammars = this.privGrammars.concat(grammar as string[]);\r\n        } else {\r\n            this.privGrammars.push(grammar as string);\r\n        }\r\n    }\r\n\r\n    // clears all grammars stored on the recognizer.\r\n    public clearGrammars(): void {\r\n        this.privGrammars = undefined;\r\n    }\r\n\r\n    // Generates an object that represents the dynamic grammar used by the Speech Service.\r\n    // This is done by building an object with the correct layout based on the phrases and reference grammars added to this instance\r\n    // of a DynamicGrammarBuilder\r\n    public generateGrammarObject(): IDynamicGrammar {\r\n        if (this.privGrammars === undefined && this.privPhrases === undefined) {\r\n            return undefined;\r\n        }\r\n\r\n        const retObj: IDynamicGrammar = {};\r\n        retObj.ReferenceGrammars = this.privGrammars;\r\n\r\n        if (undefined !== this.privPhrases && 0 !== this.privPhrases.length) {\r\n            const retPhrases: IDynamicGrammarGeneric[] = [];\r\n\r\n            this.privPhrases.forEach((value: string, index: number, array: string[]): void => {\r\n                retPhrases.push({\r\n                    Text: value,\r\n                });\r\n            });\r\n\r\n            retObj.Groups = [{ Type: \"Generic\", Items: retPhrases }];\r\n        }\r\n\r\n        return retObj;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// Interfaces in this file represent the various nodes in the JSON that the speech service accepts\r\n// for dynamic grammars.\r\n\r\n/**\r\n *  Top level grammar node\r\n */\r\nexport interface IDynamicGrammar {\r\n    ReferenceGrammars?: string[];\r\n    Groups?: IDynamicGrammarGroup[];\r\n}\r\n\r\n/**\r\n * Group of Dynamic Grammar items of a common type.\r\n */\r\nexport interface IDynamicGrammarGroup {\r\n    Type: string;\r\n    Name?: string;\r\n    SubstringMatch?: string; // None, LeftRooted, PartialName\r\n    Items: IDynamicGrammarPeople[] | IDynamicGrammarGeneric[];\r\n}\r\n\r\nexport interface IDynamicGrammarPeople {\r\n    Name: string;\r\n    First?: string;\r\n    Middle?: string;\r\n    Last?: string;\r\n    Synonyms?: string[];\r\n    Weight?: number;\r\n}\r\n\r\n/**\r\n * Generic phrase based dynamic grammars\r\n */\r\nexport interface IDynamicGrammarGeneric {\r\n    Text: string;\r\n    Synonyms?: string[];\r\n    Weight?: number;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n// response\r\n\r\nexport interface IActivityPayloadResponse {\r\n    conversationId: string;\r\n    messageDataStreamType: number;\r\n    messagePayload: any;\r\n    version: number;\r\n}\r\n\r\nexport class ActivityPayloadResponse implements IActivityPayloadResponse {\r\n    private privActivityResponse: IActivityPayloadResponse;\r\n\r\n    private constructor(json: string) {\r\n        this.privActivityResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): ActivityPayloadResponse {\r\n        return new ActivityPayloadResponse(json);\r\n    }\r\n\r\n    public get conversationId(): string {\r\n        return this.privActivityResponse.conversationId;\r\n    }\r\n\r\n    public get messageDataStreamType(): number {\r\n        return this.privActivityResponse.messageDataStreamType;\r\n    }\r\n\r\n    public get messagePayload(): any {\r\n        return this.privActivityResponse.messagePayload;\r\n    }\r\n\r\n    public get version(): number {\r\n        return this.privActivityResponse.version;\r\n    }\r\n}\r\n\r\nexport enum MessageDataStreamType {\r\n    None = 0,\r\n    TextToSpeechAudio = 1,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { AudioOutputFormatImpl } from \"../sdk/Audio/AudioOutputFormat\";\r\nimport { AudioOutputStream, PullAudioOutputStreamImpl } from \"../sdk/Audio/AudioOutputStream\";\r\nimport { DialogServiceTurnStateManager } from \"./DialogServiceTurnStateManager\";\r\nimport { ActivityPayloadResponse, MessageDataStreamType } from \"./ServiceMessages/ActivityResponsePayload\";\r\n\r\nexport class DialogServiceTurnState {\r\n    private privRequestId: string;\r\n    private privIsCompleted: boolean;\r\n    private privAudioStream: PullAudioOutputStreamImpl;\r\n    private privTimeoutToken: any;\r\n    private privTurnManager: DialogServiceTurnStateManager;\r\n\r\n    constructor(manager: DialogServiceTurnStateManager, requestId: string) {\r\n        this.privRequestId = requestId;\r\n        this.privIsCompleted = false;\r\n        this.privAudioStream = null;\r\n        this.privTurnManager = manager;\r\n        this.resetTurnEndTimeout();\r\n        // tslint:disable-next-line:no-console\r\n        // console.info(\"DialogServiceTurnState debugturn start:\" + this.privRequestId);\r\n    }\r\n\r\n    public get audioStream(): PullAudioOutputStreamImpl {\r\n        // Called when is needed to stream.\r\n        this.resetTurnEndTimeout();\r\n        return this.privAudioStream;\r\n    }\r\n\r\n    public processActivityPayload(payload: ActivityPayloadResponse, audioFormat?: AudioOutputFormatImpl): PullAudioOutputStreamImpl {\r\n        if (payload.messageDataStreamType === MessageDataStreamType.TextToSpeechAudio) {\r\n            this.privAudioStream = AudioOutputStream.createPullStream() as PullAudioOutputStreamImpl;\r\n            this.privAudioStream.format = (audioFormat !== undefined) ? audioFormat : AudioOutputFormatImpl.getDefaultOutputFormat();\r\n            // tslint:disable-next-line:no-console\r\n            // console.info(\"Audio start debugturn:\" + this.privRequestId);\r\n        }\r\n        return this.privAudioStream;\r\n    }\r\n\r\n    public endAudioStream(): void {\r\n        if (this.privAudioStream !== null && !this.privAudioStream.isClosed) {\r\n            this.privAudioStream.close();\r\n        }\r\n    }\r\n\r\n    public complete(): void {\r\n        if (this.privTimeoutToken !== undefined) {\r\n            clearTimeout(this.privTimeoutToken);\r\n        }\r\n        this.endAudioStream();\r\n    }\r\n\r\n    private resetTurnEndTimeout(): void {\r\n        if (this.privTimeoutToken !== undefined) {\r\n            clearTimeout(this.privTimeoutToken);\r\n        }\r\n        // tslint:disable-next-line:no-console\r\n        // console.info(\"Timeout reset debugturn:\" + this.privRequestId);\r\n\r\n        this.privTimeoutToken = setTimeout((): void => {\r\n            // tslint:disable-next-line:no-console\r\n            // console.info(\"Timeout complete debugturn:\" + this.privRequestId);\r\n\r\n            this.privTurnManager.CompleteTurn(this.privRequestId);\r\n            return;\r\n        }, 2000);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { InvalidOperationError } from \"../common/Error\";\r\nimport { AudioOutputStream, PullAudioOutputStreamImpl } from \"../sdk/Audio/AudioOutputStream\";\r\nimport { DialogServiceTurnState } from \"./DialogServiceTurnState\";\r\nimport { ActivityPayloadResponse } from \"./ServiceMessages/ActivityResponsePayload\";\r\n\r\nexport class DialogServiceTurnStateManager {\r\n    private privTurnMap: Map<string, DialogServiceTurnState>;\r\n\r\n    constructor() {\r\n        this.privTurnMap = new Map<string, DialogServiceTurnState>();\r\n        return;\r\n    }\r\n\r\n    public StartTurn(id: string): DialogServiceTurnState {\r\n        if (this.privTurnMap.has(id)) {\r\n            throw new InvalidOperationError(\"Service error: There is already a turn with id:\" + id);\r\n        }\r\n        const turnState: DialogServiceTurnState = new DialogServiceTurnState(this, id);\r\n        this.privTurnMap.set(id, turnState);\r\n        return this.privTurnMap.get(id);\r\n    }\r\n\r\n    public GetTurn(id: string): DialogServiceTurnState {\r\n        return this.privTurnMap.get(id);\r\n    }\r\n\r\n    public CompleteTurn(id: string): DialogServiceTurnState {\r\n        if (!this.privTurnMap.has(id)) {\r\n            throw new InvalidOperationError(\"Service error: Received turn end for an unknown turn id:\" + id);\r\n        }\r\n        const turnState = this.privTurnMap.get(id);\r\n        turnState.complete();\r\n        this.privTurnMap.delete(id);\r\n        return turnState;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ReplayableAudioNode\r\n} from \"../common.browser/Exports\";\r\nimport { SendingAgentContextMessageEvent } from \"../common/DialogEvents\";\r\nimport {\r\n    BackgroundEvent,\r\n    ConnectionEvent,\r\n    ConnectionMessage,\r\n    createGuid,\r\n    createNoDashGuid,\r\n    Deferred,\r\n    DialogEvent,\r\n    Events,\r\n    EventSource,\r\n    IAudioSource,\r\n    IAudioStreamNode,\r\n    IConnection,\r\n    MessageType,\r\n    ServiceEvent,\r\n} from \"../common/Exports\";\r\nimport { AudioOutputFormatImpl } from \"../sdk/Audio/AudioOutputFormat\";\r\nimport { PullAudioOutputStreamImpl } from \"../sdk/Audio/AudioOutputStream\";\r\nimport { AudioStreamFormatImpl } from \"../sdk/Audio/AudioStreamFormat\";\r\nimport {\r\n    ActivityReceivedEventArgs,\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    DialogServiceConfig,\r\n    DialogServiceConnector,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    RecognitionEventArgs,\r\n    ResultReason,\r\n    SessionEventArgs,\r\n    SpeechRecognitionCanceledEventArgs,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechRecognitionResult,\r\n    TurnStatusReceivedEventArgs,\r\n} from \"../sdk/Exports\";\r\nimport { DialogServiceTurnStateManager } from \"./DialogServiceTurnStateManager\";\r\nimport {\r\n    CancellationErrorCodePropertyName,\r\n    EnumTranslation,\r\n    ISpeechConfigAudioDevice,\r\n    RecognitionStatus,\r\n    ServiceRecognizerBase,\r\n    SimpleSpeechPhrase,\r\n    SpeechDetected,\r\n    SpeechHypothesis,\r\n    SpeechKeyword,\r\n} from \"./Exports\";\r\nimport { IAuthentication } from \"./IAuthentication\";\r\nimport { IConnectionFactory } from \"./IConnectionFactory\";\r\nimport { RecognitionMode, RecognizerConfig } from \"./RecognizerConfig\";\r\nimport { ActivityPayloadResponse } from \"./ServiceMessages/ActivityResponsePayload\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\nexport class DialogServiceAdapter extends ServiceRecognizerBase {\r\n    private privDialogServiceConnector: DialogServiceConnector;\r\n\r\n    private privDialogAudioSource: IAudioSource;\r\n\r\n    private privConnectionLoop: Promise<void>;\r\n    private terminateMessageLoop: boolean;\r\n    private agentConfigSent: boolean;\r\n    private privLastResult: SpeechRecognitionResult;\r\n    private privEvents: EventSource<DialogEvent>;\r\n\r\n    // Turns are of two kinds:\r\n    // 1: SR turns, end when the SR result is returned and then turn end.\r\n    // 2: Service turns where an activity is sent by the service along with the audio.\r\n    private privTurnStateManager: DialogServiceTurnStateManager;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        dialogServiceConnector: DialogServiceConnector) {\r\n\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, dialogServiceConnector);\r\n\r\n        this.privEvents = new EventSource<DialogEvent>();\r\n        this.privDialogServiceConnector = dialogServiceConnector;\r\n        this.receiveMessageOverride = this.receiveDialogMessageOverride;\r\n        this.privTurnStateManager = new DialogServiceTurnStateManager();\r\n        this.recognizeOverride = this.listenOnce;\r\n        this.postConnectImplOverride = this.dialogConnectImpl;\r\n        this.configConnectionOverride = this.configConnection;\r\n        this.disconnectOverride = this.privDisconnect;\r\n        this.privDialogAudioSource = audioSource;\r\n\r\n        this.agentConfigSent = false;\r\n        this.privLastResult = null;\r\n        this.connectionEvents.attach(async (connectionEvent: ConnectionEvent): Promise<void> => {\r\n            if (connectionEvent.name === \"ConnectionClosedEvent\") {\r\n                this.terminateMessageLoop = true;\r\n            }\r\n        });\r\n    }\r\n\r\n    public async sendMessage(message: string): Promise<void> {\r\n        const interactionGuid: string = createGuid();\r\n        const requestId: string = createNoDashGuid();\r\n\r\n        const agentMessage: any = {\r\n            context: {\r\n                interactionId: interactionGuid\r\n            },\r\n            messagePayload: JSON.parse(message),\r\n            version: 0.5\r\n        };\r\n\r\n        const agentMessageJson = JSON.stringify(agentMessage);\r\n        const connection: IConnection = await this.fetchConnection();\r\n        await connection.send(new SpeechConnectionMessage(\r\n            MessageType.Text,\r\n            \"agent\",\r\n            requestId,\r\n            \"application/json\",\r\n            agentMessageJson));\r\n\r\n    }\r\n\r\n    protected async privDisconnect(): Promise<void> {\r\n        await this.cancelRecognition(this.privRequestSession.sessionId,\r\n            this.privRequestSession.requestId,\r\n            CancellationReason.Error,\r\n            CancellationErrorCode.NoError,\r\n            \"Disconnecting\");\r\n\r\n        this.terminateMessageLoop = true;\r\n        this.agentConfigSent = false;\r\n        return;\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(connectionMessage: SpeechConnectionMessage): Promise<boolean> {\r\n\r\n        const resultProps: PropertyCollection = new PropertyCollection();\r\n        if (connectionMessage.messageType === MessageType.Text) {\r\n            resultProps.setProperty(PropertyId.SpeechServiceResponse_JsonResult, connectionMessage.textBody);\r\n        }\r\n\r\n        let result: SpeechRecognitionResult;\r\n        let processed: boolean;\r\n\r\n        switch (connectionMessage.path.toLowerCase()) {\r\n            case \"speech.phrase\":\r\n                const speechPhrase: SimpleSpeechPhrase = SimpleSpeechPhrase.fromJSON(connectionMessage.textBody);\r\n\r\n                this.privRequestSession.onPhraseRecognized(this.privRequestSession.currentTurnAudioOffset + speechPhrase.Offset + speechPhrase.Duration);\r\n\r\n                if (speechPhrase.RecognitionStatus !== RecognitionStatus.TooManyRequests && speechPhrase.RecognitionStatus !== RecognitionStatus.Error) {\r\n                    const args: SpeechRecognitionEventArgs = this.fireEventForResult(speechPhrase, resultProps);\r\n                    this.privLastResult = args.result;\r\n\r\n                    if (!!this.privDialogServiceConnector.recognized) {\r\n                        try {\r\n                            this.privDialogServiceConnector.recognized(this.privDialogServiceConnector, args);\r\n                            /* tslint:disable:no-empty */\r\n                        } catch (error) {\r\n                            // Not going to let errors in the event handler\r\n                            // trip things up.\r\n                        }\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"speech.hypothesis\":\r\n                const hypothesis: SpeechHypothesis = SpeechHypothesis.fromJSON(connectionMessage.textBody);\r\n                const offset: number = hypothesis.Offset + this.privRequestSession.currentTurnAudioOffset;\r\n\r\n                result = new SpeechRecognitionResult(\r\n                    this.privRequestSession.requestId,\r\n                    ResultReason.RecognizingSpeech,\r\n                    hypothesis.Text,\r\n                    hypothesis.Duration,\r\n                    offset,\r\n                    hypothesis.Language,\r\n                    hypothesis.LanguageDetectionConfidence,\r\n                    undefined,\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                this.privRequestSession.onHypothesis(offset);\r\n\r\n                const ev = new SpeechRecognitionEventArgs(result, hypothesis.Duration, this.privRequestSession.sessionId);\r\n\r\n                if (!!this.privDialogServiceConnector.recognizing) {\r\n                    try {\r\n                        this.privDialogServiceConnector.recognizing(this.privDialogServiceConnector, ev);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"speech.keyword\":\r\n                const keyword: SpeechKeyword = SpeechKeyword.fromJSON(connectionMessage.textBody);\r\n\r\n                result = new SpeechRecognitionResult(\r\n                    this.privRequestSession.requestId,\r\n                    keyword.Status === \"Accepted\" ? ResultReason.RecognizedKeyword : ResultReason.NoMatch,\r\n                    keyword.Text,\r\n                    keyword.Duration,\r\n                    keyword.Offset,\r\n                    undefined,\r\n                    undefined,\r\n                    undefined,\r\n                    undefined,\r\n                    connectionMessage.textBody,\r\n                    resultProps);\r\n\r\n                if (keyword.Status !== \"Accepted\") {\r\n                    this.privLastResult = result;\r\n                }\r\n\r\n                const event = new SpeechRecognitionEventArgs(result, result.duration, result.resultId);\r\n\r\n                if (!!this.privDialogServiceConnector.recognized) {\r\n                    try {\r\n                        this.privDialogServiceConnector.recognized(this.privDialogServiceConnector, event);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n            case \"audio\":\r\n                {\r\n                    const audioRequestId = connectionMessage.requestId.toUpperCase();\r\n                    const turn = this.privTurnStateManager.GetTurn(audioRequestId);\r\n                    try {\r\n                        // Empty binary message signals end of stream.\r\n                        if (!connectionMessage.binaryBody) {\r\n                            turn.endAudioStream();\r\n                        } else {\r\n                            turn.audioStream.write(connectionMessage.binaryBody);\r\n                        }\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                processed = true;\r\n                break;\r\n\r\n            case \"response\":\r\n                {\r\n                    this.handleResponseMessage(connectionMessage);\r\n\r\n                }\r\n                processed = true;\r\n                break;\r\n\r\n            default:\r\n                break;\r\n        }\r\n        return processed;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected async cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): Promise<void> {\r\n\r\n        this.terminateMessageLoop = true;\r\n\r\n        if (!!this.privRequestSession.isRecognizing) {\r\n            await this.privRequestSession.onStopRecognizing();\r\n        }\r\n\r\n        if (!!this.privDialogServiceConnector.canceled) {\r\n            const properties: PropertyCollection = new PropertyCollection();\r\n            properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n\r\n            const cancelEvent: SpeechRecognitionCanceledEventArgs = new SpeechRecognitionCanceledEventArgs(\r\n                cancellationReason,\r\n                error,\r\n                errorCode,\r\n                undefined,\r\n                sessionId);\r\n\r\n            try {\r\n                this.privDialogServiceConnector.canceled(this.privDialogServiceConnector, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n\r\n            if (!!this.privSuccessCallback) {\r\n                const result: SpeechRecognitionResult = new SpeechRecognitionResult(\r\n                    undefined, // ResultId\r\n                    ResultReason.Canceled,\r\n                    undefined, // Text\r\n                    undefined, // Duration\r\n                    undefined, // Offset\r\n                    undefined, // Language\r\n                    undefined, // Language Detection Confidence\r\n                    undefined, // Speaker Id\r\n                    error,\r\n                    undefined, // Json\r\n                    properties);\r\n                try {\r\n                    this.privSuccessCallback(result);\r\n                    this.privSuccessCallback = undefined;\r\n                    /* tslint:disable:no-empty */\r\n                } catch { }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected async listenOnce(\r\n        recoMode: RecognitionMode,\r\n        successCallback: (e: SpeechRecognitionResult) => void,\r\n        errorCallback: (e: string) => void\r\n    ): Promise<void> {\r\n        this.privRecognizerConfig.recognitionMode = recoMode;\r\n\r\n        this.privSuccessCallback = successCallback;\r\n        this.privErrorCallback = errorCallback;\r\n\r\n        this.privRequestSession.startNewRecognition();\r\n        this.privRequestSession.listenForServiceTelemetry(this.privDialogAudioSource.events);\r\n\r\n        this.privRecognizerConfig.parameters.setProperty(PropertyId.Speech_SessionId, this.privRequestSession.sessionId);\r\n\r\n        // Start the connection to the service. The promise this will create is stored and will be used by configureConnection().\r\n        const conPromise: Promise<IConnection> = this.connectImpl();\r\n\r\n        const preAudioPromise: Promise<void> = this.sendPreAudioMessages();\r\n\r\n        const node: IAudioStreamNode = await this.privDialogAudioSource.attach(this.privRequestSession.audioNodeId);\r\n        const format: AudioStreamFormatImpl = await this.privDialogAudioSource.format;\r\n        const deviceInfo: ISpeechConfigAudioDevice = await this.privDialogAudioSource.deviceInfo;\r\n\r\n        const audioNode = new ReplayableAudioNode(node, format.avgBytesPerSec);\r\n        await this.privRequestSession.onAudioSourceAttachCompleted(audioNode, false);\r\n\r\n        this.privRecognizerConfig.SpeechServiceConfig.Context.audio = { source: deviceInfo };\r\n\r\n        try {\r\n            await conPromise;\r\n            await preAudioPromise;\r\n        } catch (error) {\r\n            await this.cancelRecognition(this.privRequestSession.sessionId, this.privRequestSession.requestId, CancellationReason.Error, CancellationErrorCode.ConnectionFailure, error);\r\n            return Promise.resolve();\r\n        }\r\n\r\n        const sessionStartEventArgs: SessionEventArgs = new SessionEventArgs(this.privRequestSession.sessionId);\r\n\r\n        if (!!this.privRecognizer.sessionStarted) {\r\n            this.privRecognizer.sessionStarted(this.privRecognizer, sessionStartEventArgs);\r\n        }\r\n\r\n        const audioSendPromise = this.sendAudio(audioNode);\r\n\r\n        // /* tslint:disable:no-empty */\r\n        audioSendPromise.then(() => { /*add? return true;*/ }, async (error: string) => {\r\n            await this.cancelRecognition(this.privRequestSession.sessionId, this.privRequestSession.requestId, CancellationReason.Error, CancellationErrorCode.RuntimeError, error);\r\n        });\r\n    }\r\n\r\n    // Establishes a websocket connection to the end point.\r\n    private dialogConnectImpl(connection: Promise<IConnection>): Promise<IConnection> {\r\n        this.privConnectionLoop = this.startMessageLoop();\r\n        return connection;\r\n    }\r\n\r\n    private receiveDialogMessageOverride(): Promise<void> {\r\n\r\n        // we won't rely on the cascading promises of the connection since we want to continually be available to receive messages\r\n        const communicationCustodian: Deferred<void> = new Deferred<void>();\r\n\r\n        const loop = async (): Promise<void> => {\r\n            try {\r\n                const isDisposed: boolean = this.isDisposed();\r\n                const terminateMessageLoop = (!this.isDisposed() && this.terminateMessageLoop);\r\n                if (isDisposed || terminateMessageLoop) {\r\n                    // We're done.\r\n                    communicationCustodian.resolve(undefined);\r\n                    return;\r\n                }\r\n\r\n                const connection: IConnection = await this.fetchConnection();\r\n                const message: ConnectionMessage = await connection.read();\r\n\r\n                if (!message) {\r\n                    return loop();\r\n                }\r\n\r\n                const connectionMessage = SpeechConnectionMessage.fromConnectionMessage(message);\r\n\r\n                switch (connectionMessage.path.toLowerCase()) {\r\n                    case \"turn.start\":\r\n                        {\r\n                            const turnRequestId = connectionMessage.requestId.toUpperCase();\r\n                            const audioSessionReqId = this.privRequestSession.requestId.toUpperCase();\r\n\r\n                            // turn started by the service\r\n                            if (turnRequestId !== audioSessionReqId) {\r\n                                this.privTurnStateManager.StartTurn(turnRequestId);\r\n                            } else {\r\n                                this.privRequestSession.onServiceTurnStartResponse();\r\n                            }\r\n                        }\r\n                        break;\r\n\r\n                    case \"speech.startdetected\":\r\n                        const speechStartDetected: SpeechDetected = SpeechDetected.fromJSON(connectionMessage.textBody);\r\n\r\n                        const speechStartEventArgs = new RecognitionEventArgs(speechStartDetected.Offset, this.privRequestSession.sessionId);\r\n\r\n                        if (!!this.privRecognizer.speechStartDetected) {\r\n                            this.privRecognizer.speechStartDetected(this.privRecognizer, speechStartEventArgs);\r\n                        }\r\n\r\n                        break;\r\n\r\n                    case \"speech.enddetected\":\r\n\r\n                        let json: string;\r\n\r\n                        if (connectionMessage.textBody.length > 0) {\r\n                            json = connectionMessage.textBody;\r\n                        } else {\r\n                            // If the request was empty, the JSON returned is empty.\r\n                            json = \"{ Offset: 0 }\";\r\n                        }\r\n\r\n                        const speechStopDetected: SpeechDetected = SpeechDetected.fromJSON(json);\r\n\r\n                        this.privRequestSession.onServiceRecognized(speechStopDetected.Offset + this.privRequestSession.currentTurnAudioOffset);\r\n\r\n                        const speechStopEventArgs = new RecognitionEventArgs(speechStopDetected.Offset + this.privRequestSession.currentTurnAudioOffset, this.privRequestSession.sessionId);\r\n\r\n                        if (!!this.privRecognizer.speechEndDetected) {\r\n                            this.privRecognizer.speechEndDetected(this.privRecognizer, speechStopEventArgs);\r\n                        }\r\n                        break;\r\n\r\n                    case \"turn.end\":\r\n                        {\r\n                            const turnEndRequestId = connectionMessage.requestId.toUpperCase();\r\n\r\n                            const audioSessionReqId = this.privRequestSession.requestId.toUpperCase();\r\n\r\n                            // turn started by the service\r\n                            if (turnEndRequestId !== audioSessionReqId) {\r\n                                this.privTurnStateManager.CompleteTurn(turnEndRequestId);\r\n                            } else {\r\n                                // Audio session turn\r\n\r\n                                const sessionStopEventArgs: SessionEventArgs = new SessionEventArgs(this.privRequestSession.sessionId);\r\n                                await this.privRequestSession.onServiceTurnEndResponse(false);\r\n\r\n                                if (!this.privRecognizerConfig.isContinuousRecognition || this.privRequestSession.isSpeechEnded || !this.privRequestSession.isRecognizing) {\r\n                                    if (!!this.privRecognizer.sessionStopped) {\r\n                                        this.privRecognizer.sessionStopped(this.privRecognizer, sessionStopEventArgs);\r\n                                    }\r\n                                }\r\n\r\n                                // report result to promise.\r\n                                if (!!this.privSuccessCallback && this.privLastResult) {\r\n                                    try {\r\n                                        this.privSuccessCallback(this.privLastResult);\r\n                                        this.privLastResult = null;\r\n                                    } catch (e) {\r\n                                        if (!!this.privErrorCallback) {\r\n                                            this.privErrorCallback(e);\r\n                                        }\r\n                                    }\r\n                                    // Only invoke the call back once.\r\n                                    // and if it's successful don't invoke the\r\n                                    // error after that.\r\n                                    this.privSuccessCallback = undefined;\r\n                                    this.privErrorCallback = undefined;\r\n                                }\r\n                            }\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n                        if (!this.processTypeSpecificMessages(connectionMessage)) {\r\n                            if (!!this.serviceEvents) {\r\n                                this.serviceEvents.onEvent(new ServiceEvent(connectionMessage.path.toLowerCase(), connectionMessage.textBody));\r\n                            }\r\n                        }\r\n                }\r\n                const ret: Promise<void> = loop();\r\n\r\n                return ret;\r\n            } catch (error) {\r\n                this.terminateMessageLoop = true;\r\n                communicationCustodian.resolve();\r\n            }\r\n        };\r\n\r\n        loop().catch((reason: string): void => {\r\n            Events.instance.onEvent(new BackgroundEvent(reason));\r\n        });\r\n\r\n        return communicationCustodian.promise;\r\n    }\r\n\r\n    private async startMessageLoop(): Promise<void> {\r\n\r\n        this.terminateMessageLoop = false;\r\n\r\n        try {\r\n            await this.receiveDialogMessageOverride();\r\n        } catch (error) {\r\n            await this.cancelRecognition(this.privRequestSession.sessionId, this.privRequestSession.requestId, CancellationReason.Error, CancellationErrorCode.RuntimeError, error);\r\n        }\r\n\r\n        return Promise.resolve();\r\n    }\r\n\r\n    // Takes an established websocket connection to the endpoint and sends speech configuration information.\r\n    private async configConnection(connection: IConnection): Promise<IConnection> {\r\n        if (this.terminateMessageLoop) {\r\n            this.terminateMessageLoop = false;\r\n            return Promise.reject(`Connection to service terminated.`);\r\n        }\r\n\r\n        await this.sendSpeechServiceConfig(connection, this.privRequestSession, this.privRecognizerConfig.SpeechServiceConfig.serialize());\r\n        await this.sendAgentConfig(connection);\r\n        return connection;\r\n    }\r\n\r\n    private async sendPreAudioMessages(): Promise<void> {\r\n        const connection: IConnection = await this.fetchConnection();\r\n        this.addKeywordContextData();\r\n        await this.sendSpeechContext(connection);\r\n        await this.sendAgentContext(connection);\r\n        await this.sendWaveHeader(connection);\r\n    }\r\n\r\n    private sendAgentConfig = (connection: IConnection): Promise<void> => {\r\n        if (this.agentConfig && !this.agentConfigSent) {\r\n\r\n            if (this.privRecognizerConfig\r\n                .parameters\r\n                .getProperty(PropertyId.Conversation_DialogType) === DialogServiceConfig.DialogTypes.CustomCommands) {\r\n                const config = this.agentConfig.get();\r\n                config.botInfo.commandsCulture = this.privRecognizerConfig.parameters.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage, \"en-us\");\r\n                this.agentConfig.set(config);\r\n            }\r\n            this.onEvent(new SendingAgentContextMessageEvent(this.agentConfig));\r\n\r\n            const agentConfigJson = this.agentConfig.toJsonString();\r\n\r\n            // guard against sending this multiple times on one connection\r\n            this.agentConfigSent = true;\r\n\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"agent.config\",\r\n                this.privRequestSession.requestId,\r\n                \"application/json\",\r\n                agentConfigJson));\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    private sendAgentContext = (connection: IConnection): Promise<void> => {\r\n        const guid: string = createGuid();\r\n\r\n        const speechActivityTemplate = this.privDialogServiceConnector.properties.getProperty(PropertyId.Conversation_Speech_Activity_Template);\r\n\r\n        const agentContext: any = {\r\n            channelData: \"\",\r\n            context: {\r\n                interactionId: guid\r\n            },\r\n            messagePayload: typeof speechActivityTemplate === undefined ? undefined : speechActivityTemplate,\r\n            version: 0.5\r\n        };\r\n\r\n        const agentContextJson = JSON.stringify(agentContext);\r\n\r\n        return connection.send(new SpeechConnectionMessage(\r\n            MessageType.Text,\r\n            \"speech.agent.context\",\r\n            this.privRequestSession.requestId,\r\n            \"application/json\",\r\n            agentContextJson));\r\n    }\r\n\r\n    private fireEventForResult(serviceResult: SimpleSpeechPhrase, properties: PropertyCollection): SpeechRecognitionEventArgs {\r\n        const resultReason: ResultReason = EnumTranslation.implTranslateRecognitionResult(serviceResult.RecognitionStatus);\r\n\r\n        const offset: number = serviceResult.Offset + this.privRequestSession.currentTurnAudioOffset;\r\n\r\n        const result = new SpeechRecognitionResult(\r\n            this.privRequestSession.requestId,\r\n            resultReason,\r\n            serviceResult.DisplayText,\r\n            serviceResult.Duration,\r\n            offset,\r\n            serviceResult.Language,\r\n            serviceResult.LanguageDetectionConfidence,\r\n            undefined,\r\n            undefined,\r\n            JSON.stringify(serviceResult),\r\n            properties);\r\n\r\n        const ev = new SpeechRecognitionEventArgs(result, offset, this.privRequestSession.sessionId);\r\n        return ev;\r\n    }\r\n\r\n    private handleResponseMessage = (responseMessage: SpeechConnectionMessage): void => {\r\n        // \"response\" messages can contain either \"message\" (activity) or \"MessageStatus\" data. Fire the appropriate\r\n        // event according to the message type that's specified.\r\n        const responsePayload = JSON.parse(responseMessage.textBody);\r\n        switch (responsePayload.messageType.toLowerCase()) {\r\n            case \"message\":\r\n                const responseRequestId = responseMessage.requestId.toUpperCase();\r\n                const activityPayload: ActivityPayloadResponse = ActivityPayloadResponse.fromJSON(responseMessage.textBody);\r\n                const turn = this.privTurnStateManager.GetTurn(responseRequestId);\r\n\r\n                // update the conversation Id\r\n                if (activityPayload.conversationId) {\r\n                    const updateAgentConfig = this.agentConfig.get();\r\n                    updateAgentConfig.botInfo.conversationId = activityPayload.conversationId;\r\n                    this.agentConfig.set(updateAgentConfig);\r\n                }\r\n\r\n                const pullAudioOutputStream: PullAudioOutputStreamImpl = turn.processActivityPayload(\r\n                    activityPayload,\r\n                    AudioOutputFormatImpl.fromSpeechSynthesisOutputFormatString(this.privDialogServiceConnector.properties.getProperty(PropertyId.SpeechServiceConnection_SynthOutputFormat, undefined)));\r\n                const activity = new ActivityReceivedEventArgs(activityPayload.messagePayload, pullAudioOutputStream);\r\n                if (!!this.privDialogServiceConnector.activityReceived) {\r\n                    try {\r\n                        this.privDialogServiceConnector.activityReceived(this.privDialogServiceConnector, activity);\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case \"messagestatus\":\r\n                if (!!this.privDialogServiceConnector.turnStatusReceived) {\r\n                    try {\r\n                        this.privDialogServiceConnector.turnStatusReceived(\r\n                            this.privDialogServiceConnector,\r\n                            new TurnStatusReceivedEventArgs(responseMessage.textBody));\r\n                        /* tslint:disable:no-empty */\r\n                    } catch (error) {\r\n                        // Not going to let errors in the event handler\r\n                        // trip things up.\r\n                    }\r\n                }\r\n                break;\r\n\r\n            default:\r\n                Events.instance.onEvent(\r\n                    new BackgroundEvent(`Unexpected response of type ${responsePayload.messageType}. Ignoring.`));\r\n                break;\r\n        }\r\n    }\r\n\r\n    private onEvent(event: DialogEvent): void {\r\n        this.privEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private addKeywordContextData(): void {\r\n        const keywordPropertyValue: string = this.privRecognizerConfig.parameters.getProperty(\"SPEECH-KeywordsToDetect\");\r\n        if (keywordPropertyValue === undefined) {\r\n            return;\r\n        }\r\n\r\n        const keywordOffsetPropertyValue: string = this.privRecognizerConfig.parameters\r\n            .getProperty(\"SPEECH-KeywordsToDetect-Offsets\");\r\n        const keywordDurationPropertyValue: string = this.privRecognizerConfig.parameters\r\n            .getProperty(\"SPEECH-KeywordsToDetect-Durations\");\r\n\r\n        const keywords = keywordPropertyValue.split(\";\");\r\n        const keywordOffsets = keywordOffsetPropertyValue === undefined ? [] : keywordOffsetPropertyValue.split(\";\");\r\n        const keywordDurations = keywordDurationPropertyValue === undefined ? [] : keywordDurationPropertyValue.split(\";\");\r\n\r\n        const keywordDefinitionArray = [];\r\n        for (let i = 0; i < keywords.length; i++) {\r\n            const definition: { [section: string]: any } = {};\r\n            definition.text = keywords[i];\r\n            if (i < keywordOffsets.length) {\r\n                definition.offset = Number(keywordOffsets[i]);\r\n            }\r\n            if (i < keywordDurations.length) {\r\n                definition.duration = Number(keywordDurations[i]);\r\n            }\r\n            keywordDefinitionArray.push(definition);\r\n        }\r\n\r\n        this.speechContext.setSection(\"invocationSource\", \"VoiceActivationWithKeyword\");\r\n        this.speechContext.setSection(\"keywordDetection\", [{\r\n            clientDetectedKeywords: keywordDefinitionArray,\r\n            onReject: { action: \"EndOfTurn\" },\r\n            type: \"startTrigger\"\r\n        }]);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Represents the JSON used in the agent.config message sent to the speech service.\r\n */\r\nexport class AgentConfig {\r\n    private iPrivConfig: IAgentConfig;\r\n\r\n    public toJsonString(): string {\r\n        return JSON.stringify(this.iPrivConfig);\r\n    }\r\n\r\n    public get(): IAgentConfig {\r\n        return this.iPrivConfig;\r\n    }\r\n\r\n    /**\r\n     * Setter for the agent.config object.\r\n     * @param value a JSON serializable object.\r\n     */\r\n    public set(value: IAgentConfig): void {\r\n        this.iPrivConfig = value;\r\n    }\r\n}\r\n\r\nexport interface IAgentConfig {\r\n    botInfo: {\r\n        commType: string,\r\n        connectionId: string,\r\n        conversationId: string,\r\n        fromId: string\r\n        commandsCulture: string,\r\n        ttsAudioFormat: string\r\n    };\r\n    version: number;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IErrorMessages } from \"../common/Exports\";\r\n/**\r\n * HTTP request helper\r\n */\r\nexport interface IRequestOptions {\r\n    headers?: {[key: string]: string};\r\n    ignoreCache?: boolean;\r\n    timeout?: number;\r\n}\r\n\r\nexport interface IRestParams {\r\n    apiVersion: string;\r\n    authorization: string;\r\n    clientAppId: string;\r\n    contentTypeKey: string;\r\n    correlationId: string;\r\n    languageCode: string;\r\n    nickname: string;\r\n    profanity: string;\r\n    requestId: string;\r\n    roomId: string;\r\n    sessionToken: string;\r\n    subscriptionKey: string;\r\n    subscriptionRegion: string;\r\n    token: string;\r\n}\r\n\r\nexport class RestConfigBase {\r\n\r\n    public static get requestOptions(): IRequestOptions {\r\n        return RestConfigBase.privDefaultRequestOptions;\r\n    }\r\n\r\n    public static get configParams(): IRestParams {\r\n        return RestConfigBase.privDefaultParams;\r\n    }\r\n\r\n    public static get restErrors(): IErrorMessages {\r\n        return RestConfigBase.privRestErrors;\r\n    }\r\n\r\n    private static readonly privDefaultRequestOptions: IRequestOptions = {\r\n        headers: {\r\n            Accept: \"application/json\",\r\n        },\r\n        ignoreCache: false,\r\n        timeout: 10000,\r\n    };\r\n\r\n    private static readonly privRestErrors: IErrorMessages = {\r\n        authInvalidSubscriptionKey: \"You must specify either an authentication token to use, or a Cognitive Speech subscription key.\",\r\n        authInvalidSubscriptionRegion: \"You must specify the Cognitive Speech region to use.\",\r\n        invalidArgs: \"Required input not found: {arg}.\",\r\n        invalidCreateJoinConversationResponse: \"Creating/Joining conversation failed with HTTP {status}.\",\r\n        invalidParticipantRequest: \"The requested participant was not found.\",\r\n        permissionDeniedConnect: \"Required credentials not found.\",\r\n        permissionDeniedConversation: \"Invalid operation: only the host can {command} the conversation.\",\r\n        permissionDeniedParticipant: \"Invalid operation: only the host can {command} a participant.\",\r\n        permissionDeniedSend: \"Invalid operation: the conversation is not in a connected state.\",\r\n        permissionDeniedStart: \"Invalid operation: there is already an active conversation.\",\r\n    };\r\n\r\n    private static readonly privDefaultParams: IRestParams = {\r\n        apiVersion: \"api-version\",\r\n        authorization: \"Authorization\",\r\n        clientAppId: \"X-ClientAppId\",\r\n        contentTypeKey: \"Content-Type\",\r\n        correlationId: \"X-CorrelationId\",\r\n        languageCode: \"language\",\r\n        nickname: \"nickname\",\r\n        profanity: \"profanity\",\r\n        requestId: \"X-RequestId\",\r\n        roomId: \"roomid\",\r\n        sessionToken: \"token\",\r\n        subscriptionKey: \"Ocp-Apim-Subscription-Key\",\r\n        subscriptionRegion: \"Ocp-Apim-Subscription-Region\",\r\n        token: \"X-CapitoToken\",\r\n    };\r\n\r\n}\r\n","\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    RestConfigBase\r\n} from \"../../common.browser/RestConfigBase\";\r\n\r\nexport class ConversationConnectionConfig extends RestConfigBase {\r\n\r\n    private static readonly privHost: string = \"dev.microsofttranslator.com\";\r\n    private static readonly privRestPath: string = \"/capito/room\";\r\n    private static readonly privApiVersion: string = \"2.0\";\r\n    private static readonly privDefaultLanguageCode: string = \"en-US\";\r\n    private static readonly privClientAppId: string = \"FC539C22-1767-4F1F-84BC-B4D811114F15\";\r\n    private static readonly privWebSocketPath: string = \"/capito/translate\";\r\n    private static readonly privSpeechHost: string = \"{region}.s2s.speech.microsoft.com\";\r\n    private static readonly privSpeechPath: string = \"/speech/translation/cognitiveservices/v1\";\r\n    private static readonly privTranscriptionEventKeys: string[] = [\"iCalUid\", \"callId\", \"organizer\", \"FLAC\", \"MTUri\", \"DifferenciateGuestSpeakers\", \"audiorecording\", \"Threadid\", \"OrganizerMri\", \"OrganizerTenantId\", \"UserToken\"];\r\n\r\n    public static get host(): string {\r\n        return ConversationConnectionConfig.privHost;\r\n    }\r\n\r\n    public static get apiVersion(): string {\r\n        return ConversationConnectionConfig.privApiVersion;\r\n    }\r\n\r\n    public static get clientAppId(): string {\r\n        return ConversationConnectionConfig.privClientAppId;\r\n    }\r\n\r\n    public static get defaultLanguageCode(): string {\r\n        return ConversationConnectionConfig.privDefaultLanguageCode;\r\n    }\r\n\r\n    public static get restPath(): string {\r\n        return ConversationConnectionConfig.privRestPath;\r\n    }\r\n\r\n    public static get webSocketPath(): string {\r\n        return ConversationConnectionConfig.privWebSocketPath;\r\n    }\r\n\r\n    public static get speechHost(): string {\r\n        return ConversationConnectionConfig.privSpeechHost;\r\n    }\r\n\r\n    public static get speechPath(): string {\r\n        return ConversationConnectionConfig.privSpeechPath;\r\n    }\r\n\r\n    public static get transcriptionEventKeys(): string[] {\r\n        return ConversationConnectionConfig.privTranscriptionEventKeys;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { IResponse } from \"./ConversationTranslatorInterfaces\";\r\n\r\nimport { IRequestOptions, RestConfigBase } from \"../../common.browser/RestConfigBase\";\r\nimport { Callback } from \"../../sdk/Transcription/IConversation\";\r\n\r\n// Node.JS specific xmlhttprequest / browser support.\r\nimport * as XHR from \"xmlhttprequest-ts\";\r\n\r\n/**\r\n * Config settings for Conversation Translator\r\n */\r\n/**\r\n * Helpers for sending / receiving HTTPS requests / responses.\r\n * @param params\r\n */\r\nfunction queryParams(params: any = {}): any {\r\n    return Object.keys(params)\r\n        .map((k: any) => encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]))\r\n        .join(\"&\");\r\n}\r\n\r\nfunction withQuery(url: string, params: any = {}): any {\r\n    const queryString = queryParams(params);\r\n    return queryString ? url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + queryString : url;\r\n}\r\n\r\nfunction parseXHRResult(xhr: XMLHttpRequest | XHR.XMLHttpRequest): IResponse {\r\n    return {\r\n        data: xhr.responseText,\r\n        headers: xhr.getAllResponseHeaders(),\r\n        json: <T>() => JSON.parse(xhr.responseText) as T,\r\n        ok: xhr.status >= 200 && xhr.status < 300,\r\n        status: xhr.status,\r\n        statusText: xhr.statusText,\r\n    };\r\n}\r\n\r\nfunction errorResponse(xhr: XMLHttpRequest | XHR.XMLHttpRequest, message: string | null = null): IResponse {\r\n    return {\r\n        data: message || xhr.statusText,\r\n        headers: xhr.getAllResponseHeaders(),\r\n        json: <T>() => JSON.parse(message || (\"\\\"\" + xhr.statusText + \"\\\"\")) as T,\r\n        ok: false,\r\n        status: xhr.status,\r\n        statusText: xhr.statusText,\r\n    };\r\n}\r\n\r\nexport function extractHeaderValue(headerKey: string, headers: string): string {\r\n\r\n    let headerValue: string = \"\";\r\n\r\n    try {\r\n        const arr = headers.trim().split(/[\\r\\n]+/);\r\n        const headerMap: any = {};\r\n        arr.forEach((line: any) => {\r\n            const parts = line.split(\": \");\r\n            const header = parts.shift().toLowerCase();\r\n            const value = parts.join(\": \");\r\n            headerMap[header] = value;\r\n        });\r\n\r\n        headerValue = headerMap[headerKey.toLowerCase()];\r\n    } catch (e) {\r\n        // ignore the error\r\n    }\r\n\r\n    return headerValue;\r\n}\r\n\r\nexport function request(\r\n    method: \"get\" | \"post\" | \"delete\",\r\n    url: string,\r\n    queryParams: any = {},\r\n    body: any = null,\r\n    options: IRequestOptions = {},\r\n    callback: any): any {\r\n\r\n    const defaultRequestOptions = RestConfigBase.requestOptions;\r\n\r\n    const ignoreCache = options.ignoreCache || defaultRequestOptions.ignoreCache;\r\n    const headers = options.headers || defaultRequestOptions.headers;\r\n    const timeout = options.timeout || defaultRequestOptions.timeout;\r\n\r\n    let xhr: XMLHttpRequest | XHR.XMLHttpRequest;\r\n    if (typeof window === \"undefined\") { // Node\r\n        xhr = new XHR.XMLHttpRequest();\r\n\r\n    } else {\r\n        xhr = new XMLHttpRequest();\r\n    }\r\n    xhr.open(method, withQuery(url, queryParams), true);\r\n\r\n    if (headers) {\r\n        Object.keys(headers).forEach((key: any) => xhr.setRequestHeader(key, headers[key]));\r\n    }\r\n\r\n    if (ignoreCache) {\r\n        xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\r\n    }\r\n\r\n    xhr.timeout = timeout;\r\n\r\n    xhr.onload = (evt: any) => {\r\n        callback(parseXHRResult(xhr));\r\n    };\r\n\r\n    xhr.onerror = (evt: any) => {\r\n        callback(errorResponse(xhr, \"Failed to make request.\"));\r\n    };\r\n\r\n    xhr.ontimeout = (evt: any) => {\r\n        callback(errorResponse(xhr, \"Request took longer than expected.\"));\r\n    };\r\n\r\n    if (method === \"post\" && body) {\r\n        xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n        xhr.send(JSON.stringify(body));\r\n    } else {\r\n        xhr.send();\r\n    }\r\n}\r\n\r\nexport function PromiseToEmptyCallback<T>(promise: Promise<T>, cb?: Callback, err?: Callback): void {\r\n    if (!!promise) {\r\n        promise.then((result: T): void => {\r\n            try {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            } catch (e) {\r\n                if (!!err) {\r\n                    err(`'Unhandled error on promise callback: ${e}'`);\r\n                }\r\n            }\r\n        }, (reason: any) => {\r\n            try {\r\n                if (!!err) {\r\n                    err(reason);\r\n                }\r\n                /* tslint:disable:no-empty */\r\n            } catch (error) {\r\n            }\r\n        });\r\n    } else {\r\n        if (!!err) {\r\n            err(\"Null promise\");\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IRequestOptions,\r\n    IRestParams,\r\n} from \"../../common.browser/RestConfigBase\";\r\nimport { IErrorMessages, IStringDictionary } from \"../../common/Exports\";\r\nimport { Contracts } from \"../../sdk/Contracts\";\r\nimport { PropertyCollection, PropertyId } from \"../../sdk/Exports\";\r\nimport { ConversationConnectionConfig } from \"./ConversationConnectionConfig\";\r\nimport { IConversationResponseError, IInternalConversation, IResponse } from \"./ConversationTranslatorInterfaces\";\r\nimport { extractHeaderValue, request } from \"./ConversationUtils\";\r\n\r\nexport class ConversationManager {\r\n\r\n    private privRequestParams: IRestParams;\r\n    private privErrors: IErrorMessages;\r\n    private privHost: string;\r\n    private privApiVersion: string;\r\n    private privRestPath: string;\r\n\r\n    public constructor() {\r\n        //\r\n        this.privRequestParams = ConversationConnectionConfig.configParams;\r\n        this.privErrors = ConversationConnectionConfig.restErrors;\r\n        this.privHost = ConversationConnectionConfig.host;\r\n        this.privApiVersion = ConversationConnectionConfig.apiVersion;\r\n        this.privRestPath = ConversationConnectionConfig.restPath;\r\n    }\r\n\r\n    /**\r\n     * Make a POST request to the Conversation Manager service endpoint to create or join a conversation.\r\n     * @param args\r\n     * @param conversationCode\r\n     * @param callback\r\n     * @param errorCallback\r\n     */\r\n    public createOrJoin(args: PropertyCollection, conversationCode: string, cb?: any, err?: any): void {\r\n\r\n        try {\r\n\r\n            Contracts.throwIfNullOrUndefined(args, \"args\");\r\n\r\n            const languageCode: string = args.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage, ConversationConnectionConfig.defaultLanguageCode);\r\n            const nickname: string = args.getProperty(PropertyId.ConversationTranslator_Name);\r\n            const endpointHost: string = args.getProperty(PropertyId.ConversationTranslator_Host, this.privHost);\r\n            const correlationId: string = args.getProperty(PropertyId.ConversationTranslator_CorrelationId);\r\n            const subscriptionKey: string = args.getProperty(PropertyId.SpeechServiceConnection_Key);\r\n            const subscriptionRegion: string = args.getProperty(PropertyId.SpeechServiceConnection_Region);\r\n            const authToken: string = args.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n\r\n            Contracts.throwIfNullOrWhitespace(languageCode, \"languageCode\");\r\n            Contracts.throwIfNullOrWhitespace(nickname, \"nickname\");\r\n            Contracts.throwIfNullOrWhitespace(endpointHost, \"endpointHost\");\r\n\r\n            const queryParams: IStringDictionary<string> = {};\r\n            queryParams[this.privRequestParams.apiVersion] = this.privApiVersion;\r\n            queryParams[this.privRequestParams.languageCode] = languageCode;\r\n            queryParams[this.privRequestParams.nickname] = nickname;\r\n\r\n            const headers: IStringDictionary<string> = {};\r\n            if (correlationId) {\r\n                headers[this.privRequestParams.correlationId] = correlationId;\r\n            }\r\n            headers[this.privRequestParams.clientAppId] = ConversationConnectionConfig.clientAppId;\r\n\r\n            if (conversationCode !== undefined) {\r\n                queryParams[this.privRequestParams.roomId] = conversationCode;\r\n            } else {\r\n                Contracts.throwIfNullOrUndefined(subscriptionRegion, this.privErrors.authInvalidSubscriptionRegion);\r\n                headers[this.privRequestParams.subscriptionRegion] = subscriptionRegion;\r\n                if (subscriptionKey) {\r\n                    headers[this.privRequestParams.subscriptionKey] = subscriptionKey;\r\n                } else if (authToken) {\r\n                    headers[this.privRequestParams.authorization] = `Bearer ${authToken}`;\r\n                } else {\r\n                    Contracts.throwIfNullOrUndefined(subscriptionKey, this.privErrors.authInvalidSubscriptionKey);\r\n                }\r\n            }\r\n\r\n            const config: IRequestOptions = {};\r\n            config.headers = headers;\r\n\r\n            const endpoint: string = `https://${endpointHost}${this.privRestPath}`;\r\n\r\n            // TODO: support a proxy and certificate validation\r\n            request(\"post\", endpoint, queryParams, null, config, (response: IResponse) => {\r\n\r\n                const requestId: string = extractHeaderValue(this.privRequestParams.requestId, response.headers);\r\n\r\n                if (!response.ok) {\r\n                    if (!!err) {\r\n                        // get the error\r\n                        let errorMessage: string = this.privErrors.invalidCreateJoinConversationResponse.replace(\"{status}\", response.status.toString());\r\n                        let errMessageRaw: IConversationResponseError;\r\n                        try {\r\n                            errMessageRaw = JSON.parse(response.data) as IConversationResponseError;\r\n                            errorMessage += ` [${errMessageRaw.error.code}: ${errMessageRaw.error.message}]`;\r\n                        } catch (e) {\r\n                            errorMessage += ` [${response.data}]`;\r\n                        }\r\n                        if (requestId) {\r\n                            errorMessage += ` ${requestId}`;\r\n                        }\r\n\r\n                        err(errorMessage);\r\n                    }\r\n                    return;\r\n                }\r\n                const conversation: IInternalConversation = JSON.parse(response.data) as IInternalConversation;\r\n                if (conversation) {\r\n                    conversation.requestId = requestId;\r\n                }\r\n                if (!!cb) {\r\n                    try {\r\n                        cb(conversation);\r\n                    } catch (e) {\r\n                        if (!!err) {\r\n                            err(e);\r\n                        }\r\n                    }\r\n                    cb = undefined;\r\n                }\r\n\r\n            });\r\n\r\n        } catch (error) {\r\n            if (!!err) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n\r\n                } else {\r\n                    err(error);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Make a DELETE request to the Conversation Manager service endpoint to leave the conversation.\r\n     * @param args\r\n     * @param sessionToken\r\n     * @param callback\r\n     */\r\n    public leave(args: PropertyCollection, sessionToken: string): Promise<void> {\r\n        return new Promise<void>((resolve: () => void, reject: (reason: string) => void): void => {\r\n            try {\r\n\r\n                Contracts.throwIfNullOrUndefined(args, this.privErrors.invalidArgs.replace(\"{arg}\", \"config\"));\r\n                Contracts.throwIfNullOrWhitespace(sessionToken, this.privErrors.invalidArgs.replace(\"{arg}\", \"token\"));\r\n\r\n                const endpointHost: string = args.getProperty(PropertyId.ConversationTranslator_Host, this.privHost);\r\n                const correlationId: string = args.getProperty(PropertyId.ConversationTranslator_CorrelationId);\r\n\r\n                const queryParams: IStringDictionary<string> = {};\r\n                queryParams[this.privRequestParams.apiVersion] = this.privApiVersion;\r\n                queryParams[this.privRequestParams.sessionToken] = sessionToken;\r\n\r\n                const headers: IStringDictionary<string> = {};\r\n                if (correlationId) {\r\n                    headers[this.privRequestParams.correlationId] = correlationId;\r\n                }\r\n\r\n                const config: IRequestOptions = {};\r\n                config.headers = headers;\r\n\r\n                const endpoint: string = `https://${endpointHost}${this.privRestPath}`;\r\n\r\n                // TODO: support a proxy and certificate validation\r\n                request(\"delete\", endpoint, queryParams, null, config, (response: IResponse) => {\r\n\r\n                    if (!response.ok) {\r\n                        // ignore errors on delete\r\n                    }\r\n\r\n                    resolve();\r\n                });\r\n\r\n            } catch (error) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    reject(typedError.name + \": \" + typedError.message);\r\n\r\n                } else {\r\n                    reject(error);\r\n                }\r\n            }\r\n        });\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ConnectionMessage, IStringDictionary, MessageType } from \"../../common/Exports\";\r\n\r\nexport class ConversationConnectionMessage extends ConnectionMessage {\r\n    private privConversationMessageType: string;\r\n\r\n    public constructor(\r\n        messageType: MessageType,\r\n        body: any,\r\n        headers?: IStringDictionary<string>,\r\n        id?: string) {\r\n            super(messageType, body, headers, id);\r\n            const json = JSON.parse(this.textBody);\r\n            if (json.type !== undefined) {\r\n                this.privConversationMessageType = json.type;\r\n            }\r\n    }\r\n\r\n    public get conversationMessageType(): string {\r\n        return this.privConversationMessageType;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ConnectionMessage,\r\n    Deferred,\r\n    IStringDictionary,\r\n    IWebsocketMessageFormatter,\r\n    MessageType,\r\n    RawWebsocketMessage,\r\n} from \"../../common/Exports\";\r\nimport { ConversationConnectionMessage } from \"./ConversationConnectionMessage\";\r\n\r\n/**\r\n * Based off WebsocketMessageFormatter. The messages for Conversation Translator have some variations from the Speech messages.\r\n */\r\nexport class ConversationWebsocketMessageFormatter implements IWebsocketMessageFormatter {\r\n\r\n    /**\r\n     * Format incoming messages: text (speech partial/final, IM) or binary (tts)\r\n     */\r\n    public toConnectionMessage = (message: RawWebsocketMessage): Promise<ConversationConnectionMessage> => {\r\n        const deferral = new Deferred<ConversationConnectionMessage>();\r\n\r\n        try {\r\n            if (message.messageType === MessageType.Text) {\r\n                const incomingMessage: ConversationConnectionMessage = new ConversationConnectionMessage(message.messageType, message.textContent, {}, message.id);\r\n                deferral.resolve(incomingMessage);\r\n            } else if (message.messageType === MessageType.Binary) {\r\n                deferral.resolve(new ConversationConnectionMessage(message.messageType, message.binaryContent, undefined, message.id));\r\n            }\r\n        } catch (e) {\r\n            deferral.reject(`Error formatting the message. Error: ${e}`);\r\n        }\r\n\r\n        return deferral.promise;\r\n    }\r\n\r\n    /**\r\n     * Format outgoing messages: text (commands or IM)\r\n     */\r\n    public fromConnectionMessage = (message: ConnectionMessage): Promise<RawWebsocketMessage> => {\r\n\r\n        const deferral = new Deferred<RawWebsocketMessage>();\r\n\r\n        try {\r\n            if (message.messageType === MessageType.Text) {\r\n                const payload = `${message.textBody ? message.textBody : \"\"}`;\r\n                deferral.resolve(new RawWebsocketMessage(MessageType.Text, payload, message.id));\r\n            }\r\n        } catch (e) {\r\n            deferral.reject(`Error formatting the message. ${e}`);\r\n        }\r\n\r\n        return deferral.promise;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { ProxyInfo, WebsocketConnection } from \"../../common.browser/Exports\";\r\nimport { createGuid, IConnection, IStringDictionary } from \"../../common/Exports\";\r\nimport { Contracts } from \"../../sdk/Contracts\";\r\nimport { PropertyId } from \"../../sdk/Exports\";\r\nimport { ConnectionFactoryBase } from \"../ConnectionFactoryBase\";\r\nimport { AuthInfo, RecognizerConfig } from \"../Exports\";\r\nimport { ConversationConnectionConfig } from \"./ConversationConnectionConfig\";\r\nimport { ConversationWebsocketMessageFormatter } from \"./ConversationWebsocketMessageFormatter\";\r\n\r\n/**\r\n * Create a connection to the Conversation Translator websocket for sending instant messages and commands, and for receiving translated messages.\r\n * The conversation must already have been started or joined.\r\n */\r\nexport class ConversationConnectionFactory extends ConnectionFactoryBase  {\r\n\r\n    public create(config: RecognizerConfig, authInfo: AuthInfo, connectionId?: string): IConnection {\r\n\r\n        const endpointHost: string = config.parameters.getProperty(PropertyId.ConversationTranslator_Host, ConversationConnectionConfig.host);\r\n        const correlationId: string = config.parameters.getProperty(PropertyId.ConversationTranslator_CorrelationId, createGuid());\r\n\r\n        const endpoint: string = `wss://${endpointHost}${ConversationConnectionConfig.webSocketPath}`;\r\n        const token: string = config.parameters.getProperty(PropertyId.ConversationTranslator_Token, undefined);\r\n        Contracts.throwIfNullOrUndefined(token, \"token\");\r\n\r\n        const queryParams: IStringDictionary<string> = {};\r\n        queryParams[ConversationConnectionConfig.configParams.apiVersion] = ConversationConnectionConfig.apiVersion;\r\n        queryParams[ConversationConnectionConfig.configParams.token] = token;\r\n        queryParams[ConversationConnectionConfig.configParams.correlationId] = correlationId;\r\n        const enableCompression: boolean = config.parameters.getProperty(\"SPEECH-EnableWebsocketCompression\", \"false\") === \"true\";\r\n        return new WebsocketConnection(endpoint, queryParams, {}, new ConversationWebsocketMessageFormatter(), ProxyInfo.fromRecognizerConfig(config), enableCompression, connectionId);\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    createNoDashGuid,\r\n    Deferred,\r\n    IDetachable,\r\n} from \"../../common/Exports\";\r\n\r\n/**\r\n * Placeholder class for the Conversation Request Session. Based off RequestSession.\r\n * TODO: define what telemetry is required.\r\n */\r\nexport class ConversationRequestSession {\r\n    private privIsDisposed: boolean = false;\r\n    private privDetachables: IDetachable[] = new Array<IDetachable>();\r\n    private privRequestId: string;\r\n    private privRequestCompletionDeferral: Deferred<void>;\r\n    private privSessionId: string;\r\n\r\n    constructor(sessionId: string) {\r\n        this.privSessionId = sessionId;\r\n        this.privRequestId = createNoDashGuid();\r\n        this.privRequestCompletionDeferral = new Deferred<void>();\r\n    }\r\n\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n\r\n    public get completionPromise(): Promise<void> {\r\n        return this.privRequestCompletionDeferral.promise;\r\n    }\r\n\r\n    public onPreConnectionStart = (authFetchEventId: string, connectionId: string): void => {\r\n        this.privSessionId = connectionId;\r\n    }\r\n\r\n    public onAuthCompleted = (isError: boolean, error?: string): void => {\r\n        if (isError) {\r\n            this.onComplete();\r\n        }\r\n    }\r\n\r\n    public onConnectionEstablishCompleted = (statusCode: number, reason?: string): void => {\r\n        if (statusCode === 200) {\r\n            return;\r\n        } else if (statusCode === 403) {\r\n            this.onComplete();\r\n        }\r\n    }\r\n\r\n    public onServiceTurnEndResponse = (continuousRecognition: boolean): void => {\r\n        if (!continuousRecognition) {\r\n            this.onComplete();\r\n        } else {\r\n            this.privRequestId = createNoDashGuid();\r\n        }\r\n    }\r\n\r\n    public async dispose(error?: string): Promise<void> {\r\n        if (!this.privIsDisposed) {\r\n            // we should have completed by now. If we did not its an unknown error.\r\n            this.privIsDisposed = true;\r\n            for (const detachable of this.privDetachables) {\r\n                await detachable.detach();\r\n            }\r\n        }\r\n    }\r\n\r\n    private onComplete = (): void => {\r\n        //\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\nimport { SessionEventArgs } from \"../../sdk/Exports\";\r\nimport { IInternalParticipant } from \"./ConversationTranslatorInterfaces\";\r\n\r\nexport class MuteAllEventArgs extends SessionEventArgs {\r\n    private privIsMuted: boolean;\r\n\r\n    public constructor(isMuted: boolean, sessionId?: string) {\r\n        super(sessionId);\r\n\r\n        this.privIsMuted = isMuted;\r\n    }\r\n\r\n    public get isMuted(): boolean {\r\n        return this.privIsMuted;\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class LockRoomEventArgs extends SessionEventArgs {\r\n    private privIsLocked: boolean;\r\n\r\n    public constructor(isLocked: boolean, sessionId?: string) {\r\n        super(sessionId);\r\n\r\n        this.privIsLocked = isLocked;\r\n    }\r\n\r\n    public get isMuted(): boolean {\r\n        return this.privIsLocked;\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class ParticipantEventArgs extends SessionEventArgs {\r\n    private privParticipant: IInternalParticipant;\r\n\r\n    public constructor(participant: IInternalParticipant, sessionId?: string) {\r\n        super(sessionId);\r\n        this.privParticipant = participant;\r\n    }\r\n\r\n    public get participant(): IInternalParticipant {\r\n        return this.privParticipant;\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class ParticipantAttributeEventArgs extends SessionEventArgs {\r\n    private privValue: boolean | number | string | string[];\r\n    private privKey: string;\r\n    private privParticipantId: string;\r\n\r\n    public constructor(participantId: string, key: string, value: boolean | number | string |  string[], sessionId?: string) {\r\n        super(sessionId);\r\n\r\n        this.privKey = key;\r\n        this.privValue = value;\r\n        this.privParticipantId = participantId;\r\n    }\r\n\r\n    public get value(): boolean | number | string |  string[] {\r\n        return this.privValue;\r\n    }\r\n\r\n    public get key(): string {\r\n        return this.privKey;\r\n    }\r\n    public get id(): string {\r\n        return this.privParticipantId;\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class ParticipantsListEventArgs extends SessionEventArgs {\r\n\r\n    private privRoomId: string;\r\n    private privSessionToken: string;\r\n    private privTranslateTo: string[];\r\n    private privProfanityFilter: string;\r\n    private privRoomProfanityFilter: string;\r\n    private privIsRoomLocked: boolean;\r\n    private privIsMuteAll: boolean;\r\n    private privParticipants: IInternalParticipant[];\r\n\r\n    public constructor(conversationId: string, token: string, translateTo: string[], profanityFilter: string,\r\n                       roomProfanityFilter: string, isRoomLocked: boolean, isMuteAll: boolean, participants: IInternalParticipant[], sessionId?: string) {\r\n        super(sessionId);\r\n        this.privRoomId = conversationId;\r\n        this.privSessionToken = token;\r\n        this.privTranslateTo = translateTo;\r\n        this.privProfanityFilter = profanityFilter;\r\n        this.privRoomProfanityFilter = roomProfanityFilter;\r\n        this.privIsRoomLocked = isRoomLocked;\r\n        this.privIsRoomLocked = isMuteAll;\r\n        this.privParticipants = participants;\r\n    }\r\n    public get sessionToken(): string {\r\n        return this.privSessionToken;\r\n    }\r\n\r\n    public get conversationId(): string {\r\n        return this.privRoomId;\r\n    }\r\n\r\n    public get translateTo(): string[] {\r\n        return this.privTranslateTo;\r\n    }\r\n\r\n    public get profanityFilter(): string {\r\n        return this.privProfanityFilter;\r\n    }\r\n\r\n    public get roomProfanityFilter(): string {\r\n        return this.privRoomProfanityFilter;\r\n    }\r\n\r\n    public get isRoomLocked(): boolean {\r\n        return this.privIsRoomLocked;\r\n    }\r\n\r\n    public get isMuteAll(): boolean {\r\n        return this.privIsMuteAll;\r\n    }\r\n\r\n    public get participants(): IInternalParticipant[] {\r\n        return this.privParticipants;\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class ConversationReceivedTranslationEventArgs {\r\n    private privPayload: any;\r\n    private privCommand: string;\r\n    private privSessionId: string;\r\n\r\n    public constructor(command: string, payload: any,  sessionId?: string) {\r\n        this.privPayload = payload;\r\n        this.privCommand = command;\r\n        this.privSessionId = sessionId;\r\n    }\r\n\r\n    public get payload(): any {\r\n        return this.privPayload;\r\n    }\r\n\r\n    public get command(): string {\r\n        return this.privCommand;\r\n    }\r\n\r\n    public get sessionId(): string {\r\n        return this.privSessionId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ConnectionEventArgs,\r\n    ConversationExpirationEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    SessionEventArgs,\r\n    VoiceSignature,\r\n    } from \"../../sdk/Exports\";\r\n// import { ConversationClient } from \"./ConversationConnection\";\r\nimport {\r\n    ConversationReceivedTranslationEventArgs,\r\n    LockRoomEventArgs,\r\n    MuteAllEventArgs,\r\n    ParticipantAttributeEventArgs,\r\n    ParticipantEventArgs,\r\n    ParticipantsListEventArgs } from \"./ConversationTranslatorEventArgs\";\r\n\r\n/**\r\n * Internal conversation data\r\n */\r\nexport interface IInternalConversation {\r\n    // the token to use for connecting to the Speech Service\r\n    cognitiveSpeechAuthToken: string;\r\n    // the region to use for connecting to the Speech Service\r\n    cognitiveSpeechRegion: string;\r\n    // the unique id of the user who started or joined the Conversation\r\n    participantId: string;\r\n    // a descriptive name for the Conversation\r\n    name: string;\r\n    // a descriptive name for the Conversation\r\n    description: string;\r\n    // the speech model ID for custom speech\r\n    speechModel: string;\r\n    // represents the level of speech supported in the Conversation (0: everyone can speak, 2: only host can speak, 3: no-one can speak)\r\n    modalities: number;\r\n    // ?\r\n    isApproved: boolean;\r\n    // the mute flag has been set at conversation level and only the host can speak\r\n    isMuted: boolean;\r\n    // the 5 character conversation Id\r\n    roomId: string;\r\n    // the hex color string to represent a user. If there are many users this hex color may be reused (?).\r\n    avatar: string;\r\n    // the token to use when calling the websocket\r\n    token: string;\r\n    // used for tracking the session and help with troubleshooting problems in the logs\r\n    correlationId: string;\r\n    // extracted from the headers\r\n    requestId: string;\r\n}\r\n\r\n/**\r\n * The user who is participating in the conversation.\r\n */\r\nexport interface IInternalParticipant {\r\n    avatar?: string;\r\n    displayName?: string;\r\n    id?: string;\r\n    isHost?: boolean;\r\n    isMuted?: boolean;\r\n    isUsingTts?: boolean;\r\n    preferredLanguage?: string;\r\n    voice?: string;\r\n}\r\n\r\n/** Users participating in the conversation */\r\nexport class InternalParticipants {\r\n\r\n    constructor(public participants: IInternalParticipant[] = [], public meId?: string) {\r\n\r\n    }\r\n\r\n    /**\r\n     * Add or update a participant\r\n     * @param value\r\n     */\r\n    public addOrUpdateParticipant(value: IInternalParticipant): IInternalParticipant {\r\n        if (value === undefined) {\r\n            return;\r\n        }\r\n\r\n        const exists: number = this.getParticipantIndex(value.id);\r\n        if (exists > -1) {\r\n            this.participants.splice(exists, 1, value);\r\n        } else {\r\n            this.participants.push(value);\r\n        }\r\n\r\n        // ensure it was added ok\r\n        return this.getParticipant(value.id);\r\n    }\r\n\r\n    /**\r\n     * Find the participant's position in the participants list.\r\n     * @param id\r\n     */\r\n    public getParticipantIndex(id: string): number {\r\n        return this.participants.findIndex((p: IInternalParticipant) => p.id === id);\r\n    }\r\n\r\n    /**\r\n     * Find the participant by id.\r\n     * @param id\r\n     */\r\n    public getParticipant(id: string): IInternalParticipant {\r\n        return this.participants.find((p: IInternalParticipant) => p.id === id);\r\n    }\r\n\r\n    /***\r\n     * Remove a participant from the participants list.\r\n     */\r\n    public deleteParticipant(id: string): void {\r\n        this.participants = this.participants.filter((p: IInternalParticipant) => p.id !== id);\r\n    }\r\n\r\n    /***\r\n     * Helper to return the conversation host.\r\n     */\r\n    public get host(): IInternalParticipant {\r\n        return this.participants.find((p: IInternalParticipant) => p.isHost === true );\r\n    }\r\n\r\n    /**\r\n     * Helper to return the current user.\r\n     */\r\n    public get me(): IInternalParticipant {\r\n        return this.getParticipant(this.meId);\r\n    }\r\n}\r\n\r\n/**\r\n * Recognizer for handling Conversation Translator websocket messages\r\n */\r\nexport interface ConversationRecognizer {\r\n    isDisposed(): boolean;\r\n    sendRequest: (command: string, cb?: () => void, err?: (e: string) => void) => void;\r\n    cancelSpeech?: () => Promise<void>;\r\n    close?: () => Promise<void>;\r\n    conversationExpiration?: (sender: ConversationRecognizer, event: ConversationExpirationEventArgs) => void;\r\n    connected?: (e: ConnectionEventArgs) => void;\r\n    disconnected?: (e: ConnectionEventArgs) => void;\r\n    canceled?: (sender: ConversationRecognizer, event: ConversationTranslationCanceledEventArgs) => void;\r\n    connectionOpened?: (sender: ConversationRecognizer, event: SessionEventArgs) => void;\r\n    connectionClosed?: (sender: ConversationRecognizer, event: SessionEventArgs) => void;\r\n    participantsListReceived?: (sender: ConversationRecognizer, event: ParticipantsListEventArgs) => void;\r\n    translationReceived?: (sender: ConversationRecognizer, event: ConversationReceivedTranslationEventArgs) => void;\r\n    lockRoomCommandReceived?: (sender: ConversationRecognizer, event: LockRoomEventArgs) => void;\r\n    muteAllCommandReceived?: (sender: ConversationRecognizer, event: MuteAllEventArgs) => void;\r\n    participantJoinCommandReceived?: (sender: ConversationRecognizer, event: ParticipantEventArgs) => void;\r\n    participantLeaveCommandReceived?: (sender: ConversationRecognizer, event: ParticipantEventArgs) => void;\r\n    participantUpdateCommandReceived?: (sender: ConversationRecognizer, event: ParticipantAttributeEventArgs) => void;\r\n    connect?: (token: string, cb?: () => void, err?: (e: string) => void) => void;\r\n}\r\n\r\n/**\r\n * Error message returned from the Conversation Translator websocket\r\n */\r\nexport interface IConversationResponseErrorMessage {\r\n    code: string;\r\n    message: string;\r\n}\r\n\r\n/**\r\n * Error returned from the Conversation Translator websocket\r\n */\r\nexport interface IConversationResponseError {\r\n    error: IConversationResponseErrorMessage;\r\n}\r\n\r\n/**\r\n * Base message command\r\n */\r\nexport interface IClientMessage {\r\n    type: any;\r\n}\r\n\r\n/**\r\n * Command message\r\n */\r\nexport interface ICommandMessage extends IClientMessage {\r\n    command?: string;\r\n}\r\n\r\n/**\r\n * Text message command\r\n */\r\nexport interface IInstantMessageCommand extends ICommandMessage {\r\n    roomId: string;\r\n    nickname?: string;\r\n    participantId: string;\r\n    text: string;\r\n}\r\n\r\n/**\r\n * Lock command\r\n */\r\nexport interface ILockConversationCommand extends ICommandMessage {\r\n    id?: string; // incoming ws\r\n    nickname?: string; // incoming ws\r\n    participantId: string; // host - incoming ws\r\n    roomid: string;\r\n    value: boolean;\r\n}\r\n\r\n/**\r\n * Mute all command\r\n */\r\nexport interface IMuteAllCommand extends ICommandMessage {\r\n    roomid: string;\r\n    nickname?: string;  // incoming ws\r\n    participantId: string; // host\r\n    value: boolean;\r\n    id?: string; // incoming ws\r\n}\r\n\r\n/**\r\n * Mute participant command\r\n */\r\nexport interface IMuteCommand extends ICommandMessage {\r\n    roomid: string;\r\n    nickname?: string;\r\n    participantId: string; // participant\r\n    value: boolean;\r\n    id?: string; // incoming ws\r\n}\r\n\r\n/**\r\n * Remove participant command\r\n */\r\nexport interface IEjectParticipantCommand extends ICommandMessage {\r\n    roomid: string;\r\n    participantId: string; // participant\r\n}\r\n\r\n/**\r\n * Change nickname command\r\n */\r\nexport interface IChangeNicknameCommand extends ICommandMessage {\r\n    roomid: string;\r\n    participantId: string;\r\n    nickname: string;\r\n    value: string;\r\n}\r\n\r\n/**\r\n * List of command message types\r\n */\r\nexport const ConversationTranslatorMessageTypes = {\r\n    command: \"command\",\r\n    final: \"final\",\r\n    info: \"info\",\r\n    instantMessage: \"instant_message\",\r\n    partial: \"partial\",\r\n    participantCommand: \"participant_command\",\r\n    translatedMessage: \"translated_message\"\r\n};\r\n\r\n/**\r\n * List of command types\r\n */\r\nexport const ConversationTranslatorCommandTypes = {\r\n    changeNickname: \"ChangeNickname\",\r\n    disconnectSession: \"DisconnectSession\",\r\n    ejectParticipant: \"EjectParticipant\",\r\n    instant_message: \"instant_message\",\r\n    joinSession: \"JoinSession\",\r\n    leaveSession: \"LeaveSession\",\r\n    participantList: \"ParticipantList\",\r\n    roomExpirationWarning: \"RoomExpirationWarning\",\r\n    setLockState: \"SetLockState\",\r\n    setMute: \"SetMute\",\r\n    setMuteAll: \"SetMuteAll\",\r\n    setProfanityFiltering: \"SetProfanityFiltering\",\r\n    setTranslateToLanguages: \"SetTranslateToLanguages\",\r\n    setUseTTS: \"SetUseTTS\"\r\n};\r\n\r\n/**\r\n * HTTP response helper\r\n */\r\nexport interface IResponse {\r\n    ok: boolean;\r\n    status: number;\r\n    statusText: string;\r\n    data: string;\r\n    json: <T>() => T;\r\n    headers: string;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the payload for incoming websocket commands\r\n */\r\nexport interface ICommandResponsePayload {\r\n    type: string;\r\n    command?: string;\r\n    id?: string; // incoming ws\r\n    nickname?: string; // incoming ws\r\n    participantId?: string;\r\n    roomid?: string;\r\n    value: boolean | number | string;\r\n}\r\n\r\nexport class CommandResponsePayload implements ICommandResponsePayload {\r\n    private privCommandResponse: ICommandResponsePayload;\r\n\r\n    public constructor(json: string) {\r\n        this.privCommandResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): CommandResponsePayload {\r\n        return new CommandResponsePayload(json);\r\n    }\r\n\r\n    public get type(): string {\r\n        return this.privCommandResponse.type;\r\n    }\r\n    public get command(): string {\r\n        return this.privCommandResponse.command;\r\n    }\r\n    public get id(): string {\r\n        return this.privCommandResponse.id;\r\n    }\r\n    public get nickname(): string {\r\n        return this.privCommandResponse.nickname;\r\n    }\r\n    public get participantId(): string {\r\n        return this.privCommandResponse.participantId;\r\n    }\r\n    public get roomid(): string {\r\n        return this.privCommandResponse.roomid;\r\n    }\r\n    public get value(): boolean | number | string {\r\n        return this.privCommandResponse.value;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the payload for incoming list of participants\r\n */\r\nexport interface IParticipantsListPayloadResponse {\r\n    roomid: string;\r\n    id: string;\r\n    command: string;\r\n    participants: IParticipantPayloadResponse[];\r\n    token: string;\r\n    translateTo: string[];\r\n    profanityFilter: string;\r\n    roomProfanityFilter: string;\r\n    roomLocked: boolean;\r\n    muteAll: boolean;\r\n    type: string;\r\n}\r\n\r\n/**\r\n * Defines the payload for incoming participant\r\n */\r\nexport interface IParticipantPayloadResponse {\r\n    nickname: string;\r\n    locale: string;\r\n    usetts: boolean;\r\n    ismuted: boolean;\r\n    ishost: boolean;\r\n    participantId: string;\r\n    avatar?: string;\r\n}\r\n\r\nexport class ParticipantsListPayloadResponse implements IParticipantsListPayloadResponse {\r\n    private privParticipantsPayloadResponse: IParticipantsListPayloadResponse;\r\n\r\n    private constructor(json: string) {\r\n        this.privParticipantsPayloadResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): ParticipantsListPayloadResponse {\r\n        return new ParticipantsListPayloadResponse(json);\r\n    }\r\n\r\n    public get roomid(): string {\r\n        return this.privParticipantsPayloadResponse.roomid;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privParticipantsPayloadResponse.id;\r\n    }\r\n\r\n    public get command(): string {\r\n        return this.privParticipantsPayloadResponse.command;\r\n    }\r\n\r\n    public get participants(): IParticipantPayloadResponse[] {\r\n        return this.privParticipantsPayloadResponse.participants;\r\n    }\r\n\r\n    public get token(): string {\r\n        return this.privParticipantsPayloadResponse.token;\r\n    }\r\n\r\n    public get translateTo(): string[] {\r\n        return this.privParticipantsPayloadResponse.translateTo;\r\n    }\r\n\r\n    public get profanityFilter(): string {\r\n        return this.privParticipantsPayloadResponse.profanityFilter;\r\n    }\r\n\r\n    public get roomProfanityFilter(): string {\r\n        return this.privParticipantsPayloadResponse.roomProfanityFilter;\r\n    }\r\n\r\n    public get roomLocked(): boolean {\r\n        return this.privParticipantsPayloadResponse.roomLocked;\r\n    }\r\n\r\n    public get muteAll(): boolean {\r\n        return this.privParticipantsPayloadResponse.muteAll;\r\n    }\r\n\r\n    public get type(): string {\r\n        return this.privParticipantsPayloadResponse.type;\r\n    }\r\n\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class ParticipantPayloadResponse implements IParticipantPayloadResponse {\r\n\r\n    private privParticipantPayloadResponse: IParticipantPayloadResponse;\r\n\r\n    private constructor(json: string) {\r\n        this.privParticipantPayloadResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): ParticipantPayloadResponse {\r\n        return new ParticipantPayloadResponse(json);\r\n    }\r\n\r\n    public get nickname(): string {\r\n        return this.privParticipantPayloadResponse.nickname;\r\n    }\r\n\r\n    public get locale(): string {\r\n        return this.privParticipantPayloadResponse.locale;\r\n    }\r\n\r\n    public get usetts(): boolean {\r\n        return this.privParticipantPayloadResponse.usetts;\r\n    }\r\n\r\n    public get ismuted(): boolean {\r\n        return this.privParticipantPayloadResponse.ismuted;\r\n    }\r\n\r\n    public get ishost(): boolean {\r\n        return this.privParticipantPayloadResponse.ishost;\r\n    }\r\n\r\n    public get participantId(): string {\r\n        return this.privParticipantPayloadResponse.participantId;\r\n    }\r\n\r\n    public get avatar(): string {\r\n        return this.privParticipantPayloadResponse.avatar;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n/**\r\n * Defines the payload for incoming translation messages\r\n */\r\nexport interface ITranslationResponsePayload {\r\n    lang: string;\r\n    translation: string;\r\n}\r\n\r\nexport interface ITranslationCommandMessage {\r\n    translations: ITranslationResponsePayload[];\r\n    id: string;\r\n    language: string;\r\n    nickname: string;\r\n    participantId: string;\r\n    roomid: string;\r\n    timestamp: string;\r\n    type: string;\r\n}\r\n\r\nexport interface ISpeechResponsePayload extends ITranslationCommandMessage {\r\n    recognition: string;\r\n    isFinal: boolean;\r\n}\r\n\r\nexport interface ITextResponsePayload extends ITranslationCommandMessage {\r\n    originalText: string;\r\n}\r\n\r\nexport class SpeechResponsePayload implements ISpeechResponsePayload {\r\n\r\n    private privSpeechResponse: ISpeechResponsePayload;\r\n\r\n    private constructor(json: string) {\r\n        this.privSpeechResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): SpeechResponsePayload {\r\n        return new SpeechResponsePayload(json);\r\n    }\r\n\r\n    public get recognition(): string {\r\n        return this.privSpeechResponse.recognition;\r\n    }\r\n\r\n    public get translations(): ITranslationResponsePayload[] {\r\n        return this.privSpeechResponse.translations;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privSpeechResponse.id;\r\n    }\r\n\r\n    public get language(): string {\r\n        return this.privSpeechResponse.language;\r\n    }\r\n\r\n    public get nickname(): string {\r\n        return this.privSpeechResponse.nickname;\r\n    }\r\n\r\n    public get participantId(): string {\r\n        return this.privSpeechResponse.participantId;\r\n    }\r\n\r\n    public get roomid(): string {\r\n        return this.privSpeechResponse.roomid;\r\n    }\r\n\r\n    public get timestamp(): string {\r\n        return this.privSpeechResponse.timestamp;\r\n    }\r\n\r\n    public get type(): string {\r\n        return this.privSpeechResponse.type;\r\n    }\r\n\r\n    public get isFinal(): boolean {\r\n        return this.privSpeechResponse.type === \"final\";\r\n    }\r\n}\r\n\r\n// tslint:disable-next-line: max-classes-per-file\r\nexport class TextResponsePayload implements ITextResponsePayload {\r\n\r\n    private privTextResponse: ITextResponsePayload;\r\n\r\n    private constructor(json: string) {\r\n        this.privTextResponse = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): TextResponsePayload {\r\n        return new TextResponsePayload(json);\r\n    }\r\n\r\n    public get originalText(): string {\r\n        return this.privTextResponse.originalText;\r\n    }\r\n\r\n    public get translations(): ITranslationResponsePayload[] {\r\n        return this.privTextResponse.translations;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privTextResponse.id;\r\n    }\r\n\r\n    public get language(): string {\r\n        return this.privTextResponse.language;\r\n    }\r\n\r\n    public get nickname(): string {\r\n        return this.privTextResponse.nickname;\r\n    }\r\n\r\n    public get participantId(): string {\r\n        return this.privTextResponse.participantId;\r\n    }\r\n\r\n    public get roomid(): string {\r\n        return this.privTextResponse.roomid;\r\n    }\r\n\r\n    public get timestamp(): string {\r\n        return this.privTextResponse.timestamp;\r\n    }\r\n\r\n    public get type(): string {\r\n        return this.privTextResponse.type;\r\n    }\r\n}\r\n","export { CommandResponsePayload } from \"./CommandResponsePayload\";\r\nexport { IParticipantsListPayloadResponse, IParticipantPayloadResponse, ParticipantsListPayloadResponse, ParticipantPayloadResponse } from \"./ParticipantResponsePayload\";\r\nexport { ITranslationResponsePayload, SpeechResponsePayload, TextResponsePayload } from \"./TranslationResponsePayload\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ConnectionMessage,\r\n    ConnectionState,\r\n    createNoDashGuid,\r\n    Deferred,\r\n    IAudioSource,\r\n    IConnection,\r\n    MessageType,\r\n} from \"../../common/Exports\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    ConversationExpirationEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    ConversationTranslationResult,\r\n    Translations\r\n} from \"../../sdk/Exports\";\r\nimport {\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase\r\n} from \"../Exports\";\r\nimport { ConversationConnectionMessage } from \"./ConversationConnectionMessage\";\r\nimport { ConversationRequestSession } from \"./ConversationRequestSession\";\r\nimport {\r\n    ConversationReceivedTranslationEventArgs,\r\n    LockRoomEventArgs,\r\n    MuteAllEventArgs,\r\n    ParticipantAttributeEventArgs,\r\n    ParticipantEventArgs,\r\n    ParticipantsListEventArgs\r\n} from \"./ConversationTranslatorEventArgs\";\r\nimport {\r\n    ConversationTranslatorCommandTypes,\r\n    ConversationTranslatorMessageTypes,\r\n    IInternalParticipant\r\n} from \"./ConversationTranslatorInterfaces\";\r\nimport { ConversationTranslatorRecognizer } from \"./ConversationTranslatorRecognizer\";\r\nimport {\r\n    CommandResponsePayload,\r\n    IParticipantPayloadResponse,\r\n    IParticipantsListPayloadResponse,\r\n    ITranslationResponsePayload,\r\n    ParticipantPayloadResponse,\r\n    ParticipantsListPayloadResponse,\r\n    SpeechResponsePayload,\r\n    TextResponsePayload\r\n} from \"./ServiceMessages/Exports\";\r\n\r\n/***\r\n * The service adapter handles sending and receiving messages to the Conversation Translator websocket.\r\n */\r\nexport class ConversationServiceAdapter extends ServiceRecognizerBase {\r\n    private privConversationServiceConnector: ConversationTranslatorRecognizer;\r\n    private privConversationConnectionFactory: IConnectionFactory;\r\n    private privConversationAuthFetchEventId: string;\r\n    private privConversationAuthentication: IAuthentication;\r\n    private privConversationRequestSession: ConversationRequestSession;\r\n    private privConnectionConfigPromise: Promise<IConnection>;\r\n    private privConnectionLoop: Promise<void>;\r\n    private terminateMessageLoop: boolean;\r\n    private privLastPartialUtteranceId: string = \"\";\r\n    private privConversationIsDisposed: boolean;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioSource: IAudioSource,\r\n        recognizerConfig: RecognizerConfig,\r\n        conversationServiceConnector: ConversationTranslatorRecognizer) {\r\n\r\n        super(authentication, connectionFactory, audioSource, recognizerConfig, conversationServiceConnector);\r\n\r\n        this.privConversationServiceConnector = conversationServiceConnector;\r\n        this.privConversationAuthentication = authentication;\r\n        this.receiveMessageOverride = this.receiveConversationMessageOverride;\r\n        this.recognizeOverride = this.noOp;\r\n        this.postConnectImplOverride = this.conversationConnectImpl;\r\n        this.configConnectionOverride = this.configConnection;\r\n        this.disconnectOverride = this.privDisconnect;\r\n        this.privConversationRequestSession = new ConversationRequestSession(createNoDashGuid());\r\n        this.privConversationConnectionFactory = connectionFactory;\r\n        this.privConversationIsDisposed = false;\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return super.isDisposed() || this.privConversationIsDisposed;\r\n    }\r\n\r\n    public async dispose(reason?: string): Promise<void> {\r\n        this.privConversationIsDisposed = true;\r\n        if (this.privConnectionConfigPromise) {\r\n            const connection: IConnection = await this.privConnectionConfigPromise;\r\n            await connection.dispose(reason);\r\n        }\r\n        await super.dispose(reason);\r\n    }\r\n\r\n    public async sendMessage(message: string): Promise<void> {\r\n        const connection: IConnection = await this.fetchConnection();\r\n        return connection.send(new ConversationConnectionMessage(\r\n            MessageType.Text,\r\n            message));\r\n    }\r\n\r\n    public async sendMessageAsync(message: string): Promise<void> {\r\n        const sink: Deferred<void> = new Deferred<void>();\r\n\r\n        const connection: IConnection = await this.fetchConnection();\r\n\r\n        await connection.send(new ConversationConnectionMessage(MessageType.Text, message));\r\n    }\r\n\r\n    protected privDisconnect(): Promise<void> {\r\n        if (this.terminateMessageLoop) {\r\n            return;\r\n        }\r\n        this.cancelRecognition(this.privConversationRequestSession.sessionId,\r\n            this.privConversationRequestSession.requestId,\r\n            CancellationReason.Error,\r\n            CancellationErrorCode.NoError,\r\n            \"Disconnecting\");\r\n\r\n        this.terminateMessageLoop = true;\r\n        return Promise.resolve();\r\n    }\r\n\r\n    protected async processTypeSpecificMessages(\r\n        connectionMessage: ConnectionMessage,\r\n        successCallback?: (e: any) => void,\r\n        errorCallBack?: (e: string) => void): Promise<boolean> {\r\n        return true;\r\n    }\r\n\r\n    // Cancels recognition.\r\n    protected cancelRecognition(\r\n        sessionId: string,\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        this.terminateMessageLoop = true;\r\n\r\n        const cancelEvent: ConversationTranslationCanceledEventArgs = new ConversationTranslationCanceledEventArgs(\r\n            cancellationReason,\r\n            error,\r\n            errorCode,\r\n            undefined,\r\n            sessionId);\r\n\r\n        try {\r\n            if (!!this.privConversationServiceConnector.canceled) {\r\n                this.privConversationServiceConnector.canceled(this.privConversationServiceConnector, cancelEvent);\r\n            }\r\n        } catch {\r\n            // continue on error\r\n        }\r\n    }\r\n\r\n    protected noOp = (): any => {\r\n        // operation not supported\r\n    }\r\n\r\n    /**\r\n     * Establishes a websocket connection to the end point.\r\n     * @param isUnAuthorized\r\n     */\r\n    protected async conversationConnectImpl(connection: Promise<IConnection>): Promise<IConnection> {\r\n        this.privConnectionLoop = this.startMessageLoop();\r\n        return connection;\r\n    }\r\n\r\n    /**\r\n     * Process incoming websocket messages\r\n     */\r\n    private async receiveConversationMessageOverride(): Promise<void> {\r\n        if (this.isDisposed() || this.terminateMessageLoop) {\r\n            return Promise.resolve();\r\n        }\r\n        // we won't rely on the cascading promises of the connection since we want to continually be available to receive messages\r\n        const communicationCustodian: Deferred<void> = new Deferred<void>();\r\n\r\n        try {\r\n            const connection: IConnection = await this.fetchConnection();\r\n            const message: ConversationConnectionMessage = await connection.read() as ConversationConnectionMessage;\r\n            if (this.isDisposed() || this.terminateMessageLoop) {\r\n                // We're done.\r\n                communicationCustodian.resolve();\r\n                return Promise.resolve();\r\n            }\r\n\r\n            if (!message) {\r\n                return this.receiveConversationMessageOverride();\r\n            }\r\n\r\n            const sessionId: string = this.privConversationRequestSession.sessionId;\r\n            let sendFinal: boolean = false;\r\n\r\n            try {\r\n                switch (message.conversationMessageType.toLowerCase()) {\r\n                    case \"info\":\r\n                    case \"participant_command\":\r\n                    case \"command\":\r\n                        const commandPayload: CommandResponsePayload = CommandResponsePayload.fromJSON(message.textBody);\r\n                        switch (commandPayload.command.toLowerCase()) {\r\n\r\n                            /**\r\n                             * 'ParticpantList' is the first message sent to the user after the websocket connection has opened.\r\n                             * The consuming client must wait for this message to arrive\r\n                             * before starting to send their own data.\r\n                             */\r\n                            case \"participantlist\":\r\n\r\n                                const participantsPayload: IParticipantsListPayloadResponse = ParticipantsListPayloadResponse.fromJSON(message.textBody);\r\n\r\n                                const participantsResult: IInternalParticipant[] = participantsPayload.participants.map((p: IParticipantPayloadResponse) => {\r\n                                    const participant: IInternalParticipant = {\r\n                                        avatar: p.avatar,\r\n                                        displayName: p.nickname,\r\n                                        id: p.participantId,\r\n                                        isHost: p.ishost,\r\n                                        isMuted: p.ismuted,\r\n                                        isUsingTts: p.usetts,\r\n                                        preferredLanguage: p.locale\r\n                                    };\r\n                                    return participant;\r\n                                });\r\n\r\n                                if (!!this.privConversationServiceConnector.participantsListReceived) {\r\n                                    this.privConversationServiceConnector.participantsListReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantsListEventArgs(participantsPayload.roomid, participantsPayload.token,\r\n                                            participantsPayload.translateTo, participantsPayload.profanityFilter,\r\n                                            participantsPayload.roomProfanityFilter, participantsPayload.roomLocked,\r\n                                            participantsPayload.muteAll, participantsResult, sessionId));\r\n                                }\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetTranslateToLanguages' represents the list of languages being used in the Conversation by all users(?).\r\n                             * This is sent at the start of the Conversation\r\n                             */\r\n                            case \"settranslatetolanguages\":\r\n\r\n                                if (!!this.privConversationServiceConnector.participantUpdateCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantUpdateCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantAttributeEventArgs(commandPayload.participantId,\r\n                                            ConversationTranslatorCommandTypes.setTranslateToLanguages,\r\n                                            commandPayload.value, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetProfanityFiltering' lets the client set the level of profanity filtering.\r\n                             * If sent by the participant the setting will effect only their own profanity level.\r\n                             * If sent by the host, the setting will effect all participants including the host.\r\n                             * Note: the profanity filters differ from Speech Service (?): 'marked', 'raw', 'removed', 'tagged'\r\n                             */\r\n                            case \"setprofanityfiltering\":\r\n\r\n                                if (!!this.privConversationServiceConnector.participantUpdateCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantUpdateCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantAttributeEventArgs(commandPayload.participantId,\r\n                                            ConversationTranslatorCommandTypes.setProfanityFiltering,\r\n                                            commandPayload.value, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetMute' is sent if the participant has been muted by the host.\r\n                             * Check the 'participantId' to determine if the current user has been muted.\r\n                             */\r\n                            case \"setmute\":\r\n\r\n                                if (!!this.privConversationServiceConnector.participantUpdateCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantUpdateCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantAttributeEventArgs(commandPayload.participantId,\r\n                                            ConversationTranslatorCommandTypes.setMute,\r\n                                            commandPayload.value, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetMuteAll' is sent if the Conversation has been muted by the host.\r\n                             */\r\n                            case \"setmuteall\":\r\n\r\n                                if (!!this.privConversationServiceConnector.muteAllCommandReceived) {\r\n                                    this.privConversationServiceConnector.muteAllCommandReceived(this.privConversationServiceConnector,\r\n                                        new MuteAllEventArgs(commandPayload.value as boolean, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'RoomExpirationWarning' is sent towards the end of the Conversation session to give a timeout warning.\r\n                             */\r\n                            case \"roomexpirationwarning\":\r\n\r\n                                if (!!this.privConversationServiceConnector.conversationExpiration) {\r\n                                    this.privConversationServiceConnector.conversationExpiration(this.privConversationServiceConnector,\r\n                                        new ConversationExpirationEventArgs(commandPayload.value as number, this.privConversationRequestSession.sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetUseTts' is sent as a confirmation if the user requests TTS to be turned on or off.\r\n                             */\r\n                            case \"setusetts\":\r\n\r\n                                if (!!this.privConversationServiceConnector.participantUpdateCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantUpdateCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantAttributeEventArgs(commandPayload.participantId,\r\n                                            ConversationTranslatorCommandTypes.setUseTTS,\r\n                                            commandPayload.value, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'SetLockState' is set if the host has locked or unlocked the Conversation.\r\n                             */\r\n                            case \"setlockstate\":\r\n\r\n                                if (!!this.privConversationServiceConnector.lockRoomCommandReceived) {\r\n                                    this.privConversationServiceConnector.lockRoomCommandReceived(this.privConversationServiceConnector,\r\n                                        new LockRoomEventArgs(commandPayload.value as boolean, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'ChangeNickname' is received if a user changes their display name.\r\n                             * Any cached particpiants list should be updated to reflect the display name.\r\n                             */\r\n                            case \"changenickname\":\r\n\r\n                                if (!!this.privConversationServiceConnector.participantUpdateCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantUpdateCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantAttributeEventArgs(commandPayload.participantId,\r\n                                            ConversationTranslatorCommandTypes.changeNickname,\r\n                                            commandPayload.nickname, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'JoinSession' is sent when a user joins the Conversation.\r\n                             */\r\n                            case \"joinsession\":\r\n\r\n                                const joinParticipantPayload: ParticipantPayloadResponse = ParticipantPayloadResponse.fromJSON(message.textBody);\r\n\r\n                                const joiningParticipant: IInternalParticipant = {\r\n                                    avatar: joinParticipantPayload.avatar,\r\n                                    displayName: joinParticipantPayload.nickname,\r\n                                    id: joinParticipantPayload.participantId,\r\n                                    isHost: joinParticipantPayload.ishost,\r\n                                    isMuted: joinParticipantPayload.ismuted,\r\n                                    isUsingTts: joinParticipantPayload.usetts,\r\n                                    preferredLanguage: joinParticipantPayload.locale,\r\n                                };\r\n\r\n                                if (!!this.privConversationServiceConnector.participantJoinCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantJoinCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantEventArgs(\r\n                                            joiningParticipant,\r\n                                            sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'LeaveSession' is sent when a user leaves the Conversation'.\r\n                             */\r\n                            case \"leavesession\":\r\n\r\n                                const leavingParticipant: IInternalParticipant = {\r\n                                    id: commandPayload.participantId\r\n                                };\r\n\r\n                                if (!!this.privConversationServiceConnector.participantLeaveCommandReceived) {\r\n                                    this.privConversationServiceConnector.participantLeaveCommandReceived(this.privConversationServiceConnector,\r\n                                        new ParticipantEventArgs(leavingParticipant, sessionId));\r\n                                }\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * 'DisconnectSession' is sent when a user is disconnected from the session (e.g. network problem).\r\n                             * Check the 'ParticipantId' to check whether the message is for the current user.\r\n                             */\r\n                            case \"disconnectsession\":\r\n\r\n                                const disconnectParticipant: IInternalParticipant = {\r\n                                    id: commandPayload.participantId\r\n                                };\r\n\r\n                                break;\r\n\r\n                            /**\r\n                             * Message not recognized.\r\n                             */\r\n                            default:\r\n                                break;\r\n                        }\r\n                        break;\r\n\r\n                    /**\r\n                     * 'partial' (or 'hypothesis') represents a unfinalized speech message.\r\n                     */\r\n                    case \"partial\":\r\n\r\n                    /**\r\n                     * 'final' (or 'phrase') represents a finalized speech message.\r\n                     */\r\n                    case \"final\":\r\n\r\n                        const speechPayload: SpeechResponsePayload = SpeechResponsePayload.fromJSON(message.textBody);\r\n\r\n                        const speechResult: ConversationTranslationResult = new ConversationTranslationResult(speechPayload.participantId,\r\n                            this.getTranslations(speechPayload.translations),\r\n                            speechPayload.language,\r\n                            undefined,\r\n                            undefined,\r\n                            speechPayload.recognition,\r\n                            undefined,\r\n                            undefined,\r\n                            message.textBody,\r\n                            undefined);\r\n\r\n                        if (speechPayload.isFinal) {\r\n                            // check the length, sometimes empty finals are returned\r\n                            if (speechResult.text !== undefined && speechResult.text.length > 0) {\r\n                                sendFinal = true;\r\n                            } else if (speechPayload.id === this.privLastPartialUtteranceId) {\r\n                                // send final as normal. We had a non-empty partial for this same utterance\r\n                                // so sending the empty final is important\r\n                                sendFinal = true;\r\n                            } else {\r\n                                // suppress unneeded final\r\n                            }\r\n\r\n                            if (sendFinal) {\r\n                                if (!!this.privConversationServiceConnector.translationReceived) {\r\n                                    this.privConversationServiceConnector.translationReceived(this.privConversationServiceConnector,\r\n                                        new ConversationReceivedTranslationEventArgs(ConversationTranslatorMessageTypes.final, speechResult, sessionId));\r\n                                }\r\n                            }\r\n                        } else if (speechResult.text !== undefined) {\r\n                            this.privLastPartialUtteranceId = speechPayload.id;\r\n                            if (!!this.privConversationServiceConnector.translationReceived) {\r\n                                this.privConversationServiceConnector.translationReceived(this.privConversationServiceConnector,\r\n                                    new ConversationReceivedTranslationEventArgs(ConversationTranslatorMessageTypes.partial, speechResult, sessionId));\r\n                            }\r\n                        }\r\n\r\n                        break;\r\n\r\n                    /**\r\n                     * \"translated_message\" is a text message or instant message (IM).\r\n                     */\r\n                    case \"translated_message\":\r\n\r\n                        const textPayload: TextResponsePayload = TextResponsePayload.fromJSON(message.textBody);\r\n\r\n                        const textResult: ConversationTranslationResult = new ConversationTranslationResult(textPayload.participantId,\r\n                            this.getTranslations(textPayload.translations),\r\n                            textPayload.language,\r\n                            undefined,\r\n                            undefined,\r\n                            textPayload.originalText,\r\n                            undefined,\r\n                            undefined,\r\n                            undefined,\r\n                            message.textBody,\r\n                            undefined);\r\n\r\n                        if (!!this.privConversationServiceConnector.translationReceived) {\r\n                            this.privConversationServiceConnector.translationReceived(this.privConversationServiceConnector,\r\n                                new ConversationReceivedTranslationEventArgs(ConversationTranslatorMessageTypes.instantMessage, textResult, sessionId));\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n                        // ignore any unsupported message types\r\n                        break;\r\n                }\r\n            } catch (e) {\r\n                // continue\r\n            }\r\n            return this.receiveConversationMessageOverride();\r\n        } catch (e) {\r\n            this.terminateMessageLoop = true;\r\n        }\r\n\r\n        return communicationCustodian.promise;\r\n    }\r\n\r\n    private async startMessageLoop(): Promise<void> {\r\n        if (this.isDisposed()) {\r\n            return Promise.resolve();\r\n        }\r\n        this.terminateMessageLoop = false;\r\n\r\n        const messageRetrievalPromise = this.receiveConversationMessageOverride();\r\n\r\n        try {\r\n            const r = await messageRetrievalPromise;\r\n            return r;\r\n        } catch (error) {\r\n            this.cancelRecognition(this.privRequestSession ? this.privRequestSession.sessionId : \"\", this.privRequestSession ? this.privRequestSession.requestId : \"\", CancellationReason.Error, CancellationErrorCode.RuntimeError, error);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    // Takes an established websocket connection to the endpoint\r\n    private configConnection(): Promise<IConnection> {\r\n        if (this.isDisposed()) {\r\n            return Promise.resolve<IConnection>(undefined);\r\n        }\r\n        if (this.privConnectionConfigPromise) {\r\n            return this.privConnectionConfigPromise.then((connection: IConnection): Promise<IConnection> => {\r\n                if (connection.state() === ConnectionState.Disconnected) {\r\n                    this.privConnectionId = null;\r\n                    this.privConnectionConfigPromise = null;\r\n                    return this.configConnection();\r\n                }\r\n                return this.privConnectionConfigPromise;\r\n            }, (error: string): Promise<IConnection> => {\r\n                this.privConnectionId = null;\r\n                this.privConnectionConfigPromise = null;\r\n                return this.configConnection();\r\n            });\r\n        }\r\n        if (this.terminateMessageLoop) {\r\n            return Promise.resolve<IConnection>(undefined);\r\n        }\r\n\r\n        this.privConnectionConfigPromise = this.connectImpl().then((connection: IConnection): any => {\r\n            return connection;\r\n        });\r\n\r\n        return this.privConnectionConfigPromise;\r\n    }\r\n\r\n    private getTranslations(serviceResultTranslations: ITranslationResponsePayload[]): Translations {\r\n        let translations: Translations;\r\n\r\n        if (undefined !== serviceResultTranslations) {\r\n            translations = new Translations();\r\n            for (const translation of serviceResultTranslations) {\r\n                translations.set(translation.lang, translation.translation);\r\n            }\r\n        }\r\n\r\n        return translations;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig\r\n} from \"../../common.speech/Exports\";\r\nimport {\r\n    BackgroundEvent,\r\n    Events\r\n} from \"../../common/Exports\";\r\nimport { AudioConfigImpl } from \"../../sdk/Audio/AudioConfig\";\r\nimport { Contracts } from \"../../sdk/Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    Connection,\r\n    ConnectionEventArgs,\r\n    ConversationExpirationEventArgs,\r\n    ConversationParticipantsChangedEventArgs,\r\n    ConversationTranslationCanceledEventArgs,\r\n    PropertyCollection,\r\n    Recognizer,\r\n    SessionEventArgs,\r\n    SpeechTranslationConfig\r\n} from \"../../sdk/Exports\";\r\nimport { SpeechTranslationConfigImpl } from \"../../sdk/SpeechTranslationConfig\";\r\nimport { Callback } from \"../../sdk/Transcription/IConversation\";\r\nimport { ConversationConnectionFactory } from \"./ConversationConnectionFactory\";\r\nimport { ConversationServiceAdapter } from \"./ConversationServiceAdapter\";\r\nimport {\r\n    ConversationReceivedTranslationEventArgs,\r\n    LockRoomEventArgs,\r\n    MuteAllEventArgs,\r\n    ParticipantAttributeEventArgs,\r\n    ParticipantEventArgs,\r\n    ParticipantsListEventArgs\r\n} from \"./ConversationTranslatorEventArgs\";\r\nimport {\r\n    ConversationRecognizer,\r\n} from \"./ConversationTranslatorInterfaces\";\r\nimport { PromiseToEmptyCallback } from \"./ConversationUtils\";\r\n\r\nexport class ConversationRecognizerFactory {\r\n    public static fromConfig(speechConfig: SpeechTranslationConfig, audioConfig?: AudioConfig): ConversationRecognizer {\r\n        return new ConversationTranslatorRecognizer(speechConfig, audioConfig);\r\n    }\r\n}\r\n\r\n/**\r\n * Sends messages to the Conversation Translator websocket and listens for incoming events containing websocket messages.\r\n * Based off the recognizers in the SDK folder.\r\n */\r\n// tslint:disable-next-line:max-classes-per-file\r\nexport class ConversationTranslatorRecognizer extends Recognizer implements ConversationRecognizer {\r\n\r\n    private privIsDisposed: boolean;\r\n    private privSpeechRecognitionLanguage: string;\r\n    private privConnection: Connection;\r\n\r\n    public constructor(speechConfig: SpeechTranslationConfig, audioConfig?: AudioConfig) {\r\n        const serviceConfigImpl = speechConfig as SpeechTranslationConfigImpl;\r\n        Contracts.throwIfNull(serviceConfigImpl, \"speechConfig\");\r\n\r\n        super(audioConfig, serviceConfigImpl.properties, new ConversationConnectionFactory());\r\n\r\n        this.privIsDisposed = false;\r\n        this.privProperties = serviceConfigImpl.properties.clone();\r\n        this.privConnection = Connection.fromRecognizer(this);\r\n    }\r\n\r\n    public canceled: (sender: ConversationRecognizer, event: ConversationTranslationCanceledEventArgs) => void;\r\n    public conversationExpiration: (sender: ConversationRecognizer, event: ConversationExpirationEventArgs) => void;\r\n    public lockRoomCommandReceived: (sender: ConversationRecognizer, event: LockRoomEventArgs) => void;\r\n    public muteAllCommandReceived: (sender: ConversationRecognizer, event: MuteAllEventArgs) => void;\r\n    public participantJoinCommandReceived: (sender: ConversationRecognizer, event: ParticipantEventArgs) => void;\r\n    public participantLeaveCommandReceived: (sender: ConversationRecognizer, event: ParticipantEventArgs) => void;\r\n    public participantUpdateCommandReceived: (sender: ConversationRecognizer, event: ParticipantAttributeEventArgs) => void;\r\n    public connectionOpened: (sender: ConversationRecognizer, event: SessionEventArgs) => void;\r\n    public connectionClosed: (sender: ConversationRecognizer, event: SessionEventArgs) => void;\r\n    public translationReceived: (sender: ConversationRecognizer, event: ConversationReceivedTranslationEventArgs) => void;\r\n    public participantsListReceived: (sender: ConversationRecognizer, event: ParticipantsListEventArgs) => void;\r\n    public participantsChanged: (sender: ConversationRecognizer, event: ConversationParticipantsChangedEventArgs) => void;\r\n\r\n    public set connected(cb: (e: ConnectionEventArgs) => void) {\r\n        this.privConnection.connected = cb;\r\n    }\r\n\r\n    public set disconnected(cb: (e: ConnectionEventArgs) => void) {\r\n        this.privConnection.disconnected = cb;\r\n    }\r\n\r\n    /**\r\n     * Return the speech language used by the recognizer\r\n     */\r\n    public get speechRecognitionLanguage(): string {\r\n        return this.privSpeechRecognitionLanguage;\r\n    }\r\n\r\n    /**\r\n     * Return the properties for the recognizer\r\n     */\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    /**\r\n     * Connect to the recognizer\r\n     * @param token\r\n     */\r\n    public connect(token: string, cb?: () => void, err?: (e: string) => void): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n            this.privReco.conversationTranslatorToken = token;\r\n            this.privReco.connectAsync(cb, err);\r\n        } catch (error) {\r\n            if (!!err) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n                } else {\r\n                    err(error);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Disconnect from the recognizer\r\n     */\r\n    public disconnect(cb?: () => void, err?: (e: string) => void): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            this.privReco.disconnect().then(() => {\r\n                if (!!cb) {\r\n                    cb();\r\n                }\r\n            }, (error: string) => {\r\n                if (!!err) {\r\n                    err(error);\r\n                }\r\n            });\r\n        } catch (error) {\r\n            if (!!err) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n                } else {\r\n                    err(error);\r\n                }\r\n            }\r\n            // Destroy the recognizer.\r\n            this.dispose(true).catch((reason: string): void => {\r\n                Events.instance.onEvent(new BackgroundEvent(reason));\r\n            });\r\n\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Send the mute all participants command to the websocket\r\n     * @param conversationId\r\n     * @param participantId\r\n     * @param isMuted\r\n     */\r\n    public sendRequest(command: string, cb?: () => void, err?: (e: string) => void): void {\r\n        try {\r\n            Contracts.throwIfDisposed(this.privIsDisposed);\r\n            this.sendMessage(command, cb, err);\r\n        } catch (error) {\r\n            if (!!err) {\r\n                if (error instanceof Error) {\r\n                    const typedError: Error = error as Error;\r\n                    err(typedError.name + \": \" + typedError.message);\r\n                } else {\r\n                    err(error);\r\n                }\r\n            }\r\n\r\n            // Destroy the recognizer.\r\n            this.dispose(true).catch((reason: string): void => {\r\n                Events.instance.onEvent(new BackgroundEvent(reason));\r\n            });\r\n\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Close and dispose the recognizer\r\n     */\r\n    public async close(): Promise<void> {\r\n        Contracts.throwIfDisposed(this.privIsDisposed);\r\n        this.privConnection?.closeConnection();\r\n        this.privConnection?.close();\r\n        this.privConnection = undefined;\r\n        await this.dispose(true);\r\n    }\r\n\r\n    /**\r\n     * Dispose the recognizer\r\n     * @param disposing\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privIsDisposed) {\r\n            return;\r\n        }\r\n        if (disposing) {\r\n            this.privIsDisposed = true;\r\n            if (!!this.privConnection) {\r\n                this.privConnection.closeConnection();\r\n                this.privConnection.close();\r\n                this.privConnection = undefined;\r\n            }\r\n            await super.dispose(disposing);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Create the config for the recognizer\r\n     * @param speechConfig\r\n     */\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(speechConfig, this.privProperties);\r\n    }\r\n\r\n    /**\r\n     * Create the service recognizer.\r\n     * The audio source is redundnant here but is required by the implementation.\r\n     * @param authentication\r\n     * @param connectionFactory\r\n     * @param audioConfig\r\n     * @param recognizerConfig\r\n     */\r\n    protected createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n\r\n        const audioSource: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n\r\n        return new ConversationServiceAdapter(authentication, connectionFactory, audioSource, recognizerConfig, this);\r\n    }\r\n\r\n    private sendMessage(msg: string, cb?: Callback, err?: Callback): void {\r\n        const withAsync = this.privReco as ConversationServiceAdapter;\r\n        PromiseToEmptyCallback(withAsync.sendMessageAsync(msg), cb, err);\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { marshalPromiseToCallbacks } from \"../../common/Exports\";\r\nimport { AudioConfigImpl } from \"../../sdk/Audio/AudioConfig\";\r\nimport { Contracts } from \"../../sdk/Contracts\";\r\nimport {\r\n    AudioConfig,\r\n    CancellationEventArgs,\r\n    Conversation,\r\n    ConversationInfo,\r\n    ConversationTranscriber,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    Recognizer,\r\n    SessionEventArgs,\r\n    SpeechRecognitionEventArgs,\r\n    SpeechTranslationConfig,\r\n    SpeechTranslationConfigImpl,\r\n} from \"../../sdk/Exports\";\r\nimport {\r\n    IAuthentication,\r\n    IConnectionFactory,\r\n    RecognitionMode,\r\n    RecognizerConfig,\r\n    ServiceRecognizerBase,\r\n    SpeechServiceConfig,\r\n    TranscriberConnectionFactory,\r\n    TranscriptionServiceRecognizer,\r\n} from \"../Exports\";\r\n\r\nexport class TranscriberRecognizer extends Recognizer {\r\n    private privDisposedRecognizer: boolean;\r\n    private privConversation: Conversation;\r\n\r\n    /**\r\n     * TranscriberRecognizer constructor.\r\n     * @constructor\r\n     * @param {AudioConfig} audioConfig - An optional audio configuration associated with the recognizer\r\n     */\r\n    public constructor(speechTranslationConfig: SpeechTranslationConfig, audioConfig?: AudioConfig) {\r\n        const speechTranslationConfigImpl: SpeechTranslationConfigImpl = speechTranslationConfig as SpeechTranslationConfigImpl;\r\n        Contracts.throwIfNull(speechTranslationConfigImpl, \"speechTranslationConfig\");\r\n\r\n        Contracts.throwIfNullOrWhitespace(\r\n            speechTranslationConfigImpl.speechRecognitionLanguage,\r\n            PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\r\n\r\n        super(audioConfig, speechTranslationConfigImpl.properties, new TranscriberConnectionFactory());\r\n        this.privDisposedRecognizer = false;\r\n    }\r\n\r\n    public recognizing: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    public recognized: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\r\n\r\n    public canceled: (sender: Recognizer, event: CancellationEventArgs) => void;\r\n\r\n    public getConversationInfo(): ConversationInfo {\r\n        Contracts.throwIfNullOrUndefined(this.privConversation, \"Conversation\");\r\n        return this.privConversation.conversationInfo;\r\n    }\r\n\r\n    public get authorizationToken(): string {\r\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\r\n    }\r\n\r\n    public set authorizationToken(token: string) {\r\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\r\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\r\n    }\r\n\r\n    public set conversation(c: Conversation) {\r\n        Contracts.throwIfNullOrUndefined(c, \"Conversation\");\r\n        this.privConversation = c;\r\n    }\r\n\r\n    public get speechRecognitionLanguage(): string {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n\r\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\r\n    }\r\n\r\n    public get properties(): PropertyCollection {\r\n        return this.privProperties;\r\n    }\r\n\r\n    public startContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.startContinuousRecognitionAsyncImpl(RecognitionMode.Conversation), cb, err);\r\n    }\r\n\r\n    public stopContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\r\n        marshalPromiseToCallbacks(this.stopContinuousRecognitionAsyncImpl(), cb, err);\r\n    }\r\n\r\n    public async close(): Promise<void> {\r\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\r\n        await this.dispose(true);\r\n    }\r\n\r\n    // Push async join/leave conversation message via serviceRecognizer\r\n    public async pushConversationEvent(conversationInfo: ConversationInfo, command: string): Promise<void> {\r\n        const reco = (this.privReco) as TranscriptionServiceRecognizer;\r\n        Contracts.throwIfNullOrUndefined(reco, \"serviceRecognizer\");\r\n        await reco.sendSpeechEventAsync(conversationInfo, command);\r\n    }\r\n\r\n    public connectCallbacks(transcriber: ConversationTranscriber): void {\r\n        this.canceled = (s: any, e: CancellationEventArgs): void => {\r\n            if (!!transcriber.canceled) {\r\n                transcriber.canceled(transcriber, e);\r\n            }\r\n        };\r\n        this.recognizing = (s: any, e: SpeechRecognitionEventArgs): void => {\r\n            if (!!transcriber.transcribing) {\r\n                transcriber.transcribing(transcriber, e);\r\n            }\r\n        };\r\n        this.recognized = (s: any, e: SpeechRecognitionEventArgs): void => {\r\n            if (!!transcriber.transcribed) {\r\n                transcriber.transcribed(transcriber, e);\r\n            }\r\n        };\r\n        this.sessionStarted = (s: any, e: SessionEventArgs): void => {\r\n            if (!!transcriber.sessionStarted) {\r\n                transcriber.sessionStarted(transcriber, e);\r\n            }\r\n        };\r\n        this.sessionStopped = (s: any, e: SessionEventArgs): void => {\r\n            if (!!transcriber.sessionStopped) {\r\n                transcriber.sessionStopped(transcriber, e);\r\n            }\r\n        };\r\n    }\r\n\r\n    public disconnectCallbacks(): void {\r\n        this.canceled = undefined;\r\n        this.recognizing = undefined;\r\n        this.recognized = undefined;\r\n        this.sessionStarted = undefined;\r\n        this.sessionStopped = undefined;\r\n    }\r\n\r\n    /**\r\n     * Disposes any resources held by the object.\r\n     * @member ConversationTranscriber.prototype.dispose\r\n     * @function\r\n     * @public\r\n     * @param {boolean} disposing - true if disposing the object.\r\n     */\r\n    protected async dispose(disposing: boolean): Promise<void> {\r\n        if (this.privDisposedRecognizer) {\r\n            return;\r\n        }\r\n\r\n        if (disposing) {\r\n            this.privDisposedRecognizer = true;\r\n            await this.implRecognizerStop();\r\n        }\r\n\r\n        await super.dispose(disposing);\r\n    }\r\n\r\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\r\n        return new RecognizerConfig(\r\n            speechConfig,\r\n            this.properties);\r\n    }\r\n\r\n    protected createServiceRecognizer(\r\n        authentication: IAuthentication,\r\n        connectionFactory: IConnectionFactory,\r\n        audioConfig: AudioConfig,\r\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\r\n        const configImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\r\n        return new TranscriptionServiceRecognizer(authentication, connectionFactory, configImpl, recognizerConfig, this);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport { ConversationManager } from \"./ConversationManager\";\r\nexport { ConversationConnectionConfig } from \"./ConversationConnectionConfig\";\r\nexport { ConversationRecognizerFactory } from \"./ConversationTranslatorRecognizer\";\r\nexport { TranscriberRecognizer } from \"./TranscriberRecognizer\";\r\nexport {\r\n    ConversationReceivedTranslationEventArgs,\r\n    LockRoomEventArgs,\r\n    MuteAllEventArgs,\r\n    ParticipantAttributeEventArgs,\r\n    ParticipantEventArgs,\r\n    ParticipantsListEventArgs } from \"./ConversationTranslatorEventArgs\";\r\nexport {\r\n    ConversationRecognizer,\r\n    ConversationTranslatorCommandTypes,\r\n    ConversationTranslatorMessageTypes,\r\n    IInternalConversation,\r\n    IInternalParticipant,\r\n    InternalParticipants} from \"./ConversationTranslatorInterfaces\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport enum MetadataType {\r\n    WordBoundary = \"WordBoundary\",\r\n    Bookmark = \"Bookmark\",\r\n    Viseme = \"Viseme\"\r\n}\r\n\r\nexport interface ISynthesisMetadata {\r\n    Type: MetadataType;\r\n    Data: {\r\n        Offset: number;\r\n        text: {\r\n            Text: string;\r\n            Length: number;\r\n        };\r\n        Bookmark: string;\r\n        VisemeId: number;\r\n        AnimationChunk: string;\r\n        IsLastAnimation: boolean;\r\n    };\r\n}\r\n\r\n// audio.metadata\r\nexport interface ISynthesisAudioMetadata {\r\n    Metadata: ISynthesisMetadata[];\r\n}\r\n\r\nexport class SynthesisAudioMetadata implements ISynthesisAudioMetadata {\r\n    private privSynthesisAudioMetadata: ISynthesisAudioMetadata;\r\n\r\n    private constructor(json: string) {\r\n        this.privSynthesisAudioMetadata = JSON.parse(json);\r\n    }\r\n\r\n    public static fromJSON(json: string): SynthesisAudioMetadata {\r\n        return new SynthesisAudioMetadata(json);\r\n    }\r\n\r\n    public get Metadata(): ISynthesisMetadata[] {\r\n        return this.privSynthesisAudioMetadata.Metadata;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ArgumentNullError,\r\n    ConnectionClosedEvent,\r\n    ConnectionEvent,\r\n    ConnectionMessage,\r\n    ConnectionState,\r\n    createNoDashGuid,\r\n    EventSource,\r\n    IAudioDestination,\r\n    IConnection,\r\n    IDisposable,\r\n    MessageType,\r\n    ServiceEvent,\r\n} from \"../common/Exports\";\r\nimport { AudioOutputFormatImpl } from \"../sdk/Audio/AudioOutputFormat\";\r\nimport {\r\n    CancellationErrorCode,\r\n    CancellationReason,\r\n    PropertyCollection,\r\n    PropertyId,\r\n    ResultReason,\r\n    SpeechSynthesisBookmarkEventArgs,\r\n    SpeechSynthesisEventArgs,\r\n    SpeechSynthesisResult,\r\n    SpeechSynthesisVisemeEventArgs,\r\n    SpeechSynthesisWordBoundaryEventArgs,\r\n    SpeechSynthesizer,\r\n} from \"../sdk/Exports\";\r\nimport {\r\n    AgentConfig,\r\n    CancellationErrorCodePropertyName,\r\n    ISynthesisConnectionFactory,\r\n    MetadataType,\r\n    SynthesisAudioMetadata,\r\n    SynthesisContext,\r\n    SynthesisTurn,\r\n    SynthesizerConfig\r\n} from \"./Exports\";\r\nimport { AuthInfo, IAuthentication } from \"./IAuthentication\";\r\nimport { SpeechConnectionMessage } from \"./SpeechConnectionMessage.Internal\";\r\n\r\nexport class SynthesisAdapterBase implements IDisposable {\r\n    protected privSynthesisTurn: SynthesisTurn;\r\n    protected privConnectionId: string;\r\n    protected privSynthesizerConfig: SynthesizerConfig;\r\n    protected privSpeechSynthesizer: SpeechSynthesizer;\r\n    protected privSuccessCallback: (e: SpeechSynthesisResult) => void;\r\n    protected privErrorCallback: (e: string) => void;\r\n\r\n    public get synthesisContext(): SynthesisContext {\r\n        return this.privSynthesisContext;\r\n    }\r\n\r\n    public get agentConfig(): AgentConfig {\r\n        return this.privAgentConfig;\r\n    }\r\n\r\n    public get connectionEvents(): EventSource<ConnectionEvent> {\r\n        return this.privConnectionEvents;\r\n    }\r\n\r\n    public get serviceEvents(): EventSource<ServiceEvent> {\r\n        return this.privServiceEvents;\r\n    }\r\n\r\n    protected speakOverride: (ssml: string, requestId: string, sc: (e: SpeechSynthesisResult) => void, ec: (e: string) => void) => any = undefined;\r\n\r\n    // Called when telemetry data is sent to the service.\r\n    // Used for testing Telemetry capture.\r\n    public static telemetryData: (json: string) => void;\r\n    public static telemetryDataEnabled: boolean = true;\r\n\r\n    public set activityTemplate(messagePayload: string) { this.privActivityTemplate = messagePayload; }\r\n    public get activityTemplate(): string { return this.privActivityTemplate; }\r\n\r\n    protected receiveMessageOverride: () => any = undefined;\r\n\r\n    protected connectImplOverride: (isUnAuthorized: boolean) => any = undefined;\r\n\r\n    protected configConnectionOverride: (connection: IConnection) => any = undefined;\r\n\r\n    public set audioOutputFormat(format: AudioOutputFormatImpl) {\r\n        this.privAudioOutputFormat = format;\r\n        this.privSynthesisTurn.audioOutputFormat = format;\r\n        if (this.privSessionAudioDestination !== undefined) {\r\n            this.privSessionAudioDestination.format = format;\r\n        }\r\n        if (this.synthesisContext !== undefined) {\r\n            this.synthesisContext.audioOutputFormat = format;\r\n        }\r\n    }\r\n    private privAuthentication: IAuthentication;\r\n    private privConnectionFactory: ISynthesisConnectionFactory;\r\n\r\n    // A promise for a configured connection.\r\n    // Do not consume directly, call fetchConnection instead.\r\n    private privConnectionConfigurationPromise: Promise<IConnection>;\r\n\r\n    // A promise for a connection, but one that has not had the speech context sent yet.\r\n    // Do not consume directly, call fetchConnection instead.\r\n    private privConnectionPromise: Promise<IConnection>;\r\n    private privAuthFetchEventId: string;\r\n    private privIsDisposed: boolean;\r\n    private privConnectionEvents: EventSource<ConnectionEvent>;\r\n    private privServiceEvents: EventSource<ServiceEvent>;\r\n    private privSynthesisContext: SynthesisContext;\r\n    private privAgentConfig: AgentConfig;\r\n    private privServiceHasSentMessage: boolean;\r\n    private privActivityTemplate: string;\r\n    private privAudioOutputFormat: AudioOutputFormatImpl;\r\n    private privSessionAudioDestination: IAudioDestination;\r\n\r\n    public constructor(\r\n        authentication: IAuthentication,\r\n        connectionFactory: ISynthesisConnectionFactory,\r\n        synthesizerConfig: SynthesizerConfig,\r\n        speechSynthesizer: SpeechSynthesizer,\r\n        audioDestination: IAudioDestination) {\r\n\r\n        if (!authentication) {\r\n            throw new ArgumentNullError(\"authentication\");\r\n        }\r\n\r\n        if (!connectionFactory) {\r\n            throw new ArgumentNullError(\"connectionFactory\");\r\n        }\r\n\r\n        if (!synthesizerConfig) {\r\n            throw new ArgumentNullError(\"synthesizerConfig\");\r\n        }\r\n\r\n        this.privAuthentication = authentication;\r\n        this.privConnectionFactory = connectionFactory;\r\n        this.privSynthesizerConfig = synthesizerConfig;\r\n        this.privIsDisposed = false;\r\n        this.privSpeechSynthesizer = speechSynthesizer;\r\n        this.privSessionAudioDestination = audioDestination;\r\n        this.privSynthesisTurn = new SynthesisTurn();\r\n        this.privConnectionEvents = new EventSource<ConnectionEvent>();\r\n        this.privServiceEvents = new EventSource<ServiceEvent>();\r\n        this.privSynthesisContext = new SynthesisContext(this.privSpeechSynthesizer);\r\n        this.privAgentConfig = new AgentConfig();\r\n\r\n        this.connectionEvents.attach((connectionEvent: ConnectionEvent): void => {\r\n            if (connectionEvent.name === \"ConnectionClosedEvent\") {\r\n                const connectionClosedEvent = connectionEvent as ConnectionClosedEvent;\r\n                if (connectionClosedEvent.statusCode !== 1000) {\r\n                    this.cancelSynthesisLocal(CancellationReason.Error,\r\n                        connectionClosedEvent.statusCode === 1007 ? CancellationErrorCode.BadRequestParameters : CancellationErrorCode.ConnectionFailure,\r\n                        connectionClosedEvent.reason + \" websocket error code: \" + connectionClosedEvent.statusCode);\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    public static addHeader(audio: ArrayBuffer, format: AudioOutputFormatImpl): ArrayBuffer {\r\n        if (!format.hasHeader) {\r\n            return audio;\r\n        }\r\n        format.updateHeader(audio.byteLength);\r\n        const tmp = new Uint8Array(audio.byteLength + format.header.byteLength);\r\n        tmp.set(new Uint8Array(format.header), 0);\r\n        tmp.set(new Uint8Array(audio), format.header.byteLength);\r\n        return tmp.buffer;\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public async dispose(reason?: string): Promise<void> {\r\n        this.privIsDisposed = true;\r\n        if (this.privSessionAudioDestination !== undefined) {\r\n            this.privSessionAudioDestination.close();\r\n        }\r\n        if (this.privConnectionConfigurationPromise) {\r\n            const connection: IConnection = await this.privConnectionConfigurationPromise;\r\n            await connection.dispose(reason);\r\n        }\r\n    }\r\n\r\n    public async connect(): Promise<void> {\r\n        await this.connectImpl();\r\n    }\r\n\r\n    public async sendNetworkMessage(path: string, payload: string | ArrayBuffer): Promise<void> {\r\n        const type: MessageType = typeof payload === \"string\" ? MessageType.Text : MessageType.Binary;\r\n        const contentType: string = typeof payload === \"string\" ? \"application/json\" : \"\";\r\n\r\n        const connection: IConnection = await this.fetchConnection();\r\n        return connection.send(new SpeechConnectionMessage(type, path, this.privSynthesisTurn.requestId, contentType, payload));\r\n    }\r\n\r\n    public async Speak(\r\n        text: string,\r\n        isSSML: boolean,\r\n        requestId: string,\r\n        successCallback: (e: SpeechSynthesisResult) => void,\r\n        errorCallBack: (e: string) => void,\r\n        audioDestination: IAudioDestination,\r\n    ): Promise<void> {\r\n\r\n        let ssml: string;\r\n\r\n        if (isSSML) {\r\n            ssml = text;\r\n        } else {\r\n            ssml = this.privSpeechSynthesizer.buildSsml(text);\r\n        }\r\n\r\n        if (this.speakOverride !== undefined) {\r\n            return this.speakOverride(ssml, requestId, successCallback, errorCallBack);\r\n        }\r\n\r\n        this.privSuccessCallback = successCallback;\r\n        this.privErrorCallback = errorCallBack;\r\n\r\n        this.privSynthesisTurn.startNewSynthesis(requestId, text, isSSML, audioDestination);\r\n\r\n        try {\r\n            await this.connectImpl();\r\n            const connection: IConnection = await this.fetchConnection();\r\n            await this.sendSynthesisContext(connection);\r\n            await this.sendSsmlMessage(connection, ssml, requestId);\r\n            const synthesisStartEventArgs: SpeechSynthesisEventArgs = new SpeechSynthesisEventArgs(\r\n                new SpeechSynthesisResult(\r\n                    requestId,\r\n                    ResultReason.SynthesizingAudioStarted,\r\n                )\r\n            );\r\n\r\n            if (!!this.privSpeechSynthesizer.synthesisStarted) {\r\n                this.privSpeechSynthesizer.synthesisStarted(this.privSpeechSynthesizer, synthesisStartEventArgs);\r\n            }\r\n\r\n            const messageRetrievalPromise = this.receiveMessage();\r\n        } catch (e) {\r\n            this.cancelSynthesisLocal(CancellationReason.Error, CancellationErrorCode.ConnectionFailure, e);\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n\r\n    // Cancels synthesis.\r\n    protected cancelSynthesis(\r\n        requestId: string,\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n        const properties: PropertyCollection = new PropertyCollection();\r\n        properties.setProperty(CancellationErrorCodePropertyName, CancellationErrorCode[errorCode]);\r\n        const result: SpeechSynthesisResult = new SpeechSynthesisResult(\r\n            requestId,\r\n            ResultReason.Canceled,\r\n            undefined,\r\n            error,\r\n            properties\r\n        );\r\n\r\n        if (!!this.privSpeechSynthesizer.SynthesisCanceled) {\r\n            const cancelEvent: SpeechSynthesisEventArgs = new SpeechSynthesisEventArgs(result);\r\n            try {\r\n                this.privSpeechSynthesizer.SynthesisCanceled(this.privSpeechSynthesizer, cancelEvent);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n\r\n        if (!!this.privSuccessCallback) {\r\n            try {\r\n                this.privSuccessCallback(result);\r\n                /* tslint:disable:no-empty */\r\n            } catch { }\r\n        }\r\n    }\r\n\r\n    // Cancels synthesis.\r\n    protected cancelSynthesisLocal(\r\n        cancellationReason: CancellationReason,\r\n        errorCode: CancellationErrorCode,\r\n        error: string): void {\r\n\r\n        if (!!this.privSynthesisTurn.isSynthesizing) {\r\n            this.privSynthesisTurn.onStopSynthesizing();\r\n\r\n            this.cancelSynthesis(\r\n                this.privSynthesisTurn.requestId,\r\n                cancellationReason,\r\n                errorCode,\r\n                error);\r\n        }\r\n    }\r\n\r\n    protected processTypeSpecificMessages(\r\n        connectionMessage: SpeechConnectionMessage,\r\n        successCallback?: (e: SpeechSynthesisResult) => void,\r\n        errorCallBack?: (e: string) => void): boolean {\r\n        return true;\r\n    }\r\n\r\n    protected async receiveMessage(): Promise<void> {\r\n        try {\r\n            const connection: IConnection = await this.fetchConnection();\r\n            const message: ConnectionMessage = await connection.read();\r\n\r\n            if (this.receiveMessageOverride !== undefined) {\r\n                return this.receiveMessageOverride();\r\n            }\r\n            if (this.privIsDisposed) {\r\n                // We're done.\r\n                return;\r\n            }\r\n\r\n            // indicates we are draining the queue and it came with no message;\r\n            if (!message) {\r\n                if (!this.privSynthesisTurn.isSynthesizing) {\r\n                    return;\r\n                } else {\r\n                    return this.receiveMessage();\r\n                }\r\n            }\r\n\r\n            this.privServiceHasSentMessage = true;\r\n\r\n            const connectionMessage = SpeechConnectionMessage.fromConnectionMessage(message);\r\n\r\n            if (connectionMessage.requestId.toLowerCase() === this.privSynthesisTurn.requestId.toLowerCase()) {\r\n                switch (connectionMessage.path.toLowerCase()) {\r\n                    case \"turn.start\":\r\n                        this.privSynthesisTurn.onServiceTurnStartResponse();\r\n                        break;\r\n                    case \"response\":\r\n                        this.privSynthesisTurn.onServiceResponseMessage(connectionMessage.textBody);\r\n                        break;\r\n                    case \"audio\":\r\n                        if (this.privSynthesisTurn.streamId.toLowerCase() === connectionMessage.streamId.toLowerCase()\r\n                            && !!connectionMessage.binaryBody) {\r\n                            this.privSynthesisTurn.onAudioChunkReceived(connectionMessage.binaryBody);\r\n                            if (!!this.privSpeechSynthesizer.synthesizing) {\r\n                                try {\r\n                                    const audioWithHeader = SynthesisAdapterBase.addHeader(connectionMessage.binaryBody, this.privSynthesisTurn.audioOutputFormat);\r\n                                    const ev: SpeechSynthesisEventArgs = new SpeechSynthesisEventArgs(\r\n                                        new SpeechSynthesisResult(\r\n                                            this.privSynthesisTurn.requestId,\r\n                                            ResultReason.SynthesizingAudio,\r\n                                            audioWithHeader));\r\n                                    this.privSpeechSynthesizer.synthesizing(this.privSpeechSynthesizer, ev);\r\n                                } catch (error) {\r\n                                    // Not going to let errors in the event handler\r\n                                    // trip things up.\r\n                                }\r\n                            }\r\n                            if (this.privSessionAudioDestination !== undefined) {\r\n                                this.privSessionAudioDestination.write(connectionMessage.binaryBody);\r\n                            }\r\n                        }\r\n                        break;\r\n                    case \"audio.metadata\":\r\n                        const metadataList = SynthesisAudioMetadata.fromJSON(connectionMessage.textBody).Metadata;\r\n                        for (const metadata of metadataList) {\r\n                            switch (metadata.Type) {\r\n                                case MetadataType.WordBoundary:\r\n                                    this.privSynthesisTurn.onWordBoundaryEvent(metadata.Data.text.Text);\r\n\r\n                                    const wordBoundaryEventArgs: SpeechSynthesisWordBoundaryEventArgs = new SpeechSynthesisWordBoundaryEventArgs(\r\n                                        metadata.Data.Offset,\r\n                                        metadata.Data.text.Text,\r\n                                        metadata.Data.text.Length,\r\n                                        this.privSynthesisTurn.currentTextOffset);\r\n\r\n                                    if (!!this.privSpeechSynthesizer.wordBoundary) {\r\n                                        try {\r\n                                            this.privSpeechSynthesizer.wordBoundary(this.privSpeechSynthesizer, wordBoundaryEventArgs);\r\n                                        } catch (error) {\r\n                                            // Not going to let errors in the event handler\r\n                                            // trip things up.\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case MetadataType.Bookmark:\r\n                                    const bookmarkEventArgs: SpeechSynthesisBookmarkEventArgs = new SpeechSynthesisBookmarkEventArgs(\r\n                                        metadata.Data.Offset,\r\n                                        metadata.Data.Bookmark);\r\n\r\n                                    if (!!this.privSpeechSynthesizer.bookmarkReached) {\r\n                                        try {\r\n                                            this.privSpeechSynthesizer.bookmarkReached(this.privSpeechSynthesizer, bookmarkEventArgs);\r\n                                        } catch (error) {\r\n                                            // Not going to let errors in the event handler\r\n                                            // trip things up.\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case MetadataType.Viseme:\r\n\r\n                                    this.privSynthesisTurn.onVisemeMetadataReceived(metadata);\r\n\r\n                                    if (metadata.Data.IsLastAnimation) {\r\n                                        const visemeEventArgs: SpeechSynthesisVisemeEventArgs = new SpeechSynthesisVisemeEventArgs(\r\n                                            metadata.Data.Offset,\r\n                                            metadata.Data.VisemeId,\r\n                                            this.privSynthesisTurn.getAndClearVisemeAnimation());\r\n\r\n                                        if (!!this.privSpeechSynthesizer.visemeReceived) {\r\n                                            try {\r\n                                                this.privSpeechSynthesizer.visemeReceived(this.privSpeechSynthesizer, visemeEventArgs);\r\n                                            } catch (error) {\r\n                                                // Not going to let errors in the event handler\r\n                                                // trip things up.\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                            }\r\n                        }\r\n                        break;\r\n                    case \"turn.end\":\r\n                        this.privSynthesisTurn.onServiceTurnEndResponse();\r\n                        let result: SpeechSynthesisResult;\r\n                        try {\r\n                            const audioBuffer: ArrayBuffer = await this.privSynthesisTurn.getAllReceivedAudioWithHeader();\r\n                            result = new SpeechSynthesisResult(\r\n                                this.privSynthesisTurn.requestId,\r\n                                ResultReason.SynthesizingAudioCompleted,\r\n                                audioBuffer\r\n                            );\r\n                            if (!!this.privSuccessCallback) {\r\n                                this.privSuccessCallback(result);\r\n                            }\r\n                        } catch (error) {\r\n                            if (!!this.privErrorCallback) {\r\n                                this.privErrorCallback(error);\r\n                            }\r\n                        }\r\n                        if (this.privSpeechSynthesizer.synthesisCompleted) {\r\n                            try {\r\n                                this.privSpeechSynthesizer.synthesisCompleted(\r\n                                    this.privSpeechSynthesizer,\r\n                                    new SpeechSynthesisEventArgs(result)\r\n                                );\r\n                            } catch (e) {\r\n                                // Not going to let errors in the event handler\r\n                                // trip things up.\r\n                            }\r\n                        }\r\n                        break;\r\n\r\n                    default:\r\n\r\n                        if (!this.processTypeSpecificMessages(connectionMessage)) {\r\n                            // here are some messages that the derived class has not processed, dispatch them to connect class\r\n                            if (!!this.privServiceEvents) {\r\n                                this.serviceEvents.onEvent(new ServiceEvent(connectionMessage.path.toLowerCase(), connectionMessage.textBody));\r\n                            }\r\n                        }\r\n\r\n                }\r\n            }\r\n\r\n            return this.receiveMessage();\r\n\r\n        } catch (e) {\r\n            // TODO: What goes here?\r\n        }\r\n    }\r\n\r\n    protected sendSynthesisContext = (connection: IConnection): Promise<void> => {\r\n        const synthesisContextJson = this.synthesisContext.toJSON();\r\n\r\n        if (synthesisContextJson) {\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"synthesis.context\",\r\n                this.privSynthesisTurn.requestId,\r\n                \"application/json\",\r\n                synthesisContextJson));\r\n        }\r\n        return;\r\n    }\r\n\r\n    protected connectImpl(isUnAuthorized: boolean = false): Promise<IConnection> {\r\n        if (this.privConnectionPromise) {\r\n            return this.privConnectionPromise.then((connection: IConnection): Promise<IConnection> => {\r\n                if (connection.state() === ConnectionState.Disconnected) {\r\n                    this.privConnectionId = null;\r\n                    this.privConnectionPromise = null;\r\n                    this.privServiceHasSentMessage = false;\r\n                    return this.connectImpl();\r\n                }\r\n                return this.privConnectionPromise;\r\n            }, (error: string): Promise<IConnection> => {\r\n                this.privConnectionId = null;\r\n                this.privConnectionPromise = null;\r\n                this.privServiceHasSentMessage = false;\r\n                return this.connectImpl();\r\n            });\r\n        }\r\n        this.privAuthFetchEventId = createNoDashGuid();\r\n        this.privConnectionId = createNoDashGuid();\r\n\r\n        this.privSynthesisTurn.onPreConnectionStart(this.privAuthFetchEventId, this.privConnectionId);\r\n\r\n        const authPromise = isUnAuthorized ? this.privAuthentication.fetchOnExpiry(this.privAuthFetchEventId) : this.privAuthentication.fetch(this.privAuthFetchEventId);\r\n\r\n        this.privConnectionPromise = authPromise.then(async (result: AuthInfo) => {\r\n            await this.privSynthesisTurn.onAuthCompleted(false);\r\n\r\n            const connection: IConnection = this.privConnectionFactory.create(this.privSynthesizerConfig, result, this.privConnectionId);\r\n\r\n            // Attach to the underlying event. No need to hold onto the detach pointers as in the event the connection goes away,\r\n            // it'll stop sending events.\r\n            connection.events.attach((event: ConnectionEvent) => {\r\n                this.connectionEvents.onEvent(event);\r\n            });\r\n            const response = await connection.open();\r\n            if (response.statusCode === 200) {\r\n                await this.privSynthesisTurn.onConnectionEstablishCompleted(response.statusCode);\r\n                return Promise.resolve(connection);\r\n            } else if (response.statusCode === 403 && !isUnAuthorized) {\r\n                return this.connectImpl(true);\r\n            } else {\r\n                await this.privSynthesisTurn.onConnectionEstablishCompleted(response.statusCode, response.reason);\r\n                return Promise.reject(`Unable to contact server. StatusCode: ${response.statusCode}, ${this.privSynthesizerConfig.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint)} Reason: ${response.reason}`);\r\n            }\r\n        }, async (error: string): Promise<IConnection> => {\r\n            await this.privSynthesisTurn.onAuthCompleted(true, error);\r\n            throw new Error(error);\r\n        });\r\n\r\n        // Attach an empty handler to allow the promise to run in the background while\r\n        // other startup events happen. It'll eventually be awaited on.\r\n        this.privConnectionPromise.catch(() => { });\r\n\r\n        return this.privConnectionPromise;\r\n    }\r\n    protected sendSpeechServiceConfig = (connection: IConnection, SpeechServiceConfigJson: string): Promise<void> => {\r\n        if (SpeechServiceConfigJson) {\r\n            return connection.send(new SpeechConnectionMessage(\r\n                MessageType.Text,\r\n                \"speech.config\",\r\n                this.privSynthesisTurn.requestId,\r\n                \"application/json\",\r\n                SpeechServiceConfigJson));\r\n        }\r\n    }\r\n\r\n    protected sendSsmlMessage = (connection: IConnection, ssml: string, requestId: string): Promise<void> => {\r\n        return connection.send(new SpeechConnectionMessage(\r\n            MessageType.Text,\r\n            \"ssml\",\r\n            requestId,\r\n            \"application/ssml+xml\",\r\n            ssml));\r\n    }\r\n\r\n    private async fetchConnection(): Promise<IConnection> {\r\n        if (this.privConnectionConfigurationPromise) {\r\n            return this.privConnectionConfigurationPromise.then((connection: IConnection): Promise<IConnection> => {\r\n                if (connection.state() === ConnectionState.Disconnected) {\r\n                    this.privConnectionId = null;\r\n                    this.privConnectionConfigurationPromise = null;\r\n                    this.privServiceHasSentMessage = false;\r\n                    return this.fetchConnection();\r\n                }\r\n                return this.privConnectionConfigurationPromise;\r\n            }, (error: string): Promise<IConnection> => {\r\n                this.privConnectionId = null;\r\n                this.privConnectionConfigurationPromise = null;\r\n                this.privServiceHasSentMessage = false;\r\n                return this.fetchConnection();\r\n            });\r\n        }\r\n        this.privConnectionConfigurationPromise = this.configureConnection();\r\n        return await this.privConnectionConfigurationPromise;\r\n    }\r\n\r\n    // Takes an established websocket connection to the endpoint and sends speech configuration information.\r\n    private async configureConnection(): Promise<IConnection> {\r\n        const connection: IConnection = await this.connectImpl();\r\n        if (this.configConnectionOverride !== undefined) {\r\n            return this.configConnectionOverride(connection);\r\n        }\r\n        await this.sendSpeechServiceConfig(connection, this.privSynthesizerConfig.SpeechServiceConfig.serialize());\r\n        return connection;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// tslint:disable:max-classes-per-file\r\n\r\nimport { EventType, PlatformEvent } from \"../common/Exports\";\r\n\r\nexport class SpeechSynthesisEvent extends PlatformEvent {\r\n    private privRequestId: string;\r\n\r\n    constructor(eventName: string, requestId: string, eventType: EventType = EventType.Info) {\r\n        super(eventName, eventType);\r\n\r\n        this.privRequestId = requestId;\r\n    }\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n}\r\n\r\nexport class SynthesisTriggeredEvent extends SpeechSynthesisEvent {\r\n    private privSessionAudioDestinationId: string;\r\n    private privTurnAudioDestinationId: string;\r\n\r\n    constructor(requestId: string, sessionAudioDestinationId: string, turnAudioDestinationId: string) {\r\n        super(\"SynthesisTriggeredEvent\", requestId);\r\n\r\n        this.privSessionAudioDestinationId = sessionAudioDestinationId;\r\n        this.privTurnAudioDestinationId = turnAudioDestinationId;\r\n    }\r\n\r\n    public get audioSessionDestinationId(): string {\r\n        return this.privSessionAudioDestinationId;\r\n    }\r\n\r\n    public get audioTurnDestinationId(): string {\r\n        return this.privTurnAudioDestinationId;\r\n    }\r\n}\r\n\r\nexport class ConnectingToSynthesisServiceEvent extends SpeechSynthesisEvent {\r\n    private privAuthFetchEventId: string;\r\n\r\n    constructor(requestId: string, authFetchEventId: string) {\r\n        super(\"ConnectingToSynthesisServiceEvent\", requestId);\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n    }\r\n\r\n    public get authFetchEventId(): string {\r\n        return this.privAuthFetchEventId;\r\n    }\r\n}\r\n\r\nexport class SynthesisStartedEvent extends SpeechSynthesisEvent {\r\n    private privAuthFetchEventId: string;\r\n\r\n    constructor(requestId: string, authFetchEventId: string) {\r\n        super(\"SynthesisStartedEvent\", requestId);\r\n\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n    }\r\n\r\n    public get authFetchEventId(): string {\r\n        return this.privAuthFetchEventId;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    createNoDashGuid,\r\n    Deferred,\r\n    Events, IAudioDestination\r\n} from \"../common/Exports\";\r\nimport { AudioOutputFormatImpl } from \"../sdk/Audio/AudioOutputFormat\";\r\nimport { PullAudioOutputStreamImpl } from \"../sdk/Audio/AudioOutputStream\";\r\nimport { ISynthesisMetadata } from \"./ServiceMessages/SynthesisAudioMetadata\";\r\nimport { SynthesisAdapterBase } from \"./SynthesisAdapterBase\";\r\nimport {\r\n    ConnectingToSynthesisServiceEvent,\r\n    SpeechSynthesisEvent,\r\n    SynthesisStartedEvent,\r\n    SynthesisTriggeredEvent,\r\n} from \"./SynthesisEvents\";\r\n\r\nexport interface ISynthesisResponseContext {\r\n    serviceTag: string;\r\n}\r\n\r\nexport interface ISynthesisResponseAudio {\r\n    type: string;\r\n    streamId: string;\r\n}\r\n\r\nexport interface ISynthesisResponse {\r\n    context: ISynthesisResponseContext;\r\n    audio: ISynthesisResponseAudio;\r\n}\r\n\r\nexport class SynthesisTurn {\r\n\r\n    public get requestId(): string {\r\n        return this.privRequestId;\r\n    }\r\n\r\n    public get streamId(): string {\r\n        return this.privStreamId;\r\n    }\r\n\r\n    public set streamId(value: string) {\r\n        this.privStreamId = value;\r\n    }\r\n\r\n    public get audioOutputFormat(): AudioOutputFormatImpl {\r\n        return this.privAudioOutputFormat;\r\n    }\r\n\r\n    public set audioOutputFormat(format: AudioOutputFormatImpl) {\r\n        this.privAudioOutputFormat = format;\r\n    }\r\n\r\n    public get turnCompletionPromise(): Promise<void> {\r\n        return this.privTurnDeferral.promise;\r\n    }\r\n\r\n    public get isSynthesisEnded(): boolean {\r\n        return this.privIsSynthesisEnded;\r\n    }\r\n\r\n    public get isSynthesizing(): boolean {\r\n        return this.privIsSynthesizing;\r\n    }\r\n\r\n    public get currentTextOffset(): number {\r\n        return this.privTextOffset;\r\n    }\r\n\r\n    // The number of bytes received for current turn\r\n    public get bytesReceived(): number {\r\n        return this.privBytesReceived;\r\n    }\r\n\r\n    private privIsDisposed: boolean = false;\r\n    private privAuthFetchEventId: string;\r\n    private privIsSynthesizing: boolean = false;\r\n    private privIsSynthesisEnded: boolean = false;\r\n    private privBytesReceived: number = 0;\r\n    private privRequestId: string;\r\n    private privStreamId: string;\r\n    private privTurnDeferral: Deferred<void>;\r\n    private privInTurn: boolean = false;\r\n    private privAudioOutputFormat: AudioOutputFormatImpl;\r\n    private privAudioOutputStream: PullAudioOutputStreamImpl;\r\n    private privReceivedAudio: ArrayBuffer;\r\n    private privReceivedAudioWithHeader: ArrayBuffer;\r\n    private privTextOffset: number = 0;\r\n    private privNextSearchTextIndex: number = 0;\r\n    private privPartialVisemeAnimation: string;\r\n    private privRawText: string;\r\n    private privIsSSML: boolean;\r\n    private privTurnAudioDestination: IAudioDestination;\r\n\r\n    constructor() {\r\n        this.privRequestId = createNoDashGuid();\r\n        this.privTurnDeferral = new Deferred<void>();\r\n\r\n        // We're not in a turn, so resolve.\r\n        this.privTurnDeferral.resolve();\r\n    }\r\n\r\n    public async getAllReceivedAudio(): Promise<ArrayBuffer> {\r\n        if (!!this.privReceivedAudio) {\r\n            return Promise.resolve(this.privReceivedAudio);\r\n        }\r\n        if (!this.privIsSynthesisEnded) {\r\n            return null;\r\n        }\r\n        await this.readAllAudioFromStream();\r\n        return Promise.resolve(this.privReceivedAudio);\r\n    }\r\n\r\n    public async getAllReceivedAudioWithHeader(): Promise<ArrayBuffer> {\r\n        if (!!this.privReceivedAudioWithHeader) {\r\n            return this.privReceivedAudioWithHeader;\r\n        }\r\n        if (!this.privIsSynthesisEnded) {\r\n            return null;\r\n        }\r\n        if (this.audioOutputFormat.hasHeader) {\r\n            const audio: ArrayBuffer = await this.getAllReceivedAudio();\r\n            this.privReceivedAudioWithHeader = SynthesisAdapterBase.addHeader(audio, this.audioOutputFormat);\r\n            return this.privReceivedAudioWithHeader;\r\n        } else {\r\n            return this.getAllReceivedAudio();\r\n        }\r\n    }\r\n\r\n    public startNewSynthesis(requestId: string, rawText: string, isSSML: boolean, audioDestination?: IAudioDestination): void {\r\n        this.privIsSynthesisEnded = false;\r\n        this.privIsSynthesizing = true;\r\n        this.privRequestId = requestId;\r\n        this.privRawText = rawText;\r\n        this.privIsSSML = isSSML;\r\n        this.privAudioOutputStream = new PullAudioOutputStreamImpl();\r\n        this.privAudioOutputStream.format = this.privAudioOutputFormat;\r\n        this.privReceivedAudio = null;\r\n        this.privReceivedAudioWithHeader = null;\r\n        this.privBytesReceived = 0;\r\n        this.privTextOffset = 0;\r\n        this.privNextSearchTextIndex = 0;\r\n        this.privPartialVisemeAnimation = \"\";\r\n        if (audioDestination !== undefined) {\r\n            this.privTurnAudioDestination = audioDestination;\r\n            this.privTurnAudioDestination.format = this.privAudioOutputFormat;\r\n        }\r\n        this.onEvent(new SynthesisTriggeredEvent(this.requestId, undefined, audioDestination === undefined ? undefined : audioDestination.id()));\r\n    }\r\n\r\n    public onPreConnectionStart = (authFetchEventId: string, connectionId: string): void => {\r\n        this.privAuthFetchEventId = authFetchEventId;\r\n        this.onEvent(new ConnectingToSynthesisServiceEvent(this.privRequestId, this.privAuthFetchEventId));\r\n    }\r\n\r\n    public onAuthCompleted = (isError: boolean, error?: string): void => {\r\n        if (isError) {\r\n            this.onComplete();\r\n        }\r\n    }\r\n\r\n    public onConnectionEstablishCompleted = (statusCode: number, reason?: string): void => {\r\n        if (statusCode === 200) {\r\n            this.onEvent(new SynthesisStartedEvent(this.requestId, this.privAuthFetchEventId));\r\n            this.privBytesReceived = 0;\r\n            return;\r\n        } else if (statusCode === 403) {\r\n            this.onComplete();\r\n        }\r\n    }\r\n\r\n    public onServiceResponseMessage = (responseJson: string): void => {\r\n        const response: ISynthesisResponse = JSON.parse(responseJson);\r\n        this.streamId = response.audio.streamId;\r\n    }\r\n\r\n    public onServiceTurnEndResponse = (): void => {\r\n        this.privInTurn = false;\r\n        this.privTurnDeferral.resolve();\r\n        this.onComplete();\r\n    }\r\n\r\n    public onServiceTurnStartResponse = (): void => {\r\n        if (!!this.privTurnDeferral && !!this.privInTurn) {\r\n            // What? How are we starting a turn with another not done?\r\n            this.privTurnDeferral.reject(\"Another turn started before current completed.\");\r\n            // Avoid UnhandledPromiseRejection if privTurnDeferral is not being awaited\r\n            /* tslint:disable:no-empty */\r\n            this.privTurnDeferral.promise.then().catch(() => { });\r\n        }\r\n        this.privInTurn = true;\r\n        this.privTurnDeferral = new Deferred<void>();\r\n    }\r\n\r\n    public onAudioChunkReceived(data: ArrayBuffer): void {\r\n        if (this.isSynthesizing) {\r\n            this.privAudioOutputStream.write(data);\r\n            this.privBytesReceived += data.byteLength;\r\n            if (this.privTurnAudioDestination !== undefined) {\r\n                this.privTurnAudioDestination.write(data);\r\n            }\r\n        }\r\n    }\r\n\r\n    public onWordBoundaryEvent(text: string): void {\r\n        this.updateTextOffset(text);\r\n    }\r\n\r\n    public onVisemeMetadataReceived(metadata: ISynthesisMetadata): void {\r\n        if (metadata.Data.AnimationChunk !== undefined) {\r\n            this.privPartialVisemeAnimation += metadata.Data.AnimationChunk;\r\n        }\r\n    }\r\n\r\n    public dispose = (error?: string): void => {\r\n        if (!this.privIsDisposed) {\r\n            // we should have completed by now. If we did not its an unknown error.\r\n            this.privIsDisposed = true;\r\n        }\r\n    }\r\n\r\n    public onStopSynthesizing(): void {\r\n        this.onComplete();\r\n    }\r\n\r\n    /**\r\n     * Gets the viseme animation string (merged from animation chunk), and clears the internal\r\n     * partial animation.\r\n     */\r\n    public getAndClearVisemeAnimation(): string {\r\n        const animation: string = this.privPartialVisemeAnimation;\r\n        this.privPartialVisemeAnimation = \"\";\r\n        return animation;\r\n    }\r\n\r\n    protected onEvent = (event: SpeechSynthesisEvent): void => {\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private updateTextOffset(text: string): void {\r\n        if (this.privTextOffset >= 0) {\r\n            this.privTextOffset = this.privRawText.indexOf(text, this.privNextSearchTextIndex);\r\n            if (this.privTextOffset >= 0) {\r\n                this.privNextSearchTextIndex = this.privTextOffset + text.length;\r\n            }\r\n            if (this.privIsSSML) {\r\n                if (this.privRawText.indexOf(\"<\", this.privTextOffset + 1) > this.privRawText.indexOf(\">\", this.privTextOffset + 1)) {\r\n                    this.updateTextOffset(text);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private onComplete = (): void => {\r\n        if (this.privIsSynthesizing) {\r\n            this.privIsSynthesizing = false;\r\n            this.privIsSynthesisEnded = true;\r\n            this.privAudioOutputStream.close();\r\n            this.privInTurn = false;\r\n            if (this.privTurnAudioDestination !== undefined) {\r\n                this.privTurnAudioDestination.close();\r\n                this.privTurnAudioDestination = undefined;\r\n            }\r\n        }\r\n    }\r\n\r\n    private async readAllAudioFromStream(): Promise<void> {\r\n        if (this.privIsSynthesisEnded) {\r\n            this.privReceivedAudio = new ArrayBuffer(this.bytesReceived);\r\n            try {\r\n                await this.privAudioOutputStream.read(this.privReceivedAudio);\r\n            } catch (e) {\r\n                this.privReceivedAudio = new ArrayBuffer(0);\r\n            }\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection } from \"../sdk/Exports\";\r\nimport {Context, SpeechServiceConfig} from \"./Exports\";\r\n\r\nexport enum SynthesisServiceType {\r\n    Standard,\r\n    Custom,\r\n}\r\n\r\nexport class SynthesizerConfig {\r\n    private privSynthesisServiceType: SynthesisServiceType = SynthesisServiceType.Standard;\r\n    private privSpeechServiceConfig: SpeechServiceConfig;\r\n    private privParameters: PropertyCollection;\r\n\r\n    constructor(\r\n        speechServiceConfig: SpeechServiceConfig,\r\n        parameters: PropertyCollection) {\r\n        this.privSpeechServiceConfig = speechServiceConfig ? speechServiceConfig : new SpeechServiceConfig(new Context(null));\r\n        this.privParameters = parameters;\r\n    }\r\n\r\n    public get parameters(): PropertyCollection {\r\n        return this.privParameters;\r\n    }\r\n\r\n    public get synthesisServiceType(): SynthesisServiceType {\r\n        return this.privSynthesisServiceType;\r\n    }\r\n\r\n    public set synthesisServiceType(value: SynthesisServiceType) {\r\n        this.privSynthesisServiceType = value;\r\n    }\r\n\r\n    public get SpeechServiceConfig(): SpeechServiceConfig {\r\n        return this.privSpeechServiceConfig;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { AudioOutputFormatImpl } from \"../sdk/Audio/AudioOutputFormat\";\r\nimport { SpeechSynthesizer } from \"../sdk/Exports\";\r\n\r\n/**\r\n * Represents the JSON used in the synthesis.context message sent to the speech service.\r\n * The dynamic grammar is always refreshed from the encapsulated dynamic grammar object.\r\n */\r\nexport class SynthesisContext {\r\n    private privContext: { [section: string]: any } = {};\r\n    private privSpeechSynthesizer: SpeechSynthesizer;\r\n    private privAudioOutputFormat: AudioOutputFormatImpl;\r\n\r\n    constructor(speechSynthesizer: SpeechSynthesizer) {\r\n        this.privSpeechSynthesizer = speechSynthesizer;\r\n    }\r\n\r\n    /**\r\n     * Adds a section to the synthesis.context object.\r\n     * @param sectionName Name of the section to add.\r\n     * @param value JSON serializable object that represents the value.\r\n     */\r\n    public setSection(sectionName: string, value: any): void {\r\n        this.privContext[sectionName] = value;\r\n    }\r\n\r\n    /**\r\n     * Sets the audio output format for synthesis context generation.\r\n     * @param format {AudioOutputFormatImpl} the output format\r\n     */\r\n    public set audioOutputFormat(format: AudioOutputFormatImpl) {\r\n        this.privAudioOutputFormat = format;\r\n    }\r\n\r\n    public toJSON(): string {\r\n\r\n        const synthesisSection: ISynthesisSection = this.buildSynthesisContext();\r\n        this.setSection(\"synthesis\", synthesisSection);\r\n\r\n        return JSON.stringify(this.privContext);\r\n    }\r\n\r\n    private buildSynthesisContext(): ISynthesisSection {\r\n        return {\r\n            audio: {\r\n                metadataOptions: {\r\n                    bookmarkEnabled: (!!this.privSpeechSynthesizer.bookmarkReached),\r\n                    sentenceBoundaryEnabled: false,\r\n                    visemeEnabled: (!!this.privSpeechSynthesizer.visemeReceived),\r\n                    wordBoundaryEnabled: (!!this.privSpeechSynthesizer.wordBoundary),\r\n                },\r\n                outputFormat: this.privAudioOutputFormat.requestAudioFormatString,\r\n            },\r\n            language: {\r\n                autoDetection: this.privSpeechSynthesizer.autoDetectSourceLanguage\r\n            }\r\n        };\r\n    }\r\n}\r\n\r\ninterface ISynthesisSection {\r\n    audio: {\r\n        outputFormat: string,\r\n        metadataOptions: {\r\n            bookmarkEnabled: boolean,\r\n            wordBoundaryEnabled: boolean,\r\n            visemeEnabled: boolean,\r\n            sentenceBoundaryEnabled: boolean,\r\n        }\r\n    };\r\n    language: {\r\n        autoDetection: boolean\r\n    };\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { PropertyCollection } from \"../sdk/Exports\";\r\nimport { Context } from \"./Exports\";\r\n\r\nexport class SpeakerRecognitionConfig {\r\n    private privParameters: PropertyCollection;\r\n    private privContext: Context;\r\n\r\n    constructor(\r\n        context: Context,\r\n        parameters: PropertyCollection) {\r\n        this.privContext = context ? context : new Context(null);\r\n        this.privParameters = parameters;\r\n    }\r\n\r\n    public get parameters(): PropertyCollection {\r\n        return this.privParameters;\r\n    }\r\n\r\n    public get Context(): Context {\r\n        return this.privContext;\r\n    }\r\n}\r\n","import {\r\n    IRequestOptions,\r\n    IRestResponse,\r\n    RestConfigBase,\r\n    RestMessageAdapter,\r\n    RestRequestType,\r\n} from \"../common.browser/Exports\";\r\nimport {\r\n    createNoDashGuid,\r\n    Deferred,\r\n    IAudioSource,\r\n    PromiseResult,\r\n} from \"../common/Exports\";\r\nimport {\r\n    PropertyId,\r\n    SpeakerIdentificationModel,\r\n    SpeakerVerificationModel,\r\n    VoiceProfile,\r\n    VoiceProfileType,\r\n} from \"../sdk/Exports\";\r\nimport { SpeakerRecognitionConfig } from \"./Exports\";\r\n\r\n/**\r\n * Implements methods for speaker recognition classes, sending requests to endpoint\r\n * and parsing response into expected format\r\n * @class SpeakerIdMessageAdapter\r\n */\r\nexport class SpeakerIdMessageAdapter {\r\n    private privRestAdapter: RestMessageAdapter;\r\n    private privUri: string;\r\n\r\n    public constructor(config: SpeakerRecognitionConfig) {\r\n\r\n        let endpoint = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Endpoint, undefined);\r\n        if (!endpoint) {\r\n            const region: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Region, \"westus\");\r\n            const hostSuffix: string = (region && region.toLowerCase().startsWith(\"china\")) ? \".azure.cn\" : \".microsoft.com\";\r\n            const host: string = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Host, \"https://\" + region + \".api.cognitive\" + hostSuffix + \"/speaker/{mode}/v2.0/{dependency}\");\r\n            endpoint = host + \"/profiles\";\r\n        }\r\n        this.privUri = endpoint;\r\n\r\n        const options: IRequestOptions = RestConfigBase.requestOptions;\r\n        options.headers[RestConfigBase.configParams.subscriptionKey] = config.parameters.getProperty(PropertyId.SpeechServiceConnection_Key, undefined);\r\n\r\n        this.privRestAdapter = new RestMessageAdapter(options);\r\n    }\r\n\r\n    /**\r\n     * Sends create profile request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfileType} profileType - type of voice profile to create.\r\n     * @param {string} lang - language/locale of voice profile\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} promised rest response containing id of created profile.\r\n     */\r\n    public createProfile(profileType: VoiceProfileType, lang: string):\r\n        Promise<IRestResponse> {\r\n\r\n        const uri = this.getOperationUri(profileType);\r\n        this.privRestAdapter.setHeaders(RestConfigBase.configParams.contentTypeKey, \"application/json\");\r\n        return this.privRestAdapter.request(RestRequestType.Post, uri, {}, { locale: lang });\r\n    }\r\n\r\n    /**\r\n     * Sends create enrollment request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfile} profileType - voice profile for which to create new enrollment.\r\n     * @param {IAudioSource} audioSource - audioSource from which to pull data to send\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to enrollment request.\r\n     */\r\n    public createEnrollment(profile: VoiceProfile, audioSource: IAudioSource):\r\n        Promise<IRestResponse> {\r\n\r\n        this.privRestAdapter.setHeaders(RestConfigBase.configParams.contentTypeKey, \"multipart/form-data\");\r\n        const uri = this.getOperationUri(profile.profileType) + \"/\" + profile.profileId + \"/enrollments\";\r\n        return audioSource.blob.then<IRestResponse>((result: Blob | Buffer): Promise<IRestResponse> => {\r\n            return this.privRestAdapter.request(RestRequestType.File, uri, { ignoreMinLength: \"true\" }, null, result);\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Sends verification request to endpoint.\r\n     * @function\r\n     * @param {SpeakerVerificationModel} model - voice model to verify against.\r\n     * @param {IAudioSource} audioSource - audioSource from which to pull data to send\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to enrollment request.\r\n     */\r\n    public async verifySpeaker(model: SpeakerVerificationModel, audioSource: IAudioSource):\r\n        Promise<IRestResponse> {\r\n\r\n        this.privRestAdapter.setHeaders(RestConfigBase.configParams.contentTypeKey, \"multipart/form-data\");\r\n        const uri = this.getOperationUri(model.voiceProfile.profileType) + \"/\" + model.voiceProfile.profileId + \"/verify\";\r\n        try {\r\n            const result: Blob | Buffer = await audioSource.blob;\r\n            return this.privRestAdapter.request(RestRequestType.File, uri, { ignoreMinLength: \"true\" }, null, result);\r\n        } catch (e) {\r\n            return Promise.resolve({ data: e } as IRestResponse);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sends identification request to endpoint.\r\n     * @function\r\n     * @param {SpeakerIdentificationModel} model - voice profiles against which to identify.\r\n     * @param {IAudioSource} audioSource - audioSource from which to pull data to send\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to enrollment request.\r\n     */\r\n    public async identifySpeaker(model: SpeakerIdentificationModel, audioSource: IAudioSource):\r\n        Promise<IRestResponse> {\r\n\r\n        this.privRestAdapter.setHeaders(RestConfigBase.configParams.contentTypeKey, \"multipart/form-data\");\r\n        const uri = this.getOperationUri(VoiceProfileType.TextIndependentIdentification) + \"/identifySingleSpeaker\";\r\n        try {\r\n            const result: Blob | Buffer = await audioSource.blob;\r\n            return this.privRestAdapter.request(RestRequestType.File, uri, { profileIds: model.voiceProfileIds, ignoreMinLength: \"true\" }, null, result);\r\n        } catch (e) {\r\n            return Promise.resolve({ data: e } as IRestResponse);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sends profile status request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfile} profile - voice profile to check.\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to status request\r\n     */\r\n    public getProfileStatus(profile: VoiceProfile): Promise<IRestResponse> {\r\n\r\n        const uri = `${this.getOperationUri(profile.profileType)}/${profile.profileId}`;\r\n        return this.privRestAdapter.request(RestRequestType.Get, uri, {});\r\n    }\r\n\r\n    /**\r\n     * Sends get all profiles request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfileType} profileType - type of profiles to return list of\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} promised rest response containing all profiles\r\n     */\r\n    public getProfiles(profileType: VoiceProfileType): Promise<IRestResponse> {\r\n        const uri = this.getOperationUri(profileType);\r\n        return this.privRestAdapter.request(RestRequestType.Get, uri, {});\r\n    }\r\n\r\n    /**\r\n     * Sends get authorization phrases request to endpoint.\r\n     * @function\r\n     * @param {string} lang - language/locale of voice profile\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} promised rest response containing list of valid phrases\r\n     */\r\n    public getAuthorizationPhrases(lang: string): Promise<IRestResponse> {\r\n        const uri = `${this.getOperationUri(VoiceProfileType.TextDependentVerification)}`.replace(`profiles`, `phrases`) + \"/\" + lang;\r\n        return this.privRestAdapter.request(RestRequestType.Get, uri, {});\r\n    }\r\n\r\n    /**\r\n     * Sends delete profile request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfile} profile - voice profile to delete.\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to deletion request\r\n     */\r\n    public deleteProfile(profile: VoiceProfile): Promise<IRestResponse> {\r\n\r\n        const uri = this.getOperationUri(profile.profileType) + \"/\" + profile.profileId;\r\n        return this.privRestAdapter.request(RestRequestType.Delete, uri, {});\r\n    }\r\n\r\n    /**\r\n     * Sends reset profile request to endpoint.\r\n     * @function\r\n     * @param {VoiceProfile} profile - voice profile to reset enrollments for.\r\n     * @public\r\n     * @returns {Promise<IRestResponse>} rest response to reset request\r\n     */\r\n    public resetProfile(profile: VoiceProfile): Promise<IRestResponse> {\r\n\r\n        const uri = this.getOperationUri(profile.profileType) + \"/\" + profile.profileId + \"/reset\";\r\n        return this.privRestAdapter.request(RestRequestType.Post, uri, {});\r\n    }\r\n\r\n    private getOperationUri(profileType: VoiceProfileType): string {\r\n\r\n        const mode = profileType === VoiceProfileType.TextIndependentIdentification ? \"identification\" : \"verification\";\r\n        const dependency = profileType === VoiceProfileType.TextDependentVerification ? \"text-dependent\" : \"text-independent\";\r\n        return this.privUri.replace(\"{mode}\", mode).replace(\"{dependency}\", dependency);\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\n// Make sure not to export internal modules.\r\n//\r\nexport * from \"./CognitiveSubscriptionKeyAuthentication\";\r\nexport * from \"./CognitiveTokenAuthentication\";\r\nexport * from \"./IAuthentication\";\r\nexport * from \"./IConnectionFactory\";\r\nexport * from \"./ISynthesisConnectionFactory\";\r\nexport * from \"./IntentConnectionFactory\";\r\nexport * from \"./RecognitionEvents\";\r\nexport * from \"./ServiceRecognizerBase\";\r\nexport * from \"./RecognizerConfig\";\r\nexport * from \"./SpeechServiceInterfaces\";\r\nexport * from \"./WebsocketMessageFormatter\";\r\nexport * from \"./SpeechConnectionFactory\";\r\nexport * from \"./TranscriberConnectionFactory\";\r\nexport * from \"./TranslationConnectionFactory\";\r\nexport * from \"./SpeechSynthesisConnectionFactory\";\r\nexport * from \"./EnumTranslation\";\r\nexport * from \"./ServiceMessages/Enums\";\r\nexport * from \"./ServiceMessages/TranslationSynthesisEnd\";\r\nexport * from \"./ServiceMessages/TranslationHypothesis\";\r\nexport * from \"./ServiceMessages/TranslationPhrase\";\r\nexport * from \"./TranslationServiceRecognizer\";\r\nexport * from \"./ServiceMessages/SpeechDetected\";\r\nexport * from \"./ServiceMessages/SpeechHypothesis\";\r\nexport * from \"./ServiceMessages/SpeechKeyword\";\r\nexport * from \"./SpeechServiceRecognizer\";\r\nexport * from \"./TranscriptionServiceRecognizer\";\r\nexport * from \"./ServiceMessages/DetailedSpeechPhrase\";\r\nexport * from \"./ServiceMessages/SimpleSpeechPhrase\";\r\nexport * from \"./AddedLmIntent\";\r\nexport * from \"./IntentServiceRecognizer\";\r\nexport * from \"./ServiceMessages/IntentResponse\";\r\nexport * from \"./RequestSession\";\r\nexport * from \"./SpeechContext\";\r\nexport * from \"./DynamicGrammarBuilder\";\r\nexport * from \"./DynamicGrammarInterfaces\";\r\nexport * from \"./DialogServiceAdapter\";\r\nexport * from \"./AgentConfig\";\r\nexport * from \"./Transcription/Exports\";\r\nexport * from \"./ServiceMessages/SynthesisAudioMetadata\";\r\nexport * from \"./SynthesisTurn\";\r\nexport * from \"./SynthesisAdapterBase\";\r\nexport * from \"./SynthesizerConfig\";\r\nexport * from \"./SynthesisContext\";\r\nexport * from \"./SpeakerRecognitionConfig\";\r\nexport * from \"./SpeakerIdMessageAdapter\";\r\n\r\nexport const OutputFormatPropertyName: string = \"OutputFormat\";\r\nexport const CancellationErrorCodePropertyName: string = \"CancellationErrorCode\";\r\nexport const ServicePropertiesPropertyName: string = \"ServiceProperties\";\r\nexport const ForceDictationPropertyName: string = \"ForceDictation\";\r\nexport const AutoDetectSourceLanguagesOpenRangeOptionName: string = \"OpenRange\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    connectivity,\r\n    ISpeechConfigAudioDevice,\r\n    type\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    AudioSourceErrorEvent,\r\n    AudioSourceEvent,\r\n    AudioSourceInitializingEvent,\r\n    AudioSourceOffEvent,\r\n    AudioSourceReadyEvent,\r\n    AudioStreamNodeAttachedEvent,\r\n    AudioStreamNodeAttachingEvent,\r\n    AudioStreamNodeDetachedEvent,\r\n    AudioStreamNodeErrorEvent,\r\n    ChunkedArrayBufferStream,\r\n    createNoDashGuid,\r\n    Deferred,\r\n    Events,\r\n    EventSource,\r\n    IAudioSource,\r\n    IAudioStreamNode,\r\n    IStringDictionary,\r\n    Stream,\r\n} from \"../common/Exports\";\r\nimport {\r\n    AudioStreamFormat,\r\n    AudioStreamFormatImpl,\r\n} from \"../sdk/Audio/AudioStreamFormat\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\n// Extending the default definition with browser specific definitions for backward compatibility\r\ninterface INavigator extends Navigator {\r\n    webkitGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n    mozGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n    msGetUserMedia?: (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback) => void;\r\n}\r\n\r\nexport const AudioWorkletSourceURLPropertyName = \"MICROPHONE-WorkletSourceUrl\";\r\n\r\nexport class MicAudioSource implements IAudioSource {\r\n\r\n    private static readonly AUDIOFORMAT: AudioStreamFormatImpl = AudioStreamFormat.getDefaultInputFormat() as AudioStreamFormatImpl;\r\n\r\n    private privStreams: IStringDictionary<Stream<ArrayBuffer>> = {};\r\n\r\n    private privId: string;\r\n\r\n    private privEvents: EventSource<AudioSourceEvent>;\r\n\r\n    private privInitializeDeferral: Deferred<void>;\r\n\r\n    private privMediaStream: MediaStream;\r\n\r\n    private privContext: AudioContext;\r\n\r\n    private privMicrophoneLabel: string;\r\n\r\n    private privOutputChunkSize: number;\r\n\r\n    public constructor(\r\n        private readonly privRecorder: IRecorder,\r\n        private readonly deviceId?: string,\r\n        audioSourceId?: string,\r\n        mediaStream?: MediaStream\r\n        ) {\r\n\r\n        this.privOutputChunkSize = MicAudioSource.AUDIOFORMAT.avgBytesPerSec / 10;\r\n        this.privId = audioSourceId ? audioSourceId : createNoDashGuid();\r\n        this.privEvents = new EventSource<AudioSourceEvent>();\r\n        this.privMediaStream = mediaStream || null;\r\n    }\r\n\r\n    public get format(): Promise<AudioStreamFormatImpl> {\r\n        return Promise.resolve(MicAudioSource.AUDIOFORMAT);\r\n    }\r\n\r\n    public get blob(): Promise<Blob> {\r\n        return Promise.reject(\"Not implemented for Mic input\");\r\n    }\r\n\r\n    public turnOn = (): Promise<void> => {\r\n        if (this.privInitializeDeferral) {\r\n            return this.privInitializeDeferral.promise;\r\n        }\r\n\r\n        this.privInitializeDeferral = new Deferred<void>();\r\n\r\n        try {\r\n            this.createAudioContext();\r\n        } catch (error) {\r\n            if (error instanceof Error) {\r\n                const typedError: Error = error as Error;\r\n                this.privInitializeDeferral.reject(typedError.name + \": \" + typedError.message);\r\n            } else {\r\n                this.privInitializeDeferral.reject(error);\r\n            }\r\n            return this.privInitializeDeferral.promise;\r\n        }\r\n\r\n        const nav = window.navigator as INavigator;\r\n\r\n        let getUserMedia = (\r\n            nav.getUserMedia ||\r\n            nav.webkitGetUserMedia ||\r\n            nav.mozGetUserMedia ||\r\n            nav.msGetUserMedia\r\n        );\r\n\r\n        if (!!nav.mediaDevices) {\r\n            getUserMedia = (constraints: MediaStreamConstraints, successCallback: NavigatorUserMediaSuccessCallback, errorCallback: NavigatorUserMediaErrorCallback): void => {\r\n                nav.mediaDevices\r\n                    .getUserMedia(constraints)\r\n                    .then(successCallback)\r\n                    .catch(errorCallback);\r\n            };\r\n        }\r\n\r\n        if (!getUserMedia) {\r\n            const errorMsg = \"Browser does not support getUserMedia.\";\r\n            this.privInitializeDeferral.reject(errorMsg);\r\n            this.onEvent(new AudioSourceErrorEvent(errorMsg, \"\")); // mic initialized error - no streamid at this point\r\n        } else {\r\n            const next = () => {\r\n                this.onEvent(new AudioSourceInitializingEvent(this.privId)); // no stream id\r\n                if (this.privMediaStream && this.privMediaStream.active) {\r\n                    this.onEvent(new AudioSourceReadyEvent(this.privId));\r\n                    this.privInitializeDeferral.resolve();\r\n                } else {\r\n                    getUserMedia(\r\n                        { audio: this.deviceId ? { deviceId: this.deviceId } : true, video: false },\r\n                        (mediaStream: MediaStream) => {\r\n                            this.privMediaStream = mediaStream;\r\n                            this.onEvent(new AudioSourceReadyEvent(this.privId));\r\n                            this.privInitializeDeferral.resolve();\r\n                        }, (error: MediaStreamError) => {\r\n                            const errorMsg = `Error occurred during microphone initialization: ${error}`;\r\n                            this.privInitializeDeferral.reject(errorMsg);\r\n                            this.onEvent(new AudioSourceErrorEvent(this.privId, errorMsg));\r\n                        });\r\n                }\r\n            };\r\n\r\n            if (this.privContext.state === \"suspended\") {\r\n                // NOTE: On iOS, the Web Audio API requires sounds to be triggered from an explicit user action.\r\n                // https://github.com/WebAudio/web-audio-api/issues/790\r\n                this.privContext.resume()\r\n                    .then(next)\r\n                    .catch((reason: any) => {\r\n                        this.privInitializeDeferral.reject(`Failed to initialize audio context: ${reason}`);\r\n                    });\r\n            } else {\r\n                next();\r\n            }\r\n        }\r\n\r\n        return this.privInitializeDeferral.promise;\r\n    }\r\n\r\n    public id = (): string => {\r\n        return this.privId;\r\n    }\r\n\r\n    public attach = (audioNodeId: string): Promise<IAudioStreamNode> => {\r\n        this.onEvent(new AudioStreamNodeAttachingEvent(this.privId, audioNodeId));\r\n\r\n        return this.listen(audioNodeId).then<IAudioStreamNode>(\r\n            (stream: Stream<ArrayBuffer>) => {\r\n                this.onEvent(new AudioStreamNodeAttachedEvent(this.privId, audioNodeId));\r\n                return {\r\n                    detach: async () => {\r\n                        stream.readEnded();\r\n                        delete this.privStreams[audioNodeId];\r\n                        this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n                        return this.turnOff();\r\n                    },\r\n                    id: () => {\r\n                        return audioNodeId;\r\n                    },\r\n                    read: () => {\r\n                        return stream.read();\r\n                    },\r\n                };\r\n            });\r\n    }\r\n\r\n    public detach = (audioNodeId: string): void => {\r\n        if (audioNodeId && this.privStreams[audioNodeId]) {\r\n            this.privStreams[audioNodeId].close();\r\n            delete this.privStreams[audioNodeId];\r\n            this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n        }\r\n    }\r\n\r\n    public async turnOff(): Promise<void> {\r\n        for (const streamId in this.privStreams) {\r\n            if (streamId) {\r\n                const stream = this.privStreams[streamId];\r\n                if (stream) {\r\n                    stream.close();\r\n                }\r\n            }\r\n        }\r\n\r\n        this.onEvent(new AudioSourceOffEvent(this.privId)); // no stream now\r\n        if (this.privInitializeDeferral) {\r\n            // Correctly handle when browser forces mic off before turnOn() completes\r\n            await this.privInitializeDeferral;\r\n            this.privInitializeDeferral = null;\r\n        }\r\n\r\n        await this.destroyAudioContext();\r\n\r\n        return;\r\n    }\r\n\r\n    public get events(): EventSource<AudioSourceEvent> {\r\n        return this.privEvents;\r\n    }\r\n\r\n    public get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\r\n        return this.getMicrophoneLabel().then((label: string) => {\r\n            return {\r\n                bitspersample: MicAudioSource.AUDIOFORMAT.bitsPerSample,\r\n                channelcount: MicAudioSource.AUDIOFORMAT.channels,\r\n                connectivity: connectivity.Unknown,\r\n                manufacturer: \"Speech SDK\",\r\n                model: label,\r\n                samplerate: MicAudioSource.AUDIOFORMAT.samplesPerSec,\r\n                type: type.Microphones,\r\n            };\r\n        });\r\n    }\r\n\r\n    public setProperty(name: string, value: string): void {\r\n        if (name === AudioWorkletSourceURLPropertyName) {\r\n            this.privRecorder.setWorkletUrl(value);\r\n        } else {\r\n            throw new Error(\"Property '\" + name + \"' is not supported on Microphone.\");\r\n        }\r\n    }\r\n\r\n    private getMicrophoneLabel(): Promise<string> {\r\n        const defaultMicrophoneName: string = \"microphone\";\r\n\r\n        // If we did this already, return the value.\r\n        if (this.privMicrophoneLabel !== undefined) {\r\n            return Promise.resolve(this.privMicrophoneLabel);\r\n        }\r\n\r\n        // If the stream isn't currently running, we can't query devices because security.\r\n        if (this.privMediaStream === undefined || !this.privMediaStream.active) {\r\n            return Promise.resolve(defaultMicrophoneName);\r\n        }\r\n\r\n        // Setup a default\r\n        this.privMicrophoneLabel = defaultMicrophoneName;\r\n\r\n        // Get the id of the device running the audio track.\r\n        const microphoneDeviceId: string = this.privMediaStream.getTracks()[0].getSettings().deviceId;\r\n\r\n        // If the browser doesn't support getting the device ID, set a default and return.\r\n        if (undefined === microphoneDeviceId) {\r\n            return Promise.resolve(this.privMicrophoneLabel);\r\n        }\r\n\r\n        const deferred: Deferred<string> = new Deferred<string>();\r\n\r\n        // Enumerate the media devices.\r\n        navigator.mediaDevices.enumerateDevices().then((devices: MediaDeviceInfo[]) => {\r\n            for (const device of devices) {\r\n                if (device.deviceId === microphoneDeviceId) {\r\n                    // Found the device\r\n                    this.privMicrophoneLabel = device.label;\r\n                    break;\r\n                }\r\n            }\r\n            deferred.resolve(this.privMicrophoneLabel);\r\n        }, () => deferred.resolve(this.privMicrophoneLabel));\r\n\r\n        return deferred.promise;\r\n    }\r\n\r\n    private listen = async (audioNodeId: string): Promise<Stream<ArrayBuffer>> => {\r\n        await this.turnOn();\r\n        const stream = new ChunkedArrayBufferStream(this.privOutputChunkSize, audioNodeId);\r\n        this.privStreams[audioNodeId] = stream;\r\n        try {\r\n            this.privRecorder.record(this.privContext, this.privMediaStream, stream);\r\n        } catch (error) {\r\n            this.onEvent(new AudioStreamNodeErrorEvent(this.privId, audioNodeId, error));\r\n            throw error;\r\n        }\r\n        const result: Stream<ArrayBuffer> = stream;\r\n        return result;\r\n    }\r\n\r\n    private onEvent = (event: AudioSourceEvent): void => {\r\n        this.privEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private createAudioContext = (): void => {\r\n        if (!!this.privContext) {\r\n            return;\r\n        }\r\n\r\n        this.privContext = AudioStreamFormatImpl.getAudioContext(MicAudioSource.AUDIOFORMAT.samplesPerSec);\r\n    }\r\n\r\n    private async destroyAudioContext(): Promise<void> {\r\n        if (!this.privContext) {\r\n            return;\r\n        }\r\n\r\n        this.privRecorder.releaseMediaResources(this.privContext);\r\n\r\n        // This pattern brought to you by a bug in the TypeScript compiler where it\r\n        // confuses the (\"close\" in this.privContext) with this.privContext always being null as the alternate.\r\n        // https://github.com/Microsoft/TypeScript/issues/11498\r\n        let hasClose: boolean = false;\r\n        if (\"close\" in this.privContext) {\r\n            hasClose = true;\r\n        }\r\n\r\n        if (hasClose) {\r\n            await this.privContext.close();\r\n            this.privContext = null;\r\n        } else if (null !== this.privContext && this.privContext.state === \"running\") {\r\n            // Suspend actually takes a callback, but analogous to the\r\n            // resume method, it'll be only fired if suspend is called\r\n            // in a direct response to a user action. The later is not always\r\n            // the case, as TurnOff is also called, when we receive an\r\n            // end-of-speech message from the service. So, doing a best effort\r\n            // fire-and-forget here.\r\n            await this.privContext.suspend();\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    connectivity,\r\n    ISpeechConfigAudioDevice,\r\n    type,\r\n} from \"../common.speech/Exports\";\r\nimport {\r\n    AudioSourceErrorEvent,\r\n    AudioSourceEvent,\r\n    AudioSourceInitializingEvent,\r\n    AudioSourceOffEvent,\r\n    AudioSourceReadyEvent,\r\n    AudioStreamNodeAttachedEvent,\r\n    AudioStreamNodeAttachingEvent,\r\n    AudioStreamNodeDetachedEvent,\r\n    AudioStreamNodeErrorEvent,\r\n    ChunkedArrayBufferStream,\r\n    createNoDashGuid,\r\n    Deferred,\r\n    Events,\r\n    EventSource,\r\n    IAudioSource,\r\n    IAudioStreamNode,\r\n    IStreamChunk,\r\n    IStringDictionary,\r\n    Stream,\r\n} from \"../common/Exports\";\r\nimport { AudioStreamFormat, AudioStreamFormatImpl } from \"../sdk/Audio/AudioStreamFormat\";\r\n\r\nexport class FileAudioSource implements IAudioSource {\r\n\r\n    private privAudioFormatPromise: Promise<AudioStreamFormatImpl>;\r\n\r\n    private privStreams: IStringDictionary<Stream<ArrayBuffer>> = {};\r\n\r\n    private privId: string;\r\n\r\n    private privEvents: EventSource<AudioSourceEvent>;\r\n\r\n    private privSource: Blob | Buffer;\r\n\r\n    private privFilename: string;\r\n\r\n    private privHeaderEnd: number = 44;\r\n\r\n    public constructor(file: File | Buffer, filename?: string, audioSourceId?: string) {\r\n        this.privId = audioSourceId ? audioSourceId : createNoDashGuid();\r\n        this.privEvents = new EventSource<AudioSourceEvent>();\r\n        this.privSource = file;\r\n        if (typeof window !== \"undefined\" && typeof Blob !== \"undefined\" && this.privSource instanceof Blob) {\r\n            this.privFilename = (file as File).name;\r\n        } else {\r\n            this.privFilename = filename || \"unknown.wav\";\r\n        }\r\n\r\n        // Read the header.\r\n        this.privAudioFormatPromise = this.readHeader();\r\n    }\r\n\r\n    public get format(): Promise<AudioStreamFormatImpl> {\r\n        return this.privAudioFormatPromise;\r\n    }\r\n\r\n    public get blob(): Promise<Blob | Buffer> {\r\n        return Promise.resolve(this.privSource);\r\n    }\r\n\r\n    public turnOn = (): Promise<void> => {\r\n        if (this.privFilename.lastIndexOf(\".wav\") !== this.privFilename.length - 4) {\r\n            const errorMsg = this.privFilename + \" is not supported. Only WAVE files are allowed at the moment.\";\r\n            this.onEvent(new AudioSourceErrorEvent(errorMsg, \"\"));\r\n            return Promise.reject(errorMsg);\r\n        }\r\n\r\n        this.onEvent(new AudioSourceInitializingEvent(this.privId)); // no stream id\r\n        this.onEvent(new AudioSourceReadyEvent(this.privId));\r\n        return;\r\n    }\r\n\r\n    public id = (): string => {\r\n        return this.privId;\r\n    }\r\n\r\n    public attach = async (audioNodeId: string): Promise<IAudioStreamNode> => {\r\n        this.onEvent(new AudioStreamNodeAttachingEvent(this.privId, audioNodeId));\r\n\r\n        const stream: Stream<ArrayBuffer> = await this.upload(audioNodeId);\r\n\r\n        this.onEvent(new AudioStreamNodeAttachedEvent(this.privId, audioNodeId));\r\n        return Promise.resolve({\r\n            detach: async (): Promise<void> => {\r\n                stream.readEnded();\r\n                delete this.privStreams[audioNodeId];\r\n                this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n                await this.turnOff();\r\n            },\r\n            id: () => {\r\n                return audioNodeId;\r\n            },\r\n            read: (): Promise<IStreamChunk<ArrayBuffer>> => {\r\n                return stream.read();\r\n            },\r\n        });\r\n    }\r\n\r\n    public detach = (audioNodeId: string): void => {\r\n        if (audioNodeId && this.privStreams[audioNodeId]) {\r\n            this.privStreams[audioNodeId].close();\r\n            delete this.privStreams[audioNodeId];\r\n            this.onEvent(new AudioStreamNodeDetachedEvent(this.privId, audioNodeId));\r\n        }\r\n    }\r\n\r\n    public turnOff = (): Promise<void> => {\r\n        for (const streamId in this.privStreams) {\r\n            if (streamId) {\r\n                const stream = this.privStreams[streamId];\r\n                if (stream && !stream.isClosed) {\r\n                    stream.close();\r\n                }\r\n            }\r\n        }\r\n\r\n        this.onEvent(new AudioSourceOffEvent(this.privId)); // no stream now\r\n        return Promise.resolve();\r\n    }\r\n\r\n    public get events(): EventSource<AudioSourceEvent> {\r\n        return this.privEvents;\r\n    }\r\n\r\n    public get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\r\n        return this.privAudioFormatPromise.then<ISpeechConfigAudioDevice>((result: AudioStreamFormatImpl) => {\r\n            return Promise.resolve({\r\n                bitspersample: result.bitsPerSample,\r\n                channelcount: result.channels,\r\n                connectivity: connectivity.Unknown,\r\n                manufacturer: \"Speech SDK\",\r\n                model: \"File\",\r\n                samplerate: result.samplesPerSec,\r\n                type: type.File,\r\n            });\r\n        });\r\n    }\r\n\r\n    private readHeader(): Promise<AudioStreamFormatImpl> {\r\n        // Read the wave header.\r\n        const maxHeaderSize: number = 512;\r\n        const header: Blob | Buffer = this.privSource.slice(0, maxHeaderSize);\r\n\r\n        const headerResult: Deferred<AudioStreamFormatImpl> = new Deferred<AudioStreamFormatImpl>();\r\n\r\n        const processHeader = (header: ArrayBuffer): void => {\r\n            const view: DataView = new DataView(header);\r\n\r\n            const getWord = (index: number): string => {\r\n                return String.fromCharCode(view.getUint8(index), view.getUint8(index + 1), view.getUint8(index + 2), view.getUint8(index + 3));\r\n            };\r\n\r\n            // RIFF 4 bytes.\r\n            if (\"RIFF\" !== getWord(0)) {\r\n                headerResult.reject(\"Invalid WAV header in file, RIFF was not found\");\r\n                return;\r\n            }\r\n\r\n            // length, 4 bytes\r\n            // RIFF Type & fmt 8 bytes\r\n            if (\"WAVE\" !== getWord(8) || \"fmt \" !== getWord(12)) {\r\n                headerResult.reject(\"Invalid WAV header in file, WAVEfmt was not found\");\r\n                return;\r\n            }\r\n\r\n            const formatSize: number = view.getInt32(16, true);\r\n            const channelCount: number = view.getUint16(22, true);\r\n            const sampleRate: number = view.getUint32(24, true);\r\n            const bitsPerSample: number = view.getUint16(34, true);\r\n            // Confirm if header is 44 bytes long.\r\n            let pos: number = 36 + Math.max(formatSize - 16, 0);\r\n            for (; getWord(pos) !== \"data\"; pos += 2) {\r\n                if (pos > maxHeaderSize - 8) {\r\n                    headerResult.reject(\"Invalid WAV header in file, data block was not found\");\r\n                    return;\r\n                }\r\n            }\r\n            this.privHeaderEnd = pos + 8;\r\n            headerResult.resolve(AudioStreamFormat.getWaveFormatPCM(sampleRate, bitsPerSample, channelCount) as AudioStreamFormatImpl);\r\n        };\r\n\r\n        if (typeof window !== \"undefined\" && typeof Blob !== \"undefined\" && header instanceof Blob) {\r\n            const reader: FileReader = new FileReader();\r\n\r\n            reader.onload = (event: Event) => {\r\n                const header: ArrayBuffer = (event.target as FileReader).result as ArrayBuffer;\r\n                processHeader(header);\r\n            };\r\n\r\n            reader.readAsArrayBuffer(header);\r\n        } else {\r\n            const h: Buffer = header as Buffer;\r\n            processHeader(h.buffer.slice(h.byteOffset, h.byteOffset + h.byteLength));\r\n        }\r\n        return headerResult.promise;\r\n    }\r\n\r\n    private async upload(audioNodeId: string): Promise<Stream<ArrayBuffer>> {\r\n        const onerror = (error: string) => {\r\n            const errorMsg = `Error occurred while processing '${this.privFilename}'. ${error}`;\r\n            this.onEvent(new AudioStreamNodeErrorEvent(this.privId, audioNodeId, errorMsg));\r\n            throw new Error(errorMsg);\r\n        };\r\n\r\n        try {\r\n            await this.turnOn();\r\n\r\n            const format: AudioStreamFormatImpl = await this.privAudioFormatPromise;\r\n            const stream = new ChunkedArrayBufferStream(format.avgBytesPerSec / 10, audioNodeId);\r\n\r\n            this.privStreams[audioNodeId] = stream;\r\n            const chunk: Blob | Buffer = this.privSource.slice(this.privHeaderEnd);\r\n\r\n            const processFile = (buff: ArrayBuffer): void => {\r\n                if (stream.isClosed) {\r\n                    return; // output stream was closed (somebody called TurnOff). We're done here.\r\n                }\r\n\r\n                stream.writeStreamChunk({\r\n                    buffer: buff,\r\n                    isEnd: false,\r\n                    timeReceived: Date.now(),\r\n                });\r\n                stream.close();\r\n            };\r\n\r\n            if (typeof window !== \"undefined\" && typeof Blob !== \"undefined\" && chunk instanceof Blob) {\r\n                const reader: FileReader = new FileReader();\r\n                reader.onerror = (ev: ProgressEvent<FileReader>) => { onerror(ev.toString()); };\r\n\r\n                reader.onload = (event: Event) => {\r\n                    const fileBuffer: ArrayBuffer = (event.target as FileReader).result as ArrayBuffer;\r\n                    processFile(fileBuffer);\r\n                };\r\n\r\n                reader.readAsArrayBuffer(chunk);\r\n            } else {\r\n                const c: Buffer = chunk as Buffer;\r\n                processFile(c.buffer.slice(c.byteOffset, c.byteOffset + c.byteLength));\r\n            }\r\n\r\n            return stream;\r\n        } catch (e) {\r\n            onerror(e);\r\n        }\r\n    }\r\n\r\n    private onEvent = (event: AudioSourceEvent): void => {\r\n        this.privEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RiffPcmEncoder, Stream } from \"../common/Exports\";\r\nimport { IRecorder } from \"./IRecorder\";\r\n\r\nexport class PcmRecorder implements IRecorder {\r\n    private privMediaResources: IMediaResources;\r\n    private privSpeechProcessorScript: string; // speech-processor.js Url\r\n\r\n    public record = (context: AudioContext, mediaStream: MediaStream, outputStream: Stream<ArrayBuffer>): void => {\r\n        const desiredSampleRate = 16000;\r\n\r\n        const scriptNode = (() => {\r\n            let bufferSize = 0;\r\n            try {\r\n                return context.createScriptProcessor(bufferSize, 1, 1);\r\n            } catch (error) {\r\n                // Webkit (<= version 31) requires a valid bufferSize.\r\n                bufferSize = 2048;\r\n                let audioSampleRate = context.sampleRate;\r\n                while (bufferSize < 16384 && audioSampleRate >= (2 * desiredSampleRate)) {\r\n                    bufferSize <<= 1;\r\n                    audioSampleRate >>= 1;\r\n                }\r\n                return context.createScriptProcessor(bufferSize, 1, 1);\r\n            }\r\n        })();\r\n\r\n        const waveStreamEncoder = new RiffPcmEncoder(context.sampleRate, desiredSampleRate);\r\n        let needHeader: boolean = true;\r\n        const that = this;\r\n        scriptNode.onaudioprocess = (event: AudioProcessingEvent) => {\r\n            const inputFrame = event.inputBuffer.getChannelData(0);\r\n\r\n            if (outputStream && !outputStream.isClosed) {\r\n                const waveFrame = waveStreamEncoder.encode(inputFrame);\r\n                if (!!waveFrame) {\r\n                    outputStream.writeStreamChunk({\r\n                        buffer: waveFrame,\r\n                        isEnd: false,\r\n                        timeReceived: Date.now(),\r\n                    });\r\n                    needHeader = false;\r\n                }\r\n            }\r\n        };\r\n\r\n        const micInput = context.createMediaStreamSource(mediaStream);\r\n\r\n        // https://webaudio.github.io/web-audio-api/#audioworklet\r\n        // Using AudioWorklet to improve audio quality and avoid audio glitches due to blocking the UI thread\r\n\r\n        if (!!this.privSpeechProcessorScript && !!context.audioWorklet) {\r\n            context.audioWorklet\r\n                .addModule(this.privSpeechProcessorScript)\r\n                .then(() => {\r\n                    const workletNode = new AudioWorkletNode(context, \"speech-processor\");\r\n                    workletNode.port.onmessage = (ev: MessageEvent) => {\r\n                        const inputFrame: Float32Array = ev.data as Float32Array;\r\n\r\n                        if (outputStream && !outputStream.isClosed) {\r\n                            const waveFrame = waveStreamEncoder.encode(inputFrame);\r\n                            if (!!waveFrame) {\r\n                                outputStream.writeStreamChunk({\r\n                                    buffer: waveFrame,\r\n                                    isEnd: false,\r\n                                    timeReceived: Date.now(),\r\n                                });\r\n                                needHeader = false;\r\n                            }\r\n                        }\r\n                    };\r\n                    micInput.connect(workletNode);\r\n                    workletNode.connect(context.destination);\r\n                    this.privMediaResources = {\r\n                        scriptProcessorNode: workletNode,\r\n                        source: micInput,\r\n                        stream: mediaStream,\r\n                    };\r\n                })\r\n                .catch(() => {\r\n                    micInput.connect(scriptNode);\r\n                    scriptNode.connect(context.destination);\r\n                    this.privMediaResources = {\r\n                        scriptProcessorNode: scriptNode,\r\n                        source: micInput,\r\n                        stream: mediaStream,\r\n                    };\r\n                });\r\n        } else {\r\n            micInput.connect(scriptNode);\r\n            scriptNode.connect(context.destination);\r\n            this.privMediaResources = {\r\n                scriptProcessorNode: scriptNode,\r\n                source: micInput,\r\n                stream: mediaStream,\r\n            };\r\n        }\r\n    }\r\n\r\n    public releaseMediaResources = (context: AudioContext): void => {\r\n        if (this.privMediaResources) {\r\n            if (this.privMediaResources.scriptProcessorNode) {\r\n                this.privMediaResources.scriptProcessorNode.disconnect(context.destination);\r\n                this.privMediaResources.scriptProcessorNode = null;\r\n            }\r\n            if (this.privMediaResources.source) {\r\n                this.privMediaResources.source.disconnect();\r\n                this.privMediaResources.stream.getTracks().forEach((track: any) => track.stop());\r\n                this.privMediaResources.source = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    public setWorkletUrl(url: string): void {\r\n        this.privSpeechProcessorScript = url;\r\n    }\r\n}\r\n\r\ninterface IMediaResources {\r\n    source: MediaStreamAudioSourceNode;\r\n    scriptProcessorNode: ScriptProcessorNode | AudioWorkletNode;\r\n    stream: MediaStream;\r\n}\r\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?#&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encode(key);\n      value = encode(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport * as http from \"http\";\r\nimport * as tls from \"tls\";\r\nimport * as parse from \"url-parse\";\r\nimport * as ocsp from \"../../external/ocsp/ocsp\";\r\nimport {\r\n    Events,\r\n    OCSPCacheEntryExpiredEvent,\r\n    OCSPCacheEntryNeedsRefreshEvent,\r\n    OCSPCacheFetchErrorEvent,\r\n    OCSPCacheHitEvent,\r\n    OCSPCacheMissEvent,\r\n    OCSPCacheUpdatehCompleteEvent,\r\n    OCSPCacheUpdateNeededEvent,\r\n    OCSPDiskCacheHitEvent,\r\n    OCSPDiskCacheStoreEvent,\r\n    OCSPEvent,\r\n    OCSPMemoryCacheHitEvent,\r\n    OCSPMemoryCacheStoreEvent,\r\n    OCSPResponseRetrievedEvent,\r\n    OCSPStapleReceivedEvent,\r\n    OCSPVerificationFailedEvent,\r\n} from \"../common/Exports\";\r\nimport { IStringDictionary } from \"../common/IDictionary\";\r\nimport { ProxyInfo } from \"./ProxyInfo\";\r\n\r\nimport Agent from \"agent-base\";\r\n\r\n// @ts-ignore\r\nimport Cache from \"async-disk-cache\";\r\nimport HttpsProxyAgent from \"https-proxy-agent\";\r\nimport * as net from \"net\";\r\nimport { OCSPCacheUpdateErrorEvent } from \"../common/OCSPEvents\";\r\n\r\nexport class CertCheckAgent {\r\n\r\n    // Test hook to enable forcing expiration / refresh to happen.\r\n    public static testTimeOffset: number = 0;\r\n\r\n    // Test hook to disable stapling for cache testing.\r\n    public static forceDisableOCSPStapling: boolean = false;\r\n\r\n    // An in memory cache for recived responses.\r\n    private static privMemCache: IStringDictionary<Buffer> = {};\r\n\r\n    // The on disk cache.\r\n    private static privDiskCache: Cache;\r\n\r\n    private privProxyInfo: ProxyInfo;\r\n\r\n    constructor(proxyInfo?: ProxyInfo) {\r\n        if (!!proxyInfo) {\r\n            this.privProxyInfo = proxyInfo;\r\n        }\r\n\r\n        // Initialize this here to allow tests to set the env variable before the cache is constructed.\r\n        if (!CertCheckAgent.privDiskCache) {\r\n            CertCheckAgent.privDiskCache = new Cache(\"microsoft-cognitiveservices-speech-sdk-cache\", { supportBuffer: true, location: (typeof process !== \"undefined\" && !!process.env.SPEECH_OCSP_CACHE_ROOT) ? process.env.SPEECH_OCSP_CACHE_ROOT : undefined });\r\n        }\r\n    }\r\n\r\n    // Test hook to force the disk cache to be recreated.\r\n    public static forceReinitDiskCache(): void {\r\n        CertCheckAgent.privDiskCache = undefined;\r\n        CertCheckAgent.privMemCache = {};\r\n    }\r\n\r\n    public GetAgent(disableStapling?: boolean): http.Agent {\r\n        const agent: any = new Agent.Agent(this.CreateConnection);\r\n\r\n        if (this.privProxyInfo !== undefined &&\r\n            this.privProxyInfo.HostName !== undefined &&\r\n            this.privProxyInfo.Port > 0) {\r\n            const proxyName: string = \"privProxyInfo\";\r\n            agent[proxyName] = this.privProxyInfo;\r\n        }\r\n\r\n        return agent;\r\n    }\r\n\r\n    private static GetProxyAgent(proxyInfo: ProxyInfo): HttpsProxyAgent {\r\n        const httpProxyOptions: HttpsProxyAgent.HttpsProxyAgentOptions = {\r\n            host: proxyInfo.HostName,\r\n            port: proxyInfo.Port,\r\n        };\r\n\r\n        if (!!proxyInfo.UserName) {\r\n            httpProxyOptions.headers = {\r\n                \"Proxy-Authentication\": \"Basic \" + new Buffer(proxyInfo.UserName + \":\" + (proxyInfo.Password === undefined) ? \"\" : proxyInfo.Password).toString(\"base64\"),\r\n            };\r\n        } else {\r\n            httpProxyOptions.headers = {};\r\n        }\r\n\r\n        httpProxyOptions.headers.requestOCSP = \"true\";\r\n\r\n        const httpProxyAgent: HttpsProxyAgent = new HttpsProxyAgent(httpProxyOptions);\r\n        return httpProxyAgent;\r\n    }\r\n\r\n    private static async OCSPCheck(socketPromise: Promise<net.Socket>, proxyInfo: ProxyInfo): Promise<net.Socket> {\r\n        let ocspRequest: ocsp.Request;\r\n        let stapling: Buffer;\r\n        let resolved: boolean = false;\r\n\r\n        const socket: net.Socket = await socketPromise;\r\n        socket.cork();\r\n\r\n        const tlsSocket: tls.TLSSocket = socket as tls.TLSSocket;\r\n\r\n        return new Promise<net.Socket>((resolve: (value: net.Socket) => void, reject: (error: string | Error) => void) => {\r\n            socket.on(\"OCSPResponse\", (data: Buffer): void => {\r\n                if (!!data) {\r\n                    this.onEvent(new OCSPStapleReceivedEvent());\r\n                    stapling = data;\r\n                }\r\n            });\r\n\r\n            socket.on(\"error\", (error: Error) => {\r\n                if (!resolved) {\r\n                    resolved = true;\r\n                    socket.destroy();\r\n                    reject(error);\r\n                }\r\n            });\r\n\r\n            tlsSocket.on(\"secure\", async () => {\r\n                const peer: tls.DetailedPeerCertificate = tlsSocket.getPeerCertificate(true);\r\n                try {\r\n                    const issuer: tls.DetailedPeerCertificate = await this.GetIssuer(peer);\r\n\r\n                    // We always need a request to verify the response.\r\n                    ocspRequest = ocsp.request.generate(peer.raw, issuer.raw);\r\n\r\n                    // Do we have a result for this certificate in our memory cache?\r\n                    const sig: string = ocspRequest.id.toString(\"hex\");\r\n\r\n                    // Stapled response trumps cached response.\r\n                    if (!stapling) {\r\n                        const cacheEntry: Buffer = await CertCheckAgent.GetResponseFromCache(sig, ocspRequest, proxyInfo);\r\n                        stapling = cacheEntry;\r\n                    }\r\n\r\n                    await this.VerifyOCSPResponse(stapling, ocspRequest, proxyInfo);\r\n\r\n                    socket.uncork();\r\n                    resolved = true;\r\n                    resolve(socket);\r\n                } catch (e) {\r\n                    socket.destroy();\r\n                    resolved = true;\r\n                    reject(e);\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    private static GetIssuer(peer: tls.DetailedPeerCertificate): Promise<tls.DetailedPeerCertificate> {\r\n        if (peer.issuerCertificate) {\r\n            return Promise.resolve(peer.issuerCertificate);\r\n        }\r\n\r\n        return new Promise<tls.DetailedPeerCertificate>((resolve: (value: tls.DetailedPeerCertificate) => void, reject: (reason: string) => void) => {\r\n            const ocspAgent: ocsp.Agent = new ocsp.Agent({});\r\n            ocspAgent.fetchIssuer(peer, null, (error: string, value: tls.DetailedPeerCertificate): void => {\r\n                if (!!error) {\r\n                    reject(error);\r\n                    return;\r\n                }\r\n\r\n                resolve(value);\r\n            });\r\n        });\r\n    }\r\n\r\n    private static async GetResponseFromCache(signature: string, ocspRequest: ocsp.Request, proxyInfo: ProxyInfo): Promise<Buffer> {\r\n        let cachedResponse: Buffer = CertCheckAgent.privMemCache[signature];\r\n\r\n        if (!!cachedResponse) {\r\n            this.onEvent(new OCSPMemoryCacheHitEvent(signature));\r\n        }\r\n\r\n        // Do we have a result for this certificate on disk in %TMP%?\r\n        if (!cachedResponse) {\r\n            try {\r\n                const diskCacheResponse: any = await CertCheckAgent.privDiskCache.get(signature);\r\n                if (!!diskCacheResponse.isCached) {\r\n                    CertCheckAgent.onEvent(new OCSPDiskCacheHitEvent(signature));\r\n                    CertCheckAgent.StoreMemoryCacheEntry(signature, diskCacheResponse.value);\r\n                    cachedResponse = diskCacheResponse.value;\r\n                }\r\n            } catch (error) {\r\n                cachedResponse = null;\r\n            }\r\n        }\r\n\r\n        if (!cachedResponse) {\r\n            return cachedResponse;\r\n        }\r\n\r\n        try {\r\n            const cachedOcspResponse: ocsp.Response = ocsp.utils.parseResponse(cachedResponse);\r\n            const tbsData = cachedOcspResponse.value.tbsResponseData;\r\n            if (tbsData.responses.length < 1) {\r\n                this.onEvent(new OCSPCacheFetchErrorEvent(signature, \"Not enough data in cached response\"));\r\n                return;\r\n            }\r\n\r\n            const cachedStartTime: number = tbsData.responses[0].thisUpdate;\r\n            const cachedNextTime: number = tbsData.responses[0].nextUpdate;\r\n\r\n            if (cachedNextTime < (Date.now() + this.testTimeOffset - 60000)) {\r\n                // Cached entry has expired.\r\n                this.onEvent(new OCSPCacheEntryExpiredEvent(signature, cachedNextTime));\r\n                cachedResponse = null;\r\n            } else {\r\n                // If we're within one day of the next update, or 50% of the way through the validity period,\r\n                // background an update to the cache.\r\n\r\n                const minUpdate: number = Math.min(24 * 60 * 60 * 1000, (cachedNextTime - cachedStartTime) / 2);\r\n\r\n                if ((cachedNextTime - (Date.now() + this.testTimeOffset)) < minUpdate) {\r\n                    this.onEvent(new OCSPCacheEntryNeedsRefreshEvent(signature, cachedStartTime, cachedNextTime));\r\n                    this.UpdateCache(ocspRequest, proxyInfo).catch((error: string) => {\r\n                        // Well, not much we can do here.\r\n                        this.onEvent(new OCSPCacheUpdateErrorEvent(signature, error.toString()));\r\n                    });\r\n                } else {\r\n                    this.onEvent(new OCSPCacheHitEvent(signature, cachedStartTime, cachedNextTime));\r\n                }\r\n            }\r\n        } catch (error) {\r\n            this.onEvent(new OCSPCacheFetchErrorEvent(signature, error));\r\n            cachedResponse = null;\r\n        }\r\n        if (!cachedResponse) {\r\n            this.onEvent(new OCSPCacheMissEvent(signature));\r\n        }\r\n        return cachedResponse;\r\n    }\r\n\r\n    private static async VerifyOCSPResponse(cacheValue: Buffer, ocspRequest: ocsp.Request, proxyInfo: ProxyInfo): Promise<void> {\r\n        let ocspResponse: Buffer = cacheValue;\r\n        const sig: string = ocspRequest.certID.toString(\"hex\");\r\n\r\n        // Do we have a valid response?\r\n        if (!ocspResponse) {\r\n            ocspResponse = await CertCheckAgent.GetOCSPResponse(ocspRequest, proxyInfo);\r\n        }\r\n\r\n        return new Promise<void>((resolve: () => void, reject: (error: string | Error) => void) => {\r\n            ocsp.verify({ request: ocspRequest, response: ocspResponse }, (error: string, result: any): void => {\r\n                if (!!error) {\r\n                    CertCheckAgent.onEvent(new OCSPVerificationFailedEvent(ocspRequest.id.toString(\"hex\"), error));\r\n\r\n                    // Bad Cached Value? One more try without the cache.\r\n                    if (!!cacheValue) {\r\n                        this.VerifyOCSPResponse(null, ocspRequest, proxyInfo).then(() => {\r\n                            resolve();\r\n                        }, (error: Error) => {\r\n                            reject(error);\r\n                        });\r\n                    } else {\r\n                        reject(error);\r\n                    }\r\n                } else {\r\n                    if (!cacheValue) {\r\n                        CertCheckAgent.StoreCacheEntry(ocspRequest.id.toString(\"hex\"), ocspResponse);\r\n                    }\r\n                    resolve();\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    private static async UpdateCache(req: ocsp.Request, proxyInfo: ProxyInfo): Promise<void> {\r\n        const signature: string = req.id.toString(\"hex\");\r\n        this.onEvent(new OCSPCacheUpdateNeededEvent(signature));\r\n\r\n        const rawResponse: Buffer = await this.GetOCSPResponse(req, proxyInfo);\r\n        this.StoreCacheEntry(signature, rawResponse);\r\n        this.onEvent(new OCSPCacheUpdatehCompleteEvent(req.id.toString(\"hex\")));\r\n\r\n    }\r\n\r\n    private static StoreCacheEntry(sig: string, rawResponse: Buffer): void {\r\n        this.StoreMemoryCacheEntry(sig, rawResponse);\r\n        this.StoreDiskCacheEntry(sig, rawResponse);\r\n    }\r\n\r\n    private static StoreMemoryCacheEntry(sig: string, rawResponse: Buffer): void {\r\n        this.privMemCache[sig] = rawResponse;\r\n        this.onEvent(new OCSPMemoryCacheStoreEvent(sig));\r\n    }\r\n\r\n    private static StoreDiskCacheEntry(sig: string, rawResponse: Buffer): void {\r\n        this.privDiskCache.set(sig, rawResponse).then(() => {\r\n            this.onEvent(new OCSPDiskCacheStoreEvent(sig));\r\n        });\r\n    }\r\n\r\n    private static GetOCSPResponse(req: ocsp.Request, proxyInfo: ProxyInfo): Promise<Buffer> {\r\n\r\n        const ocspMethod: string = \"1.3.6.1.5.5.7.48.1\";\r\n        let options: http.RequestOptions = {};\r\n\r\n        if (!!proxyInfo) {\r\n            const agent: HttpsProxyAgent = CertCheckAgent.GetProxyAgent(proxyInfo);\r\n            options.agent = agent;\r\n        }\r\n\r\n        return new Promise<Buffer>((resolve: (value: Buffer) => void, reject: (error: string | Error) => void) => {\r\n            ocsp.utils.getAuthorityInfo(req.cert, ocspMethod, (error: string, uri: string): void => {\r\n                if (error) {\r\n                    reject(error);\r\n                    return;\r\n                }\r\n\r\n                const parsedUri: {[k: string]: any} = parse.default(uri);\r\n                parsedUri.path = parsedUri.pathname;\r\n                options = { ...options, ...parsedUri };\r\n\r\n                ocsp.utils.getResponse(options, req.data, (error: string, raw: Buffer): void => {\r\n                    if (error) {\r\n                        reject(error);\r\n                        return;\r\n                    }\r\n\r\n                    this.onEvent(new OCSPResponseRetrievedEvent(req.certID.toString(\"hex\")));\r\n                    resolve(raw);\r\n                });\r\n            });\r\n        });\r\n    }\r\n\r\n    private static onEvent = (event: OCSPEvent): void => {\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private CreateConnection(request: Agent.ClientRequest, options: Agent.RequestOptions): Promise<net.Socket> {\r\n        const enableOCSP: boolean = (typeof process !== \"undefined\" && process.env.NODE_TLS_REJECT_UNAUTHORIZED !== \"0\" && process.env.SPEECH_CONDUCT_OCSP_CHECK !== \"0\") && options.secureEndpoint;\r\n        let socketPromise: Promise<net.Socket>;\r\n\r\n        options = {\r\n            ...options,\r\n            ...{\r\n                requestOCSP: !CertCheckAgent.forceDisableOCSPStapling,\r\n                servername: options.host\r\n            }\r\n        };\r\n\r\n        if (!!this.privProxyInfo) {\r\n            const httpProxyAgent: HttpsProxyAgent = CertCheckAgent.GetProxyAgent(this.privProxyInfo);\r\n            const baseAgent: Agent.Agent = httpProxyAgent as unknown as Agent.Agent;\r\n\r\n            socketPromise = new Promise<net.Socket>((resolve: (value: net.Socket) => void, reject: (error: string | Error) => void) => {\r\n                baseAgent.callback(request, options, (error: Error, socket: net.Socket) => {\r\n                    if (!!error) {\r\n                        reject(error);\r\n                    } else {\r\n                        resolve(socket);\r\n                    }\r\n                });\r\n            });\r\n        } else {\r\n            if (!!options.secureEndpoint) {\r\n                socketPromise = Promise.resolve(tls.connect(options));\r\n            } else {\r\n                socketPromise = Promise.resolve(net.connect(options));\r\n            }\r\n        }\r\n\r\n        if (!!enableOCSP) {\r\n            return CertCheckAgent.OCSPCheck(socketPromise, this.privProxyInfo);\r\n        } else {\r\n            return socketPromise;\r\n        }\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { HeaderNames } from \"../common.speech/HeaderNames\";\r\nimport {\r\n    ArgumentNullError,\r\n    BackgroundEvent,\r\n    ConnectionClosedEvent,\r\n    ConnectionErrorEvent,\r\n    ConnectionEstablishedEvent,\r\n    ConnectionEvent,\r\n    ConnectionMessage,\r\n    ConnectionMessageReceivedEvent,\r\n    ConnectionMessageSentEvent,\r\n    ConnectionOpenResponse,\r\n    ConnectionStartEvent,\r\n    ConnectionState,\r\n    Deferred,\r\n    Events,\r\n    EventSource,\r\n    IWebsocketMessageFormatter,\r\n    MessageType,\r\n    Queue,\r\n    RawWebsocketMessage,\r\n} from \"../common/Exports\";\r\nimport { ProxyInfo } from \"./ProxyInfo\";\r\n\r\n// Node.JS specific web socket / browser support.\r\nimport ws from \"ws\";\r\nimport { CertCheckAgent } from \"./CertChecks\";\r\n\r\ninterface ISendItem {\r\n    Message: ConnectionMessage;\r\n    RawWebsocketMessage: RawWebsocketMessage;\r\n    sendStatusDeferral: Deferred<void>;\r\n}\r\n\r\nexport class WebsocketMessageAdapter {\r\n    private privConnectionState: ConnectionState;\r\n    private privMessageFormatter: IWebsocketMessageFormatter;\r\n    private privWebsocketClient: WebSocket | ws;\r\n\r\n    private privSendMessageQueue: Queue<ISendItem>;\r\n    private privReceivingMessageQueue: Queue<ConnectionMessage>;\r\n    private privConnectionEstablishDeferral: Deferred<ConnectionOpenResponse>;\r\n    private privCertificateValidatedDeferral: Deferred<void>;\r\n    private privDisconnectDeferral: Deferred<void>;\r\n    private privConnectionEvents: EventSource<ConnectionEvent>;\r\n    private privConnectionId: string;\r\n    private privUri: string;\r\n    private proxyInfo: ProxyInfo;\r\n    private privHeaders: { [key: string]: string; };\r\n    private privLastErrorReceived: string;\r\n    private privEnableCompression: boolean;\r\n\r\n    public static forceNpmWebSocket: boolean = false;\r\n\r\n    public constructor(\r\n        uri: string,\r\n        connectionId: string,\r\n        messageFormatter: IWebsocketMessageFormatter,\r\n        proxyInfo: ProxyInfo,\r\n        headers: { [key: string]: string; },\r\n        enableCompression: boolean) {\r\n\r\n        if (!uri) {\r\n            throw new ArgumentNullError(\"uri\");\r\n        }\r\n\r\n        if (!messageFormatter) {\r\n            throw new ArgumentNullError(\"messageFormatter\");\r\n        }\r\n\r\n        this.proxyInfo = proxyInfo;\r\n        this.privConnectionEvents = new EventSource<ConnectionEvent>();\r\n        this.privConnectionId = connectionId;\r\n        this.privMessageFormatter = messageFormatter;\r\n        this.privConnectionState = ConnectionState.None;\r\n        this.privUri = uri;\r\n        this.privHeaders = headers;\r\n        this.privEnableCompression = enableCompression;\r\n\r\n        // Add the connection ID to the headers\r\n        this.privHeaders[HeaderNames.ConnectionId] = this.privConnectionId;\r\n\r\n        this.privLastErrorReceived = \"\";\r\n    }\r\n\r\n    public get state(): ConnectionState {\r\n        return this.privConnectionState;\r\n    }\r\n\r\n    public open = (): Promise<ConnectionOpenResponse> => {\r\n        if (this.privConnectionState === ConnectionState.Disconnected) {\r\n            return Promise.reject<ConnectionOpenResponse>(`Cannot open a connection that is in ${this.privConnectionState} state`);\r\n        }\r\n\r\n        if (this.privConnectionEstablishDeferral) {\r\n            return this.privConnectionEstablishDeferral.promise;\r\n        }\r\n\r\n        this.privConnectionEstablishDeferral = new Deferred<ConnectionOpenResponse>();\r\n        this.privCertificateValidatedDeferral = new Deferred<void>();\r\n\r\n        this.privConnectionState = ConnectionState.Connecting;\r\n\r\n        try {\r\n\r\n            if (typeof WebSocket !== \"undefined\" && !WebsocketMessageAdapter.forceNpmWebSocket) {\r\n                // Browser handles cert checks.\r\n                this.privCertificateValidatedDeferral.resolve();\r\n\r\n                this.privWebsocketClient = new WebSocket(this.privUri);\r\n            } else {\r\n                const options: ws.ClientOptions = { headers: this.privHeaders, perMessageDeflate: this.privEnableCompression };\r\n                // The ocsp library will handle validation for us and fail the connection if needed.\r\n                this.privCertificateValidatedDeferral.resolve();\r\n                const checkAgent: CertCheckAgent = new CertCheckAgent(this.proxyInfo);\r\n\r\n                options.agent = checkAgent.GetAgent();\r\n                this.privWebsocketClient = new ws(this.privUri, options);\r\n            }\r\n\r\n            this.privWebsocketClient.binaryType = \"arraybuffer\";\r\n            this.privReceivingMessageQueue = new Queue<ConnectionMessage>();\r\n            this.privDisconnectDeferral = new Deferred<void>();\r\n            this.privSendMessageQueue = new Queue<ISendItem>();\r\n            this.processSendQueue().catch((reason: string): void => {\r\n                Events.instance.onEvent(new BackgroundEvent(reason));\r\n            });\r\n        } catch (error) {\r\n            this.privConnectionEstablishDeferral.resolve(new ConnectionOpenResponse(500, error));\r\n            return this.privConnectionEstablishDeferral.promise;\r\n        }\r\n\r\n        this.onEvent(new ConnectionStartEvent(this.privConnectionId, this.privUri));\r\n\r\n        this.privWebsocketClient.onopen = (e: { target: WebSocket | ws }) => {\r\n            this.privCertificateValidatedDeferral.promise.then((): void => {\r\n                this.privConnectionState = ConnectionState.Connected;\r\n                this.onEvent(new ConnectionEstablishedEvent(this.privConnectionId));\r\n                this.privConnectionEstablishDeferral.resolve(new ConnectionOpenResponse(200, \"\"));\r\n            }, (error: string): void => {\r\n                this.privConnectionEstablishDeferral.reject(error);\r\n            });\r\n        };\r\n\r\n        this.privWebsocketClient.onerror = (e: { error: any; message: string; type: string; target: WebSocket | ws }) => {\r\n            this.onEvent(new ConnectionErrorEvent(this.privConnectionId, e.message, e.type));\r\n            this.privLastErrorReceived = e.message;\r\n        };\r\n\r\n        this.privWebsocketClient.onclose = (e: { wasClean: boolean; code: number; reason: string; target: WebSocket | ws }) => {\r\n            if (this.privConnectionState === ConnectionState.Connecting) {\r\n                this.privConnectionState = ConnectionState.Disconnected;\r\n                // this.onEvent(new ConnectionEstablishErrorEvent(this.connectionId, e.code, e.reason));\r\n                this.privConnectionEstablishDeferral.resolve(new ConnectionOpenResponse(e.code, e.reason + \" \" + this.privLastErrorReceived));\r\n            } else {\r\n                this.privConnectionState = ConnectionState.Disconnected;\r\n                this.privWebsocketClient = null;\r\n                this.onEvent(new ConnectionClosedEvent(this.privConnectionId, e.code, e.reason));\r\n            }\r\n\r\n            this.onClose(e.code, e.reason).catch((reason: string): void => {\r\n                Events.instance.onEvent(new BackgroundEvent(reason));\r\n            });\r\n        };\r\n\r\n        this.privWebsocketClient.onmessage = (e: { data: ws.Data; type: string; target: WebSocket | ws }) => {\r\n            const networkReceivedTime = new Date().toISOString();\r\n            if (this.privConnectionState === ConnectionState.Connected) {\r\n                const deferred = new Deferred<ConnectionMessage>();\r\n                // let id = ++this.idCounter;\r\n                this.privReceivingMessageQueue.enqueueFromPromise(deferred.promise);\r\n                if (e.data instanceof ArrayBuffer) {\r\n                    const rawMessage = new RawWebsocketMessage(MessageType.Binary, e.data);\r\n                    this.privMessageFormatter\r\n                        .toConnectionMessage(rawMessage)\r\n                        .then((connectionMessage: ConnectionMessage) => {\r\n                            this.onEvent(new ConnectionMessageReceivedEvent(this.privConnectionId, networkReceivedTime, connectionMessage));\r\n                            deferred.resolve(connectionMessage);\r\n                        }, (error: string) => {\r\n                            // TODO: Events for these ?\r\n                            deferred.reject(`Invalid binary message format. Error: ${error}`);\r\n                        });\r\n                } else {\r\n                    const rawMessage = new RawWebsocketMessage(MessageType.Text, e.data);\r\n                    this.privMessageFormatter\r\n                        .toConnectionMessage(rawMessage)\r\n                        .then((connectionMessage: ConnectionMessage) => {\r\n                            this.onEvent(new ConnectionMessageReceivedEvent(this.privConnectionId, networkReceivedTime, connectionMessage));\r\n                            deferred.resolve(connectionMessage);\r\n                        }, (error: string) => {\r\n                            // TODO: Events for these ?\r\n                            deferred.reject(`Invalid text message format. Error: ${error}`);\r\n                        });\r\n                }\r\n            }\r\n        };\r\n\r\n        return this.privConnectionEstablishDeferral.promise;\r\n    }\r\n\r\n    public send = (message: ConnectionMessage): Promise<void> => {\r\n        if (this.privConnectionState !== ConnectionState.Connected) {\r\n            return Promise.reject(`Cannot send on connection that is in ${ConnectionState[this.privConnectionState]} state`);\r\n        }\r\n\r\n        const messageSendStatusDeferral = new Deferred<void>();\r\n        const messageSendDeferral = new Deferred<ISendItem>();\r\n\r\n        this.privSendMessageQueue.enqueueFromPromise(messageSendDeferral.promise);\r\n\r\n        this.privMessageFormatter\r\n            .fromConnectionMessage(message)\r\n            .then((rawMessage: RawWebsocketMessage) => {\r\n                messageSendDeferral.resolve({\r\n                    Message: message,\r\n                    RawWebsocketMessage: rawMessage,\r\n                    sendStatusDeferral: messageSendStatusDeferral,\r\n                });\r\n            }, (error: string) => {\r\n                messageSendDeferral.reject(`Error formatting the message. ${error}`);\r\n            });\r\n\r\n        return messageSendStatusDeferral.promise;\r\n    }\r\n\r\n    public read = (): Promise<ConnectionMessage> => {\r\n        if (this.privConnectionState !== ConnectionState.Connected) {\r\n            return Promise.reject<ConnectionMessage>(`Cannot read on connection that is in ${this.privConnectionState} state`);\r\n        }\r\n\r\n        return this.privReceivingMessageQueue.dequeue();\r\n    }\r\n\r\n    public close = (reason?: string): Promise<void> => {\r\n        if (this.privWebsocketClient) {\r\n            if (this.privConnectionState !== ConnectionState.Disconnected) {\r\n                this.privWebsocketClient.close(1000, reason ? reason : \"Normal closure by client\");\r\n            }\r\n        } else {\r\n            return Promise.resolve();\r\n        }\r\n\r\n        return this.privDisconnectDeferral.promise;\r\n    }\r\n\r\n    public get events(): EventSource<ConnectionEvent> {\r\n        return this.privConnectionEvents;\r\n    }\r\n\r\n    private sendRawMessage = (sendItem: ISendItem): Promise<void> => {\r\n        try {\r\n            // indicates we are draining the queue and it came with no message;\r\n            if (!sendItem) {\r\n                return Promise.resolve();\r\n            }\r\n\r\n            this.onEvent(new ConnectionMessageSentEvent(this.privConnectionId, new Date().toISOString(), sendItem.Message));\r\n\r\n            // add a check for the ws readystate in order to stop the red console error 'WebSocket is already in CLOSING or CLOSED state' appearing\r\n            if (this.isWebsocketOpen) {\r\n                this.privWebsocketClient.send(sendItem.RawWebsocketMessage.payload);\r\n            } else {\r\n                return Promise.reject(\"websocket send error: Websocket not ready \" + this.privConnectionId + \" \" + sendItem.Message.id + \" \" + new Error().stack);\r\n            }\r\n            return Promise.resolve();\r\n\r\n        } catch (e) {\r\n            return Promise.reject(`websocket send error: ${e}`);\r\n        }\r\n    }\r\n\r\n    private async onClose(code: number, reason: string): Promise<void> {\r\n        const closeReason = `Connection closed. ${code}: ${reason}`;\r\n        this.privConnectionState = ConnectionState.Disconnected;\r\n        this.privDisconnectDeferral.resolve();\r\n        await this.privReceivingMessageQueue.drainAndDispose((pendingReceiveItem: ConnectionMessage) => {\r\n            // TODO: Events for these ?\r\n            // Logger.instance.onEvent(new LoggingEvent(LogType.Warning, null, `Failed to process received message. Reason: ${closeReason}, Message: ${JSON.stringify(pendingReceiveItem)}`));\r\n        }, closeReason);\r\n\r\n        await this.privSendMessageQueue.drainAndDispose((pendingSendItem: ISendItem) => {\r\n            pendingSendItem.sendStatusDeferral.reject(closeReason);\r\n        }, closeReason);\r\n    }\r\n\r\n    private async processSendQueue(): Promise<void> {\r\n        while (true) {\r\n            const itemToSend: Promise<ISendItem> = this.privSendMessageQueue.dequeue();\r\n            const sendItem: ISendItem = await itemToSend;\r\n            // indicates we are draining the queue and it came with no message;\r\n            if (!sendItem) {\r\n                return;\r\n            }\r\n\r\n            try {\r\n                await this.sendRawMessage(sendItem);\r\n                sendItem.sendStatusDeferral.resolve();\r\n            } catch (sendError) {\r\n                sendItem.sendStatusDeferral.reject(sendError);\r\n            }\r\n        }\r\n    }\r\n\r\n    private onEvent = (event: ConnectionEvent): void => {\r\n        this.privConnectionEvents.onEvent(event);\r\n        Events.instance.onEvent(event);\r\n    }\r\n\r\n    private get isWebsocketOpen(): boolean {\r\n        return this.privWebsocketClient && this.privWebsocketClient.readyState === this.privWebsocketClient.OPEN;\r\n    }\r\n\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ArgumentNullError,\r\n    ConnectionEvent,\r\n    ConnectionMessage,\r\n    ConnectionOpenResponse,\r\n    ConnectionState,\r\n    createNoDashGuid,\r\n    EventSource,\r\n    IConnection,\r\n    IStringDictionary,\r\n    IWebsocketMessageFormatter,\r\n} from \"../common/Exports\";\r\nimport { ProxyInfo } from \"./ProxyInfo\";\r\nimport { WebsocketMessageAdapter } from \"./WebsocketMessageAdapter\";\r\n\r\nexport class WebsocketConnection implements IConnection {\r\n\r\n    private privUri: string;\r\n    private privMessageFormatter: IWebsocketMessageFormatter;\r\n    private privConnectionMessageAdapter: WebsocketMessageAdapter;\r\n    private privId: string;\r\n    private privIsDisposed: boolean = false;\r\n\r\n    public constructor(\r\n        uri: string,\r\n        queryParameters: IStringDictionary<string>,\r\n        headers: IStringDictionary<string>,\r\n        messageFormatter: IWebsocketMessageFormatter,\r\n        proxyInfo: ProxyInfo,\r\n        enableCompression: boolean = false,\r\n        connectionId?: string) {\r\n\r\n        if (!uri) {\r\n            throw new ArgumentNullError(\"uri\");\r\n        }\r\n\r\n        if (!messageFormatter) {\r\n            throw new ArgumentNullError(\"messageFormatter\");\r\n        }\r\n\r\n        this.privMessageFormatter = messageFormatter;\r\n\r\n        let queryParams = \"\";\r\n        let i = 0;\r\n\r\n        if (queryParameters) {\r\n            for (const paramName in queryParameters) {\r\n                if (paramName) {\r\n                    queryParams += ((i === 0) && (uri.indexOf(\"?\") === -1)) ? \"?\" : \"&\";\r\n                    const val = encodeURIComponent(queryParameters[paramName]);\r\n                    queryParams += `${paramName}=${val}`;\r\n                    i++;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (headers) {\r\n            for (const headerName in headers) {\r\n                if (headerName) {\r\n                    queryParams += ((i === 0) && (uri.indexOf(\"?\") === -1)) ? \"?\" : \"&\";\r\n                    const val = encodeURIComponent(headers[headerName]);\r\n                    queryParams += `${headerName}=${val}`;\r\n                    i++;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.privUri = uri + queryParams;\r\n        this.privId = connectionId ? connectionId : createNoDashGuid();\r\n\r\n        this.privConnectionMessageAdapter = new WebsocketMessageAdapter(\r\n            this.privUri,\r\n            this.id,\r\n            this.privMessageFormatter,\r\n            proxyInfo,\r\n            headers,\r\n            enableCompression);\r\n    }\r\n\r\n    public async dispose(): Promise<void> {\r\n        this.privIsDisposed = true;\r\n\r\n        if (this.privConnectionMessageAdapter) {\r\n            await this.privConnectionMessageAdapter.close();\r\n        }\r\n    }\r\n\r\n    public isDisposed = (): boolean => {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public state = (): ConnectionState => {\r\n        return this.privConnectionMessageAdapter.state;\r\n    }\r\n\r\n    public open = (): Promise<ConnectionOpenResponse> => {\r\n        return this.privConnectionMessageAdapter.open();\r\n    }\r\n\r\n    public send = (message: ConnectionMessage): Promise<void> => {\r\n        return this.privConnectionMessageAdapter.send(message);\r\n    }\r\n\r\n    public read = (): Promise<ConnectionMessage> => {\r\n        return this.privConnectionMessageAdapter.read();\r\n    }\r\n\r\n    public get events(): EventSource<ConnectionEvent> {\r\n        return this.privConnectionMessageAdapter.events;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { AudioStreamFormatImpl } from \"../../src/sdk/Audio/AudioStreamFormat\";\r\nimport {\r\n    IAudioStreamNode,\r\n    IStreamChunk,\r\n} from \"../common/Exports\";\r\n\r\nexport class ReplayableAudioNode implements IAudioStreamNode {\r\n    private privAudioNode: IAudioStreamNode;\r\n    private privBytesPerSecond: number;\r\n    private privBuffers: BufferEntry[] = [];\r\n    private privReplayOffset: number = 0;\r\n    private privLastShrinkOffset: number = 0;\r\n    private privBufferStartOffset: number = 0;\r\n    private privBufferSerial: number = 0;\r\n    private privBufferedBytes: number = 0;\r\n    private privReplay: boolean = false;\r\n    private privLastChunkAcquiredTime: number = 0;\r\n\r\n    public constructor(audioSource: IAudioStreamNode, bytesPerSecond: number) {\r\n        this.privAudioNode = audioSource;\r\n        this.privBytesPerSecond = bytesPerSecond;\r\n    }\r\n\r\n    public id = (): string => {\r\n        return this.privAudioNode.id();\r\n    }\r\n\r\n    // Reads and returns the next chunk of audio buffer.\r\n    // If replay of existing buffers are needed, read() will first seek and replay\r\n    // existing content, and upoin completion it will read new content from the underlying\r\n    // audio node, saving that content into the replayable buffers.\r\n    public read(): Promise<IStreamChunk<ArrayBuffer>> {\r\n        // if there is a replay request to honor.\r\n        if (!!this.privReplay && this.privBuffers.length !== 0) {\r\n            // Find the start point in the buffers.\r\n            // Offsets are in 100ns increments.\r\n            // So how many bytes do we need to seek to get the right offset?\r\n            const offsetToSeek: number = this.privReplayOffset - this.privBufferStartOffset;\r\n\r\n            let bytesToSeek: number = Math.round(offsetToSeek * this.privBytesPerSecond * 1e-7);\r\n            if (0 !== (bytesToSeek % 2)) {\r\n                bytesToSeek++;\r\n            }\r\n\r\n            let i: number = 0;\r\n\r\n            while (i < this.privBuffers.length && bytesToSeek >= this.privBuffers[i].chunk.buffer.byteLength) {\r\n                bytesToSeek -= this.privBuffers[i++].chunk.buffer.byteLength;\r\n            }\r\n\r\n            if (i < this.privBuffers.length) {\r\n                const retVal: ArrayBuffer = this.privBuffers[i].chunk.buffer.slice(bytesToSeek);\r\n\r\n                this.privReplayOffset += (retVal.byteLength / this.privBytesPerSecond) * 1e+7;\r\n\r\n                // If we've reached the end of the buffers, stop replaying.\r\n                if (i === this.privBuffers.length - 1) {\r\n                    this.privReplay = false;\r\n                }\r\n\r\n                return Promise.resolve<IStreamChunk<ArrayBuffer>>({\r\n                    buffer: retVal,\r\n                    isEnd: false,\r\n                    timeReceived: this.privBuffers[i].chunk.timeReceived,\r\n                });\r\n            }\r\n        }\r\n\r\n        return this.privAudioNode.read()\r\n            .then((result: IStreamChunk<ArrayBuffer>) => {\r\n                if (result && result.buffer) {\r\n                    this.privBuffers.push(new BufferEntry(result, this.privBufferSerial++, this.privBufferedBytes));\r\n                    this.privBufferedBytes += result.buffer.byteLength;\r\n                }\r\n                return result;\r\n            });\r\n    }\r\n\r\n    public detach(): Promise<void> {\r\n        this.privBuffers = undefined;\r\n        return this.privAudioNode.detach();\r\n    }\r\n\r\n    public replay(): void {\r\n        if (this.privBuffers && 0 !== this.privBuffers.length) {\r\n            this.privReplay = true;\r\n            this.privReplayOffset = this.privLastShrinkOffset;\r\n        }\r\n    }\r\n\r\n    // Shrinks the existing audio buffers to start at the new offset, or at the\r\n    // beginning of the buffer closest to the requested offset.\r\n    // A replay request will start from the last shrink point.\r\n    public shrinkBuffers(offset: number): void {\r\n        if (this.privBuffers === undefined || this.privBuffers.length === 0) {\r\n            return;\r\n        }\r\n\r\n        this.privLastShrinkOffset = offset;\r\n\r\n        // Find the start point in the buffers.\r\n        // Offsets are in 100ns increments.\r\n        // So how many bytes do we need to seek to get the right offset?\r\n        const offsetToSeek: number = offset - this.privBufferStartOffset;\r\n\r\n        let bytesToSeek: number = Math.round(offsetToSeek * this.privBytesPerSecond * 1e-7);\r\n\r\n        let i: number = 0;\r\n\r\n        while (i < this.privBuffers.length && bytesToSeek >= this.privBuffers[i].chunk.buffer.byteLength) {\r\n            bytesToSeek -= this.privBuffers[i++].chunk.buffer.byteLength;\r\n        }\r\n        this.privBufferStartOffset = Math.round(offset - ((bytesToSeek / this.privBytesPerSecond) * 1e+7));\r\n        this.privBuffers = this.privBuffers.slice(i);\r\n    }\r\n\r\n    // Finds the time a buffer of audio was first seen by offset.\r\n    public findTimeAtOffset(offset: number): number {\r\n        if (offset < this.privBufferStartOffset || this.privBuffers === undefined) {\r\n            return 0;\r\n        }\r\n\r\n        for (const value of this.privBuffers) {\r\n            const startOffset: number = (value.byteOffset / this.privBytesPerSecond) * 1e7;\r\n            const endOffset: number = startOffset + ((value.chunk.buffer.byteLength / this.privBytesPerSecond) * 1e7);\r\n\r\n            if (offset >= startOffset && offset <= endOffset) {\r\n                return value.chunk.timeReceived;\r\n            }\r\n        }\r\n\r\n        return 0;\r\n    }\r\n}\r\n\r\n// Primary use of this class is to help debugging problems with the replay\r\n// code. If the memory cost of alloc / dealloc gets too much, drop it and just use\r\n// the ArrayBuffer directly.\r\n// tslint:disable-next-line:max-classes-per-file\r\nclass BufferEntry {\r\n    public chunk: IStreamChunk<ArrayBuffer>;\r\n    public serial: number;\r\n    public byteOffset: number;\r\n\r\n    public constructor(chunk: IStreamChunk<ArrayBuffer>, serial: number, byteOffset: number) {\r\n        this.chunk = chunk;\r\n        this.serial = serial;\r\n        this.byteOffset = byteOffset;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport { RecognizerConfig } from \"../common.speech/Exports\";\r\nimport { PropertyCollection, PropertyId } from \"../sdk/Exports\";\r\n\r\nexport class ProxyInfo {\r\n    private privProxyHostName: string;\r\n    private privProxyPort: number;\r\n    private privProxyUserName: string;\r\n    private privProxyPassword: string;\r\n\r\n    private constructor(proxyHostName: string, proxyPort: number, proxyUserName: string, proxyPassword: string) {\r\n        this.privProxyHostName = proxyHostName;\r\n        this.privProxyPort = proxyPort;\r\n        this.privProxyUserName = proxyUserName;\r\n        this.privProxyPassword = proxyPassword;\r\n    }\r\n\r\n    public static fromParameters(parameters: PropertyCollection): ProxyInfo {\r\n        return new ProxyInfo(parameters.getProperty(PropertyId.SpeechServiceConnection_ProxyHostName),\r\n            parseInt(parameters.getProperty(PropertyId.SpeechServiceConnection_ProxyPort), 10),\r\n            parameters.getProperty(PropertyId.SpeechServiceConnection_ProxyUserName),\r\n            parameters.getProperty(PropertyId.SpeechServiceConnection_ProxyPassword));\r\n    }\r\n\r\n    public static fromRecognizerConfig(config: RecognizerConfig): ProxyInfo {\r\n        return this.fromParameters(config.parameters);\r\n    }\r\n\r\n    public get HostName(): string {\r\n        return this.privProxyHostName;\r\n    }\r\n\r\n    public get Port(): number {\r\n        return this.privProxyPort;\r\n    }\r\n\r\n    public get UserName(): string {\r\n        return this.privProxyUserName;\r\n    }\r\n\r\n    public get Password(): string {\r\n        return this.privProxyPassword;\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ArgumentNullError,\r\n    Deferred\r\n} from \"../common/Exports\";\r\nimport { IRequestOptions } from \"./Exports\";\r\n\r\n// Node.JS specific xmlhttprequest / browser support.\r\nimport * as XHR from \"xmlhttprequest-ts\";\r\n\r\nexport enum RestRequestType {\r\n    Get = \"get\",\r\n    Post = \"post\",\r\n    Delete = \"delete\",\r\n    File = \"file\",\r\n}\r\n\r\nexport interface IRestResponse {\r\n    ok: boolean;\r\n    status: number;\r\n    statusText: string;\r\n    data: string;\r\n    json: <T>() => T;\r\n    headers: string;\r\n}\r\n\r\n// accept rest operations via request method and return abstracted objects from server response\r\nexport class RestMessageAdapter {\r\n\r\n    private privTimeout: number;\r\n    private privIgnoreCache: boolean;\r\n    private privHeaders: { [key: string]: string; };\r\n\r\n    public constructor(\r\n        configParams: IRequestOptions,\r\n        connectionId?: string\r\n        ) {\r\n\r\n        if (!configParams) {\r\n            throw new ArgumentNullError(\"configParams\");\r\n        }\r\n\r\n        this.privHeaders = configParams.headers;\r\n        this.privTimeout = configParams.timeout;\r\n        this.privIgnoreCache = configParams.ignoreCache;\r\n    }\r\n\r\n    public setHeaders(key: string, value: string ): void {\r\n        this.privHeaders[key] = value;\r\n    }\r\n\r\n    public request(\r\n        method: RestRequestType,\r\n        uri: string,\r\n        queryParams: any = {},\r\n        body: any = null,\r\n        binaryBody: Blob | Buffer = null,\r\n        ): Promise<IRestResponse> {\r\n\r\n        const responseReceivedDeferral = new Deferred<IRestResponse>();\r\n\r\n        let xhr: XMLHttpRequest | XHR.XMLHttpRequest;\r\n        if (typeof (XMLHttpRequest) === \"undefined\") {\r\n            xhr = new XHR.XMLHttpRequest();\r\n        } else {\r\n            xhr = new XMLHttpRequest();\r\n        }\r\n        const requestCommand = method === RestRequestType.File ? \"post\" : method;\r\n        xhr.open(requestCommand, this.withQuery(uri, queryParams), true);\r\n\r\n        if (this.privHeaders) {\r\n            Object.keys(this.privHeaders).forEach((key: any) => xhr.setRequestHeader(key, this.privHeaders[key]));\r\n        }\r\n\r\n        if (this.privIgnoreCache) {\r\n            xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\r\n        }\r\n\r\n        xhr.timeout = this.privTimeout;\r\n\r\n        xhr.onload = () => {\r\n            responseReceivedDeferral.resolve(this.parseXHRResult(xhr));\r\n        };\r\n\r\n        xhr.onerror = () => {\r\n            responseReceivedDeferral.resolve(this.errorResponse(xhr, \"Failed to make request.\"));\r\n        };\r\n\r\n        xhr.ontimeout = () => {\r\n            responseReceivedDeferral.resolve(this.errorResponse(xhr, \"Request took longer than expected.\"));\r\n        };\r\n\r\n        if (method === RestRequestType.File && binaryBody) {\r\n            xhr.setRequestHeader(\"Content-Type\", \"multipart/form-data\");\r\n            xhr.send(binaryBody);\r\n        } else if (method === RestRequestType.Post && body) {\r\n            xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n            xhr.send(JSON.stringify(body));\r\n        } else {\r\n            xhr.send();\r\n        }\r\n\r\n        return responseReceivedDeferral.promise;\r\n    }\r\n\r\n    private parseXHRResult(xhr: XMLHttpRequest | XHR.XMLHttpRequest): IRestResponse {\r\n        return {\r\n            data: xhr.responseText,\r\n            headers: xhr.getAllResponseHeaders(),\r\n            json: <T>() => JSON.parse(xhr.responseText) as T,\r\n            ok: xhr.status >= 200 && xhr.status < 300,\r\n            status: xhr.status,\r\n            statusText: xhr.statusText,\r\n        };\r\n    }\r\n\r\n    private errorResponse(xhr: XMLHttpRequest | XHR.XMLHttpRequest, message: string | null = null): IRestResponse {\r\n        return {\r\n            data: message || xhr.statusText,\r\n            headers: xhr.getAllResponseHeaders(),\r\n            json: <T>() => JSON.parse(message || (\"\\\"\" + xhr.statusText + \"\\\"\")) as T,\r\n            ok: false,\r\n            status: xhr.status,\r\n            statusText: xhr.statusText,\r\n        };\r\n    }\r\n\r\n    private withQuery(url: string, params: any = {}): any {\r\n        const queryString = this.queryParams(params);\r\n        return queryString ? url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + queryString : url;\r\n    }\r\n\r\n    private queryParams(params: any = {}): any {\r\n        return Object.keys(params)\r\n            .map((k: any) => encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]))\r\n            .join(\"&\");\r\n    }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nexport * from \"./ConsoleLoggingListener\";\r\nexport * from \"./IRecorder\";\r\nexport * from \"./MicAudioSource\";\r\nexport * from \"./FileAudioSource\";\r\nexport * from \"./PCMRecorder\";\r\nexport * from \"./WebsocketConnection\";\r\nexport * from \"./WebsocketMessageAdapter\";\r\nexport * from \"./ReplayableAudioNode\";\r\nexport * from \"./ProxyInfo\";\r\nexport * from \"./RestMessageAdapter\";\r\nexport * from \"./RestConfigBase\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\nimport { ConsoleLoggingListener } from \"./src/common.browser/Exports\";\r\nimport { Events } from \"./src/common/Exports\";\r\n\r\n// Common.Storage.SetLocalStorage(new Common.Browser.LocalStorage());\r\n// Common.Storage.SetSessionStorage(new Common.Browser.SessionStorage());\r\nEvents.instance.attachListener(new ConsoleLoggingListener());\r\n\r\n// Speech SDK API\r\nexport * from \"./src/sdk/Exports\";\r\n","// We are only importing what we need.\n\nimport {\n  AudioConfig,\n  OutputFormat,\n  ResultReason,\n  SpeechConfig,\n  SpeechRecognizer\n} from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/microsoft.cognitiveservices.speech.sdk';\n\nexport default {\n  AudioConfig,\n  OutputFormat,\n  ResultReason,\n  SpeechConfig,\n  SpeechRecognizer\n};\n","import arrayToMap from '../../Util/arrayToMap';\nimport SpeechSDK from '../SpeechSDK';\n\nconst {\n  ResultReason: { RecognizingSpeech, RecognizedSpeech }\n} = SpeechSDK;\n\nexport default function(result, { maxAlternatives = Infinity, textNormalization = 'display' } = {}) {\n  if (result.reason === RecognizingSpeech || (result.reason === RecognizedSpeech && !result.json.NBest)) {\n    const resultList = [\n      {\n        confidence: 0.5,\n        transcript: result.text\n      }\n    ];\n\n    if (result.reason === RecognizedSpeech) {\n      resultList.isFinal = true;\n    }\n\n    return resultList;\n  } else if (result.reason === RecognizedSpeech) {\n    const resultList = arrayToMap(\n      (result.json.NBest || [])\n        .slice(0, maxAlternatives)\n        .map(({ Confidence: confidence, Display: display, ITN: itn, Lexical: lexical, MaskedITN: maskedITN }) => ({\n          confidence,\n          transcript:\n            textNormalization === 'itn'\n              ? itn\n              : textNormalization === 'lexical'\n              ? lexical\n              : textNormalization === 'maskeditn'\n              ? maskedITN\n              : display\n        })),\n      { isFinal: true }\n    );\n\n    return resultList;\n  }\n\n  return [];\n}\n","function _interopRequireDefault(obj) {\n  return obj && obj.__esModule ? obj : {\n    \"default\": obj\n  };\n}\n\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n  return fn && uncurryThis(fn);\n} : function (fn) {\n  return fn && function () {\n    return call.apply(fn, arguments);\n  };\n};\n","var documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n  all: documentAll,\n  IS_HTMLDDA: IS_HTMLDDA\n};\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n","var isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = {};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n  return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol();\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","var $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","var isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw $TypeError(tryToString(argument) + ' is not a function');\n};\n","var aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw $TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = true;\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(global, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.25.3',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.25.3/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n    var description = 'Symbol.' + name;\n    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n      WellKnownSymbolsStore[name] = Symbol[name];\n    } else if (USE_SYMBOL_AS_UID && symbolFor) {\n      WellKnownSymbolsStore[name] = symbolFor(description);\n    } else {\n      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n    }\n  } return WellKnownSymbolsStore[name];\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype != 42;\n});\n","var isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw $TypeError($String(argument) + ' is not an object');\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n  var Wrapper = function (a, b, c) {\n    if (this instanceof Wrapper) {\n      switch (arguments.length) {\n        case 0: return new NativeConstructor();\n        case 1: return new NativeConstructor(a);\n        case 2: return new NativeConstructor(a, b);\n      } return new NativeConstructor(a, b, c);\n    } return apply(NativeConstructor, this, arguments);\n  };\n  Wrapper.prototype = NativeConstructor.prototype;\n  return Wrapper;\n};\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var PROTO = options.proto;\n\n  var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n  var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n  var targetPrototype = target.prototype;\n\n  var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n  var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n  for (key in source) {\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contains in native\n    USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n    targetProperty = target[key];\n\n    if (USE_NATIVE) if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(nativeSource, key);\n      nativeProperty = descriptor && descriptor.value;\n    } else nativeProperty = nativeSource[key];\n\n    // export native or implementation\n    sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n    if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n    // bind timers to global for call from export context\n    if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n    // wrap global constructors for prevent changs in this version\n    else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n    // make static versions for prototype methods\n    else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n    // default case\n    else resultProperty = sourceProperty;\n\n    // add a flag to not completely full polyfills\n    if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(resultProperty, 'sham', true);\n    }\n\n    createNonEnumerableProperty(target, key, resultProperty);\n\n    if (PROTO) {\n      VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n      if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n        createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n      }\n      // export virtual prototype methods\n      createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n      // export real prototype methods\n      if (options.real && targetPrototype && !targetPrototype[key]) {\n        createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n      }\n    }\n  }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n  var object = toObject(O);\n  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n  var constructor = object.constructor;\n  if (isCallable(constructor) && object instanceof constructor) {\n    return constructor.prototype;\n  } return object instanceof $Object ? ObjectPrototype : null;\n};\n","var isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (typeof argument == 'object' || isCallable(argument)) return argument;\n  throw $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n","var trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","module.exports = {};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String($Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } return stack;\n};\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n","module.exports = {};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n","var call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw $TypeError(tryToString(argument) + ' is not iterable');\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n","var classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n  var error = Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Error = Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n  var options = arguments.length > 2 ? arguments[2] : undefined;\n  var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n  var that;\n  if (setPrototypeOf) {\n    that = setPrototypeOf($Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n  } else {\n    that = isInstance ? this : create(AggregateErrorPrototype);\n    createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n  }\n  if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));\n  if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n  installErrorCause(that, options);\n  var errorsArray = [];\n  iterate(errors, push, { that: errorsArray });\n  createNonEnumerableProperty(that, 'errors', errorsArray);\n  return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, $Error);\nelse copyConstructorProperties($AggregateError, $Error, { name: true });\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, {\n  constructor: createPropertyDescriptor(1, $AggregateError),\n  message: createPropertyDescriptor(1, ''),\n  name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true, constructor: true, arity: 2 }, {\n  AggregateError: $AggregateError\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.aggregate-error.constructor');\n","module.exports = function () { /* empty */ };\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = uncurryThis(store.get);\n  var wmhas = uncurryThis(store.has);\n  var wmset = uncurryThis(store.set);\n  set = function (it, metadata) {\n    if (wmhas(store, it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    wmset(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n  if (options && options.enumerable) target[key] = value;\n  else createNonEnumerableProperty(target, key, value);\n  return target;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n  defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n    return this;\n  });\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n  if (it) {\n    var target = STATIC ? it : it.prototype;\n    if (!hasOwn(target, TO_STRING_TAG)) {\n      defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n    }\n    if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n      createNonEnumerableProperty(target, 'toString', toString);\n    }\n  }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n          defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n    } else {\n      INCORRECT_VALUES_NAME = true;\n      defaultIterator = function values() { return call(nativeIterator, this); };\n    }\n  }\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n  }\n  Iterators[NAME] = defaultIterator;\n\n  return methods;\n};\n","// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n  return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return createIterResultObject(undefined, true);\n  }\n  if (kind == 'keys') return createIterResultObject(index, false);\n  if (kind == 'values') return createIterResultObject(target[index], false);\n  return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n  defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","// empty\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n","var isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n  if (isPrototypeOf(Prototype, it)) return it;\n  throw $TypeError('Incorrect invocation');\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  try {\n    construct(noop, empty, argument);\n    return true;\n  } catch (error) {\n    return false;\n  }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n  if (!isCallable(argument)) return false;\n  switch (classof(argument)) {\n    case 'AsyncFunction':\n    case 'GeneratorFunction':\n    case 'AsyncGeneratorFunction': return false;\n  }\n  try {\n    // we can't check .prototype since constructors produced by .bind haven't it\n    // `Function#toString` throws on some built-it function in some legacy engines\n    // (for example, `DOMQuad` and similar in FF41-)\n    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n  } catch (error) {\n    return true;\n  }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n  var called;\n  return isConstructorModern(isConstructorModern.call)\n    || !isConstructorModern(Object)\n    || !isConstructorModern(function () { called = true; })\n    || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw $TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw $TypeError('Not enough arguments');\n  return passed;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\ntry {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  $location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar listener = function (event) {\n  run(event.data);\n};\n\nvar post = function (id) {\n  // old engines have not location.origin\n  global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(handler) {\n    validateArgumentsLength(arguments.length, 1);\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(fn, undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    global.addEventListener &&\n    isCallable(global.postMessage) &&\n    !global.importScripts &&\n    $location && $location.protocol !== 'file:' &&\n    !fails(post)\n  ) {\n    defer = post;\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n  flush = function () {\n    var parent, fn;\n    if (IS_NODE && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (error) {\n        if (head) notify();\n        else last = undefined;\n        throw error;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n    toggle = true;\n    node = document.createTextNode('');\n    new MutationObserver(flush).observe(node, { characterData: true });\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    promise = Promise.resolve(undefined);\n    // workaround of WebKit ~ iOS Safari 10.1 bug\n    promise.constructor = Promise;\n    then = bind(promise.then, promise);\n    notify = function () {\n      then(flush);\n    };\n  // Node.js without promises\n  } else if (IS_NODE) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessage\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    // strange IE + webpack dev server bug - use .bind(global)\n    macrotask = bind(macrotask, global);\n    notify = function () {\n      macrotask(flush);\n    };\n  }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n  var task = { fn: fn, next: undefined };\n  if (last) last.next = task;\n  if (!head) {\n    head = task;\n    notify();\n  } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n  var console = global.console;\n  if (console && console.error) {\n    arguments.length == 1 ? console.error(a) : console.error(a, b);\n  }\n};\n","module.exports = function (exec) {\n  try {\n    return { error: false, value: exec() };\n  } catch (error) {\n    return { error: true, value: error };\n  }\n};\n","var Queue = function () {\n  this.head = null;\n  this.tail = null;\n};\n\nQueue.prototype = {\n  add: function (item) {\n    var entry = { item: item, next: null };\n    if (this.head) this.tail.next = entry;\n    else this.head = entry;\n    this.tail = entry;\n  },\n  get: function () {\n    var entry = this.head;\n    if (entry) {\n      this.head = entry.next;\n      if (this.tail === entry) this.tail = null;\n      return entry.item;\n    }\n  }\n};\n\nmodule.exports = Queue;\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* global Deno -- Deno case */\nmodule.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';\n","var IS_DENO = require('../internals/engine-is-deno');\nvar IS_NODE = require('../internals/engine-is-node');\n\nmodule.exports = !IS_DENO && !IS_NODE\n  && typeof window == 'object'\n  && typeof document == 'object';\n","var global = require('../internals/global');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar isCallable = require('../internals/is-callable');\nvar isForced = require('../internals/is-forced');\nvar inspectSource = require('../internals/inspect-source');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_PURE = require('../internals/is-pure');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar SPECIES = wellKnownSymbol('species');\nvar SUBCLASSING = false;\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\n\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\n  var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\n  var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\n  // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n  // We can't detect it synchronously, so just check versions\n  if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n  // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\n  if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\n  // We can't use @@species feature detection in V8 since it causes\n  // deoptimization and performance degradation\n  // https://github.com/zloirock/core-js/issues/679\n  if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {\n    // Detect correctness of subclassing with @@species support\n    var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\n    var FakePromise = function (exec) {\n      exec(function () { /* empty */ }, function () { /* empty */ });\n    };\n    var constructor = promise.constructor = {};\n    constructor[SPECIES] = FakePromise;\n    SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n    if (!SUBCLASSING) return true;\n  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n  } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;\n});\n\nmodule.exports = {\n  CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\n  REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\n  SUBCLASSING: SUBCLASSING\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw $TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aCallable(resolve);\n  this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar IS_NODE = require('../internals/engine-is-node');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar PromiseConstructorDetection = require('../internals/promise-constructor-detection');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\nvar PROMISE = 'Promise';\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar PromiseConstructor = NativePromiseConstructor;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n  var value = state.value;\n  var ok = state.state == FULFILLED;\n  var handler = ok ? reaction.ok : reaction.fail;\n  var resolve = reaction.resolve;\n  var reject = reaction.reject;\n  var domain = reaction.domain;\n  var result, then, exited;\n  try {\n    if (handler) {\n      if (!ok) {\n        if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n        state.rejection = HANDLED;\n      }\n      if (handler === true) result = value;\n      else {\n        if (domain) domain.enter();\n        result = handler(value); // can throw\n        if (domain) {\n          domain.exit();\n          exited = true;\n        }\n      }\n      if (result === reaction.promise) {\n        reject(TypeError('Promise-chain cycle'));\n      } else if (then = isThenable(result)) {\n        call(then, result, resolve, reject);\n      } else resolve(result);\n    } else reject(value);\n  } catch (error) {\n    if (domain && !exited) domain.exit();\n    reject(error);\n  }\n};\n\nvar notify = function (state, isReject) {\n  if (state.notified) return;\n  state.notified = true;\n  microtask(function () {\n    var reactions = state.reactions;\n    var reaction;\n    while (reaction = reactions.get()) {\n      callReaction(reaction, state);\n    }\n    state.notified = false;\n    if (isReject && !state.rejection) onUnhandled(state);\n  });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n  var event, handler;\n  if (DISPATCH_EVENT) {\n    event = document.createEvent('Event');\n    event.promise = promise;\n    event.reason = reason;\n    event.initEvent(name, false, true);\n    global.dispatchEvent(event);\n  } else event = { promise: promise, reason: reason };\n  if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    var value = state.value;\n    var IS_UNHANDLED = isUnhandled(state);\n    var result;\n    if (IS_UNHANDLED) {\n      result = perform(function () {\n        if (IS_NODE) {\n          process.emit('unhandledRejection', value, promise);\n        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n      if (result.error) throw result.value;\n    }\n  });\n};\n\nvar isUnhandled = function (state) {\n  return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n  call(task, global, function () {\n    var promise = state.facade;\n    if (IS_NODE) {\n      process.emit('rejectionHandled', promise);\n    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n  });\n};\n\nvar bind = function (fn, state, unwrap) {\n  return function (value) {\n    fn(state, value, unwrap);\n  };\n};\n\nvar internalReject = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  state.value = value;\n  state.state = REJECTED;\n  notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n  if (state.done) return;\n  state.done = true;\n  if (unwrap) state = unwrap;\n  try {\n    if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n    var then = isThenable(value);\n    if (then) {\n      microtask(function () {\n        var wrapper = { done: false };\n        try {\n          call(then, value,\n            bind(internalResolve, wrapper, state),\n            bind(internalReject, wrapper, state)\n          );\n        } catch (error) {\n          internalReject(wrapper, error, state);\n        }\n      });\n    } else {\n      state.value = value;\n      state.state = FULFILLED;\n      notify(state, false);\n    }\n  } catch (error) {\n    internalReject({ done: false }, error, state);\n  }\n};\n\n// constructor polyfill\nif (FORCED_PROMISE_CONSTRUCTOR) {\n  // 25.4.3.1 Promise(executor)\n  PromiseConstructor = function Promise(executor) {\n    anInstance(this, PromisePrototype);\n    aCallable(executor);\n    call(Internal, this);\n    var state = getInternalPromiseState(this);\n    try {\n      executor(bind(internalResolve, state), bind(internalReject, state));\n    } catch (error) {\n      internalReject(state, error);\n    }\n  };\n\n  PromisePrototype = PromiseConstructor.prototype;\n\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  Internal = function Promise(executor) {\n    setInternalState(this, {\n      type: PROMISE,\n      done: false,\n      notified: false,\n      parent: false,\n      reactions: new Queue(),\n      rejection: false,\n      state: PENDING,\n      value: undefined\n    });\n  };\n\n  // `Promise.prototype.then` method\n  // https://tc39.es/ecma262/#sec-promise.prototype.then\n  Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\n    var state = getInternalPromiseState(this);\n    var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n    state.parent = true;\n    reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n    reaction.fail = isCallable(onRejected) && onRejected;\n    reaction.domain = IS_NODE ? process.domain : undefined;\n    if (state.state == PENDING) state.reactions.add(reaction);\n    else microtask(function () {\n      callReaction(reaction, state);\n    });\n    return reaction.promise;\n  });\n\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    var state = getInternalPromiseState(promise);\n    this.promise = promise;\n    this.resolve = bind(internalResolve, state);\n    this.reject = bind(internalReject, state);\n  };\n\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === PromiseConstructor || C === PromiseWrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n\n  if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\n    nativeThen = NativePromisePrototype.then;\n\n    if (!NATIVE_PROMISE_SUBCLASSING) {\n      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n      defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n        var that = this;\n        return new PromiseConstructor(function (resolve, reject) {\n          call(nativeThen, that, resolve, reject);\n        }).then(onFulfilled, onRejected);\n      // https://github.com/zloirock/core-js/issues/640\n      }, { unsafe: true });\n    }\n\n    // make `.constructor === Promise` work for native promise-based APIs\n    try {\n      delete NativePromisePrototype.constructor;\n    } catch (error) { /* empty */ }\n\n    // make `instanceof Promise` work for native promise-based APIs\n    if (setPrototypeOf) {\n      setPrototypeOf(NativePromisePrototype, PromisePrototype);\n    }\n  }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n  Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n","var NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\n  NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.all` method\n// https://tc39.es/ecma262/#sec-promise.all\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call($promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// `Promise.prototype.catch` method\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\n  'catch': function (onRejected) {\n    return this.then(undefined, onRejected);\n  }\n});\n\n// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n  var method = getBuiltIn('Promise').prototype['catch'];\n  if (NativePromisePrototype['catch'] !== method) {\n    defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\n  }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.race` method\n// https://tc39.es/ecma262/#sec-promise.race\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      var $promiseResolve = aCallable(C.resolve);\n      iterate(iterable, function (promise) {\n        call($promiseResolve, C, promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\n// `Promise.reject` method\n// https://tc39.es/ecma262/#sec-promise.reject\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n  reject: function reject(r) {\n    var capability = newPromiseCapabilityModule.f(this);\n    call(capability.reject, undefined, r);\n    return capability.promise;\n  }\n});\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar promiseResolve = require('../internals/promise-resolve');\n\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\n\n// `Promise.resolve` method\n// https://tc39.es/ecma262/#sec-promise.resolve\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\n  resolve: function resolve(x) {\n    return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\n  }\n});\n","// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.promise.constructor');\nrequire('../modules/es.promise.all');\nrequire('../modules/es.promise.catch');\nrequire('../modules/es.promise.race');\nrequire('../modules/es.promise.reject');\nrequire('../modules/es.promise.resolve');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n  allSettled: function allSettled(iterable) {\n    var C = this;\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var values = [];\n      var counter = 0;\n      var remaining = 1;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyCalled = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'fulfilled', value: value };\n          --remaining || resolve(values);\n        }, function (error) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[index] = { status: 'rejected', reason: error };\n          --remaining || resolve(values);\n        });\n      });\n      --remaining || resolve(values);\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n  any: function any(iterable) {\n    var C = this;\n    var AggregateError = getBuiltIn('AggregateError');\n    var capability = newPromiseCapabilityModule.f(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var promiseResolve = aCallable(C.resolve);\n      var errors = [];\n      var counter = 0;\n      var remaining = 1;\n      var alreadyResolved = false;\n      iterate(iterable, function (promise) {\n        var index = counter++;\n        var alreadyRejected = false;\n        remaining++;\n        call(promiseResolve, C, promise).then(function (value) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyResolved = true;\n          resolve(value);\n        }, function (error) {\n          if (alreadyRejected || alreadyResolved) return;\n          alreadyRejected = true;\n          errors[index] = error;\n          --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n        });\n      });\n      --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n    });\n    if (result.error) reject(result.value);\n    return capability.promise;\n  }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\n  // eslint-disable-next-line unicorn/no-thenable -- required for testing\n  NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n  'finally': function (onFinally) {\n    var C = speciesConstructor(this, getBuiltIn('Promise'));\n    var isFunction = isCallable(onFinally);\n    return this.then(\n      isFunction ? function (x) {\n        return promiseResolve(C, onFinally()).then(function () { return x; });\n      } : onFinally,\n      isFunction ? function (e) {\n        return promiseResolve(C, onFinally()).then(function () { throw e; });\n      } : onFinally\n    );\n  }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n  var method = getBuiltIn('Promise').prototype['finally'];\n  if (NativePromisePrototype['finally'] !== method) {\n    defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\n  }\n}\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = toString(requireObjectCoercible($this));\n    var position = toIntegerOrInfinity(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = charCodeAt(S, position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING\n          ? charAt(S, position)\n          : first\n        : CONVERT_TO_STRING\n          ? stringSlice(S, position, position + 2)\n          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: toString(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return createIterResultObject(undefined, true);\n  point = charAt(string, index);\n  state.index += point.length;\n  return createIterResultObject(point, false);\n});\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","require('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n    createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n  }\n  Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","var parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/promise\");","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime-corejs3/helpers/interopRequireDefault\")[\"default\"];\nvar _promise = _interopRequireDefault(require(\"@babel/runtime-corejs3/core-js-stable/promise\"));\n// ../p-defer/index.js\nfunction pDefer() {\n  var deferred = {};\n  deferred.promise = new _promise[\"default\"](function (resolve, reject) {\n    deferred.resolve = resolve;\n    deferred.reject = reject;\n  });\n  return deferred;\n}\n\n// src/index.js\nmodule.exports = pDefer;\n","import createDeferred from 'p-defer-es5';\n\nexport default function() {\n  let shiftDeferred;\n  const queue = [];\n\n  const push = value => {\n    if (shiftDeferred) {\n      const { resolve } = shiftDeferred;\n\n      shiftDeferred = null;\n      resolve(value);\n    } else {\n      queue.push(value);\n    }\n  };\n\n  const shift = () => {\n    if (queue.length) {\n      return Promise.resolve(queue.shift());\n    }\n\n    return (shiftDeferred || (shiftDeferred = createDeferred())).promise;\n  };\n\n  return {\n    push,\n    shift\n  };\n}\n","function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export default function resolveFunctionOrReturnValue(fnOrValue) {\n  return typeof fnOrValue === 'function' ? fnOrValue() : fnOrValue;\n}\n","import resolveFunctionOrReturnValue from './resolveFunctionOrReturnValue';\n\nlet shouldWarnOnSubscriptionKey = true;\n\nexport default function patchOptions({\n  authorizationToken,\n  credentials,\n  looseEvent,\n  looseEvents,\n  region = 'westus',\n  subscriptionKey,\n  ...otherOptions\n} = {}) {\n  if (typeof looseEvent !== 'undefined') {\n    console.warn('web-speech-cognitive-services: The option \"looseEvent\" should be named as \"looseEvents\".');\n\n    looseEvents = looseEvent;\n  }\n\n  if (!credentials) {\n    if (!authorizationToken && !subscriptionKey) {\n      throw new Error('web-speech-cognitive-services: Credentials must be specified.');\n    } else {\n      console.warn(\n        'web-speech-cognitive-services: We are deprecating authorizationToken, region, and subscriptionKey. Please use credentials instead. The deprecated option will be removed on or after 2020-11-14.'\n      );\n\n      credentials = async () =>\n        authorizationToken\n          ? { authorizationToken: await resolveFunctionOrReturnValue(authorizationToken), region }\n          : { region, subscriptionKey: await resolveFunctionOrReturnValue(subscriptionKey) };\n    }\n  }\n\n  return {\n    ...otherOptions,\n    fetchCredentials: async () => {\n      const {\n        authorizationToken,\n        customVoiceHostname,\n        region,\n        speechRecognitionHostname,\n        speechSynthesisHostname,\n        subscriptionKey\n      } = await resolveFunctionOrReturnValue(credentials);\n\n      if ((!authorizationToken && !subscriptionKey) || (authorizationToken && subscriptionKey)) {\n        throw new Error(\n          'web-speech-cognitive-services: Either \"authorizationToken\" or \"subscriptionKey\" must be provided.'\n        );\n      } else if (!region && !(speechRecognitionHostname && speechSynthesisHostname)) {\n        throw new Error(\n          'web-speech-cognitive-services: Either \"region\" or \"speechRecognitionHostname\" and \"speechSynthesisHostname\" must be set.'\n        );\n      } else if (region && (customVoiceHostname || speechRecognitionHostname || speechSynthesisHostname)) {\n        throw new Error(\n          'web-speech-cognitive-services: Only either \"region\" or \"customVoiceHostname\", \"speechRecognitionHostname\" and \"speechSynthesisHostname\" can be set.'\n        );\n      } else if (authorizationToken) {\n        if (typeof authorizationToken !== 'string') {\n          throw new Error('web-speech-cognitive-services: \"authorizationToken\" must be a string.');\n        }\n      } else if (typeof subscriptionKey !== 'string') {\n        throw new Error('web-speech-cognitive-services: \"subscriptionKey\" must be a string.');\n      }\n\n      if (shouldWarnOnSubscriptionKey && subscriptionKey) {\n        console.warn(\n          'web-speech-cognitive-services: In production environment, subscription key should not be used, authorization token should be used instead.'\n        );\n\n        shouldWarnOnSubscriptionKey = false;\n      }\n\n      const resolvedCredentials = authorizationToken ? { authorizationToken } : { subscriptionKey };\n\n      if (region) {\n        resolvedCredentials.region = region;\n      } else {\n        resolvedCredentials.customVoiceHostname = customVoiceHostname;\n        resolvedCredentials.speechRecognitionHostname = speechRecognitionHostname;\n        resolvedCredentials.speechSynthesisHostname = speechSynthesisHostname;\n      }\n\n      return resolvedCredentials;\n    },\n    looseEvents\n  };\n}\n","/* eslint class-methods-use-this: \"off\" */\n\nexport default class {\n  constructor() {\n    this._phrases = [];\n  }\n\n  addFromString() {\n    throw new Error('JSGF is not supported');\n  }\n\n  get phrases() {\n    return this._phrases;\n  }\n\n  set phrases(value) {\n    if (Array.isArray(value)) {\n      this._phrases = value;\n    } else if (typeof value === 'string') {\n      this._phrases = [value];\n    } else {\n      throw new Error(`The provided value is not an array or of type 'string'`);\n    }\n  }\n}\n","/* eslint class-methods-use-this: \"off\" */\n/* eslint complexity: [\"error\", 70] */\n/* eslint no-await-in-loop: \"off\" */\n/* eslint no-empty-function: \"off\" */\n/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 100, 150] }] */\n\nimport { Event, EventTarget, getEventAttributeValue, setEventAttributeValue } from 'event-target-shim/es5';\n\nimport cognitiveServiceEventResultToWebSpeechRecognitionResultList from './cognitiveServiceEventResultToWebSpeechRecognitionResultList';\nimport createPromiseQueue from '../../Util/createPromiseQueue';\nimport patchOptions from '../patchOptions';\nimport SpeechGrammarList from './SpeechGrammarList';\nimport SpeechSDK from '../SpeechSDK';\n\n// https://docs.microsoft.com/en-us/javascript/api/microsoft-cognitiveservices-speech-sdk/speechconfig?view=azure-node-latest#outputformat\n// {\n//   \"RecognitionStatus\": \"Success\",\n//   \"Offset\": 900000,\n//   \"Duration\": 49000000,\n//   \"NBest\": [\n//     {\n//       \"Confidence\": 0.738919,\n//       \"Lexical\": \"second\",\n//       \"ITN\": \"second\",\n//       \"MaskedITN\": \"second\",\n//       \"Display\": \"Second.\"\n//     }\n//   ]\n// }\n\n// {\n//   \"RecognitionStatus\": \"InitialSilenceTimeout\",\n//   \"Offset\": 50000000,\n//   \"Duration\": 0\n// }\n\nconst { AudioConfig, OutputFormat, ResultReason, SpeechConfig, SpeechRecognizer } = SpeechSDK;\n\nfunction serializeRecognitionResult({ duration, errorDetails, json, offset, properties, reason, resultId, text }) {\n  return {\n    duration,\n    errorDetails,\n    json: JSON.parse(json),\n    offset,\n    properties,\n    reason,\n    resultId,\n    text\n  };\n}\n\nfunction averageAmplitude(arrayBuffer) {\n  const array = new Int16Array(arrayBuffer);\n\n  return (\n    [].reduce.call(array, (averageAmplitude, amplitude) => averageAmplitude + Math.abs(amplitude), 0) / array.length\n  );\n}\n\nfunction cognitiveServicesAsyncToPromise(fn) {\n  return (...args) => new Promise((resolve, reject) => fn(...args, resolve, reject));\n}\n\nclass SpeechRecognitionEvent extends Event {\n  constructor(type, { data, emma, interpretation, resultIndex, results } = {}) {\n    super(type);\n\n    this.data = data;\n    this.emma = emma;\n    this.interpretation = interpretation;\n    this.resultIndex = resultIndex;\n    this.results = results;\n  }\n}\n\nfunction prepareAudioConfig(audioConfig) {\n  const originalAttach = audioConfig.attach;\n  const boundOriginalAttach = audioConfig.attach.bind(audioConfig);\n  let firstChunk;\n  let muted;\n\n  // We modify \"attach\" function and detect when audible chunk is read.\n  // We will only modify \"attach\" function once.\n  audioConfig.attach = async () => {\n    const reader = await boundOriginalAttach();\n\n    return {\n      ...reader,\n      read: async () => {\n        const chunk = await reader.read();\n\n        // The magic number 150 is measured by:\n        // 1. Set microphone volume to 0\n        // 2. Observe the amplitude (100-110) for the first few chunks\n        //    (There is a short static caught when turning on the microphone)\n        // 3. Set the number a bit higher than the observation\n\n        if (!firstChunk && averageAmplitude(chunk.buffer) > 150) {\n          audioConfig.events.onEvent({ name: 'FirstAudibleChunk' });\n          firstChunk = true;\n        }\n\n        if (muted) {\n          return { buffer: new ArrayBuffer(0), isEnd: true, timeReceived: Date.now() };\n        }\n\n        return chunk;\n      }\n    };\n  };\n\n  return {\n    audioConfig,\n    pause: () => {\n      muted = true;\n    },\n    unprepare: () => {\n      audioConfig.attach = originalAttach;\n    }\n  };\n}\n\nexport function createSpeechRecognitionPonyfillFromRecognizer({\n  createRecognizer,\n  enableTelemetry,\n  looseEvents,\n  referenceGrammars,\n  textNormalization\n}) {\n  // If enableTelemetry is set to null or non-boolean, we will default to true.\n  SpeechRecognizer.enableTelemetry(enableTelemetry !== false);\n\n  class SpeechRecognition extends EventTarget {\n    constructor() {\n      super();\n\n      this._continuous = false;\n      this._interimResults = false;\n      this._lang =\n        typeof window !== 'undefined'\n          ? window.document.documentElement.getAttribute('lang') || window.navigator.language\n          : 'en-US';\n      this._grammars = new SpeechGrammarList();\n      this._maxAlternatives = 1;\n    }\n\n    emitCognitiveServices(type, event) {\n      this.dispatchEvent(\n        new SpeechRecognitionEvent('cognitiveservices', {\n          data: {\n            ...event,\n            type\n          }\n        })\n      );\n    }\n\n    get continuous() {\n      return this._continuous;\n    }\n\n    set continuous(value) {\n      this._continuous = value;\n    }\n\n    get grammars() {\n      return this._grammars;\n    }\n\n    set grammars(value) {\n      if (value instanceof SpeechGrammarList) {\n        this._grammars = value;\n      } else {\n        throw new Error(`The provided value is not of type 'SpeechGrammarList'`);\n      }\n    }\n\n    get interimResults() {\n      return this._interimResults;\n    }\n\n    set interimResults(value) {\n      this._interimResults = value;\n    }\n\n    get maxAlternatives() {\n      return this._maxAlternatives;\n    }\n\n    set maxAlternatives(value) {\n      this._maxAlternatives = value;\n    }\n\n    get lang() {\n      return this._lang;\n    }\n\n    set lang(value) {\n      this._lang = value;\n    }\n\n    get onaudioend() {\n      return getEventAttributeValue(this, 'audioend');\n    }\n\n    set onaudioend(value) {\n      setEventAttributeValue(this, 'audioend', value);\n    }\n\n    get onaudiostart() {\n      return getEventAttributeValue(this, 'audiostart');\n    }\n\n    set onaudiostart(value) {\n      setEventAttributeValue(this, 'audiostart', value);\n    }\n\n    get oncognitiveservices() {\n      return getEventAttributeValue(this, 'cognitiveservices');\n    }\n\n    set oncognitiveservices(value) {\n      setEventAttributeValue(this, 'cognitiveservices', value);\n    }\n\n    get onend() {\n      return getEventAttributeValue(this, 'end');\n    }\n\n    set onend(value) {\n      setEventAttributeValue(this, 'end', value);\n    }\n\n    get onerror() {\n      return getEventAttributeValue(this, 'error');\n    }\n\n    set onerror(value) {\n      setEventAttributeValue(this, 'error', value);\n    }\n\n    get onresult() {\n      return getEventAttributeValue(this, 'result');\n    }\n\n    set onresult(value) {\n      setEventAttributeValue(this, 'result', value);\n    }\n\n    get onsoundend() {\n      return getEventAttributeValue(this, 'soundend');\n    }\n\n    set onsoundend(value) {\n      setEventAttributeValue(this, 'soundend', value);\n    }\n\n    get onsoundstart() {\n      return getEventAttributeValue(this, 'soundstart');\n    }\n\n    set onsoundstart(value) {\n      setEventAttributeValue(this, 'soundstart', value);\n    }\n\n    get onspeechend() {\n      return getEventAttributeValue(this, 'speechend');\n    }\n\n    set onspeechend(value) {\n      setEventAttributeValue(this, 'speechend', value);\n    }\n\n    get onspeechstart() {\n      return getEventAttributeValue(this, 'speechstart');\n    }\n\n    set onspeechstart(value) {\n      setEventAttributeValue(this, 'speechstart', value);\n    }\n\n    get onstart() {\n      return getEventAttributeValue(this, 'start');\n    }\n\n    set onstart(value) {\n      setEventAttributeValue(this, 'start', value);\n    }\n\n    start() {\n      this._startOnce().catch(err => {\n        this.dispatchEvent(new ErrorEvent('error', { error: err, message: err && (err.stack || err.message) }));\n      });\n    }\n\n    async _startOnce() {\n      // TODO: [P2] Should check if recognition is active, we should not start recognition twice\n      const recognizer = await createRecognizer(this.lang);\n\n      const { pause, unprepare } = prepareAudioConfig(recognizer.audioConfig);\n\n      try {\n        const queue = createPromiseQueue();\n        let soundStarted;\n        let speechStarted;\n        let stopping;\n\n        const { detach: detachAudioConfigEvent } = recognizer.audioConfig.events.attach(event => {\n          const { name } = event;\n\n          if (name === 'AudioSourceReadyEvent') {\n            queue.push({ audioSourceReady: {} });\n          } else if (name === 'AudioSourceOffEvent') {\n            queue.push({ audioSourceOff: {} });\n          } else if (name === 'FirstAudibleChunk') {\n            queue.push({ firstAudibleChunk: {} });\n          }\n        });\n\n        recognizer.canceled = (_, { errorDetails, offset, reason, sessionId }) => {\n          queue.push({\n            canceled: {\n              errorDetails,\n              offset,\n              reason,\n              sessionId\n            }\n          });\n        };\n\n        recognizer.recognized = (_, { offset, result, sessionId }) => {\n          queue.push({\n            recognized: {\n              offset,\n              result: serializeRecognitionResult(result),\n              sessionId\n            }\n          });\n        };\n\n        recognizer.recognizing = (_, { offset, result, sessionId }) => {\n          queue.push({\n            recognizing: {\n              offset,\n              result: serializeRecognitionResult(result),\n              sessionId\n            }\n          });\n        };\n\n        recognizer.sessionStarted = (_, { sessionId }) => {\n          queue.push({ sessionStarted: { sessionId } });\n        };\n\n        recognizer.sessionStopped = (_, { sessionId }) => {\n          // \"sessionStopped\" is never fired, probably because we are using startContinuousRecognitionAsync instead of recognizeOnceAsync.\n          queue.push({ sessionStopped: { sessionId } });\n        };\n\n        recognizer.speechStartDetected = (_, { offset, sessionId }) => {\n          queue.push({ speechStartDetected: { offset, sessionId } });\n        };\n\n        recognizer.speechEndDetected = (_, { sessionId }) => {\n          // \"speechEndDetected\" is never fired, probably because we are using startContinuousRecognitionAsync instead of recognizeOnceAsync.\n          // Update: \"speechEndDetected\" is fired for DLSpeech.listenOnceAsync()\n          queue.push({ speechEndDetected: { sessionId } });\n        };\n\n        const { phrases } = this.grammars;\n\n        // HACK: We are using the internal of SpeechRecognizer because they did not expose it\n        const { dynamicGrammar } = recognizer.privReco;\n\n        referenceGrammars && referenceGrammars.length && dynamicGrammar.addReferenceGrammar(referenceGrammars);\n        phrases && phrases.length && dynamicGrammar.addPhrase(phrases);\n\n        await cognitiveServicesAsyncToPromise(recognizer.startContinuousRecognitionAsync.bind(recognizer))();\n\n        if (recognizer.stopContinuousRecognitionAsync) {\n          this.abort = () => queue.push({ abort: {} });\n          this.stop = () => queue.push({ stop: {} });\n        } else {\n          this.abort = this.stop = undefined;\n        }\n\n        let audioStarted;\n        let finalEvent;\n        let finalizedResults = [];\n\n        for (let loop = 0; !stopping || audioStarted; loop++) {\n          const event = await queue.shift();\n          const {\n            abort,\n            audioSourceOff,\n            audioSourceReady,\n            canceled,\n            firstAudibleChunk,\n            recognized,\n            recognizing,\n            stop\n          } = event;\n\n          // We are emitting event \"cognitiveservices\" for debugging purpose.\n          Object.keys(event).forEach(name => this.emitCognitiveServices(name, event[name]));\n\n          const errorMessage = canceled && canceled.errorDetails;\n\n          if (/Permission\\sdenied/u.test(errorMessage || '')) {\n            // If microphone is not allowed, we should not emit \"start\" event.\n\n            finalEvent = {\n              error: 'not-allowed',\n              type: 'error'\n            };\n\n            break;\n          }\n\n          if (!loop) {\n            this.dispatchEvent(new SpeechRecognitionEvent('start'));\n          }\n\n          if (errorMessage) {\n            if (/1006/u.test(errorMessage)) {\n              if (!audioStarted) {\n                this.dispatchEvent(new SpeechRecognitionEvent('audiostart'));\n                this.dispatchEvent(new SpeechRecognitionEvent('audioend'));\n              }\n\n              finalEvent = {\n                error: 'network',\n                type: 'error'\n              };\n            } else {\n              finalEvent = {\n                error: 'unknown',\n                type: 'error'\n              };\n            }\n\n            break;\n          } else if (abort || stop) {\n            if (abort) {\n              finalEvent = {\n                error: 'aborted',\n                type: 'error'\n              };\n\n              // If we are aborting, we will ignore lingering recognizing/recognized events. But if we are stopping, we need them.\n              stopping = 'abort';\n            } else {\n              // When we pause, we will send { isEnd: true }, Speech Services will send us \"recognized\" event.\n              pause();\n              stopping = 'stop';\n            }\n\n            // Abort should not be dispatched without support of \"stopContinuousRecognitionAsync\".\n            // But for defensive purpose, we make sure \"stopContinuousRecognitionAsync\" is available before we can call.\n            if (abort && recognizer.stopContinuousRecognitionAsync) {\n              await cognitiveServicesAsyncToPromise(recognizer.stopContinuousRecognitionAsync.bind(recognizer))();\n            }\n          } else if (audioSourceReady) {\n            this.dispatchEvent(new SpeechRecognitionEvent('audiostart'));\n\n            audioStarted = true;\n          } else if (firstAudibleChunk) {\n            this.dispatchEvent(new SpeechRecognitionEvent('soundstart'));\n\n            soundStarted = true;\n          } else if (audioSourceOff) {\n            // Looks like we don't need this line and all the tests are still working.\n            // Guessing probably stopping is already truthy.\n            // stopping = true;\n\n            speechStarted && this.dispatchEvent(new SpeechRecognitionEvent('speechend'));\n            soundStarted && this.dispatchEvent(new SpeechRecognitionEvent('soundend'));\n            audioStarted && this.dispatchEvent(new SpeechRecognitionEvent('audioend'));\n\n            audioStarted = soundStarted = speechStarted = false;\n\n            break;\n          } else if (stopping !== 'abort') {\n            if (recognized && recognized.result && recognized.result.reason === ResultReason.NoMatch) {\n              finalEvent = {\n                error: 'no-speech',\n                type: 'error'\n              };\n            } else if (recognized || recognizing) {\n              if (!audioStarted) {\n                // Unconfirmed prevention of quirks\n                this.dispatchEvent(new SpeechRecognitionEvent('audiostart'));\n\n                audioStarted = true;\n              }\n\n              if (!soundStarted) {\n                this.dispatchEvent(new SpeechRecognitionEvent('soundstart'));\n\n                soundStarted = true;\n              }\n\n              if (!speechStarted) {\n                this.dispatchEvent(new SpeechRecognitionEvent('speechstart'));\n\n                speechStarted = true;\n              }\n\n              if (recognized) {\n                const result = cognitiveServiceEventResultToWebSpeechRecognitionResultList(recognized.result, {\n                  maxAlternatives: this.maxAlternatives,\n                  textNormalization\n                });\n\n                const recognizable = !!result[0].transcript;\n\n                if (recognizable) {\n                  finalizedResults = [...finalizedResults, result];\n\n                  this.continuous &&\n                    this.dispatchEvent(\n                      new SpeechRecognitionEvent('result', {\n                        results: finalizedResults\n                      })\n                    );\n                }\n\n                // If it is continuous, we just sent the finalized results. So we don't need to send it again after \"audioend\" event.\n                if (this.continuous && recognizable) {\n                  finalEvent = null;\n                } else {\n                  finalEvent = {\n                    results: finalizedResults,\n                    type: 'result'\n                  };\n                }\n\n                if (!this.continuous && recognizer.stopContinuousRecognitionAsync) {\n                  await cognitiveServicesAsyncToPromise(recognizer.stopContinuousRecognitionAsync.bind(recognizer))();\n                }\n\n                // If event order can be loosened, we can send the recognized event as soon as we receive it.\n                // 1. If it is not recognizable (no-speech), we should send an \"error\" event just before \"end\" event. We will not loosen \"error\" events.\n                if (looseEvents && finalEvent && recognizable) {\n                  this.dispatchEvent(new SpeechRecognitionEvent(finalEvent.type, finalEvent));\n                  finalEvent = null;\n                }\n              } else if (recognizing) {\n                this.interimResults &&\n                  this.dispatchEvent(\n                    new SpeechRecognitionEvent('result', {\n                      results: [\n                        ...finalizedResults,\n                        cognitiveServiceEventResultToWebSpeechRecognitionResultList(recognizing.result, {\n                          maxAlternatives: this.maxAlternatives,\n                          textNormalization\n                        })\n                      ]\n                    })\n                  );\n              }\n            }\n          }\n        }\n\n        if (speechStarted) {\n          this.dispatchEvent(new SpeechRecognitionEvent('speechend'));\n        }\n\n        if (soundStarted) {\n          this.dispatchEvent(new SpeechRecognitionEvent('soundend'));\n        }\n\n        if (audioStarted) {\n          this.dispatchEvent(new SpeechRecognitionEvent('audioend'));\n        }\n\n        if (finalEvent) {\n          if (finalEvent.type === 'result' && !finalEvent.results.length) {\n            finalEvent = {\n              error: 'no-speech',\n              type: 'error'\n            };\n          }\n\n          if (finalEvent.type === 'error') {\n            this.dispatchEvent(new ErrorEvent('error', finalEvent));\n          } else {\n            this.dispatchEvent(new SpeechRecognitionEvent(finalEvent.type, finalEvent));\n          }\n        }\n\n        // Even though there is no \"start\" event emitted, we will still emit \"end\" event\n        // This is mainly for \"microphone blocked\" story.\n        this.dispatchEvent(new SpeechRecognitionEvent('end'));\n\n        detachAudioConfigEvent();\n      } catch (err) {\n        // Logging out the erorr because Speech SDK would fail silently.\n        console.error(err);\n\n        throw err;\n      } finally {\n        unprepare();\n        recognizer.dispose();\n      }\n    }\n  }\n\n  return {\n    SpeechGrammarList,\n    SpeechRecognition,\n    SpeechRecognitionEvent\n  };\n}\n\nexport default options => {\n  const {\n    audioConfig = AudioConfig.fromDefaultMicrophoneInput(),\n\n    // We set telemetry to true to honor the default telemetry settings of Speech SDK\n    // https://github.com/Microsoft/cognitive-services-speech-sdk-js#data--telemetry\n    enableTelemetry = true,\n\n    fetchCredentials,\n    looseEvents,\n    referenceGrammars,\n    speechRecognitionEndpointId,\n    textNormalization = 'display'\n  } = patchOptions(options);\n\n  if (!audioConfig && (!window.navigator.mediaDevices || !window.navigator.mediaDevices.getUserMedia)) {\n    console.warn(\n      'web-speech-cognitive-services: This browser does not support WebRTC and it will not work with Cognitive Services Speech Services.'\n    );\n\n    return {};\n  }\n\n  const createRecognizer = async lang => {\n    const { authorizationToken, region, speechRecognitionHostname, subscriptionKey } = await fetchCredentials();\n    let speechConfig;\n\n    if (speechRecognitionHostname) {\n      const host = { hostname: speechRecognitionHostname, port: 443, protocol: 'wss:' };\n\n      if (authorizationToken) {\n        speechConfig = SpeechConfig.fromHost(host);\n        speechConfig.authorizationToken = authorizationToken;\n      } else {\n        speechConfig = SpeechConfig.fromHost(host, subscriptionKey);\n      }\n    } else {\n      speechConfig = authorizationToken\n        ? SpeechConfig.fromAuthorizationToken(authorizationToken, region)\n        : SpeechConfig.fromSubscription(subscriptionKey, region);\n    }\n\n    if (speechRecognitionEndpointId) {\n      speechConfig.endpointId = speechRecognitionEndpointId;\n    }\n\n    speechConfig.outputFormat = OutputFormat.Detailed;\n    speechConfig.speechRecognitionLanguage = lang || 'en-US';\n\n    return new SpeechRecognizer(speechConfig, audioConfig);\n  };\n\n  return createSpeechRecognitionPonyfillFromRecognizer({\n    audioConfig,\n    createRecognizer,\n    enableTelemetry,\n    looseEvents,\n    referenceGrammars,\n    textNormalization\n  });\n};\n","import createSpeechRecognitionPonyfill, {\n  createSpeechRecognitionPonyfillFromRecognizer\n} from './SpeechToText/createSpeechRecognitionPonyfill';\n\nexport default createSpeechRecognitionPonyfill;\n\nexport { createSpeechRecognitionPonyfillFromRecognizer };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = onErrorResumeNext;\n\nfunction onErrorResumeNext(fn) {\n  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n  try {\n    var result = fn.call(context);\n\n    if (typeof result.then === 'function') {\n      return new Promise(function (resolve) {\n        result.then(resolve, function () {\n          return resolve();\n        });\n      });\n    } else {\n      return result;\n    }\n  } catch (err) {}\n}\n\nmodule.exports = exports.default;\nmodule.exports.default = exports.default;","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var cache = null;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n            return cache.lastResult;\n        }\n        var lastResult = resultFn.apply(this, newArgs);\n        cache = {\n            lastResult: lastResult,\n            lastArgs: newArgs,\n            lastThis: this,\n        };\n        return lastResult;\n    }\n    memoized.clear = function clear() {\n        cache = null;\n    };\n    return memoized;\n}\n\nexport { memoizeOne as default };\n","/* eslint no-await-in-loop: \"off\" */\n\nexport default class {\n  constructor(audioContext) {\n    this.audioContext = audioContext;\n  }\n\n  pause() {\n    this.audioContext && this.audioContext.suspend();\n    this.playingUtterance && this.playingUtterance.dispatchEvent(new CustomEvent('pause'));\n  }\n\n  resume() {\n    this.audioContext && this.audioContext.resume();\n    this.playingUtterance && this.playingUtterance.dispatchEvent(new CustomEvent('resume'));\n  }\n\n  async start(queue) {\n    let utterance;\n\n    while ((utterance = queue.shift())) {\n      this.playingUtterance = utterance;\n\n      await utterance.play(this.audioContext);\n\n      this.playingUtterance = null;\n    }\n  }\n\n  stop() {\n    this.playingUtterance && this.playingUtterance.stop();\n\n    if (this.audioContext.state === 'suspended') {\n      // Play -> Pause -> Cancel (stop)\n      // This would generate these events: \"start\", \"pause\", \"end\"\n\n      // Without this code, the \"end\" event will not emit until resume() is called\n      // Cancelling an unstarted utterance will not emit any \"start\" or \"end\" event\n      this.audioContext.resume();\n    }\n  }\n}\n","/* eslint no-await-in-loop: \"off\" */\n\nimport memoize from 'memoize-one';\n\nimport AudioContextConsumer from './AudioContextConsumer';\n\nexport default class {\n  constructor({ audioContext, ponyfill }) {\n    this.consumer = null;\n    this.paused = false;\n    this.queue = [];\n\n    this.getAudioContext = memoize(() => audioContext || new ponyfill.AudioContext());\n  }\n\n  pause() {\n    this.paused = true;\n    this.consumer && this.consumer.pause();\n  }\n\n  push(utterance) {\n    this.queue.push(utterance);\n    this.startConsumer();\n  }\n\n  resume() {\n    this.paused = false;\n\n    if (this.consumer) {\n      this.consumer.resume();\n    } else {\n      this.startConsumer();\n    }\n  }\n\n  get speaking() {\n    return !!this.consumer;\n  }\n\n  async startConsumer() {\n    while (!this.paused && this.queue.length && !this.consumer) {\n      this.consumer = new AudioContextConsumer(this.getAudioContext());\n\n      await this.consumer.start(this.queue);\n\n      this.consumer = null;\n    }\n  }\n\n  stop() {\n    this.queue.splice(0);\n    this.consumer && this.consumer.stop();\n  }\n}\n","export default class {\n  constructor({ gender, lang, voiceURI }) {\n    this._default = false;\n    this._gender = gender;\n    this._lang = lang;\n    this._localService = false;\n    this._name = voiceURI;\n    this._voiceURI = voiceURI;\n  }\n\n  get default() {\n    return this._default;\n  }\n\n  get gender() {\n    return this._gender;\n  }\n\n  get lang() {\n    return this._lang;\n  }\n\n  get localService() {\n    return this._localService;\n  }\n\n  get name() {\n    return this._name;\n  }\n\n  get voiceURI() {\n    return this._voiceURI;\n  }\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, -1] }] */\n\nimport SpeechSynthesisVoice from './SpeechSynthesisVoice';\n\nasync function fetchCustomVoices({ customVoiceHostname, deploymentId, region, subscriptionKey }) {\n  const hostname = customVoiceHostname || `${ region }.customvoice.api.speech.microsoft.com`;\n\n  // Although encodeURI on a hostname doesn't work as expected for hostname, at least, it will fail peacefully.\n  const res = await fetch(\n    `https://${ encodeURI(hostname) }/api/texttospeech/v2.0/endpoints/${ encodeURIComponent(deploymentId) }`,\n    {\n      headers: {\n        accept: 'application/json',\n        'ocp-apim-subscription-key': subscriptionKey\n      }\n    }\n  );\n\n  if (!res.ok) {\n    throw new Error('Failed to fetch custom voices');\n  }\n\n  return res.json();\n}\n\nexport default async function({ customVoiceHostname, deploymentId, region, subscriptionKey }) {\n  const { models } = await fetchCustomVoices({ customVoiceHostname, deploymentId, region, subscriptionKey });\n\n  return models\n    .map(\n      ({ properties: { Gender: gender }, locale: lang, name: voiceURI }) =>\n        new SpeechSynthesisVoice({ gender, lang, voiceURI })\n    )\n    .sort(({ name: x }, { name: y }) => (x > y ? 1 : x < y ? -1 : 0));\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, -1] }] */\n\nimport SpeechSynthesisVoice from './SpeechSynthesisVoice';\n\nexport default async function fetchVoices({ authorizationToken, region, speechSynthesisHostname, subscriptionKey }) {\n  // Although encodeURI on a hostname doesn't work as expected for hostname, at least, it will fail peacefully.\n  const hostname = speechSynthesisHostname || `${ encodeURI(region) }.tts.speech.microsoft.com`;\n  const res = await fetch(`https://${ hostname }/cognitiveservices/voices/list`, {\n    headers: {\n      'content-type': 'application/json',\n      ...(authorizationToken\n        ? {\n            authorization: `Bearer ${ authorizationToken }`\n          }\n        : {\n            'Ocp-Apim-Subscription-Key': subscriptionKey\n          })\n    }\n  });\n\n  if (!res.ok) {\n    throw new Error('Failed to fetch voices');\n  }\n\n  const voices = await res.json();\n\n  return voices\n    .map(({ Gender: gender, Locale: lang, Name: voiceURI }) => new SpeechSynthesisVoice({ gender, lang, voiceURI }))\n    .sort(({ name: x }, { name: y }) => (x > y ? 1 : x < y ? -1 : 0));\n}\n","import { Event } from 'event-target-shim/es5';\n\nexport default class SpeechSynthesisEvent extends Event {\n  constructor(type) {\n    super(type);\n  }\n}\n","// The MIT License (MIT)\n//\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n// This piece of code is adopted from https://github.com/sindresorhus/p-defer\n\n// The reason why we need to fork it is because:\n// - The original package published to NPM is not ES5-compliant\n//    - Due to the use of arrow functions\n// - create-react-app@1 does not play nice with packages that are not ES5-compliant\n//    - create-react-app@2 do play nice, but it was so new that most of the people are still on @1\n\n// Criteria to remove this package:\n// - When create-react-app@2 become mainstream, or,\n// - When p-defer start publishing a ES5-compliant version on NPM\n\n'use strict';\n\nmodule.exports = function () {\n  const ret = {};\n\n  ret.promise = new Promise(function (resolve, reject) {\n    ret.resolve = resolve;\n    ret.reject = reject;\n  });\n\n  return ret;\n};\n","import createDeferred from './external/p-defer';\n\nexport default class EventAsPromise {\n  constructor(options = {}) {\n    this.defers = [];\n    this.upcomingDeferred = null;\n    this.eventListener = this.eventListener.bind(this);\n    this.options = options;\n\n    this.one = this.one.bind(this);\n    this.upcoming = this.upcoming.bind(this);\n\n    this[Symbol.iterator] = () => ({\n      next: () => ({\n        done: false,\n        value: this.upcoming()\n      })\n    });\n  }\n\n  eventListener(event) {\n    const deferred = this.defers.shift();\n    const args = this.options.array ? [].slice.call(arguments) : event;\n\n    deferred && deferred.resolve(args);\n\n    if (this.upcomingDeferred) {\n      this.upcomingDeferred.resolve(args);\n      this.upcomingDeferred = null;\n    }\n  }\n\n  one() {\n    const deferred = createDeferred();\n\n    this.defers.push(deferred);\n\n    return deferred.promise;\n  }\n\n  upcoming() {\n    if (!this.upcomingDeferred) {\n      this.upcomingDeferred = createDeferred();\n    }\n\n    return this.upcomingDeferred.promise;\n  }\n}\n","const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n};\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 100] }] */\n\n// Cognitive Services does not support unsigned percentage\n// It must be converted into +/- first.\nfunction relativePercentage(value) {\n  let relative = Math.round((value - 1) * 100);\n\n  if (relative >= 0) {\n    relative = '+' + relative;\n  }\n\n  return relative + '%';\n}\n\nexport default function buildSSML({ lang, pitch = 1, rate = 1, text, voice, volume }) {\n  return `<speak version=\"1.0\" xml:lang=\"${ lang }\">\n  <voice xml:lang=\"${ lang }\" name=\"${ voice }\">\n    <prosody pitch=\"${ relativePercentage(pitch) }\" rate=\"${ relativePercentage(rate) }\" volume=\"${ relativePercentage(\n    volume\n  ) }\">\n      ${ text }\n    </prosody>\n  </voice>\n</speak>`;\n}\n","const SPEAK_TAG_PATTERN = /^\\s*<speak(\\s|\\/?>)/u;\nconst XML_PROLOG_PATTERN = /^\\s*<\\?xml\\s/u;\n\nexport default function isSSML(text) {\n  return SPEAK_TAG_PATTERN.test(text) || XML_PROLOG_PATTERN.test(text);\n}\n","import { decode } from 'base64-arraybuffer';\nimport buildSSML from './buildSSML';\nimport isSSML from './isSSML';\n\nconst DEFAULT_LANGUAGE = 'en-US';\nconst DEFAULT_OUTPUT_FORMAT = 'riff-16khz-16bit-mono-pcm';\nconst DEFAULT_VOICE = 'Microsoft Server Speech Text to Speech Voice (en-US, AriaNeural)';\nconst EMPTY_MP3_BASE64 =\n  'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjU2LjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3LjY0AAAAAAAAAAAAAAAAJAUHAAAAAAAAAYYoRBqpAAAAAAD/+xDEAAPAAAGkAAAAIAAANIAAAARMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMQpg8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV';\n\nexport default async function({\n  deploymentId,\n  fetchCredentials,\n  lang = DEFAULT_LANGUAGE,\n  outputFormat = DEFAULT_OUTPUT_FORMAT,\n  pitch,\n  rate,\n  text,\n  voice = DEFAULT_VOICE,\n  volume\n}) {\n  if (!text) {\n    // If text is empty, play a short audio clip. This allows developers to easily prime the AudioContext object by playing an empty string.\n    return decode(EMPTY_MP3_BASE64);\n  }\n\n  const { authorizationToken, region, speechSynthesisHostname, subscriptionKey } = await fetchCredentials();\n\n  if ((authorizationToken && subscriptionKey) || (!authorizationToken && !subscriptionKey)) {\n    throw new Error('Only \"authorizationToken\" or \"subscriptionKey\" should be set.');\n  } else if ((region && speechSynthesisHostname) || (!region && !speechSynthesisHostname)) {\n    throw new Error('Only \"region\" or \"speechSynthesisHostnamename\" should be set.');\n  }\n\n  const ssml = isSSML(text) ? text : buildSSML({ lang, pitch, rate, text, voice, volume });\n\n  // Although calling encodeURI on hostname does not actually works, it fails faster and safer.\n  const hostname =\n    speechSynthesisHostname ||\n    (deploymentId\n      ? `${ encodeURI(region) }.voice.speech.microsoft.com`\n      : `${ encodeURI(region) }.tts.speech.microsoft.com`);\n  const search = deploymentId ? `?deploymentId=${ encodeURI(deploymentId) }` : '';\n  const url = `https://${ hostname }/cognitiveservices/v1${ search }`;\n\n  const res = await fetch(url, {\n    headers: {\n      'Content-Type': 'application/ssml+xml',\n      'X-Microsoft-OutputFormat': outputFormat,\n      ...(authorizationToken\n        ? {\n            Authorization: `Bearer ${ authorizationToken }`\n          }\n        : {\n            'Ocp-Apim-Subscription-Key': subscriptionKey\n          })\n    },\n    method: 'POST',\n    body: ssml\n  });\n\n  if (!res.ok) {\n    throw new Error(`web-speech-cognitive-services: Failed to syntheis speech, server returned ${ res.status }`);\n  }\n\n  return res.arrayBuffer();\n}\n","export default function subscribeEvent(target, name, handler) {\n  target.addEventListener(name, handler);\n\n  return () => target.removeEventListener(name, handler);\n}\n","/* eslint no-empty: [\"error\", { \"allowEmptyCatch\": true }] */\n\nimport { EventTarget, getEventAttributeValue, setEventAttributeValue } from 'event-target-shim/es5';\nimport EventAsPromise from 'event-as-promise';\n\nimport fetchSpeechData from './fetchSpeechData';\nimport SpeechSynthesisEvent from './SpeechSynthesisEvent';\nimport subscribeEvent from './subscribeEvent';\n\nfunction asyncDecodeAudioData(audioContext, arrayBuffer) {\n  return new Promise((resolve, reject) => {\n    const promise = audioContext.decodeAudioData(arrayBuffer, resolve, reject);\n\n    // Newer implementation of \"decodeAudioData\" will return a Promise\n    promise && typeof promise.then === 'function' && resolve(promise);\n  });\n}\n\nfunction playDecoded(audioContext, audioBuffer, source) {\n  return new Promise((resolve, reject) => {\n    const audioContextClosed = new EventAsPromise();\n    const sourceEnded = new EventAsPromise();\n    const unsubscribe = subscribeEvent(\n      audioContext,\n      'statechange',\n      ({ target: { state } }) => state === 'closed' && audioContextClosed.eventListener()\n    );\n\n    try {\n      source.buffer = audioBuffer;\n      // \"ended\" may not fire if the underlying AudioContext is closed prematurely\n      source.onended = sourceEnded.eventListener;\n\n      source.connect(audioContext.destination);\n      source.start(0);\n\n      Promise.race([audioContextClosed.upcoming(), sourceEnded.upcoming()]).then(resolve);\n    } catch (err) {\n      reject(err);\n    } finally {\n      unsubscribe();\n    }\n  });\n}\n\nclass SpeechSynthesisUtterance extends EventTarget {\n  constructor(text) {\n    super();\n\n    this._lang = null;\n    this._pitch = 1;\n    this._rate = 1;\n    this._voice = null;\n    this._volume = 1;\n\n    this.text = text;\n\n    this.onboundary = null;\n    this.onend = null;\n    this.onerror = null;\n    this.onmark = null;\n    this.onpause = null;\n    this.onresume = null;\n    this.onstart = null;\n  }\n\n  get lang() {\n    return this._lang;\n  }\n\n  set lang(value) {\n    this._lang = value;\n  }\n\n  get onboundary() {\n    return getEventAttributeValue(this, 'boundary');\n  }\n\n  set onboundary(value) {\n    setEventAttributeValue(this, 'boundary', value);\n  }\n\n  get onend() {\n    return getEventAttributeValue(this, 'end');\n  }\n\n  set onend(value) {\n    setEventAttributeValue(this, 'end', value);\n  }\n\n  get onerror() {\n    return getEventAttributeValue(this, 'error');\n  }\n\n  set onerror(value) {\n    setEventAttributeValue(this, 'error', value);\n  }\n\n  get onmark() {\n    return getEventAttributeValue(this, 'mark');\n  }\n\n  set onmark(value) {\n    setEventAttributeValue(this, 'mark', value);\n  }\n\n  get onpause() {\n    return getEventAttributeValue(this, 'pause');\n  }\n\n  set onpause(value) {\n    setEventAttributeValue(this, 'pause', value);\n  }\n\n  get onresume() {\n    return getEventAttributeValue(this, 'resume');\n  }\n\n  set onresume(value) {\n    setEventAttributeValue(this, 'resume', value);\n  }\n\n  get onstart() {\n    return getEventAttributeValue(this, 'start');\n  }\n\n  set onstart(value) {\n    setEventAttributeValue(this, 'start', value);\n  }\n\n  get pitch() {\n    return this._pitch;\n  }\n\n  set pitch(value) {\n    this._pitch = value;\n  }\n\n  get rate() {\n    return this._rate;\n  }\n\n  set rate(value) {\n    this._rate = value;\n  }\n\n  get voice() {\n    return this._voice;\n  }\n\n  set voice(value) {\n    this._voice = value;\n  }\n\n  get volume() {\n    return this._volume;\n  }\n\n  set volume(value) {\n    this._volume = value;\n  }\n\n  preload({ deploymentId, fetchCredentials, outputFormat }) {\n    this.arrayBufferPromise = fetchSpeechData({\n      fetchCredentials,\n      deploymentId,\n      lang: this.lang || window.navigator.language,\n      outputFormat,\n      pitch: this.pitch,\n      rate: this.rate,\n      text: this.text,\n      voice: this.voice && this.voice.voiceURI,\n      volume: this.volume\n    });\n\n    // We need to call \"catch\" to make sure the Promise is running.\n    // We will ignore the reject result and handled in play() later.\n    this.arrayBufferPromise.catch();\n  }\n\n  async play(audioContext) {\n    try {\n      // We should emit \"start\" event even if preload() failed.\n      this.dispatchEvent(new SpeechSynthesisEvent('start'));\n\n      // HACK: iOS requires bufferSourceNode to be constructed before decoding data.\n      const source = audioContext.createBufferSource();\n      const audioBuffer = await asyncDecodeAudioData(audioContext, await this.arrayBufferPromise);\n\n      this._playingSource = source;\n\n      await playDecoded(audioContext, audioBuffer, source);\n\n      this._playingSource = null;\n      this.dispatchEvent(new SpeechSynthesisEvent('end'));\n    } catch (error) {\n      // \"message\" is not in spec but to provide a friendly message.\n      this.dispatchEvent(new ErrorEvent('error', { error: 'synthesis-failed', message: error.stack }));\n    }\n  }\n\n  stop() {\n    this._playingSource && this._playingSource.stop();\n  }\n}\n\nexport default SpeechSynthesisUtterance;\n","/* eslint class-methods-use-this: 0 */\n\nimport { EventTarget, getEventAttributeValue, setEventAttributeValue } from 'event-target-shim/es5';\nimport createDeferred from 'p-defer-es5';\nimport onErrorResumeNext from 'on-error-resume-next';\n\nimport AudioContextQueue from './AudioContextQueue';\nimport fetchCustomVoices from './fetchCustomVoices';\nimport fetchVoices from './fetchVoices';\nimport patchOptions from '../patchOptions';\nimport SpeechSynthesisEvent from './SpeechSynthesisEvent';\nimport SpeechSynthesisUtterance from './SpeechSynthesisUtterance';\n\n// Supported output format can be found at https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/rest-text-to-speech#audio-outputs\nconst DEFAULT_OUTPUT_FORMAT = 'audio-24khz-160kbitrate-mono-mp3';\nconst EMPTY_ARRAY = [];\n\nexport default options => {\n  const {\n    audioContext,\n    fetchCredentials,\n    ponyfill = {\n      AudioContext: window.AudioContext || window.webkitAudioContext\n    },\n    speechSynthesisDeploymentId,\n    speechSynthesisOutputFormat = DEFAULT_OUTPUT_FORMAT\n  } = patchOptions(options);\n\n  if (!audioContext && !ponyfill.AudioContext) {\n    console.warn(\n      'web-speech-cognitive-services: This browser does not support Web Audio and it will not work with Cognitive Services Speech Services.'\n    );\n\n    return {};\n  }\n\n  class SpeechSynthesis extends EventTarget {\n    constructor() {\n      super();\n\n      this.queue = new AudioContextQueue({ audioContext, ponyfill });\n\n      this.updateVoices();\n    }\n\n    cancel() {\n      this.queue.stop();\n    }\n\n    getVoices() {\n      return EMPTY_ARRAY;\n    }\n\n    get onvoiceschanged() {\n      return getEventAttributeValue(this, 'voiceschanged');\n    }\n\n    set onvoiceschanged(value) {\n      setEventAttributeValue(this, 'voiceschanged', value);\n    }\n\n    pause() {\n      this.queue.pause();\n    }\n\n    resume() {\n      this.queue.resume();\n    }\n\n    speak(utterance) {\n      if (!(utterance instanceof SpeechSynthesisUtterance)) {\n        throw new Error('invalid utterance');\n      }\n\n      const { reject, resolve, promise } = createDeferred();\n      const handleError = ({ error: errorCode, message }) => {\n        const error = new Error(errorCode);\n\n        error.stack = message;\n\n        reject(error);\n      };\n\n      utterance.addEventListener('end', resolve);\n      utterance.addEventListener('error', handleError);\n\n      utterance.preload({\n        deploymentId: speechSynthesisDeploymentId,\n        fetchCredentials,\n        outputFormat: speechSynthesisOutputFormat\n      });\n\n      this.queue.push(utterance);\n\n      return promise.finally(() => {\n        utterance.removeEventListener('end', resolve);\n        utterance.removeEventListener('error', handleError);\n      });\n    }\n\n    get speaking() {\n      return this.queue.speaking;\n    }\n\n    async updateVoices() {\n      const { customVoiceHostname, region, speechSynthesisHostname, subscriptionKey } = await fetchCredentials();\n\n      if (speechSynthesisDeploymentId) {\n        if (subscriptionKey) {\n          console.warn(\n            'web-speech-cognitive-services: Listing of custom voice models are only available when using subscription key.'\n          );\n\n          await onErrorResumeNext(async () => {\n            const voices = await fetchCustomVoices({\n              customVoiceHostname,\n              deploymentId: speechSynthesisDeploymentId,\n              region,\n              speechSynthesisHostname,\n              subscriptionKey\n            });\n\n            this.getVoices = () => voices;\n          });\n        }\n      } else {\n        // If fetch voice list failed, we will not emit \"voiceschanged\" event.\n        // In the spec, there is no \"error\" event.\n\n        await onErrorResumeNext(async () => {\n          const voices = await fetchVoices(await fetchCredentials());\n\n          this.getVoices = () => voices;\n        });\n      }\n\n      this.dispatchEvent(new SpeechSynthesisEvent('voiceschanged'));\n    }\n  }\n\n  return {\n    speechSynthesis: new SpeechSynthesis(),\n    SpeechSynthesisEvent,\n    SpeechSynthesisUtterance\n  };\n};\n","import createSpeechSynthesisPonyfill from './TextToSpeech/createSpeechSynthesisPonyfill';\n\nexport default createSpeechSynthesisPonyfill;\n","const TOKEN_URL_TEMPLATE = 'https://{region}.api.cognitive.microsoft.com/sts/v1.0/issueToken';\n\nexport default async function ({ region, subscriptionKey }) {\n  const res = await fetch(\n    TOKEN_URL_TEMPLATE.replace(/\\{region\\}/u, region),\n    {\n      headers: {\n        'Ocp-Apim-Subscription-Key': subscriptionKey\n      },\n      method: 'POST'\n    }\n  );\n\n  if (!res.ok) {\n    throw new Error(`Failed to fetch authorization token, server returned ${ res.status }`);\n  }\n\n  return res.text();\n}\n","/* global process */\n\nimport createSpeechRecognitionPonyfill, {\n  createSpeechRecognitionPonyfillFromRecognizer\n} from './SpeechServices/SpeechToText';\nimport createSpeechSynthesisPonyfill from './SpeechServices/TextToSpeech';\nimport fetchAuthorizationToken from './SpeechServices/fetchAuthorizationToken';\n\nexport default function createSpeechServicesPonyfill(options = {}, ...args) {\n  const ponyfill = {\n    ...createSpeechRecognitionPonyfill(options, ...args),\n    ...createSpeechSynthesisPonyfill(options, ...args)\n  };\n\n  return {\n    ...ponyfill,\n    then: resolve => {\n      console.warn(\n        'web-speech-cognitive-services: This function no longer need to be called in an asynchronous fashion. Please update your code. We will remove this Promise.then function on or after 2020-08-10.'\n      );\n\n      resolve(ponyfill);\n    }\n  };\n}\n\nexport {\n  createSpeechRecognitionPonyfill,\n  createSpeechRecognitionPonyfillFromRecognizer,\n  createSpeechSynthesisPonyfill,\n  fetchAuthorizationToken\n}\n\nconst meta = document.createElement('meta');\n\nmeta.setAttribute('name', 'web-speech-cognitive-services');\nmeta.setAttribute('content', `version=${ process.env.npm_package_version }`);\n\ndocument.head.appendChild(meta);\n","import { Components, type ComposerProps } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport AddFullBundle, { type AddFullBundleProps } from './AddFullBundle';\n\nconst { Composer } = Components;\n\ntype FullComposerProps = ComposerProps & AddFullBundleProps;\n\nconst FullComposer = (props: FullComposerProps) => (\n  <AddFullBundle {...props}>\n    {extraProps => (\n      <Composer {...props} {...extraProps}>\n        {/* We need to spread, thus, we cannot we destructuring assignment. */}\n        {/* eslint-disable-next-line react/destructuring-assignment */}\n        {props.children}\n      </Composer>\n    )}\n  </AddFullBundle>\n);\n\nFullComposer.defaultProps = {\n  ...Composer.defaultProps,\n  adaptiveCardsHostConfig: undefined,\n  adaptiveCardsPackage: undefined,\n  children: undefined\n};\n\nFullComposer.propTypes = {\n  ...Composer.propTypes,\n  adaptiveCardsHostConfig: PropTypes.any,\n  adaptiveCardsPackage: PropTypes.any,\n  children: PropTypes.any\n};\n\nexport default FullComposer;\n\nexport type { FullComposerProps };\n","import {\n  type AttachmentForScreenReaderMiddleware,\n  type AttachmentMiddleware,\n  type StyleOptions\n} from 'botframework-webchat-api';\nimport { singleToArray, warnOnce, type OneOrMany } from 'botframework-webchat-core';\nimport React, { type ReactNode } from 'react';\n\nimport AdaptiveCardsComposer from './adaptiveCards/AdaptiveCardsComposer';\nimport { type AdaptiveCardsStyleOptions } from './adaptiveCards/AdaptiveCardsStyleOptions';\nimport { type AdaptiveCardsPackage } from './types/AdaptiveCardsPackage';\nimport { type StrictFullBundleStyleOptions } from './types/FullBundleStyleOptions';\nimport useComposerProps from './useComposerProps';\n\ntype AddFullBundleProps = Readonly<{\n  adaptiveCardsHostConfig?: any;\n  adaptiveCardsPackage?: AdaptiveCardsPackage;\n  attachmentForScreenReaderMiddleware?: OneOrMany<AttachmentForScreenReaderMiddleware>;\n  attachmentMiddleware?: OneOrMany<AttachmentMiddleware>;\n  children: ({ extraStyleSet }: { extraStyleSet: any }) => ReactNode;\n  renderMarkdown?: (\n    markdown: string,\n    newLineOptions: { markdownRespectCRLF: boolean },\n    linkOptions: { externalLinkAlt: string }\n  ) => string;\n  styleOptions?: StyleOptions & AdaptiveCardsStyleOptions;\n  styleSet?: any & { options: StrictFullBundleStyleOptions };\n\n  /** @deprecated Rename to \"adaptiveCardsHostConfig\" */\n  adaptiveCardHostConfig?: any;\n}>;\n\nconst adaptiveCardHostConfigDeprecation = warnOnce(\n  '\"adaptiveCardHostConfig\" is deprecated. Please use \"adaptiveCardsHostConfig\" instead. \"adaptiveCardHostConfig\" will be removed on or after 2022-01-01.'\n);\n\nconst AddFullBundle = ({\n  adaptiveCardHostConfig,\n  adaptiveCardsHostConfig,\n  adaptiveCardsPackage,\n  attachmentForScreenReaderMiddleware,\n  attachmentMiddleware,\n  children,\n  renderMarkdown,\n  styleOptions,\n  styleSet\n}: AddFullBundleProps) => {\n  adaptiveCardHostConfig && adaptiveCardHostConfigDeprecation();\n\n  const patchedProps = useComposerProps({\n    attachmentForScreenReaderMiddleware: singleToArray(attachmentForScreenReaderMiddleware),\n    attachmentMiddleware: singleToArray(attachmentMiddleware),\n    renderMarkdown,\n    styleOptions,\n    styleSet\n  });\n\n  return (\n    <AdaptiveCardsComposer\n      adaptiveCardsHostConfig={adaptiveCardHostConfig || adaptiveCardsHostConfig}\n      adaptiveCardsPackage={adaptiveCardsPackage}\n    >\n      {children(patchedProps)}\n    </AdaptiveCardsComposer>\n  );\n};\n\nexport default AddFullBundle;\n\nexport type { AddFullBundleProps };\n","import * as defaultAdaptiveCardsPackage from 'adaptivecards';\nimport React, { useMemo, type ReactNode } from 'react';\n\nimport { type AdaptiveCardsPackage } from '../types/AdaptiveCardsPackage';\nimport AdaptiveCardsContext from './AdaptiveCardsContext';\n\ntype AdaptiveCardsComposerProps = Readonly<{\n  adaptiveCardsHostConfig: any;\n  adaptiveCardsPackage: AdaptiveCardsPackage;\n  children?: ReactNode | undefined;\n}>;\n\nconst AdaptiveCardsComposer = ({\n  adaptiveCardsHostConfig,\n  adaptiveCardsPackage,\n  children\n}: AdaptiveCardsComposerProps) => {\n  const patchedAdaptiveCardsPackage = useMemo(\n    () => adaptiveCardsPackage || defaultAdaptiveCardsPackage,\n    [adaptiveCardsPackage]\n  );\n\n  const adaptiveCardsContext = useMemo(\n    () => ({\n      adaptiveCardsPackage: patchedAdaptiveCardsPackage,\n      hostConfigFromProps: adaptiveCardsHostConfig\n    }),\n    [adaptiveCardsHostConfig, patchedAdaptiveCardsPackage]\n  );\n\n  return <AdaptiveCardsContext.Provider value={adaptiveCardsContext}>{children}</AdaptiveCardsContext.Provider>;\n};\n\nexport default AdaptiveCardsComposer;\n","import { createContext } from 'react';\n\nimport { type AdaptiveCardsPackage } from '../types/AdaptiveCardsPackage';\n\ntype AdaptiveCardsContextType = {\n  adaptiveCardsPackage: AdaptiveCardsPackage;\n  hostConfigFromProps: any;\n};\n\nconst AdaptiveCardsContext = createContext<AdaptiveCardsContextType>(undefined);\n\nexport default AdaptiveCardsContext;\nexport type { AdaptiveCardsContextType };\n","import { AttachmentForScreenReaderMiddleware, AttachmentMiddleware } from 'botframework-webchat-api';\nimport { useMemo } from 'react';\n\nimport createAdaptiveCardsAttachmentForScreenReaderMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware';\nimport createAdaptiveCardsAttachmentMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentMiddleware';\nimport createAdaptiveCardsStyleSet from './adaptiveCards/Styles/createAdaptiveCardsStyleSet';\nimport defaultRenderMarkdown from './markdown/renderMarkdown';\n\nexport default function useComposerProps({\n  attachmentForScreenReaderMiddleware,\n  attachmentMiddleware,\n  renderMarkdown,\n  styleOptions,\n  styleSet\n}: {\n  attachmentForScreenReaderMiddleware: AttachmentForScreenReaderMiddleware[];\n  attachmentMiddleware: AttachmentMiddleware[];\n  renderMarkdown?: (\n    markdown: string,\n    newLineOptions: { markdownRespectCRLF: boolean },\n    linkOptions: { externalLinkAlt: string }\n  ) => string;\n  styleOptions: any;\n  styleSet: any;\n}): {\n  attachmentForScreenReaderMiddleware: AttachmentForScreenReaderMiddleware[];\n  attachmentMiddleware: AttachmentMiddleware[];\n  renderMarkdown: (\n    markdown: string,\n    newLineOptions: { markdownRespectCRLF: boolean },\n    linkOptions: { externalLinkAlt: string }\n  ) => string;\n  extraStyleSet: any;\n} {\n  const patchedAttachmentMiddleware = useMemo(\n    () => [...attachmentMiddleware, createAdaptiveCardsAttachmentMiddleware()],\n    [attachmentMiddleware]\n  );\n\n  const patchedAttachmentForScreenReaderMiddleware = useMemo(\n    () => [...attachmentForScreenReaderMiddleware, createAdaptiveCardsAttachmentForScreenReaderMiddleware()],\n    [attachmentForScreenReaderMiddleware]\n  );\n\n  // When styleSet is not specified, the styleOptions will be used to create Adaptive Cards styleSet and merged into useStyleSet.\n  const extraStyleSet = useMemo(\n    () => (styleSet ? undefined : createAdaptiveCardsStyleSet(styleOptions)),\n    [styleOptions, styleSet]\n  );\n\n  const patchedRenderMarkdown = useMemo(\n    () => (typeof renderMarkdown === 'undefined' ? defaultRenderMarkdown : renderMarkdown),\n    [renderMarkdown]\n  );\n\n  return {\n    attachmentForScreenReaderMiddleware: patchedAttachmentForScreenReaderMiddleware,\n    attachmentMiddleware: patchedAttachmentMiddleware,\n    extraStyleSet,\n    renderMarkdown: patchedRenderMarkdown\n  };\n}\n","import { AttachmentForScreenReaderMiddleware } from 'botframework-webchat-api';\nimport React from 'react';\n\nimport AdaptiveCardAttachment from './AttachmentForScreenReader/AdaptiveCardAttachment';\nimport RichCardAttachment from './AttachmentForScreenReader/RichCardAttachment';\n\nconst RICH_CARD_CONTENT_TYPES = [\n  'application/vnd.microsoft.card.animation',\n  'application/vnd.microsoft.card.audio',\n  'application/vnd.microsoft.card.hero',\n  'application/vnd.microsoft.card.oauth',\n  'application/vnd.microsoft.card.receipt',\n  'application/vnd.microsoft.card.signin',\n  'application/vnd.microsoft.card.thumbnail',\n  'application/vnd.microsoft.card.video'\n];\n\nexport default function createAdaptiveCardsAttachmentMiddleware(): AttachmentForScreenReaderMiddleware {\n  return () =>\n    next =>\n    (...args) => {\n      const [\n        {\n          attachment: { content, contentType }\n        }\n      ] = args;\n\n      return content && RICH_CARD_CONTENT_TYPES.includes(contentType)\n        ? () => <RichCardAttachment content={content} />\n        : content && contentType === 'application/vnd.microsoft.card.adaptive'\n          ? () => <AdaptiveCardAttachment content={content} />\n          : next(...args);\n    };\n}\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable react/forbid-dom-props */\nimport { hooks } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\n\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useParseAdaptiveCardJSON from '../hooks/internal/useParseAdaptiveCardJSON';\nimport useUniqueId from '../hooks/internal/useUniqueId';\n\nconst { useLocalizer } = hooks;\n\n// Perform a depth-first search of the Adaptive Card tree.\nfunction walkAllItems(node, fn) {\n  fn(node);\n\n  if (node.getItemAt && node.getItemCount) {\n    for (let count = node.getItemCount(), index = 0; index < count; index++) {\n      walkAllItems(node.getItemAt(index), fn);\n    }\n  }\n\n  if (node.getActionAt && node.getActionCount) {\n    for (let count = node.getActionCount(), index = 0; index < count; index++) {\n      fn(node.getActionAt(index));\n    }\n  }\n}\n\nconst AdaptiveCardChoiceSetInput = ({ input: { choices, defaultValue, label } }) => {\n  const labelId = useUniqueId('webchat__id');\n  const defaultChoice = choices.find(({ value }) => defaultValue === value || (!defaultValue && !value));\n\n  return (\n    <div>\n      <select\n        aria-label={label}\n        aria-labelledby={!label && defaultChoice ? labelId : undefined}\n        defaultValue={defaultValue}\n        tabIndex={-1}\n      >\n        {choices.map(choice => (\n          <option id={!label && choice === defaultChoice ? labelId : undefined} key={choice.value} value={choice.value}>\n            {choice.title}\n          </option>\n        ))}\n      </select>\n    </div>\n  );\n};\n\nAdaptiveCardChoiceSetInput.propTypes = {\n  input: PropTypes.shape({\n    choices: PropTypes.arrayOf(\n      PropTypes.shape({\n        title: PropTypes.string,\n        value: PropTypes.any\n      })\n    ),\n    defaultValue: PropTypes.any,\n    label: PropTypes.string,\n    value: PropTypes.any\n  }).isRequired\n};\n\nconst AdaptiveCardAttachment = ({ content }) => {\n  const localize = useLocalizer();\n  const parseAdaptiveCardJSON = useParseAdaptiveCardJSON();\n  const [\n    {\n      ChoiceSetInput,\n      DateInput,\n      NumberInput,\n      OpenUrlAction,\n      ShowCardAction,\n      SubmitAction,\n      TextInput,\n      TimeInput,\n      ToggleInput\n    }\n  ] = useAdaptiveCardsPackage();\n\n  const card = useMemo(() => parseAdaptiveCardJSON(content, { ignoreErrors: true }), [content, parseAdaptiveCardJSON]);\n  const inputs = useMemo(() => {\n    const inputs = [];\n\n    walkAllItems(card, node => {\n      if (\n        node instanceof ChoiceSetInput ||\n        node instanceof DateInput ||\n        node instanceof NumberInput ||\n        node instanceof OpenUrlAction ||\n        node instanceof ShowCardAction ||\n        node instanceof SubmitAction ||\n        node instanceof TextInput ||\n        node instanceof TimeInput ||\n        node instanceof ToggleInput\n      ) {\n        inputs.push(node);\n      }\n    });\n\n    return inputs;\n  }, [\n    card,\n    ChoiceSetInput,\n    DateInput,\n    NumberInput,\n    OpenUrlAction,\n    ShowCardAction,\n    SubmitAction,\n    TextInput,\n    TimeInput,\n    ToggleInput\n  ]);\n\n  const cardLabel = localize('ATTACHMENT_CARD', card.speak || '', '', '');\n\n  return (\n    <article>\n      <div>{cardLabel}</div>\n      {inputs.map((input, index) =>\n        input instanceof ChoiceSetInput ? (\n          <AdaptiveCardChoiceSetInput input={input} key={index} />\n        ) : input instanceof DateInput ? (\n          <label key={index}>\n            {input.title}\n            <input placeholder={input.placeholder} tabIndex={-1} type=\"date\" />\n          </label>\n        ) : input instanceof NumberInput ? (\n          <label key={index}>\n            {input.title}\n            <input placeholder={input.placeholder} tabIndex={-1} type=\"number\" />\n          </label>\n        ) : input instanceof OpenUrlAction || input instanceof ShowCardAction || input instanceof SubmitAction ? (\n          <div key={index}>\n            <button tabIndex={-1} type=\"button\">\n              {input.title}\n            </button>\n          </div>\n        ) : input instanceof TextInput ? (\n          <label key={index}>\n            {input.title}\n            <input placeholder={input.placeholder} tabIndex={-1} type=\"text\" />\n          </label>\n        ) : input instanceof TimeInput ? (\n          <label key={index}>\n            {input.title}\n            <input placeholder={input.placeholder} tabIndex={-1} type=\"time\" />\n          </label>\n        ) : input instanceof ToggleInput ? (\n          <label key={index}>\n            {input.title}\n            <input defaultChecked={input.value === input.valueOn} tabIndex={-1} type=\"checkbox\" />\n          </label>\n        ) : (\n          false\n        )\n      )}\n    </article>\n  );\n};\n\nAdaptiveCardAttachment.propTypes = {\n  content: PropTypes.any.isRequired\n};\n\nexport default AdaptiveCardAttachment;\n","import { useContext } from 'react';\n\nimport AdaptiveCardsContext, { type AdaptiveCardsContextType } from '../../AdaptiveCardsContext';\n\nexport default function useAdaptiveCardsContext(): AdaptiveCardsContextType {\n  const context = useContext(AdaptiveCardsContext);\n\n  if (!context) {\n    throw new Error('This hook can only be used on component that is decendants of <ComposerWithAdaptiveCards>');\n  }\n\n  return context;\n}\n","import { type AdaptiveCardsPackage } from '../../types/AdaptiveCardsPackage';\nimport useAdaptiveCardsContext from './internal/useAdaptiveCardsContext';\n\nexport default function useAdaptiveCardsPackage(): [AdaptiveCardsPackage] {\n  const { adaptiveCardsPackage } = useAdaptiveCardsContext();\n\n  return [adaptiveCardsPackage];\n}\n","import { hooks } from 'botframework-webchat-component';\nimport { useCallback, useMemo } from 'react';\n\nimport useAdaptiveCardsPackage from '../useAdaptiveCardsPackage';\nimport useStyleOptions from '../../../hooks/useStyleOptions';\n\nconst { useDirection } = hooks;\n\nfunction updateRTLInline(element, rtl, adaptiveCardsPackage) {\n  if (element instanceof adaptiveCardsPackage.Container) {\n    element.rtl = rtl;\n  }\n\n  // Tree traversal to add rtl boolean to child elements\n  if (element.getItemAt && element.getItemCount) {\n    const count = element.getItemCount();\n\n    for (let index = 0; index < count; index++) {\n      const child = element.getItemAt(index);\n\n      updateRTLInline(child, rtl, adaptiveCardsPackage);\n    }\n  }\n}\n\nexport default function useParseAdaptiveCardJSON() {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [direction] = useDirection();\n  const [{ adaptiveCardsParserMaxVersion }] = useStyleOptions();\n\n  const { AdaptiveCard, SerializationContext, Version } = adaptiveCardsPackage;\n\n  const maxVersion = useMemo(() => {\n    const maxVersion = Version.parse(adaptiveCardsParserMaxVersion, new SerializationContext());\n\n    if (maxVersion && !maxVersion.isValid) {\n      console.warn('botframework-webchat: \"adaptiveCardsParserMaxVersion\" specified is not a valid version.');\n\n      return;\n    }\n\n    return maxVersion;\n  }, [adaptiveCardsParserMaxVersion, SerializationContext, Version]);\n\n  return useCallback(\n    (content, { ignoreErrors = false } = {}) => {\n      if (!content) {\n        return;\n      }\n\n      const card = new AdaptiveCard();\n      const errors = [];\n      const serializationContext = new SerializationContext(maxVersion);\n\n      card.parse(content, serializationContext);\n\n      const { eventCount } = serializationContext;\n\n      for (let i = 0; i < eventCount; i++) {\n        errors.push(serializationContext.getEventAt(i));\n      }\n\n      if (!ignoreErrors && errors.length) {\n        console.error('botframework-webchat: Failed to parse Adaptive Card', { errors });\n\n        throw new Error('botframework-webchat: Failed to parse Adaptive Card');\n      }\n\n      updateRTLInline(card, direction === 'rtl', adaptiveCardsPackage);\n\n      return card;\n    },\n    [AdaptiveCard, adaptiveCardsPackage, direction, maxVersion, SerializationContext]\n  );\n}\n","import { hooks } from 'botframework-webchat-component';\n\nimport { StrictFullBundleStyleOptions } from '../types/FullBundleStyleOptions';\n\nexport default function useStyleOptions(): [StrictFullBundleStyleOptions] {\n  const [styleOptions] = hooks.useStyleOptions();\n\n  return [styleOptions as StrictFullBundleStyleOptions];\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 5, 36] }] */\n\nimport { useMemo } from 'react';\nimport random from 'math-random';\n\nexport default function useUniqueId(prefix?: string): string {\n  const id = useMemo(() => random().toString(36).substr(2, 5), []);\n\n  prefix = prefix ? `${prefix}--` : '';\n\n  return `${prefix}${id}`;\n}\n","/* eslint-disable react/no-array-index-key */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { hooks } from 'botframework-webchat-component';\n\nconst { useLocalizer } = hooks;\n\nconst RichCardAttachment = ({ content = {} }) => {\n  const localize = useLocalizer();\n  const { buttons, facts, image, images, items, subtitle, tax, text, title, total, vat } = content;\n\n  const taxLabel = localize('RECEIPT_CARD_TAX');\n  const totalLabel = localize('RECEIPT_CARD_TOTAL');\n  const vatLabel = localize('RECEIPT_CARD_VAT');\n\n  const cardLabel = localize('ATTACHMENT_CARD', title || '', subtitle || '', text || '');\n\n  return (\n    <article>\n      <div>{cardLabel}</div>\n      {!!image && !!image.alt && <img alt={image.alt} />}\n      {!!images && !!images.length && images.map(({ alt }, index) => <img alt={alt} key={index} />)}\n      {!!facts && !!facts.length && (\n        <dl>\n          {facts.map(({ key, value }, index) => (\n            <React.Fragment key={index}>\n              <dt>{key}</dt>\n              <dd>{value}</dd>\n            </React.Fragment>\n          ))}\n        </dl>\n      )}\n      {!!items && !!items.length && (\n        <ul>\n          {items.map(({ image, price, quantity, subtitle, text, title }, index) => (\n            <li key={index}>\n              {!!image && !!image.alt && <img alt={image.alt} />}\n              {!!title && <p>{title}</p>}\n              {!!subtitle && <p>{subtitle}</p>}\n              {!!text && <p>{text}</p>}\n              {!!quantity && <p>{quantity}</p>}\n              {!!price && <p>{price}</p>}\n            </li>\n          ))}\n        </ul>\n      )}\n      {!!vat && (\n        <p>\n          {vatLabel} {vat}\n        </p>\n      )}\n      {!!tax && (\n        <p>\n          {taxLabel} {tax}\n        </p>\n      )}\n      {!!total && (\n        <p>\n          {totalLabel} {total}\n        </p>\n      )}\n      {!!buttons && !!buttons.length && (\n        <div>\n          {buttons.map(({ title }, index) => (\n            <button key={index} tabIndex={-1} type=\"button\">\n              {title}\n            </button>\n          ))}\n        </div>\n      )}\n    </article>\n  );\n};\n\nRichCardAttachment.propTypes = {\n  content: PropTypes.any.isRequired\n};\n\nexport default RichCardAttachment;\n","import React from 'react';\n\nimport { AttachmentMiddleware } from 'botframework-webchat-api';\n\nimport AdaptiveCardAttachment from './Attachment/AdaptiveCardAttachment';\nimport AnimationCardAttachment from './Attachment/AnimationCardAttachment';\nimport AudioCardAttachment from './Attachment/AudioCardAttachment';\nimport HeroCardAttachment from './Attachment/HeroCardAttachment';\nimport OAuthCardAttachment from './Attachment/OAuthCardAttachment';\nimport ReceiptCardAttachment from './Attachment/ReceiptCardAttachment';\nimport SignInCardAttachment from './Attachment/SignInCardAttachment';\nimport ThumbnailCardAttachment from './Attachment/ThumbnailCardAttachment';\nimport VideoCardAttachment from './Attachment/VideoCardAttachment';\n\nexport default function createAdaptiveCardsAttachmentMiddleware(): AttachmentMiddleware {\n  // This is not returning a React component, but a render function.\n  return () =>\n    next =>\n    (...args) => {\n      const [{ attachment }] = args;\n\n      return attachment.contentType === 'application/vnd.microsoft.card.hero' ? (\n        <HeroCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.adaptive' ? (\n        <AdaptiveCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.animation' ? (\n        <AnimationCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.audio' ? (\n        <AudioCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.oauth' ? (\n        <OAuthCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.receipt' ? (\n        <ReceiptCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.signin' ? (\n        <SignInCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.thumbnail' ? (\n        <ThumbnailCardAttachment attachment={attachment} />\n      ) : attachment.contentType === 'application/vnd.microsoft.card.video' ? (\n        <VideoCardAttachment attachment={attachment} />\n      ) : (\n        next(...args)\n      );\n    };\n}\n","import PropTypes from 'prop-types';\nimport React, { FC } from 'react';\nimport type { DirectLineAttachment } from 'botframework-webchat-core';\n\nimport AdaptiveCardContent from './AdaptiveCardContent';\n\ntype AdaptiveCardAttachmentProps = {\n  attachment: DirectLineAttachment;\n  disabled?: boolean;\n};\n\nconst AdaptiveCardAttachment: FC<AdaptiveCardAttachmentProps> = ({ attachment: { content }, disabled }) => (\n  <AdaptiveCardContent content={content} disabled={disabled} />\n);\n\nexport default AdaptiveCardAttachment;\n\nAdaptiveCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nAdaptiveCardAttachment.propTypes = {\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  attachment: PropTypes.shape({\n    content: PropTypes.any.isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n","import PropTypes from 'prop-types';\nimport React, { FC, useMemo } from 'react';\n\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useParseAdaptiveCardJSON from '../hooks/internal/useParseAdaptiveCardJSON';\n\nfunction stripSubmitAction(card) {\n  if (!card.actions) {\n    return card;\n  }\n\n  // Filter out HTTP action buttons\n  const nextActions = card.actions\n    .filter(action => action.type !== 'Action.Submit')\n    .map(action => (action.type === 'Action.ShowCard' ? { ...action, card: stripSubmitAction(action.card) } : action));\n\n  return { ...card, nextActions };\n}\n\ntype AdaptiveCardContentProps = {\n  actionPerformedClassName?: string;\n  content: any;\n  disabled?: boolean;\n};\n\nconst AdaptiveCardContent: FC<AdaptiveCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const parseAdaptiveCardJSON = useParseAdaptiveCardJSON();\n\n  const card = useMemo(\n    () =>\n      parseAdaptiveCardJSON(\n        stripSubmitAction({\n          version: '1.0',\n          ...(typeof content === 'object' ? content : {})\n        }),\n        { ignoreErrors: true }\n      ),\n    [content, parseAdaptiveCardJSON]\n  );\n\n  return (\n    !!card && (\n      <AdaptiveCardRenderer\n        actionPerformedClassName={actionPerformedClassName}\n        adaptiveCard={card}\n        disabled={disabled}\n      />\n    )\n  );\n};\n\nAdaptiveCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nAdaptiveCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  content: PropTypes.any.isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default AdaptiveCardContent;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [-1, 0, 2] }] */\n\nimport { AdaptiveCard, Action as AdaptiveCardAction, OpenUrlAction, SubmitAction } from 'adaptivecards';\nimport { Components, getTabIndex, hooks } from 'botframework-webchat-component';\nimport type { DirectLineCardAction } from 'botframework-webchat-core';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport React, {\n  KeyboardEventHandler,\n  MouseEventHandler,\n  VFC,\n  useCallback,\n  useLayoutEffect,\n  useMemo,\n  useRef\n} from 'react';\n\nimport useStyleSet from '../../hooks/useStyleSet';\nimport useAdaptiveCardsHostConfig from '../hooks/useAdaptiveCardsHostConfig';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport { BotFrameworkCardAction } from './AdaptiveCardBuilder';\nimport useValueRef from './AdaptiveCardHacks/private/useValueRef';\nimport useActionShouldBePushButtonModEffect from './AdaptiveCardHacks/useActionShouldBePushButtonModEffect';\nimport useActiveElementModEffect from './AdaptiveCardHacks/useActiveElementModEffect';\nimport useDisabledModEffect from './AdaptiveCardHacks/useDisabledModEffect';\nimport usePersistValuesModEffect from './AdaptiveCardHacks/usePersistValuesModEffect';\nimport useRoleModEffect from './AdaptiveCardHacks/useRoleModEffect';\nimport renderAdaptiveCard from './private/renderAdaptiveCard';\n\nconst { ErrorBox } = Components;\nconst { useDisabled, useLocalizer, usePerformCardAction, useRenderMarkdownAsHTML, useScrollToEnd } = hooks;\n\nconst node_env = process.env.node_env || process.env.NODE_ENV;\n\ntype AdaptiveCardRendererProps = {\n  actionPerformedClassName?: string;\n  adaptiveCard: AdaptiveCard;\n  disabled?: boolean;\n  tapAction?: DirectLineCardAction;\n};\n\nconst AdaptiveCardRenderer: VFC<AdaptiveCardRendererProps> = ({\n  actionPerformedClassName,\n  adaptiveCard,\n  disabled: disabledFromProps,\n  tapAction\n}) => {\n  const [{ adaptiveCardRenderer: adaptiveCardRendererStyleSet }] = useStyleSet();\n  const [{ GlobalSettings, HostConfig }] = useAdaptiveCardsPackage();\n  const [adaptiveCardsHostConfig] = useAdaptiveCardsHostConfig();\n  const [disabledFromComposer] = useDisabled();\n  const contentRef = useRef<HTMLDivElement>();\n  const localize = useLocalizer();\n  const performCardAction = usePerformCardAction();\n  const renderMarkdownAsHTML = useRenderMarkdownAsHTML('adaptive cards');\n  const scrollToEnd = useScrollToEnd();\n\n  const disabled = disabledFromComposer || disabledFromProps;\n  const tapActionRef = useValueRef(tapAction);\n\n  const disabledRef = useValueRef(disabled);\n\n  // TODO: [P2] #3199 We should consider using `adaptiveCard.selectAction` instead.\n  // The null check for \"tapAction\" is in \"handleClickAndKeyPressForTapAction\".\n  const handleClickAndKeyPress = useCallback<KeyboardEventHandler<HTMLDivElement> | MouseEventHandler<HTMLDivElement>>(\n    (event): void => {\n      const { key, type } = event as KeyboardEvent;\n      const target = event.target as HTMLDivElement;\n\n      // Some items, e.g. tappable text, cannot be disabled thru DOM attributes\n      const { current } = contentRef;\n      const adaptiveCardRoot = current.querySelector('.ac-adaptiveCard[tabindex=\"0\"]');\n\n      if (!adaptiveCardRoot) {\n        return console.warn(\n          'botframework-webchat: No Adaptive Card root container can be found; the card is probably on an unsupported Adaptive Card version.'\n        );\n      }\n\n      // For \"keypress\" event, we only listen to ENTER and SPACEBAR key.\n      if (type === 'keypress') {\n        if (key !== 'Enter' && key !== ' ') {\n          return;\n        }\n\n        event.preventDefault();\n      }\n\n      // We will call performCardAction if either:\n      // 1. We are on the target, or\n      // 2. The event-dispatching element is not interactive\n      if (target !== adaptiveCardRoot) {\n        const tabIndex = getTabIndex(target);\n\n        // If the user is clicking on something that is already clickable, do not allow them to click the card.\n        // E.g. a hero card can be tappable, and image and buttons inside the hero card can also be tappable.\n        if (typeof tabIndex === 'number' && tabIndex >= 0) {\n          return;\n        }\n      }\n\n      performCardAction(tapActionRef.current);\n      scrollToEnd();\n    },\n    [contentRef, performCardAction, scrollToEnd, tapActionRef]\n  );\n\n  // Only listen to event if it is not disabled and have \"tapAction\" prop.\n  const handleClickAndKeyPressForTapAction = !disabled && tapAction ? handleClickAndKeyPress : undefined;\n\n  const handleExecuteAction = useCallback(\n    (action: AdaptiveCardAction): void => {\n      // Some items, e.g. tappable image, cannot be disabled thru DOM attributes\n      if (disabledRef.current) {\n        return;\n      }\n\n      const actionTypeName = action.getJsonTypeName();\n      const { iconUrl: image, title } = action;\n\n      // We cannot use \"instanceof\" check here, because web devs may bring their own version of Adaptive Cards package.\n      // We need to check using \"getJsonTypeName()\" instead.\n      if (actionTypeName === 'Action.OpenUrl') {\n        const { url: value } = action as OpenUrlAction;\n\n        performCardAction({\n          image,\n          title,\n          type: 'openUrl',\n          value\n        });\n      } else if (actionTypeName === 'Action.Submit') {\n        const { data } = action as SubmitAction as {\n          data: string | BotFrameworkCardAction;\n        };\n\n        if (typeof data !== 'undefined') {\n          if (typeof data === 'string') {\n            performCardAction({\n              image,\n              title,\n              type: 'imBack',\n              value: data\n            });\n          } else if (data.__isBotFrameworkCardAction) {\n            performCardAction(data.cardAction);\n          } else {\n            performCardAction({\n              image,\n              title,\n              type: 'postBack',\n              value: data\n            });\n          }\n        }\n\n        scrollToEnd();\n      } else {\n        console.error(`Web Chat: received unknown action from Adaptive Cards`);\n        console.error(action);\n      }\n    },\n    [disabledRef, performCardAction, scrollToEnd]\n  );\n\n  // For accessibility issue #1340, `tabindex=\"0\"` must not be set for the root container if it is not interactive.\n  const setTabIndexAtCardRoot = !!tapAction;\n\n  const [applyActionShouldBePushButtonMod, undoActionShouldBePushButtonMod] =\n    useActionShouldBePushButtonModEffect(adaptiveCard);\n  const [applyActiveElementMod, undoActiveElementMod] = useActiveElementModEffect(adaptiveCard);\n  const [applyDisabledMod, undoDisabledMod] = useDisabledModEffect(adaptiveCard);\n  const [applyPersistValuesMod, undoPersistValuesMod] = usePersistValuesModEffect(adaptiveCard);\n  const [applyRoleMod, undoRoleMod] = useRoleModEffect(adaptiveCard);\n\n  const { element, errors }: { element?: HTMLElement; errors?: Error[] } = useMemo(() => {\n    undoActionShouldBePushButtonMod();\n    undoActiveElementMod();\n    undoDisabledMod();\n    undoPersistValuesMod();\n    undoRoleMod();\n\n    return renderAdaptiveCard(adaptiveCard, {\n      adaptiveCardsHostConfig,\n      adaptiveCardsPackage: { GlobalSettings, HostConfig },\n      renderMarkdownAsHTML,\n      setTabIndexAtCardRoot\n    });\n  }, [\n    adaptiveCard,\n    adaptiveCardsHostConfig,\n    GlobalSettings,\n    HostConfig,\n    renderMarkdownAsHTML,\n    setTabIndexAtCardRoot,\n    undoActionShouldBePushButtonMod,\n    undoActiveElementMod,\n    undoDisabledMod,\n    undoPersistValuesMod,\n    undoRoleMod\n  ]);\n\n  useMemo(() => {\n    adaptiveCard.onExecuteAction = handleExecuteAction;\n  }, [adaptiveCard, handleExecuteAction]);\n\n  useLayoutEffect(() => {\n    const { current } = contentRef;\n\n    current?.appendChild(element);\n\n    return () => {\n      current?.removeChild(element);\n    };\n  }, [contentRef, element]);\n\n  // Apply all mods regardless whether the element changed or not.\n  // This is because we have undoed mods when we call the `useXXXModEffect` hook.\n  useLayoutEffect(() => {\n    if (element) {\n      applyActionShouldBePushButtonMod(element, actionPerformedClassName);\n      applyActiveElementMod(element);\n      applyDisabledMod(element, disabled);\n      applyPersistValuesMod(element);\n      applyRoleMod(element);\n    }\n  }, [\n    actionPerformedClassName,\n    applyActionShouldBePushButtonMod,\n    applyActiveElementMod,\n    applyDisabledMod,\n    applyPersistValuesMod,\n    applyRoleMod,\n    disabled,\n    element\n  ]);\n\n  errors?.length && console.warn('botframework-webchat: Failed to render Adaptive Cards.', errors);\n\n  return errors?.length ? (\n    node_env === 'development' && <ErrorBox error={errors[0]} type={localize('ADAPTIVE_CARD_ERROR_BOX_TITLE_RENDER')} />\n  ) : (\n    <div\n      className={classNames(adaptiveCardRendererStyleSet + '', 'webchat__adaptive-card-renderer')}\n      onClick={handleClickAndKeyPressForTapAction as MouseEventHandler<HTMLDivElement>}\n      onKeyPress={handleClickAndKeyPressForTapAction as KeyboardEventHandler<HTMLDivElement>}\n      ref={contentRef}\n    />\n  );\n};\n\nAdaptiveCardRenderer.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined,\n  tapAction: undefined\n};\n\nAdaptiveCardRenderer.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  adaptiveCard: PropTypes.any.isRequired,\n  disabled: PropTypes.bool,\n\n  // TypeScript class is not mappable to PropTypes.func\n  // @ts-ignore\n  tapAction: PropTypes.shape({\n    image: PropTypes.string,\n    title: PropTypes.string,\n    type: PropTypes.string.isRequired,\n    value: PropTypes.string\n  })\n};\n\nexport default AdaptiveCardRenderer;\n","import { hooks } from 'botframework-webchat-component';\n\nimport { type AdaptiveCardsStyleSet } from '../adaptiveCards/AdaptiveCardsStyleSet';\n\nconst useMinimalStyleSet = hooks.useStyleSet;\n\ntype MinimalStyleSet = ReturnType<typeof useMinimalStyleSet>[0];\n\nexport default function useStyleSet(): readonly [MinimalStyleSet & AdaptiveCardsStyleSet] {\n  const [styleOptions] = useMinimalStyleSet();\n\n  return Object.freeze([styleOptions as MinimalStyleSet & AdaptiveCardsStyleSet] as const);\n}\n","import { useMemo } from 'react';\n\nimport createDefaultAdaptiveCardHostConfig from '../Styles/adaptiveCardHostConfig';\nimport useAdaptiveCardsContext from './internal/useAdaptiveCardsContext';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nexport default function useAdaptiveCardsHostConfig(): [any] {\n  const { hostConfigFromProps } = useAdaptiveCardsContext();\n  const [styleOptions] = useStyleOptions();\n\n  const patchedHostConfig = useMemo(\n    () => hostConfigFromProps || createDefaultAdaptiveCardHostConfig(styleOptions),\n    [hostConfigFromProps, styleOptions]\n  );\n\n  return [patchedHostConfig];\n}\n","import { normalizeStyleOptions } from 'botframework-webchat-api';\n\nimport FullBundleStyleOptions from '../../types/FullBundleStyleOptions';\nimport normalizeAdaptiveCardsStyleOptions from '../normalizeStyleOptions';\n\n// https://docs.microsoft.com/en-us/adaptive-cards/rendering-cards/host-config\n\nexport default function createAdaptiveCardsHostConfig(styleOptions: FullBundleStyleOptions) {\n  const { accent, bubbleTextColor, cardEmphasisBackgroundColor, primaryFont, subtle } = {\n    ...normalizeStyleOptions(styleOptions),\n    ...normalizeAdaptiveCardsStyleOptions(styleOptions)\n  };\n\n  return {\n    containerStyles: {\n      default: {\n        foregroundColors: {\n          default: {\n            default: bubbleTextColor,\n            subtle\n          },\n          accent: {\n            default: accent,\n            subtle: '#0078D4'\n          },\n          attention: {\n            default: '#D13438',\n            subtle: '#A4262C'\n          },\n          dark: {\n            default: '#000000',\n            subtle: '#646464'\n          },\n          good: {\n            default: '#0B6A0B',\n            subtle: '#028A02'\n          },\n          light: {\n            default: '#FFFFFF',\n            subtle\n          },\n          warning: {\n            default: '#B75C00',\n            subtle: '#986F0B'\n          }\n        }\n      },\n      emphasis: {\n        backgroundColor: cardEmphasisBackgroundColor,\n        foregroundColors: {\n          default: {\n            default: '#000000',\n            subtle: '#484644'\n          }\n        }\n      },\n      accent: {\n        backgroundColor: '#C7DEF9',\n        foregroundColors: {\n          default: {\n            default: '#333333',\n            subtle: '#484644'\n          }\n        }\n      },\n      good: {\n        backgroundColor: '#CCFFCC',\n        foregroundColors: {\n          default: {\n            default: '#333333',\n            subtle: '#484644'\n          }\n        }\n      },\n      attention: {\n        backgroundColor: '#FFC5B2',\n        foregroundColors: {\n          default: {\n            default: '#333333',\n            subtle: '#484644'\n          }\n        }\n      },\n      warning: {\n        backgroundColor: '#FFE2B2',\n        foregroundColors: {\n          default: {\n            default: '#333333',\n            subtle: '#484644'\n          }\n        }\n      }\n    },\n    supportsInteractivity: true,\n    fontFamily: primaryFont,\n    imageSizes: {\n      small: 40,\n      medium: 80,\n      large: 160\n    },\n    actions: {\n      actionAlignment: 'stretch',\n      actionsOrientation: 'vertical',\n      buttonSpacing: 8,\n      maxActions: 100,\n      showCard: {\n        actionMode: 'inline',\n        inlineTopMargin: 8\n      },\n      spacing: 'default'\n    },\n    adaptiveCard: {\n      allowCustomStyle: false\n    },\n    imageSet: {\n      imageSize: 'medium',\n      maxImageHeight: 100\n    },\n    factSet: {\n      title: {\n        color: 'default',\n        size: 'default',\n        isSubtle: false,\n        weight: 'bolder',\n        wrap: true,\n        maxWidth: 150\n      },\n      value: {\n        color: 'default',\n        size: 'default',\n        isSubtle: false,\n        weight: 'default',\n        wrap: true\n      },\n      spacing: 8\n    },\n    textBlock: {\n      headingLevel: 2\n    }\n  };\n}\n","import { type AdaptiveCardsStyleOptions } from './AdaptiveCardsStyleOptions';\n\nconst ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS: Required<AdaptiveCardsStyleOptions> = {\n  adaptiveCardsParserMaxVersion: undefined,\n  cardEmphasisBackgroundColor: '#F9F9F9',\n  cardPushButtonBackgroundColor: '#0063B1',\n  cardPushButtonTextColor: 'White',\n  richCardWrapTitle: false\n};\n\nexport default ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS;\n","import { type AdaptiveCardsStyleOptions, type StrictAdaptiveCardsStyleOptions } from './AdaptiveCardsStyleOptions';\nimport defaultStyleOptions from './defaultStyleOptions';\n\nexport default function normalizeStyleOptions(\n  styleOptions: AdaptiveCardsStyleOptions\n): StrictAdaptiveCardsStyleOptions {\n  return { ...defaultStyleOptions, ...styleOptions };\n}\n","import { useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\nexport default function useValueRef<T>(value: T): RefObject<T> {\n  const ref = useRef<T>(value);\n\n  ref.current = value;\n\n  return ref;\n}\n","import { useMemo, useRef } from 'react';\n\nimport addEventListenerWithUndo from '../../DOMManipulationWithUndo/addEventListenerWithUndo';\nimport bunchUndos from '../../DOMManipulationWithUndo/bunchUndos';\nimport closest from './private/closest';\nimport durableAddClassWithUndo from '../../DOMManipulationWithUndo/durableAddClassWithUndo';\nimport findDOMNodeOwner from './private/findDOMNodeOwner';\nimport setOrRemoveAttributeIfFalseWithUndo from '../../DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo';\nimport useAdaptiveCardModEffect from './private/useAdaptiveCardModEffect';\nimport usePrevious from './private/usePrevious';\n\nimport type { AdaptiveCard, CardObject } from 'adaptivecards';\nimport type { UndoFunction } from '../../DOMManipulationWithUndo/types/UndoFunction';\n\n/**\n * Accessibility: Action in ActionSet/CardElement should be push button.\n *\n * Pressing the action button is a decision-making process. The decision made by the end-user need to be read by the screen reader.\n * Thus, we need to indicate what decision the end-user made.\n *\n * Since action buttons are button, the intuitive way to indicate selection of a button is marking it as pressed.\n *\n * One exception is the `Action.ShowUrl` action. This button represents expand/collapse header of an accordion.\n * Thus, their state is indicated by `aria-expanded`, instead of `aria-pressed`.\n * However, we still need to remove other unnecessary ARIA fields.\n */\nexport default function useActionShouldBePushButtonModEffect(\n  adaptiveCard: AdaptiveCard\n): readonly [(cardElement: HTMLElement, actionPerformedClassName?: string) => void, () => void] {\n  const prevAdaptiveCard = usePrevious(adaptiveCard);\n  const pushedCardObjectsRef = useRef<Set<CardObject>>(new Set());\n\n  prevAdaptiveCard === adaptiveCard || pushedCardObjectsRef.current.clear();\n\n  const modder = useMemo(\n    () => (adaptiveCard: AdaptiveCard, cardElement: HTMLElement, actionPerformedClassName?: string) => {\n      const undoStack: UndoFunction[] = [];\n\n      Array.from(cardElement.querySelectorAll('button.ac-pushButton') as NodeListOf<HTMLButtonElement>).forEach(\n        actionElement => {\n          const cardObject = findDOMNodeOwner(adaptiveCard, actionElement);\n\n          if (!actionElement.hasAttribute('aria-expanded')) {\n            if (pushedCardObjectsRef.current.has(cardObject)) {\n              actionPerformedClassName &&\n                undoStack.push(durableAddClassWithUndo(actionElement, actionPerformedClassName));\n\n              undoStack.push(setOrRemoveAttributeIfFalseWithUndo(actionElement, 'aria-pressed', 'true'));\n            } else {\n              undoStack.push(setOrRemoveAttributeIfFalseWithUndo(actionElement, 'aria-pressed', 'false'));\n            }\n          }\n\n          undoStack.push(\n            setOrRemoveAttributeIfFalseWithUndo(actionElement, 'aria-posinset', false),\n            setOrRemoveAttributeIfFalseWithUndo(actionElement, 'aria-setsize', false),\n            setOrRemoveAttributeIfFalseWithUndo(actionElement, 'role', false)\n          );\n        }\n      );\n\n      undoStack.push(\n        addEventListenerWithUndo(\n          cardElement,\n          'click',\n          ({ target }) => {\n            // Depends on click location, `target` could be the <div> inside the <button class=\"ac-pushButton\">.\n            // Thus, we need to check if we the `target` is inside `button.ac-pushButton` or not.\n            const actionElement = closest(target as HTMLButtonElement, 'button.ac-pushButton');\n\n            if (!actionElement) {\n              return;\n            }\n\n            const cardObject = findDOMNodeOwner(adaptiveCard, actionElement);\n\n            if (\n              // Not an AC action.\n              !cardObject ||\n              // Ignores buttons which are supposed to be disabled.\n              actionElement.getAttribute('aria-disabled') === 'true' ||\n              // Mods all AC action buttons except those for `Action.ShowCard`, which has `aria-expanded` attribute.\n              actionElement.hasAttribute('aria-expanded')\n            ) {\n              return;\n            }\n\n            actionPerformedClassName &&\n              undoStack.push(durableAddClassWithUndo(actionElement, actionPerformedClassName));\n\n            undoStack.push(setOrRemoveAttributeIfFalseWithUndo(actionElement, 'aria-pressed', 'true'));\n\n            cardObject && pushedCardObjectsRef.current.add(cardObject);\n          },\n          { capture: true }\n        )\n      );\n\n      return () => bunchUndos(undoStack)();\n    },\n    [pushedCardObjectsRef]\n  );\n\n  return useAdaptiveCardModEffect(modder, adaptiveCard);\n}\n","// This is intended. This is a no-op function and intended to do nothing.\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noOp: () => void = () => {};\n\nexport default noOp;\n","import noOp from './private/noOp';\n\nimport type { UndoFunction } from './types/UndoFunction';\n\n/**\n * Listens to event. Returns a function, when called, will stop listening.\n */\nexport default function addEventListenerWithUndo(\n  element: HTMLElement | undefined,\n  name: string,\n  handler: EventListener,\n  options?: AddEventListenerOptions | boolean\n): UndoFunction {\n  if (!element) {\n    return noOp;\n  }\n\n  element.addEventListener(name, handler, options);\n\n  return () => element.removeEventListener(name, handler, options);\n}\n","import type { UndoFunction } from './types/UndoFunction';\n\nexport default function bunchUndos(fns: UndoFunction[]): UndoFunction {\n  let called: boolean;\n\n  return () => {\n    if (!called) {\n      called = true;\n      [...fns].reverse().forEach(fn => fn?.());\n    }\n  };\n}\n","// Ponyfill `HTMLElement.closest`.\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\nexport default function closest(element: HTMLElement, selector: string): HTMLElement | undefined {\n  if (typeof element.closest === 'function') {\n    return element.closest(selector);\n  }\n\n  let current: HTMLElement | null = element;\n\n  while (current) {\n    // \"msMatchesSelector\" is vendor-prefixed version of \"matches\".\n    // eslint-disable-next-line dot-notation\n    if ((current.matches || (current['msMatchesSelector'] as (selector: string) => boolean)).call(current, selector)) {\n      return current;\n    }\n\n    current = current.parentElement;\n  }\n}\n","/**\n * Adds a class to the `HTMLElement`. Returns `true` if the class is added, otherwise, `undefined`.\n */\n\nexport function addClass(element: HTMLElement, className: string): true | undefined {\n  const { classList } = element;\n\n  if (!classList.contains(className)) {\n    classList.add(className);\n\n    return true;\n  }\n}\n","import { addClass } from './private/addClass';\nimport noOp from './private/noOp';\n\nimport type { UndoFunction } from './types/UndoFunction';\n\n/**\n * Adds a class to the `HTMLElement` and re-add on mutations.\n *\n * @returns {function} A function, when called, will restore to previous state.\n */\nexport default function durableAddClassWithUndo(element: HTMLElement | undefined, className: string): UndoFunction {\n  if (element) {\n    addClass(element, className);\n\n    // After we add the class, keep observing the element to make sure the class is not removed.\n    const observer = new MutationObserver(() => addClass(element, className));\n\n    observer.observe(element, { attributes: true, attributeFilter: ['class'] });\n\n    return () => {\n      element.classList.remove(className);\n\n      observer.disconnect();\n    };\n  }\n\n  return noOp;\n}\n","import type { AdaptiveCard, CardObject, ShowCardAction } from 'adaptivecards';\n\n// TODO: [P2] Remove this when Adaptive Card fixed their bug #7606.\n//            https://github.com/microsoft/AdaptiveCards/issues/7606\n//            Currently, their findDOMNodeOwner() returns bad result when passing an Action attached to the card.\nexport default function findDOMNodeOwner(adaptiveCard: AdaptiveCard, element: HTMLElement): CardObject | undefined {\n  for (let count = adaptiveCard.getActionCount(), index = 0; index < count; index++) {\n    const action = adaptiveCard.getActionAt(index);\n\n    if (action.renderedElement === element) {\n      return action;\n    }\n\n    if (action.getJsonTypeName() === 'Action.ShowCard') {\n      const { card } = action as ShowCardAction;\n      const cardObject = card && findDOMNodeOwner(card, element);\n\n      if (cardObject) {\n        return cardObject;\n      }\n    }\n  }\n\n  return adaptiveCard.findDOMNodeOwner(element);\n}\n","/**\n * Gets the value of an attribute from an element.\n *\n * @returns {false | string} The value of the attribute. `false` if the attribute was not set.\n */\nexport default function getAttributeOrFalse(element: HTMLElement, qualifiedName: string): false | string {\n  return !!element && element.hasAttribute(qualifiedName) && (element.getAttribute(qualifiedName) || '');\n}\n","/**\n * Sets or removes an attribute from an element.\n *\n * @param {HTMLElement} element - The element to set or remove attribute from.\n * @param {string} qualifiedName - The name of the attribute.\n * @param {false | string} value - The value of the attribute. When passing `false`, remove the attribute.\n */\nexport default function setOrRemoveAttributeIfFalse(\n  element: HTMLElement | undefined,\n  qualifiedName: string,\n  value: false | string\n): void {\n  if (value === false) {\n    element?.removeAttribute(qualifiedName);\n  } else {\n    element?.setAttribute(qualifiedName, value);\n  }\n}\n","import getAttributeOrFalse from './private/getAttributeOrFalse';\nimport noOp from './private/noOp';\nimport setOrRemoveAttributeIfFalse from './private/setOrRemoveAttributeIfFalse';\n\nimport type { UndoFunction } from './types/UndoFunction';\n\n/**\n * Sets or removes an attribute from an element with an undo function.\n *\n * @param {HTMLElement} element - The element to set or remove attribute from.\n * @param {string} qualifiedName - The name of the attribute.\n * @param {false | string} value - The value of the attribute. When passing `false`, remove the attribute.\n *\n * @returns {() => void} An undo function, when called, will undo all manipulations by restoring values recorded at the time of the function call.\n */\nexport default function setOrRemoveAttributeIfFalseWithUndo(\n  element: HTMLElement | undefined,\n  qualifiedName: string,\n  value: false | string\n): UndoFunction {\n  if (!element) {\n    return noOp;\n  }\n\n  const prevValue = getAttributeOrFalse(element, qualifiedName);\n\n  if (prevValue === value) {\n    return noOp;\n  }\n\n  setOrRemoveAttributeIfFalse(element, qualifiedName, value);\n\n  return () => setOrRemoveAttributeIfFalse(element, qualifiedName, prevValue);\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport useLazyRef from './useLazyRef';\nimport useValueRef from './useValueRef';\n\nimport type { AdaptiveCard } from 'adaptivecards';\n\ntype ModFunction<TArgs extends unknown[] = []> = (\n  adaptiveCard: AdaptiveCard,\n  cardElement: HTMLElement,\n  ...args: TArgs\n) => () => void;\n\nclass Mod<TArgs extends unknown[]> {\n  constructor(mod: ModFunction<TArgs>) {\n    this.#mod = mod;\n  }\n\n  // @ts-ignore We are using Babel to transpile and it will transpile private modifier.\n  #mod: ModFunction<TArgs>;\n  // @ts-ignore We are using Babel to transpile and it will transpile private modifier.\n  #undo: (() => void) | undefined;\n\n  apply(adaptiveCard: AdaptiveCard | undefined, cardElement: HTMLElement | undefined, ...args: TArgs) {\n    this.#undo?.();\n    this.#undo = adaptiveCard && cardElement && this.#mod(adaptiveCard, cardElement, ...args);\n  }\n\n  undo() {\n    this.#undo?.();\n    this.#undo = undefined;\n  }\n}\n\n/**\n * Creates a mod effect for Adaptive Card.\n *\n * When this hook is executed, it will return two functions for applying and undo the mod.\n * It will also monitor the DOM tree and undo-then-reapply if mutation occurred.\n *\n * The first function must be called right after DOM is mounted. The second function must be called right before re-render.\n *\n * @return {[function, function]} Two functions, the first one to apply the mod, the second one to undo the mod.\n */\nexport default function useAdaptiveCardModEffect<TArgs extends unknown[]>(\n  modder: (adaptiveCard: AdaptiveCard, cardElement: HTMLElement, ...args: TArgs) => () => void,\n  adaptiveCard: AdaptiveCard\n): readonly [(cardElement: HTMLElement, ...args: TArgs) => void, () => void] {\n  const adaptiveCardRef = useValueRef(adaptiveCard);\n  const mod = useMemo(() => new Mod<TArgs>(modder), [modder]);\n  const reapplyRef = useRef<() => void>();\n\n  const observerRef = useLazyRef<MutationObserver>(\n    () =>\n      new MutationObserver(() => {\n        reapplyRef.current?.();\n      })\n  );\n\n  useEffect(\n    () => () => {\n      observerRef.current.disconnect();\n    },\n    [observerRef]\n  );\n\n  const handleApply = useCallback(\n    (cardElement: HTMLElement, ...args: TArgs) => {\n      if (adaptiveCardRef.current && cardElement) {\n        // Apply the mod immediately, then assign the function to reapply() so we can call later when mutation happens.\n        (reapplyRef.current = () => mod.apply(adaptiveCardRef.current, cardElement, ...args))();\n      }\n\n      const { current: observer } = observerRef;\n\n      observer.disconnect();\n      observer.observe(cardElement, { childList: true, subtree: true });\n    },\n    [adaptiveCardRef, observerRef, mod]\n  );\n\n  const handleUndo = useCallback(() => {\n    mod.undo();\n\n    // If we have undo-ed the mod, calling reapply() through MutationObserver should be no-op.\n    reapplyRef.current = undefined;\n  }, [mod, reapplyRef]);\n\n  return useMemo(\n    () => Object.freeze([handleApply, handleUndo]) as readonly [typeof handleApply, typeof handleUndo],\n    [handleApply, handleUndo]\n  );\n}\n","import { useRef } from 'react';\n\nimport type { MutableRefObject } from 'react';\n\nconst UNINITIALIZED = Symbol();\n\nexport default function useLazyRef<T>(refInit: () => T): MutableRefObject<T> {\n  const ref = useRef<T | typeof UNINITIALIZED>(UNINITIALIZED);\n\n  if (ref.current === UNINITIALIZED) {\n    ref.current = refInit();\n  }\n\n  return ref as MutableRefObject<T>;\n}\n","// TODO: [P0] #4133 Don't copy.\nimport { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T>(value: T): T | undefined {\n  const ref = useRef<T>();\n\n  useEffect(() => {\n    ref.current = value;\n  });\n\n  return ref.current;\n}\n","import { useMemo, useRef } from 'react';\n\nimport findDOMNodeOwner from './private/findDOMNodeOwner';\nimport useAdaptiveCardModEffect from './private/useAdaptiveCardModEffect';\nimport usePrevious from './private/usePrevious';\n\nimport type { AdaptiveCard, CardObject } from 'adaptivecards';\n\n/**\n * Re-rendering: Last focused element must be persisted during render cycle.\n */\nexport default function useActiveElementModEffect(adaptiveCard: AdaptiveCard) {\n  const activeCardObjectRef = useRef<CardObject | undefined>();\n  const prevAdaptiveCard = usePrevious(adaptiveCard);\n\n  if (prevAdaptiveCard !== adaptiveCard) {\n    activeCardObjectRef.current = undefined;\n  }\n\n  const modder = useMemo(\n    () => (adaptiveCard: AdaptiveCard) => {\n      // When apply, if we have saved the `CardObject` that was focused, restore its focused to the newly rendered element.\n      activeCardObjectRef.current?.renderedElement?.focus?.();\n\n      // When undo, we are preparing for the next rendering.\n      // So, find and save the `CardObject` that is currently focused.\n      return () => {\n        activeCardObjectRef.current = findDOMNodeOwner(adaptiveCard, document.activeElement as HTMLElement);\n      };\n    },\n    [activeCardObjectRef]\n  );\n\n  return useAdaptiveCardModEffect(modder, adaptiveCard);\n}\n","import { useMemo } from 'react';\n\nimport bunchUndos from '../../DOMManipulationWithUndo/bunchUndos';\nimport durableDisableInputElementAccessiblyWithUndo from '../../DOMManipulationWithUndo/durableDisableInputElementAccessiblyWithUndo';\nimport useAdaptiveCardModEffect from './private/useAdaptiveCardModEffect';\n\nimport type { AdaptiveCard } from 'adaptivecards';\nimport type { UndoFunction } from '../../DOMManipulationWithUndo/types/UndoFunction';\n\n// This is intended. This is a no-op function and intended to do nothing.\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst NO_OP: UndoFunction = () => {};\n\n// In Adaptive Cards, <button> with \"aria-expanded\" attribute means it is makeshift of <details> and it is Action.ShowCard.\n// In HTML, <details> should not be disabled unless the accordion does not permit the panel to be collapsed.\n// So when we look for input elements, should skip <button> that mimick <details>.\nconst INPUT_ELEMENT_SELECTOR = 'button:not([aria-expanded]), input, select, textarea';\ntype InputElementType = HTMLButtonElement | HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n/**\n * Accessibility: Form fields in Adaptive Cards need to be disabled to reduce confusion for screen reader users.\n *\n * One exception is the `Action.ShowUrl`, this is because this action is expand/collapse of an accordion control.\n * Similar to `<details>`/`<summary>`, accordion must not allowed to be disabled.\n */\nexport default function useDisabledModEffect(\n  adaptiveCard: AdaptiveCard\n): readonly [(cardElement: HTMLElement, disabled: boolean) => void, () => void] {\n  const modder = useMemo(\n    () => (_, cardElement: HTMLElement, disabled: boolean) => {\n      if (!disabled) {\n        return NO_OP;\n      }\n\n      const undoStack: (() => void)[] = Array.from(\n        cardElement.querySelectorAll(INPUT_ELEMENT_SELECTOR) as NodeListOf<InputElementType>\n      ).map(element => durableDisableInputElementAccessiblyWithUndo(element));\n\n      return () => bunchUndos(undoStack)();\n    },\n    []\n  );\n\n  return useAdaptiveCardModEffect(modder, adaptiveCard);\n}\n","import addEventListenerWithUndo from './addEventListenerWithUndo';\nimport bunchUndos from './bunchUndos';\nimport noOp from './private/noOp';\nimport setOrRemoveAttributeIfFalseWithUndo from './setOrRemoveAttributeIfFalseWithUndo';\n\nimport type { UndoFunction } from './types/UndoFunction';\n\n/**\n * An event handler for disabling event bubbling and propagation.\n */\nfunction disabledHandler(event: Event): void {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n  event.stopPropagation();\n}\n\nfunction disable(element: HTMLElement, undoStack: UndoFunction[]): void {\n  const tag = element.nodeName.toLowerCase();\n\n  /* eslint-disable-next-line default-case */\n  switch (tag) {\n    case 'button':\n    case 'input':\n    case 'select':\n    case 'textarea':\n      undoStack.push(\n        // \"click\" handler in capture phase to make sure we can block as much \"click\" event listeners as possible.\n        addEventListenerWithUndo(element, 'click', disabledHandler, { capture: true }),\n        setOrRemoveAttributeIfFalseWithUndo(element, 'aria-disabled', 'true'),\n        setOrRemoveAttributeIfFalseWithUndo(element, 'tabindex', '-1')\n      );\n\n      if (tag === 'input' || tag === 'textarea') {\n        undoStack.push(setOrRemoveAttributeIfFalseWithUndo(element, 'readonly', 'readonly'));\n      } else if (tag === 'select') {\n        undoStack.push(\n          ...Array.from(element.querySelectorAll('option') as NodeListOf<HTMLOptionElement>).map(option =>\n            setOrRemoveAttributeIfFalseWithUndo(option, 'disabled', 'disabled')\n          )\n        );\n      }\n\n      break;\n  }\n}\n\n/**\n * Disables an input element in accessible fashion with undo function.\n *\n * This is designed for accessibility and mimick the behavior of `disabled` attribute in accessible form:\n *\n * - Take away from focus ring;\n *   - If currently focused, do not move focus;\n * - Mark content as readonly.\n *\n * Thus, it should not impact hyperlinks or other contents which are not affected by `disabled` attribute.\n *\n * For simplicity, currently, we did not disable element with `contenteditable` attribute.\n *\n * We only disable these elements: `<button>`, `<input>`, `<select>`, `<textarea>`.\n *\n * We need durability as Adaptive Cards occasionally reset `tabindex=\"0\"`.\n *\n * @returns {function} A function, when called, will restore to previous state.\n */\nexport default function durableDisableInputElementAccessiblyWithUndo(element: HTMLElement | undefined): UndoFunction {\n  if (!element) {\n    return noOp;\n  }\n\n  const undoStack: UndoFunction[] = [];\n\n  const apply = () => disable(element, undoStack);\n\n  apply();\n\n  const observer = new MutationObserver(apply);\n\n  observer.observe(element, { attributeFilter: ['tabindex'] });\n\n  undoStack.push(() => observer.disconnect());\n\n  return bunchUndos(undoStack);\n}\n","import { useMemo, useRef } from 'react';\n\nimport useAdaptiveCardModEffect from './private/useAdaptiveCardModEffect';\nimport usePrevious from './private/usePrevious';\n\nimport type { AdaptiveCard, CardObject } from 'adaptivecards';\n\n/**\n * Gets all user-inputted values under a DOM node.\n *\n * We assume values are ID-ed. If not ID-ed (such as `<textarea>`), there will be only a single instance (no two `<textarea>`).\n */\nfunction getUserValues(element: HTMLElement | undefined): Set<string> {\n  if (!element) {\n    return new Set();\n  }\n\n  return Array.from(\n    element.querySelectorAll('input, option, textarea') as NodeListOf<\n      HTMLInputElement | HTMLOptionElement | HTMLTextAreaElement\n    >\n  ).reduce<Set<string>>((values, element) => {\n    if (element instanceof HTMLInputElement) {\n      const { type } = element;\n\n      if (type === 'checkbox' || type === 'radio') {\n        element.checked && values.add(element.value);\n      } else {\n        // ASSUMPTION: We expect CardObject will NOT mix <input type=\"text\"> with <input type=\"checkbox\">.\n        values.clear();\n        values.add(element.value);\n      }\n    } else if (element instanceof HTMLOptionElement) {\n      element.selected && values.add(element.value);\n    } else {\n      // ASSUMPTION: We expect CardObject will NOT mix <textarea> with <input type=\"checkbox\">.\n      values.clear();\n      values.add(element.value);\n    }\n\n    return values;\n  }, new Set());\n}\n\n/**\n * Set multiple user-inputted values under a DOM node.\n *\n * This function must be paired with `getUserValues`.\n */\nfunction setUserValues(element: HTMLElement | undefined, values: Set<string>): void {\n  if (!element) {\n    return;\n  }\n\n  // If the element does not support multiple choices, say <input type=\"text\"> or <textarea>, then, use the first value.\n  const defaultValue = Array.from(values)[0] || '';\n\n  (\n    element.querySelectorAll('input, option, textarea') as NodeListOf<\n      HTMLInputElement | HTMLOptionElement | HTMLTextAreaElement\n    >\n  ).forEach(element => {\n    if (element instanceof HTMLInputElement) {\n      const { type } = element;\n\n      if (type === 'checkbox' || type === 'radio') {\n        element.checked = values.has(element.value);\n      } else {\n        element.value = defaultValue;\n      }\n    } else if (element instanceof HTMLOptionElement) {\n      element.selected = values.has(element.value);\n    } else {\n      element.value = defaultValue;\n    }\n  });\n}\n\n/**\n * Re-rendering: Current user-inputted values must be saved and restored on re-render.\n */\nexport default function usePersistValuesModEffect(adaptiveCard: AdaptiveCard) {\n  const prevAdaptiveCard = usePrevious(adaptiveCard);\n  const valuesMapRef = useRef<Map<CardObject, Set<string>>>(new Map());\n\n  prevAdaptiveCard === adaptiveCard || valuesMapRef.current.clear();\n\n  const modder = useMemo(\n    () => (adaptiveCard: AdaptiveCard) => {\n      const { current: valuesMap } = valuesMapRef;\n\n      adaptiveCard.getAllInputs().forEach(cardObject => {\n        valuesMap.has(cardObject) && setUserValues(cardObject.renderedElement, valuesMap.get(cardObject));\n      });\n\n      return () => {\n        valuesMapRef.current = adaptiveCard\n          .getAllInputs()\n          .reduce<Map<CardObject, Set<string>>>((valuesMap, cardObject) => {\n            const value = getUserValues(cardObject.renderedElement);\n\n            return typeof value !== 'undefined' ? valuesMap.set(cardObject, value) : valuesMap;\n          }, new Map());\n      };\n    },\n    [valuesMapRef]\n  );\n\n  return useAdaptiveCardModEffect(modder, adaptiveCard);\n}\n","import { useMemo } from 'react';\n\nimport setOrRemoveAttributeIfFalseWithUndo from '../../DOMManipulationWithUndo/setOrRemoveAttributeIfFalseWithUndo';\nimport useAdaptiveCardModEffect from './private/useAdaptiveCardModEffect';\n\nimport type { AdaptiveCard } from 'adaptivecards';\n\n/**\n * Accessibility: \"role\" attribute must be set if \"aria-label\" is set.\n *\n * It is possible to render an Adaptive Card with empty content but \"aria-label\" attribute. The Adaptive Cards JSON looks like:\n *\n * ```json\n * {\n *   \"type\": \"AdaptiveCard\",\n *   \"speak\": \"Hello, World!\",\n *   \"body\": [],\n *   \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\n *   \"version\": \"1.5\"\n * }\n * ```\n *\n * The HTML output will be:\n *\n * ```html\n * <div class=\"ac-adaptiveCard\" aria-label=\"Hello, World!\"></div>\n * ```\n *\n * This violates WAI-ARIA because \"aria-label\" must not be set on an element without a \"role\".\n *\n * We need to set \"role\" attribute to \"form\" if the card has any input fields and is valid as a \"form\" role, otherwise, \"figure\".\n */\nexport default function useRoleModEffect(\n  adaptiveCard: AdaptiveCard\n): readonly [(cardElement: HTMLElement) => void, () => void] {\n  const modder = useMemo(\n    () => (_, cardElement: HTMLElement) =>\n      setOrRemoveAttributeIfFalseWithUndo(\n        cardElement,\n        'role',\n        // \"form\" role requires either \"aria-label\", \"aria-labelledby\", or \"title\".\n        (cardElement.querySelector('button, input, select, textarea') && cardElement.getAttribute('aria-label')) ||\n          cardElement.getAttribute('aria-labelledby') ||\n          cardElement.getAttribute('title')\n          ? 'form'\n          : 'figure'\n      ),\n    []\n  );\n\n  return useAdaptiveCardModEffect(modder, adaptiveCard);\n}\n","import type {\n  AdaptiveCard,\n  GlobalSettings as GlobalSettingsType,\n  HostConfig as HostConfigType,\n  IMarkdownProcessingResult\n} from 'adaptivecards';\n\n/**\n * Returns `true`, if the object is a plain object and not a class, otherwise, `false`.\n */\nfunction isPlainObject(obj) {\n  return Object.getPrototypeOf(obj) === Object.prototype;\n}\n\nexport default function renderAdaptiveCard(\n  adaptiveCard: AdaptiveCard,\n  {\n    adaptiveCardsHostConfig,\n    adaptiveCardsPackage: { GlobalSettings, HostConfig },\n    renderMarkdownAsHTML,\n    setTabIndexAtCardRoot\n  }: {\n    adaptiveCardsHostConfig?: HostConfigType;\n    adaptiveCardsPackage: {\n      GlobalSettings: typeof GlobalSettingsType;\n      HostConfig: typeof HostConfigType;\n    };\n    renderMarkdownAsHTML?: (markdown: string) => string;\n    setTabIndexAtCardRoot: boolean;\n  }\n): { element: HTMLElement } | { errors: Error[] } {\n  // Currently, the only way to set the Markdown engine is to set it thru static member of AdaptiveCard class\n\n  // TODO: [P3] Checks if we could make the \"renderMarkdownAsHTML\" per card\n  //       This could be limitations from Adaptive Cards package (not supported as of 1.2.5)\n  //       Because there could be timing difference between .parse and .render, we could be using wrong Markdown engine\n\n  // \"onProcessMarkdown\" is a static function but we are trying to scope it to the current object instead.\n  // eslint-disable-next-line dot-notation\n  adaptiveCard.constructor['onProcessMarkdown'] = (text: string, result: IMarkdownProcessingResult) => {\n    if (renderMarkdownAsHTML) {\n      result.outputHtml = renderMarkdownAsHTML(text);\n      result.didProcess = true;\n    }\n  };\n\n  if (adaptiveCardsHostConfig) {\n    adaptiveCard.hostConfig = isPlainObject(adaptiveCardsHostConfig)\n      ? new HostConfig(adaptiveCardsHostConfig)\n      : adaptiveCardsHostConfig;\n  }\n\n  // For accessibility issue #1340, `tabindex=\"0\"` must not be set for the root container if it is not interactive.\n  GlobalSettings.setTabIndexAtCardRoot = setTabIndexAtCardRoot;\n\n  const { validationEvents } = adaptiveCard.validateProperties();\n\n  if (validationEvents.length) {\n    return { errors: validationEvents.reduce((items, { message }) => [...items, new Error(message)], [] as Error[]) };\n  }\n\n  let element: HTMLElement | undefined;\n\n  try {\n    element = adaptiveCard.render();\n  } catch (error) {\n    return { errors: [error] };\n  }\n\n  if (!element) {\n    return { errors: [new Error('Adaptive Card rendered as empty element')] };\n  }\n\n  return { element };\n}\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport AnimationCardContent from './AnimationCardContent';\n\nconst AnimationCardAttachment = ({ attachment: { content }, disabled }) => (\n  <AnimationCardContent content={content} disabled={disabled} />\n);\n\nAnimationCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nAnimationCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      media: PropTypes.arrayOf(\n        PropTypes.shape({\n          profile: PropTypes.string,\n          url: PropTypes.string.isRequired\n        })\n      ).isRequired\n    }).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default AnimationCardAttachment;\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport { Components } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\nimport type { DirectLineAnimationCard } from 'botframework-webchat-core';\n\nimport CommonCard from './CommonCard';\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { ImageContent, VideoContent } = Components;\n\ntype AnimationCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineAnimationCard;\n  disabled?: boolean;\n};\n\nconst AnimationCardContent: FC<AnimationCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const { media = [] } = content;\n  const [{ animationCardAttachment: animationCardAttachmentStyleSet }] = useStyleSet();\n\n  return (\n    <div className={animationCardAttachmentStyleSet}>\n      <ul className=\"media-list\">\n        {media.map(({ profile = '', url }, index) => (\n          <li key={index}>\n            {/\\.gif$/iu.test(url) ? <ImageContent alt={profile} src={url} /> : <VideoContent alt={profile} src={url} />}\n          </li>\n        ))}\n      </ul>\n      <CommonCard actionPerformedClassName={actionPerformedClassName} content={content} disabled={disabled} />\n    </div>\n  );\n};\n\nAnimationCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nAnimationCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    media: PropTypes.arrayOf(\n      PropTypes.shape({\n        profile: PropTypes.string,\n        url: PropTypes.string.isRequired\n      })\n    ).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default AnimationCardContent;\n","import PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\n\nimport { hooks } from 'botframework-webchat-component';\n\nimport AdaptiveCardBuilder from './AdaptiveCardBuilder';\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nconst { useDirection } = hooks;\n\nconst CommonCard = ({ actionPerformedClassName, content, disabled }) => {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [direction] = useDirection();\n  const [styleOptions] = useStyleOptions();\n\n  const builtCard = useMemo(() => {\n    if (content) {\n      const builder = new AdaptiveCardBuilder(adaptiveCardsPackage, styleOptions, direction);\n\n      builder.addCommon(content);\n\n      return builder.card;\n    }\n  }, [adaptiveCardsPackage, content, direction, styleOptions]);\n\n  return (\n    <AdaptiveCardRenderer\n      actionPerformedClassName={actionPerformedClassName}\n      adaptiveCard={builtCard}\n      disabled={disabled}\n      tapAction={content && content.tap}\n    />\n  );\n};\n\nCommonCard.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nCommonCard.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  content: PropTypes.shape({\n    tap: PropTypes.any\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default CommonCard;\n","import {\n  Column,\n  ColumnSet,\n  Container,\n  Image,\n  OpenUrlAction,\n  Size,\n  SizeAndUnit,\n  SizeUnit,\n  SubmitAction,\n  TextBlock,\n  TextColor,\n  TextSize,\n  TextWeight,\n  type AdaptiveCard,\n  type CardElement\n} from 'adaptivecards';\nimport type { DirectLineCardAction } from 'botframework-webchat-core';\nimport { isForbiddenPropertyName } from 'botframework-webchat-core';\n\nimport { type AdaptiveCardsPackage } from '../../types/AdaptiveCardsPackage';\nimport { type AdaptiveCardsStyleOptions } from '../AdaptiveCardsStyleOptions';\n\nexport interface BotFrameworkCardAction {\n  __isBotFrameworkCardAction: true;\n  cardAction: DirectLineCardAction;\n}\n\nfunction addCardAction(cardAction: DirectLineCardAction, includesOAuthButtons?: boolean) {\n  const { type } = cardAction;\n  let action;\n\n  if (\n    type === 'imBack' ||\n    type === 'messageBack' ||\n    type === 'postBack' ||\n    (type === 'signin' && includesOAuthButtons)\n  ) {\n    action = new SubmitAction();\n\n    action.data = {\n      __isBotFrameworkCardAction: true,\n      cardAction\n    };\n\n    action.title = (cardAction as { title: string }).title;\n  } else {\n    action = new OpenUrlAction();\n\n    action.title = (cardAction as { title: string }).title;\n    action.url = cardAction.type === 'call' ? `tel:${cardAction.value}` : cardAction.value;\n  }\n\n  return action;\n}\n\nexport default class AdaptiveCardBuilder {\n  card: AdaptiveCard;\n  container: Container;\n  styleOptions: AdaptiveCardsStyleOptions;\n\n  constructor(\n    adaptiveCards: AdaptiveCardsPackage,\n    styleOptions: AdaptiveCardsStyleOptions,\n    direction: 'ltr' | 'rtl' | 'auto' = 'ltr'\n  ) {\n    this.card = new adaptiveCards.AdaptiveCard();\n    this.container = new Container();\n    this.container.rtl = direction === 'rtl';\n    this.styleOptions = styleOptions;\n\n    this.card.addItem(this.container);\n  }\n\n  addColumnSet(sizes: number[], container: Container = this.container, selectAction?: DirectLineCardAction) {\n    const columnSet = new ColumnSet();\n\n    columnSet.selectAction = selectAction && addCardAction(selectAction);\n    container.addItem(columnSet);\n\n    return sizes.map(size => {\n      const column = new Column();\n\n      column.width = new SizeAndUnit(size, SizeUnit.Weight);\n\n      columnSet.addColumn(column);\n\n      return column;\n    });\n  }\n\n  addItems(cardElements: CardElement[], container: Container = this.container) {\n    cardElements.forEach(cardElement => container.addItem(cardElement));\n  }\n\n  addTextBlock(text: string, template: Partial<TextBlock>, container: Container = this.container) {\n    if (typeof text !== 'undefined') {\n      const textblock = new TextBlock();\n\n      for (const prop in template) {\n        if (!isForbiddenPropertyName(prop)) {\n          // Mitigated through denylisting.\n          // eslint-disable-next-line security/detect-object-injection\n          textblock[prop] = template[prop];\n        }\n      }\n\n      textblock.text = text;\n\n      container.addItem(textblock);\n    }\n  }\n\n  addButtons(cardActions: DirectLineCardAction[], includesOAuthButtons?: boolean) {\n    cardActions &&\n      cardActions.forEach(cardAction => {\n        this.card.addAction(addCardAction(cardAction, includesOAuthButtons));\n      });\n  }\n\n  addCommonHeaders(content: ICommonContent) {\n    const { richCardWrapTitle } = this.styleOptions;\n    this.addTextBlock(content.title, {\n      color: TextColor.Default,\n      size: TextSize.Medium,\n      style: 'heading',\n      weight: TextWeight.Bolder,\n      wrap: richCardWrapTitle\n    });\n    this.addTextBlock(content.subtitle, { color: TextColor.Default, isSubtle: true, wrap: richCardWrapTitle });\n    this.addTextBlock(content.text, { color: TextColor.Default, wrap: true });\n  }\n\n  addCommon(content: ICommonContent) {\n    this.addCommonHeaders(content);\n    this.addButtons(content.buttons);\n  }\n\n  addImage(url: string, container?: Container, selectAction?: DirectLineCardAction, altText?: string) {\n    container = container || this.container;\n\n    const image = new Image();\n\n    image.altText = altText;\n    image.url = url;\n    image.selectAction = selectAction && addCardAction(selectAction);\n    image.size = Size.Stretch;\n\n    container.addItem(image);\n  }\n}\n\nexport interface ICommonContent {\n  buttons?: DirectLineCardAction[];\n  subtitle?: string;\n  text?: string;\n  title?: string;\n}\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport AudioCardContent from './AudioCardContent';\n\nconst AudioCardAttachment = ({ attachment: { content }, disabled }) => (\n  <AudioCardContent content={content} disabled={disabled} />\n);\n\nAudioCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nAudioCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      autostart: PropTypes.bool,\n      autoloop: PropTypes.bool,\n      image: PropTypes.shape({\n        url: PropTypes.string.isRequired\n      }),\n      media: PropTypes.arrayOf(\n        PropTypes.shape({\n          url: PropTypes.string.isRequired\n        }).isRequired\n      ).isRequired\n    })\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default AudioCardAttachment;\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport { Components } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\nimport type { DirectLineAudioCard } from 'botframework-webchat-core';\n\nimport CommonCard from './CommonCard';\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { AudioContent } = Components;\n\ntype AudioCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineAudioCard;\n  disabled?: boolean;\n};\n\nconst AudioCardContent: FC<AudioCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [{ audioCardAttachment: audioCardAttachmentStyleSet }] = useStyleSet();\n  const { autostart = false, autoloop = false, image: { url: imageURL = '' } = {}, media = [] } = content;\n\n  return (\n    <div className={audioCardAttachmentStyleSet}>\n      <ul className=\"media-list\">\n        {media.map(({ url }, index) => (\n          <li key={index}>\n            <AudioContent autoPlay={autostart} loop={autoloop} poster={imageURL} src={url} />\n          </li>\n        ))}\n      </ul>\n      <CommonCard actionPerformedClassName={actionPerformedClassName} content={content} disabled={disabled} />\n    </div>\n  );\n};\n\nAudioCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nAudioCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    autostart: PropTypes.bool,\n    autoloop: PropTypes.bool,\n    image: PropTypes.shape({\n      url: PropTypes.string.isRequired\n    }),\n    media: PropTypes.arrayOf(\n      PropTypes.shape({\n        url: PropTypes.string.isRequired\n      }).isRequired\n    ).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default AudioCardContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport HeroCardContent from './HeroCardContent';\n\nconst HeroCardAttachment = ({ attachment: { content } = {}, disabled }) =>\n  !!content && <HeroCardContent content={content} disabled={disabled} />;\n\nHeroCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nHeroCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      buttons: PropTypes.any,\n      images: PropTypes.arrayOf(\n        PropTypes.shape({\n          alt: PropTypes.string,\n          tap: PropTypes.any,\n          url: PropTypes.string.isRequired\n        })\n      ),\n      subtitle: PropTypes.string,\n      tap: PropTypes.any,\n      text: PropTypes.string,\n      title: PropTypes.string\n    }).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default HeroCardAttachment;\n","import { hooks } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC, useMemo } from 'react';\nimport type { DirectLineHeroCard } from 'botframework-webchat-core';\n\nimport AdaptiveCardBuilder from './AdaptiveCardBuilder';\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nconst { useDirection } = hooks;\n\ntype HeroCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineHeroCard;\n  disabled?: boolean;\n};\n\nconst HeroCardContent: FC<HeroCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [styleOptions] = useStyleOptions();\n  const [direction] = useDirection();\n\n  const builtCard = useMemo(() => {\n    const builder = new AdaptiveCardBuilder(adaptiveCardsPackage, styleOptions, direction);\n\n    if (content) {\n      (content.images || []).forEach(image => builder.addImage(image.url, null, image.tap, image.alt));\n\n      builder.addCommon(content);\n\n      return builder.card;\n    }\n  }, [adaptiveCardsPackage, content, direction, styleOptions]);\n\n  return (\n    <AdaptiveCardRenderer\n      actionPerformedClassName={actionPerformedClassName}\n      adaptiveCard={builtCard}\n      disabled={disabled}\n      tapAction={content && content.tap}\n    />\n  );\n};\n\nHeroCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nHeroCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    images: PropTypes.arrayOf(\n      PropTypes.shape({\n        alt: PropTypes.string.isRequired,\n        tap: PropTypes.any,\n        url: PropTypes.string.isRequired\n      })\n    ),\n    tap: PropTypes.any\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default HeroCardContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport OAuthCardContent from './OAuthCardContent';\n\nconst OAuthCardAttachment = ({ attachment: { content } = {}, disabled }) => (\n  <OAuthCardContent content={content} disabled={disabled} />\n);\n\nOAuthCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nOAuthCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      buttons: PropTypes.array\n    }).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default OAuthCardAttachment;\n","import { hooks } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC, useMemo } from 'react';\nimport type { DirectLineOAuthCard } from 'botframework-webchat-core';\n\nimport AdaptiveCardBuilder from './AdaptiveCardBuilder';\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nconst { useDirection } = hooks;\n\ntype OAuthCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineOAuthCard;\n  disabled?: boolean;\n};\n\nconst OAuthCardContent: FC<OAuthCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [direction] = useDirection();\n  const [styleOptions] = useStyleOptions();\n\n  const builtCard = useMemo(() => {\n    if (content) {\n      const builder = new AdaptiveCardBuilder(adaptiveCardsPackage, styleOptions, direction);\n\n      builder.addCommonHeaders(content);\n      builder.addButtons(content.buttons, true);\n\n      return builder.card;\n    }\n  }, [adaptiveCardsPackage, content, direction, styleOptions]);\n\n  return (\n    <AdaptiveCardRenderer\n      actionPerformedClassName={actionPerformedClassName}\n      adaptiveCard={builtCard}\n      disabled={disabled}\n    />\n  );\n};\n\nOAuthCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nOAuthCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    buttons: PropTypes.array\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default OAuthCardContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport ReceiptCardContent from './ReceiptCardContent';\n\nconst ReceiptCardAttachment = ({ attachment: { content }, disabled }) => (\n  <ReceiptCardContent content={content} disabled={disabled} />\n);\n\nReceiptCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nReceiptCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      buttons: PropTypes.array,\n      facts: PropTypes.arrayOf(\n        PropTypes.shape({\n          key: PropTypes.string,\n          value: PropTypes.string\n        })\n      ),\n      items: PropTypes.arrayOf(\n        PropTypes.shape({\n          image: PropTypes.shape({\n            alt: PropTypes.string.isRequired,\n            tap: PropTypes.any,\n            url: PropTypes.string.isRequired\n          }),\n          price: PropTypes.string.isRequired,\n          quantity: PropTypes.string,\n          subtitle: PropTypes.string,\n          tap: PropTypes.any,\n          text: PropTypes.string,\n          title: PropTypes.string.isRequired\n        })\n      ),\n      tap: PropTypes.any,\n      tax: PropTypes.string,\n      title: PropTypes.string,\n      total: PropTypes.string,\n      vat: PropTypes.string\n    }).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default ReceiptCardAttachment;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 10, 15, 25, 50, 75] }] */\n\nimport { hooks } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC, useMemo } from 'react';\nimport type { DirectLineReceiptCard } from 'botframework-webchat-core';\n\nimport AdaptiveCardBuilder from './AdaptiveCardBuilder';\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nconst { useDirection, useLocalizer } = hooks;\n\nfunction nullOrUndefined(obj) {\n  return obj === null || typeof obj === 'undefined';\n}\n\ntype ReceiptCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineReceiptCard;\n  disabled?: boolean;\n};\n\nconst ReceiptCardContent: FC<ReceiptCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [direction] = useDirection();\n  const [styleOptions] = useStyleOptions();\n  const localize = useLocalizer();\n\n  const taxText = localize('RECEIPT_CARD_TAX');\n  const totalText = localize('RECEIPT_CARD_TOTAL');\n  const vatText = localize('RECEIPT_CARD_VAT');\n\n  const builtCard = useMemo(() => {\n    const builder = new AdaptiveCardBuilder(adaptiveCardsPackage, styleOptions, direction);\n    const { HorizontalAlignment, TextSize, TextWeight } = adaptiveCardsPackage;\n    const { buttons, facts, items, tax, title, total, vat } = content;\n    const { richCardWrapTitle } = styleOptions;\n\n    if (content) {\n      builder.addTextBlock(title, { size: TextSize.Medium, weight: TextWeight.Bolder, wrap: richCardWrapTitle });\n\n      if (facts) {\n        const [firstFactColumn, lastFactColumn] = builder.addColumnSet([75, 25]);\n\n        facts.map(({ key, value }) => {\n          builder.addTextBlock(key, { size: TextSize.Medium }, firstFactColumn);\n          builder.addTextBlock(\n            value,\n            { size: TextSize.Medium, horizontalAlignment: HorizontalAlignment.Right },\n            lastFactColumn\n          );\n        });\n      }\n\n      items &&\n        items.map(({ image: { alt, tap: imageTap, url } = {}, price, quantity, subtitle, tap, text, title }) => {\n          let itemColumns;\n\n          if (url) {\n            const [itemImageColumn, ...columns] = builder.addColumnSet([15, 75, 10]);\n\n            itemColumns = columns;\n            builder.addImage(url, itemImageColumn, imageTap, alt);\n          } else {\n            itemColumns = builder.addColumnSet([75, 25], undefined, tap && tap);\n          }\n\n          const [itemTitleColumn, itemPriceColumn] = itemColumns;\n\n          builder.addTextBlock(\n            quantity ? `${title} &times; ${quantity}` : title,\n            { size: TextSize.Medium, weight: TextWeight.Bolder, wrap: richCardWrapTitle },\n            itemTitleColumn\n          );\n          builder.addTextBlock(subtitle, { size: TextSize.Medium, wrap: richCardWrapTitle }, itemTitleColumn);\n          builder.addTextBlock(price, { horizontalAlignment: HorizontalAlignment.Right }, itemPriceColumn);\n\n          if (text) {\n            builder.addTextBlock(text, { size: TextSize.Medium, wrap: richCardWrapTitle }, itemTitleColumn);\n          }\n        });\n\n      if (!nullOrUndefined(vat)) {\n        const vatCol = builder.addColumnSet([75, 25]);\n\n        builder.addTextBlock(vatText, { size: TextSize.Medium, weight: TextWeight.Bolder }, vatCol[0]);\n        builder.addTextBlock(vat, { horizontalAlignment: HorizontalAlignment.Right }, vatCol[1]);\n      }\n\n      if (!nullOrUndefined(tax)) {\n        const taxCol = builder.addColumnSet([75, 25]);\n\n        builder.addTextBlock(taxText, { size: TextSize.Medium, weight: TextWeight.Bolder }, taxCol[0]);\n        builder.addTextBlock(tax, { horizontalAlignment: HorizontalAlignment.Right }, taxCol[1]);\n      }\n\n      if (!nullOrUndefined(total)) {\n        const totalCol = builder.addColumnSet([75, 25]);\n\n        builder.addTextBlock(totalText, { size: TextSize.Medium, weight: TextWeight.Bolder }, totalCol[0]);\n        builder.addTextBlock(\n          total,\n          { horizontalAlignment: HorizontalAlignment.Right, size: TextSize.Medium, weight: TextWeight.Bolder },\n          totalCol[1]\n        );\n      }\n\n      builder.addButtons(buttons);\n\n      return builder.card;\n    }\n  }, [adaptiveCardsPackage, content, direction, styleOptions, taxText, totalText, vatText]);\n\n  return (\n    <AdaptiveCardRenderer\n      actionPerformedClassName={actionPerformedClassName}\n      adaptiveCard={builtCard}\n      disabled={disabled}\n      tapAction={content && content.tap}\n    />\n  );\n};\n\nReceiptCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nReceiptCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    buttons: PropTypes.array,\n    facts: PropTypes.arrayOf(\n      PropTypes.shape({\n        key: PropTypes.string,\n        value: PropTypes.string\n      })\n    ),\n    items: PropTypes.arrayOf(\n      PropTypes.shape({\n        image: PropTypes.shape({\n          alt: PropTypes.string.isRequired,\n          tap: PropTypes.any,\n          url: PropTypes.string.isRequired\n        }),\n        price: PropTypes.string.isRequired,\n        quantity: PropTypes.string,\n        subtitle: PropTypes.string,\n        tap: PropTypes.any,\n        text: PropTypes.string,\n        title: PropTypes.string.isRequired\n      })\n    ),\n    tap: PropTypes.any,\n    tax: PropTypes.string,\n    title: PropTypes.string,\n    total: PropTypes.string,\n    vat: PropTypes.string\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default ReceiptCardContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport SignInCardContent from './SignInCardContent';\n\nconst SignInCardAttachment = ({ attachment: { content }, disabled }) => (\n  <SignInCardContent content={content} disabled={disabled} />\n);\n\nSignInCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nSignInCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.any.isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default SignInCardAttachment;\n","import PropTypes from 'prop-types';\nimport React, { FC } from 'react';\nimport type { DirectLineSignInCard } from 'botframework-webchat-core';\n\nimport CommonCard from './CommonCard';\nimport useStyleSet from '../../hooks/useStyleSet';\n\ntype SignInCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineSignInCard;\n  disabled?: boolean;\n};\n\nconst SignInCardContent: FC<SignInCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [{ animationCardAttachment: animationCardAttachmentStyleSet }] = useStyleSet();\n\n  return (\n    <div className={animationCardAttachmentStyleSet}>\n      <CommonCard actionPerformedClassName={actionPerformedClassName} content={content} disabled={disabled} />\n    </div>\n  );\n};\n\nSignInCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nSignInCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  content: PropTypes.any.isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default SignInCardContent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport ThumbnailCardContent from './ThumbnailCardContent';\n\nconst ThumbnailCardAttachment = ({ attachment: { content }, disabled }) => (\n  <ThumbnailCardContent content={content} disabled={disabled} />\n);\n\nThumbnailCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nThumbnailCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      buttons: PropTypes.array,\n      images: PropTypes.arrayOf(\n        PropTypes.shape({\n          alt: PropTypes.string.isRequired,\n          tap: PropTypes.any,\n          url: PropTypes.string.isRequired\n        })\n      ),\n      subtitle: PropTypes.string,\n      tap: PropTypes.any,\n      text: PropTypes.string,\n      title: PropTypes.string\n    }).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default ThumbnailCardAttachment;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [25, 75] }] */\n\nimport { hooks } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC, useMemo } from 'react';\nimport type { DirectLineThumbnailCard } from 'botframework-webchat-core';\n\nimport AdaptiveCardBuilder from './AdaptiveCardBuilder';\nimport AdaptiveCardRenderer from './AdaptiveCardRenderer';\nimport useAdaptiveCardsPackage from '../hooks/useAdaptiveCardsPackage';\nimport useStyleOptions from '../../hooks/useStyleOptions';\n\nconst { useDirection } = hooks;\n\ntype ThumbnailCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineThumbnailCard;\n  disabled?: boolean;\n};\n\nconst ThumbnailCardContent: FC<ThumbnailCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const [adaptiveCardsPackage] = useAdaptiveCardsPackage();\n  const [direction] = useDirection();\n  const [styleOptions] = useStyleOptions();\n\n  const builtCard = useMemo(() => {\n    if (content) {\n      const builder = new AdaptiveCardBuilder(adaptiveCardsPackage, styleOptions, direction);\n      const { TextSize, TextWeight } = adaptiveCardsPackage;\n      const { buttons, images, subtitle, text, title } = content;\n      const { richCardWrapTitle } = styleOptions;\n\n      if (images && images.length) {\n        const [firstColumn, lastColumn] = builder.addColumnSet([75, 25]);\n        const [{ alt, tap, url }] = images;\n\n        builder.addTextBlock(\n          title,\n          { size: TextSize.Medium, weight: TextWeight.Bolder, wrap: richCardWrapTitle },\n          firstColumn\n        );\n\n        builder.addTextBlock(subtitle, { isSubtle: true, wrap: richCardWrapTitle }, firstColumn);\n        builder.addImage(url, lastColumn, tap, alt);\n        builder.addTextBlock(text, { wrap: true });\n        builder.addButtons(buttons);\n      } else {\n        builder.addCommon(content);\n      }\n      return builder.card;\n    }\n  }, [adaptiveCardsPackage, direction, content, styleOptions]);\n\n  return (\n    <AdaptiveCardRenderer\n      actionPerformedClassName={actionPerformedClassName}\n      adaptiveCard={builtCard}\n      disabled={disabled}\n      tapAction={content && content.tap}\n    />\n  );\n};\n\nThumbnailCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nThumbnailCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    buttons: PropTypes.array,\n    images: PropTypes.arrayOf(\n      PropTypes.shape({\n        alt: PropTypes.string.isRequired,\n        tap: PropTypes.any,\n        url: PropTypes.string.isRequired\n      })\n    ),\n    subtitle: PropTypes.string,\n    tap: PropTypes.any,\n    text: PropTypes.string,\n    title: PropTypes.string\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default ThumbnailCardContent;\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport VideoCardContent from './VideoCardContent';\n\nconst VideoCardAttachment = ({ attachment: { content }, disabled }) => (\n  <VideoCardContent content={content} disabled={disabled} />\n);\n\nVideoCardAttachment.defaultProps = {\n  disabled: undefined\n};\n\nVideoCardAttachment.propTypes = {\n  attachment: PropTypes.shape({\n    content: PropTypes.shape({\n      autoloop: PropTypes.bool,\n      autostart: PropTypes.bool,\n      image: PropTypes.shape({\n        url: PropTypes.string.isRequired\n      }),\n      media: PropTypes.arrayOf(\n        PropTypes.shape({\n          profile: PropTypes.string.isRequired,\n          url: PropTypes.string\n        })\n      )\n    })\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default VideoCardAttachment;\n","/* eslint react/no-array-index-key: \"off\" */\n\nimport { Components } from 'botframework-webchat-component';\nimport PropTypes from 'prop-types';\nimport React, { FC } from 'react';\nimport type { DirectLineVideoCard } from 'botframework-webchat-core';\n\nimport CommonCard from './CommonCard';\nimport useStyleSet from '../../hooks/useStyleSet';\n\nconst { VideoContent } = Components;\n\ntype VideoCardContentProps = {\n  actionPerformedClassName?: string;\n  content: DirectLineVideoCard & {\n    autoloop?: boolean;\n    autostart?: boolean;\n    image?: { url?: string };\n    media?: { profile?: string; url?: string }[];\n  };\n  disabled?: boolean;\n};\n\nconst VideoCardContent: FC<VideoCardContentProps> = ({ actionPerformedClassName, content, disabled }) => {\n  const { autoloop, autostart, image: { url: imageURL } = { url: undefined }, media } = content;\n  const [{ audioCardAttachment: audioCardAttachmentStyleSet }] = useStyleSet();\n\n  return (\n    <div className={audioCardAttachmentStyleSet}>\n      <ul className=\"media-list\">\n        {media.map(({ url }, index) => (\n          <li key={index}>\n            <VideoContent autoPlay={autostart} loop={autoloop} poster={imageURL} src={url} />\n          </li>\n        ))}\n      </ul>\n      <CommonCard actionPerformedClassName={actionPerformedClassName} content={content} disabled={disabled} />\n    </div>\n  );\n};\n\nVideoCardContent.defaultProps = {\n  actionPerformedClassName: '',\n  disabled: undefined\n};\n\nVideoCardContent.propTypes = {\n  actionPerformedClassName: PropTypes.string,\n  // PropTypes cannot fully capture TypeScript types.\n  // @ts-ignore\n  content: PropTypes.shape({\n    autoloop: PropTypes.bool,\n    autostart: PropTypes.bool,\n    image: PropTypes.shape({\n      url: PropTypes.string.isRequired\n    }),\n    media: PropTypes.arrayOf(\n      PropTypes.shape({\n        profile: PropTypes.string,\n        url: PropTypes.string.isRequired\n      })\n    ).isRequired\n  }).isRequired,\n  disabled: PropTypes.bool\n};\n\nexport default VideoCardContent;\n","import { normalizeStyleOptions, StrictStyleOptions, StyleOptions } from 'botframework-webchat-api';\n\nimport { type AdaptiveCardsStyleOptions, type StrictAdaptiveCardsStyleOptions } from '../AdaptiveCardsStyleOptions';\nimport { type AdaptiveCardsStyleSet } from '../AdaptiveCardsStyleSet';\nimport normalizeAdaptiveCardsStyleOptions from '../normalizeStyleOptions';\nimport createAdaptiveCardRendererStyle from './StyleSet/AdaptiveCardRenderer';\nimport createAnimationCardAttachmentStyle from './StyleSet/AnimationCardAttachment';\nimport createAudioCardAttachmentStyle from './StyleSet/AudioCardAttachment';\n\n// TODO: [P4] We should add a notice for people who want to use \"styleSet\" instead of \"styleOptions\".\n//       \"styleSet\" is actually CSS stylesheet and it is based on the DOM tree.\n//       DOM tree may change from time to time, thus, maintaining \"styleSet\" becomes a constant effort.\n\nexport default function createAdaptiveCardsStyleSet(\n  options: StyleOptions & AdaptiveCardsStyleOptions\n): AdaptiveCardsStyleSet {\n  const strictOptions: StrictStyleOptions & StrictAdaptiveCardsStyleOptions = {\n    ...normalizeStyleOptions(options),\n    ...normalizeAdaptiveCardsStyleOptions(options)\n  };\n\n  return {\n    adaptiveCardRenderer: createAdaptiveCardRendererStyle(strictOptions),\n    animationCardAttachment: createAnimationCardAttachmentStyle(),\n    audioCardAttachment: createAudioCardAttachmentStyle(strictOptions)\n  };\n}\n","import FullBundleStyleOptions from '../../../types/FullBundleStyleOptions';\n\nexport default function ({\n  cardPushButtonBackgroundColor,\n  cardPushButtonTextColor,\n  accent,\n  paddingRegular,\n  primaryFont\n}: FullBundleStyleOptions) {\n  return {\n    '&.webchat__adaptive-card-renderer': {\n      // Related to #4075.\n      // Adaptive Cards assume its host is in \"forced border-box\" mode.\n      // In CSS, the default is \"content-box\" mode.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing#values\n      '& *': {\n        boxSizing: 'border-box'\n      },\n\n      '& .ac-input, & .ac-inlineActionButton, & .ac-quickActionButton': {\n        fontFamily: primaryFont\n      },\n\n      '& .ac-multichoiceInput': {\n        padding: paddingRegular\n      },\n\n      '& .ac-pushButton': {\n        appearance: 'none',\n        backgroundColor: 'White',\n        borderStyle: 'solid',\n        borderWidth: 1,\n        color: accent,\n        fontWeight: 600,\n        padding: paddingRegular\n      },\n\n      '& .ac-pushButton.style-destructive': {\n        backgroundColor: '#E50000',\n        color: 'white'\n      },\n\n      '& .ac-pushButton.style-destructive:hover, & .ac-pushButton.style-destructive:active': {\n        backgroundColor: '#BF0000'\n      },\n\n      '& .ac-pushButton.style-positive': {\n        backgroundColor: '#0078D7',\n        color: 'white'\n      },\n\n      '& .ac-pushButton.style-positive:hover, & .ac-pushButton.style-positive:active': {\n        backgroundColor: '#006ABC'\n      },\n\n      // The following styles are copied from :disabled via Chromium.\n\n      '& .ac-pushButton, & input, & select, & textarea': {\n        '&[aria-disabled=\"true\"]': {\n          backgroundColor: 'rgba(239, 239, 239, 0.3)',\n          borderColor: 'rgba(118, 118, 118, 0.3)',\n          borderStyle: 'solid',\n          borderWidth: 1,\n          color: '#545454'\n        }\n      },\n\n      '& .ac-pushButton[aria-disabled=\"true\"]': {\n        backgroundColor: '#EEE',\n        color: '#4F4F4F'\n      },\n\n      '& .ac-pushButton[aria-pressed=\"true\"]': {\n        backgroundColor: cardPushButtonBackgroundColor,\n        borderColor: cardPushButtonBackgroundColor,\n        color: cardPushButtonTextColor,\n\n        '@media (forced-colors: active)': {\n          backgroundColor: 'Highlight',\n          borderColor: 'Highlight',\n          color: 'HighlightText',\n          forcedColorAdjust: 'none'\n        }\n      },\n\n      '& input[aria-disabled=\"true\"]': {\n        padding: '2px 1px'\n      }\n    }\n  };\n}\n","// TODO: [P4] We are moving attachments related to Adaptive Cards out of \"component\"\n//       Later, we will rewrite these attachments without Adaptive Cards\n//       We are leaving the CSS here as-is for now\n\nexport default function AnimationCardAttachment() {\n  return {\n    // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n    display: 'flex',\n    flexDirection: 'column',\n\n    '& > ul.media-list': {\n      // TODO: [P2] We should not set \"listStyleType\" in styleSet, the user have no good reasons to change this.\n      listStyleType: 'none',\n      margin: 0,\n      padding: 0\n    }\n  };\n}\n","// TODO: [P4] We are moving attachments related to Adaptive Cards out of \"component\"\n//       Later, we will rewrite these attachments without Adaptive Cards\n//       We are leaving the CSS here as-is for now\n\nexport default function AudioCardAttachment({ paddingRegular = undefined }) {\n  return {\n    // TODO: [P2] We should not set \"display\" in styleSet, this will allow the user to break the layout for no good reasons.\n    display: 'flex',\n    flexDirection: 'column',\n\n    '& > ul.media-list': {\n      // TODO: [P2] We should not set \"listStyleType\" in styleSet, the user have no good reasons to change this.\n      listStyleType: 'none',\n      margin: paddingRegular,\n      padding: 0\n    }\n  };\n}\n","import { onErrorResumeNext } from 'botframework-webchat-core';\nimport MarkdownIt from 'markdown-it';\nimport sanitizeHTML from 'sanitize-html';\n\nimport { parseDocumentFromString, serializeDocumentIntoString } from 'botframework-webchat-component/internal';\nimport ariaLabel, { post as ariaLabelPost, pre as ariaLabelPre } from './markdownItPlugins/ariaLabel';\nimport { pre as respectCRLFPre } from './markdownItPlugins/respectCRLF';\nimport betterLinkDocumentMod, { BetterLinkDocumentModDecoration } from './private/betterLinkDocumentMod';\nimport iterateLinkDefinitions from './private/iterateLinkDefinitions';\n\nconst SANITIZE_HTML_OPTIONS = Object.freeze({\n  allowedAttributes: {\n    a: ['aria-label', 'class', 'href', 'name', 'rel', 'target'],\n    button: ['aria-label', 'class', 'type', 'value'],\n    img: ['alt', 'class', 'src', 'title'],\n    span: ['aria-label']\n  },\n  allowedSchemes: ['data', 'http', 'https', 'ftp', 'mailto', 'sip', 'tel'],\n  allowedTags: [\n    'a',\n    'b',\n    'blockquote',\n    'br',\n    'button',\n    'caption',\n    'code',\n    'del',\n    'div',\n    'em',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'hr',\n    'i',\n    'img',\n    'ins',\n    'li',\n    'nl',\n    'ol',\n    'p',\n    'pre',\n    's',\n    'span',\n    'strike',\n    'strong',\n    'table',\n    'tbody',\n    'td',\n    'tfoot',\n    'th',\n    'thead',\n    'tr',\n    'ul'\n  ],\n  // Bug of https://github.com/apostrophecms/sanitize-html/issues/633.\n  // They should not remove `alt=\"\"` even though it is empty.\n  nonBooleanAttributes: []\n});\n\ntype RenderInit = Readonly<{ containerClassName?: string; externalLinkAlt?: string }>;\n\nexport default function render(\n  markdown: string,\n  { markdownRespectCRLF, markdownRenderHTML }: Readonly<{ markdownRespectCRLF: boolean; markdownRenderHTML?: boolean }>,\n  { externalLinkAlt = '' }: RenderInit = Object.freeze({})\n): string {\n  const linkDefinitions = Array.from(iterateLinkDefinitions(markdown));\n\n  const MARKDOWN_IT_INIT = Object.freeze({\n    breaks: false,\n    html: markdownRenderHTML ?? true,\n    linkify: true,\n    typographer: true,\n    xhtmlOut: true\n  });\n\n  if (markdownRespectCRLF) {\n    markdown = respectCRLFPre(markdown);\n  }\n\n  markdown = ariaLabelPre(markdown);\n\n  const decorate = (href: string, textContent: string): BetterLinkDocumentModDecoration => {\n    const decoration: BetterLinkDocumentModDecoration = {\n      rel: 'noopener noreferrer',\n      target: '_blank',\n      wrapZeroWidthSpace: true\n    };\n\n    const ariaLabelSegments: string[] = [textContent];\n    const classes: Set<string> = new Set();\n    const linkDefinition = linkDefinitions.find(({ url }) => url === href);\n    const protocol = onErrorResumeNext(() => new URL(href).protocol);\n\n    if (linkDefinition) {\n      ariaLabelSegments.push(\n        linkDefinition.title || onErrorResumeNext(() => new URL(linkDefinition.url).host) || linkDefinition.url\n      );\n\n      // linkDefinition.identifier is uppercase, while linkDefinition.label is as-is.\n      linkDefinition.label === textContent && classes.add('webchat__render-markdown__pure-identifier');\n    }\n\n    // For links that would be sanitized out, let's turn them into a button so we could handle them later.\n    if (!SANITIZE_HTML_OPTIONS.allowedSchemes.map(scheme => `${scheme}:`).includes(protocol)) {\n      decoration.asButton = true;\n\n      classes.add('webchat__render-markdown__citation');\n    } else if (protocol === 'http:' || protocol === 'https:') {\n      decoration.iconAlt = externalLinkAlt;\n      decoration.iconClassName = 'webchat__render-markdown__external-link-icon';\n\n      ariaLabelSegments.push(externalLinkAlt);\n    }\n\n    // The first segment is textContent. Putting textContent is aria-label is useless.\n    if (ariaLabelSegments.length > 1) {\n      // If \"aria-label\" is already applied, do not overwrite it.\n      decoration.ariaLabel = (value: string) => value || ariaLabelSegments.join(' ');\n    }\n\n    decoration.className = Array.from(classes).join(' ');\n\n    // By default, Markdown-It will set \"title\" to the link title in link definition.\n\n    // However, \"title\" may be narrated by screen reader:\n    // - Edge\n    //   - <a> will narrate \"aria-label\" but not \"title\"\n    //   - <button> will narrate both \"aria-label\" and \"title\"\n    // - NVDA\n    //   - <a> will narrate both \"aria-label\" and \"title\"\n    //   - <button> will narrate both \"aria-label\" and \"title\"\n\n    // Title makes it very difficult to control narrations by the screen reader. Thus, we are disabling it in favor of \"aria-label\".\n    // This will not affect our accessibility compliance but UX. We could use a non-native tooltip or other forms of visual hint.\n\n    decoration.title = false;\n\n    return decoration;\n  };\n\n  const htmlAfterMarkdown = ariaLabelPost(new MarkdownIt(MARKDOWN_IT_INIT).use(ariaLabel).render(markdown));\n\n  // TODO: [P1] In some future, we should apply \"better link\" and \"sanitization\" outside of the Markdown engine.\n  //       Particularly, apply them at `useRenderMarkdownAsHTML` instead of inside the default `renderMarkdown`.\n  //       If web devs want to bring their own Markdown engine, they don't need to rebuild \"better link\" and sanitization themselves.\n\n  const documentAfterMarkdown = parseDocumentFromString(htmlAfterMarkdown);\n\n  betterLinkDocumentMod(documentAfterMarkdown, decorate);\n\n  const htmlAfterBetterLink = serializeDocumentIntoString(documentAfterMarkdown);\n\n  const htmlAfterSanitization = sanitizeHTML(htmlAfterBetterLink, SANITIZE_HTML_OPTIONS);\n\n  return htmlAfterSanitization;\n}\n","import MarkdownIt from 'markdown-it';\nimport markdownItAttrs from 'markdown-it-attrs-es5';\n\nconst MARKDOWN_ATTRS_LEFT_DELIMITER = '⟬';\n// Make sure the delimiter is free from any RegExp characters, such as *, ?, etc.\n// IE11 does not support \"u\" flag and Babel could not remove it. We intentionally omitting the \"u\" flag here.\n// eslint-disable-next-line require-unicode-regexp\nconst MARKDOWN_ATTRS_LEFT_DELIMITER_PATTERN = new RegExp(MARKDOWN_ATTRS_LEFT_DELIMITER, 'g');\n\nconst MARKDOWN_ATTRS_RIGHT_DELIMITER = '⟭';\n// Make sure the delimiter is free from any RegExp characters, such as *, ?, etc.\n// IE11 does not support \"u\" flag and Babel could not remove it. We intentionally omitting the \"u\" flag here.\n// eslint-disable-next-line require-unicode-regexp\nconst MARKDOWN_ATTRS_RIGHT_DELIMITER_PATTERN = new RegExp(MARKDOWN_ATTRS_RIGHT_DELIMITER, 'g');\n\nconst ariaLabel = (markdown: typeof MarkdownIt): typeof MarkdownIt =>\n  markdown.use(markdownItAttrs, {\n    // `markdown-it-attrs` is added for accessibility and allow bot developers to specify `aria-label`.\n    // We are allowlisting `aria-label` only as it is allowlisted in `sanitize-html`.\n    // Other `aria-*` will be sanitized even we allowlisted here.\n    allowedAttributes: ['aria-label'],\n    leftDelimiter: MARKDOWN_ATTRS_LEFT_DELIMITER,\n    rightDelimiter: MARKDOWN_ATTRS_RIGHT_DELIMITER\n  });\n\n// TODO: We should fold pre/post back into the plugin.\nconst pre = (markdown: string): string =>\n  // Related to #3165.\n  // We only support attributes \"aria-label\" and should leave other attributes as-is.\n  // However, `markdown-it-attrs` remove unrecognized attributes, such as {hello}.\n  // Before passing to `markdown-it-attrs`, we will convert known attributes from {aria-label=\"...\"} into ⟬aria-label=\"...\"⟭ (using white tortoise shell brackets).\n  // Then, we ask `markdown-it-attrs` to only process the new brackets, so it should only try to process things that we allowlisted.\n  // Lastly, we revert tortoise shell brackets back to curly brackets, for unprocessed attributes.\n  markdown\n    // IE11 does not support \"u\" flag and Babel could not remove it. We intentionally omitting the \"u\" flag here.\n    // eslint-disable-next-line require-unicode-regexp\n    .replace(/\\{\\s*aria-label()\\s*\\}/gi, `${MARKDOWN_ATTRS_LEFT_DELIMITER}aria-label${MARKDOWN_ATTRS_RIGHT_DELIMITER}`)\n    .replace(\n      // IE11 does not support \"u\" flag and Babel could not remove it. We intentionally omitting the \"u\" flag here.\n      // eslint-disable-next-line require-unicode-regexp\n      /\\{\\s*aria-label=(\"[^\"]*\"|[^\\s}]*)\\s*\\}/gi,\n      (_, valueInsideQuotes) =>\n        `${MARKDOWN_ATTRS_LEFT_DELIMITER}aria-label=${valueInsideQuotes}${MARKDOWN_ATTRS_RIGHT_DELIMITER}`\n    );\n\nconst post = (html: string): string =>\n  // Restore attributes not processed by `markdown-it-attrs`.\n  // TODO: [P2] #2511 After we fixed our polyfill story, we should use \"String.prototype.replaceAll\" instead of RegExp for replace all occurrences.\n  html.replace(MARKDOWN_ATTRS_LEFT_DELIMITER_PATTERN, '{').replace(MARKDOWN_ATTRS_RIGHT_DELIMITER_PATTERN, '}');\n\nexport default ariaLabel;\nexport { pre, post };\n","// TODO: We should find some other ways to do this.\nconst pre = (markdown: string): string =>\n  // IE11 does not support \"u\" flag and Babel could not remove it. We intentionally omitting the \"u\" flag here.\n  // eslint-disable-next-line require-unicode-regexp\n  markdown.replace(/\\n\\r|\\r\\n/g, carriageReturn => (carriageReturn === '\\n\\r' ? '\\r\\n' : '\\n\\r'));\n\nexport { pre };\n","export type AttributeSetter = false | string | ((value?: string) => string);\n\nexport type BetterLinkDocumentModDecoration = {\n  /** Value of \"aria-label\" attribute of the link. If set to `false`, remove existing attribute. */\n  ariaLabel?: AttributeSetter;\n\n  /** Turns this link into a <button> with \"value\" attribute instead of \"href\". */\n  asButton?: boolean;\n\n  /** Value of \"class\" attribute of the link. If set to `false`, remove existing attribute. */\n  className?: AttributeSetter;\n\n  /** Alternate text of the image icon appended to the link. */\n  iconAlt?: string;\n\n  /** Class name of the image icon appended to the link. */\n  iconClassName?: string;\n\n  /** Value of \"rel\" attribute of the link. If set to `false`, remove existing attribute. */\n  rel?: AttributeSetter;\n\n  /** Value of \"target\" attribute of the link. If set to `false`, remove existing attribute. */\n  target?: AttributeSetter;\n\n  /** Value of \"title\" attribute of the link. If set to `false`, remove existing attribute. */\n  title?: AttributeSetter;\n\n  /** Wraps the link with zero-width space. */\n  wrapZeroWidthSpace?: boolean;\n};\n\nconst ZERO_WIDTH_SPACE = '\\u200b';\n\nfunction* iterateNodeList<T extends Node>(nodeList: NodeListOf<T>) {\n  const { length } = nodeList;\n\n  for (let index = 0; index < length; index++) {\n    yield nodeList.item(index);\n  }\n}\n\nconst TRANSPARENT_GIF = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\nfunction setOrRemoveAttribute(element: Element, attributeName: string, setter: AttributeSetter) {\n  if (setter) {\n    element.setAttribute(\n      attributeName,\n      typeof setter === 'function' ? setter(element.getAttribute(attributeName)) : setter\n    );\n  } else if (setter === false) {\n    element.removeAttribute(attributeName);\n  }\n}\n\nexport default function betterLinkDocumentMod(\n  document: Document,\n  decorator: (href: string, textContent: string) => BetterLinkDocumentModDecoration | false | undefined\n): Document {\n  for (const anchor of [...iterateNodeList(document.querySelectorAll('a'))]) {\n    const decoration = decorator(anchor.getAttribute('href'), anchor.textContent);\n\n    if (!decoration) {\n      continue;\n    }\n\n    const { ariaLabel, asButton, className, iconAlt, iconClassName, rel, target, title, wrapZeroWidthSpace } =\n      decoration;\n\n    setOrRemoveAttribute(anchor, 'aria-label', ariaLabel);\n    setOrRemoveAttribute(anchor, 'class', className);\n    setOrRemoveAttribute(anchor, 'title', title);\n\n    if (iconClassName) {\n      const image = document.createElement('img');\n\n      image.setAttribute('src', TRANSPARENT_GIF);\n      image.setAttribute('alt', '');\n      image.classList.add(iconClassName);\n      iconAlt && image.setAttribute('title', iconAlt);\n\n      anchor.insertAdjacentElement('beforeend', image);\n    }\n\n    if (asButton) {\n      const button = document.createElement('button');\n\n      anchor.hasAttribute('aria-label') && button.setAttribute('aria-label', anchor.getAttribute('aria-label'));\n      anchor.hasAttribute('class') && button.setAttribute('class', anchor.getAttribute('class'));\n      anchor.hasAttribute('title') && button.setAttribute('title', anchor.getAttribute('title'));\n      button.setAttribute('type', 'button');\n      button.setAttribute('value', anchor.getAttribute('href'));\n      button.textContent = anchor.textContent;\n      button.append(...anchor.children);\n\n      anchor.replaceWith(button);\n\n      if (wrapZeroWidthSpace) {\n        button.insertAdjacentText('beforebegin', ZERO_WIDTH_SPACE);\n        button.insertAdjacentText('afterend', ZERO_WIDTH_SPACE);\n      }\n    } else {\n      setOrRemoveAttribute(anchor, 'rel', rel);\n      setOrRemoveAttribute(anchor, 'target', target);\n\n      if (wrapZeroWidthSpace) {\n        anchor.insertAdjacentText('beforebegin', ZERO_WIDTH_SPACE);\n        anchor.insertAdjacentText('afterend', ZERO_WIDTH_SPACE);\n      }\n    }\n  }\n\n  return document;\n}\n","import { fromMarkdown } from 'mdast-util-from-markdown';\nimport { type Definition, type Node } from 'mdast';\n\nfunction isDefinition(node: Node): node is Definition {\n  return node.type === 'definition';\n}\n\nexport default function* iterateLinkDefinitions(markdown: string): Generator<Definition, void, void> {\n  for (const topLevelNode of fromMarkdown(markdown).children) {\n    if (isDefinition(topLevelNode)) {\n      yield topLevelNode;\n    }\n  }\n}\n","import ReactWebChat, { type ReactWebChatProps } from 'botframework-webchat-component';\nimport React from 'react';\n\nimport AddFullBundle, { type AddFullBundleProps } from './AddFullBundle';\n\ntype FullReactWebChatProps = Readonly<ReactWebChatProps & Omit<AddFullBundleProps, 'children'>>;\n\n// Add additional props to <WebChat>, so it support additional features\nconst FullReactWebChat = (props: FullReactWebChatProps) => (\n  <AddFullBundle {...props}>{extraProps => <ReactWebChat {...props} {...extraProps} />}</AddFullBundle>\n);\n\nexport default FullReactWebChat;\n\nexport type { FullReactWebChatProps };\n","import { AudioConfig } from 'microsoft-cognitiveservices-speech-sdk';\nimport { WebSpeechPonyfillFactory } from 'botframework-webchat-api';\nimport createPonyfill from 'web-speech-cognitive-services/lib/SpeechServices';\n\nimport CognitiveServicesAudioOutputFormat from './types/CognitiveServicesAudioOutputFormat';\nimport CognitiveServicesCredentials from './types/CognitiveServicesCredentials';\nimport CognitiveServicesTextNormalization from './types/CognitiveServicesTextNormalization';\nimport createMicrophoneAudioConfigAndAudioContext from './speech/createMicrophoneAudioConfigAndAudioContext';\n\nexport default function createCognitiveServicesSpeechServicesPonyfillFactory({\n  audioConfig,\n  audioContext,\n  audioInputDeviceId,\n  credentials,\n  enableTelemetry,\n  speechRecognitionEndpointId,\n  speechSynthesisDeploymentId,\n  speechSynthesisOutputFormat,\n  textNormalization\n}: {\n  audioConfig?: AudioConfig;\n  audioContext?: AudioContext;\n  audioInputDeviceId?: string;\n  credentials: CognitiveServicesCredentials;\n  enableTelemetry?: true;\n  speechRecognitionEndpointId?: string;\n  speechSynthesisDeploymentId?: string;\n  speechSynthesisOutputFormat?: CognitiveServicesAudioOutputFormat;\n  textNormalization?: CognitiveServicesTextNormalization;\n}): WebSpeechPonyfillFactory {\n  if (!window.navigator.mediaDevices && !audioConfig) {\n    console.warn(\n      'botframework-webchat: Your browser does not support Web Audio or the page is not loaded via HTTPS or localhost. Cognitive Services Speech Services is disabled. However, you may pass a custom AudioConfig to enable speech in this environment.'\n    );\n\n    return () => ({});\n  }\n\n  if (audioConfig) {\n    audioInputDeviceId &&\n      console.warn(\n        'botframework-webchat: \"audioConfig\" and \"audioInputDeviceId\" cannot be set at the same time; ignoring \"audioInputDeviceId\".'\n      );\n\n    audioContext &&\n      console.warn(\n        'botframework-webchat: \"audioConfig\" and \"audioContext\" cannot be set at the same time; ignoring \"audioContext\" for speech recognition.'\n      );\n  } else {\n    ({ audioConfig, audioContext } = createMicrophoneAudioConfigAndAudioContext({\n      audioContext,\n      audioInputDeviceId,\n      enableTelemetry\n    }));\n  }\n\n  return ({ referenceGrammarID } = {}) => {\n    const { SpeechGrammarList, SpeechRecognition, speechSynthesis, SpeechSynthesisUtterance } = createPonyfill({\n      audioConfig,\n      audioContext,\n      credentials,\n      enableTelemetry,\n      referenceGrammars: referenceGrammarID ? [`luis/${referenceGrammarID}-PRODUCTION`] : [],\n      speechRecognitionEndpointId,\n      speechSynthesisDeploymentId,\n      speechSynthesisOutputFormat,\n      textNormalization\n    });\n\n    return {\n      resumeAudioContext: () => audioContext && audioContext.state === 'suspended' && audioContext.resume(),\n      SpeechGrammarList,\n      SpeechRecognition,\n      speechSynthesis,\n      SpeechSynthesisUtterance\n    };\n  };\n}\n","import { ChunkedArrayBufferStream } from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports';\nimport { PcmRecorder } from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.browser/Exports';\n\nimport { AudioStreamNode, DeviceInfo, Format } from './CustomAudioInputStream';\nimport bytesPerSample from './bytesPerSample';\nimport createAudioConfig from './createAudioConfig';\nimport createAudioContext from './createAudioContext';\nimport getUserMedia from './getUserMedia';\n\n// This is how often we are flushing audio buffer to the network. Modify this value will affect latency.\nconst DEFAULT_BUFFER_DURATION_IN_MS = 100;\n\n// TODO: [P2] #3975 We should consider building our own PcmRecorder:\n//       - Use Audio Worklet via blob URL\n//       - Not hardcoding the sample rate or other values\n// PcmRecorder always downscale to 16000 Hz. We cannot use the dynamic value from MediaConstraints or MediaTrackSettings.\nconst PCM_RECORDER_HARDCODED_SETTINGS: MediaTrackSettings = Object.freeze({\n  channelCount: 1,\n  sampleRate: 16000,\n  sampleSize: 16\n});\n\nconst PCM_RECORDER_HARDCODED_FORMAT: Format = Object.freeze({\n  bitsPerSample: PCM_RECORDER_HARDCODED_SETTINGS.sampleSize,\n  // `channelCount` is not on @types/web@0.0.54 yet, related to https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1290.\n  // @ts-ignore\n  channels: PCM_RECORDER_HARDCODED_SETTINGS.channelCount,\n  samplesPerSec: PCM_RECORDER_HARDCODED_SETTINGS.sampleRate\n});\n\ntype MicrophoneAudioInputStreamOptions = {\n  /** Specifies the constraints for selecting an audio device. */\n  audioConstraints?: true | MediaTrackConstraints;\n\n  /** Specifies the `AudioContext` to use. This object must be primed and ready to use. */\n  audioContext: AudioContext;\n\n  /** Specifies the buffering delay on how often to flush audio data to network. Increasing the value will increase audio latency. Default is 100 ms. */\n  bufferDurationInMS?: number;\n\n  /** Specifies whether to display diagnostic information. */\n  debug?: true;\n\n  /** Specifies if telemetry data should be sent. If not specified, telemetry data will NOT be sent. */\n  enableTelemetry?: true;\n\n  /** Specifies the `AudioWorklet` URL for `PcmRecorder`. If not specified, will use script processor on UI thread instead. */\n  pcmRecorderWorkletUrl?: string;\n};\n\nfunction createMicrophoneAudioConfig(options: MicrophoneAudioInputStreamOptions) {\n  const { audioConstraints, audioContext, debug, enableTelemetry, pcmRecorderWorkletUrl } = options;\n  const bufferDurationInMS = options.bufferDurationInMS || DEFAULT_BUFFER_DURATION_IN_MS;\n\n  // Related to #4523.\n  // When bumping to recent version of `microsoft-cognitiveservices-speech-sdk@>=1.23.0`, pass `true` to the constructor.\n  // const pcmRecorder = new PcmRecorder(true);\n  const pcmRecorder = new PcmRecorder();\n\n  pcmRecorderWorkletUrl && pcmRecorder.setWorkletUrl(pcmRecorderWorkletUrl);\n\n  return createAudioConfig({\n    async attach(audioNodeId: string): Promise<{\n      audioStreamNode: AudioStreamNode;\n      deviceInfo: DeviceInfo;\n      format: Format;\n    }> {\n      // We need to get new MediaStream on every attach().\n      // This is because PcmRecorder.releaseMediaResources() disconnected/stopped them.\n      const mediaStream = await getUserMedia({ audio: audioConstraints, video: false });\n\n      const [firstAudioTrack] = mediaStream.getAudioTracks();\n\n      if (!firstAudioTrack) {\n        throw new Error('No audio device is found.');\n      }\n\n      const outputStream = new ChunkedArrayBufferStream(\n        // Speech SDK quirks: PcmRecorder hardcoded sample rate of 16000 Hz.\n        bytesPerSample(PCM_RECORDER_HARDCODED_SETTINGS) *\n          // eslint-disable-next-line no-magic-numbers\n          ((bufferDurationInMS || DEFAULT_BUFFER_DURATION_IN_MS) / 1000),\n        audioNodeId\n      );\n\n      pcmRecorder.record(audioContext, mediaStream, outputStream);\n\n      return {\n        audioStreamNode: {\n          // Speech SDK quirks: In SDK's original MicAudioSource implementation, it call turnOff() during detach().\n          //                    That means, it call turnOff(), then detach(), then turnOff() again. Seems redundant.\n          //                    When using with Direct Line Speech, turnOff() is never called.\n          detach: (): Promise<void> => {\n            // Speech SDK quirks: In SDK, it call outputStream.close() in turnOff() before outputStream.readEnded() in detach().\n            //                    I think it make sense to call readEnded() before close().\n            outputStream.readEnded();\n            outputStream.close();\n\n            // PcmRecorder.releaseMediaResources() will disconnect/stop the MediaStream.\n            // We cannot use MediaStream again after turned off.\n            pcmRecorder.releaseMediaResources(audioContext);\n\n            // MediaStream will become inactive after all tracks are removed.\n            mediaStream.getTracks().forEach(track => mediaStream.removeTrack(track));\n\n            // ESLint: \"return\" is required by TypeScript\n            // eslint-disable-next-line no-useless-return\n            return;\n          },\n          id: () => audioNodeId,\n          read: () => outputStream.read()\n        },\n        deviceInfo: {\n          manufacturer: 'Bot Framework Web Chat',\n          model: enableTelemetry ? firstAudioTrack.label : '',\n          type: enableTelemetry ? 'Microphones' : 'Unknown'\n        },\n        // Speech SDK quirks: PcmRecorder hardcoded sample rate of 16000 Hz.\n        //                    We cannot obtain this number other than looking at their source code.\n        //                    I.e. no getter property.\n        // PcmRecorder always downscale to 16000 Hz. We cannot use the dynamic value from MediaConstraints or MediaTrackSettings.\n        format: PCM_RECORDER_HARDCODED_FORMAT\n      };\n    },\n    debug\n  });\n}\n\nexport default function createMicrophoneAudioConfigAndAudioContext({\n  audioContext,\n  audioInputDeviceId,\n  enableTelemetry\n}: {\n  audioContext?: AudioContext;\n  audioInputDeviceId?: string;\n  enableTelemetry?: true;\n}) {\n  // Web Chat has an implementation of AudioConfig for microphone that would enable better support on Safari:\n  // - Maintain same instance of `AudioContext` across recognitions;\n  // - Resume suspended `AudioContext` on user gestures.\n  //\n  // This is filed as https://github.com/microsoft/cognitive-services-speech-sdk-js/issues/571.\n  // Before Speech SDK team take our suggestion, we need to continue using a custom AudioConfig object to persist the blessing.\n  audioContext || (audioContext = createAudioContext());\n\n  return {\n    audioConfig: createMicrophoneAudioConfig({\n      audioConstraints: audioInputDeviceId ? { deviceId: audioInputDeviceId } : true,\n      audioContext,\n      enableTelemetry: enableTelemetry ? true : undefined\n    }),\n    audioContext\n  };\n}\n","export default function bytesPerSample(settings: MediaTrackSettings) {\n  // `channelCount` is not on @types/web@0.0.54 yet, related to https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1290.\n  // @ts-ignore\n  // eslint-disable-next-line no-magic-numbers\n  return ((settings.sampleSize as number) >> 3) * (settings.channelCount as number) * (settings.sampleRate as number);\n}\n","// TODO: [P2] #3976 We should export this to allow web developers to bring in their own microphone.\n//       For example, it should enable React Native devs to bring in their microphone implementation and use Cognitive Services Speech Services.\n\nimport { AudioConfig } from 'microsoft-cognitiveservices-speech-sdk';\n\nimport CustomAudioInputStream, { AudioStreamNode, DeviceInfo, Format } from './CustomAudioInputStream';\n\ntype AttachFunction = (audioNodeId: string) => Promise<{\n  audioStreamNode: AudioStreamNode;\n  deviceInfo: DeviceInfo;\n  format: Format;\n}>;\n\ntype TurnOffFunction = () => Promise<void>;\n\nconst SYMBOL_ATTACH = Symbol('attach');\nconst SYMBOL_TURN_OFF = Symbol('turnOff');\n\ntype CreateAudioConfigOptions = {\n  /** Callback function for attaching the device by returning an audio node. */\n  attach: AttachFunction;\n\n  /** `true` to enable diagnostic information, otherwise, `false`. */\n  debug?: true;\n\n  /**\n   * Callback function for turning off the device before detaching its node from an audio graph.\n   *\n   * Note: this is not called for Direct Line Speech.\n   */\n  turnOff?: TurnOffFunction;\n};\n\nclass CreateAudioConfigAudioInputStream extends CustomAudioInputStream {\n  constructor({ attach, debug, turnOff }: CreateAudioConfigOptions) {\n    if (!attach || typeof attach !== 'function') {\n      throw new Error('\"attach\" must be a function.');\n    }\n\n    if (turnOff && typeof turnOff !== 'function') {\n      throw new Error('\"turnOff\", if defined, must be a function.');\n    }\n\n    super({ debug });\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_ATTACH] = attach;\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_TURN_OFF] = turnOff;\n  }\n\n  [SYMBOL_ATTACH]: AttachFunction;\n  [SYMBOL_TURN_OFF]: TurnOffFunction;\n\n  protected performAttach(audioNodeId: string): Promise<{\n    audioStreamNode: AudioStreamNode;\n    deviceInfo: DeviceInfo;\n    format: Format;\n  }> {\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    return this[SYMBOL_ATTACH](audioNodeId);\n  }\n\n  protected performTurnOff(): Promise<void> {\n    const { [SYMBOL_TURN_OFF]: turnOff } = this;\n\n    return turnOff && turnOff();\n  }\n}\n\nexport default function createAudioConfig(options: CreateAudioConfigOptions) {\n  return AudioConfig.fromStreamInput(new CreateAudioConfigAudioInputStream(options));\n}\n","import { AudioInputStream } from 'microsoft-cognitiveservices-speech-sdk';\n\nimport {\n  AudioSourceErrorEvent,\n  AudioSourceEvent,\n  AudioSourceInitializingEvent,\n  AudioSourceOffEvent,\n  AudioSourceReadyEvent,\n  AudioStreamNodeAttachedEvent,\n  AudioStreamNodeAttachingEvent,\n  AudioStreamNodeDetachedEvent,\n  AudioStreamNodeErrorEvent,\n  Events,\n  EventSource\n} from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports';\n\nimport { AudioStreamFormatImpl } from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioStreamFormat';\n\nimport {\n  connectivity as Connectivity,\n  ISpeechConfigAudioDevice,\n  type as Type\n} from 'microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/Exports';\n\nimport { isForbiddenPropertyName } from 'botframework-webchat-core';\nimport { v4 } from 'uuid';\nimport createDeferred, { DeferredPromise } from 'p-defer-es5';\n\ntype AudioStreamNode = {\n  detach: () => Promise<void>;\n  id: () => string;\n  read: () => Promise<StreamChunk<ArrayBuffer>>;\n};\n\ntype DeviceInfo = {\n  connectivity?: Connectivity | 'Bluetooth' | 'Wired' | 'WiFi' | 'Cellular' | 'InBuilt' | 'Unknown';\n  manufacturer?: string;\n  model?: string;\n  type?:\n    | Type\n    | 'Phone'\n    | 'Speaker'\n    | 'Car'\n    | 'Headset'\n    | 'Thermostat'\n    | 'Microphones'\n    | 'Deskphone'\n    | 'RemoteControl'\n    | 'Unknown'\n    | 'File'\n    | 'Stream';\n};\n\ntype Format = {\n  bitsPerSample: number;\n  channels: number;\n  samplesPerSec: number;\n};\n\ntype NormalizedOptions = Required<Omit<Options, 'debug'>> & {\n  debug: boolean;\n};\n\ntype Options = {\n  debug?: true;\n  id?: string;\n};\n\ntype StreamChunk<T> = {\n  isEnd: boolean;\n  buffer: T;\n  timeReceived: number;\n};\n\nconst SYMBOL_DEVICE_INFO_DEFERRED = Symbol('deviceInfoDeferred');\nconst SYMBOL_EVENTS = Symbol('events');\nconst SYMBOL_FORMAT_DEFERRED = Symbol('formatDeferred');\nconst SYMBOL_OPTIONS = Symbol('options');\n\n// Speech SDK quirks: Only 2 lifecycle functions are actually used.\n//                    They are: attach() and turnOff().\n//                    Others are not used, including: blob(), close(), detach(), turnOn().\nabstract class CustomAudioInputStream extends AudioInputStream {\n  constructor(options: Options = {}) {\n    super();\n\n    const normalizedOptions: NormalizedOptions = {\n      debug: options.debug || false,\n      id: options.id || v4().replace(/-/gu, '')\n    };\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_DEVICE_INFO_DEFERRED] = createDeferred<DeviceInfo>();\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_EVENTS] = new EventSource<AudioSourceEvent>();\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_FORMAT_DEFERRED] = createDeferred<AudioStreamFormatImpl>();\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_OPTIONS] = normalizedOptions;\n  }\n\n  [SYMBOL_DEVICE_INFO_DEFERRED]: DeferredPromise<DeviceInfo>;\n  [SYMBOL_EVENTS]: EventSource<AudioSourceEvent>;\n  [SYMBOL_FORMAT_DEFERRED]: DeferredPromise<AudioStreamFormatImpl>;\n  [SYMBOL_OPTIONS]: NormalizedOptions;\n\n  /** Gets the event source for listening to events. */\n  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.\n  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)\n  get events(): EventSource<AudioSourceEvent> {\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    return this[SYMBOL_EVENTS];\n  }\n\n  /** Gets the format of the audio stream. */\n  // Speech SDK quirks: `AudioStreamFormatImpl` is internal implementation while `AudioStreamFormat` is public.\n  //                    It is weird to expose `AudioStreamFormatImpl` instead of `AudioStreamFormat`.\n  // Speech SDK quirks: It is weird to return a `Promise` in a property.\n  // Speech SDK quirks: In normal speech recognition, getter of \"format\" is called only after \"attach\".\n  //                    But in Direct Line Speech, it is called before \"attach\".\n  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.\n  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)\n  get format(): Promise<AudioStreamFormatImpl> {\n    this.debug('Getting \"format\".');\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    return this[SYMBOL_FORMAT_DEFERRED].promise;\n  }\n\n  /** Gets the ID of this audio stream. */\n  id(): string {\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    return this[SYMBOL_OPTIONS].id;\n  }\n\n  /** Emits an event. */\n  // Speech SDK quirks: In JavaScript, onXxx means \"listen to event XXX\".\n  //                    Instead, in Speech SDK, it means \"emit event XXX\".\n  protected onEvent(event: AudioSourceEvent): void {\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    this[SYMBOL_EVENTS].onEvent(event);\n    Events.instance.onEvent(event);\n  }\n\n  /** Emits an `AudioSourceInitializingEvent`. */\n  protected emitInitializing(): void {\n    this.debug('Emitting \"AudioSourceInitializingEvent\".');\n    this.onEvent(new AudioSourceInitializingEvent(this.id()));\n  }\n\n  /** Emits an `AudioSourceReadyEvent`. */\n  protected emitReady(): void {\n    this.debug('Emitting \"AudioSourceReadyEvent\".');\n    this.onEvent(new AudioSourceReadyEvent(this.id()));\n  }\n\n  /** Emits an `AudioSourceErrorEvent`. */\n  // Speech SDK quirks: Since \"turnOn\" is never called and \"turnOff\" does not work in Direct Line Speech, the \"source error\" event is not emitted at all.\n  //                    Instead, we only emit \"node error\" event.\n  protected emitError(error: Error): void {\n    this.debug('Emitting \"AudioSourceErrorEvent\".', { error });\n\n    // Speech SDK quirks: \"error\" is a string, instead of object of type \"Error\".\n    this.onEvent(new AudioSourceErrorEvent(this.id(), error.message));\n  }\n\n  /** Emits an `AudioStreamNodeAttachingEvent`. */\n  protected emitNodeAttaching(audioNodeId: string): void {\n    this.debug(`Emitting \"AudioStreamNodeAttachingEvent\" for node \"${audioNodeId}\".`);\n    this.onEvent(new AudioStreamNodeAttachingEvent(this.id(), audioNodeId));\n  }\n\n  /** Emits an `AudioStreamNodeAttachedEvent`. */\n  protected emitNodeAttached(audioNodeId: string): void {\n    this.debug(`Emitting \"AudioStreamNodeAttachedEvent\" for node \"${audioNodeId}\".`);\n    this.onEvent(new AudioStreamNodeAttachedEvent(this.id(), audioNodeId));\n  }\n\n  /** Emits an `AudioStreamNodeErrorEvent`. */\n  protected emitNodeError(audioNodeId: string, error: Error): void {\n    this.debug(`Emitting \"AudioStreamNodeErrorEvent\" for node \"${audioNodeId}\".`, { error });\n\n    // Speech SDK quirks: \"error\" is a string, instead of object of type \"Error\".\n    this.onEvent(new AudioStreamNodeErrorEvent(this.id(), audioNodeId, error.message));\n  }\n\n  /** Emits an `AudioStreamNodeDetachedEvent`. */\n  protected emitNodeDetached(audioNodeId: string): void {\n    this.debug('Emitting \"AudioStreamNodeDetachedEvent\".');\n    this.onEvent(new AudioStreamNodeDetachedEvent(this.id(), audioNodeId));\n  }\n\n  /** Emits an `AudioSourceOffEvent`. */\n  protected emitOff(): void {\n    this.debug('Emitting \"AudioSourceOffEvent\".');\n    this.onEvent(new AudioSourceOffEvent(this.id()));\n  }\n\n  // Speech SDK quirks: Although \"close\" is marked as abstract, it is never called in our observations.\n  // ESLint: Speech SDK requires this function, but we are not implementing it.\n  close(): void {\n    this.debug('Callback for \"close\".');\n\n    throw new Error('Not implemented');\n  }\n\n  // Speech SDK quirks: Although \"turnOn\" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.\n  turnOn(): void {\n    this.debug('Callback for \"turnOn\".');\n\n    throw new Error('Not implemented');\n  }\n\n  // Speech SDK quirks: Although \"detach\" is implemented in Speech SDK Push/PullAudioInputStream, it is never called in our observations.\n  detach(): void {\n    this.debug('Callback for \"detach\".');\n\n    throw new Error('Not implemented');\n  }\n\n  /** Log the message to console if `debug` is set to `true`. */\n  private debug(message, ...args) {\n    // ESLint: For debugging, will only log when \"debug\" is set to \"true\".\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line no-console, security/detect-object-injection\n    this[SYMBOL_OPTIONS].debug && console.info(`CustomAudioInputStream: ${message}`, ...args);\n  }\n\n  /** Implements this function. When called, it should start recording and return an `IAudioStreamNode`. */\n  protected abstract performAttach(audioNodeId: string): Promise<{\n    audioStreamNode: AudioStreamNode;\n    deviceInfo: DeviceInfo;\n    format: Format;\n  }>;\n\n  /** Attaches the device by returning an audio node. */\n  attach(audioNodeId: string): Promise<AudioStreamNode> {\n    this.debug(`Callback for \"attach\" with \"${audioNodeId}\".`);\n\n    this.emitNodeAttaching(audioNodeId);\n\n    return Promise.resolve().then<AudioStreamNode>(async () => {\n      this.emitInitializing();\n\n      try {\n        const { audioStreamNode, deviceInfo, format } = await this.performAttach(audioNodeId);\n\n        // Although only getter of \"format\" is called before \"attach\" (in Direct Line Speech),\n        // we are handling both \"deviceInfo\" and \"format\" in similar way for uniformity.\n\n        // False alarm: indexer is a constant of type Symbol.\n        // eslint-disable-next-line security/detect-object-injection\n        this[SYMBOL_DEVICE_INFO_DEFERRED].resolve(deviceInfo);\n\n        // False alarm: indexer is a constant of type Symbol.\n        // eslint-disable-next-line security/detect-object-injection\n        this[SYMBOL_FORMAT_DEFERRED].resolve(\n          new AudioStreamFormatImpl(format.samplesPerSec, format.bitsPerSample, format.channels)\n        );\n\n        this.emitReady();\n        this.emitNodeAttached(audioNodeId);\n\n        return {\n          detach: async () => {\n            this.debug(`Detaching audio node \"${audioNodeId}\".`);\n\n            await audioStreamNode.detach();\n\n            // Speech SDK quirks: Since \"turnOff\" is not called in Direct Line Speech, we will emit event \"source off\" here instead.\n            this.emitOff();\n            this.emitNodeDetached(audioNodeId);\n          },\n          id: () => audioStreamNode.id(),\n          read: () => {\n            this.debug('Reading');\n\n            return audioStreamNode.read();\n          }\n        };\n      } catch (error) {\n        this.emitNodeError(audioNodeId, error);\n\n        throw error;\n      }\n    });\n  }\n\n  /**\n   * Implements this function. When called, it should stop recording. This is called before the `IAudioStreamNode.detach` function.\n   *\n   * Note: when using with Direct Line Speech, this function is never called.\n   */\n\n  // ESLint: We are not implementing this function because it is not called by Direct Line Speech.\n  // eslint-disable-next-line class-methods-use-this\n  protected performTurnOff(): Promise<void> {\n    // ESLint: \"return\" is required by TypeScript\n    // eslint-disable-next-line no-useless-return\n    return;\n  }\n\n  /** Turn off the audio device. This is called before detaching from the graph. */\n  // Speech SDK quirks: It is confused to have both \"turnOff\" and \"detach\". \"turnOff\" is called before \"detach\".\n  //                    Why don't we put all logics at \"detach\"?\n  // Speech SDK quirks: Direct Line Speech never call \"turnOff\". \"Source off\" event need to be emitted during \"detach\" instead.\n  //                    Also, custom implementation should be done at \"detach\" instead, such as ending and closing output streams.\n  async turnOff(): Promise<void> {\n    this.debug(`Callback for \"turnOff\".`);\n\n    await this.performTurnOff();\n  }\n\n  /** Gets the device information. */\n  // ESLint: This code will only works in browsers other than IE11. Only works in ES5 is okay.\n  // @ts-ignore Accessors are only available when targeting ECMAScript 5 and higher.ts(1056)\n  get deviceInfo(): Promise<ISpeechConfigAudioDevice> {\n    this.debug(`Getting \"deviceInfo\".`);\n\n    // False alarm: indexer is a constant of type Symbol.\n    // eslint-disable-next-line security/detect-object-injection\n    return Promise.all([this[SYMBOL_DEVICE_INFO_DEFERRED].promise, this[SYMBOL_FORMAT_DEFERRED].promise]).then(\n      ([{ connectivity, manufacturer, model, type }, { bitsPerSample, channels, samplesPerSec }]) => ({\n        bitspersample: bitsPerSample,\n        channelcount: channels,\n        connectivity:\n          typeof connectivity === 'string' && !isForbiddenPropertyName(connectivity)\n            ? // Mitigated through denylisting.\n              // eslint-disable-next-line security/detect-object-injection\n              Connectivity[connectivity]\n            : connectivity || Connectivity.Unknown,\n        manufacturer: manufacturer || '',\n        model: model || '',\n        samplerate: samplesPerSec,\n        // Mitigated through denylisting.\n        // eslint-disable-next-line security/detect-object-injection\n        type: typeof type === 'string' && !isForbiddenPropertyName(type) ? Type[type] : type || Type.Unknown\n      })\n    );\n  }\n}\n\nexport default CustomAudioInputStream;\n\nexport type { AudioStreamNode, DeviceInfo, Format, Options };\n","import _Promise from \"@babel/runtime-corejs3/core-js-stable/promise\";\n// ../p-defer/index.js\nfunction pDefer() {\n  var deferred = {};\n  deferred.promise = new _Promise(function (resolve, reject) {\n    deferred.resolve = resolve;\n    deferred.reject = reject;\n  });\n  return deferred;\n}\n\n// src/index.mjs\nvar src_default = pDefer;\nexport { src_default as default };\n","/** Creates an AudioContext object. */\nexport default function createAudioContext(): AudioContext {\n  if (typeof window.AudioContext !== 'undefined') {\n    return new window.AudioContext();\n\n    // Required by TypeScript.\n    // eslint-disable-next-line dot-notation\n  } else if (typeof window['webkitAudioContext'] !== 'undefined') {\n    // This is for Safari as Web Audio API is still under vendor-prefixed.\n    // eslint-disable-next-line dot-notation\n    return new window['webkitAudioContext']();\n  }\n\n  // TODO: Fix this.\n  throw new Error('This browser does not support Web Audio API.');\n}\n","export default function getUserMedia(constraints: MediaStreamConstraints): Promise<MediaStream> {\n  const { navigator } = window;\n\n  if (typeof navigator.mediaDevices !== 'undefined') {\n    return navigator.mediaDevices.getUserMedia(constraints);\n  }\n\n  // We are intentionally using the deprecated `navigator.getUserMedia` to make sure backward compatibility.\n  // @ts-ignore\n  if (typeof navigator.getUserMedia !== 'undefined') {\n    // We are intentionally using the deprecated `navigator.getUserMedia` to make sure backward compatibility.\n    // @ts-ignore\n    return new Promise((resolve, reject) => navigator.getUserMedia(constraints, resolve, reject));\n  }\n\n  throw new Error('This browser does not support Web Audio API.');\n}\n","import { createAdapters } from 'botframework-directlinespeech-sdk';\nimport { WebSpeechPonyfill } from 'botframework-webchat-api';\nimport type { DirectLineJSBotConnection } from 'botframework-webchat-core';\nimport { AudioConfig } from 'microsoft-cognitiveservices-speech-sdk';\n\nimport createMicrophoneAudioConfigAndAudioContext from './speech/createMicrophoneAudioConfigAndAudioContext';\nimport CognitiveServicesAudioOutputFormat from './types/CognitiveServicesAudioOutputFormat';\nimport CognitiveServicesCredentials from './types/CognitiveServicesCredentials';\nimport CognitiveServicesTextNormalization from './types/CognitiveServicesTextNormalization';\n\nconst DEFAULT_LANGUAGE = 'en-US';\n\n// TODO: When using DLSpeech via bundle, we will add our own MicrophoneAudioConfig.\nexport default function createDirectLineSpeechAdapters({\n  audioConfig,\n  audioContext,\n  audioInputDeviceId,\n  enableInternalHTTPSupport,\n  enableTelemetry,\n  fetchCredentials,\n  speechRecognitionEndpointId,\n  speechRecognitionLanguage = window?.navigator?.language || DEFAULT_LANGUAGE,\n  speechSynthesisDeploymentId,\n  speechSynthesisOutputFormat,\n  textNormalization,\n  userID,\n  username\n}: {\n  audioConfig?: AudioConfig;\n  audioContext?: AudioContext;\n  audioInputDeviceId?: string;\n  enableInternalHTTPSupport?: true;\n  enableTelemetry?: true;\n  fetchCredentials: CognitiveServicesCredentials;\n  speechRecognitionEndpointId?: string;\n  speechRecognitionLanguage?: string;\n  speechSynthesisDeploymentId?: string;\n  speechSynthesisOutputFormat?: CognitiveServicesAudioOutputFormat;\n  textNormalization?: CognitiveServicesTextNormalization;\n  userID?: string;\n  username?: string;\n}): Promise<{\n  directLine: DirectLineJSBotConnection;\n  webSpeechPonyfill: WebSpeechPonyfill;\n}> {\n  if (audioConfig) {\n    audioInputDeviceId &&\n      console.warn(\n        'botframework-webchat: \"audioConfig\" and \"audioInputDeviceId\" cannot be set at the same time; ignoring \"audioInputDeviceId\".'\n      );\n\n    audioContext &&\n      console.warn(\n        'botframework-webchat: \"audioConfig\" and \"audioContext\" cannot be set at the same time; ignoring \"audioContext\" for speech recognition.'\n      );\n  } else if (!window.navigator.mediaDevices) {\n    // If the browser does not support or allow microphone access, we will continue to create Direct Line Speech adapter without custom \"audioConfig\" and \"audioContext\".\n    // In Direct Line Speech SDK, it will disable speech functionality, only leaving text chat available via the protocol.\n    console.warn(\n      'botframework-webchat: Your browser does not support or allow microphone access or the page is not loaded via HTTPS or localhost. Speech is disabled for Direct Line Speech. However, you may pass a custom \"audioConfig\" to enable speech in this environment.'\n    );\n  } else {\n    ({ audioConfig, audioContext } = createMicrophoneAudioConfigAndAudioContext({\n      audioContext,\n      audioInputDeviceId,\n      enableTelemetry\n    }));\n  }\n\n  return createAdapters({\n    audioConfig,\n    audioContext,\n    audioInputDeviceId: undefined,\n    enableInternalHTTPSupport,\n    enableTelemetry,\n    fetchCredentials,\n    speechRecognitionEndpointId,\n    speechRecognitionLanguage,\n    speechSynthesisDeploymentId,\n    speechSynthesisOutputFormat,\n    textNormalization,\n    userID,\n    username\n    // TODO: [P1] Need to port Direct Line Speech SDK to TypeScript to remove this any.\n  }) as any;\n}\n","import { createStyleSet } from 'botframework-webchat-component';\n\nimport createAdaptiveCardsStyleSet from './adaptiveCards/Styles/createAdaptiveCardsStyleSet';\nimport FullBundleStyleOptions from './types/FullBundleStyleOptions';\n\n// TODO: [P4] We should add a notice for people who want to use \"styleSet\" instead of \"styleOptions\".\n//       \"styleSet\" is actually CSS stylesheet and it is based on the DOM tree.\n//       DOM tree may change from time to time, thus, maintaining \"styleSet\" becomes a constant effort.\n\nexport default function createFullStyleSet(options: FullBundleStyleOptions) {\n  return {\n    ...createStyleSet(options),\n    ...createAdaptiveCardsStyleSet(options)\n  };\n}\n","/* eslint dot-notation: [\"error\", { \"allowPattern\": \"^WebChat$\" }] */\n// window['WebChat'] is required for TypeScript\n\nexport * from './index-minimal';\n\nimport FullComposer from './FullComposer';\nimport ReactWebChat from './FullReactWebChat';\nimport AdaptiveCardContent from './adaptiveCards/Attachment/AdaptiveCardContent';\nimport AnimationCardContent from './adaptiveCards/Attachment/AnimationCardContent';\nimport AudioCardContent from './adaptiveCards/Attachment/AudioCardContent';\nimport HeroCardContent from './adaptiveCards/Attachment/HeroCardContent';\nimport OAuthCardContent from './adaptiveCards/Attachment/OAuthCardContent';\nimport ReceiptCardContent from './adaptiveCards/Attachment/ReceiptCardContent';\nimport SignInCardContent from './adaptiveCards/Attachment/SignInCardContent';\nimport ThumbnailCardContent from './adaptiveCards/Attachment/ThumbnailCardContent';\nimport VideoCardContent from './adaptiveCards/Attachment/VideoCardContent';\nimport createAdaptiveCardsAttachmentForScreenReaderMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware';\nimport createAdaptiveCardsAttachmentMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentMiddleware';\nimport useAdaptiveCardsHostConfig from './adaptiveCards/hooks/useAdaptiveCardsHostConfig';\nimport useAdaptiveCardsPackage from './adaptiveCards/hooks/useAdaptiveCardsPackage';\nimport addVersion from './addVersion';\nimport createCognitiveServicesSpeechServicesPonyfillFactory from './createCognitiveServicesSpeechServicesPonyfillFactory';\nimport defaultCreateDirectLine from './createDirectLine';\nimport defaultCreateDirectLineAppServiceExtension from './createDirectLineAppServiceExtension';\nimport createDirectLineSpeechAdapters from './createDirectLineSpeechAdapters';\nimport createStyleSet from './createFullStyleSet';\nimport useStyleOptions from './hooks/useStyleOptions';\nimport useStyleSet from './hooks/useStyleSet';\nimport {\n  Components as MinimalComponents,\n  hooks,\n  buildInfo as minimalBuildInfo,\n  version,\n  withEmoji\n} from './index-minimal';\nimport renderMarkdown from './markdown/renderMarkdown';\nimport coreRenderWebChat from './renderWebChat';\nimport { type AdaptiveCardsPackage } from './types/AdaptiveCardsPackage';\nimport FullBundleStyleOptions, { StrictFullBundleStyleOptions } from './types/FullBundleStyleOptions';\n\nconst renderWebChat = coreRenderWebChat.bind(null, ReactWebChat);\nconst buildInfo = { ...minimalBuildInfo, variant: 'full' };\n\nexport const createDirectLine = (options: Omit<Parameters<typeof defaultCreateDirectLine>[0], 'botAgent'>) => {\n  (options as any).botAgent &&\n    console.warn(\n      'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'\n    );\n\n  return defaultCreateDirectLine({ ...options, botAgent: `WebChat/${version} (Full)` });\n};\n\nexport const createDirectLineAppServiceExtension = (\n  options: Omit<Parameters<typeof defaultCreateDirectLineAppServiceExtension>[0], 'botAgent'>\n) => {\n  (options as any).botAgent &&\n    console.warn(\n      'Web Chat: Developers are not currently allowed to set botAgent. See https://github.com/microsoft/BotFramework-WebChat/issues/2119 for more details.'\n    );\n\n  return defaultCreateDirectLineAppServiceExtension({ ...options, botAgent: `WebChat/${version} (Full)` });\n};\n\nconst patchedHooks = {\n  ...hooks,\n  useAdaptiveCardsHostConfig,\n  useAdaptiveCardsPackage,\n  useStyleOptions,\n  useStyleSet\n};\n\nconst AdditionalComponents = {\n  AdaptiveCardContent,\n  AnimationCardContent,\n  AudioCardContent,\n  Composer: FullComposer,\n  HeroCardContent,\n  OAuthCardContent,\n  ReceiptCardContent,\n  SignInCardContent,\n  ThumbnailCardContent,\n  VideoCardContent\n};\n\nconst Components: typeof MinimalComponents & typeof AdditionalComponents = {\n  ...MinimalComponents,\n  ...AdditionalComponents\n};\n\ntype StyleOptions = FullBundleStyleOptions;\ntype StrictStyleOptions = StrictFullBundleStyleOptions;\n\nexport default ReactWebChat;\n\nexport {\n  Components,\n  buildInfo,\n  createAdaptiveCardsAttachmentForScreenReaderMiddleware,\n  createAdaptiveCardsAttachmentMiddleware,\n  createCognitiveServicesSpeechServicesPonyfillFactory,\n  createDirectLineSpeechAdapters,\n  createStyleSet,\n  patchedHooks as hooks,\n  renderMarkdown,\n  renderWebChat,\n  withEmoji\n};\n\nexport type { AdaptiveCardsPackage, StrictStyleOptions, StyleOptions };\n\nwindow['WebChat'] = {\n  ...window['WebChat'],\n  buildInfo,\n  Components,\n  createAdaptiveCardsAttachmentMiddleware,\n  createAdaptiveCardsAttachmentForScreenReaderMiddleware,\n  createCognitiveServicesSpeechServicesPonyfillFactory,\n  createDirectLine,\n  createDirectLineAppServiceExtension,\n  createDirectLineSpeechAdapters,\n  createStyleSet,\n  hooks: patchedHooks,\n  ReactWebChat,\n  renderMarkdown,\n  renderWebChat,\n  withEmoji\n};\n\naddVersion('full');\n"],"mappings":"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gCAAgCC,EAAyD,CACnG,OAAIA,IAAgC,OACzBX,EAAsB,uBAAsB,EAEhDA,EAAsB,sCACzBA,EAAsB,oCAAoCW,CAA2B,CAAC,CAC9F,CAEO,OAAO,sCAAsCC,EAAyC,CACzF,OAAQA,EAAmC,CACvC,IAAK,2BACD,OAAO,IAAIZ,EACPa,EAAe,MACf,EACA,IACA,IACA,EACA,EACAD,EACAA,EACA,EAAK,EACb,IAAK,+BACD,OAAO,IAAIZ,EACPa,EAAe,MACf,EACA,KACA,IACA,GACA,EACAD,EACA,gCACA,EAAI,EACZ,IAAK,gCACD,OAAO,IAAIZ,EACPa,EAAe,MACf,EACA,KACA,IACA,GACA,EACAD,EACAA,EACA,EAAK,EACb,IAAK,kCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,mCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,MACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,kCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,kCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,kCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,MACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,mCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,MACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,gCACD,OAAO,IAAIZ,EACPa,EAAe,UACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EAEb,IAAK,2BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,IACA,KACA,EACA,GACAD,EACA,0BACA,EAAI,EACZ,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACA,2BACA,EAAI,EACZ,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,MACf,EACA,IACA,IACA,EACA,EACAD,EACA,2BACA,EAAI,EACZ,IAAK,2BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACA,2BACA,EAAK,EACb,IAAK,2BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACA,2BACA,EAAK,EACb,IAAK,0BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,IACA,KACA,EACA,GACAD,EACA,0BACA,EAAK,EACb,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,SACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,SACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,2BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACA,2BACA,EAAK,EACb,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,KACA,EACA,GACAD,EACA,2BACA,EAAI,EACZ,IAAK,kCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,MACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,mCACD,OAAO,IAAIZ,EACPa,EAAe,IACf,EACA,KACA,MACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,4BACD,OAAO,IAAIZ,EACPa,EAAe,SACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,6BACD,OAAO,IAAIZ,EACPa,EAAe,UACf,EACA,KACA,IACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,6BACD,OAAO,IAAIZ,EACPa,EAAe,UACf,EACA,KACA,IACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,gCACD,OAAO,IAAIZ,EACPa,EAAe,UACf,EACA,KACA,KACA,EACA,GACAD,EACAA,EACA,EAAK,EACb,IAAK,0BACD,OAAO,IAAIZ,EACPa,EAAe,KACf,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","names":["require_interopRequireDefault","__commonJSMin","exports","module","_interopRequireDefault","obj","require_typeof","__commonJSMin","exports","module","_typeof","obj","require_defineProperty","__commonJSMin","exports","module","_defineProperty","obj","key","value","require_regeneratorRuntime","__commonJSMin","exports","module","_typeof","_regeneratorRuntime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","define","obj","key","value","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","context","Context","state","method","arg","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","record","tryCatch","fn","err","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","prototype","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","info","pushTryEntry","locs","entry","resetTryEntry","iterable","iteratorMethod","i","next","genFun","ctor","iter","object","keys","skipTempReset","name","rootRecord","exception","handle","loc","caught","hasCatch","hasFinally","type","finallyEntry","afterLoc","finallyLoc","tryLoc","thrown","resultName","nextLoc","require_regenerator","__commonJSMin","exports","module","runtime","require_arrayLikeToArray","__commonJSMin","exports","module","_arrayLikeToArray","arr","len","i","arr2","require_arrayWithoutHoles","__commonJSMin","exports","module","arrayLikeToArray","_arrayWithoutHoles","arr","require_iterableToArray","__commonJSMin","exports","module","_iterableToArray","iter","require_unsupportedIterableToArray","__commonJSMin","exports","module","arrayLikeToArray","_unsupportedIterableToArray","o","minLen","n","require_nonIterableSpread","__commonJSMin","exports","module","_nonIterableSpread","require_toConsumableArray","__commonJSMin","exports","module","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_toConsumableArray","arr","require_asyncToGenerator","__commonJSMin","exports","module","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_asyncToGenerator","fn","self","args","err","require_createClass","__commonJSMin","exports","module","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","require_classCallCheck","__commonJSMin","exports","module","_classCallCheck","instance","Constructor","require_setPrototypeOf","__commonJSMin","exports","module","_setPrototypeOf","o","p","require_inherits","__commonJSMin","exports","module","setPrototypeOf","_inherits","subClass","superClass","require_assertThisInitialized","__commonJSMin","exports","module","_assertThisInitialized","self","require_possibleConstructorReturn","__commonJSMin","exports","module","_typeof","assertThisInitialized","_possibleConstructorReturn","self","call","require_getPrototypeOf","__commonJSMin","exports","module","_getPrototypeOf","o","require_superPropBase","__commonJSMin","exports","module","getPrototypeOf","_superPropBase","object","property","require_set","__commonJSMin","exports","module","superPropBase","defineProperty","set","target","property","value","receiver","base","desc","_set","isStrict","s","require_get","__commonJSMin","exports","module","superPropBase","_get","target","property","receiver","base","desc","require_isNativeFunction","__commonJSMin","exports","module","_isNativeFunction","fn","require_isNativeReflectConstruct","__commonJSMin","exports","module","_isNativeReflectConstruct","require_construct","__commonJSMin","exports","module","setPrototypeOf","isNativeReflectConstruct","_construct","Parent","args","Class","Constructor","instance","require_wrapNativeSuper","__commonJSMin","exports","module","getPrototypeOf","setPrototypeOf","isNativeFunction","construct","_wrapNativeSuper","Class","_cache","Wrapper","require_es5","__commonJSMin","exports","_toConsumableArray","_set","_get","_assertThisInitialized","_inherits","_possibleConstructorReturn","_getPrototypeOf","_wrapNativeSuper","_defineProperty","_classCallCheck","_createClass","_typeof","_interopDefaultLegacy","e","_toConsumableArray__default","_set__default","_get__default","_assertThisInitialized__default","_inherits__default","_possibleConstructorReturn__default","_getPrototypeOf__default","_wrapNativeSuper__default","_defineProperty__default","_classCallCheck__default","_createClass__default","_typeof__default","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","result","NewTarget","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","key","assertType","condition","message","_len","args","_key","format","anyToString","x","currentErrorHandler","setErrorHandler","value","reportError","maybeError","error","Global","currentWarnHandler","setWarningHandler","Warning","code","_a","_console","_len2","_key2","stack","InitEventWasCalledWhileDispatching","FalsyWasAssignedToCancelBubble","TruthyWasAssignedToReturnValue","NonCancelableEventWasCanceled","CanceledInPassiveListener","EventListenerWasDuplicated","OptionWasIgnored","InvalidEventListener","InvalidAttributeHandler","Event","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","type","eventInitDict","opts","internalDataMap","currentTarget","$","data","setCancelFlag","bubbles","cancelable","event","name","retv","createInvalidStateError","DOMException","_Error","_super","msg","_this","defineErrorCodeProperties","ErrorCodeMap","obj","_loop","_i","EventWrapper","_Event","_super2","getWrapperClassOf","_thisSuper","_thisSuper2","_this2","internalDataMap$1","_i2","defineRedirectDescriptor","_$$","$$1","original","_$$2","_$$3","_$$4","_$$5","_$$6","wrapperClassCache","originalEvent","prototype","wrapper","defineWrapper","BaseEventWrapper","originalPrototype","CustomEventWrapper","_BaseEventWrapper","_super3","_i3","d","createListener","callback","capture","passive","once","signal","signalListener","setRemoved","listener","isCapture","isPassive","isOnce","isRemoved","invokeCallback","_ref","thrownError","findIndexOfListener","_ref2","listeners","_i4","addListener","list","removeListener","index","removeListenerAt","disableCow","_","createListenerListMap","ensureListenerList","listenerMap","EventTarget","internalDataMap$2","type0","callback0","options0","$$2","_normalizeAddOptions","normalizeAddOptions","warnDuplicate","_normalizeOptions","normalizeOptions","eventData","cow","_i5","options","assertCallback","keys$1","_i6","getEventAttributeValue","_b","listMap","setEventAttributeValue","upsertEventAttributeListener","removeEventAttributeListener","defineEventAttributeCallback","defineCustomEventTarget","CustomEventTarget","_EventTarget","_super4","_i7","defineEventAttribute","_eventClass","_default","array","extras","map","_objectSpread","reduce","call","value","index","_defineProperty2","length","Symbol","iterator","slice","uuid","createGuid","createNoDashGuid","init_Guid","__esmMin","EventType","PlatformEvent","init_PlatformEvent","__esmMin","init_Guid","eventName","eventType","createNoDashGuid","AudioSourceEvent","AudioSourceInitializingEvent","AudioSourceReadyEvent","AudioSourceOffEvent","AudioSourceErrorEvent","AudioStreamNodeEvent","AudioStreamNodeAttachingEvent","AudioStreamNodeAttachedEvent","AudioStreamNodeDetachedEvent","AudioStreamNodeErrorEvent","init_AudioSourceEvents","__esmMin","init_PlatformEvent","PlatformEvent","eventName","audioSourceId","eventType","EventType","error","audioNodeId","ServiceEvent","ConnectionEvent","ConnectionStartEvent","ConnectionEstablishedEvent","ConnectionClosedEvent","ConnectionErrorEvent","ConnectionEstablishErrorEvent","ConnectionMessageReceivedEvent","ConnectionMessageSentEvent","init_ConnectionEvents","__esmMin","init_PlatformEvent","PlatformEvent","eventName","jsonstring","eventType","EventType","connectionId","uri","headers","metadata","statusCode","reason","message","type","statuscode","networkReceivedTimeISO","networkSentTimeISO","ArgumentNullError","InvalidOperationError","ObjectDisposedError","init_Error","__esmMin","argumentName","error","objectName","MessageType","ConnectionMessage","init_ConnectionMessage","__esmMin","init_Error","init_Guid","messageType","body","headers","id","InvalidOperationError","createNoDashGuid","ConnectionOpenResponse","init_ConnectionOpenResponse","__esmMin","statusCode","reason","DialogEvent","SendingAgentContextMessageEvent","init_DialogEvents","__esmMin","init_PlatformEvent","PlatformEvent","eventName","eventType","EventType","agentConfig","EventSource","init_EventSource","__esmMin","init_Error","init_Guid","metadata","event","ObjectDisposedError","paramName","eventId","onEventCallback","id","createNoDashGuid","listener","Events","init_Events","__esmMin","init_Error","init_EventSource","_Events","EventSource","eventSource","ArgumentNullError","init_IAudioSource","__esmMin","ConnectionState","init_IConnection","__esmMin","init_IDetachable","__esmMin","init_IDictionary","__esmMin","init_IDisposable","__esmMin","init_IEventSource","__esmMin","init_IErrorMessages","__esmMin","init_ITimer","__esmMin","init_IWebsocketMessageFormatter","__esmMin","List","init_List","__esmMin","init_Error","_List","list","itemIndex","item","index","count","removedElements","addedCallback","subscriptionId","removedCallback","disposedCallback","seperator","cloneCopy","val","callback","selectList","i","filteredList","compareFn","orderedArray","a","b","array","reason","ObjectDisposedError","subscriptions","marshalPromiseToCallbacks","promise","cb","err","val","error","typedError","PromiseState","Deferred","init_Promise","__esmMin","result","resolve","reject","SubscriberType","Queue","init_Queue","__esmMin","init_Error","init_List","init_Promise","list","List","item","resolve","reject","promise","val","error","deferredSubscriber","Deferred","subs","lists","subscriber","dequeuedItem","InvalidOperationError","ObjectDisposedError","pendingItemProcessor","reason","detachable","promiseArray","wrapper","index","RawWebsocketMessage","init_RawWebsocketMessage","__esmMin","init_ConnectionMessage","init_Error","init_Guid","messageType","payload","id","ArgumentNullError","MessageType","InvalidOperationError","createNoDashGuid","RiffPcmEncoder","init_RiffPcmEncoder","__esmMin","actualSampleRate","desiredSampleRate","actualAudioFrame","audioFrame","audioLength","buffer","view","offset","str","i","input","s","srcFrame","srcRate","dstRate","ratio","dstLength","dstFrame","srcOffset","dstOffset","nextSrcOffset","accum","count","Stream","init_Stream","__esmMin","init_Error","init_Guid","init_Queue","streamId","InvalidOperationError","streamChunk","__awaiter","Queue","createNoDashGuid","TranslationStatus","init_TranslationStatus","__esmMin","ChunkedArrayBufferStream","init_ChunkedArrayBufferStream","__esmMin","init_Exports","Stream","targetChunkSize","streamId","chunk","bytesCopiedFromBuffer","bytesToCopy","targetView","sourceView","init_IAudioDestination","__esmMin","Timeout","init_Timeout","__esmMin","timerId","func","delay","url","scheduledTimeoutFunctions","unhandledRequests","worker","data","idOrFunc","unhandledTimerId","id","message","blob","OCSPEvent","OCSPMemoryCacheHitEvent","OCSPCacheMissEvent","OCSPDiskCacheHitEvent","OCSPCacheUpdateNeededEvent","OCSPMemoryCacheStoreEvent","OCSPDiskCacheStoreEvent","OCSPCacheUpdatehCompleteEvent","OCSPStapleReceivedEvent","OCSPCacheEntryExpiredEvent","OCSPCacheEntryNeedsRefreshEvent","OCSPCacheHitEvent","OCSPVerificationFailedEvent","OCSPCacheFetchErrorEvent","OCSPResponseRetrievedEvent","OCSPCacheUpdateErrorEvent","init_OCSPEvents","__esmMin","init_PlatformEvent","PlatformEvent","eventName","eventType","signature","EventType","serialNumber","expireTime","startTime","error","BackgroundEvent","init_BackgroundError","__esmMin","init_Exports","PlatformEvent","error","EventType","init_Exports","__esmMin","init_AudioSourceEvents","init_ConnectionEvents","init_ConnectionMessage","init_ConnectionOpenResponse","init_DialogEvents","init_Error","init_Events","init_EventSource","init_Guid","init_IAudioSource","init_IConnection","init_IDetachable","init_IDictionary","init_IDisposable","init_IEventSource","init_IErrorMessages","init_ITimer","init_IWebsocketMessageFormatter","init_List","init_PlatformEvent","init_Promise","init_Queue","init_RawWebsocketMessage","init_RiffPcmEncoder","init_Stream","init_TranslationStatus","init_ChunkedArrayBufferStream","init_IAudioDestination","init_Timeout","init_OCSPEvents","init_BackgroundError","ConsoleLoggingListener","init_ConsoleLoggingListener","__esmMin","init_Exports","logLevelFilter","EventType","event","log","logFragments","prop","value","valueToLog","init_IRecorder","__esmMin","HeaderNames","init_HeaderNames","__esmMin","AuthInfo","init_IAuthentication","__esmMin","headerName","token","CognitiveSubscriptionKeyAuthentication","init_CognitiveSubscriptionKeyAuthentication","__esmMin","init_Exports","init_HeaderNames","init_IAuthentication","subscriptionKey","authFetchEventId","ArgumentNullError","AuthInfo","HeaderNames","AuthHeader","CognitiveTokenAuthentication","init_CognitiveTokenAuthentication","__esmMin","init_Exports","init_IAuthentication","fetchCallback","fetchOnExpiryCallback","authFetchEventId","token","AuthInfo","ArgumentNullError","init_IConnectionFactory","__esmMin","init_ISynthesisConnectionFactory","__esmMin","Contracts","init_Contracts","__esmMin","_Contracts","param","name","isDisposed","array","item","fs","AudioFileWriter","init_AudioFileWriter","__esmMin","init_Contracts","filename","Contracts","format","headerOffset","buffer","AudioFormatTag","AudioStreamFormat","AudioStreamFormatImpl","init_AudioStreamFormat","__esmMin","samplesPerSecond","bitsPerSample","channels","_AudioStreamFormatImpl","samplesPerSec","format","view","offset","str","i","sampleRate","AudioContext","AudioInputStream","PushAudioInputStream","PushAudioInputStreamImpl","PullAudioInputStream","PullAudioInputStreamImpl","init_AudioInputStream","__esmMin","init_Exports","init_Guid","init_AudioStreamFormat","format","callback","event","Events","AudioStreamFormatImpl","EventSource","createNoDashGuid","ChunkedArrayBufferStream","dataBuffer","audioNode","data","bufferData","readCycle","audioStreamChunk","AudioSourceInitializingEvent","AudioSourceReadyEvent","audioNodeId","AudioStreamNodeAttachingEvent","stream","AudioStreamNodeAttachedEvent","__awaiter","AudioStreamNodeDetachedEvent","connectivity","type","arrayBuffer","buf","view","i","AudioStreamFormat","totalBytes","transmitBuff","readBuff","pulledBytes","SpeechSynthesisOutputFormat","init_SpeechSynthesisOutputFormat","__esmMin","AudioOutputFormatImpl","init_AudioOutputFormat","__esmMin","init_SpeechSynthesisOutputFormat","init_AudioStreamFormat","_AudioOutputFormatImpl","AudioStreamFormatImpl","formatTag","channels","samplesPerSec","avgBytesPerSec","blockAlign","bitsPerSample","audioFormatString","requestAudioFormatString","hasHeader","speechSynthesisOutputFormat","speechSynthesisOutputFormatString","AudioFormatTag","audioLength","SpeechSynthesisOutputFormat","AudioOutputStream","PullAudioOutputStream","PullAudioOutputStreamImpl","PushAudioOutputStream","PushAudioOutputStreamImpl","init_AudioOutputStream","__esmMin","init_Exports","init_Contracts","init_AudioOutputFormat","createNoDashGuid","Stream","format","AudioOutputFormatImpl","dataBuffer","intView","totalBytes","chunk","tmpBuffer","Contracts","callback","buffer","AudioConfig","AudioConfigImpl","AudioOutputConfigImpl","init_AudioConfig","__esmMin","init_Exports","init_Contracts","init_AudioFileWriter","init_AudioInputStream","init_AudioOutputStream","_AudioConfig","pcmRecorder","PcmRecorder","MicAudioSource","deviceId","file","name","FileAudioSource","audioStream","PullAudioInputStreamCallback","PullAudioInputStreamImpl","AudioInputStream","SpeakerAudioDestination","player","filename","AudioFileWriter","PushAudioOutputStreamCallback","PushAudioOutputStreamImpl","PushAudioOutputStream","PullAudioOutputStream","source","cb","err","error","audioNodeId","value","Contracts","def","destination","format","buffer","CancellationReason","init_CancellationReason","__esmMin","PullAudioInputStreamCallback","init_PullAudioInputStreamCallback","__esmMin","PushAudioOutputStreamCallback","init_PushAudioOutputStreamCallback","__esmMin","KeywordRecognitionModel","init_KeywordRecognitionModel","__esmMin","init_Contracts","fileName","Contracts","file","SessionEventArgs","init_SessionEventArgs","__esmMin","sessionId","RecognitionEventArgs","init_RecognitionEventArgs","__esmMin","init_Exports","SessionEventArgs","offset","sessionId","OutputFormat","init_OutputFormat","__esmMin","IntentRecognitionEventArgs","init_IntentRecognitionEventArgs","__esmMin","init_Exports","RecognitionEventArgs","result","offset","sessionId","RecognitionResult","init_RecognitionResult","__esmMin","resultId","reason","text","duration","offset","language","languageDetectionConfidence","errorDetails","json","properties","SpeechRecognitionResult","init_SpeechRecognitionResult","__esmMin","init_Exports","RecognitionResult","resultId","reason","text","duration","offset","language","languageDetectionConfidence","speakerId","errorDetails","json","properties","IntentRecognitionResult","init_IntentRecognitionResult","__esmMin","init_Exports","SpeechRecognitionResult","intentId","resultId","reason","text","duration","offset","language","languageDetectionConfidence","errorDetails","json","properties","LanguageUnderstandingModel","LanguageUnderstandingModelImpl","init_LanguageUnderstandingModel","__esmMin","init_Contracts","uri","Contracts","langModelImp","firstDot","lastSegment","appId","subscriptionKey","region","SpeechRecognitionEventArgs","ConversationTranscriptionEventArgs","init_SpeechRecognitionEventArgs","__esmMin","init_Exports","RecognitionEventArgs","result","offset","sessionId","CancellationEventArgsBase","init_CancellationEventArgsBase","__esmMin","init_Exports","RecognitionEventArgs","reason","errorDetails","errorCode","offset","sessionId","SpeechRecognitionCanceledEventArgs","init_SpeechRecognitionCanceledEventArgs","__esmMin","init_CancellationEventArgsBase","CancellationEventArgsBase","TranslationRecognitionEventArgs","init_TranslationRecognitionEventArgs","__esmMin","init_Exports","RecognitionEventArgs","result","offset","sessionId","TranslationSynthesisEventArgs","init_TranslationSynthesisEventArgs","__esmMin","init_Exports","SessionEventArgs","result","sessionId","TranslationRecognitionResult","init_TranslationRecognitionResult","__esmMin","init_Exports","SpeechRecognitionResult","translations","resultId","reason","text","duration","offset","errorDetails","json","properties","TranslationSynthesisResult","init_TranslationSynthesisResult","__esmMin","reason","audio","ResultReason","init_ResultReason","__esmMin","SpeechConfig","SpeechConfigImpl","init_SpeechConfig","__esmMin","init_Exports","init_Contracts","subscriptionKey","region","Contracts","speechImpl","PropertyId","endpoint","hostName","authorizationToken","_SpeechConfigImpl","PropertyCollection","OutputFormat","value","OutputFormatPropertyName","name","def","proxyHostName","proxyPort","proxyUserName","proxyPassword","channel","currentProperties","ServicePropertiesPropertyName","profanity","ProfanityOption","ForceDictationPropertyName","ret","language","voice","SpeechSynthesisOutputFormat","format","SpeechTranslationConfig","SpeechTranslationConfigImpl","init_SpeechTranslationConfig","__esmMin","init_Exports","init_Contracts","SpeechConfig","subscriptionKey","region","Contracts","ret","PropertyId","authorizationToken","hostName","speechImpl","endpoint","PropertyCollection","OutputFormat","value","OutputFormatPropertyName","languages","proxyHostName","proxyPort","proxyUserName","proxyPassword","name","def","channel","currentProperties","ServicePropertiesPropertyName","profanity","ProfanityOption","ForceDictationPropertyName","language","voice","SpeechSynthesisOutputFormat","format","PropertyCollection","init_PropertyCollection","__esmMin","init_Exports","_PropertyCollection","key","def","keyToUse","PropertyId","value","clonedMap","n","destinationCollection","PropertyId","init_PropertyId","__esmMin","Recognizer","init_Recognizer","__esmMin","init_Exports","init_Contracts","_Recognizer","audioConfig","properties","connectionFactory","AudioConfig","cb","errorCb","Contracts","marshalPromiseToCallbacks","disposing","ServiceRecognizerBase","enabled","osPlatform","osName","osVersion","recognizerConfig","SpeechServiceConfig","Context","OS","recognitionMode","ret","Deferred","result","subscriptionKey","PropertyId","CognitiveSubscriptionKeyAuthentication","CognitiveTokenAuthentication","authFetchEventId","authorizationToken","SpeechRecognizer","init_SpeechRecognizer","__esmMin","init_Exports","init_Contracts","_SpeechRecognizer","Recognizer","speechConfig","audioConfig","speechConfigImpl","Contracts","PropertyId","SpeechConnectionFactory","autoDetectSourceLanguageConfig","token","OutputFormatPropertyName","OutputFormat","cb","err","marshalPromiseToCallbacks","RecognitionMode","model","errorCb","disposing","_super","RecognizerConfig","authentication","connectionFactory","recognizerConfig","configImpl","SpeechServiceRecognizer","IntentRecognizer","init_IntentRecognizer","__esmMin","init_Exports","init_Contracts","Recognizer","speechConfig","audioConfig","Contracts","configImpl","IntentConnectionFactory","PropertyId","value","cb","err","context","marshalPromiseToCallbacks","RecognitionMode","model","simplePhrase","intentId","intentName","modelImpl","AddedLmIntent","errorCb","RecognizerConfig","authentication","connectionFactory","recognizerConfig","audioImpl","IntentServiceRecognizer","disposing","_super","appId","region","subscriptionKey","refGrammers","addedLmIntent","grammer","VoiceProfileType","init_VoiceProfileType","__esmMin","TranslationRecognizer","init_TranslationRecognizer","__esmMin","init_Exports","init_Contracts","Recognizer","speechConfig","audioConfig","configImpl","Contracts","TranslationConnectionFactory","PropertyId","value","cb","err","marshalPromiseToCallbacks","RecognitionMode","errorCb","disposing","_super","RecognizerConfig","authentication","connectionFactory","recognizerConfig","TranslationServiceRecognizer","Translations","init_Translations","__esmMin","init_Exports","PropertyCollection","key","def","value","NoMatchReason","init_NoMatchReason","__esmMin","NoMatchDetails","init_NoMatchDetails","__esmMin","init_Exports","_NoMatchDetails","reason","result","simpleSpeech","SimpleSpeechPhrase","NoMatchReason","RecognitionStatus","TranslationRecognitionCanceledEventArgs","init_TranslationRecognitionCanceledEventArgs","__esmMin","sessionid","cancellationReason","errorDetails","errorCode","result","IntentRecognitionCanceledEventArgs","init_IntentRecognitionCanceledEventArgs","__esmMin","init_Exports","IntentRecognitionEventArgs","reason","errorDetails","errorCode","result","offset","sessionId","CancellationDetailsBase","init_CancellationDetailsBase","__esmMin","reason","errorDetails","errorCode","CancellationDetails","init_CancellationDetails","__esmMin","init_Exports","init_CancellationDetailsBase","_CancellationDetails","CancellationDetailsBase","reason","errorDetails","errorCode","result","CancellationReason","CancellationErrorCode","RecognitionResult","simpleSpeech","SimpleSpeechPhrase","EnumTranslation","CancellationErrorCodePropertyName","CancellationErrorCode","init_CancellationErrorCodes","__esmMin","ConnectionEventArgs","init_ConnectionEventArgs","__esmMin","init_Exports","SessionEventArgs","ServiceEventArgs","init_ServiceEventArgs","__esmMin","init_Exports","SessionEventArgs","json","name","sessionId","ConnectionMessage","ConnectionMessageImpl","init_ConnectionMessage","__esmMin","init_HeaderNames","init_Exports","init_PropertyCollection","init_PropertyId","message","PropertyCollection","HeaderNames","PropertyId","header","index","array","key","MessageType","Connection","init_Connection","__esmMin","init_Exports","init_ConnectionMessage","init_Contracts","_Connection","recognizer","recoBase","ret","synthesizer","synthBase","cb","err","marshalPromiseToCallbacks","SynthesisAdapterBase","path","propertyName","propertyValue","Contracts","ServiceRecognizerBase","payload","success","error","connectionEvent","ConnectionEventArgs","ConnectionMessageEventArgs","ConnectionMessageImpl","ServiceEventArgs","PhraseListGrammar","init_PhraseListGrammar","__esmMin","_PhraseListGrammar","recogBase","recognizer","recoBase","phrase","phrases","DialogServiceConfig","DialogServiceConfigImpl","init_DialogServiceConfig","__esmMin","init_Contracts","init_Exports","value","_a","SpeechConfigImpl","Contracts","name","def","proxyHostName","proxyPort","proxyUserName","proxyPassword","PropertyId","channel","BotFrameworkConfig","init_BotFrameworkConfig","__esmMin","init_Contracts","init_DialogServiceConfig","init_Exports","DialogServiceConfigImpl","subscription","region","botId","Contracts","botFrameworkConfig","PropertyId","DialogServiceConfig","authorizationToken","host","subscriptionKey","resolvedHost","endpoint","CustomCommandsConfig","init_CustomCommandsConfig","__esmMin","init_Contracts","init_DialogServiceConfig","init_Exports","DialogServiceConfigImpl","applicationId","subscription","region","Contracts","customCommandsConfig","PropertyId","DialogServiceConfig","authorizationToken","value","QueryParameterNames","init_QueryParameterNames","__esmMin","ConnectionFactoryBase","init_ConnectionFactoryBase","__esmMin","init_Exports","init_QueryParameterNames","config","queryParams","endpoint","PropertyId","QueryParameterNames","serviceProperties","ServicePropertiesPropertyName","value","num","array","propId","parameterName","DialogConnectionFactory","init_DialogConnectorFactory","__esmMin","init_Exports","init_ConnectionFactoryBase","init_HeaderNames","init_QueryParameterNames","_DialogConnectionFactory","ConnectionFactoryBase","config","authInfo","connectionId","applicationId","PropertyId","dialogType","region","language","requestTurnStatus","queryParams","HeaderNames","QueryParameterNames","OutputFormatPropertyName","OutputFormat","DialogServiceConfig","resourceInfix","version","headers","endpoint","hostSuffix","host","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","_a","DialogServiceConnector","init_DialogServiceConnector","__esmMin","init_DialogConnectorFactory","init_Exports","init_Contracts","init_PropertyId","Recognizer","dialogConfig","audioConfig","dialogServiceConfigImpl","Contracts","DialogConnectionFactory","agentConfig","cb","err","marshalPromiseToCallbacks","PropertyId","token","speechActivityTemplate","retPromise","__awaiter","ret","Deferred","RecognitionMode","e","activity","errCb","disposing","_super","speechConfig","RecognizerConfig","authentication","connectionFactory","recognizerConfig","audioSource","DialogServiceAdapter","ActivityReceivedEventArgs","init_ActivityReceivedEventArgs","__esmMin","activity","audioStream","TurnStatusResponsePayload","init_TurnStatusPayload","__esmMin","_TurnStatusResponsePayload","json","TurnStatusReceivedEventArgs","init_TurnStatusReceivedEventArgs","__esmMin","init_TurnStatusPayload","turnStatus","TurnStatusResponsePayload","ServicePropertyChannel","init_ServicePropertyChannel","__esmMin","ProfanityOption","init_ProfanityOption","__esmMin","BaseAudioPlayer","init_BaseAudioPlayer","__esmMin","init_Error","init_Promise","init_Exports","init_AudioStreamFormat","audioFormat","AudioStreamFormat","newAudioData","cb","err","marshalPromiseToCallbacks","__awaiter","audioData","newSamplesData","error","timerPeriod","AudioStreamFormatImpl","InvalidOperationError","maxValue","float32Data","i","channelCount","bufferSource","frameCount","audioBuffer","channel","channelOffset","source","destination","newBuffer","ConnectionMessageEventArgs","init_ConnectionMessageEventArgs","__esmMin","message","VoiceProfile","init_VoiceProfile","__esmMin","profileId","profileType","VoiceProfileEnrollmentResult","VoiceProfileEnrollmentCancellationDetails","init_VoiceProfileEnrollmentResult","__esmMin","init_Exports","_VoiceProfileEnrollmentResult","reason","json","statusText","PropertyCollection","ResultReason","CancellationErrorCodePropertyName","CancellationErrorCode","results","item","result","_VoiceProfileEnrollmentCancellationDetails","CancellationDetailsBase","errorDetails","errorCode","CancellationReason","VoiceProfileResult","VoiceProfileCancellationDetails","init_VoiceProfileResult","__esmMin","init_Exports","init_Contracts","reason","statusText","PropertyCollection","ResultReason","Contracts","CancellationErrorCodePropertyName","CancellationErrorCode","_VoiceProfileCancellationDetails","CancellationDetailsBase","errorDetails","errorCode","result","CancellationReason","VoiceProfileAuthorizationPhraseResult","init_VoiceProfileAuthorizationPhraseResult","__esmMin","init_Contracts","init_Exports","VoiceProfileResult","reason","statusText","json","Contracts","item","VoiceProfileClient","init_VoiceProfileClient","__esmMin","init_Exports","init_Contracts","speechConfig","speechConfigImpl","Contracts","PropertyId","token","profileType","lang","cb","err","marshalPromiseToCallbacks","__awaiter","response","VoiceProfile","profile","result","VoiceProfileEnrollmentResult","ResultReason","VoiceProfileType","VoiceProfileAuthorizationPhraseResult","audioConfig","configImpl","osPlatform","osName","osVersion","recognizerConfig","SpeakerRecognitionConfig","Context","OS","SpeakerIdMessageAdapter","successReason","VoiceProfileResult","SpeakerRecognizer","init_SpeakerRecognizer","__esmMin","init_Exports","init_Contracts","speechConfig","audioConfig","speechConfigImpl","Contracts","PropertyId","token","model","cb","err","SpeakerIdentificationModel","responsePromise","marshalPromiseToCallbacks","SpeakerRecognitionResultType","SpeakerVerificationModel","osPlatform","osName","osVersion","recognizerConfig","SpeakerRecognitionConfig","Context","OS","SpeakerIdMessageAdapter","resultType","profileId","response","SpeakerRecognitionResult","ResultReason","SpeakerIdentificationModel","init_SpeakerIdentificationModel","__esmMin","init_Contracts","init_Exports","_SpeakerIdentificationModel","profiles","Contracts","profile","VoiceProfileType","SpeakerVerificationModel","init_SpeakerVerificationModel","__esmMin","init_Contracts","init_Exports","_SpeakerVerificationModel","profile","Contracts","VoiceProfileType","AutoDetectSourceLanguageConfig","init_AutoDetectSourceLanguageConfig","__esmMin","init_Exports","init_Contracts","_AutoDetectSourceLanguageConfig","PropertyCollection","config","PropertyId","AutoDetectSourceLanguagesOpenRangeOptionName","languages","Contracts","configs","autoConfig","langs","customProperty","AutoDetectSourceLanguageResult","init_AutoDetectSourceLanguageResult","__esmMin","init_Contracts","_AutoDetectSourceLanguageResult","language","languageDetectionConfidence","Contracts","result","SourceLanguageConfig","init_SourceLanguageConfig","__esmMin","init_Contracts","_SourceLanguageConfig","language","endpointId","Contracts","SpeakerRecognitionResultType","SpeakerRecognitionResult","SpeakerRecognitionCancellationDetails","init_SpeakerRecognitionResult","__esmMin","init_Exports","init_Contracts","resultType","data","profileId","resultReason","ResultReason","PropertyCollection","json","Contracts","CancellationErrorCodePropertyName","CancellationErrorCode","PropertyId","_SpeakerRecognitionCancellationDetails","CancellationDetailsBase","reason","errorDetails","errorCode","result","CancellationReason","Conversation","ConversationImpl","init_Conversation","__esmMin","init_Exports","init_Contracts","speechConfig","arg2","arg3","arg4","Contracts","ConversationConnectionConfig","PropertyId","conversationImpl","marshalPromiseToCallbacks","__awaiter","cb","err","error","id","e","r","updatedParticipant","ConversationTranslatorCommandTypes","_a","_b","ConversationParticipantsChangedEventArgs","ParticipantChangedReason","newParticipant","ejectedParticipant","ConversationTranslatorMessageTypes","ConversationTranslationEventArgs","_c","_d","_e","_f","nickname","PropertyCollection","ConversationManager","ProfanityOption","hostNickname","configImpl","InternalParticipants","value","room","ConversationRecognizerFactory","participant","conversationId","lang","userId","participantId","p","message","reason","recognizer","convId","part","props","key","val","conversationInfo","dispose","typedError","includeHost","participants","Participant","isMuted","isLocked","ConversationCommon","init_ConversationCommon","__esmMin","audioConfig","cb","err","e","error","typedError","ConversationExpirationEventArgs","init_ConversationExpirationEventArgs","__esmMin","init_Exports","SessionEventArgs","expirationTime","sessionId","ConversationParticipantsChangedEventArgs","init_ConversationParticipantsChangedEventArgs","__esmMin","init_Exports","SessionEventArgs","reason","participants","sessionId","ConversationTranslationCanceledEventArgs","init_ConversationTranslationCanceledEventArgs","__esmMin","init_CancellationEventArgsBase","CancellationEventArgsBase","ConversationTranslationEventArgs","init_ConversationTranslationEventArgs","__esmMin","init_Exports","RecognitionEventArgs","result","offset","sessionId","ConversationTranslationResult","init_ConversationTranslationResult","__esmMin","init_TranslationRecognitionResult","TranslationRecognitionResult","participantId","translations","originalLanguage","resultId","reason","text","duration","offset","errorDetails","json","properties","SpeechState","ConversationTranslationRecognizer","ConversationTranslator","init_ConversationTranslator","__esmMin","init_Exports","init_Contracts","init_Conversation","TranslationRecognizer","speechConfig","audioConfig","translator","tr","e","__awaiter","_a","r","newState","error","cancelEvent","ConversationTranslationCanceledEventArgs","CancellationReason","_b","_c","CancellationErrorCode","ConversationCommon","ConversationConnectionConfig","PropertyCollection","conversation","nickname","param1","param2","param3","Contracts","lang","SpeechTranslationConfig","ProfanityOption","PropertyId","endpoint","speechEndpointHost","ConversationImpl","result","cb","err","marshalPromiseToCallbacks","message","resolve","reject","reason","success","AudioConfig","token","endpointHost","url","ConversationTranscriber","init_ConversationTranscriber","__esmMin","init_Exports","init_Contracts","audioConfig","PropertyCollection","conversation","cb","err","conversationImpl","Contracts","TranscriberRecognizer","marshalPromiseToCallbacks","PropertyId","token","__awaiter","errorCb","disposing","User","Participant","init_IParticipant","__esmMin","init_Exports","userId","_Participant","id","avatar","displayName","isHost","isMuted","isUsingTts","preferredLanguage","voice","PropertyCollection","language","ParticipantChangedReason","init_ParticipantChangedReason","__esmMin","init_Exports","__esmMin","init_Conversation","init_ConversationCommon","init_ConversationExpirationEventArgs","init_ConversationParticipantsChangedEventArgs","init_ConversationTranslationCanceledEventArgs","init_ConversationTranslationEventArgs","init_ConversationTranslationResult","init_ConversationTranslator","init_ConversationTranscriber","init_IParticipant","init_ParticipantChangedReason","SpeechSynthesizer","SynthesisRequest","init_SpeechSynthesizer","__esmMin","init_Exports","init_AudioFileWriter","init_AudioOutputFormat","init_AudioOutputStream","init_Contracts","_SpeechSynthesizer","speechConfig","audioConfig","speechConfigImpl","Contracts","AudioConfig","SpeechSynthesisConnectionFactory","Queue","PropertyId","token","AutoDetectSourceLanguagesOpenRangeOptionName","autoDetectSourceLanguageConfig","text","languageToDefaultVoice","language","voice","ssml","cb","err","stream","marshalPromiseToCallbacks","disposing","SynthesizerConfig","authentication","connectionFactory","synthesizerConfig","SynthesisAdapterBase","osPlatform","osName","osVersion","SpeechServiceConfig","Context","OS","subscriptionKey","CognitiveSubscriptionKeyAuthentication","CognitiveTokenAuthentication","authFetchEventId","authorizationToken","AudioOutputFormatImpl","SpeechSynthesisOutputFormat","IsSsml","dataStream","requestId","createNoDashGuid","audioDestination","PushAudioOutputStreamCallback","PushAudioOutputStreamImpl","PullAudioOutputStream","AudioFileWriter","e","error","typedError","request","isSSML","SpeechSynthesisResult","init_SpeechSynthesisResult","__esmMin","resultId","reason","audioData","errorDetails","properties","SpeechSynthesisEventArgs","init_SpeechSynthesisEventArgs","__esmMin","result","SpeechSynthesisWordBoundaryEventArgs","init_SpeechSynthesisWordBoundaryEventArgs","__esmMin","audioOffset","text","wordLength","textOffset","SpeechSynthesisBookmarkEventArgs","init_SpeechSynthesisBookmarkEventArgs","__esmMin","audioOffset","text","SpeechSynthesisVisemeEventArgs","init_SpeechSynthesisVisemeEventArgs","__esmMin","audioOffset","visemeId","animation","MediaDurationPlaceholderSeconds","AudioFormatToMimeType","SpeakerAudioDestination","init_SpeakerAudioDestination","__esmMin","init_Exports","init_AudioOutputStream","init_AudioStreamFormat","AudioFormatTag","audioDestinationId","createNoDashGuid","buffer","cb","err","error","receivedAudio","_","SynthesisAdapterBase","audioBlob","format","mimeType","event","reason","Events","BackgroundEvent","PullAudioOutputStreamImpl","binary","ConversationTranscriptionCanceledEventArgs","init_ConversationTranscriptionCanceledEventArgs","__esmMin","init_CancellationEventArgsBase","CancellationEventArgsBase","PronunciationAssessmentGradingSystem","init_PronunciationAssessmentGradingSystem","__esmMin","PronunciationAssessmentGranularity","init_PronunciationAssessmentGranularity","__esmMin","PronunciationAssessmentConfig","init_PronunciationAssessmentConfig","__esmMin","init_Contracts","init_Exports","_PronunciationAssessmentConfig","referenceText","gradingSystem","PronunciationAssessmentGradingSystem","granularity","PronunciationAssessmentGranularity","enableMiscue","Contracts","PropertyCollection","PropertyId","json","config","recognizer","jsonString","paramsJson","enableMiscueString","PronunciationAssessmentResult","init_PronunciationAssessmentResult","__esmMin","init_Contracts","init_Exports","_PronunciationAssessmentResult","jsonString","j","Contracts","result","json","PropertyId","init_Exports","__esmMin","init_AudioConfig","init_AudioStreamFormat","init_AudioInputStream","init_AudioOutputStream","init_CancellationReason","init_PullAudioInputStreamCallback","init_PushAudioOutputStreamCallback","init_KeywordRecognitionModel","init_SessionEventArgs","init_RecognitionEventArgs","init_OutputFormat","init_IntentRecognitionEventArgs","init_RecognitionResult","init_SpeechRecognitionResult","init_IntentRecognitionResult","init_LanguageUnderstandingModel","init_SpeechRecognitionEventArgs","init_SpeechRecognitionCanceledEventArgs","init_TranslationRecognitionEventArgs","init_TranslationSynthesisEventArgs","init_TranslationRecognitionResult","init_TranslationSynthesisResult","init_ResultReason","init_SpeechConfig","init_SpeechTranslationConfig","init_PropertyCollection","init_PropertyId","init_Recognizer","init_SpeechRecognizer","init_IntentRecognizer","init_VoiceProfileType","init_TranslationRecognizer","init_Translations","init_NoMatchReason","init_NoMatchDetails","init_TranslationRecognitionCanceledEventArgs","init_IntentRecognitionCanceledEventArgs","init_CancellationDetailsBase","init_CancellationDetails","init_CancellationErrorCodes","init_ConnectionEventArgs","init_ServiceEventArgs","init_Connection","init_PhraseListGrammar","init_DialogServiceConfig","init_BotFrameworkConfig","init_CustomCommandsConfig","init_DialogServiceConnector","init_ActivityReceivedEventArgs","init_TurnStatusReceivedEventArgs","init_ServicePropertyChannel","init_ProfanityOption","init_BaseAudioPlayer","init_ConnectionMessageEventArgs","init_ConnectionMessage","init_VoiceProfile","init_VoiceProfileEnrollmentResult","init_VoiceProfileResult","init_VoiceProfileAuthorizationPhraseResult","init_VoiceProfileClient","init_SpeakerRecognizer","init_SpeakerIdentificationModel","init_SpeakerVerificationModel","init_AutoDetectSourceLanguageConfig","init_AutoDetectSourceLanguageResult","init_SourceLanguageConfig","init_SpeakerRecognitionResult","init_SpeechSynthesisOutputFormat","init_SpeechSynthesizer","init_SpeechSynthesisResult","init_SpeechSynthesisEventArgs","init_SpeechSynthesisWordBoundaryEventArgs","init_SpeechSynthesisBookmarkEventArgs","init_SpeechSynthesisVisemeEventArgs","init_SpeakerAudioDestination","init_ConversationTranscriptionCanceledEventArgs","init_PronunciationAssessmentGradingSystem","init_PronunciationAssessmentGranularity","init_PronunciationAssessmentConfig","init_PronunciationAssessmentResult","IntentConnectionFactory","init_IntentConnectionFactory","__esmMin","init_Exports","init_ConnectionFactoryBase","init_HeaderNames","ConnectionFactoryBase","config","authInfo","connectionId","endpoint","PropertyId","region","hostSuffix","queryParams","headers","HeaderNames","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","intentRegion","SpeechRecognitionEvent","RecognitionTriggeredEvent","ListeningStartedEvent","ConnectingToServiceEvent","RecognitionStartedEvent","RecognitionCompletionStatus","init_RecognitionEvents","__esmMin","init_Exports","PlatformEvent","eventName","requestId","sessionId","eventType","EventType","audioSourceId","audioNodeId","authFetchEventid","authFetchEventId","SpeechConnectionMessage","init_SpeechConnectionMessage_Internal","__esmMin","init_Exports","init_HeaderNames","ConnectionMessage","messageType","path","requestId","contentType","body","streamId","additionalHeaders","id","ArgumentNullError","headers","HeaderNames","headerName","message","requestTimestamp","ServiceRecognizerBase","init_ServiceRecognizerBase","__esmMin","init_Exports","init_SpeechConnectionMessage_Internal","_ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","recognizer","connection","speechContextJson","SpeechConnectionMessage","MessageType","requestSession","SpeechServiceConfigJson","replacement","json","ArgumentNullError","RequestSession","EventSource","DynamicGrammarBuilder","SpeechContext","AgentConfig","Timeout","connectionEvent","__awaiter","connectionClosedEvent","CancellationReason","CancellationErrorCode","token","PropertyId","auth","reason","recoMode","successCallback","errorCallBack","conPromise","audioNode","audioStreamNode","format","deviceInfo","type","ReplayableAudioNode","error","sessionStartEventArgs","SessionEventArgs","messageRetrievalPromise","cb","err","e","message","path","payload","contentType","messagePayload","telemetryData","cancellationReason","errorCode","connectionMessage","speechStartDetected","SpeechDetected","speechStartEventArgs","RecognitionEventArgs","speechStopDetected","speechStopEventArgs","sessionStopEventArgs","ServiceEvent","ConnectionState","audioFormat","nextSendTime","fastLaneSizeMs","maxSendUnthrottledBytes","startRecogNumber","readAndUploadCycle","audioStreamChunk","sendDelay","isUnAuthorized","createNoDashGuid","sessionId","lastStatusCode","lastReason","event","response","delayMs","resolve","reject","buffer","out","readView","i","RecognitionMode","SpeechResultFormat","RecognizerConfig","SpeechServiceConfig","Context","System","OS","connectivity","type","init_RecognizerConfig","__esmMin","init_Exports","speechServiceConfig","parameters","value","PropertyId","context","key","replacement","k","os","SPEECHSDK_CLIENTSDK_VERSION","platform","name","version","init_SpeechServiceInterfaces","__esmMin","CRLF","WebsocketMessageFormatter","init_WebsocketMessageFormatter","__esmMin","init_Exports","message","deferral","Deferred","MessageType","textMessage","headers","body","headerBodySplit","ConnectionMessage","binaryMessage","dataView","headerLength","headersString","i","e","payload","RawWebsocketMessage","content","headerBuffer","headerInt8Array","payloadInt8Array","bodyInt8Array","header","headerMatches","separatorIndex","headerName","headerValue","str","buffer","view","SpeechConnectionFactory","init_SpeechConnectionFactory","__esmMin","init_Exports","init_ConnectionFactoryBase","init_HeaderNames","init_QueryParameterNames","ConnectionFactoryBase","config","authInfo","connectionId","endpoint","PropertyId","region","hostSuffix","host","queryParams","endpointId","language","QueryParameterNames","OutputFormatPropertyName","OutputFormat","RecognitionMode","ForceDictationPropertyName","headers","HeaderNames","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","TranscriberConnectionFactory","init_TranscriberConnectionFactory","__esmMin","init_Exports","init_ConnectionFactoryBase","init_HeaderNames","init_QueryParameterNames","ConnectionFactoryBase","config","authInfo","connectionId","endpoint","PropertyId","region","hostSuffix","hostDefault","host","queryParams","endpointId","language","QueryParameterNames","headers","HeaderNames","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","TranslationConnectionFactory","init_TranslationConnectionFactory","__esmMin","init_Exports","init_ConnectionFactoryBase","init_HeaderNames","init_QueryParameterNames","ConnectionFactoryBase","config","authInfo","connectionId","endpoint","PropertyId","region","hostSuffix","queryParams","QueryParameterNames","voiceName","featureName","headers","HeaderNames","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","SpeechSynthesisConnectionFactory","init_SpeechSynthesisConnectionFactory","__esmMin","init_Exports","init_HeaderNames","init_QueryParameterNames","config","authInfo","connectionId","endpoint","PropertyId","region","hostSuffix","endpointId","hostPrefix","host","queryParams","headers","HeaderNames","QueryParameterNames","enableCompression","WebsocketConnection","WebsocketMessageFormatter","ProxyInfo","EnumTranslation","init_EnumTranslation","__esmMin","init_Exports","recognitionStatus","reason","ResultReason","RecognitionStatus","CancellationReason","CancellationErrorCode","SynthesisStatus","RecognitionStatus","init_Enums","__esmMin","TranslationSynthesisEnd","init_TranslationSynthesisEnd","__esmMin","init_Exports","_TranslationSynthesisEnd","json","SynthesisStatus","TranslationHypothesis","init_TranslationHypothesis","__esmMin","init_TranslationStatus","_TranslationHypothesis","json","TranslationStatus","TranslationPhrase","init_TranslationPhrase","__esmMin","init_Exports","init_TranslationStatus","_TranslationPhrase","json","RecognitionStatus","TranslationStatus","TranslationServiceRecognizer","init_TranslationServiceRecognizer","__esmMin","init_Exports","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","translationRecognizer","connectionEvent","__awaiter","connectionMessage","resultProps","PropertyCollection","processed","MessageType","PropertyId","result","TranslationHypothesis","translatedPhrase","TranslationPhrase","RecognitionStatus","e","reason","EnumTranslation","TranslationRecognitionResult","ResultReason","cancelReason","ev","TranslationRecognitionEventArgs","synthEnd","TranslationSynthesisEnd","SynthesisStatus","TranslationSynthesisResult","retEvent","TranslationSynthesisEventArgs","canceledResult","TranslationRecognitionCanceledEventArgs","CancellationReason","CancellationErrorCode","sessionId","requestId","cancellationReason","errorCode","error","properties","CancellationErrorCodePropertyName","cancelEvent","serviceResult","translations","Translations","translation","resultReason","TranslationStatus","offset","audio","SpeechDetected","init_SpeechDetected","__esmMin","_SpeechDetected","json","SpeechHypothesis","init_SpeechHypothesis","__esmMin","_SpeechHypothesis","json","SpeechKeyword","init_SpeechKeyword","__esmMin","_SpeechKeyword","json","SpeechServiceRecognizer","init_SpeechServiceRecognizer","__esmMin","init_Exports","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","speechRecognizer","sourceLanguages","connectionMessage","result","resultProps","PropertyCollection","PropertyId","processed","hypothesis","SpeechHypothesis","offset","SpeechRecognitionResult","ResultReason","ev","SpeechRecognitionEventArgs","simple","SimpleSpeechPhrase","resultReason","EnumTranslation","cancelReason","RecognitionStatus","OutputFormatPropertyName","OutputFormat","detailed","DetailedSpeechPhrase","event","e","sessionId","requestId","cancellationReason","errorCode","error","properties","CancellationErrorCodePropertyName","CancellationErrorCode","cancelEvent","SpeechRecognitionCanceledEventArgs","TranscriptionServiceRecognizer","init_TranscriptionServiceRecognizer","__esmMin","init_Exports","init_SpeechConnectionMessage_Internal","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","transcriber","connection","payload","speechEventJson","SpeechConnectionMessage","MessageType","info","command","connectionMessage","result","resultProps","PropertyCollection","PropertyId","processed","hypothesis","SpeechHypothesis","offset","SpeechRecognitionResult","ResultReason","ev","SpeechRecognitionEventArgs","simple","SimpleSpeechPhrase","resultReason","EnumTranslation","cancelReason","RecognitionStatus","OutputFormatPropertyName","OutputFormat","detailed","DetailedSpeechPhrase","event","e","sessionId","requestId","cancellationReason","errorCode","error","properties","CancellationErrorCodePropertyName","CancellationErrorCode","cancelEvent","ConversationTranscriptionCanceledEventArgs","meeting","eventDict","idString","attendees","record","DetailedSpeechPhrase","init_DetailedSpeechPhrase","__esmMin","init_Exports","_DetailedSpeechPhrase","json","RecognitionStatus","SimpleSpeechPhrase","init_SimpleSpeechPhrase","__esmMin","init_Exports","_SimpleSpeechPhrase","json","RecognitionStatus","AddedLmIntent","init_AddedLmIntent","__esmMin","modelImpl","intentName","IntentServiceRecognizer","init_IntentServiceRecognizer","__esmMin","init_Exports","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","recognizer","addedIntents","umbrellaIntent","connectionMessage","result","ev","processed","resultProps","PropertyCollection","MessageType","PropertyId","speechHypothesis","SpeechHypothesis","IntentRecognitionResult","ResultReason","IntentRecognitionEventArgs","simple","SimpleSpeechPhrase","EnumTranslation","sendEvent","e","intentResponse","IntentResponse","addedIntent","intentId","reason","properties","sessionId","requestId","cancellationReason","errorCode","error","CancellationErrorCodePropertyName","CancellationErrorCode","cancelEvent","IntentRecognitionCanceledEventArgs","IntentResponse","init_IntentResponse","__esmMin","_IntentResponse","json","ServiceTelemetryListener","init_ServiceTelemetryListener_Internal","__esmMin","init_Exports","init_RecognitionEvents","requestId","audioSourceId","audioNodeId","e","RecognitionTriggeredEvent","AudioStreamNodeAttachingEvent","AudioStreamNodeAttachedEvent","AudioSourceErrorEvent","AudioStreamNodeErrorEvent","AudioStreamNodeDetachedEvent","ConnectingToServiceEvent","ConnectionStartEvent","ConnectionEstablishedEvent","ConnectionEstablishErrorEvent","ConnectionMessageReceivedEvent","metrics","telemetry","json","statusCode","audioReceivedTime","RequestSession","init_RequestSession","__esmMin","init_Exports","init_RecognitionEvents","init_ServiceTelemetryListener_Internal","audioSourceId","authFetchEventId","connectionId","ConnectingToServiceEvent","Deferred","event","Events","createNoDashGuid","eventSource","ServiceTelemetryListener","RecognitionTriggeredEvent","audioNode","isError","error","ListeningStartedEvent","statusCode","reason","RecognitionStartedEvent","continuousRecognition","offset","bytesSent","detachable","SpeechContext","init_SpeechContext","__esmMin","dynamicGrammar","sectionName","value","params","dgi","DynamicGrammarBuilder","init_DynamicGrammarBuilder","__esmMin","phrase","grammar","retObj","retPhrases","value","index","array","init_DynamicGrammarInterfaces","__esmMin","ActivityPayloadResponse","MessageDataStreamType","init_ActivityResponsePayload","__esmMin","_ActivityPayloadResponse","json","DialogServiceTurnState","init_DialogServiceTurnState","__esmMin","init_AudioOutputFormat","init_AudioOutputStream","init_ActivityResponsePayload","manager","requestId","payload","audioFormat","MessageDataStreamType","AudioOutputStream","AudioOutputFormatImpl","DialogServiceTurnStateManager","init_DialogServiceTurnStateManager","__esmMin","init_Error","init_DialogServiceTurnState","id","InvalidOperationError","turnState","DialogServiceTurnState","DialogServiceAdapter","init_DialogServiceAdapter","__esmMin","init_Exports","init_DialogEvents","init_AudioOutputFormat","init_DialogServiceTurnStateManager","init_ActivityResponsePayload","init_SpeechConnectionMessage_Internal","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","dialogServiceConnector","connection","PropertyId","DialogServiceConfig","config","SendingAgentContextMessageEvent","agentConfigJson","SpeechConnectionMessage","MessageType","guid","createGuid","speechActivityTemplate","agentContextJson","responseMessage","responsePayload","responseRequestId","activityPayload","ActivityPayloadResponse","turn","updateAgentConfig","pullAudioOutputStream","AudioOutputFormatImpl","activity","ActivityReceivedEventArgs","TurnStatusReceivedEventArgs","Events","BackgroundEvent","EventSource","DialogServiceTurnStateManager","connectionEvent","__awaiter","message","interactionGuid","requestId","createNoDashGuid","agentMessage","agentMessageJson","CancellationReason","CancellationErrorCode","connectionMessage","resultProps","PropertyCollection","result","processed","speechPhrase","SimpleSpeechPhrase","RecognitionStatus","args","hypothesis","SpeechHypothesis","offset","SpeechRecognitionResult","ResultReason","ev","SpeechRecognitionEventArgs","keyword","SpeechKeyword","event","audioRequestId","sessionId","cancellationReason","errorCode","error","properties","CancellationErrorCodePropertyName","cancelEvent","SpeechRecognitionCanceledEventArgs","recoMode","successCallback","errorCallback","conPromise","preAudioPromise","node","format","deviceInfo","audioNode","ReplayableAudioNode","sessionStartEventArgs","SessionEventArgs","communicationCustodian","Deferred","loop","isDisposed","terminateMessageLoop","turnRequestId","audioSessionReqId","speechStartDetected","SpeechDetected","speechStartEventArgs","RecognitionEventArgs","json","speechStopDetected","speechStopEventArgs","turnEndRequestId","sessionStopEventArgs","e","ServiceEvent","reason","serviceResult","resultReason","EnumTranslation","keywordPropertyValue","keywordOffsetPropertyValue","keywordDurationPropertyValue","keywords","keywordOffsets","keywordDurations","keywordDefinitionArray","i","definition","AgentConfig","init_AgentConfig","__esmMin","value","RestConfigBase","init_RestConfigBase","__esmMin","_RestConfigBase","ConversationConnectionConfig","init_ConversationConnectionConfig","__esmMin","init_RestConfigBase","_ConversationConnectionConfig","RestConfigBase","queryParams","params","k","withQuery","url","queryString","parseXHRResult","xhr","errorResponse","message","extractHeaderValue","headerKey","headers","headerValue","arr","headerMap","line","parts","header","value","request","method","body","options","callback","defaultRequestOptions","RestConfigBase","ignoreCache","timeout","key","evt","PromiseToEmptyCallback","promise","cb","err","result","e","reason","XHR","init_ConversationUtils","__esmMin","init_RestConfigBase","ConversationManager","init_ConversationManager","__esmMin","init_Contracts","init_Exports","init_ConversationConnectionConfig","init_ConversationUtils","ConversationConnectionConfig","args","conversationCode","cb","err","Contracts","languageCode","PropertyId","nickname","endpointHost","correlationId","subscriptionKey","subscriptionRegion","authToken","queryParams","headers","config","endpoint","request","response","requestId","extractHeaderValue","errorMessage","errMessageRaw","conversation","e","error","typedError","sessionToken","resolve","reject","ConversationConnectionMessage","init_ConversationConnectionMessage","__esmMin","init_Exports","ConnectionMessage","messageType","body","headers","id","json","ConversationWebsocketMessageFormatter","init_ConversationWebsocketMessageFormatter","__esmMin","init_Exports","init_ConversationConnectionMessage","message","deferral","Deferred","MessageType","incomingMessage","ConversationConnectionMessage","e","payload","RawWebsocketMessage","ConversationConnectionFactory","init_ConversationConnectionFactory","__esmMin","init_Exports","init_Contracts","init_ConnectionFactoryBase","init_ConversationConnectionConfig","init_ConversationWebsocketMessageFormatter","ConnectionFactoryBase","config","authInfo","connectionId","endpointHost","PropertyId","ConversationConnectionConfig","correlationId","createGuid","endpoint","token","Contracts","queryParams","enableCompression","WebsocketConnection","ConversationWebsocketMessageFormatter","ProxyInfo","ConversationRequestSession","init_ConversationRequestSession","__esmMin","init_Exports","sessionId","authFetchEventId","connectionId","isError","error","statusCode","reason","continuousRecognition","createNoDashGuid","Deferred","detachable","MuteAllEventArgs","LockRoomEventArgs","ParticipantEventArgs","ParticipantAttributeEventArgs","ParticipantsListEventArgs","ConversationReceivedTranslationEventArgs","init_ConversationTranslatorEventArgs","__esmMin","init_Exports","SessionEventArgs","isMuted","sessionId","isLocked","participant","participantId","key","value","conversationId","token","translateTo","profanityFilter","roomProfanityFilter","isRoomLocked","isMuteAll","participants","command","payload","InternalParticipants","ConversationTranslatorMessageTypes","ConversationTranslatorCommandTypes","init_ConversationTranslatorInterfaces","__esmMin","participants","meId","value","exists","id","p","CommandResponsePayload","init_CommandResponsePayload","__esmMin","_CommandResponsePayload","json","ParticipantsListPayloadResponse","ParticipantPayloadResponse","init_ParticipantResponsePayload","__esmMin","_ParticipantsListPayloadResponse","json","_ParticipantPayloadResponse","SpeechResponsePayload","TextResponsePayload","init_TranslationResponsePayload","__esmMin","_SpeechResponsePayload","json","_TextResponsePayload","init_Exports","__esmMin","init_CommandResponsePayload","init_ParticipantResponsePayload","init_TranslationResponsePayload","ConversationServiceAdapter","init_ConversationServiceAdapter","__esmMin","init_Exports","init_ConversationConnectionMessage","init_ConversationRequestSession","init_ConversationTranslatorEventArgs","init_ConversationTranslatorInterfaces","ServiceRecognizerBase","authentication","connectionFactory","audioSource","recognizerConfig","conversationServiceConnector","ConversationRequestSession","createNoDashGuid","reason","_super","message","ConversationConnectionMessage","MessageType","sink","Deferred","CancellationReason","CancellationErrorCode","connectionMessage","successCallback","errorCallBack","sessionId","requestId","cancellationReason","errorCode","error","cancelEvent","ConversationTranslationCanceledEventArgs","connection","communicationCustodian","sendFinal","commandPayload","CommandResponsePayload","participantsPayload","ParticipantsListPayloadResponse","participantsResult","p","ParticipantsListEventArgs","ParticipantAttributeEventArgs","ConversationTranslatorCommandTypes","MuteAllEventArgs","ConversationExpirationEventArgs","LockRoomEventArgs","joinParticipantPayload","ParticipantPayloadResponse","joiningParticipant","ParticipantEventArgs","leavingParticipant","disconnectParticipant","speechPayload","SpeechResponsePayload","speechResult","ConversationTranslationResult","ConversationReceivedTranslationEventArgs","ConversationTranslatorMessageTypes","textPayload","TextResponsePayload","textResult","messageRetrievalPromise","ConnectionState","serviceResultTranslations","translations","Translations","translation","ConversationRecognizerFactory","ConversationTranslatorRecognizer","init_ConversationTranslatorRecognizer","__esmMin","init_Exports","init_Contracts","init_ConversationConnectionFactory","init_ConversationServiceAdapter","init_ConversationUtils","speechConfig","audioConfig","Recognizer","serviceConfigImpl","Contracts","ConversationConnectionFactory","Connection","cb","token","err","error","typedError","reason","Events","BackgroundEvent","command","_a","_b","disposing","_super","RecognizerConfig","authentication","connectionFactory","recognizerConfig","audioSource","ConversationServiceAdapter","msg","withAsync","PromiseToEmptyCallback","TranscriberRecognizer","init_TranscriberRecognizer","__esmMin","init_Exports","init_Contracts","Recognizer","speechTranslationConfig","audioConfig","speechTranslationConfigImpl","Contracts","PropertyId","TranscriberConnectionFactory","token","c","cb","err","marshalPromiseToCallbacks","RecognitionMode","conversationInfo","command","reco","transcriber","s","e","disposing","_super","speechConfig","RecognizerConfig","authentication","connectionFactory","recognizerConfig","configImpl","TranscriptionServiceRecognizer","init_Exports","__esmMin","init_ConversationManager","init_ConversationConnectionConfig","init_ConversationTranslatorRecognizer","init_TranscriberRecognizer","init_ConversationTranslatorInterfaces","MetadataType","SynthesisAudioMetadata","init_SynthesisAudioMetadata","__esmMin","_SynthesisAudioMetadata","json","SynthesisAdapterBase","init_SynthesisAdapterBase","__esmMin","init_Exports","init_SpeechConnectionMessage_Internal","_SynthesisAdapterBase","authentication","connectionFactory","synthesizerConfig","speechSynthesizer","audioDestination","connection","synthesisContextJson","SpeechConnectionMessage","MessageType","SpeechServiceConfigJson","ssml","requestId","ArgumentNullError","SynthesisTurn","EventSource","SynthesisContext","AgentConfig","connectionEvent","connectionClosedEvent","CancellationReason","CancellationErrorCode","messagePayload","format","audio","tmp","reason","path","payload","type","contentType","text","isSSML","successCallback","errorCallBack","synthesisStartEventArgs","SpeechSynthesisEventArgs","SpeechSynthesisResult","ResultReason","messageRetrievalPromise","e","cancellationReason","errorCode","error","properties","PropertyCollection","CancellationErrorCodePropertyName","result","cancelEvent","connectionMessage","message","audioWithHeader","ev","metadataList","SynthesisAudioMetadata","metadata","MetadataType","wordBoundaryEventArgs","SpeechSynthesisWordBoundaryEventArgs","bookmarkEventArgs","SpeechSynthesisBookmarkEventArgs","visemeEventArgs","SpeechSynthesisVisemeEventArgs","audioBuffer","ServiceEvent","isUnAuthorized","ConnectionState","createNoDashGuid","authPromise","__awaiter","event","response","PropertyId","SpeechSynthesisEvent","SynthesisTriggeredEvent","ConnectingToSynthesisServiceEvent","SynthesisStartedEvent","init_SynthesisEvents","__esmMin","init_Exports","PlatformEvent","eventName","requestId","eventType","EventType","sessionAudioDestinationId","turnAudioDestinationId","authFetchEventId","SynthesisTurn","init_SynthesisTurn","__esmMin","init_Exports","init_AudioOutputStream","init_SynthesisAdapterBase","init_SynthesisEvents","authFetchEventId","connectionId","ConnectingToSynthesisServiceEvent","isError","error","statusCode","reason","SynthesisStartedEvent","responseJson","response","Deferred","event","Events","createNoDashGuid","value","format","audio","SynthesisAdapterBase","requestId","rawText","isSSML","audioDestination","PullAudioOutputStreamImpl","SynthesisTriggeredEvent","data","text","metadata","animation","SynthesisServiceType","SynthesizerConfig","init_SynthesizerConfig","__esmMin","init_Exports","speechServiceConfig","parameters","SpeechServiceConfig","Context","value","SynthesisContext","init_SynthesisContext","__esmMin","speechSynthesizer","sectionName","value","format","synthesisSection","SpeakerRecognitionConfig","init_SpeakerRecognitionConfig","__esmMin","init_Exports","context","parameters","Context","SpeakerIdMessageAdapter","init_Exports","config","endpoint","PropertyId","region","hostSuffix","options","RestConfigBase","RestMessageAdapter","profileType","lang","uri","RestRequestType","profile","audioSource","result","model","e","VoiceProfileType","mode","dependency","OutputFormatPropertyName","CancellationErrorCodePropertyName","ServicePropertiesPropertyName","ForceDictationPropertyName","AutoDetectSourceLanguagesOpenRangeOptionName","init_Exports","__esmMin","init_CognitiveSubscriptionKeyAuthentication","init_CognitiveTokenAuthentication","init_IAuthentication","init_IConnectionFactory","init_ISynthesisConnectionFactory","init_IntentConnectionFactory","init_RecognitionEvents","init_ServiceRecognizerBase","init_RecognizerConfig","init_SpeechServiceInterfaces","init_WebsocketMessageFormatter","init_SpeechConnectionFactory","init_TranscriberConnectionFactory","init_TranslationConnectionFactory","init_SpeechSynthesisConnectionFactory","init_EnumTranslation","init_Enums","init_TranslationSynthesisEnd","init_TranslationHypothesis","init_TranslationPhrase","init_TranslationServiceRecognizer","init_SpeechDetected","init_SpeechHypothesis","init_SpeechKeyword","init_SpeechServiceRecognizer","init_TranscriptionServiceRecognizer","init_DetailedSpeechPhrase","init_SimpleSpeechPhrase","init_AddedLmIntent","init_IntentServiceRecognizer","init_IntentResponse","init_RequestSession","init_SpeechContext","init_DynamicGrammarBuilder","init_DynamicGrammarInterfaces","init_DialogServiceAdapter","init_AgentConfig","init_SynthesisAudioMetadata","init_SynthesisTurn","init_SynthesisAdapterBase","init_SynthesizerConfig","init_SynthesisContext","init_SpeakerRecognitionConfig","init_SpeakerIdMessageAdapter","AudioWorkletSourceURLPropertyName","MicAudioSource","init_MicAudioSource","__esmMin","init_Exports","init_AudioStreamFormat","_MicAudioSource","privRecorder","deviceId","audioSourceId","mediaStream","Deferred","error","typedError","nav","getUserMedia","constraints","successCallback","errorCallback","next","AudioSourceInitializingEvent","AudioSourceReadyEvent","errorMsg","AudioSourceErrorEvent","reason","audioNodeId","AudioStreamNodeAttachingEvent","stream","AudioStreamNodeAttachedEvent","__awaiter","AudioStreamNodeDetachedEvent","ChunkedArrayBufferStream","AudioStreamNodeErrorEvent","event","Events","AudioStreamFormatImpl","createNoDashGuid","EventSource","streamId","AudioSourceOffEvent","label","connectivity","type","name","value","defaultMicrophoneName","microphoneDeviceId","deferred","devices","device","hasClose","AudioStreamFormat","FileAudioSource","init_FileAudioSource","__esmMin","init_Exports","init_AudioStreamFormat","file","filename","audioSourceId","errorMsg","AudioSourceErrorEvent","AudioSourceInitializingEvent","AudioSourceReadyEvent","audioNodeId","__awaiter","AudioStreamNodeAttachingEvent","stream","AudioStreamNodeAttachedEvent","AudioStreamNodeDetachedEvent","streamId","AudioSourceOffEvent","event","Events","createNoDashGuid","EventSource","result","connectivity","type","header","headerResult","Deferred","processHeader","view","getWord","index","formatSize","channelCount","sampleRate","bitsPerSample","pos","AudioStreamFormat","reader","h","onerror","error","AudioStreamNodeErrorEvent","format","ChunkedArrayBufferStream","chunk","processFile","buff","ev","fileBuffer","c","e","PcmRecorder","init_PCMRecorder","__esmMin","init_Exports","context","mediaStream","outputStream","scriptNode","bufferSize","audioSampleRate","waveStreamEncoder","RiffPcmEncoder","needHeader","that","event","inputFrame","waveFrame","micInput","workletNode","ev","track","url","require_requires_port","__commonJSMin","exports","module","port","protocol","require_querystringify","__commonJSMin","exports","has","undef","decode","input","encode","querystring","query","parser","result","part","key","value","querystringify","obj","prefix","pairs","require_url_parse","__commonJSMin","exports","module","required","qs","controlOrWhitespace","CRHTLF","slashes","port","protocolre","windowsDriveLetter","trimLeft","str","rules","address","url","isSpecial","ignore","lolcation","loc","globalVar","location","finaldestination","type","key","Url","scheme","extractProtocol","match","protocol","forwardSlashes","otherSlashes","slashesCount","rest","resolve","relative","base","path","last","unshift","up","parser","extracted","parse","instruction","index","instructions","i","set","part","value","fn","char","ins","toString","stringify","query","host","result","tls","parse","ocsp","import_agent_base","import_async_disk_cache","import_https_proxy_agent","net","CertCheckAgent","init_CertChecks","__esmMin","init_Exports","init_OCSPEvents","_CertCheckAgent","proxyInfo","Cache","disableStapling","agent","Agent","proxyName","httpProxyOptions","HttpsProxyAgent","socketPromise","ocspRequest","stapling","resolved","socket","tlsSocket","resolve","reject","data","OCSPStapleReceivedEvent","error","__awaiter","peer","issuer","sig","e","value","signature","cachedResponse","OCSPMemoryCacheHitEvent","diskCacheResponse","OCSPDiskCacheHitEvent","tbsData","OCSPCacheFetchErrorEvent","cachedStartTime","cachedNextTime","OCSPCacheEntryExpiredEvent","minUpdate","OCSPCacheEntryNeedsRefreshEvent","OCSPCacheUpdateErrorEvent","OCSPCacheHitEvent","OCSPCacheMissEvent","cacheValue","ocspResponse","result","OCSPVerificationFailedEvent","req","OCSPCacheUpdateNeededEvent","rawResponse","OCSPCacheUpdatehCompleteEvent","OCSPMemoryCacheStoreEvent","OCSPDiskCacheStoreEvent","ocspMethod","options","uri","parsedUri","raw","OCSPResponseRetrievedEvent","request","enableOCSP","baseAgent","event","Events","import_ws","WebsocketMessageAdapter","init_WebsocketMessageAdapter","__esmMin","init_HeaderNames","init_Exports","init_CertChecks","_WebsocketMessageAdapter","uri","connectionId","messageFormatter","proxyInfo","headers","enableCompression","ConnectionState","Deferred","options","checkAgent","CertCheckAgent","ws","Queue","reason","Events","BackgroundEvent","error","ConnectionOpenResponse","ConnectionStartEvent","e","ConnectionEstablishedEvent","ConnectionErrorEvent","ConnectionClosedEvent","networkReceivedTime","deferred","rawMessage","RawWebsocketMessage","MessageType","connectionMessage","ConnectionMessageReceivedEvent","message","messageSendStatusDeferral","messageSendDeferral","sendItem","ConnectionMessageSentEvent","event","ArgumentNullError","EventSource","HeaderNames","code","closeReason","pendingReceiveItem","pendingSendItem","sendError","WebsocketConnection","init_WebsocketConnection","__esmMin","init_Exports","init_WebsocketMessageAdapter","uri","queryParameters","headers","messageFormatter","proxyInfo","enableCompression","connectionId","message","ArgumentNullError","queryParams","i","paramName","val","headerName","createNoDashGuid","WebsocketMessageAdapter","ReplayableAudioNode","BufferEntry","init_ReplayableAudioNode","__esmMin","audioSource","bytesPerSecond","offsetToSeek","bytesToSeek","retVal","result","offset","i","value","startOffset","endOffset","chunk","serial","byteOffset","ProxyInfo","init_ProxyInfo","__esmMin","init_Exports","_ProxyInfo","proxyHostName","proxyPort","proxyUserName","proxyPassword","parameters","PropertyId","config","XHR","RestRequestType","RestMessageAdapter","init_RestMessageAdapter","__esmMin","init_Exports","configParams","connectionId","ArgumentNullError","key","value","method","uri","queryParams","body","binaryBody","responseReceivedDeferral","Deferred","xhr","requestCommand","message","url","params","queryString","k","init_Exports","__esmMin","init_ConsoleLoggingListener","init_IRecorder","init_MicAudioSource","init_FileAudioSource","init_PCMRecorder","init_WebsocketConnection","init_WebsocketMessageAdapter","init_ReplayableAudioNode","init_ProxyInfo","init_RestMessageAdapter","init_RestConfigBase","microsoft_cognitiveservices_speech_sdk_exports","__export","ActivityReceivedEventArgs","AudioConfig","AudioInputStream","AudioOutputStream","AudioStreamFormat","AutoDetectSourceLanguageConfig","AutoDetectSourceLanguageResult","BaseAudioPlayer","BotFrameworkConfig","CancellationDetails","CancellationDetailsBase","CancellationErrorCode","CancellationReason","Connection","ConnectionEventArgs","ConnectionMessage","ConnectionMessageEventArgs","Conversation","ConversationExpirationEventArgs","ConversationParticipantsChangedEventArgs","ConversationTranscriber","ConversationTranscriptionCanceledEventArgs","ConversationTranscriptionEventArgs","ConversationTranslationCanceledEventArgs","ConversationTranslationEventArgs","ConversationTranslationResult","ConversationTranslator","CustomCommandsConfig","DialogServiceConfig","DialogServiceConnector","IntentRecognitionCanceledEventArgs","IntentRecognitionEventArgs","IntentRecognitionResult","IntentRecognizer","KeywordRecognitionModel","LanguageUnderstandingModel","NoMatchDetails","NoMatchReason","OutputFormat","Participant","ParticipantChangedReason","PhraseListGrammar","ProfanityOption","PronunciationAssessmentConfig","PronunciationAssessmentGradingSystem","PronunciationAssessmentGranularity","PronunciationAssessmentResult","PropertyCollection","PropertyId","PullAudioInputStream","PullAudioInputStreamCallback","PullAudioOutputStream","PushAudioInputStream","PushAudioOutputStream","PushAudioOutputStreamCallback","RecognitionEventArgs","RecognitionResult","Recognizer","ResultReason","ServiceEventArgs","ServicePropertyChannel","SessionEventArgs","SourceLanguageConfig","SpeakerAudioDestination","SpeakerIdentificationModel","SpeakerRecognitionCancellationDetails","SpeakerRecognitionResult","SpeakerRecognitionResultType","SpeakerRecognizer","SpeakerVerificationModel","SpeechConfig","SpeechConfigImpl","SpeechRecognitionCanceledEventArgs","SpeechRecognitionEventArgs","SpeechRecognitionResult","SpeechRecognizer","SpeechSynthesisBookmarkEventArgs","SpeechSynthesisEventArgs","SpeechSynthesisOutputFormat","SpeechSynthesisResult","SpeechSynthesisVisemeEventArgs","SpeechSynthesisWordBoundaryEventArgs","SpeechSynthesizer","SpeechTranslationConfig","SpeechTranslationConfigImpl","TranslationRecognitionCanceledEventArgs","TranslationRecognitionEventArgs","TranslationRecognitionResult","TranslationRecognizer","TranslationSynthesisEventArgs","TranslationSynthesisResult","Translations","TurnStatusReceivedEventArgs","User","VoiceProfile","VoiceProfileAuthorizationPhraseResult","VoiceProfileCancellationDetails","VoiceProfileClient","VoiceProfileEnrollmentCancellationDetails","VoiceProfileEnrollmentResult","VoiceProfileResult","VoiceProfileType","init_microsoft_cognitiveservices_speech_sdk","__esmMin","init_Exports","Events","ConsoleLoggingListener","_microsoftCognitiveservicesSpeech","AudioConfig","OutputFormat","ResultReason","SpeechConfig","SpeechRecognizer","_arrayToMap","_interopRequireDefault","_SpeechSDK","_SpeechSDK$ResultReas","SpeechSDK","ResultReason","RecognizingSpeech","RecognizedSpeech","_default","result","_ref","_ref$maxAlternatives","maxAlternatives","Infinity","_ref$textNormalizatio","textNormalization","reason","json","NBest","resultList","confidence","transcript","text","isFinal","arrayToMap","slice","map","_ref2","Confidence","display","Display","itn","ITN","lexical","Lexical","maskedITN","MaskedITN","require_interopRequireDefault","__commonJSMin","exports","module","_interopRequireDefault","obj","require_global","__commonJSMin","exports","module","check","it","require_fails","__commonJSMin","exports","module","exec","require_function_bind_native","__commonJSMin","exports","module","fails","test","require_function_apply","__commonJSMin","exports","module","NATIVE_BIND","FunctionPrototype","apply","call","require_function_uncurry_this","__commonJSMin","exports","module","NATIVE_BIND","FunctionPrototype","bind","call","uncurryThis","fn","require_document_all","__commonJSMin","exports","module","documentAll","IS_HTMLDDA","require_is_callable","__commonJSMin","exports","module","$documentAll","documentAll","argument","require_descriptors","__commonJSMin","exports","module","fails","require_function_call","__commonJSMin","exports","module","NATIVE_BIND","call","require_object_property_is_enumerable","__commonJSMin","exports","$propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","V","descriptor","require_create_property_descriptor","__commonJSMin","exports","module","bitmap","value","require_classof_raw","__commonJSMin","exports","module","uncurryThis","toString","stringSlice","it","require_indexed_object","__commonJSMin","exports","module","uncurryThis","fails","classof","$Object","split","it","require_is_null_or_undefined","__commonJSMin","exports","module","it","require_require_object_coercible","__commonJSMin","exports","module","isNullOrUndefined","$TypeError","it","require_to_indexed_object","__commonJSMin","exports","module","IndexedObject","requireObjectCoercible","it","require_is_object","__commonJSMin","exports","module","isCallable","$documentAll","documentAll","it","require_path","__commonJSMin","exports","module","require_get_built_in","__commonJSMin","exports","module","path","global","isCallable","aFunction","variable","namespace","method","require_object_is_prototype_of","__commonJSMin","exports","module","uncurryThis","require_engine_user_agent","__commonJSMin","exports","module","getBuiltIn","require_engine_v8_version","__commonJSMin","exports","module","global","userAgent","process","Deno","versions","v8","match","version","require_symbol_constructor_detection","__commonJSMin","exports","module","V8_VERSION","fails","symbol","require_use_symbol_as_uid","__commonJSMin","exports","module","NATIVE_SYMBOL","require_is_symbol","__commonJSMin","exports","module","getBuiltIn","isCallable","isPrototypeOf","USE_SYMBOL_AS_UID","$Object","it","$Symbol","require_try_to_string","__commonJSMin","exports","module","$String","argument","require_a_callable","__commonJSMin","exports","module","isCallable","tryToString","$TypeError","argument","require_get_method","__commonJSMin","exports","module","aCallable","isNullOrUndefined","V","P","func","require_ordinary_to_primitive","__commonJSMin","exports","module","call","isCallable","isObject","$TypeError","input","pref","fn","val","require_is_pure","__commonJSMin","exports","module","require_define_global_property","__commonJSMin","exports","module","global","defineProperty","key","value","require_shared_store","__commonJSMin","exports","module","global","defineGlobalProperty","SHARED","store","require_shared","__commonJSMin","exports","module","IS_PURE","store","key","value","require_to_object","__commonJSMin","exports","module","requireObjectCoercible","$Object","argument","require_has_own_property","__commonJSMin","exports","module","uncurryThis","toObject","hasOwnProperty","it","key","require_uid","__commonJSMin","exports","module","uncurryThis","id","postfix","toString","key","require_well_known_symbol","__commonJSMin","exports","module","global","shared","hasOwn","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","Symbol","symbolFor","createWellKnownSymbol","name","description","require_to_primitive","__commonJSMin","exports","module","call","isObject","isSymbol","getMethod","ordinaryToPrimitive","wellKnownSymbol","$TypeError","TO_PRIMITIVE","input","pref","exoticToPrim","result","require_to_property_key","__commonJSMin","exports","module","toPrimitive","isSymbol","argument","key","require_document_create_element","__commonJSMin","exports","module","global","isObject","document","EXISTS","it","require_ie8_dom_define","__commonJSMin","exports","module","DESCRIPTORS","fails","createElement","require_object_get_own_property_descriptor","__commonJSMin","exports","DESCRIPTORS","call","propertyIsEnumerableModule","createPropertyDescriptor","toIndexedObject","toPropertyKey","hasOwn","IE8_DOM_DEFINE","$getOwnPropertyDescriptor","O","P","require_is_forced","__commonJSMin","exports","module","fails","isCallable","replacement","isForced","feature","detection","value","data","normalize","POLYFILL","NATIVE","string","require_function_bind_context","__commonJSMin","exports","module","uncurryThis","aCallable","NATIVE_BIND","bind","fn","that","require_v8_prototype_define_bug","__commonJSMin","exports","module","DESCRIPTORS","fails","require_an_object","__commonJSMin","exports","module","isObject","$String","$TypeError","argument","require_object_define_property","__commonJSMin","exports","DESCRIPTORS","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$TypeError","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","CONFIGURABLE","WRITABLE","O","P","Attributes","current","require_create_non_enumerable_property","__commonJSMin","exports","module","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","object","key","value","require_export","__commonJSMin","exports","module","global","apply","uncurryThis","isCallable","getOwnPropertyDescriptor","isForced","path","bind","createNonEnumerableProperty","hasOwn","wrapConstructor","NativeConstructor","Wrapper","a","b","c","options","source","TARGET","GLOBAL","STATIC","PROTO","nativeSource","target","targetPrototype","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","key","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","require_shared_key","__commonJSMin","exports","module","shared","uid","keys","key","require_correct_prototype_getter","__commonJSMin","exports","module","fails","F","require_object_get_prototype_of","__commonJSMin","exports","module","hasOwn","isCallable","toObject","sharedKey","CORRECT_PROTOTYPE_GETTER","IE_PROTO","$Object","ObjectPrototype","O","object","constructor","require_a_possible_prototype","__commonJSMin","exports","module","isCallable","$String","$TypeError","argument","require_object_set_prototype_of","__commonJSMin","exports","module","uncurryThis","anObject","aPossiblePrototype","CORRECT_SETTER","test","setter","O","proto","require_math_trunc","__commonJSMin","exports","module","ceil","floor","x","n","require_to_integer_or_infinity","__commonJSMin","exports","module","trunc","argument","number","require_to_absolute_index","__commonJSMin","exports","module","toIntegerOrInfinity","max","min","index","length","integer","require_to_length","__commonJSMin","exports","module","toIntegerOrInfinity","min","argument","require_length_of_array_like","__commonJSMin","exports","module","toLength","obj","require_array_includes","__commonJSMin","exports","module","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","length","index","value","require_hidden_keys","__commonJSMin","exports","module","require_object_keys_internal","__commonJSMin","exports","module","uncurryThis","hasOwn","toIndexedObject","indexOf","hiddenKeys","push","object","names","O","result","key","require_enum_bug_keys","__commonJSMin","exports","module","require_object_get_own_property_names","__commonJSMin","exports","internalObjectKeys","enumBugKeys","hiddenKeys","O","require_object_get_own_property_symbols","__commonJSMin","exports","require_own_keys","__commonJSMin","exports","module","getBuiltIn","uncurryThis","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","anObject","concat","it","keys","getOwnPropertySymbols","require_copy_constructor_properties","__commonJSMin","exports","module","hasOwn","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","target","source","exceptions","keys","defineProperty","getOwnPropertyDescriptor","i","key","require_object_keys","__commonJSMin","exports","module","internalObjectKeys","enumBugKeys","O","require_object_define_properties","__commonJSMin","exports","DESCRIPTORS","V8_PROTOTYPE_DEFINE_BUG","definePropertyModule","anObject","toIndexedObject","objectKeys","O","Properties","props","keys","length","index","key","require_html","__commonJSMin","exports","module","getBuiltIn","require_object_create","__commonJSMin","exports","module","anObject","definePropertiesModule","enumBugKeys","hiddenKeys","html","documentCreateElement","sharedKey","GT","LT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","NullProtoObjectViaActiveX","activeXDocument","temp","NullProtoObjectViaIFrame","iframe","JS","iframeDocument","NullProtoObject","length","O","Properties","result","require_error_stack_clear","__commonJSMin","exports","module","uncurryThis","$Error","replace","TEST","arg","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","stack","dropEntries","require_install_error_cause","__commonJSMin","exports","module","isObject","createNonEnumerableProperty","O","options","require_iterators","__commonJSMin","exports","module","require_is_array_iterator_method","__commonJSMin","exports","module","wellKnownSymbol","Iterators","ITERATOR","ArrayPrototype","it","require_to_string_tag_support","__commonJSMin","exports","module","wellKnownSymbol","TO_STRING_TAG","test","require_classof","__commonJSMin","exports","module","TO_STRING_TAG_SUPPORT","isCallable","classofRaw","wellKnownSymbol","TO_STRING_TAG","$Object","CORRECT_ARGUMENTS","tryGet","it","key","O","tag","result","require_get_iterator_method","__commonJSMin","exports","module","classof","getMethod","isNullOrUndefined","Iterators","wellKnownSymbol","ITERATOR","it","require_get_iterator","__commonJSMin","exports","module","call","aCallable","anObject","tryToString","getIteratorMethod","$TypeError","argument","usingIterator","iteratorMethod","require_iterator_close","__commonJSMin","exports","module","call","anObject","getMethod","iterator","kind","value","innerResult","innerError","error","require_iterate","__commonJSMin","exports","module","bind","call","anObject","tryToString","isArrayIteratorMethod","lengthOfArrayLike","isPrototypeOf","getIterator","getIteratorMethod","iteratorClose","$TypeError","Result","stopped","result","ResultPrototype","iterable","unboundFunction","options","that","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","fn","iterator","iterFn","index","length","next","step","stop","condition","callFn","value","error","require_to_string","__commonJSMin","exports","module","classof","$String","argument","require_normalize_string_argument","__commonJSMin","exports","module","toString","argument","$default","require_error_stack_installable","__commonJSMin","exports","module","fails","createPropertyDescriptor","error","require_es_aggregate_error_constructor","__commonJSMin","$","isPrototypeOf","getPrototypeOf","setPrototypeOf","copyConstructorProperties","create","createNonEnumerableProperty","createPropertyDescriptor","clearErrorStack","installErrorCause","iterate","normalizeStringArgument","wellKnownSymbol","ERROR_STACK_INSTALLABLE","TO_STRING_TAG","$Error","push","$AggregateError","errors","message","options","isInstance","AggregateErrorPrototype","that","errorsArray","require_es_aggregate_error","__commonJSMin","require_add_to_unscopables","__commonJSMin","exports","module","require_weak_map_basic_detection","__commonJSMin","exports","module","global","isCallable","WeakMap","require_internal_state","__commonJSMin","exports","module","NATIVE_WEAK_MAP","global","uncurryThis","isObject","createNonEnumerableProperty","hasOwn","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","TypeError","WeakMap","set","get","has","enforce","it","getterFor","TYPE","state","store","wmget","wmhas","wmset","metadata","STATE","require_function_name","__commonJSMin","exports","module","DESCRIPTORS","hasOwn","FunctionPrototype","getDescriptor","EXISTS","PROPER","CONFIGURABLE","require_define_built_in","__commonJSMin","exports","module","createNonEnumerableProperty","target","key","value","options","require_iterators_core","__commonJSMin","exports","module","fails","isCallable","isObject","create","getPrototypeOf","defineBuiltIn","wellKnownSymbol","IS_PURE","ITERATOR","BUGGY_SAFARI_ITERATORS","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","test","require_object_to_string","__commonJSMin","exports","module","TO_STRING_TAG_SUPPORT","classof","require_set_to_string_tag","__commonJSMin","exports","module","TO_STRING_TAG_SUPPORT","defineProperty","createNonEnumerableProperty","hasOwn","toString","wellKnownSymbol","TO_STRING_TAG","it","TAG","STATIC","SET_METHOD","target","require_iterator_create_constructor","__commonJSMin","exports","module","IteratorPrototype","create","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","next","ENUMERABLE_NEXT","TO_STRING_TAG","require_iterator_define","__commonJSMin","exports","module","$","call","IS_PURE","FunctionName","isCallable","createIteratorConstructor","getPrototypeOf","setPrototypeOf","setToStringTag","createNonEnumerableProperty","defineBuiltIn","wellKnownSymbol","Iterators","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","IteratorPrototype","BUGGY_SAFARI_ITERATORS","ITERATOR","KEYS","VALUES","ENTRIES","returnThis","Iterable","NAME","IteratorConstructor","next","DEFAULT","IS_SET","FORCED","getIterationMethod","KIND","defaultIterator","IterablePrototype","TO_STRING_TAG","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","CurrentIteratorPrototype","methods","KEY","require_create_iter_result_object","__commonJSMin","exports","module","value","done","require_es_array_iterator","__commonJSMin","exports","module","toIndexedObject","addToUnscopables","Iterators","InternalStateModule","defineProperty","defineIterator","createIterResultObject","IS_PURE","DESCRIPTORS","ARRAY_ITERATOR","setInternalState","getInternalState","iterated","kind","state","target","index","values","require_es_object_to_string","__commonJSMin","require_engine_is_node","__commonJSMin","exports","module","classof","global","require_set_species","__commonJSMin","exports","module","getBuiltIn","definePropertyModule","wellKnownSymbol","DESCRIPTORS","SPECIES","CONSTRUCTOR_NAME","Constructor","defineProperty","require_an_instance","__commonJSMin","exports","module","isPrototypeOf","$TypeError","it","Prototype","require_inspect_source","__commonJSMin","exports","module","uncurryThis","isCallable","store","functionToString","it","require_is_constructor","__commonJSMin","exports","module","uncurryThis","fails","isCallable","classof","getBuiltIn","inspectSource","noop","empty","construct","constructorRegExp","exec","INCORRECT_TO_STRING","isConstructorModern","argument","isConstructorLegacy","called","require_a_constructor","__commonJSMin","exports","module","isConstructor","tryToString","$TypeError","argument","require_species_constructor","__commonJSMin","exports","module","anObject","aConstructor","isNullOrUndefined","wellKnownSymbol","SPECIES","O","defaultConstructor","C","S","require_array_slice","__commonJSMin","exports","module","uncurryThis","require_validate_arguments_length","__commonJSMin","exports","module","$TypeError","passed","required","require_engine_is_ios","__commonJSMin","exports","module","userAgent","require_task","__commonJSMin","exports","module","global","apply","bind","isCallable","hasOwn","fails","html","arraySlice","createElement","validateArgumentsLength","IS_IOS","IS_NODE","set","clear","process","Dispatch","Function","MessageChannel","String","counter","queue","ONREADYSTATECHANGE","$location","defer","channel","port","run","id","fn","runner","listener","event","post","handler","args","require_engine_is_ios_pebble","__commonJSMin","exports","module","userAgent","global","require_engine_is_webos_webkit","__commonJSMin","exports","module","userAgent","require_microtask","__commonJSMin","exports","module","global","bind","getOwnPropertyDescriptor","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","document","process","Promise","queueMicrotaskDescriptor","queueMicrotask","flush","head","last","notify","toggle","node","promise","then","parent","fn","error","task","require_host_report_errors","__commonJSMin","exports","module","global","a","b","console","require_perform","__commonJSMin","exports","module","exec","error","require_queue","__commonJSMin","exports","module","Queue","item","entry","require_promise_native_constructor","__commonJSMin","exports","module","global","require_engine_is_deno","__commonJSMin","exports","module","require_engine_is_browser","__commonJSMin","exports","module","IS_DENO","IS_NODE","require_promise_constructor_detection","__commonJSMin","exports","module","global","NativePromiseConstructor","isCallable","isForced","inspectSource","wellKnownSymbol","IS_BROWSER","IS_DENO","IS_PURE","V8_VERSION","NativePromisePrototype","SPECIES","SUBCLASSING","NATIVE_PROMISE_REJECTION_EVENT","FORCED_PROMISE_CONSTRUCTOR","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","promise","resolve","FakePromise","exec","constructor","require_new_promise_capability","__commonJSMin","exports","module","aCallable","$TypeError","PromiseCapability","C","resolve","reject","$$resolve","$$reject","require_es_promise_constructor","__commonJSMin","$","IS_PURE","IS_NODE","global","call","defineBuiltIn","setPrototypeOf","setToStringTag","setSpecies","aCallable","isCallable","isObject","anInstance","speciesConstructor","task","microtask","hostReportErrors","perform","Queue","InternalStateModule","NativePromiseConstructor","PromiseConstructorDetection","newPromiseCapabilityModule","PROMISE","FORCED_PROMISE_CONSTRUCTOR","NATIVE_PROMISE_REJECTION_EVENT","NATIVE_PROMISE_SUBCLASSING","getInternalPromiseState","setInternalState","NativePromisePrototype","PromiseConstructor","PromisePrototype","TypeError","document","process","newPromiseCapability","newGenericPromiseCapability","DISPATCH_EVENT","UNHANDLED_REJECTION","REJECTION_HANDLED","PENDING","FULFILLED","REJECTED","HANDLED","UNHANDLED","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","isThenable","it","then","callReaction","reaction","state","value","ok","handler","resolve","reject","domain","result","exited","onHandleUnhandled","error","notify","isReject","reactions","onUnhandled","dispatchEvent","name","promise","reason","event","IS_UNHANDLED","isUnhandled","bind","fn","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","C","that","require_check_correctness_of_iteration","__commonJSMin","exports","module","wellKnownSymbol","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","require_promise_statics_incorrect_iteration","__commonJSMin","exports","module","NativePromiseConstructor","checkCorrectnessOfIteration","FORCED_PROMISE_CONSTRUCTOR","iterable","require_es_promise_all","__commonJSMin","$","call","aCallable","newPromiseCapabilityModule","perform","iterate","PROMISE_STATICS_INCORRECT_ITERATION","iterable","C","capability","resolve","reject","result","$promiseResolve","values","counter","remaining","promise","index","alreadyCalled","value","require_es_promise_catch","__commonJSMin","$","IS_PURE","FORCED_PROMISE_CONSTRUCTOR","NativePromiseConstructor","getBuiltIn","isCallable","defineBuiltIn","NativePromisePrototype","onRejected","method","require_es_promise_race","__commonJSMin","$","call","aCallable","newPromiseCapabilityModule","perform","iterate","PROMISE_STATICS_INCORRECT_ITERATION","iterable","C","capability","reject","result","$promiseResolve","promise","require_es_promise_reject","__commonJSMin","$","call","newPromiseCapabilityModule","FORCED_PROMISE_CONSTRUCTOR","r","capability","require_promise_resolve","__commonJSMin","exports","module","anObject","isObject","newPromiseCapability","C","x","promiseCapability","resolve","require_es_promise_resolve","__commonJSMin","$","getBuiltIn","IS_PURE","NativePromiseConstructor","FORCED_PROMISE_CONSTRUCTOR","promiseResolve","PromiseConstructorWrapper","CHECK_WRAPPER","x","require_es_promise","__commonJSMin","require_es_promise_all_settled","__commonJSMin","$","call","aCallable","newPromiseCapabilityModule","perform","iterate","iterable","C","capability","resolve","reject","result","promiseResolve","values","counter","remaining","promise","index","alreadyCalled","value","error","require_es_promise_any","__commonJSMin","$","call","aCallable","getBuiltIn","newPromiseCapabilityModule","perform","iterate","PROMISE_ANY_ERROR","iterable","C","AggregateError","capability","resolve","reject","result","promiseResolve","errors","counter","remaining","alreadyResolved","promise","index","alreadyRejected","value","error","require_es_promise_finally","__commonJSMin","$","IS_PURE","NativePromiseConstructor","fails","getBuiltIn","isCallable","speciesConstructor","promiseResolve","defineBuiltIn","NativePromisePrototype","NON_GENERIC","onFinally","C","isFunction","x","e","method","require_string_multibyte","__commonJSMin","exports","module","uncurryThis","toIntegerOrInfinity","toString","requireObjectCoercible","charAt","charCodeAt","stringSlice","createMethod","CONVERT_TO_STRING","$this","pos","S","position","size","first","second","require_es_string_iterator","__commonJSMin","charAt","toString","InternalStateModule","defineIterator","createIterResultObject","STRING_ITERATOR","setInternalState","getInternalState","iterated","state","string","index","point","require_promise","__commonJSMin","exports","module","path","require_dom_iterables","__commonJSMin","exports","module","require_web_dom_collections_iterator","__commonJSMin","DOMIterables","global","classof","createNonEnumerableProperty","Iterators","wellKnownSymbol","TO_STRING_TAG","COLLECTION_NAME","Collection","CollectionPrototype","require_promise","__commonJSMin","exports","module","parent","require_promise","__commonJSMin","exports","module","require_lib","__commonJSMin","exports","module","_interopRequireDefault","_promise","pDefer","deferred","resolve","reject","_pDeferEs","_interopRequireDefault","_default","shiftDeferred","queue","push","value","_shiftDeferred","resolve","shift","length","Promise","createDeferred","promise","require_objectWithoutPropertiesLoose","__commonJSMin","exports","module","_objectWithoutPropertiesLoose","source","excluded","target","sourceKeys","key","i","require_objectWithoutProperties","__commonJSMin","exports","module","objectWithoutPropertiesLoose","_objectWithoutProperties","source","excluded","target","key","i","sourceSymbolKeys","resolveFunctionOrReturnValue","fnOrValue","_resolveFunctionOrReturnValue","_interopRequireDefault","shouldWarnOnSubscriptionKey","patchOptions","_ref","authorizationToken","credentials","looseEvent","looseEvents","_ref$region","region","subscriptionKey","otherOptions","_objectWithoutProperties2","_excluded","console","warn","Error","_ref2","_asyncToGenerator2","_regenerator","_callee","_context","resolveFunctionOrReturnValue","_objectSpread","fetchCredentials","_fetchCredentials","_callee2","_yield$resolveFunctio","customVoiceHostname","speechRecognitionHostname","speechSynthesisHostname","resolvedCredentials","_context2","_default","_classCallCheck2","_phrases","Error","value","Array","isArray","_es","_cognitiveServiceEventResultToWebSpeechRecognitionResultList","_interopRequireDefault","_createPromiseQueue","_patchOptions2","_SpeechGrammarList","_SpeechSDK","AudioConfig","SpeechSDK","OutputFormat","ResultReason","SpeechConfig","SpeechRecognizer","serializeRecognitionResult","_ref","duration","errorDetails","json","offset","properties","reason","resultId","text","JSON","parse","averageAmplitude","arrayBuffer","array","Int16Array","reduce","call","amplitude","Math","abs","length","cognitiveServicesAsyncToPromise","fn","_len","args","_key","Promise","resolve","reject","SpeechRecognitionEvent","type","_this","_ref2","data","emma","interpretation","resultIndex","results","_classCallCheck2","_super","Event","prepareAudioConfig","audioConfig","originalAttach","attach","boundOriginalAttach","bind","firstChunk","muted","_asyncToGenerator2","_regenerator","_callee2","reader","_context2","_objectSpread","read","_read","_callee","chunk","_context","buffer","events","onEvent","name","ArrayBuffer","isEnd","timeReceived","Date","now","pause","unprepare","createSpeechRecognitionPonyfillFromRecognizer","_ref4","createRecognizer","enableTelemetry","looseEvents","referenceGrammars","textNormalization","SpeechRecognition","_EventTarget","_inherits2","_super2","_createSuper","_this2","_continuous","_interimResults","_lang","window","document","documentElement","getAttribute","navigator","language","_grammars","SpeechGrammarList","_maxAlternatives","_createClass2","event","dispatchEvent","value","Error","getEventAttributeValue","setEventAttributeValue","_this3","_startOnce","catch","err","ErrorEvent","error","message","stack","_startOnce2","_callee3","_this4","recognizer","_prepareAudioConfig","queue","soundStarted","speechStarted","stopping","_recognizer$audioConf","detachAudioConfigEvent","phrases","dynamicGrammar","audioStarted","finalEvent","finalizedResults","_loop","loop","_ret","_context4","lang","createPromiseQueue","push","audioSourceReady","audioSourceOff","firstAudibleChunk","detach","canceled","_","_ref5","sessionId","recognized","_ref6","result","recognizing","_ref7","sessionStarted","_ref8","sessionStopped","_ref9","speechStartDetected","_ref10","speechEndDetected","_ref11","grammars","privReco","addReferenceGrammar","addPhrase","startContinuousRecognitionAsync","stopContinuousRecognitionAsync","abort","stop","undefined","errorMessage","recognizable","_context3","shift","Object","keys","forEach","emitCognitiveServices","test","NoMatch","cognitiveServiceEventResultToWebSpeechRecognitionResultList","maxAlternatives","transcript","_toConsumableArray2","continuous","interimResults","console","dispose","EventTarget","options","_patchOptions","patchOptions","_patchOptions$audioCo","fromDefaultMicrophoneInput","_patchOptions$enableT","fetchCredentials","speechRecognitionEndpointId","_patchOptions$textNor","mediaDevices","getUserMedia","warn","_ref12","_callee4","_yield$fetchCredentia","authorizationToken","region","speechRecognitionHostname","subscriptionKey","speechConfig","host","_context5","hostname","port","protocol","fromHost","fromAuthorizationToken","fromSubscription","endpointId","outputFormat","Detailed","speechRecognitionLanguage","_x","_createSpeechRecognitionPonyfill","_interopRequireWildcard","createSpeechRecognitionPonyfill","require_lib","__commonJSMin","exports","module","onErrorResumeNext","fn","context","result","resolve","memoize_one_esm_exports","__export","memoizeOne","isEqual","first","second","safeIsNaN","areInputsEqual","newInputs","lastInputs","i","resultFn","cache","memoized","newArgs","_i","lastResult","init_memoize_one_esm","__esmMin","value","_default","audioContext","_classCallCheck2","suspend","playingUtterance","dispatchEvent","CustomEvent","resume","_callee","queue","utterance","_regenerator","_context","shift","play","stop","state","_memoizeOne","_interopRequireDefault","_AudioContextConsumer","_default","_ref","audioContext","ponyfill","_classCallCheck2","consumer","paused","queue","getAudioContext","memoize","AudioContext","pause","utterance","push","startConsumer","resume","_callee","_regenerator","_context","length","AudioContextConsumer","start","splice","stop","_default","_ref","gender","lang","voiceURI","_classCallCheck2","_gender","_lang","_localService","_name","_voiceURI","_SpeechSynthesisVoice","_interopRequireDefault","fetchCustomVoices","_callee","_ref","customVoiceHostname","deploymentId","region","subscriptionKey","hostname","res","_regenerator","_context","fetch","encodeURI","encodeURIComponent","headers","accept","ok","Error","json","_callee2","_ref2","_yield$fetchCustomVoi","models","_context2","map","_ref4","gender","properties","Gender","lang","locale","voiceURI","name","SpeechSynthesisVoice","sort","_ref5","_ref6","x","y","_SpeechSynthesisVoice","_interopRequireDefault","fetchVoices","_callee","_ref","authorizationToken","region","speechSynthesisHostname","subscriptionKey","hostname","res","voices","_regenerator","_context","encodeURI","fetch","headers","_objectSpread","authorization","ok","Error","json","map","_ref2","gender","Gender","lang","Locale","voiceURI","Name","SpeechSynthesisVoice","sort","_ref3","_ref4","x","name","y","_es","SpeechSynthesisEvent","type","_classCallCheck2","_super","Event","require_p_defer","__commonJSMin","exports","module","ret","promise","Promise","resolve","reject","_pDefer","_interopRequireDefault","EventAsPromise","_this","options","_classCallCheck","defers","upcomingDeferred","eventListener","bind","one","upcoming","Symbol","iterator","next","done","value","event","deferred","shift","args","array","slice","call","arguments","resolve","push","promise","chars","lookup","i","encode","decode","arraybuffer","bytes","len","base64","bufferLength","p","encoded1","encoded2","encoded3","encoded4","relativePercentage","value","relative","Math","round","buildSSML","_ref","lang","_ref$pitch","pitch","_ref$rate","rate","text","voice","volume","SPEAK_TAG_PATTERN","XML_PROLOG_PATTERN","isSSML","text","test","_base64Arraybuffer","_buildSSML","_interopRequireDefault","_isSSML","DEFAULT_LANGUAGE","DEFAULT_OUTPUT_FORMAT","DEFAULT_VOICE","EMPTY_MP3_BASE64","_callee","_ref","deploymentId","fetchCredentials","_ref$lang","lang","_ref$outputFormat","outputFormat","pitch","rate","text","_ref$voice","voice","volume","_yield$fetchCredentia","authorizationToken","region","speechSynthesisHostname","subscriptionKey","ssml","hostname","search","url","res","_regenerator","_context","decode","Error","isSSML","buildSSML","encodeURI","fetch","headers","_objectSpread","Authorization","method","body","ok","status","arrayBuffer","subscribeEvent","target","name","handler","addEventListener","removeEventListener","_es","_eventAsPromise","_interopRequireDefault","_fetchSpeechData","_SpeechSynthesisEvent","_subscribeEvent","asyncDecodeAudioData","audioContext","arrayBuffer","Promise","resolve","reject","promise","decodeAudioData","then","playDecoded","audioBuffer","source","audioContextClosed","EventAsPromise","sourceEnded","unsubscribe","subscribeEvent","_ref","state","target","eventListener","buffer","onended","connect","destination","start","race","upcoming","err","SpeechSynthesisUtterance","text","_this","_classCallCheck2","_super","_lang","_pitch","_rate","_voice","_volume","onboundary","onend","onerror","onmark","onpause","onresume","onstart","value","getEventAttributeValue","setEventAttributeValue","_ref2","deploymentId","fetchCredentials","outputFormat","arrayBufferPromise","fetchSpeechData","lang","window","navigator","language","pitch","rate","voice","voiceURI","volume","catch","_callee","_regenerator","_context","dispatchEvent","SpeechSynthesisEvent","createBufferSource","_playingSource","ErrorEvent","error","message","stack","stop","EventTarget","_es","_pDeferEs","_interopRequireDefault","_onErrorResumeNext","_AudioContextQueue","_fetchCustomVoices","_fetchVoices","_patchOptions2","_SpeechSynthesisEvent","_SpeechSynthesisUtterance","DEFAULT_OUTPUT_FORMAT","EMPTY_ARRAY","options","_patchOptions","patchOptions","audioContext","fetchCredentials","_patchOptions$ponyfil","ponyfill","AudioContext","window","webkitAudioContext","speechSynthesisDeploymentId","_patchOptions$speechS","speechSynthesisOutputFormat","console","warn","SpeechSynthesis","_EventTarget","_inherits2","_super","_createSuper","_this","_classCallCheck2","queue","AudioContextQueue","updateVoices","_createClass2","stop","getEventAttributeValue","value","setEventAttributeValue","pause","resume","utterance","SpeechSynthesisUtterance","Error","_createDeferred","createDeferred","reject","resolve","promise","handleError","_ref","errorCode","error","message","stack","addEventListener","preload","deploymentId","outputFormat","push","finally","removeEventListener","speaking","_updateVoices","_asyncToGenerator2","_regenerator","_callee3","_this2","_yield$fetchCredentia","customVoiceHostname","region","speechSynthesisHostname","subscriptionKey","_context3","onErrorResumeNext","_callee","voices","_context","fetchCustomVoices","getVoices","_callee2","_context2","fetchVoices","dispatchEvent","SpeechSynthesisEvent","EventTarget","speechSynthesis","_createSpeechSynthesisPonyfill","_interopRequireDefault","createSpeechSynthesisPonyfill","TOKEN_URL_TEMPLATE","_callee","_ref","region","subscriptionKey","res","_regenerator","_context","fetch","replace","headers","method","ok","Error","status","text","_SpeechToText","_interopRequireWildcard","_TextToSpeech","_interopRequireDefault","_fetchAuthorizationToken","createSpeechServicesPonyfill","options","_len","args","_key","ponyfill","_objectSpread","createSpeechRecognitionPonyfill","createSpeechSynthesisPonyfill","then","resolve","console","warn","meta","document","createElement","setAttribute","head","appendChild","Components","PropTypes","React","singleToArray","warnOnce","React","defaultAdaptiveCardsPackage","React","useMemo","createContext","AdaptiveCardsContext","AdaptiveCardsContext_default","AdaptiveCardsComposer","adaptiveCardsHostConfig","adaptiveCardsPackage","children","patchedAdaptiveCardsPackage","useMemo","defaultAdaptiveCardsPackage","adaptiveCardsContext","React","AdaptiveCardsContext_default","AdaptiveCardsComposer_default","useMemo","React","hooks","PropTypes","React","useMemo","useContext","useAdaptiveCardsContext","context","useContext","AdaptiveCardsContext_default","useAdaptiveCardsPackage","adaptiveCardsPackage","useAdaptiveCardsContext","hooks","useCallback","useMemo","hooks","useStyleOptions","styleOptions","useDirection","hooks","updateRTLInline","element","rtl","adaptiveCardsPackage","count","index","child","useParseAdaptiveCardJSON","useAdaptiveCardsPackage","direction","adaptiveCardsParserMaxVersion","useStyleOptions","AdaptiveCard","SerializationContext","Version","maxVersion","useMemo","useCallback","content","ignoreErrors","card","errors","serializationContext","eventCount","i","useMemo","random","useUniqueId","prefix","id","useLocalizer","hooks","walkAllItems","node","fn","count","index","AdaptiveCardChoiceSetInput","choices","defaultValue","label","labelId","useUniqueId","defaultChoice","value","React","choice","PropTypes","AdaptiveCardAttachment","content","localize","parseAdaptiveCardJSON","useParseAdaptiveCardJSON","ChoiceSetInput","DateInput","NumberInput","OpenUrlAction","ShowCardAction","SubmitAction","TextInput","TimeInput","ToggleInput","useAdaptiveCardsPackage","card","useMemo","inputs","cardLabel","input","AdaptiveCardAttachment_default","PropTypes","React","hooks","useLocalizer","RichCardAttachment","content","localize","buttons","facts","image","images","items","subtitle","tax","text","title","total","vat","taxLabel","totalLabel","vatLabel","cardLabel","alt","index","key","value","price","quantity","RichCardAttachment_default","RICH_CARD_CONTENT_TYPES","createAdaptiveCardsAttachmentMiddleware","next","args","content","contentType","React","RichCardAttachment_default","AdaptiveCardAttachment_default","React","PropTypes","React","PropTypes","React","useMemo","Components","getTabIndex","hooks","classNames","PropTypes","React","useCallback","useLayoutEffect","useMemo","useRef","hooks","useMinimalStyleSet","useStyleSet","styleOptions","useMemo","normalizeStyleOptions","ADAPTIVE_CARDS_DEFAULT_STYLE_OPTIONS","defaultStyleOptions_default","normalizeStyleOptions","styleOptions","defaultStyleOptions_default","createAdaptiveCardsHostConfig","styleOptions","accent","bubbleTextColor","cardEmphasisBackgroundColor","primaryFont","subtle","normalizeStyleOptions","useAdaptiveCardsHostConfig","hostConfigFromProps","useAdaptiveCardsContext","styleOptions","useStyleOptions","useMemo","createAdaptiveCardsHostConfig","useRef","useValueRef","value","ref","useMemo","useRef","noOp","noOp_default","addEventListenerWithUndo","element","name","handler","options","noOp_default","bunchUndos","fns","called","fn","closest","element","selector","current","addClass","element","className","classList","durableAddClassWithUndo","element","className","addClass","observer","noOp_default","findDOMNodeOwner","adaptiveCard","element","count","index","action","card","cardObject","getAttributeOrFalse","element","qualifiedName","setOrRemoveAttributeIfFalse","element","qualifiedName","value","setOrRemoveAttributeIfFalseWithUndo","element","qualifiedName","value","noOp_default","prevValue","getAttributeOrFalse","setOrRemoveAttributeIfFalse","useCallback","useEffect","useMemo","useRef","useRef","UNINITIALIZED","useLazyRef","refInit","ref","Mod","mod","#mod","#undo","adaptiveCard","cardElement","args","useAdaptiveCardModEffect","modder","adaptiveCardRef","useValueRef","useMemo","reapplyRef","useRef","observerRef","useLazyRef","useEffect","handleApply","useCallback","observer","handleUndo","useEffect","useRef","usePrevious","value","ref","useActionShouldBePushButtonModEffect","adaptiveCard","prevAdaptiveCard","usePrevious","pushedCardObjectsRef","useRef","modder","useMemo","cardElement","actionPerformedClassName","undoStack","actionElement","cardObject","findDOMNodeOwner","durableAddClassWithUndo","setOrRemoveAttributeIfFalseWithUndo","addEventListenerWithUndo","target","closest","bunchUndos","useAdaptiveCardModEffect","useMemo","useRef","useActiveElementModEffect","adaptiveCard","activeCardObjectRef","useRef","usePrevious","modder","useMemo","findDOMNodeOwner","useAdaptiveCardModEffect","useMemo","disabledHandler","event","disable","element","undoStack","tag","addEventListenerWithUndo","setOrRemoveAttributeIfFalseWithUndo","option","durableDisableInputElementAccessiblyWithUndo","noOp_default","apply","observer","bunchUndos","NO_OP","INPUT_ELEMENT_SELECTOR","useDisabledModEffect","adaptiveCard","modder","useMemo","_","cardElement","disabled","undoStack","element","durableDisableInputElementAccessiblyWithUndo","bunchUndos","useAdaptiveCardModEffect","useMemo","useRef","getUserValues","element","values","type","setUserValues","defaultValue","usePersistValuesModEffect","adaptiveCard","prevAdaptiveCard","usePrevious","valuesMapRef","useRef","modder","useMemo","valuesMap","cardObject","value","useAdaptiveCardModEffect","useMemo","useRoleModEffect","adaptiveCard","modder","useMemo","_","cardElement","setOrRemoveAttributeIfFalseWithUndo","useAdaptiveCardModEffect","isPlainObject","obj","renderAdaptiveCard","adaptiveCard","adaptiveCardsHostConfig","GlobalSettings","HostConfig","renderMarkdownAsHTML","setTabIndexAtCardRoot","text","result","validationEvents","items","message","element","error","ErrorBox","Components","useDisabled","useLocalizer","usePerformCardAction","useRenderMarkdownAsHTML","useScrollToEnd","hooks","node_env","AdaptiveCardRenderer","actionPerformedClassName","adaptiveCard","disabledFromProps","tapAction","adaptiveCardRendererStyleSet","useStyleSet","GlobalSettings","HostConfig","useAdaptiveCardsPackage","adaptiveCardsHostConfig","useAdaptiveCardsHostConfig","disabledFromComposer","contentRef","useRef","localize","performCardAction","renderMarkdownAsHTML","scrollToEnd","disabled","tapActionRef","useValueRef","disabledRef","handleClickAndKeyPress","useCallback","event","key","type","target","current","adaptiveCardRoot","tabIndex","getTabIndex","handleClickAndKeyPressForTapAction","handleExecuteAction","action","actionTypeName","image","title","value","data","setTabIndexAtCardRoot","applyActionShouldBePushButtonMod","undoActionShouldBePushButtonMod","useActionShouldBePushButtonModEffect","applyActiveElementMod","undoActiveElementMod","useActiveElementModEffect","applyDisabledMod","undoDisabledMod","useDisabledModEffect","applyPersistValuesMod","undoPersistValuesMod","usePersistValuesModEffect","applyRoleMod","undoRoleMod","useRoleModEffect","element","errors","useMemo","renderAdaptiveCard","useLayoutEffect","React","classNames","PropTypes","AdaptiveCardRenderer_default","stripSubmitAction","card","nextActions","action","AdaptiveCardContent","actionPerformedClassName","content","disabled","parseAdaptiveCardJSON","useParseAdaptiveCardJSON","useMemo","React","AdaptiveCardRenderer_default","PropTypes","AdaptiveCardContent_default","AdaptiveCardAttachment","content","disabled","React","AdaptiveCardContent_default","AdaptiveCardAttachment_default","PropTypes","PropTypes","React","Components","PropTypes","React","PropTypes","React","useMemo","hooks","Column","ColumnSet","Container","Image","OpenUrlAction","Size","SizeAndUnit","SizeUnit","SubmitAction","TextBlock","TextColor","TextSize","TextWeight","isForbiddenPropertyName","addCardAction","cardAction","includesOAuthButtons","type","action","AdaptiveCardBuilder","adaptiveCards","styleOptions","direction","sizes","container","selectAction","columnSet","size","column","cardElements","cardElement","text","template","textblock","prop","cardActions","content","richCardWrapTitle","url","altText","image","useDirection","hooks","CommonCard","actionPerformedClassName","content","disabled","adaptiveCardsPackage","useAdaptiveCardsPackage","direction","styleOptions","useStyleOptions","builtCard","useMemo","builder","AdaptiveCardBuilder","React","AdaptiveCardRenderer_default","PropTypes","CommonCard_default","ImageContent","VideoContent","Components","AnimationCardContent","actionPerformedClassName","content","disabled","media","animationCardAttachmentStyleSet","useStyleSet","React","profile","url","index","CommonCard_default","PropTypes","AnimationCardContent_default","AnimationCardAttachment","content","disabled","React","AnimationCardContent_default","PropTypes","AnimationCardAttachment_default","PropTypes","React","Components","PropTypes","React","AudioContent","Components","AudioCardContent","actionPerformedClassName","content","disabled","audioCardAttachmentStyleSet","useStyleSet","autostart","autoloop","imageURL","media","React","url","index","CommonCard_default","PropTypes","AudioCardContent_default","AudioCardAttachment","content","disabled","React","AudioCardContent_default","PropTypes","AudioCardAttachment_default","PropTypes","React","hooks","PropTypes","React","useMemo","useDirection","hooks","HeroCardContent","actionPerformedClassName","content","disabled","adaptiveCardsPackage","useAdaptiveCardsPackage","styleOptions","useStyleOptions","direction","builtCard","useMemo","builder","AdaptiveCardBuilder","image","React","AdaptiveCardRenderer_default","PropTypes","HeroCardContent_default","HeroCardAttachment","content","disabled","React","HeroCardContent_default","PropTypes","HeroCardAttachment_default","PropTypes","React","hooks","PropTypes","React","useMemo","useDirection","hooks","OAuthCardContent","actionPerformedClassName","content","disabled","adaptiveCardsPackage","useAdaptiveCardsPackage","direction","styleOptions","useStyleOptions","builtCard","useMemo","builder","AdaptiveCardBuilder","React","AdaptiveCardRenderer_default","PropTypes","OAuthCardContent_default","OAuthCardAttachment","content","disabled","React","OAuthCardContent_default","PropTypes","OAuthCardAttachment_default","PropTypes","React","hooks","PropTypes","React","useMemo","useDirection","useLocalizer","hooks","nullOrUndefined","obj","ReceiptCardContent","actionPerformedClassName","content","disabled","adaptiveCardsPackage","useAdaptiveCardsPackage","direction","styleOptions","useStyleOptions","localize","taxText","totalText","vatText","builtCard","useMemo","builder","AdaptiveCardBuilder","HorizontalAlignment","TextSize","TextWeight","buttons","facts","items","tax","title","total","vat","richCardWrapTitle","firstFactColumn","lastFactColumn","key","value","alt","imageTap","url","price","quantity","subtitle","tap","text","itemColumns","itemImageColumn","columns","itemTitleColumn","itemPriceColumn","vatCol","taxCol","totalCol","React","AdaptiveCardRenderer_default","PropTypes","ReceiptCardContent_default","ReceiptCardAttachment","content","disabled","React","ReceiptCardContent_default","PropTypes","ReceiptCardAttachment_default","PropTypes","React","PropTypes","React","SignInCardContent","actionPerformedClassName","content","disabled","animationCardAttachmentStyleSet","useStyleSet","React","CommonCard_default","PropTypes","SignInCardContent_default","SignInCardAttachment","content","disabled","React","SignInCardContent_default","PropTypes","SignInCardAttachment_default","PropTypes","React","hooks","PropTypes","React","useMemo","useDirection","hooks","ThumbnailCardContent","actionPerformedClassName","content","disabled","adaptiveCardsPackage","useAdaptiveCardsPackage","direction","styleOptions","useStyleOptions","builtCard","useMemo","builder","AdaptiveCardBuilder","TextSize","TextWeight","buttons","images","subtitle","text","title","richCardWrapTitle","firstColumn","lastColumn","alt","tap","url","React","AdaptiveCardRenderer_default","PropTypes","ThumbnailCardContent_default","ThumbnailCardAttachment","content","disabled","React","ThumbnailCardContent_default","PropTypes","ThumbnailCardAttachment_default","PropTypes","React","Components","PropTypes","React","VideoContent","Components","VideoCardContent","actionPerformedClassName","content","disabled","autoloop","autostart","imageURL","media","audioCardAttachmentStyleSet","useStyleSet","React","url","index","CommonCard_default","PropTypes","VideoCardContent_default","VideoCardAttachment","content","disabled","React","VideoCardContent_default","PropTypes","VideoCardAttachment_default","createAdaptiveCardsAttachmentMiddleware","next","args","attachment","React","HeroCardAttachment_default","AdaptiveCardAttachment_default","AnimationCardAttachment_default","AudioCardAttachment_default","OAuthCardAttachment_default","ReceiptCardAttachment_default","SignInCardAttachment_default","ThumbnailCardAttachment_default","VideoCardAttachment_default","normalizeStyleOptions","AdaptiveCardRenderer_default","cardPushButtonBackgroundColor","cardPushButtonTextColor","accent","paddingRegular","primaryFont","AnimationCardAttachment","AudioCardAttachment","paddingRegular","createAdaptiveCardsStyleSet","options","strictOptions","normalizeStyleOptions","AdaptiveCardRenderer_default","AnimationCardAttachment","AudioCardAttachment","onErrorResumeNext","MarkdownIt","sanitizeHTML","parseDocumentFromString","serializeDocumentIntoString","markdownItAttrs","MARKDOWN_ATTRS_LEFT_DELIMITER","MARKDOWN_ATTRS_LEFT_DELIMITER_PATTERN","MARKDOWN_ATTRS_RIGHT_DELIMITER","MARKDOWN_ATTRS_RIGHT_DELIMITER_PATTERN","ariaLabel","markdown","pre","_","valueInsideQuotes","post","html","ariaLabel_default","pre","markdown","carriageReturn","ZERO_WIDTH_SPACE","iterateNodeList","nodeList","length","index","TRANSPARENT_GIF","setOrRemoveAttribute","element","attributeName","setter","betterLinkDocumentMod","document","decorator","anchor","decoration","ariaLabel","asButton","className","iconAlt","iconClassName","rel","target","title","wrapZeroWidthSpace","image","button","fromMarkdown","isDefinition","node","iterateLinkDefinitions","markdown","topLevelNode","SANITIZE_HTML_OPTIONS","render","markdown","markdownRespectCRLF","markdownRenderHTML","externalLinkAlt","linkDefinitions","iterateLinkDefinitions","MARKDOWN_IT_INIT","pre","decorate","href","textContent","decoration","ariaLabelSegments","classes","linkDefinition","url","protocol","onErrorResumeNext","scheme","value","htmlAfterMarkdown","post","MarkdownIt","ariaLabel_default","documentAfterMarkdown","parseDocumentFromString","betterLinkDocumentMod","htmlAfterBetterLink","serializeDocumentIntoString","sanitizeHTML","useComposerProps","attachmentForScreenReaderMiddleware","attachmentMiddleware","renderMarkdown","styleOptions","styleSet","patchedAttachmentMiddleware","useMemo","createAdaptiveCardsAttachmentMiddleware","patchedAttachmentForScreenReaderMiddleware","extraStyleSet","createAdaptiveCardsStyleSet","patchedRenderMarkdown","render","adaptiveCardHostConfigDeprecation","warnOnce","AddFullBundle","adaptiveCardHostConfig","adaptiveCardsHostConfig","adaptiveCardsPackage","attachmentForScreenReaderMiddleware","attachmentMiddleware","children","renderMarkdown","styleOptions","styleSet","patchedProps","useComposerProps","singleToArray","React","AdaptiveCardsComposer_default","AddFullBundle_default","Composer","Components","FullComposer","props","React","AddFullBundle_default","extraProps","PropTypes","FullComposer_default","ReactWebChat","React","FullReactWebChat","props","React","AddFullBundle_default","extraProps","ReactWebChat","FullReactWebChat_default","import_SpeechServices","init_Exports","bytesPerSample","settings","init_microsoft_cognitiveservices_speech_sdk","init_microsoft_cognitiveservices_speech_sdk","init_Exports","init_AudioStreamFormat","isForbiddenPropertyName","v4","import_promise","pDefer","deferred","_Promise","resolve","reject","src_default","SYMBOL_DEVICE_INFO_DEFERRED","SYMBOL_EVENTS","SYMBOL_FORMAT_DEFERRED","SYMBOL_OPTIONS","CustomAudioInputStream","AudioInputStream","options","normalizedOptions","v4","src_default","EventSource","event","Events","AudioSourceInitializingEvent","AudioSourceReadyEvent","error","AudioSourceErrorEvent","audioNodeId","AudioStreamNodeAttachingEvent","AudioStreamNodeAttachedEvent","AudioStreamNodeErrorEvent","AudioStreamNodeDetachedEvent","AudioSourceOffEvent","message","args","audioStreamNode","deviceInfo","format","AudioStreamFormatImpl","connectivity","manufacturer","model","type","bitsPerSample","channels","samplesPerSec","isForbiddenPropertyName","CustomAudioInputStream_default","SYMBOL_ATTACH","SYMBOL_TURN_OFF","CreateAudioConfigAudioInputStream","CustomAudioInputStream_default","attach","debug","turnOff","audioNodeId","createAudioConfig","options","AudioConfig","createAudioContext","getUserMedia","constraints","navigator","resolve","reject","DEFAULT_BUFFER_DURATION_IN_MS","PCM_RECORDER_HARDCODED_SETTINGS","PCM_RECORDER_HARDCODED_FORMAT","createMicrophoneAudioConfig","options","audioConstraints","audioContext","debug","enableTelemetry","pcmRecorderWorkletUrl","bufferDurationInMS","pcmRecorder","PcmRecorder","createAudioConfig","audioNodeId","mediaStream","getUserMedia","firstAudioTrack","outputStream","ChunkedArrayBufferStream","bytesPerSample","track","createMicrophoneAudioConfigAndAudioContext","audioInputDeviceId","createAudioContext","createCognitiveServicesSpeechServicesPonyfillFactory","audioConfig","audioContext","audioInputDeviceId","credentials","enableTelemetry","speechRecognitionEndpointId","speechSynthesisDeploymentId","speechSynthesisOutputFormat","textNormalization","createMicrophoneAudioConfigAndAudioContext","referenceGrammarID","SpeechGrammarList","SpeechRecognition","speechSynthesis","SpeechSynthesisUtterance","createPonyfill","createAdapters","DEFAULT_LANGUAGE","createDirectLineSpeechAdapters","audioConfig","audioContext","audioInputDeviceId","enableInternalHTTPSupport","enableTelemetry","fetchCredentials","speechRecognitionEndpointId","speechRecognitionLanguage","speechSynthesisDeploymentId","speechSynthesisOutputFormat","textNormalization","userID","username","createMicrophoneAudioConfigAndAudioContext","createAdapters","createStyleSet","createFullStyleSet","options","createStyleSet","createAdaptiveCardsStyleSet","renderWebChat","FullReactWebChat_default","buildInfo","createDirectLine","options","version","createDirectLineAppServiceExtension","patchedHooks","hooks","useAdaptiveCardsHostConfig","useAdaptiveCardsPackage","useStyleOptions","useStyleSet","AdditionalComponents","AdaptiveCardContent_default","AnimationCardContent_default","AudioCardContent_default","FullComposer_default","HeroCardContent_default","OAuthCardContent_default","ReceiptCardContent_default","SignInCardContent_default","ThumbnailCardContent_default","VideoCardContent_default","Components","src_default","buildInfo","Components","createAdaptiveCardsAttachmentMiddleware","createCognitiveServicesSpeechServicesPonyfillFactory","createDirectLine","createDirectLineAppServiceExtension","createDirectLineSpeechAdapters","createFullStyleSet","patchedHooks","FullReactWebChat_default","render","renderWebChat","withEmoji","addVersion"]}