1 |
- {"ast":null,"code":"\"use strict\";\n\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\nvar _asyncToGenerator = require(\"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/asyncToGenerator.js\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ServiceRecognizerBase = void 0;\nconst Exports_js_1 = require(\"../common.browser/Exports.js\");\nconst Exports_js_2 = require(\"../common/Exports.js\");\nconst Exports_js_3 = require(\"../sdk/Exports.js\");\nconst Exports_js_4 = require(\"./Exports.js\");\nconst SpeechConnectionMessage_Internal_js_1 = require(\"./SpeechConnectionMessage.Internal.js\");\nclass ServiceRecognizerBase {\n constructor(authentication, connectionFactory, audioSource, recognizerConfig, recognizer) {\n // A promise for a configured connection.\n // Do not consume directly, call fetchConnection instead.\n this.privConnectionConfigurationPromise = undefined;\n // A promise for a connection, but one that has not had the speech context sent yet.\n // Do not consume directly, call fetchConnection instead.\n this.privConnectionPromise = undefined;\n this.privSetTimeout = setTimeout;\n this.privIsLiveAudio = false;\n this.privAverageBytesPerMs = 0;\n this.privEnableSpeakerId = false;\n this.privExpectContentAssessmentResponse = false;\n this.recognizeOverride = undefined;\n this.recognizeSpeaker = undefined;\n this.disconnectOverride = undefined;\n this.receiveMessageOverride = undefined;\n this.sendPrePayloadJSONOverride = undefined;\n this.postConnectImplOverride = undefined;\n this.configConnectionOverride = undefined;\n this.handleSpeechPhraseMessage = undefined;\n this.handleSpeechHypothesisMessage = undefined;\n if (!authentication) {\n throw new Exports_js_2.ArgumentNullError(\"authentication\");\n }\n if (!connectionFactory) {\n throw new Exports_js_2.ArgumentNullError(\"connectionFactory\");\n }\n if (!audioSource) {\n throw new Exports_js_2.ArgumentNullError(\"audioSource\");\n }\n if (!recognizerConfig) {\n throw new Exports_js_2.ArgumentNullError(\"recognizerConfig\");\n }\n this.privEnableSpeakerId = recognizerConfig.isSpeakerDiarizationEnabled;\n this.privMustReportEndOfStream = false;\n this.privAuthentication = authentication;\n this.privConnectionFactory = connectionFactory;\n this.privAudioSource = audioSource;\n this.privRecognizerConfig = recognizerConfig;\n this.privIsDisposed = false;\n this.privRecognizer = recognizer;\n this.privRequestSession = new Exports_js_4.RequestSession(this.privAudioSource.id());\n this.privConnectionEvents = new Exports_js_2.EventSource();\n this.privServiceEvents = new Exports_js_2.EventSource();\n this.privDynamicGrammar = new Exports_js_4.DynamicGrammarBuilder();\n this.privSpeechContext = new Exports_js_4.SpeechContext(this.privDynamicGrammar);\n this.privAgentConfig = new Exports_js_4.AgentConfig();\n const webWorkerLoadType = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.WebWorkerLoadType, \"on\").toLowerCase();\n if (webWorkerLoadType === \"on\" && typeof Blob !== \"undefined\" && typeof Worker !== \"undefined\") {\n this.privSetTimeout = Exports_js_2.Timeout.setTimeout;\n } else {\n if (typeof window !== \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.privSetTimeout = window.setTimeout.bind(window);\n }\n if (typeof globalThis !== \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.privSetTimeout = globalThis.setTimeout.bind(globalThis);\n }\n }\n this.connectionEvents.attach(connectionEvent => {\n if (connectionEvent.name === \"ConnectionClosedEvent\") {\n const connectionClosedEvent = connectionEvent;\n if (connectionClosedEvent.statusCode === 1003 || connectionClosedEvent.statusCode === 1007 || connectionClosedEvent.statusCode === 1002 || connectionClosedEvent.statusCode === 4000 || this.privRequestSession.numConnectionAttempts > this.privRecognizerConfig.maxRetryCount) {\n void this.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, connectionClosedEvent.statusCode === 1007 ? Exports_js_3.CancellationErrorCode.BadRequestParameters : Exports_js_3.CancellationErrorCode.ConnectionFailure, `${connectionClosedEvent.reason} websocket error code: ${connectionClosedEvent.statusCode}`);\n }\n }\n });\n if (this.privEnableSpeakerId) {\n this.privDiarizationSessionId = Exports_js_2.createNoDashGuid();\n }\n this.setLanguageIdJson();\n this.setOutputDetailLevelJson();\n }\n setTranslationJson() {\n const targetLanguages = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationToLanguages, undefined);\n if (targetLanguages !== undefined) {\n const languages = targetLanguages.split(\",\");\n const translationVoice = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationVoice, undefined);\n const action = translationVoice !== undefined ? \"Synthesize\" : \"None\";\n this.privSpeechContext.setSection(\"translation\", {\n onSuccess: {\n action\n },\n output: {\n interimResults: {\n mode: \"Always\"\n }\n },\n targetLanguages: languages\n });\n if (translationVoice !== undefined) {\n const languageToVoiceMap = {};\n for (const lang of languages) {\n languageToVoiceMap[lang] = translationVoice;\n }\n this.privSpeechContext.setSection(\"synthesis\", {\n defaultVoices: languageToVoiceMap\n });\n }\n }\n }\n setSpeechSegmentationTimeoutJson() {\n const speechSegmentationTimeout = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.Speech_SegmentationSilenceTimeoutMs, undefined);\n if (speechSegmentationTimeout !== undefined) {\n const mode = this.recognitionMode === Exports_js_4.RecognitionMode.Conversation ? \"CONVERSATION\" : this.recognitionMode === Exports_js_4.RecognitionMode.Dictation ? \"DICTATION\" : \"INTERACTIVE\";\n const segmentationSilenceTimeoutMs = parseInt(speechSegmentationTimeout, 10);\n const phraseDetection = this.privSpeechContext.getSection(\"phraseDetection\");\n phraseDetection.mode = mode;\n phraseDetection[mode] = {\n segmentation: {\n mode: \"Custom\",\n segmentationSilenceTimeoutMs\n }\n };\n this.privSpeechContext.setSection(\"phraseDetection\", phraseDetection);\n }\n }\n setLanguageIdJson() {\n const phraseDetection = this.privSpeechContext.getSection(\"phraseDetection\");\n if (this.privRecognizerConfig.autoDetectSourceLanguages !== undefined) {\n const sourceLanguages = this.privRecognizerConfig.autoDetectSourceLanguages.split(\",\");\n let speechContextLidMode;\n if (this.privRecognizerConfig.languageIdMode === \"Continuous\") {\n speechContextLidMode = \"DetectContinuous\";\n } else {\n // recognizerConfig.languageIdMode === \"AtStart\"\n speechContextLidMode = \"DetectAtAudioStart\";\n }\n this.privSpeechContext.setSection(\"languageId\", {\n Priority: \"PrioritizeLatency\",\n languages: sourceLanguages,\n mode: speechContextLidMode,\n onSuccess: {\n action: \"Recognize\"\n },\n onUnknown: {\n action: \"None\"\n }\n });\n this.privSpeechContext.setSection(\"phraseOutput\", {\n interimResults: {\n resultType: \"Auto\"\n },\n phraseResults: {\n resultType: \"Always\"\n }\n });\n const customModels = this.privRecognizerConfig.sourceLanguageModels;\n if (customModels !== undefined) {\n phraseDetection.customModels = customModels;\n phraseDetection.onInterim = {\n action: \"None\"\n };\n phraseDetection.onSuccess = {\n action: \"None\"\n };\n }\n }\n const targetLanguages = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationToLanguages, undefined);\n if (targetLanguages !== undefined) {\n phraseDetection.onInterim = {\n action: \"Translate\"\n };\n phraseDetection.onSuccess = {\n action: \"Translate\"\n };\n this.privSpeechContext.setSection(\"phraseOutput\", {\n interimResults: {\n resultType: \"None\"\n },\n phraseResults: {\n resultType: \"None\"\n }\n });\n }\n this.privSpeechContext.setSection(\"phraseDetection\", phraseDetection);\n }\n setOutputDetailLevelJson() {\n if (this.privEnableSpeakerId) {\n const requestWordLevelTimestamps = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceResponse_RequestWordLevelTimestamps, \"false\").toLowerCase();\n if (requestWordLevelTimestamps === \"true\") {\n this.privSpeechContext.setWordLevelTimings();\n } else {\n const outputFormat = this.privRecognizerConfig.parameters.getProperty(Exports_js_4.OutputFormatPropertyName, Exports_js_3.OutputFormat[Exports_js_3.OutputFormat.Simple]).toLowerCase();\n if (outputFormat === Exports_js_3.OutputFormat[Exports_js_3.OutputFormat.Detailed].toLocaleLowerCase()) {\n this.privSpeechContext.setDetailedOutputFormat();\n }\n }\n }\n }\n get isSpeakerDiarizationEnabled() {\n return this.privEnableSpeakerId;\n }\n get audioSource() {\n return this.privAudioSource;\n }\n get speechContext() {\n return this.privSpeechContext;\n }\n get dynamicGrammar() {\n return this.privDynamicGrammar;\n }\n get agentConfig() {\n return this.privAgentConfig;\n }\n set conversationTranslatorToken(token) {\n this.privRecognizerConfig.parameters.setProperty(Exports_js_3.PropertyId.ConversationTranslator_Token, token);\n }\n set voiceProfileType(type) {\n this.privRecognizerConfig.parameters.setProperty(Exports_js_3.PropertyId.SpeechServiceConnection_SpeakerIdMode, type);\n }\n set authentication(auth) {\n this.privAuthentication = auth;\n }\n isDisposed() {\n return this.privIsDisposed;\n }\n dispose(reason) {\n var _this = this;\n return _asyncToGenerator(function* () {\n _this.privIsDisposed = true;\n if (_this.privConnectionConfigurationPromise !== undefined) {\n try {\n const connection = yield _this.privConnectionConfigurationPromise;\n yield connection.dispose(reason);\n } catch (error) {\n // The connection is in a bad state. But we're trying to kill it, so...\n return;\n }\n }\n })();\n }\n get connectionEvents() {\n return this.privConnectionEvents;\n }\n get serviceEvents() {\n return this.privServiceEvents;\n }\n get recognitionMode() {\n return this.privRecognizerConfig.recognitionMode;\n }\n recognize(recoMode, successCallback, errorCallBack) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2.recognizeOverride !== undefined) {\n yield _this2.recognizeOverride(recoMode, successCallback, errorCallBack);\n return;\n }\n // Clear the existing configuration promise to force a re-transmission of config and context.\n _this2.privConnectionConfigurationPromise = undefined;\n _this2.privRecognizerConfig.recognitionMode = recoMode;\n _this2.setSpeechSegmentationTimeoutJson();\n _this2.setTranslationJson();\n _this2.privSuccessCallback = successCallback;\n _this2.privErrorCallback = errorCallBack;\n _this2.privRequestSession.startNewRecognition();\n _this2.privRequestSession.listenForServiceTelemetry(_this2.privAudioSource.events);\n // Start the connection to the service. The promise this will create is stored and will be used by configureConnection().\n const conPromise = _this2.connectImpl();\n let audioNode;\n try {\n const audioStreamNode = yield _this2.audioSource.attach(_this2.privRequestSession.audioNodeId);\n const format = yield _this2.audioSource.format;\n const deviceInfo = yield _this2.audioSource.deviceInfo;\n _this2.privIsLiveAudio = deviceInfo.type && deviceInfo.type === Exports_js_4.type.Microphones;\n audioNode = new Exports_js_1.ReplayableAudioNode(audioStreamNode, format.avgBytesPerSec);\n yield _this2.privRequestSession.onAudioSourceAttachCompleted(audioNode, false);\n _this2.privRecognizerConfig.SpeechServiceConfig.Context.audio = {\n source: deviceInfo\n };\n } catch (error) {\n yield _this2.privRequestSession.onStopRecognizing();\n throw error;\n }\n try {\n yield conPromise;\n } catch (error) {\n yield _this2.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.ConnectionFailure, error);\n return;\n }\n const sessionStartEventArgs = new Exports_js_3.SessionEventArgs(_this2.privRequestSession.sessionId);\n if (!!_this2.privRecognizer.sessionStarted) {\n _this2.privRecognizer.sessionStarted(_this2.privRecognizer, sessionStartEventArgs);\n }\n void _this2.receiveMessage();\n const audioSendPromise = _this2.sendAudio(audioNode);\n audioSendPromise.catch( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (error) {\n yield _this2.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.RuntimeError, error);\n });\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }());\n return;\n })();\n }\n stopRecognizing() {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (_this3.privRequestSession.isRecognizing) {\n try {\n yield _this3.audioSource.turnOff();\n yield _this3.sendFinalAudio();\n yield _this3.privRequestSession.onStopRecognizing();\n yield _this3.privRequestSession.turnCompletionPromise;\n } finally {\n yield _this3.privRequestSession.dispose();\n }\n }\n return;\n })();\n }\n connect() {\n var _this4 = this;\n return _asyncToGenerator(function* () {\n yield _this4.connectImpl();\n return Promise.resolve();\n })();\n }\n connectAsync(cb, err) {\n this.connectImpl().then(() => {\n try {\n if (!!cb) {\n cb();\n }\n } catch (e) {\n if (!!err) {\n err(e);\n }\n }\n }, reason => {\n try {\n if (!!err) {\n err(reason);\n }\n /* eslint-disable no-empty */\n } catch (error) {}\n });\n }\n disconnect() {\n var _this5 = this;\n return _asyncToGenerator(function* () {\n yield _this5.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.NoError, \"Disconnecting\");\n if (_this5.disconnectOverride !== undefined) {\n yield _this5.disconnectOverride();\n }\n if (_this5.privConnectionPromise !== undefined) {\n try {\n yield (yield _this5.privConnectionPromise).dispose();\n } catch (error) {}\n }\n _this5.privConnectionPromise = undefined;\n })();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n sendMessage(message) {\n return;\n }\n sendNetworkMessage(path, payload) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n const type = typeof payload === \"string\" ? Exports_js_2.MessageType.Text : Exports_js_2.MessageType.Binary;\n const contentType = typeof payload === \"string\" ? \"application/json\" : \"\";\n const connection = yield _this6.fetchConnection();\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(type, path, _this6.privRequestSession.requestId, contentType, payload));\n })();\n }\n set activityTemplate(messagePayload) {\n this.privActivityTemplate = messagePayload;\n }\n get activityTemplate() {\n return this.privActivityTemplate;\n }\n set expectContentAssessmentResponse(value) {\n this.privExpectContentAssessmentResponse = value;\n }\n sendTelemetryData() {\n var _this7 = this;\n return _asyncToGenerator(function* () {\n const telemetryData = _this7.privRequestSession.getTelemetry();\n if (ServiceRecognizerBase.telemetryDataEnabled !== true || _this7.privIsDisposed || null === telemetryData) {\n return;\n }\n if (!!ServiceRecognizerBase.telemetryData) {\n try {\n ServiceRecognizerBase.telemetryData(telemetryData);\n /* eslint-disable no-empty */\n } catch {}\n }\n const connection = yield _this7.fetchConnection();\n yield connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"telemetry\", _this7.privRequestSession.requestId, \"application/json\", telemetryData));\n })();\n }\n // Cancels recognition.\n cancelRecognitionLocal(cancellationReason, errorCode, error) {\n var _this8 = this;\n return _asyncToGenerator(function* () {\n if (!!_this8.privRequestSession.isRecognizing) {\n yield _this8.privRequestSession.onStopRecognizing();\n _this8.cancelRecognition(_this8.privRequestSession.sessionId, _this8.privRequestSession.requestId, cancellationReason, errorCode, error);\n }\n })();\n }\n receiveMessage() {\n var _this9 = this;\n return _asyncToGenerator(function* () {\n try {\n if (_this9.privIsDisposed) {\n // We're done.\n return;\n }\n let connection = yield _this9.fetchConnection();\n const message = yield connection.read();\n if (_this9.receiveMessageOverride !== undefined) {\n return _this9.receiveMessageOverride();\n }\n // indicates we are draining the queue and it came with no message;\n if (!message) {\n return _this9.receiveMessage();\n }\n _this9.privServiceHasSentMessage = true;\n const connectionMessage = SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage.fromConnectionMessage(message);\n if (connectionMessage.requestId.toLowerCase() === _this9.privRequestSession.requestId.toLowerCase()) {\n switch (connectionMessage.path.toLowerCase()) {\n case \"turn.start\":\n _this9.privMustReportEndOfStream = true;\n _this9.privRequestSession.onServiceTurnStartResponse();\n break;\n case \"speech.startdetected\":\n const speechStartDetected = Exports_js_4.SpeechDetected.fromJSON(connectionMessage.textBody);\n const speechStartEventArgs = new Exports_js_3.RecognitionEventArgs(speechStartDetected.Offset, _this9.privRequestSession.sessionId);\n if (!!_this9.privRecognizer.speechStartDetected) {\n _this9.privRecognizer.speechStartDetected(_this9.privRecognizer, speechStartEventArgs);\n }\n break;\n case \"speech.enddetected\":\n let json;\n if (connectionMessage.textBody.length > 0) {\n json = connectionMessage.textBody;\n } else {\n // If the request was empty, the JSON returned is empty.\n json = \"{ Offset: 0 }\";\n }\n const speechStopDetected = Exports_js_4.SpeechDetected.fromJSON(json);\n const speechStopEventArgs = new Exports_js_3.RecognitionEventArgs(speechStopDetected.Offset + _this9.privRequestSession.currentTurnAudioOffset, _this9.privRequestSession.sessionId);\n if (!!_this9.privRecognizer.speechEndDetected) {\n _this9.privRecognizer.speechEndDetected(_this9.privRecognizer, speechStopEventArgs);\n }\n break;\n case \"turn.end\":\n yield _this9.sendTelemetryData();\n if (_this9.privRequestSession.isSpeechEnded && _this9.privMustReportEndOfStream) {\n _this9.privMustReportEndOfStream = false;\n yield _this9.cancelRecognitionLocal(Exports_js_3.CancellationReason.EndOfStream, Exports_js_3.CancellationErrorCode.NoError, undefined);\n }\n const sessionStopEventArgs = new Exports_js_3.SessionEventArgs(_this9.privRequestSession.sessionId);\n yield _this9.privRequestSession.onServiceTurnEndResponse(_this9.privRecognizerConfig.isContinuousRecognition);\n if (!_this9.privRecognizerConfig.isContinuousRecognition || _this9.privRequestSession.isSpeechEnded || !_this9.privRequestSession.isRecognizing) {\n if (!!_this9.privRecognizer.sessionStopped) {\n _this9.privRecognizer.sessionStopped(_this9.privRecognizer, sessionStopEventArgs);\n }\n return;\n } else {\n connection = yield _this9.fetchConnection();\n yield _this9.sendPrePayloadJSON(connection);\n }\n break;\n default:\n if (!(yield _this9.processTypeSpecificMessages(connectionMessage))) {\n // here are some messages that the derived class has not processed, dispatch them to connect class\n if (!!_this9.privServiceEvents) {\n _this9.serviceEvents.onEvent(new Exports_js_2.ServiceEvent(connectionMessage.path.toLowerCase(), connectionMessage.textBody));\n }\n }\n }\n }\n return _this9.receiveMessage();\n } catch (error) {\n return null;\n }\n })();\n }\n updateSpeakerDiarizationAudioOffset() {\n const bytesSent = this.privRequestSession.recognitionBytesSent;\n const audioOffsetMs = this.privAverageBytesPerMs !== 0 ? bytesSent / this.privAverageBytesPerMs : 0;\n this.privSpeechContext.setSpeakerDiarizationAudioOffsetMs(audioOffsetMs);\n }\n sendSpeechContext(connection, generateNewRequestId) {\n if (this.privEnableSpeakerId) {\n this.updateSpeakerDiarizationAudioOffset();\n }\n const speechContextJson = this.speechContext.toJSON();\n if (generateNewRequestId) {\n this.privRequestSession.onSpeechContext();\n }\n if (speechContextJson) {\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"speech.context\", this.privRequestSession.requestId, \"application/json\", speechContextJson));\n }\n return;\n }\n noOp() {\n // operation not supported\n return;\n }\n // Encapsulated for derived service recognizers that need to send additional JSON\n sendPrePayloadJSON(connection, generateNewRequestId = true) {\n var _this10 = this;\n return _asyncToGenerator(function* () {\n if (_this10.sendPrePayloadJSONOverride !== undefined) {\n return _this10.sendPrePayloadJSONOverride(connection);\n }\n yield _this10.sendSpeechContext(connection, generateNewRequestId);\n yield _this10.sendWaveHeader(connection);\n return;\n })();\n }\n sendWaveHeader(connection) {\n var _this11 = this;\n return _asyncToGenerator(function* () {\n const format = yield _this11.audioSource.format;\n // this.writeBufferToConsole(format.header);\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", _this11.privRequestSession.requestId, \"audio/x-wav\", format.header));\n })();\n }\n // Establishes a websocket connection to the end point.\n connectImpl() {\n if (this.privConnectionPromise !== undefined) {\n return this.privConnectionPromise.then(connection => {\n if (connection.state() === Exports_js_2.ConnectionState.Disconnected) {\n this.privConnectionId = null;\n this.privConnectionPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.connectImpl();\n }\n return this.privConnectionPromise;\n }, () => {\n this.privConnectionId = null;\n this.privConnectionPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.connectImpl();\n });\n }\n this.privConnectionPromise = this.retryableConnect();\n // Attach an empty handler to allow the promise to run in the background while\n // other startup events happen. It'll eventually be awaited on.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.privConnectionPromise.catch(() => {});\n if (this.postConnectImplOverride !== undefined) {\n return this.postConnectImplOverride(this.privConnectionPromise);\n }\n return this.privConnectionPromise;\n }\n sendSpeechServiceConfig(connection, requestSession, SpeechServiceConfigJson) {\n requestSession.onSpeechContext();\n // filter out anything that is not required for the service to work.\n if (ServiceRecognizerBase.telemetryDataEnabled !== true) {\n const withTelemetry = JSON.parse(SpeechServiceConfigJson);\n const replacement = {\n context: {\n system: withTelemetry.context.system\n }\n };\n SpeechServiceConfigJson = JSON.stringify(replacement);\n }\n if (this.privRecognizerConfig.parameters.getProperty(\"f0f5debc-f8c9-4892-ac4b-90a7ab359fd2\", \"false\").toLowerCase() === \"true\") {\n const json = JSON.parse(SpeechServiceConfigJson);\n json.context.DisableReferenceChannel = \"True\";\n json.context.MicSpec = \"1_0_0\";\n SpeechServiceConfigJson = JSON.stringify(json);\n }\n if (SpeechServiceConfigJson) {\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"speech.config\", requestSession.requestId, \"application/json\", SpeechServiceConfigJson));\n }\n return;\n }\n fetchConnection() {\n var _this12 = this;\n return _asyncToGenerator(function* () {\n if (_this12.privConnectionConfigurationPromise !== undefined) {\n return _this12.privConnectionConfigurationPromise.then(connection => {\n if (connection.state() === Exports_js_2.ConnectionState.Disconnected) {\n _this12.privConnectionId = null;\n _this12.privConnectionConfigurationPromise = undefined;\n _this12.privServiceHasSentMessage = false;\n return _this12.fetchConnection();\n }\n return _this12.privConnectionConfigurationPromise;\n }, () => {\n _this12.privConnectionId = null;\n _this12.privConnectionConfigurationPromise = undefined;\n _this12.privServiceHasSentMessage = false;\n return _this12.fetchConnection();\n });\n }\n _this12.privConnectionConfigurationPromise = _this12.configureConnection();\n return yield _this12.privConnectionConfigurationPromise;\n })();\n }\n sendAudio(audioStreamNode) {\n var _this13 = this;\n return _asyncToGenerator(function* () {\n const audioFormat = yield _this13.audioSource.format;\n _this13.privAverageBytesPerMs = audioFormat.avgBytesPerSec / 1000;\n // The time we last sent data to the service.\n let nextSendTime = Date.now();\n // Max amount to send before we start to throttle\n const fastLaneSizeMs = _this13.privRecognizerConfig.parameters.getProperty(\"SPEECH-TransmitLengthBeforThrottleMs\", \"5000\");\n const maxSendUnthrottledBytes = audioFormat.avgBytesPerSec / 1000 * parseInt(fastLaneSizeMs, 10);\n const startRecogNumber = _this13.privRequestSession.recogNumber;\n const _readAndUploadCycle = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(function* () {\n // If speech is done, stop sending audio.\n if (!_this13.privIsDisposed && !_this13.privRequestSession.isSpeechEnded && _this13.privRequestSession.isRecognizing && _this13.privRequestSession.recogNumber === startRecogNumber) {\n const connection = yield _this13.fetchConnection();\n const audioStreamChunk = yield audioStreamNode.read();\n // we have a new audio chunk to upload.\n if (_this13.privRequestSession.isSpeechEnded) {\n // If service already recognized audio end then don't send any more audio\n return;\n }\n let payload;\n let sendDelay;\n if (!audioStreamChunk || audioStreamChunk.isEnd) {\n payload = null;\n sendDelay = 0;\n } else {\n payload = audioStreamChunk.buffer;\n _this13.privRequestSession.onAudioSent(payload.byteLength);\n if (maxSendUnthrottledBytes >= _this13.privRequestSession.bytesSent) {\n sendDelay = 0;\n } else {\n sendDelay = Math.max(0, nextSendTime - Date.now());\n }\n }\n if (0 !== sendDelay) {\n yield _this13.delay(sendDelay);\n }\n if (payload !== null) {\n nextSendTime = Date.now() + payload.byteLength * 1000 / (audioFormat.avgBytesPerSec * 2);\n }\n // Are we still alive?\n if (!_this13.privIsDisposed && !_this13.privRequestSession.isSpeechEnded && _this13.privRequestSession.isRecognizing && _this13.privRequestSession.recogNumber === startRecogNumber) {\n connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", _this13.privRequestSession.requestId, null, payload)).catch(() => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n _this13.privRequestSession.onServiceTurnEndResponse(_this13.privRecognizerConfig.isContinuousRecognition).catch(() => {});\n });\n if (!(audioStreamChunk !== null && audioStreamChunk !== void 0 && audioStreamChunk.isEnd)) {\n // this.writeBufferToConsole(payload);\n // Regardless of success or failure, schedule the next upload.\n // If the underlying connection was broken, the next cycle will\n // get a new connection and re-transmit missing audio automatically.\n return _readAndUploadCycle();\n } else {\n // the audio stream has been closed, no need to schedule next\n // read-upload cycle.\n if (!_this13.privIsLiveAudio) {\n _this13.privRequestSession.onSpeechEnded();\n }\n }\n }\n }\n });\n return function readAndUploadCycle() {\n return _ref2.apply(this, arguments);\n };\n }();\n return _readAndUploadCycle();\n })();\n }\n retryableConnect() {\n var _this14 = this;\n return _asyncToGenerator(function* () {\n let isUnAuthorized = false;\n _this14.privAuthFetchEventId = Exports_js_2.createNoDashGuid();\n const sessionId = _this14.privRequestSession.sessionId;\n _this14.privConnectionId = sessionId !== undefined ? sessionId : Exports_js_2.createNoDashGuid();\n _this14.privRequestSession.onPreConnectionStart(_this14.privAuthFetchEventId, _this14.privConnectionId);\n let lastStatusCode = 0;\n let lastReason = \"\";\n while (_this14.privRequestSession.numConnectionAttempts <= _this14.privRecognizerConfig.maxRetryCount) {\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\n // facing event when a connection fails to let them try and provide new auth information.\n const authPromise = isUnAuthorized ? _this14.privAuthentication.fetchOnExpiry(_this14.privAuthFetchEventId) : _this14.privAuthentication.fetch(_this14.privAuthFetchEventId);\n const auth = yield authPromise;\n yield _this14.privRequestSession.onAuthCompleted(false);\n // Create the connection\n const connection = _this14.privConnectionFactory.create(_this14.privRecognizerConfig, auth, _this14.privConnectionId);\n // Attach the telemetry handlers.\n _this14.privRequestSession.listenForServiceTelemetry(connection.events);\n // Attach to the underlying event. No need to hold onto the detach pointers as in the event the connection goes away,\n // it'll stop sending events.\n connection.events.attach(event => {\n _this14.connectionEvents.onEvent(event);\n });\n const response = yield connection.open();\n // 200 == everything is fine.\n if (response.statusCode === 200) {\n yield _this14.privRequestSession.onConnectionEstablishCompleted(response.statusCode);\n return Promise.resolve(connection);\n } else if (response.statusCode === 1006) {\n isUnAuthorized = true;\n }\n lastStatusCode = response.statusCode;\n lastReason = response.reason;\n _this14.privRequestSession.onRetryConnection();\n }\n yield _this14.privRequestSession.onConnectionEstablishCompleted(lastStatusCode, lastReason);\n return Promise.reject(`Unable to contact server. StatusCode: ${lastStatusCode}, ${_this14.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_Endpoint)} Reason: ${lastReason}`);\n })();\n }\n delay(delayMs) {\n return new Promise(resolve => this.privSetTimeout(resolve, delayMs));\n }\n writeBufferToConsole(buffer) {\n let out = \"Buffer Size: \";\n if (null === buffer) {\n out += \"null\";\n } else {\n const readView = new Uint8Array(buffer);\n out += `${buffer.byteLength}\\r\\n`;\n for (let i = 0; i < buffer.byteLength; i++) {\n out += readView[i].toString(16).padStart(2, \"0\") + \" \";\n if ((i + 1) % 16 === 0) {\n // eslint-disable-next-line no-console\n console.info(out);\n out = \"\";\n }\n }\n }\n // eslint-disable-next-line no-console\n console.info(out);\n }\n sendFinalAudio() {\n var _this15 = this;\n return _asyncToGenerator(function* () {\n const connection = yield _this15.fetchConnection();\n yield connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", _this15.privRequestSession.requestId, null, null));\n return;\n })();\n }\n // Takes an established websocket connection to the endpoint and sends speech configuration information.\n configureConnection() {\n var _this16 = this;\n return _asyncToGenerator(function* () {\n const connection = yield _this16.connectImpl();\n if (_this16.configConnectionOverride !== undefined) {\n return _this16.configConnectionOverride(connection);\n }\n yield _this16.sendSpeechServiceConfig(connection, _this16.privRequestSession, _this16.privRecognizerConfig.SpeechServiceConfig.serialize());\n yield _this16.sendPrePayloadJSON(connection, false);\n return connection;\n })();\n }\n}\nexports.ServiceRecognizerBase = ServiceRecognizerBase;\nServiceRecognizerBase.telemetryDataEnabled = true;","map":{"version":3,"names":["_asyncToGenerator","require","default","Object","defineProperty","exports","value","ServiceRecognizerBase","Exports_js_1","Exports_js_2","Exports_js_3","Exports_js_4","SpeechConnectionMessage_Internal_js_1","constructor","authentication","connectionFactory","audioSource","recognizerConfig","recognizer","privConnectionConfigurationPromise","undefined","privConnectionPromise","privSetTimeout","setTimeout","privIsLiveAudio","privAverageBytesPerMs","privEnableSpeakerId","privExpectContentAssessmentResponse","recognizeOverride","recognizeSpeaker","disconnectOverride","receiveMessageOverride","sendPrePayloadJSONOverride","postConnectImplOverride","configConnectionOverride","handleSpeechPhraseMessage","handleSpeechHypothesisMessage","ArgumentNullError","isSpeakerDiarizationEnabled","privMustReportEndOfStream","privAuthentication","privConnectionFactory","privAudioSource","privRecognizerConfig","privIsDisposed","privRecognizer","privRequestSession","RequestSession","id","privConnectionEvents","EventSource","privServiceEvents","privDynamicGrammar","DynamicGrammarBuilder","privSpeechContext","SpeechContext","privAgentConfig","AgentConfig","webWorkerLoadType","parameters","getProperty","PropertyId","WebWorkerLoadType","toLowerCase","Blob","Worker","Timeout","window","bind","globalThis","connectionEvents","attach","connectionEvent","name","connectionClosedEvent","statusCode","numConnectionAttempts","maxRetryCount","cancelRecognitionLocal","CancellationReason","Error","CancellationErrorCode","BadRequestParameters","ConnectionFailure","reason","privDiarizationSessionId","createNoDashGuid","setLanguageIdJson","setOutputDetailLevelJson","setTranslationJson","targetLanguages","SpeechServiceConnection_TranslationToLanguages","languages","split","translationVoice","SpeechServiceConnection_TranslationVoice","action","setSection","onSuccess","output","interimResults","mode","languageToVoiceMap","lang","defaultVoices","setSpeechSegmentationTimeoutJson","speechSegmentationTimeout","Speech_SegmentationSilenceTimeoutMs","recognitionMode","RecognitionMode","Conversation","Dictation","segmentationSilenceTimeoutMs","parseInt","phraseDetection","getSection","segmentation","autoDetectSourceLanguages","sourceLanguages","speechContextLidMode","languageIdMode","Priority","onUnknown","resultType","phraseResults","customModels","sourceLanguageModels","onInterim","requestWordLevelTimestamps","SpeechServiceResponse_RequestWordLevelTimestamps","setWordLevelTimings","outputFormat","OutputFormatPropertyName","OutputFormat","Simple","Detailed","toLocaleLowerCase","setDetailedOutputFormat","speechContext","dynamicGrammar","agentConfig","conversationTranslatorToken","token","setProperty","ConversationTranslator_Token","voiceProfileType","type","SpeechServiceConnection_SpeakerIdMode","auth","isDisposed","dispose","_this","connection","error","serviceEvents","recognize","recoMode","successCallback","errorCallBack","_this2","privSuccessCallback","privErrorCallback","startNewRecognition","listenForServiceTelemetry","events","conPromise","connectImpl","audioNode","audioStreamNode","audioNodeId","format","deviceInfo","Microphones","ReplayableAudioNode","avgBytesPerSec","onAudioSourceAttachCompleted","SpeechServiceConfig","Context","audio","source","onStopRecognizing","sessionStartEventArgs","SessionEventArgs","sessionId","sessionStarted","receiveMessage","audioSendPromise","sendAudio","catch","_ref","RuntimeError","_x","apply","arguments","stopRecognizing","_this3","isRecognizing","turnOff","sendFinalAudio","turnCompletionPromise","connect","_this4","Promise","resolve","connectAsync","cb","err","then","e","disconnect","_this5","NoError","sendMessage","message","sendNetworkMessage","path","payload","_this6","MessageType","Text","Binary","contentType","fetchConnection","send","SpeechConnectionMessage","requestId","activityTemplate","messagePayload","privActivityTemplate","expectContentAssessmentResponse","sendTelemetryData","_this7","telemetryData","getTelemetry","telemetryDataEnabled","cancellationReason","errorCode","_this8","cancelRecognition","_this9","read","privServiceHasSentMessage","connectionMessage","fromConnectionMessage","onServiceTurnStartResponse","speechStartDetected","SpeechDetected","fromJSON","textBody","speechStartEventArgs","RecognitionEventArgs","Offset","json","length","speechStopDetected","speechStopEventArgs","currentTurnAudioOffset","speechEndDetected","isSpeechEnded","EndOfStream","sessionStopEventArgs","onServiceTurnEndResponse","isContinuousRecognition","sessionStopped","sendPrePayloadJSON","processTypeSpecificMessages","onEvent","ServiceEvent","updateSpeakerDiarizationAudioOffset","bytesSent","recognitionBytesSent","audioOffsetMs","setSpeakerDiarizationAudioOffsetMs","sendSpeechContext","generateNewRequestId","speechContextJson","toJSON","onSpeechContext","noOp","_this10","sendWaveHeader","_this11","header","state","ConnectionState","Disconnected","privConnectionId","retryableConnect","sendSpeechServiceConfig","requestSession","SpeechServiceConfigJson","withTelemetry","JSON","parse","replacement","context","system","stringify","DisableReferenceChannel","MicSpec","_this12","configureConnection","_this13","audioFormat","nextSendTime","Date","now","fastLaneSizeMs","maxSendUnthrottledBytes","startRecogNumber","recogNumber","readAndUploadCycle","_ref2","audioStreamChunk","sendDelay","isEnd","buffer","onAudioSent","byteLength","Math","max","delay","onSpeechEnded","_this14","isUnAuthorized","privAuthFetchEventId","onPreConnectionStart","lastStatusCode","lastReason","authPromise","fetchOnExpiry","fetch","onAuthCompleted","create","event","response","open","onConnectionEstablishCompleted","onRetryConnection","reject","SpeechServiceConnection_Endpoint","delayMs","writeBufferToConsole","out","readView","Uint8Array","i","toString","padStart","console","info","_this15","_this16","serialize"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/ServiceRecognizerBase.js"],"sourcesContent":["\"use strict\";\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ServiceRecognizerBase = void 0;\nconst Exports_js_1 = require(\"../common.browser/Exports.js\");\nconst Exports_js_2 = require(\"../common/Exports.js\");\nconst Exports_js_3 = require(\"../sdk/Exports.js\");\nconst Exports_js_4 = require(\"./Exports.js\");\nconst SpeechConnectionMessage_Internal_js_1 = require(\"./SpeechConnectionMessage.Internal.js\");\nclass ServiceRecognizerBase {\n constructor(authentication, connectionFactory, audioSource, recognizerConfig, recognizer) {\n // A promise for a configured connection.\n // Do not consume directly, call fetchConnection instead.\n this.privConnectionConfigurationPromise = undefined;\n // A promise for a connection, but one that has not had the speech context sent yet.\n // Do not consume directly, call fetchConnection instead.\n this.privConnectionPromise = undefined;\n this.privSetTimeout = setTimeout;\n this.privIsLiveAudio = false;\n this.privAverageBytesPerMs = 0;\n this.privEnableSpeakerId = false;\n this.privExpectContentAssessmentResponse = false;\n this.recognizeOverride = undefined;\n this.recognizeSpeaker = undefined;\n this.disconnectOverride = undefined;\n this.receiveMessageOverride = undefined;\n this.sendPrePayloadJSONOverride = undefined;\n this.postConnectImplOverride = undefined;\n this.configConnectionOverride = undefined;\n this.handleSpeechPhraseMessage = undefined;\n this.handleSpeechHypothesisMessage = undefined;\n if (!authentication) {\n throw new Exports_js_2.ArgumentNullError(\"authentication\");\n }\n if (!connectionFactory) {\n throw new Exports_js_2.ArgumentNullError(\"connectionFactory\");\n }\n if (!audioSource) {\n throw new Exports_js_2.ArgumentNullError(\"audioSource\");\n }\n if (!recognizerConfig) {\n throw new Exports_js_2.ArgumentNullError(\"recognizerConfig\");\n }\n this.privEnableSpeakerId = recognizerConfig.isSpeakerDiarizationEnabled;\n this.privMustReportEndOfStream = false;\n this.privAuthentication = authentication;\n this.privConnectionFactory = connectionFactory;\n this.privAudioSource = audioSource;\n this.privRecognizerConfig = recognizerConfig;\n this.privIsDisposed = false;\n this.privRecognizer = recognizer;\n this.privRequestSession = new Exports_js_4.RequestSession(this.privAudioSource.id());\n this.privConnectionEvents = new Exports_js_2.EventSource();\n this.privServiceEvents = new Exports_js_2.EventSource();\n this.privDynamicGrammar = new Exports_js_4.DynamicGrammarBuilder();\n this.privSpeechContext = new Exports_js_4.SpeechContext(this.privDynamicGrammar);\n this.privAgentConfig = new Exports_js_4.AgentConfig();\n const webWorkerLoadType = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.WebWorkerLoadType, \"on\").toLowerCase();\n if (webWorkerLoadType === \"on\" && typeof (Blob) !== \"undefined\" && typeof (Worker) !== \"undefined\") {\n this.privSetTimeout = Exports_js_2.Timeout.setTimeout;\n }\n else {\n if (typeof window !== \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.privSetTimeout = window.setTimeout.bind(window);\n }\n if (typeof globalThis !== \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.privSetTimeout = globalThis.setTimeout.bind(globalThis);\n }\n }\n this.connectionEvents.attach((connectionEvent) => {\n if (connectionEvent.name === \"ConnectionClosedEvent\") {\n const connectionClosedEvent = connectionEvent;\n if (connectionClosedEvent.statusCode === 1003 ||\n connectionClosedEvent.statusCode === 1007 ||\n connectionClosedEvent.statusCode === 1002 ||\n connectionClosedEvent.statusCode === 4000 ||\n this.privRequestSession.numConnectionAttempts > this.privRecognizerConfig.maxRetryCount) {\n void this.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, connectionClosedEvent.statusCode === 1007 ? Exports_js_3.CancellationErrorCode.BadRequestParameters : Exports_js_3.CancellationErrorCode.ConnectionFailure, `${connectionClosedEvent.reason} websocket error code: ${connectionClosedEvent.statusCode}`);\n }\n }\n });\n if (this.privEnableSpeakerId) {\n this.privDiarizationSessionId = Exports_js_2.createNoDashGuid();\n }\n this.setLanguageIdJson();\n this.setOutputDetailLevelJson();\n }\n setTranslationJson() {\n const targetLanguages = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationToLanguages, undefined);\n if (targetLanguages !== undefined) {\n const languages = targetLanguages.split(\",\");\n const translationVoice = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationVoice, undefined);\n const action = (translationVoice !== undefined) ? \"Synthesize\" : \"None\";\n this.privSpeechContext.setSection(\"translation\", {\n onSuccess: { action },\n output: { interimResults: { mode: \"Always\" } },\n targetLanguages: languages,\n });\n if (translationVoice !== undefined) {\n const languageToVoiceMap = {};\n for (const lang of languages) {\n languageToVoiceMap[lang] = translationVoice;\n }\n this.privSpeechContext.setSection(\"synthesis\", {\n defaultVoices: languageToVoiceMap\n });\n }\n }\n }\n setSpeechSegmentationTimeoutJson() {\n const speechSegmentationTimeout = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.Speech_SegmentationSilenceTimeoutMs, undefined);\n if (speechSegmentationTimeout !== undefined) {\n const mode = this.recognitionMode === Exports_js_4.RecognitionMode.Conversation ? \"CONVERSATION\" :\n this.recognitionMode === Exports_js_4.RecognitionMode.Dictation ? \"DICTATION\" : \"INTERACTIVE\";\n const segmentationSilenceTimeoutMs = parseInt(speechSegmentationTimeout, 10);\n const phraseDetection = this.privSpeechContext.getSection(\"phraseDetection\");\n phraseDetection.mode = mode;\n phraseDetection[mode] = {\n segmentation: {\n mode: \"Custom\",\n segmentationSilenceTimeoutMs\n }\n };\n this.privSpeechContext.setSection(\"phraseDetection\", phraseDetection);\n }\n }\n setLanguageIdJson() {\n const phraseDetection = this.privSpeechContext.getSection(\"phraseDetection\");\n if (this.privRecognizerConfig.autoDetectSourceLanguages !== undefined) {\n const sourceLanguages = this.privRecognizerConfig.autoDetectSourceLanguages.split(\",\");\n let speechContextLidMode;\n if (this.privRecognizerConfig.languageIdMode === \"Continuous\") {\n speechContextLidMode = \"DetectContinuous\";\n }\n else { // recognizerConfig.languageIdMode === \"AtStart\"\n speechContextLidMode = \"DetectAtAudioStart\";\n }\n this.privSpeechContext.setSection(\"languageId\", {\n Priority: \"PrioritizeLatency\",\n languages: sourceLanguages,\n mode: speechContextLidMode,\n onSuccess: { action: \"Recognize\" },\n onUnknown: { action: \"None\" }\n });\n this.privSpeechContext.setSection(\"phraseOutput\", {\n interimResults: {\n resultType: \"Auto\"\n },\n phraseResults: {\n resultType: \"Always\"\n }\n });\n const customModels = this.privRecognizerConfig.sourceLanguageModels;\n if (customModels !== undefined) {\n phraseDetection.customModels = customModels;\n phraseDetection.onInterim = { action: \"None\" };\n phraseDetection.onSuccess = { action: \"None\" };\n }\n }\n const targetLanguages = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_TranslationToLanguages, undefined);\n if (targetLanguages !== undefined) {\n phraseDetection.onInterim = { action: \"Translate\" };\n phraseDetection.onSuccess = { action: \"Translate\" };\n this.privSpeechContext.setSection(\"phraseOutput\", {\n interimResults: {\n resultType: \"None\"\n },\n phraseResults: {\n resultType: \"None\"\n }\n });\n }\n this.privSpeechContext.setSection(\"phraseDetection\", phraseDetection);\n }\n setOutputDetailLevelJson() {\n if (this.privEnableSpeakerId) {\n const requestWordLevelTimestamps = this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceResponse_RequestWordLevelTimestamps, \"false\").toLowerCase();\n if (requestWordLevelTimestamps === \"true\") {\n this.privSpeechContext.setWordLevelTimings();\n }\n else {\n const outputFormat = this.privRecognizerConfig.parameters.getProperty(Exports_js_4.OutputFormatPropertyName, Exports_js_3.OutputFormat[Exports_js_3.OutputFormat.Simple]).toLowerCase();\n if (outputFormat === Exports_js_3.OutputFormat[Exports_js_3.OutputFormat.Detailed].toLocaleLowerCase()) {\n this.privSpeechContext.setDetailedOutputFormat();\n }\n }\n }\n }\n get isSpeakerDiarizationEnabled() {\n return this.privEnableSpeakerId;\n }\n get audioSource() {\n return this.privAudioSource;\n }\n get speechContext() {\n return this.privSpeechContext;\n }\n get dynamicGrammar() {\n return this.privDynamicGrammar;\n }\n get agentConfig() {\n return this.privAgentConfig;\n }\n set conversationTranslatorToken(token) {\n this.privRecognizerConfig.parameters.setProperty(Exports_js_3.PropertyId.ConversationTranslator_Token, token);\n }\n set voiceProfileType(type) {\n this.privRecognizerConfig.parameters.setProperty(Exports_js_3.PropertyId.SpeechServiceConnection_SpeakerIdMode, type);\n }\n set authentication(auth) {\n this.privAuthentication = auth;\n }\n isDisposed() {\n return this.privIsDisposed;\n }\n async dispose(reason) {\n this.privIsDisposed = true;\n if (this.privConnectionConfigurationPromise !== undefined) {\n try {\n const connection = await this.privConnectionConfigurationPromise;\n await connection.dispose(reason);\n }\n catch (error) {\n // The connection is in a bad state. But we're trying to kill it, so...\n return;\n }\n }\n }\n get connectionEvents() {\n return this.privConnectionEvents;\n }\n get serviceEvents() {\n return this.privServiceEvents;\n }\n get recognitionMode() {\n return this.privRecognizerConfig.recognitionMode;\n }\n async recognize(recoMode, successCallback, errorCallBack) {\n if (this.recognizeOverride !== undefined) {\n await this.recognizeOverride(recoMode, successCallback, errorCallBack);\n return;\n }\n // Clear the existing configuration promise to force a re-transmission of config and context.\n this.privConnectionConfigurationPromise = undefined;\n this.privRecognizerConfig.recognitionMode = recoMode;\n this.setSpeechSegmentationTimeoutJson();\n this.setTranslationJson();\n this.privSuccessCallback = successCallback;\n this.privErrorCallback = errorCallBack;\n this.privRequestSession.startNewRecognition();\n this.privRequestSession.listenForServiceTelemetry(this.privAudioSource.events);\n // Start the connection to the service. The promise this will create is stored and will be used by configureConnection().\n const conPromise = this.connectImpl();\n let audioNode;\n try {\n const audioStreamNode = await this.audioSource.attach(this.privRequestSession.audioNodeId);\n const format = await this.audioSource.format;\n const deviceInfo = await this.audioSource.deviceInfo;\n this.privIsLiveAudio = deviceInfo.type && deviceInfo.type === Exports_js_4.type.Microphones;\n audioNode = new Exports_js_1.ReplayableAudioNode(audioStreamNode, format.avgBytesPerSec);\n await this.privRequestSession.onAudioSourceAttachCompleted(audioNode, false);\n this.privRecognizerConfig.SpeechServiceConfig.Context.audio = { source: deviceInfo };\n }\n catch (error) {\n await this.privRequestSession.onStopRecognizing();\n throw error;\n }\n try {\n await conPromise;\n }\n catch (error) {\n await this.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.ConnectionFailure, error);\n return;\n }\n const sessionStartEventArgs = new Exports_js_3.SessionEventArgs(this.privRequestSession.sessionId);\n if (!!this.privRecognizer.sessionStarted) {\n this.privRecognizer.sessionStarted(this.privRecognizer, sessionStartEventArgs);\n }\n void this.receiveMessage();\n const audioSendPromise = this.sendAudio(audioNode);\n audioSendPromise.catch(async (error) => {\n await this.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.RuntimeError, error);\n });\n return;\n }\n async stopRecognizing() {\n if (this.privRequestSession.isRecognizing) {\n try {\n await this.audioSource.turnOff();\n await this.sendFinalAudio();\n await this.privRequestSession.onStopRecognizing();\n await this.privRequestSession.turnCompletionPromise;\n }\n finally {\n await this.privRequestSession.dispose();\n }\n }\n return;\n }\n async connect() {\n await this.connectImpl();\n return Promise.resolve();\n }\n connectAsync(cb, err) {\n this.connectImpl().then(() => {\n try {\n if (!!cb) {\n cb();\n }\n }\n catch (e) {\n if (!!err) {\n err(e);\n }\n }\n }, (reason) => {\n try {\n if (!!err) {\n err(reason);\n }\n /* eslint-disable no-empty */\n }\n catch (error) {\n }\n });\n }\n async disconnect() {\n await this.cancelRecognitionLocal(Exports_js_3.CancellationReason.Error, Exports_js_3.CancellationErrorCode.NoError, \"Disconnecting\");\n if (this.disconnectOverride !== undefined) {\n await this.disconnectOverride();\n }\n if (this.privConnectionPromise !== undefined) {\n try {\n await (await this.privConnectionPromise).dispose();\n }\n catch (error) {\n }\n }\n this.privConnectionPromise = undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n sendMessage(message) {\n return;\n }\n async sendNetworkMessage(path, payload) {\n const type = typeof payload === \"string\" ? Exports_js_2.MessageType.Text : Exports_js_2.MessageType.Binary;\n const contentType = typeof payload === \"string\" ? \"application/json\" : \"\";\n const connection = await this.fetchConnection();\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(type, path, this.privRequestSession.requestId, contentType, payload));\n }\n set activityTemplate(messagePayload) {\n this.privActivityTemplate = messagePayload;\n }\n get activityTemplate() {\n return this.privActivityTemplate;\n }\n set expectContentAssessmentResponse(value) {\n this.privExpectContentAssessmentResponse = value;\n }\n async sendTelemetryData() {\n const telemetryData = this.privRequestSession.getTelemetry();\n if (ServiceRecognizerBase.telemetryDataEnabled !== true ||\n this.privIsDisposed ||\n null === telemetryData) {\n return;\n }\n if (!!ServiceRecognizerBase.telemetryData) {\n try {\n ServiceRecognizerBase.telemetryData(telemetryData);\n /* eslint-disable no-empty */\n }\n catch { }\n }\n const connection = await this.fetchConnection();\n await connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"telemetry\", this.privRequestSession.requestId, \"application/json\", telemetryData));\n }\n // Cancels recognition.\n async cancelRecognitionLocal(cancellationReason, errorCode, error) {\n if (!!this.privRequestSession.isRecognizing) {\n await this.privRequestSession.onStopRecognizing();\n this.cancelRecognition(this.privRequestSession.sessionId, this.privRequestSession.requestId, cancellationReason, errorCode, error);\n }\n }\n async receiveMessage() {\n try {\n if (this.privIsDisposed) {\n // We're done.\n return;\n }\n let connection = await this.fetchConnection();\n const message = await connection.read();\n if (this.receiveMessageOverride !== undefined) {\n return this.receiveMessageOverride();\n }\n // indicates we are draining the queue and it came with no message;\n if (!message) {\n return this.receiveMessage();\n }\n this.privServiceHasSentMessage = true;\n const connectionMessage = SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage.fromConnectionMessage(message);\n if (connectionMessage.requestId.toLowerCase() === this.privRequestSession.requestId.toLowerCase()) {\n switch (connectionMessage.path.toLowerCase()) {\n case \"turn.start\":\n this.privMustReportEndOfStream = true;\n this.privRequestSession.onServiceTurnStartResponse();\n break;\n case \"speech.startdetected\":\n const speechStartDetected = Exports_js_4.SpeechDetected.fromJSON(connectionMessage.textBody);\n const speechStartEventArgs = new Exports_js_3.RecognitionEventArgs(speechStartDetected.Offset, this.privRequestSession.sessionId);\n if (!!this.privRecognizer.speechStartDetected) {\n this.privRecognizer.speechStartDetected(this.privRecognizer, speechStartEventArgs);\n }\n break;\n case \"speech.enddetected\":\n let json;\n if (connectionMessage.textBody.length > 0) {\n json = connectionMessage.textBody;\n }\n else {\n // If the request was empty, the JSON returned is empty.\n json = \"{ Offset: 0 }\";\n }\n const speechStopDetected = Exports_js_4.SpeechDetected.fromJSON(json);\n const speechStopEventArgs = new Exports_js_3.RecognitionEventArgs(speechStopDetected.Offset + this.privRequestSession.currentTurnAudioOffset, this.privRequestSession.sessionId);\n if (!!this.privRecognizer.speechEndDetected) {\n this.privRecognizer.speechEndDetected(this.privRecognizer, speechStopEventArgs);\n }\n break;\n case \"turn.end\":\n await this.sendTelemetryData();\n if (this.privRequestSession.isSpeechEnded && this.privMustReportEndOfStream) {\n this.privMustReportEndOfStream = false;\n await this.cancelRecognitionLocal(Exports_js_3.CancellationReason.EndOfStream, Exports_js_3.CancellationErrorCode.NoError, undefined);\n }\n const sessionStopEventArgs = new Exports_js_3.SessionEventArgs(this.privRequestSession.sessionId);\n await this.privRequestSession.onServiceTurnEndResponse(this.privRecognizerConfig.isContinuousRecognition);\n if (!this.privRecognizerConfig.isContinuousRecognition || this.privRequestSession.isSpeechEnded || !this.privRequestSession.isRecognizing) {\n if (!!this.privRecognizer.sessionStopped) {\n this.privRecognizer.sessionStopped(this.privRecognizer, sessionStopEventArgs);\n }\n return;\n }\n else {\n connection = await this.fetchConnection();\n await this.sendPrePayloadJSON(connection);\n }\n break;\n default:\n if (!await this.processTypeSpecificMessages(connectionMessage)) {\n // here are some messages that the derived class has not processed, dispatch them to connect class\n if (!!this.privServiceEvents) {\n this.serviceEvents.onEvent(new Exports_js_2.ServiceEvent(connectionMessage.path.toLowerCase(), connectionMessage.textBody));\n }\n }\n }\n }\n return this.receiveMessage();\n }\n catch (error) {\n return null;\n }\n }\n updateSpeakerDiarizationAudioOffset() {\n const bytesSent = this.privRequestSession.recognitionBytesSent;\n const audioOffsetMs = this.privAverageBytesPerMs !== 0 ? bytesSent / this.privAverageBytesPerMs : 0;\n this.privSpeechContext.setSpeakerDiarizationAudioOffsetMs(audioOffsetMs);\n }\n sendSpeechContext(connection, generateNewRequestId) {\n if (this.privEnableSpeakerId) {\n this.updateSpeakerDiarizationAudioOffset();\n }\n const speechContextJson = this.speechContext.toJSON();\n if (generateNewRequestId) {\n this.privRequestSession.onSpeechContext();\n }\n if (speechContextJson) {\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"speech.context\", this.privRequestSession.requestId, \"application/json\", speechContextJson));\n }\n return;\n }\n noOp() {\n // operation not supported\n return;\n }\n // Encapsulated for derived service recognizers that need to send additional JSON\n async sendPrePayloadJSON(connection, generateNewRequestId = true) {\n if (this.sendPrePayloadJSONOverride !== undefined) {\n return this.sendPrePayloadJSONOverride(connection);\n }\n await this.sendSpeechContext(connection, generateNewRequestId);\n await this.sendWaveHeader(connection);\n return;\n }\n async sendWaveHeader(connection) {\n const format = await this.audioSource.format;\n // this.writeBufferToConsole(format.header);\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", this.privRequestSession.requestId, \"audio/x-wav\", format.header));\n }\n // Establishes a websocket connection to the end point.\n connectImpl() {\n if (this.privConnectionPromise !== undefined) {\n return this.privConnectionPromise.then((connection) => {\n if (connection.state() === Exports_js_2.ConnectionState.Disconnected) {\n this.privConnectionId = null;\n this.privConnectionPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.connectImpl();\n }\n return this.privConnectionPromise;\n }, () => {\n this.privConnectionId = null;\n this.privConnectionPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.connectImpl();\n });\n }\n this.privConnectionPromise = this.retryableConnect();\n // Attach an empty handler to allow the promise to run in the background while\n // other startup events happen. It'll eventually be awaited on.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.privConnectionPromise.catch(() => { });\n if (this.postConnectImplOverride !== undefined) {\n return this.postConnectImplOverride(this.privConnectionPromise);\n }\n return this.privConnectionPromise;\n }\n sendSpeechServiceConfig(connection, requestSession, SpeechServiceConfigJson) {\n requestSession.onSpeechContext();\n // filter out anything that is not required for the service to work.\n if (ServiceRecognizerBase.telemetryDataEnabled !== true) {\n const withTelemetry = JSON.parse(SpeechServiceConfigJson);\n const replacement = {\n context: {\n system: withTelemetry.context.system,\n },\n };\n SpeechServiceConfigJson = JSON.stringify(replacement);\n }\n if (this.privRecognizerConfig.parameters.getProperty(\"f0f5debc-f8c9-4892-ac4b-90a7ab359fd2\", \"false\").toLowerCase() === \"true\") {\n const json = JSON.parse(SpeechServiceConfigJson);\n json.context.DisableReferenceChannel = \"True\";\n json.context.MicSpec = \"1_0_0\";\n SpeechServiceConfigJson = JSON.stringify(json);\n }\n if (SpeechServiceConfigJson) {\n return connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Text, \"speech.config\", requestSession.requestId, \"application/json\", SpeechServiceConfigJson));\n }\n return;\n }\n async fetchConnection() {\n if (this.privConnectionConfigurationPromise !== undefined) {\n return this.privConnectionConfigurationPromise.then((connection) => {\n if (connection.state() === Exports_js_2.ConnectionState.Disconnected) {\n this.privConnectionId = null;\n this.privConnectionConfigurationPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.fetchConnection();\n }\n return this.privConnectionConfigurationPromise;\n }, () => {\n this.privConnectionId = null;\n this.privConnectionConfigurationPromise = undefined;\n this.privServiceHasSentMessage = false;\n return this.fetchConnection();\n });\n }\n this.privConnectionConfigurationPromise = this.configureConnection();\n return await this.privConnectionConfigurationPromise;\n }\n async sendAudio(audioStreamNode) {\n const audioFormat = await this.audioSource.format;\n this.privAverageBytesPerMs = audioFormat.avgBytesPerSec / 1000;\n // The time we last sent data to the service.\n let nextSendTime = Date.now();\n // Max amount to send before we start to throttle\n const fastLaneSizeMs = this.privRecognizerConfig.parameters.getProperty(\"SPEECH-TransmitLengthBeforThrottleMs\", \"5000\");\n const maxSendUnthrottledBytes = audioFormat.avgBytesPerSec / 1000 * parseInt(fastLaneSizeMs, 10);\n const startRecogNumber = this.privRequestSession.recogNumber;\n const readAndUploadCycle = async () => {\n // If speech is done, stop sending audio.\n if (!this.privIsDisposed &&\n !this.privRequestSession.isSpeechEnded &&\n this.privRequestSession.isRecognizing &&\n this.privRequestSession.recogNumber === startRecogNumber) {\n const connection = await this.fetchConnection();\n const audioStreamChunk = await audioStreamNode.read();\n // we have a new audio chunk to upload.\n if (this.privRequestSession.isSpeechEnded) {\n // If service already recognized audio end then don't send any more audio\n return;\n }\n let payload;\n let sendDelay;\n if (!audioStreamChunk || audioStreamChunk.isEnd) {\n payload = null;\n sendDelay = 0;\n }\n else {\n payload = audioStreamChunk.buffer;\n this.privRequestSession.onAudioSent(payload.byteLength);\n if (maxSendUnthrottledBytes >= this.privRequestSession.bytesSent) {\n sendDelay = 0;\n }\n else {\n sendDelay = Math.max(0, nextSendTime - Date.now());\n }\n }\n if (0 !== sendDelay) {\n await this.delay(sendDelay);\n }\n if (payload !== null) {\n nextSendTime = Date.now() + (payload.byteLength * 1000 / (audioFormat.avgBytesPerSec * 2));\n }\n // Are we still alive?\n if (!this.privIsDisposed &&\n !this.privRequestSession.isSpeechEnded &&\n this.privRequestSession.isRecognizing &&\n this.privRequestSession.recogNumber === startRecogNumber) {\n connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", this.privRequestSession.requestId, null, payload)).catch(() => {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.privRequestSession.onServiceTurnEndResponse(this.privRecognizerConfig.isContinuousRecognition).catch(() => { });\n });\n if (!audioStreamChunk?.isEnd) {\n // this.writeBufferToConsole(payload);\n // Regardless of success or failure, schedule the next upload.\n // If the underlying connection was broken, the next cycle will\n // get a new connection and re-transmit missing audio automatically.\n return readAndUploadCycle();\n }\n else {\n // the audio stream has been closed, no need to schedule next\n // read-upload cycle.\n if (!this.privIsLiveAudio) {\n this.privRequestSession.onSpeechEnded();\n }\n }\n }\n }\n };\n return readAndUploadCycle();\n }\n async retryableConnect() {\n let isUnAuthorized = false;\n this.privAuthFetchEventId = Exports_js_2.createNoDashGuid();\n const sessionId = this.privRequestSession.sessionId;\n this.privConnectionId = (sessionId !== undefined) ? sessionId : Exports_js_2.createNoDashGuid();\n this.privRequestSession.onPreConnectionStart(this.privAuthFetchEventId, this.privConnectionId);\n let lastStatusCode = 0;\n let lastReason = \"\";\n while (this.privRequestSession.numConnectionAttempts <= this.privRecognizerConfig.maxRetryCount) {\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\n // facing event when a connection fails to let them try and provide new auth information.\n const authPromise = isUnAuthorized ? this.privAuthentication.fetchOnExpiry(this.privAuthFetchEventId) : this.privAuthentication.fetch(this.privAuthFetchEventId);\n const auth = await authPromise;\n await this.privRequestSession.onAuthCompleted(false);\n // Create the connection\n const connection = this.privConnectionFactory.create(this.privRecognizerConfig, auth, this.privConnectionId);\n // Attach the telemetry handlers.\n this.privRequestSession.listenForServiceTelemetry(connection.events);\n // Attach to the underlying event. No need to hold onto the detach pointers as in the event the connection goes away,\n // it'll stop sending events.\n connection.events.attach((event) => {\n this.connectionEvents.onEvent(event);\n });\n const response = await connection.open();\n // 200 == everything is fine.\n if (response.statusCode === 200) {\n await this.privRequestSession.onConnectionEstablishCompleted(response.statusCode);\n return Promise.resolve(connection);\n }\n else if (response.statusCode === 1006) {\n isUnAuthorized = true;\n }\n lastStatusCode = response.statusCode;\n lastReason = response.reason;\n this.privRequestSession.onRetryConnection();\n }\n await this.privRequestSession.onConnectionEstablishCompleted(lastStatusCode, lastReason);\n return Promise.reject(`Unable to contact server. StatusCode: ${lastStatusCode}, ${this.privRecognizerConfig.parameters.getProperty(Exports_js_3.PropertyId.SpeechServiceConnection_Endpoint)} Reason: ${lastReason}`);\n }\n delay(delayMs) {\n return new Promise((resolve) => this.privSetTimeout(resolve, delayMs));\n }\n writeBufferToConsole(buffer) {\n let out = \"Buffer Size: \";\n if (null === buffer) {\n out += \"null\";\n }\n else {\n const readView = new Uint8Array(buffer);\n out += `${buffer.byteLength}\\r\\n`;\n for (let i = 0; i < buffer.byteLength; i++) {\n out += readView[i].toString(16).padStart(2, \"0\") + \" \";\n if (((i + 1) % 16) === 0) {\n // eslint-disable-next-line no-console\n console.info(out);\n out = \"\";\n }\n }\n }\n // eslint-disable-next-line no-console\n console.info(out);\n }\n async sendFinalAudio() {\n const connection = await this.fetchConnection();\n await connection.send(new SpeechConnectionMessage_Internal_js_1.SpeechConnectionMessage(Exports_js_2.MessageType.Binary, \"audio\", this.privRequestSession.requestId, null, null));\n return;\n }\n // Takes an established websocket connection to the endpoint and sends speech configuration information.\n async configureConnection() {\n const connection = await this.connectImpl();\n if (this.configConnectionOverride !== undefined) {\n return this.configConnectionOverride(connection);\n }\n await this.sendSpeechServiceConfig(connection, this.privRequestSession, this.privRecognizerConfig.SpeechServiceConfig.serialize());\n await this.sendPrePayloadJSON(connection, false);\n return connection;\n }\n}\nexports.ServiceRecognizerBase = ServiceRecognizerBase;\nServiceRecognizerBase.telemetryDataEnabled = true;\n\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}
|