@urun-sh/core 0.4.0 → 0.4.2
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 +39 -0
- package/dist/{chunk-D3CIQIUV.mjs → chunk-HOQ5WCT6.mjs} +1 -1
- package/dist/{chunk-LMLORJE7.mjs → chunk-JBLMKFEF.mjs} +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/internal.browser.js +1 -1
- package/dist/internal.browser.mjs +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.mjs +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.2
|
|
4
|
+
|
|
5
|
+
- **Lockstep release** — version bump to match the `@urun-sh/openai` omp launcher cohort
|
|
6
|
+
(urun-sh/urun-ts#401); peer ranges pinning core move to `^0.4.2`.
|
|
7
|
+
|
|
8
|
+
## 0.4.1
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
- **FIX: a re-dial no longer leaves the playout element bound to a DEAD track**
|
|
12
|
+
(urun-infra#2132; the prod qwen-voice "assistant audio drops mid-session and
|
|
13
|
+
never self-heals, reload fixes it" signature). `recvTransport.consume()` /
|
|
14
|
+
`consumeData()` are ASYNC — mediasoup-client renegotiates the recv
|
|
15
|
+
PeerConnection to add the transceiver — so a consume ISSUED on the leg that is
|
|
16
|
+
about to die can still be in flight when a dropped signaling socket re-dials
|
|
17
|
+
and `_cleanupMedia()` replaces the whole leg. That late consumer resolved onto
|
|
18
|
+
a transport the session no longer owns and was registered ANYWAY, LAST: it
|
|
19
|
+
overwrote `_tracksByName`, emitted the final `'track'` event, and leaked into
|
|
20
|
+
the live consumer set. Its track reads `readyState === 'live'` (nothing
|
|
21
|
+
stopped it — its consumer was not in `_consumers` when the cleanup ran), so
|
|
22
|
+
every liveness filter above the seam accepted it: `<Video>` / `<Audio>` swap
|
|
23
|
+
tracks into the ONE persistent `MediaStream` that stays the element's
|
|
24
|
+
`srcObject`, so the healthy, decoding track of the NEW leg was removed and a
|
|
25
|
+
track belonging to a closed PeerConnection put in its place. The rendered
|
|
26
|
+
frame froze while the downlink stayed perfectly healthy (SFU `packetsSent`
|
|
27
|
+
climbing, consumer `framesDecoded` climbing, `pliCount 0`,
|
|
28
|
+
`attachedToMediaElement: false` on every RTCPeerConnection), and the
|
|
29
|
+
components' missed-event poll could never heal it because `getTrackByName()`
|
|
30
|
+
kept answering with the stale track — only a page reload recovered.
|
|
31
|
+
|
|
32
|
+
Both consume paths now carry a LEG FENCE across their await, through
|
|
33
|
+
mediasoup's own identity rather than a timer or a poller: a consumer belongs
|
|
34
|
+
to the transport that created it, so a consumer whose transport is no longer
|
|
35
|
+
this session's recv transport (or is closed, or whose dial generation has been
|
|
36
|
+
superseded, or which landed after an intentional disconnect) is closed through
|
|
37
|
+
mediasoup-client's own per-consumer lifecycle — which stops its track — and is
|
|
38
|
+
never registered. The data twin matters just as much: a superseded
|
|
39
|
+
`consumeData` used to install a DEAD channel as a named stream's data lane,
|
|
40
|
+
silently swallowing every later payload on that name.
|
|
41
|
+
|
|
3
42
|
## 0.4.0
|
|
4
43
|
|
|
5
44
|
- **BREAKING: `SessionPhaseName` loses `'ended'` and `'expired'`** (#392, #398 —
|