mediasfu-shared 1.0.4 → 1.0.6
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/index.cjs +200 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +20 -2
- package/dist/index.js +200 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/consumers/createSendTransport.ts +51 -2
- package/src/index.native.ts +220 -0
- package/src/index.ts +23 -1
- package/src/methods/message/sendMessage.ts +7 -3
- package/src/methods/utils/resolveMediaSFURoomApi.ts +4 -1
- package/src/methods/utils/translationLanguages.ts +64 -2
package/dist/index.d.ts
CHANGED
|
@@ -1672,6 +1672,14 @@ export declare interface CoHostResponsibility {
|
|
|
1672
1672
|
dedicated: boolean;
|
|
1673
1673
|
}
|
|
1674
1674
|
|
|
1675
|
+
/**
|
|
1676
|
+
* Curated list of the most widely-supported language codes for real-time translation.
|
|
1677
|
+
* This set covers the languages supported by major STT/TTS/translation providers
|
|
1678
|
+
* (Google, Azure, Deepgram, OpenAI, DeepL, etc.) and is the default shown in UI pickers.
|
|
1679
|
+
* Use getSupportedLanguages() if you need the full extended list.
|
|
1680
|
+
*/
|
|
1681
|
+
export declare const COMMON_LANGUAGE_CODES: string[];
|
|
1682
|
+
|
|
1675
1683
|
/**
|
|
1676
1684
|
* Compares the current active names with the previous active names and triggers an action if there are changes.
|
|
1677
1685
|
*
|
|
@@ -2584,7 +2592,7 @@ export declare interface ControlMediaHostTrackLike {
|
|
|
2584
2592
|
|
|
2585
2593
|
export declare type ControlMediaHostType<TOnScreenChangesParameters = unknown, TStopShareScreenParameters = unknown, TDisconnectSendTransportVideoParameters = unknown, TDisconnectSendTransportAudioParameters = unknown, TDisconnectSendTransportScreenParameters = unknown, TAllParameters extends TOnScreenChangesParameters & TStopShareScreenParameters & TDisconnectSendTransportVideoParameters & TDisconnectSendTransportAudioParameters & TDisconnectSendTransportScreenParameters = TOnScreenChangesParameters & TStopShareScreenParameters & TDisconnectSendTransportVideoParameters & TDisconnectSendTransportAudioParameters & TDisconnectSendTransportScreenParameters, TMediaStream extends ControlMediaHostMediaStreamLike = MediaStream> = (options: ControlMediaHostOptions<TOnScreenChangesParameters, TStopShareScreenParameters, TDisconnectSendTransportVideoParameters, TDisconnectSendTransportAudioParameters, TDisconnectSendTransportScreenParameters, TAllParameters, TMediaStream>) => Promise<void>;
|
|
2586
2594
|
|
|
2587
|
-
|
|
2595
|
+
declare interface ControlMediaOptions {
|
|
2588
2596
|
data: ControlMediaData;
|
|
2589
2597
|
showAlert?: ShowAlert;
|
|
2590
2598
|
clickAudio?: () => void;
|
|
@@ -2592,6 +2600,8 @@ export declare interface ControlMediaOptions {
|
|
|
2592
2600
|
audioAlreadyOn?: boolean;
|
|
2593
2601
|
videoAlreadyOn?: boolean;
|
|
2594
2602
|
}
|
|
2603
|
+
export { ControlMediaOptions }
|
|
2604
|
+
export { ControlMediaOptions as PanelistControlMediaOptions }
|
|
2595
2605
|
|
|
2596
2606
|
declare interface ControlMediaOptions_2 {
|
|
2597
2607
|
participantId: string;
|
|
@@ -2607,7 +2617,9 @@ declare interface ControlMediaOptions_2 {
|
|
|
2607
2617
|
roomName: string;
|
|
2608
2618
|
}
|
|
2609
2619
|
|
|
2610
|
-
|
|
2620
|
+
declare type ControlMediaType = (options: ControlMediaOptions) => Promise<void>;
|
|
2621
|
+
export { ControlMediaType }
|
|
2622
|
+
export { ControlMediaType as PanelistControlMediaType }
|
|
2611
2623
|
|
|
2612
2624
|
export declare type ControlsPosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
|
|
2613
2625
|
|
|
@@ -3714,6 +3726,12 @@ export declare const getAvailableVoices: (langCode: string, provider?: TTSProvid
|
|
|
3714
3726
|
female: VoiceOption[];
|
|
3715
3727
|
};
|
|
3716
3728
|
|
|
3729
|
+
/**
|
|
3730
|
+
* Returns the curated list of commonly-supported languages for translation UI pickers.
|
|
3731
|
+
* Sorted alphabetically by display name.
|
|
3732
|
+
*/
|
|
3733
|
+
export declare const getCommonLanguages: (displayLocale?: string) => LanguageOption[];
|
|
3734
|
+
|
|
3717
3735
|
/**
|
|
3718
3736
|
* Resolves newly announced consuming domains to connection targets and connects missing ones.
|
|
3719
3737
|
*
|
package/dist/index.js
CHANGED
|
@@ -1702,6 +1702,21 @@ const connectSendTransportVideo = async ({
|
|
|
1702
1702
|
throw error;
|
|
1703
1703
|
}
|
|
1704
1704
|
};
|
|
1705
|
+
const waitForReadyDevice = async (parameters, attempts = 20, delayMs = 100) => {
|
|
1706
|
+
let resolvedDevice = parameters.getUpdatedAllParams().device ?? parameters.device;
|
|
1707
|
+
for (let attempt = 0; !resolvedDevice && attempt < attempts; attempt += 1) {
|
|
1708
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
1709
|
+
resolvedDevice = parameters.getUpdatedAllParams().device ?? parameters.device;
|
|
1710
|
+
}
|
|
1711
|
+
return resolvedDevice;
|
|
1712
|
+
};
|
|
1713
|
+
const notifyDeviceNotReady = (parameters) => {
|
|
1714
|
+
parameters.showAlert?.({
|
|
1715
|
+
message: "Media device is still initializing. Please try screen sharing again in a moment.",
|
|
1716
|
+
type: "danger",
|
|
1717
|
+
duration: 3e3
|
|
1718
|
+
});
|
|
1719
|
+
};
|
|
1705
1720
|
const createLocalSendTransport = async ({
|
|
1706
1721
|
option,
|
|
1707
1722
|
parameters
|
|
@@ -1719,6 +1734,10 @@ const createLocalSendTransport = async ({
|
|
|
1719
1734
|
updateLocalTransportCreated,
|
|
1720
1735
|
connectSendTransport: connectSendTransport2
|
|
1721
1736
|
} = parameters;
|
|
1737
|
+
const updatedParams = parameters.getUpdatedAllParams();
|
|
1738
|
+
device = updatedParams.device ?? device;
|
|
1739
|
+
socket = updatedParams.socket ?? socket;
|
|
1740
|
+
localSocket = updatedParams.localSocket ?? localSocket;
|
|
1722
1741
|
if (!localSocket || !localSocket.id || socket.id === localSocket.id) {
|
|
1723
1742
|
return;
|
|
1724
1743
|
}
|
|
@@ -1730,7 +1749,12 @@ const createLocalSendTransport = async ({
|
|
|
1730
1749
|
console.error("Error in local createWebRtcTransport:", params.error);
|
|
1731
1750
|
return;
|
|
1732
1751
|
}
|
|
1733
|
-
|
|
1752
|
+
const resolvedDevice = await waitForReadyDevice(parameters) ?? device;
|
|
1753
|
+
if (!resolvedDevice) {
|
|
1754
|
+
notifyDeviceNotReady(parameters);
|
|
1755
|
+
return;
|
|
1756
|
+
}
|
|
1757
|
+
localProducerTransport = await resolvedDevice.createSendTransport(params);
|
|
1734
1758
|
if (updateLocalProducerTransport) {
|
|
1735
1759
|
updateLocalProducerTransport(localProducerTransport);
|
|
1736
1760
|
}
|
|
@@ -1805,6 +1829,13 @@ const createSendTransport = async ({
|
|
|
1805
1829
|
const updatedParams = parameters.getUpdatedAllParams();
|
|
1806
1830
|
device = updatedParams.device;
|
|
1807
1831
|
socket = updatedParams.socket;
|
|
1832
|
+
if (!device) {
|
|
1833
|
+
device = await waitForReadyDevice(parameters);
|
|
1834
|
+
}
|
|
1835
|
+
if (!device) {
|
|
1836
|
+
notifyDeviceNotReady(parameters);
|
|
1837
|
+
return;
|
|
1838
|
+
}
|
|
1808
1839
|
try {
|
|
1809
1840
|
await createLocalSendTransport({ option, parameters });
|
|
1810
1841
|
} catch (error) {
|
|
@@ -1818,7 +1849,12 @@ const createSendTransport = async ({
|
|
|
1818
1849
|
console.error("Error in createWebRtcTransport:", params.error);
|
|
1819
1850
|
return;
|
|
1820
1851
|
}
|
|
1821
|
-
|
|
1852
|
+
const resolvedDevice = await waitForReadyDevice(parameters) ?? device;
|
|
1853
|
+
if (!resolvedDevice) {
|
|
1854
|
+
notifyDeviceNotReady(parameters);
|
|
1855
|
+
return;
|
|
1856
|
+
}
|
|
1857
|
+
producerTransport = await resolvedDevice.createSendTransport(params);
|
|
1822
1858
|
updateProducerTransport(producerTransport);
|
|
1823
1859
|
producerTransport.on(
|
|
1824
1860
|
"connect",
|
|
@@ -6349,6 +6385,7 @@ const updateRoomParametersClient = ({ parameters }) => {
|
|
|
6349
6385
|
}
|
|
6350
6386
|
};
|
|
6351
6387
|
const DEFAULT_MEDIA_SFU_ROOM_API_URL = "https://mediasfu.com/v1/rooms/";
|
|
6388
|
+
const getDefaultMediaSFURoomApiUrl = () => DEFAULT_MEDIA_SFU_ROOM_API_URL;
|
|
6352
6389
|
const normalizeManagedRoomApi = (normalizedLink) => {
|
|
6353
6390
|
if (normalizedLink.includes("/v1/rooms")) {
|
|
6354
6391
|
return `${normalizedLink.replace(/\/$/, "")}/`;
|
|
@@ -6358,7 +6395,7 @@ const normalizeManagedRoomApi = (normalizedLink) => {
|
|
|
6358
6395
|
const resolveMediaSFURoomApi = (localLink, action) => {
|
|
6359
6396
|
const normalizedLink = localLink?.trim();
|
|
6360
6397
|
if (!normalizedLink) {
|
|
6361
|
-
return
|
|
6398
|
+
return getDefaultMediaSFURoomApiUrl();
|
|
6362
6399
|
}
|
|
6363
6400
|
if (normalizedLink.includes("mediasfu.com")) {
|
|
6364
6401
|
return normalizeManagedRoomApi(normalizedLink);
|
|
@@ -7898,6 +7935,9 @@ const sendMessage = async ({
|
|
|
7898
7935
|
chatSetting
|
|
7899
7936
|
}) => {
|
|
7900
7937
|
let chatValue = false;
|
|
7938
|
+
const normalizedReceivers = (receivers ?? []).filter(
|
|
7939
|
+
(receiver) => typeof receiver === "string" && receiver.trim().length > 0
|
|
7940
|
+
);
|
|
7901
7941
|
if (messagesLength > 100 && roomName.startsWith("d") || messagesLength > 500 && roomName.startsWith("s") || messagesLength > 1e5 && roomName.startsWith("p")) {
|
|
7902
7942
|
showAlert?.({
|
|
7903
7943
|
message: "You have reached the maximum number of messages allowed.",
|
|
@@ -7914,7 +7954,7 @@ const sendMessage = async ({
|
|
|
7914
7954
|
});
|
|
7915
7955
|
return;
|
|
7916
7956
|
}
|
|
7917
|
-
if (
|
|
7957
|
+
if (normalizedReceivers.length < 1 && group === false && islevel === "2") {
|
|
7918
7958
|
showAlert?.({
|
|
7919
7959
|
message: "Please select a message to reply to",
|
|
7920
7960
|
type: "danger",
|
|
@@ -7924,7 +7964,7 @@ const sendMessage = async ({
|
|
|
7924
7964
|
}
|
|
7925
7965
|
const messageObject = {
|
|
7926
7966
|
sender: sender ? sender : member,
|
|
7927
|
-
receivers,
|
|
7967
|
+
receivers: normalizedReceivers,
|
|
7928
7968
|
message,
|
|
7929
7969
|
timestamp: (/* @__PURE__ */ new Date()).toLocaleTimeString(),
|
|
7930
7970
|
group: group !== void 0 && group !== null ? group : false
|
|
@@ -10081,13 +10121,112 @@ const TTS_SUPPORT_BY_LANGUAGE = {
|
|
|
10081
10121
|
ca: "good",
|
|
10082
10122
|
auto: "n/a"
|
|
10083
10123
|
};
|
|
10124
|
+
const LANGUAGE_NAMES_EN = {
|
|
10125
|
+
en: "English",
|
|
10126
|
+
es: "Spanish",
|
|
10127
|
+
fr: "French",
|
|
10128
|
+
de: "German",
|
|
10129
|
+
it: "Italian",
|
|
10130
|
+
pt: "Portuguese",
|
|
10131
|
+
nl: "Dutch",
|
|
10132
|
+
ru: "Russian",
|
|
10133
|
+
zh: "Chinese",
|
|
10134
|
+
ja: "Japanese",
|
|
10135
|
+
ko: "Korean",
|
|
10136
|
+
ar: "Arabic",
|
|
10137
|
+
hi: "Hindi",
|
|
10138
|
+
bn: "Bengali",
|
|
10139
|
+
pa: "Punjabi",
|
|
10140
|
+
te: "Telugu",
|
|
10141
|
+
mr: "Marathi",
|
|
10142
|
+
ta: "Tamil",
|
|
10143
|
+
ur: "Urdu",
|
|
10144
|
+
gu: "Gujarati",
|
|
10145
|
+
kn: "Kannada",
|
|
10146
|
+
ml: "Malayalam",
|
|
10147
|
+
ne: "Nepali",
|
|
10148
|
+
si: "Sinhala",
|
|
10149
|
+
tr: "Turkish",
|
|
10150
|
+
pl: "Polish",
|
|
10151
|
+
vi: "Vietnamese",
|
|
10152
|
+
th: "Thai",
|
|
10153
|
+
id: "Indonesian",
|
|
10154
|
+
ms: "Malay",
|
|
10155
|
+
tl: "Filipino",
|
|
10156
|
+
km: "Khmer",
|
|
10157
|
+
lo: "Lao",
|
|
10158
|
+
my: "Burmese",
|
|
10159
|
+
sw: "Swahili",
|
|
10160
|
+
yo: "Yoruba",
|
|
10161
|
+
ha: "Hausa",
|
|
10162
|
+
ig: "Igbo",
|
|
10163
|
+
zu: "Zulu",
|
|
10164
|
+
xh: "Xhosa",
|
|
10165
|
+
af: "Afrikaans",
|
|
10166
|
+
st: "Sesotho",
|
|
10167
|
+
tn: "Tswana",
|
|
10168
|
+
sn: "Shona",
|
|
10169
|
+
am: "Amharic",
|
|
10170
|
+
so: "Somali",
|
|
10171
|
+
rw: "Kinyarwanda",
|
|
10172
|
+
mg: "Malagasy",
|
|
10173
|
+
ny: "Chichewa",
|
|
10174
|
+
ee: "Ewe",
|
|
10175
|
+
tw: "Twi",
|
|
10176
|
+
gaa: "Ga",
|
|
10177
|
+
he: "Hebrew",
|
|
10178
|
+
fa: "Persian",
|
|
10179
|
+
ps: "Pashto",
|
|
10180
|
+
ku: "Kurdish",
|
|
10181
|
+
uk: "Ukrainian",
|
|
10182
|
+
el: "Greek",
|
|
10183
|
+
cs: "Czech",
|
|
10184
|
+
ro: "Romanian",
|
|
10185
|
+
hu: "Hungarian",
|
|
10186
|
+
sv: "Swedish",
|
|
10187
|
+
da: "Danish",
|
|
10188
|
+
no: "Norwegian",
|
|
10189
|
+
fi: "Finnish",
|
|
10190
|
+
sk: "Slovak",
|
|
10191
|
+
bg: "Bulgarian",
|
|
10192
|
+
hr: "Croatian",
|
|
10193
|
+
et: "Estonian",
|
|
10194
|
+
lt: "Lithuanian",
|
|
10195
|
+
lv: "Latvian",
|
|
10196
|
+
sl: "Slovenian",
|
|
10197
|
+
sr: "Serbian",
|
|
10198
|
+
bs: "Bosnian",
|
|
10199
|
+
mk: "Macedonian",
|
|
10200
|
+
is: "Icelandic",
|
|
10201
|
+
ga: "Irish",
|
|
10202
|
+
cy: "Welsh",
|
|
10203
|
+
mt: "Maltese",
|
|
10204
|
+
lb: "Luxembourgish",
|
|
10205
|
+
sq: "Albanian",
|
|
10206
|
+
be: "Belarusian",
|
|
10207
|
+
ka: "Georgian",
|
|
10208
|
+
hy: "Armenian",
|
|
10209
|
+
az: "Azerbaijani",
|
|
10210
|
+
eu: "Basque",
|
|
10211
|
+
gl: "Galician",
|
|
10212
|
+
ca: "Catalan",
|
|
10213
|
+
la: "Latin",
|
|
10214
|
+
eo: "Esperanto",
|
|
10215
|
+
kk: "Kazakh",
|
|
10216
|
+
uz: "Uzbek",
|
|
10217
|
+
tg: "Tajik",
|
|
10218
|
+
ky: "Kyrgyz",
|
|
10219
|
+
tk: "Turkmen",
|
|
10220
|
+
mn: "Mongolian"
|
|
10221
|
+
};
|
|
10084
10222
|
const getDisplayName = (code, locale, fallback) => {
|
|
10085
10223
|
try {
|
|
10086
10224
|
const displayNames = new Intl.DisplayNames([locale], { type: "language" });
|
|
10087
|
-
|
|
10225
|
+
const result = displayNames.of(code);
|
|
10226
|
+
if (result) return result;
|
|
10088
10227
|
} catch {
|
|
10089
|
-
return fallback;
|
|
10090
10228
|
}
|
|
10229
|
+
return LANGUAGE_NAMES_EN[code] ?? fallback;
|
|
10091
10230
|
};
|
|
10092
10231
|
const normalizeLanguageCode = (code) => {
|
|
10093
10232
|
if (!code || typeof code !== "string") {
|
|
@@ -10134,6 +10273,58 @@ const getSupportedLanguages = (displayLocale = "en") => {
|
|
|
10134
10273
|
};
|
|
10135
10274
|
}).sort((left, right) => left.name.localeCompare(right.name));
|
|
10136
10275
|
};
|
|
10276
|
+
const COMMON_LANGUAGE_CODES = [
|
|
10277
|
+
"en",
|
|
10278
|
+
"es",
|
|
10279
|
+
"fr",
|
|
10280
|
+
"de",
|
|
10281
|
+
"it",
|
|
10282
|
+
"pt",
|
|
10283
|
+
"nl",
|
|
10284
|
+
"ru",
|
|
10285
|
+
"zh",
|
|
10286
|
+
"ja",
|
|
10287
|
+
"ko",
|
|
10288
|
+
"ar",
|
|
10289
|
+
"hi",
|
|
10290
|
+
"bn",
|
|
10291
|
+
"tr",
|
|
10292
|
+
"pl",
|
|
10293
|
+
"vi",
|
|
10294
|
+
"th",
|
|
10295
|
+
"id",
|
|
10296
|
+
"ms",
|
|
10297
|
+
"sw",
|
|
10298
|
+
"yo",
|
|
10299
|
+
"ha",
|
|
10300
|
+
"ig",
|
|
10301
|
+
"zu",
|
|
10302
|
+
"am",
|
|
10303
|
+
"tw",
|
|
10304
|
+
"he",
|
|
10305
|
+
"fa",
|
|
10306
|
+
"uk",
|
|
10307
|
+
"el",
|
|
10308
|
+
"cs",
|
|
10309
|
+
"ro",
|
|
10310
|
+
"hu",
|
|
10311
|
+
"sv",
|
|
10312
|
+
"da",
|
|
10313
|
+
"no",
|
|
10314
|
+
"fi"
|
|
10315
|
+
];
|
|
10316
|
+
const getCommonLanguages = (displayLocale = "en") => {
|
|
10317
|
+
return COMMON_LANGUAGE_CODES.map((code) => {
|
|
10318
|
+
const metadata = getLanguageMetadata(code);
|
|
10319
|
+
return {
|
|
10320
|
+
code,
|
|
10321
|
+
name: getLanguageName(code, displayLocale),
|
|
10322
|
+
nativeName: metadata.nativeName,
|
|
10323
|
+
region: metadata.region,
|
|
10324
|
+
ttsSupport: metadata.ttsSupport
|
|
10325
|
+
};
|
|
10326
|
+
}).sort((left, right) => left.name.localeCompare(right.name));
|
|
10327
|
+
};
|
|
10137
10328
|
const TTS_PROVIDERS = {
|
|
10138
10329
|
deepgram: { name: "Deepgram Aura", supportsSSML: false, isDefault: true },
|
|
10139
10330
|
openai: { name: "OpenAI TTS", supportsSSML: false, multilingual: true },
|
|
@@ -12875,6 +13066,7 @@ const launchConfigureWhiteboard = ({
|
|
|
12875
13066
|
updateIsConfigureWhiteboardModalVisible(!isConfigureWhiteboardModalVisible);
|
|
12876
13067
|
};
|
|
12877
13068
|
export {
|
|
13069
|
+
COMMON_LANGUAGE_CODES,
|
|
12878
13070
|
MediaStream$1 as MediaStream,
|
|
12879
13071
|
MediaStreamTrack,
|
|
12880
13072
|
QnHDCons,
|
|
@@ -12962,6 +13154,7 @@ export {
|
|
|
12962
13154
|
generateRandomWaitingRoomList,
|
|
12963
13155
|
getActiveTranslationConsumers,
|
|
12964
13156
|
getAvailableVoices,
|
|
13157
|
+
getCommonLanguages,
|
|
12965
13158
|
getDomains,
|
|
12966
13159
|
getEstimate,
|
|
12967
13160
|
getLanguageMetadata,
|