src/transcript/DefaultTranscriptionController.ts (34 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import DataMessage from '../datamessage/DataMessage';
import RealtimeController from '../realtimecontroller/RealtimeController';
import TranscriptEvent, { TranscriptEventConverter } from './TranscriptEvent';
import TranscriptionController from './TranscriptionController';
export const TRANSCRIPTION_DATA_MESSAGE_TOPIC = 'aws:chime:transcription';
export default class DefaultTranscriptionController implements TranscriptionController {
private readonly transcriptEventCallbacks: Set<(transcriptEvent: TranscriptEvent) => void>;
constructor(private realtimeController: RealtimeController) {
this.transcriptEventCallbacks = new Set<(transcriptEvent: TranscriptEvent) => void>();
}
subscribeToTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void {
if (this.transcriptEventCallbacks.size === 0) {
this.realtimeController.realtimeSubscribeToReceiveDataMessage(
TRANSCRIPTION_DATA_MESSAGE_TOPIC,
(dataMessage: DataMessage) => {
for (const transcriptEvent of TranscriptEventConverter.from(dataMessage)) {
for (const transcriptEventCallback of this.transcriptEventCallbacks) {
transcriptEventCallback(transcriptEvent);
}
}
}
);
}
this.transcriptEventCallbacks.add(callback);
}
unsubscribeFromTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void {
this.transcriptEventCallbacks.delete(callback);
if (this.transcriptEventCallbacks.size === 0) {
this.realtimeController.realtimeUnsubscribeFromReceiveDataMessage(
TRANSCRIPTION_DATA_MESSAGE_TOPIC
);
}
}
}