@voxevolv/client 0.3.12 → 0.3.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/CHANGELOG.md +30 -0
- package/README.md +24 -14
- package/dist/browser/index.js +7 -7
- package/dist/browser/index.js.map +3 -3
- package/dist/browser/index.js.sha384 +1 -1
- package/dist/browser/manifest.json +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +103 -36
- package/dist/index.js.map +3 -3
- package/dist/vendor/livekit-client.esm.mjs +66 -12
- package/package.json +2 -2
|
@@ -22339,11 +22339,13 @@ class RTCEngine extends eventsExports.EventEmitter {
|
|
|
22339
22339
|
});
|
|
22340
22340
|
}
|
|
22341
22341
|
/* @internal */
|
|
22342
|
-
sendDataPacket(packet, kind) {
|
|
22342
|
+
sendDataPacket(packet, kind, signal) {
|
|
22343
22343
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22344
22344
|
var _a, _b;
|
|
22345
|
+
signal?.throwIfAborted();
|
|
22345
22346
|
// make sure we do have a data connection
|
|
22346
22347
|
yield this.ensurePublisherConnected(kind);
|
|
22348
|
+
signal?.throwIfAborted();
|
|
22347
22349
|
if (this.e2eeManager && this.e2eeManager.isDataChannelEncryptionEnabled) {
|
|
22348
22350
|
const encryptablePacket = asEncryptablePacket(packet);
|
|
22349
22351
|
if (encryptablePacket) {
|
|
@@ -22361,8 +22363,10 @@ class RTCEngine extends eventsExports.EventEmitter {
|
|
|
22361
22363
|
// Allocate sequence numbers only after the final asynchronous wait.
|
|
22362
22364
|
const reliableChannel = kind === DataChannelKind.RELIABLE ? this.dataChannelForKind(kind) : undefined;
|
|
22363
22365
|
if (reliableChannel) {
|
|
22364
|
-
yield this.waitForBufferStatusLow(kind);
|
|
22366
|
+
yield this.waitForBufferStatusLow(kind, signal);
|
|
22365
22367
|
}
|
|
22368
|
+
// No awaits between cancellation, sequence allocation, and committing the send.
|
|
22369
|
+
signal?.throwIfAborted();
|
|
22366
22370
|
if (kind === DataChannelKind.RELIABLE) {
|
|
22367
22371
|
packet.sequence = this.reliableDataSequence;
|
|
22368
22372
|
this.reliableDataSequence += 1;
|
|
@@ -22446,7 +22450,46 @@ class RTCEngine extends eventsExports.EventEmitter {
|
|
|
22446
22450
|
this.updateAndEmitDCBufferStatus(DataChannelKind.RELIABLE);
|
|
22447
22451
|
});
|
|
22448
22452
|
}
|
|
22449
|
-
waitForBufferStatusLow(kind) {
|
|
22453
|
+
waitForBufferStatusLow(kind, signal) {
|
|
22454
|
+
if (signal) {
|
|
22455
|
+
return new Promise((resolve, reject) => {
|
|
22456
|
+
if (signal.aborted) {
|
|
22457
|
+
reject(signal.reason);
|
|
22458
|
+
return;
|
|
22459
|
+
}
|
|
22460
|
+
if (this.isClosed) {
|
|
22461
|
+
reject(new UnexpectedConnectionState('engine closed'));
|
|
22462
|
+
return;
|
|
22463
|
+
}
|
|
22464
|
+
const dc = this.dataChannelForKind(kind);
|
|
22465
|
+
if (!dc) {
|
|
22466
|
+
reject(new UnexpectedConnectionState('DataChannel not found'));
|
|
22467
|
+
return;
|
|
22468
|
+
}
|
|
22469
|
+
if (this.isBufferStatusLow(kind)) {
|
|
22470
|
+
resolve();
|
|
22471
|
+
return;
|
|
22472
|
+
}
|
|
22473
|
+
const cleanup = () => {
|
|
22474
|
+
dc.removeEventListener('bufferedamountlow', onDrained);
|
|
22475
|
+
signal.removeEventListener('abort', onAborted);
|
|
22476
|
+
};
|
|
22477
|
+
const onDrained = () => {
|
|
22478
|
+
cleanup();
|
|
22479
|
+
resolve();
|
|
22480
|
+
};
|
|
22481
|
+
const onAborted = () => {
|
|
22482
|
+
cleanup();
|
|
22483
|
+
reject(signal.reason);
|
|
22484
|
+
};
|
|
22485
|
+
dc.addEventListener('bufferedamountlow', onDrained, { once: true });
|
|
22486
|
+
signal.addEventListener('abort', onAborted, { once: true });
|
|
22487
|
+
this.bufferStatusLowClosingFuture.promise.catch(error => {
|
|
22488
|
+
cleanup();
|
|
22489
|
+
reject(error);
|
|
22490
|
+
});
|
|
22491
|
+
});
|
|
22492
|
+
}
|
|
22450
22493
|
return __awaiter(this, void 0, void 0, function* () {
|
|
22451
22494
|
return new TypedPromise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
22452
22495
|
if (this.isClosed) {
|
|
@@ -23530,7 +23573,7 @@ class OutgoingDataStreamManager {
|
|
|
23530
23573
|
value: header
|
|
23531
23574
|
}
|
|
23532
23575
|
});
|
|
23533
|
-
yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);
|
|
23576
|
+
yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE, options?.signal);
|
|
23534
23577
|
let chunkId = 0;
|
|
23535
23578
|
const engine = this.engine;
|
|
23536
23579
|
const writableStream = new WritableStream({
|
|
@@ -23550,7 +23593,7 @@ class OutgoingDataStreamManager {
|
|
|
23550
23593
|
value: chunk
|
|
23551
23594
|
}
|
|
23552
23595
|
});
|
|
23553
|
-
yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);
|
|
23596
|
+
yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE, options?.signal);
|
|
23554
23597
|
chunkId += 1;
|
|
23555
23598
|
}
|
|
23556
23599
|
});
|
|
@@ -23567,7 +23610,7 @@ class OutgoingDataStreamManager {
|
|
|
23567
23610
|
value: trailer
|
|
23568
23611
|
}
|
|
23569
23612
|
});
|
|
23570
|
-
yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);
|
|
23613
|
+
yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE, options?.signal);
|
|
23571
23614
|
});
|
|
23572
23615
|
},
|
|
23573
23616
|
abort(err) {
|
|
@@ -23576,10 +23619,21 @@ class OutgoingDataStreamManager {
|
|
|
23576
23619
|
}
|
|
23577
23620
|
});
|
|
23578
23621
|
let onEngineClose = () => __awaiter(this, void 0, void 0, function* () {
|
|
23579
|
-
|
|
23622
|
+
try {
|
|
23623
|
+
yield writer.close();
|
|
23624
|
+
} catch (error) {
|
|
23625
|
+
if (!options?.signal?.aborted) throw error;
|
|
23626
|
+
}
|
|
23580
23627
|
});
|
|
23628
|
+
const cleanup = () => {
|
|
23629
|
+
engine.off(EngineEvent.Closing, onEngineClose);
|
|
23630
|
+
options?.signal?.removeEventListener('abort', cleanup);
|
|
23631
|
+
};
|
|
23581
23632
|
engine.once(EngineEvent.Closing, onEngineClose);
|
|
23582
|
-
const writer = new TextStreamWriter(writableStream, info,
|
|
23633
|
+
const writer = new TextStreamWriter(writableStream, info, cleanup);
|
|
23634
|
+
// A cancelled write errors the WritableStream; do not close it again later.
|
|
23635
|
+
options?.signal?.addEventListener('abort', cleanup, { once: true });
|
|
23636
|
+
if (options?.signal?.aborted) cleanup();
|
|
23583
23637
|
return writer;
|
|
23584
23638
|
});
|
|
23585
23639
|
}
|
|
@@ -23653,7 +23707,7 @@ class OutgoingDataStreamManager {
|
|
|
23653
23707
|
value: header
|
|
23654
23708
|
}
|
|
23655
23709
|
});
|
|
23656
|
-
yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE);
|
|
23710
|
+
yield this.engine.sendDataPacket(packet, DataChannelKind.RELIABLE, options?.signal);
|
|
23657
23711
|
let chunkId = 0;
|
|
23658
23712
|
const writeMutex = new _();
|
|
23659
23713
|
const engine = this.engine;
|
|
@@ -23677,7 +23731,7 @@ class OutgoingDataStreamManager {
|
|
|
23677
23731
|
})
|
|
23678
23732
|
}
|
|
23679
23733
|
});
|
|
23680
|
-
yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE);
|
|
23734
|
+
yield engine.sendDataPacket(chunkPacket, DataChannelKind.RELIABLE, options?.signal);
|
|
23681
23735
|
chunkId += 1;
|
|
23682
23736
|
byteOffset += subChunk.byteLength;
|
|
23683
23737
|
}
|
|
@@ -23698,7 +23752,7 @@ class OutgoingDataStreamManager {
|
|
|
23698
23752
|
value: trailer
|
|
23699
23753
|
}
|
|
23700
23754
|
});
|
|
23701
|
-
yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE);
|
|
23755
|
+
yield engine.sendDataPacket(trailerPacket, DataChannelKind.RELIABLE, options?.signal);
|
|
23702
23756
|
});
|
|
23703
23757
|
},
|
|
23704
23758
|
abort(err) {
|
|
@@ -28779,7 +28833,7 @@ class Participant extends eventsExports.EventEmitter {
|
|
|
28779
28833
|
value: userPacket
|
|
28780
28834
|
}
|
|
28781
28835
|
});
|
|
28782
|
-
yield _this4.engine.sendDataPacket(packet, kind);
|
|
28836
|
+
yield _this4.engine.sendDataPacket(packet, kind, options.signal);
|
|
28783
28837
|
}();
|
|
28784
28838
|
});
|
|
28785
28839
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voxevolv/client",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"description": "Browser SDK for VoxEvolv multimodal realtime sessions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"scripts": {
|
|
43
43
|
"build": "tsc -p tsconfig.json && node scripts/build-browser.mjs",
|
|
44
44
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
45
|
-
"test": "npm run build && node scripts/protocol-smoke.mjs && node --test scripts/context-delivery.test.mjs scripts/diagnostic-delivery.test.mjs scripts/startup-recovery.test.mjs scripts/connection-lifecycle.test.mjs scripts/audio-recovery.test.mjs scripts/recovery-progress.test.mjs scripts/reliable-sequence.test.mjs && node scripts/transcript-smoke.mjs",
|
|
45
|
+
"test": "npm run build && node scripts/protocol-smoke.mjs && node --test scripts/context-delivery.test.mjs scripts/context-cancellation.test.mjs scripts/diagnostic-delivery.test.mjs scripts/startup-recovery.test.mjs scripts/connection-lifecycle.test.mjs scripts/audio-recovery.test.mjs scripts/recovery-progress.test.mjs scripts/reliable-sequence.test.mjs && node scripts/transcript-smoke.mjs",
|
|
46
46
|
"pack:check": "npm run build && npm pack --dry-run"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|