@torrent-tv/proxy 2.87.2 → 2.87.3

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 CHANGED
@@ -1,3 +1,8 @@
1
+ ## 2.87.3
2
+
3
+ - **Chore**: Update Fastify and other lockfile dependencies while keeping WebTorrent pinned to 2.8.5. The remaining `ip` advisory has no fixed npm release and is reachable through WebTorrent's tracker dependencies.
4
+ - **Chore**: Keep the wait ledger in the server service layer and align the manager surface test with the existing seek invalidation behavior.
5
+
1
6
  ## 2.87.2
2
7
 
3
8
  - **Fix**: Close an output directory's file-system watch before removing the directory, so `SegmentStore.drop` actually frees it on Windows.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@torrent-tv/proxy",
3
- "version": "2.87.2",
3
+ "version": "2.87.3",
4
4
  "description": "Torrent proxy client that exposes webseed-like HTTP stream endpoint.",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "publishConfig": {
@@ -1,5 +1,5 @@
1
1
  import { logger } from "../../utils/logger.js";
2
- import { bandOf, waits } from "../viewer/WaitLedger.js";
2
+ import { bandOf, waits } from "./WaitLedger.js";
3
3
 
4
4
  const HOLD_HEADER = "x-hold-ms";
5
5
  /**
@@ -10,7 +10,7 @@
10
10
 
11
11
  import { logger } from "../../utils/logger.js";
12
12
  import { KeyframeTables } from "../media/KeyframeTables.js";
13
- import { waits } from "../viewer/WaitLedger.js";
13
+ import { waits } from "./WaitLedger.js";
14
14
  import { readMachineState, readProcessCpuSeconds, readProxyCpuSeconds, readSystemCpu, shareOfMachine } from "../encode/host-load.js";
15
15
  import { minimumBufferFrom } from "../torrent/supply-margin.js";
16
16
  import { PriorityOrchestrator } from "../viewer/PriorityOrchestrator.js";
@@ -222,11 +222,9 @@ test("what a viewer states about themselves is kept and answered", () => {
222
222
  assert.equal(manager.viewerRequests.viewerPositionOf(SESSION_ID, "viewer-one"), 120);
223
223
  assert.equal(manager.viewerRequests.requestSeek("no-such-session", 120, "viewer-one"), false);
224
224
 
225
- // `seekEpoch` is NOT moved by a seek, whatever its name says: its two writers
226
- // are the variant switch and the soundtrack switch, and they move it on the
227
- // output the viewer has LEFT. Recorded as it is, so the dismantling can give
228
- // the fact its real name instead of discovering this by breaking it.
229
- assert.equal(manager.serving.seekEpoch(SESSION_ID), 0, "a seek leaves the wait epoch alone");
225
+ // A seek wakes requests held on each output this viewer watches so each one
226
+ // can check whether it is still the segment this viewer needs.
227
+ assert.equal(manager.serving.seekEpoch(SESSION_ID), 1, "a seek invalidates waits on the watched output");
230
228
  assert.equal(manager.serving.seekEpoch("no-such-session"), 0);
231
229
 
232
230
  manager.encodeRuns.noteInputBytes(SESSION_ID, 4096);
@@ -9,7 +9,7 @@
9
9
 
10
10
  import test from "node:test";
11
11
  import assert from "node:assert/strict";
12
- import { bandOf, WaitLedger } from "../services/viewer/WaitLedger.js";
12
+ import { bandOf, WaitLedger } from "../services/server/WaitLedger.js";
13
13
  import { SegmentDemand } from "../services/encode/SegmentDemand.js";
14
14
 
15
15
  test("the top rank is its own band, and the rest fall behind it", () => {
File without changes