{"version":3,"sources":["src/common.speech/Transcription/TranscriberRecognizer.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAElB,UAAU,EAEV,0BAA0B,EAC1B,uBAAuB,EAE1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EAGtB,MAAM,eAAe,CAAC;AAGvB,qBAAa,qBAAsB,SAAQ,UAAU;IAE1C,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAE7E,UAAU,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAE5E,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAE5E,OAAO,CAAC,sBAAsB,CAAU;IACxC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,mBAAmB,CAAU;IAErC;;;;;OAKG;gBACgB,uBAAuB,EAAE,uBAAuB,EAAE,WAAW,EAAE,WAAW;IAgB7F,IAAW,yBAAyB,IAAI,MAAM,CAI7C;IAED,IAAW,UAAU,IAAI,kBAAkB,CAE1C;IAED,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,IAAW,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAG1C;IAED,IAAW,YAAY,CAAC,CAAC,EAAE,YAAY,EAItC;IAEM,mBAAmB,IAAI,gBAAgB;IAK9C,IAAW,OAAO,CAAC,CAAC,EAAE,OAAO,EAI5B;IAEM,cAAc,IAAI,WAAW;IAK7B,mBAAmB,IAAI,OAAO;IAI9B,+BAA+B,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIjF,8BAA8B,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzF,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1E,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAczC,uBAAuB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IA6B9D,mBAAmB,IAAI,IAAI;IAQlC;;;;;;OAMG;cACa,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,mBAAmB,GAAG,gBAAgB;IAMrF,SAAS,CAAC,uBAAuB,CAC7B,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,kBAAkB,EACrC,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GAAG,qBAAqB;CAIjE","file":"TranscriberRecognizer.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\nimport { marshalPromiseToCallbacks } from \"../../common/Exports.js\";\nimport { AudioConfigImpl } from \"../../sdk/Audio/AudioConfig.js\";\nimport { AudioStreamFormatImpl } from \"../../sdk/Audio/AudioStreamFormat.js\";\nimport { Contracts } from \"../../sdk/Contracts.js\";\nimport {\n    AudioConfig,\n    CancellationEventArgs,\n    Conversation,\n    ConversationInfo,\n    Meeting,\n    MeetingInfo,\n    MeetingTranscriber,\n    PropertyCollection,\n    PropertyId,\n    Recognizer,\n    SessionEventArgs,\n    SpeechRecognitionEventArgs,\n    SpeechTranslationConfig,\n    SpeechTranslationConfigImpl,\n} from \"../../sdk/Exports.js\";\nimport {\n    IAuthentication,\n    IConnectionFactory,\n    RecognizerConfig,\n    ServiceRecognizerBase,\n    SpeechServiceConfig,\n    TranscriberConnectionFactory,\n    TranscriptionServiceRecognizer,\n} from \"../Exports.js\";\nimport { RecognitionMode } from \"../ServiceMessages/PhraseDetection/PhraseDetectionContext.js\";\n\nexport class TranscriberRecognizer extends Recognizer {\n\n    public recognizing: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\n\n    public recognized: (sender: Recognizer, event: SpeechRecognitionEventArgs) => void;\n\n    public canceled: (sender: Recognizer, event: CancellationEventArgs) => void;\n\n    private privDisposedRecognizer: boolean;\n    private privConversation: Conversation;\n    private privMeeting: Meeting;\n    private isMeetingRecognizer: boolean;\n\n    /**\n     * TranscriberRecognizer constructor.\n     * @constructor\n     * @param {SpeechTranslationConfig} speechTranslationConfig - Non-audio configuration associated with the recognizer\n     * @param {AudioConfig} audioConfig - An audio configuration associated with the recognizer\n     */\n    public constructor(speechTranslationConfig: SpeechTranslationConfig, audioConfig: AudioConfig) {\n        const speechTranslationConfigImpl: SpeechTranslationConfigImpl = speechTranslationConfig as SpeechTranslationConfigImpl;\n        Contracts.throwIfNull(speechTranslationConfigImpl, \"speechTranslationConfig\");\n\n        const audioConfigImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\n        Contracts.throwIfNull(audioConfigImpl, \"audioConfigImpl\");\n\n        Contracts.throwIfNullOrWhitespace(\n            speechTranslationConfigImpl.speechRecognitionLanguage,\n            PropertyId[PropertyId.SpeechServiceConnection_RecoLanguage]);\n\n        super(audioConfig, speechTranslationConfigImpl.properties, new TranscriberConnectionFactory());\n        this.privDisposedRecognizer = false;\n        this.isMeetingRecognizer = false;\n    }\n\n    public get speechRecognitionLanguage(): string {\n        Contracts.throwIfDisposed(this.privDisposedRecognizer);\n\n        return this.properties.getProperty(PropertyId.SpeechServiceConnection_RecoLanguage);\n    }\n\n    public get properties(): PropertyCollection {\n        return this.privProperties;\n    }\n\n    public get authorizationToken(): string {\n        return this.properties.getProperty(PropertyId.SpeechServiceAuthorization_Token);\n    }\n\n    public set authorizationToken(token: string) {\n        Contracts.throwIfNullOrWhitespace(token, \"token\");\n        this.properties.setProperty(PropertyId.SpeechServiceAuthorization_Token, token);\n    }\n\n    public set conversation(c: Conversation) {\n        Contracts.throwIfNullOrUndefined(c, \"Conversation\");\n        this.isMeetingRecognizer = false;\n        this.privConversation = c;\n    }\n\n    public getConversationInfo(): ConversationInfo {\n        Contracts.throwIfNullOrUndefined(this.privConversation, \"Conversation\");\n        return this.privConversation.conversationInfo;\n    }\n\n    public set meeting(m: Meeting) {\n        Contracts.throwIfNullOrUndefined(m, \"Meeting\");\n        this.isMeetingRecognizer = true;\n        this.privMeeting = m;\n    }\n\n    public getMeetingInfo(): MeetingInfo {\n        Contracts.throwIfNullOrUndefined(this.privMeeting, \"Meeting\");\n        return this.privMeeting.meetingInfo;\n    }\n\n    public IsMeetingRecognizer(): boolean {\n        return this.isMeetingRecognizer;\n    }\n\n    public startContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\n        marshalPromiseToCallbacks(this.startContinuousRecognitionAsyncImpl(RecognitionMode.Conversation), cb, err);\n    }\n\n    public stopContinuousRecognitionAsync(cb?: () => void, err?: (e: string) => void): void {\n        marshalPromiseToCallbacks(this.stopContinuousRecognitionAsyncImpl(), cb, err);\n    }\n\n    public async close(): Promise<void> {\n        if (!this.privDisposedRecognizer) {\n            await this.dispose(true);\n        }\n    }\n\n    // Push async join/leave conversation message via serviceRecognizer\n    public async pushConversationEvent(conversationInfo: ConversationInfo, command: string): Promise<void> {\n        const reco = (this.privReco) as TranscriptionServiceRecognizer;\n        Contracts.throwIfNullOrUndefined(reco, \"serviceRecognizer\");\n        await reco.sendSpeechEventAsync(conversationInfo, command);\n    }\n\n    // Push async join/leave meeting message via serviceRecognizer\n    public async pushMeetingEvent(meetingInfo: MeetingInfo, command: string): Promise<void> {\n        const reco = (this.privReco) as TranscriptionServiceRecognizer;\n        Contracts.throwIfNullOrUndefined(reco, \"serviceRecognizer\");\n        await reco.sendMeetingSpeechEventAsync(meetingInfo, command);\n    }\n\n    public async enforceAudioGating(): Promise<void> {\n        const audioConfigImpl = this.audioConfig as AudioConfigImpl;\n        const format: AudioStreamFormatImpl = await audioConfigImpl.format;\n        const channels = format.channels;\n        if (channels === 1) {\n            if (this.properties.getProperty(\"f0f5debc-f8c9-4892-ac4b-90a7ab359fd2\", \"false\").toLowerCase() !== \"true\") {\n                throw new Error(\"Single channel audio configuration for MeetingTranscriber is currently under private preview, please contact diarizationrequest@microsoft.com for more details\");\n            }\n        } else if (channels !== 8) {\n            throw new Error(`Unsupported audio configuration: Detected ${channels}-channel audio`);\n        }\n        return;\n    }\n\n    public connectMeetingCallbacks(transcriber: MeetingTranscriber): void {\n        this.isMeetingRecognizer = true;\n        this.canceled = (s: any, e: CancellationEventArgs): void => {\n            if (!!transcriber.canceled) {\n                transcriber.canceled(transcriber, e);\n            }\n        };\n        this.recognizing = (s: any, e: SpeechRecognitionEventArgs): void => {\n            if (!!transcriber.transcribing) {\n                transcriber.transcribing(transcriber, e);\n            }\n        };\n        this.recognized = (s: any, e: SpeechRecognitionEventArgs): void => {\n            if (!!transcriber.transcribed) {\n                transcriber.transcribed(transcriber, e);\n            }\n        };\n        this.sessionStarted = (s: any, e: SessionEventArgs): void => {\n            if (!!transcriber.sessionStarted) {\n                transcriber.sessionStarted(transcriber, e);\n            }\n        };\n        this.sessionStopped = (s: any, e: SessionEventArgs): void => {\n            if (!!transcriber.sessionStopped) {\n                transcriber.sessionStopped(transcriber, e);\n            }\n        };\n    }\n\n    public disconnectCallbacks(): void {\n        this.canceled = undefined;\n        this.recognizing = undefined;\n        this.recognized = undefined;\n        this.sessionStarted = undefined;\n        this.sessionStopped = undefined;\n    }\n\n    /**\n     * Disposes any resources held by the object.\n     * @member ConversationTranscriber.prototype.dispose\n     * @function\n     * @public\n     * @param {boolean} disposing - true if disposing the object.\n     */\n    protected async dispose(disposing: boolean): Promise<void> {\n        if (this.privDisposedRecognizer) {\n            return;\n        }\n\n        if (disposing) {\n            this.privDisposedRecognizer = true;\n            await this.implRecognizerStop();\n        }\n\n        await super.dispose(disposing);\n    }\n\n    protected createRecognizerConfig(speechConfig: SpeechServiceConfig): RecognizerConfig {\n        return new RecognizerConfig(\n            speechConfig,\n            this.properties);\n    }\n\n    protected createServiceRecognizer(\n        authentication: IAuthentication,\n        connectionFactory: IConnectionFactory,\n        audioConfig: AudioConfig,\n        recognizerConfig: RecognizerConfig): ServiceRecognizerBase {\n        const configImpl: AudioConfigImpl = audioConfig as AudioConfigImpl;\n        return new TranscriptionServiceRecognizer(authentication, connectionFactory, configImpl, recognizerConfig, this);\n    }\n}\n"]}