@webex/plugin-meetings 2.60.1-next.14 → 2.60.1-next.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.d.ts +0 -1
- package/dist/meeting/index.js +3 -13
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +0 -4
- package/dist/meeting/voicea-meeting.js +26 -58
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/meeting/index.ts +3 -18
- package/src/meeting/voicea-meeting.ts +26 -65
- package/test/unit/spec/meeting/index.js +149 -4
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
|
@@ -9,7 +9,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
|
|
|
9
9
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
10
|
value: true
|
|
11
11
|
});
|
|
12
|
-
exports.processNewCaptions = exports.
|
|
12
|
+
exports.processNewCaptions = exports.getSpeakerFromProxyOrStore = exports.getSpeaker = void 0;
|
|
13
13
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
14
14
|
var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
|
|
15
15
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
@@ -38,16 +38,17 @@ var getSpeakerFromProxyOrStore = exports.getSpeakerFromProxyOrStore = function g
|
|
|
38
38
|
var needsCaching = false;
|
|
39
39
|
if (csisKey && transcriptData.speakerProxy[csisKey]) {
|
|
40
40
|
speaker = transcriptData.speakerProxy[csisKey];
|
|
41
|
+
return {
|
|
42
|
+
speaker: speaker,
|
|
43
|
+
needsCaching: needsCaching
|
|
44
|
+
};
|
|
41
45
|
}
|
|
42
46
|
var meetingMember = getSpeaker(meetingMembers, [csisKey]);
|
|
43
|
-
|
|
47
|
+
speaker = {
|
|
44
48
|
speakerId: (_meetingMember$partic = meetingMember === null || meetingMember === void 0 ? void 0 : meetingMember.participant.person.id) !== null && _meetingMember$partic !== void 0 ? _meetingMember$partic : '',
|
|
45
49
|
name: (_meetingMember$partic2 = meetingMember === null || meetingMember === void 0 ? void 0 : meetingMember.participant.person.name) !== null && _meetingMember$partic2 !== void 0 ? _meetingMember$partic2 : ''
|
|
46
50
|
};
|
|
47
|
-
|
|
48
|
-
needsCaching = true;
|
|
49
|
-
speaker = speakerInStore;
|
|
50
|
-
}
|
|
51
|
+
needsCaching = true;
|
|
51
52
|
return {
|
|
52
53
|
speaker: speaker,
|
|
53
54
|
needsCaching: needsCaching
|
|
@@ -60,18 +61,15 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
60
61
|
var transcriptData = meeting.transcription;
|
|
61
62
|
if (data.isFinal) {
|
|
62
63
|
var _data$transcript, _data$transcript2, _data$transcript3;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
var fakeTranscriptIndex = transcriptData.captions.findIndex(function (transcript) {
|
|
67
|
-
return transcript.id === fakeId;
|
|
68
|
-
});
|
|
69
|
-
if (fakeTranscriptIndex !== -1) {
|
|
70
|
-
transcriptData.captions.splice(fakeTranscriptIndex, 1);
|
|
71
|
-
}
|
|
64
|
+
transcriptData.interimCaptions[transcriptId].forEach(function (interimId) {
|
|
65
|
+
var interimTranscriptIndex = transcriptData.captions.findIndex(function (transcript) {
|
|
66
|
+
return transcript.id === interimId;
|
|
72
67
|
});
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
if (interimTranscriptIndex !== -1) {
|
|
69
|
+
transcriptData.captions.splice(interimTranscriptIndex, 1);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
delete transcriptData.interimCaptions[transcriptId];
|
|
75
73
|
var csisKey = (_data$transcript = data.transcript) === null || _data$transcript === void 0 ? void 0 : _data$transcript.csis[0];
|
|
76
74
|
var _getSpeakerFromProxyO = getSpeakerFromProxyOrStore({
|
|
77
75
|
meetingMembers: meeting.members.membersCollection.members,
|
|
@@ -88,7 +86,7 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
88
86
|
isFinal: data.isFinal,
|
|
89
87
|
translations: data.translations,
|
|
90
88
|
text: (_data$transcript2 = data.transcript) === null || _data$transcript2 === void 0 ? void 0 : _data$transcript2.text,
|
|
91
|
-
currentSpokenLanguage: (_data$transcript3 = data.transcript) === null || _data$transcript3 === void 0 ? void 0 : _data$transcript3.
|
|
89
|
+
currentSpokenLanguage: (_data$transcript3 = data.transcript) === null || _data$transcript3 === void 0 ? void 0 : _data$transcript3.transcript_language_code,
|
|
92
90
|
timestamp: data.timestamp,
|
|
93
91
|
speaker: speaker
|
|
94
92
|
};
|
|
@@ -107,7 +105,7 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
107
105
|
currentSpokenLanguage = transcript.transcript_language_code,
|
|
108
106
|
_transcript$csis = (0, _slicedToArray2.default)(transcript.csis, 1),
|
|
109
107
|
csisMember = _transcript$csis[0];
|
|
110
|
-
var newCaption = "".concat((_transcriptsPerCsis$g = (_transcriptsPerCsis$g2 = transcriptsPerCsis.get(csisMember)) === null || _transcriptsPerCsis$g2 === void 0 ? void 0 : _transcriptsPerCsis$g2.text) !== null && _transcriptsPerCsis$g !== void 0 ? _transcriptsPerCsis$g : '', " ").concat(text);
|
|
108
|
+
var newCaption = "".concat((_transcriptsPerCsis$g = (_transcriptsPerCsis$g2 = transcriptsPerCsis.get(csisMember)) === null || _transcriptsPerCsis$g2 === void 0 ? void 0 : _transcriptsPerCsis$g2.text) !== null && _transcriptsPerCsis$g !== void 0 ? _transcriptsPerCsis$g : '', " ").concat(text).trim();
|
|
111
109
|
|
|
112
110
|
// eslint-disable-next-line camelcase
|
|
113
111
|
transcriptsPerCsis.set(csisMember, {
|
|
@@ -120,7 +118,7 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
120
118
|
} finally {
|
|
121
119
|
_iterator.f();
|
|
122
120
|
}
|
|
123
|
-
var
|
|
121
|
+
var interimTranscriptionIds = [];
|
|
124
122
|
var _iterator2 = _createForOfIteratorHelper(transcriptsPerCsis),
|
|
125
123
|
_step2;
|
|
126
124
|
try {
|
|
@@ -139,9 +137,9 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
139
137
|
transcriptData.speakerProxy[key] = speaker;
|
|
140
138
|
}
|
|
141
139
|
var speakerId = speaker.speakerId;
|
|
142
|
-
var
|
|
140
|
+
var interimId = "".concat(transcriptId, "_").concat(speakerId);
|
|
143
141
|
var captionData = {
|
|
144
|
-
id:
|
|
142
|
+
id: interimId,
|
|
145
143
|
isFinal: data.isFinal,
|
|
146
144
|
translations: value.translations,
|
|
147
145
|
text: value.text,
|
|
@@ -149,13 +147,13 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
149
147
|
timestamp: value === null || value === void 0 ? void 0 : value.timestamp,
|
|
150
148
|
speaker: speaker
|
|
151
149
|
};
|
|
152
|
-
var
|
|
153
|
-
return transcript.id ===
|
|
150
|
+
var interimTranscriptIndex = transcriptData.captions.findIndex(function (transcript) {
|
|
151
|
+
return transcript.id === interimId;
|
|
154
152
|
});
|
|
155
|
-
if (
|
|
156
|
-
transcriptData.captions.splice(
|
|
153
|
+
if (interimTranscriptIndex !== -1) {
|
|
154
|
+
transcriptData.captions.splice(interimTranscriptIndex, 1);
|
|
157
155
|
}
|
|
158
|
-
|
|
156
|
+
interimTranscriptionIds.push(interimId);
|
|
159
157
|
transcriptData.captions.push(captionData);
|
|
160
158
|
};
|
|
161
159
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
@@ -166,36 +164,6 @@ var processNewCaptions = exports.processNewCaptions = function processNewCaption
|
|
|
166
164
|
} finally {
|
|
167
165
|
_iterator2.f();
|
|
168
166
|
}
|
|
169
|
-
transcriptData.interimCaptions[transcriptId] =
|
|
170
|
-
};
|
|
171
|
-
var processHighlightCreated = exports.processHighlightCreated = function processHighlightCreated(_ref3) {
|
|
172
|
-
var data = _ref3.data,
|
|
173
|
-
meeting = _ref3.meeting;
|
|
174
|
-
var transcriptData = meeting.transcription;
|
|
175
|
-
if (!transcriptData.highlights) {
|
|
176
|
-
transcriptData.highlights = [];
|
|
177
|
-
}
|
|
178
|
-
var csisKey = data.csis && data.csis.length > 0 ? data.csis[0] : undefined;
|
|
179
|
-
var _getSpeakerFromProxyO3 = getSpeakerFromProxyOrStore({
|
|
180
|
-
meetingMembers: meeting.members.membersCollection.members,
|
|
181
|
-
transcriptData: transcriptData,
|
|
182
|
-
csisKey: csisKey
|
|
183
|
-
}),
|
|
184
|
-
needsCaching = _getSpeakerFromProxyO3.needsCaching,
|
|
185
|
-
speaker = _getSpeakerFromProxyO3.speaker;
|
|
186
|
-
if (needsCaching) {
|
|
187
|
-
transcriptData.speakerProxy[csisKey] = speaker;
|
|
188
|
-
}
|
|
189
|
-
var highlightCreated = {
|
|
190
|
-
id: data.highlightId,
|
|
191
|
-
meta: {
|
|
192
|
-
label: data.highlightLabel,
|
|
193
|
-
source: data.highlightSource
|
|
194
|
-
},
|
|
195
|
-
text: data.text,
|
|
196
|
-
timestamp: data.timestamp,
|
|
197
|
-
speaker: speaker
|
|
198
|
-
};
|
|
199
|
-
meeting.transcription.highlights.push(highlightCreated);
|
|
167
|
+
transcriptData.interimCaptions[transcriptId] = interimTranscriptionIds;
|
|
200
168
|
};
|
|
201
169
|
//# sourceMappingURL=voicea-meeting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getSpeaker","exports","members","csis","arguments","length","undefined","_values","default","find","member","_member$participant$s","memberCSIs","participant","status","some","csi","includes","getSpeakerFromProxyOrStore","_ref","_meetingMember$partic","_meetingMember$partic2","csisKey","meetingMembers","transcriptData","speaker","speakerId","name","needsCaching","speakerProxy","meetingMember","speakerInStore","person","id","processNewCaptions","_ref2","data","meeting","transcriptId","transcription","isFinal","_data$transcript","_data$transcript2","_data$transcript3","doesInterimTranscriptionExist","interimCaptions","forEach","fakeId","fakeTranscriptIndex","captions","findIndex","transcript","splice","_getSpeakerFromProxyO","membersCollection","captionData","translations","text","currentSpokenLanguage","transcriptLanguageCode","timestamp","push","_data$transcripts","transcripts","transcriptsPerCsis","_map","_iterator","_createForOfIteratorHelper","_step","s","n","done","_transcriptsPerCsis$g","_transcriptsPerCsis$g2","value","transcript_language_code","_transcript$csis","_slicedToArray2","csisMember","newCaption","concat","get","set","err","e","f","fakeTranscriptionIds","_iterator2","_step2","_loop","_step2$value","key","_getSpeakerFromProxyO2","currentCaptionLanguage","processHighlightCreated","_ref3","highlights","_getSpeakerFromProxyO3","highlightCreated","highlightId","meta","label","highlightLabel","source","highlightSource"],"sources":["voicea-meeting.ts"],"sourcesContent":["export const getSpeaker = (members, csis = []) =>\n Object.values(members).find((member: any) => {\n const memberCSIs = member.participant.status.csis ?? [];\n\n return csis.some((csi) => memberCSIs.includes(csi));\n });\n\nexport const getSpeakerFromProxyOrStore = ({csisKey, meetingMembers, transcriptData}) => {\n let speaker = {\n speakerId: '',\n name: '',\n };\n\n let needsCaching = false;\n\n if (csisKey && transcriptData.speakerProxy[csisKey]) {\n speaker = transcriptData.speakerProxy[csisKey];\n }\n const meetingMember: any = getSpeaker(meetingMembers, [csisKey]);\n\n const speakerInStore = {\n speakerId: meetingMember?.participant.person.id ?? '',\n name: meetingMember?.participant.person.name ?? '',\n };\n\n if (\n meetingMember &&\n (speakerInStore.speakerId !== speaker.speakerId || speakerInStore.name !== speaker.name)\n ) {\n needsCaching = true;\n speaker = speakerInStore;\n }\n\n return {speaker, needsCaching};\n};\n\nexport const processNewCaptions = ({data, meeting}) => {\n const {transcriptId} = data;\n const transcriptData = meeting.transcription;\n\n if (data.isFinal) {\n const doesInterimTranscriptionExist = transcriptId in transcriptData.interimCaptions;\n\n if (doesInterimTranscriptionExist) {\n transcriptData.interimCaptions[transcriptId].forEach((fakeId) => {\n const fakeTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === fakeId\n );\n\n if (fakeTranscriptIndex !== -1) {\n transcriptData.captions.splice(fakeTranscriptIndex, 1);\n }\n });\n delete transcriptData.interimCaptions[transcriptId];\n }\n const csisKey = data.transcript?.csis[0];\n\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey,\n });\n\n if (needsCaching) {\n transcriptData.speakerProxy[csisKey] = speaker;\n }\n const captionData = {\n id: transcriptId,\n isFinal: data.isFinal,\n translations: data.translations,\n text: data.transcript?.text,\n currentSpokenLanguage: data.transcript?.transcriptLanguageCode,\n timestamp: data.timestamp,\n speaker,\n };\n transcriptData.captions.push(captionData);\n }\n const {transcripts = []} = data;\n const transcriptsPerCsis = new Map();\n\n for (const transcript of transcripts) {\n const {\n text,\n transcript_language_code: currentSpokenLanguage,\n csis: [csisMember],\n } = transcript;\n\n const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}`;\n\n // eslint-disable-next-line camelcase\n transcriptsPerCsis.set(csisMember, {text: newCaption, currentSpokenLanguage});\n }\n const fakeTranscriptionIds = [];\n\n for (const [key, value] of transcriptsPerCsis) {\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey: key,\n });\n\n if (needsCaching) {\n transcriptData.speakerProxy[key] = speaker;\n }\n const {speakerId} = speaker;\n const fakeId = `${transcriptId}_${speakerId}`;\n const captionData = {\n id: fakeId,\n isFinal: data.isFinal,\n translations: value.translations,\n text: value.text,\n currentCaptionLanguage: value.currentSpokenLanguage,\n timestamp: value?.timestamp,\n speaker,\n };\n\n const fakeTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === fakeId\n );\n\n if (fakeTranscriptIndex !== -1) {\n transcriptData.captions.splice(fakeTranscriptIndex, 1);\n }\n\n fakeTranscriptionIds.push(fakeId);\n transcriptData.captions.push(captionData);\n }\n transcriptData.interimCaptions[transcriptId] = fakeTranscriptionIds;\n};\n\nexport const processHighlightCreated = ({data, meeting}) => {\n const transcriptData = meeting.transcription;\n\n if (!transcriptData.highlights) {\n transcriptData.highlights = [];\n }\n\n const csisKey = data.csis && data.csis.length > 0 ? data.csis[0] : undefined;\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey,\n });\n\n if (needsCaching) {\n transcriptData.speakerProxy[csisKey] = speaker;\n }\n\n const highlightCreated = {\n id: data.highlightId,\n meta: {\n label: data.highlightLabel,\n source: data.highlightSource,\n },\n text: data.text,\n timestamp: data.timestamp,\n speaker,\n };\n\n meeting.transcription.highlights.push(highlightCreated);\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getSpeaker","exports","members","csis","arguments","length","undefined","_values","default","find","member","_member$participant$s","memberCSIs","participant","status","some","csi","includes","getSpeakerFromProxyOrStore","_ref","_meetingMember$partic","_meetingMember$partic2","csisKey","meetingMembers","transcriptData","speaker","speakerId","name","needsCaching","speakerProxy","meetingMember","person","id","processNewCaptions","_ref2","data","meeting","transcriptId","transcription","isFinal","_data$transcript","_data$transcript2","_data$transcript3","interimCaptions","forEach","interimId","interimTranscriptIndex","captions","findIndex","transcript","splice","_getSpeakerFromProxyO","membersCollection","captionData","translations","text","currentSpokenLanguage","transcript_language_code","timestamp","push","_data$transcripts","transcripts","transcriptsPerCsis","_map","_iterator","_createForOfIteratorHelper","_step","s","n","done","_transcriptsPerCsis$g","_transcriptsPerCsis$g2","value","_transcript$csis","_slicedToArray2","csisMember","newCaption","concat","get","trim","set","err","e","f","interimTranscriptionIds","_iterator2","_step2","_loop","_step2$value","key","_getSpeakerFromProxyO2","currentCaptionLanguage"],"sources":["voicea-meeting.ts"],"sourcesContent":["export const getSpeaker = (members, csis = []) =>\n Object.values(members).find((member: any) => {\n const memberCSIs = member.participant.status.csis ?? [];\n\n return csis.some((csi) => memberCSIs.includes(csi));\n });\n\nexport const getSpeakerFromProxyOrStore = ({csisKey, meetingMembers, transcriptData}) => {\n let speaker = {\n speakerId: '',\n name: '',\n };\n\n let needsCaching = false;\n\n if (csisKey && transcriptData.speakerProxy[csisKey]) {\n speaker = transcriptData.speakerProxy[csisKey];\n\n return {speaker, needsCaching};\n }\n\n const meetingMember: any = getSpeaker(meetingMembers, [csisKey]);\n\n speaker = {\n speakerId: meetingMember?.participant.person.id ?? '',\n name: meetingMember?.participant.person.name ?? '',\n };\n\n needsCaching = true;\n\n return {speaker, needsCaching};\n};\n\nexport const processNewCaptions = ({data, meeting}) => {\n const {transcriptId} = data;\n const transcriptData = meeting.transcription;\n\n if (data.isFinal) {\n transcriptData.interimCaptions[transcriptId].forEach((interimId) => {\n const interimTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === interimId\n );\n\n if (interimTranscriptIndex !== -1) {\n transcriptData.captions.splice(interimTranscriptIndex, 1);\n }\n });\n delete transcriptData.interimCaptions[transcriptId];\n const csisKey = data.transcript?.csis[0];\n\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey,\n });\n\n if (needsCaching) {\n transcriptData.speakerProxy[csisKey] = speaker;\n }\n const captionData = {\n id: transcriptId,\n isFinal: data.isFinal,\n translations: data.translations,\n text: data.transcript?.text,\n currentSpokenLanguage: data.transcript?.transcript_language_code,\n timestamp: data.timestamp,\n speaker,\n };\n transcriptData.captions.push(captionData);\n }\n const {transcripts = []} = data;\n const transcriptsPerCsis = new Map();\n\n for (const transcript of transcripts) {\n const {\n text,\n transcript_language_code: currentSpokenLanguage,\n csis: [csisMember],\n } = transcript;\n\n const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}`.trim();\n\n // eslint-disable-next-line camelcase\n transcriptsPerCsis.set(csisMember, {text: newCaption, currentSpokenLanguage});\n }\n const interimTranscriptionIds = [];\n\n for (const [key, value] of transcriptsPerCsis) {\n const {needsCaching, speaker} = getSpeakerFromProxyOrStore({\n meetingMembers: meeting.members.membersCollection.members,\n transcriptData,\n csisKey: key,\n });\n\n if (needsCaching) {\n transcriptData.speakerProxy[key] = speaker;\n }\n const {speakerId} = speaker;\n const interimId = `${transcriptId}_${speakerId}`;\n const captionData = {\n id: interimId,\n isFinal: data.isFinal,\n translations: value.translations,\n text: value.text,\n currentCaptionLanguage: value.currentSpokenLanguage,\n timestamp: value?.timestamp,\n speaker,\n };\n\n const interimTranscriptIndex = transcriptData.captions.findIndex(\n (transcript) => transcript.id === interimId\n );\n\n if (interimTranscriptIndex !== -1) {\n transcriptData.captions.splice(interimTranscriptIndex, 1);\n }\n\n interimTranscriptionIds.push(interimId);\n transcriptData.captions.push(captionData);\n }\n transcriptData.interimCaptions[transcriptId] = interimTranscriptionIds;\n};\n"],"mappings":"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"}
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "2.60.1-next.
|
|
65
|
+
version: "2.60.1-next.15"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/jest-config-legacy": "0.0.0",
|
|
46
46
|
"@webex/legacy-tools": "0.0.0",
|
|
47
|
-
"@webex/plugin-meetings": "2.60.1-next.
|
|
47
|
+
"@webex/plugin-meetings": "2.60.1-next.15",
|
|
48
48
|
"@webex/plugin-rooms": "2.60.1-next.10",
|
|
49
49
|
"@webex/test-helper-chai": "2.60.1-next.10",
|
|
50
50
|
"@webex/test-helper-mocha": "2.60.1-next.10",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@webex/internal-plugin-metrics": "2.60.1-next.10",
|
|
72
72
|
"@webex/internal-plugin-support": "2.60.1-next.10",
|
|
73
73
|
"@webex/internal-plugin-user": "2.60.1-next.10",
|
|
74
|
-
"@webex/internal-plugin-voicea": "2.60.1-next.
|
|
74
|
+
"@webex/internal-plugin-voicea": "2.60.1-next.15",
|
|
75
75
|
"@webex/media-helpers": "3.0.0-next.30",
|
|
76
76
|
"@webex/plugin-people": "2.60.1-next.10",
|
|
77
77
|
"@webex/plugin-rooms": "2.60.1-next.10",
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"//": [
|
|
93
93
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
94
94
|
],
|
|
95
|
-
"version": "2.60.1-next.
|
|
95
|
+
"version": "2.60.1-next.15"
|
|
96
96
|
}
|
package/src/meeting/index.ts
CHANGED
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
EVENT_TRIGGERS as VOICEAEVENTS,
|
|
38
38
|
TURN_ON_CAPTION_STATUS,
|
|
39
39
|
} from '@webex/internal-plugin-voicea';
|
|
40
|
-
import {processNewCaptions
|
|
40
|
+
import {processNewCaptions} from './voicea-meeting';
|
|
41
41
|
|
|
42
42
|
import {
|
|
43
43
|
MeetingNotActiveError,
|
|
@@ -187,7 +187,6 @@ export type Transcription = {
|
|
|
187
187
|
isListening: boolean;
|
|
188
188
|
commandText: string;
|
|
189
189
|
captions: Array<CaptionData>;
|
|
190
|
-
highlights: Array<any>;
|
|
191
190
|
showCaptionBox: boolean;
|
|
192
191
|
transcribingRequestStatus: string;
|
|
193
192
|
isCaptioning: boolean;
|
|
@@ -664,9 +663,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
664
663
|
}
|
|
665
664
|
);
|
|
666
665
|
},
|
|
667
|
-
[VOICEAEVENTS.HIGHLIGHT_CREATED]: (data) => {
|
|
668
|
-
processHighlightCreated({data, meeting: this});
|
|
669
|
-
},
|
|
670
666
|
};
|
|
671
667
|
|
|
672
668
|
private retriedWithTurnServer: boolean;
|
|
@@ -1269,7 +1265,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
1269
1265
|
*/
|
|
1270
1266
|
this.transcription = {
|
|
1271
1267
|
captions: [],
|
|
1272
|
-
highlights: [],
|
|
1273
1268
|
isListening: false,
|
|
1274
1269
|
commandText: '',
|
|
1275
1270
|
languageOptions: {},
|
|
@@ -2056,12 +2051,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
2056
2051
|
this.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]
|
|
2057
2052
|
);
|
|
2058
2053
|
|
|
2059
|
-
// @ts-ignore
|
|
2060
|
-
this.webex.internal.voicea.on(
|
|
2061
|
-
VOICEAEVENTS.HIGHLIGHT_CREATED,
|
|
2062
|
-
this.voiceaListenerCallbacks[VOICEAEVENTS.HIGHLIGHT_CREATED]
|
|
2063
|
-
);
|
|
2064
|
-
|
|
2065
2054
|
this.areVoiceaEventsSetup = true;
|
|
2066
2055
|
}
|
|
2067
2056
|
|
|
@@ -4710,11 +4699,13 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4710
4699
|
reject(payload);
|
|
4711
4700
|
}
|
|
4712
4701
|
};
|
|
4702
|
+
|
|
4713
4703
|
// @ts-ignore
|
|
4714
4704
|
this.webex.internal.voicea.on(
|
|
4715
4705
|
VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,
|
|
4716
4706
|
voiceaListenerLanguageUpdate
|
|
4717
4707
|
);
|
|
4708
|
+
|
|
4718
4709
|
// @ts-ignore
|
|
4719
4710
|
this.webex.internal.voicea.setSpokenLanguage(language);
|
|
4720
4711
|
} catch (error) {
|
|
@@ -4830,12 +4821,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
4830
4821
|
this.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]
|
|
4831
4822
|
);
|
|
4832
4823
|
|
|
4833
|
-
// @ts-ignore
|
|
4834
|
-
this.webex.internal.voicea.off(
|
|
4835
|
-
VOICEAEVENTS.HIGHLIGHT_CREATED,
|
|
4836
|
-
this.voiceaListenerCallbacks[VOICEAEVENTS.HIGHLIGHT_CREATED]
|
|
4837
|
-
);
|
|
4838
|
-
|
|
4839
4824
|
this.areVoiceaEventsSetup = false;
|
|
4840
4825
|
this.triggerStopReceivingTranscriptionEvent();
|
|
4841
4826
|
}
|
|
@@ -15,21 +15,18 @@ export const getSpeakerFromProxyOrStore = ({csisKey, meetingMembers, transcriptD
|
|
|
15
15
|
|
|
16
16
|
if (csisKey && transcriptData.speakerProxy[csisKey]) {
|
|
17
17
|
speaker = transcriptData.speakerProxy[csisKey];
|
|
18
|
+
|
|
19
|
+
return {speaker, needsCaching};
|
|
18
20
|
}
|
|
21
|
+
|
|
19
22
|
const meetingMember: any = getSpeaker(meetingMembers, [csisKey]);
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
speaker = {
|
|
22
25
|
speakerId: meetingMember?.participant.person.id ?? '',
|
|
23
26
|
name: meetingMember?.participant.person.name ?? '',
|
|
24
27
|
};
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
meetingMember &&
|
|
28
|
-
(speakerInStore.speakerId !== speaker.speakerId || speakerInStore.name !== speaker.name)
|
|
29
|
-
) {
|
|
30
|
-
needsCaching = true;
|
|
31
|
-
speaker = speakerInStore;
|
|
32
|
-
}
|
|
29
|
+
needsCaching = true;
|
|
33
30
|
|
|
34
31
|
return {speaker, needsCaching};
|
|
35
32
|
};
|
|
@@ -39,20 +36,16 @@ export const processNewCaptions = ({data, meeting}) => {
|
|
|
39
36
|
const transcriptData = meeting.transcription;
|
|
40
37
|
|
|
41
38
|
if (data.isFinal) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
delete transcriptData.interimCaptions[transcriptId];
|
|
55
|
-
}
|
|
39
|
+
transcriptData.interimCaptions[transcriptId].forEach((interimId) => {
|
|
40
|
+
const interimTranscriptIndex = transcriptData.captions.findIndex(
|
|
41
|
+
(transcript) => transcript.id === interimId
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
if (interimTranscriptIndex !== -1) {
|
|
45
|
+
transcriptData.captions.splice(interimTranscriptIndex, 1);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
delete transcriptData.interimCaptions[transcriptId];
|
|
56
49
|
const csisKey = data.transcript?.csis[0];
|
|
57
50
|
|
|
58
51
|
const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
|
|
@@ -69,7 +62,7 @@ export const processNewCaptions = ({data, meeting}) => {
|
|
|
69
62
|
isFinal: data.isFinal,
|
|
70
63
|
translations: data.translations,
|
|
71
64
|
text: data.transcript?.text,
|
|
72
|
-
currentSpokenLanguage: data.transcript?.
|
|
65
|
+
currentSpokenLanguage: data.transcript?.transcript_language_code,
|
|
73
66
|
timestamp: data.timestamp,
|
|
74
67
|
speaker,
|
|
75
68
|
};
|
|
@@ -85,12 +78,12 @@ export const processNewCaptions = ({data, meeting}) => {
|
|
|
85
78
|
csis: [csisMember],
|
|
86
79
|
} = transcript;
|
|
87
80
|
|
|
88
|
-
const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}
|
|
81
|
+
const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}`.trim();
|
|
89
82
|
|
|
90
83
|
// eslint-disable-next-line camelcase
|
|
91
84
|
transcriptsPerCsis.set(csisMember, {text: newCaption, currentSpokenLanguage});
|
|
92
85
|
}
|
|
93
|
-
const
|
|
86
|
+
const interimTranscriptionIds = [];
|
|
94
87
|
|
|
95
88
|
for (const [key, value] of transcriptsPerCsis) {
|
|
96
89
|
const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
|
|
@@ -103,9 +96,9 @@ export const processNewCaptions = ({data, meeting}) => {
|
|
|
103
96
|
transcriptData.speakerProxy[key] = speaker;
|
|
104
97
|
}
|
|
105
98
|
const {speakerId} = speaker;
|
|
106
|
-
const
|
|
99
|
+
const interimId = `${transcriptId}_${speakerId}`;
|
|
107
100
|
const captionData = {
|
|
108
|
-
id:
|
|
101
|
+
id: interimId,
|
|
109
102
|
isFinal: data.isFinal,
|
|
110
103
|
translations: value.translations,
|
|
111
104
|
text: value.text,
|
|
@@ -114,48 +107,16 @@ export const processNewCaptions = ({data, meeting}) => {
|
|
|
114
107
|
speaker,
|
|
115
108
|
};
|
|
116
109
|
|
|
117
|
-
const
|
|
118
|
-
(transcript) => transcript.id ===
|
|
110
|
+
const interimTranscriptIndex = transcriptData.captions.findIndex(
|
|
111
|
+
(transcript) => transcript.id === interimId
|
|
119
112
|
);
|
|
120
113
|
|
|
121
|
-
if (
|
|
122
|
-
transcriptData.captions.splice(
|
|
114
|
+
if (interimTranscriptIndex !== -1) {
|
|
115
|
+
transcriptData.captions.splice(interimTranscriptIndex, 1);
|
|
123
116
|
}
|
|
124
117
|
|
|
125
|
-
|
|
118
|
+
interimTranscriptionIds.push(interimId);
|
|
126
119
|
transcriptData.captions.push(captionData);
|
|
127
120
|
}
|
|
128
|
-
transcriptData.interimCaptions[transcriptId] =
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
export const processHighlightCreated = ({data, meeting}) => {
|
|
132
|
-
const transcriptData = meeting.transcription;
|
|
133
|
-
|
|
134
|
-
if (!transcriptData.highlights) {
|
|
135
|
-
transcriptData.highlights = [];
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const csisKey = data.csis && data.csis.length > 0 ? data.csis[0] : undefined;
|
|
139
|
-
const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
|
|
140
|
-
meetingMembers: meeting.members.membersCollection.members,
|
|
141
|
-
transcriptData,
|
|
142
|
-
csisKey,
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
if (needsCaching) {
|
|
146
|
-
transcriptData.speakerProxy[csisKey] = speaker;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
const highlightCreated = {
|
|
150
|
-
id: data.highlightId,
|
|
151
|
-
meta: {
|
|
152
|
-
label: data.highlightLabel,
|
|
153
|
-
source: data.highlightSource,
|
|
154
|
-
},
|
|
155
|
-
text: data.text,
|
|
156
|
-
timestamp: data.timestamp,
|
|
157
|
-
speaker,
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
meeting.transcription.highlights.push(highlightCreated);
|
|
121
|
+
transcriptData.interimCaptions[transcriptId] = interimTranscriptionIds;
|
|
161
122
|
};
|
|
@@ -676,7 +676,7 @@ describe('plugin-meetings', () => {
|
|
|
676
676
|
|
|
677
677
|
await meeting.startTranscription();
|
|
678
678
|
|
|
679
|
-
assert.equal(webex.internal.voicea.on.callCount,
|
|
679
|
+
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
680
680
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
681
681
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
682
682
|
assert.calledWith(
|
|
@@ -685,7 +685,7 @@ describe('plugin-meetings', () => {
|
|
|
685
685
|
);
|
|
686
686
|
|
|
687
687
|
await meeting.startTranscription();
|
|
688
|
-
assert.equal(webex.internal.voicea.on.callCount,
|
|
688
|
+
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
689
689
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
690
690
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
691
691
|
assert.calledTwice(
|
|
@@ -706,7 +706,7 @@ describe('plugin-meetings', () => {
|
|
|
706
706
|
|
|
707
707
|
await meeting.startTranscription();
|
|
708
708
|
|
|
709
|
-
assert.equal(webex.internal.voicea.on.callCount,
|
|
709
|
+
assert.equal(webex.internal.voicea.on.callCount, 4);
|
|
710
710
|
assert.equal(meeting.areVoiceaEventsSetup, true);
|
|
711
711
|
assert.equal(webex.internal.voicea.listenToEvents.callCount, 1);
|
|
712
712
|
assert.notCalled(
|
|
@@ -735,7 +735,7 @@ describe('plugin-meetings', () => {
|
|
|
735
735
|
|
|
736
736
|
it('should stop listening to voicea events and also trigger a stop event', () => {
|
|
737
737
|
meeting.stopTranscription();
|
|
738
|
-
assert.equal(webex.internal.voicea.off.callCount,
|
|
738
|
+
assert.equal(webex.internal.voicea.off.callCount, 4);
|
|
739
739
|
assert.equal(meeting.areVoiceaEventsSetup, false);
|
|
740
740
|
assert.calledWith(
|
|
741
741
|
TriggerProxy.trigger,
|
|
@@ -749,6 +749,150 @@ describe('plugin-meetings', () => {
|
|
|
749
749
|
});
|
|
750
750
|
});
|
|
751
751
|
|
|
752
|
+
describe('#setCaptionLanguage', () => {
|
|
753
|
+
beforeEach(() => {
|
|
754
|
+
meeting.isTranscriptionSupported = sinon.stub();
|
|
755
|
+
meeting.transcription = { languageOptions: {} };
|
|
756
|
+
webex.internal.voicea.on = sinon.stub();
|
|
757
|
+
webex.internal.voicea.off = sinon.stub();
|
|
758
|
+
webex.internal.voicea.setCaptionLanguage = sinon.stub();
|
|
759
|
+
webex.internal.voicea.requestLanguage = sinon.stub();
|
|
760
|
+
});
|
|
761
|
+
|
|
762
|
+
afterEach(() => {
|
|
763
|
+
// Restore the original methods after each test
|
|
764
|
+
sinon.restore();
|
|
765
|
+
});
|
|
766
|
+
|
|
767
|
+
it('should reject if transcription is not supported', (done) => {
|
|
768
|
+
meeting.isTranscriptionSupported.returns(false);
|
|
769
|
+
|
|
770
|
+
meeting.setCaptionLanguage('fr').catch((error) => {
|
|
771
|
+
assert.equal(error.message, 'Webex Assistant is not enabled/supported');
|
|
772
|
+
done();
|
|
773
|
+
});
|
|
774
|
+
});
|
|
775
|
+
|
|
776
|
+
it('should resolve with the language code on successful language update', (done) => {
|
|
777
|
+
meeting.isTranscriptionSupported.returns(true);
|
|
778
|
+
const languageCode = 'fr';
|
|
779
|
+
|
|
780
|
+
meeting.setCaptionLanguage(languageCode).then((resolvedLanguageCode) => {
|
|
781
|
+
assert.calledWith(
|
|
782
|
+
webex.internal.voicea.requestLanguage,
|
|
783
|
+
languageCode
|
|
784
|
+
);
|
|
785
|
+
assert.equal(resolvedLanguageCode, languageCode);
|
|
786
|
+
assert.equal(meeting.transcription.languageOptions.currentCaptionLanguage, languageCode);
|
|
787
|
+
done();
|
|
788
|
+
});
|
|
789
|
+
|
|
790
|
+
assert.calledOnceWithMatch(
|
|
791
|
+
webex.internal.voicea.on,
|
|
792
|
+
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE,
|
|
793
|
+
);
|
|
794
|
+
|
|
795
|
+
// Trigger the event
|
|
796
|
+
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
797
|
+
voiceaListenerLangugeUpdate({ statusCode: 200, languageCode });
|
|
798
|
+
});
|
|
799
|
+
|
|
800
|
+
it('should reject if the statusCode in payload is not 200', (done) => {
|
|
801
|
+
meeting.isTranscriptionSupported.returns(true);
|
|
802
|
+
const languageCode = 'fr';
|
|
803
|
+
const rejectPayload = {
|
|
804
|
+
statusCode: 400,
|
|
805
|
+
message: 'some error message'
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
meeting.setCaptionLanguage(languageCode).catch((payload) => {
|
|
809
|
+
assert.equal(payload, rejectPayload);
|
|
810
|
+
done();
|
|
811
|
+
});
|
|
812
|
+
|
|
813
|
+
assert.calledOnceWithMatch(
|
|
814
|
+
webex.internal.voicea.on,
|
|
815
|
+
VOICEAEVENTS.CAPTION_LANGUAGE_UPDATE,
|
|
816
|
+
);
|
|
817
|
+
|
|
818
|
+
// Trigger the event
|
|
819
|
+
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
820
|
+
voiceaListenerLangugeUpdate(rejectPayload);
|
|
821
|
+
});
|
|
822
|
+
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
describe('#setSpokenLanguage', () => {
|
|
826
|
+
beforeEach(() => {
|
|
827
|
+
meeting.isTranscriptionSupported = sinon.stub();
|
|
828
|
+
meeting.transcription = { languageOptions: {} };
|
|
829
|
+
webex.internal.voicea.on = sinon.stub();
|
|
830
|
+
webex.internal.voicea.off = sinon.stub();
|
|
831
|
+
webex.internal.voicea.setSpokenLanguage = sinon.stub();
|
|
832
|
+
});
|
|
833
|
+
|
|
834
|
+
afterEach(() => {
|
|
835
|
+
// Restore the original methods after each test
|
|
836
|
+
sinon.restore();
|
|
837
|
+
});
|
|
838
|
+
|
|
839
|
+
it('should reject if transcription is not supported', (done) => {
|
|
840
|
+
meeting.isTranscriptionSupported.returns(false);
|
|
841
|
+
|
|
842
|
+
meeting.setSpokenLanguage('fr').catch((error) => {
|
|
843
|
+
assert.equal(error.message, 'Webex Assistant is not enabled/supported');
|
|
844
|
+
done();
|
|
845
|
+
});
|
|
846
|
+
});
|
|
847
|
+
|
|
848
|
+
it('should resolve with the language code on successful language update', (done) => {
|
|
849
|
+
meeting.isTranscriptionSupported.returns(true);
|
|
850
|
+
const languageCode = 'fr';
|
|
851
|
+
|
|
852
|
+
meeting.setSpokenLanguage(languageCode).then((resolvedLanguageCode) => {
|
|
853
|
+
assert.calledWith(
|
|
854
|
+
webex.internal.voicea.setSpokenLanguage,
|
|
855
|
+
languageCode
|
|
856
|
+
);
|
|
857
|
+
assert.equal(resolvedLanguageCode, languageCode);
|
|
858
|
+
assert.equal(meeting.transcription.languageOptions.currentSpokenLanguage, languageCode);
|
|
859
|
+
done();
|
|
860
|
+
});
|
|
861
|
+
|
|
862
|
+
assert.calledOnceWithMatch(
|
|
863
|
+
webex.internal.voicea.on,
|
|
864
|
+
VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,
|
|
865
|
+
);
|
|
866
|
+
|
|
867
|
+
// Trigger the event
|
|
868
|
+
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
869
|
+
voiceaListenerLangugeUpdate({ languageCode });
|
|
870
|
+
});
|
|
871
|
+
|
|
872
|
+
it('should reject if the language code does not exist in payload', (done) => {
|
|
873
|
+
meeting.isTranscriptionSupported.returns(true);
|
|
874
|
+
const languageCode = 'fr';
|
|
875
|
+
const rejectPayload = {
|
|
876
|
+
'message': 'some error message'
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
meeting.setSpokenLanguage(languageCode).catch((payload) => {
|
|
880
|
+
assert.equal(payload, rejectPayload);
|
|
881
|
+
done();
|
|
882
|
+
});
|
|
883
|
+
|
|
884
|
+
assert.calledOnceWithMatch(
|
|
885
|
+
webex.internal.voicea.on,
|
|
886
|
+
VOICEAEVENTS.SPOKEN_LANGUAGE_UPDATE,
|
|
887
|
+
);
|
|
888
|
+
|
|
889
|
+
// Trigger the event
|
|
890
|
+
const voiceaListenerLangugeUpdate = webex.internal.voicea.on.getCall(0).args[1];
|
|
891
|
+
voiceaListenerLangugeUpdate(rejectPayload);
|
|
892
|
+
});
|
|
893
|
+
|
|
894
|
+
});
|
|
895
|
+
|
|
752
896
|
describe('transcription events', () => {
|
|
753
897
|
it('should trigger meeting:caption-received event', () => {
|
|
754
898
|
meeting.voiceaListenerCallbacks[VOICEAEVENTS.NEW_CAPTION]({});
|
|
@@ -789,6 +933,7 @@ describe('plugin-meetings', () => {
|
|
|
789
933
|
);
|
|
790
934
|
});
|
|
791
935
|
});
|
|
936
|
+
|
|
792
937
|
describe('#isReactionsSupported', () => {
|
|
793
938
|
it('should return false if the feature is not supported for the meeting', () => {
|
|
794
939
|
meeting.locusInfo.controls = {reactions: {enabled: false}};
|