mediasfu-shared 1.0.5 → 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 +38 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +38 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/consumers/createSendTransport.ts +51 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediasfu-shared",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "mediasfu-shared – framework-agnostic WebRTC runtime for MediaSFU. Room helpers, mediasoup signaling, socket management, media state, and TypeScript types for React, Vue, Angular, Svelte, and plain TS.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -34,6 +34,29 @@ export interface CreateSendTransportOptions {
|
|
|
34
34
|
// Export the type definition for the function
|
|
35
35
|
export type CreateSendTransportType = (options: CreateSendTransportOptions) => Promise<void>;
|
|
36
36
|
|
|
37
|
+
const waitForReadyDevice = async (
|
|
38
|
+
parameters: CreateSendTransportParameters,
|
|
39
|
+
attempts = 20,
|
|
40
|
+
delayMs = 100,
|
|
41
|
+
): Promise<Device | null> => {
|
|
42
|
+
let resolvedDevice = parameters.getUpdatedAllParams().device ?? parameters.device;
|
|
43
|
+
|
|
44
|
+
for (let attempt = 0; !resolvedDevice && attempt < attempts; attempt += 1) {
|
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
46
|
+
resolvedDevice = parameters.getUpdatedAllParams().device ?? parameters.device;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return resolvedDevice;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const notifyDeviceNotReady = (parameters: CreateSendTransportParameters): void => {
|
|
53
|
+
parameters.showAlert?.({
|
|
54
|
+
message: 'Media device is still initializing. Please try screen sharing again in a moment.',
|
|
55
|
+
type: 'danger',
|
|
56
|
+
duration: 3000,
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
37
60
|
const createLocalSendTransport = async ({
|
|
38
61
|
option,
|
|
39
62
|
parameters,
|
|
@@ -53,6 +76,11 @@ const createLocalSendTransport = async ({
|
|
|
53
76
|
connectSendTransport,
|
|
54
77
|
} = parameters;
|
|
55
78
|
|
|
79
|
+
const updatedParams = parameters.getUpdatedAllParams();
|
|
80
|
+
device = updatedParams.device ?? device;
|
|
81
|
+
socket = updatedParams.socket ?? socket;
|
|
82
|
+
localSocket = updatedParams.localSocket ?? localSocket;
|
|
83
|
+
|
|
56
84
|
|
|
57
85
|
if (!localSocket || !localSocket.id || socket.id === localSocket.id) {
|
|
58
86
|
return;
|
|
@@ -67,8 +95,14 @@ const createLocalSendTransport = async ({
|
|
|
67
95
|
return;
|
|
68
96
|
}
|
|
69
97
|
|
|
98
|
+
const resolvedDevice = (await waitForReadyDevice(parameters)) ?? device;
|
|
99
|
+
if (!resolvedDevice) {
|
|
100
|
+
notifyDeviceNotReady(parameters);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
70
104
|
// Create local send transport
|
|
71
|
-
localProducerTransport = await
|
|
105
|
+
localProducerTransport = await resolvedDevice.createSendTransport(params);
|
|
72
106
|
if (updateLocalProducerTransport) {
|
|
73
107
|
updateLocalProducerTransport(localProducerTransport);
|
|
74
108
|
}
|
|
@@ -212,6 +246,15 @@ export const createSendTransport: CreateSendTransportType = async ({
|
|
|
212
246
|
device = updatedParams.device;
|
|
213
247
|
socket = updatedParams.socket;
|
|
214
248
|
|
|
249
|
+
if (!device) {
|
|
250
|
+
device = await waitForReadyDevice(parameters);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (!device) {
|
|
254
|
+
notifyDeviceNotReady(parameters);
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
215
258
|
try {
|
|
216
259
|
// Handle local transport creation first
|
|
217
260
|
await createLocalSendTransport({option, parameters});
|
|
@@ -230,8 +273,14 @@ export const createSendTransport: CreateSendTransportType = async ({
|
|
|
230
273
|
return;
|
|
231
274
|
}
|
|
232
275
|
|
|
276
|
+
const resolvedDevice = (await waitForReadyDevice(parameters)) ?? device;
|
|
277
|
+
if (!resolvedDevice) {
|
|
278
|
+
notifyDeviceNotReady(parameters);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
233
282
|
// Create a WebRTC send transport
|
|
234
|
-
producerTransport = await
|
|
283
|
+
producerTransport = await resolvedDevice.createSendTransport(params);
|
|
235
284
|
updateProducerTransport(producerTransport);
|
|
236
285
|
|
|
237
286
|
// Handle 'connect' event
|