@blockcast/mmt-container 1.0.1 → 2.0.0-main.609e08d7e29f
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/README.md +9 -7
- package/dist/browser-runtime.js +6972 -6693
- package/dist/browser-runtime.js.map +4 -4
- package/dist/carp-catalog.d.ts +7 -7
- package/dist/carp-catalog.d.ts.map +1 -1
- package/dist/carp-catalog.js +65 -230
- package/dist/carp-catalog.js.map +3 -3
- package/dist/catalog-fec-params.js.map +1 -1
- package/dist/catalog-network-source.js.map +1 -1
- package/dist/delivery-catalog.js +3 -0
- package/dist/delivery-catalog.js.map +2 -2
- package/dist/delta-fallback-config.js.map +1 -1
- package/dist/fec-manager.d.ts +25 -1
- package/dist/fec-manager.d.ts.map +1 -1
- package/dist/fec-manager.js +208 -15
- package/dist/fec-manager.js.map +2 -2
- package/dist/fec-state.js.map +1 -1
- package/dist/fec-worker-setup.js.map +1 -1
- package/dist/held-layer-admission.d.ts +8 -0
- package/dist/held-layer-admission.d.ts.map +1 -1
- package/dist/held-layer-admission.js +22 -1
- package/dist/held-layer-admission.js.map +2 -2
- package/dist/iso-block-locator.js.map +1 -1
- package/dist/mfu-reassembler.js.map +1 -1
- package/dist/mmtp-container-parser.js.map +1 -1
- package/dist/mmtp-container-parser.no-modules.js +146 -332
- package/dist/mmtp-container-parser.no-modules.js.map +4 -4
- package/dist/mmtp-decode-pipeline.js.map +1 -1
- package/dist/mmtp-fec-session.d.ts.map +1 -1
- package/dist/mmtp-fec-session.js +61 -15
- package/dist/mmtp-fec-session.js.map +3 -3
- package/dist/mmtp-router.d.ts +11 -6
- package/dist/mmtp-router.d.ts.map +1 -1
- package/dist/mmtp-router.js +47 -10
- package/dist/mmtp-router.js.map +3 -3
- package/dist/multicast-auth-catalog.d.ts +8 -8
- package/dist/multicast-auth-catalog.d.ts.map +1 -1
- package/dist/multicast-auth-catalog.js +171 -75
- package/dist/multicast-auth-catalog.js.map +4 -4
- package/dist/multicast-input.d.ts +5 -5
- package/dist/multicast-input.d.ts.map +1 -1
- package/dist/multicast-input.js +126 -49
- package/dist/multicast-input.js.map +3 -3
- package/dist/multicast-manager.d.ts +11 -4
- package/dist/multicast-manager.d.ts.map +1 -1
- package/dist/multicast-manager.js +7914 -7659
- package/dist/multicast-manager.js.map +4 -4
- package/dist/multicast-transport.d.ts +16 -1
- package/dist/multicast-transport.d.ts.map +1 -1
- package/dist/multicast-transport.js +120 -5
- package/dist/multicast-transport.js.map +4 -4
- package/dist/multicast-unwrap.js +2 -2
- package/dist/multicast-unwrap.js.map +2 -2
- package/dist/no-modules.js +100 -288
- package/dist/no-modules.js.map +4 -4
- package/dist/repair-fetch.js.map +1 -1
- package/dist/signaling.js.map +1 -1
- package/dist/timestamp-codec.js.map +1 -1
- package/dist/wasm-mfu-reassembler.js.map +1 -1
- package/dist/wasm-mmtp-container-parser.js.map +1 -1
- package/package.json +5 -5
- package/schemas/catalog.schema.json +15 -7
- package/src/carp-catalog.ts +14 -13
- package/src/fec-manager.ts +89 -14
- package/src/held-layer-admission.ts +38 -1
- package/src/mmtp-fec-session.ts +20 -12
- package/src/mmtp-router.ts +65 -16
- package/src/multicast-auth-catalog.ts +43 -36
- package/src/multicast-input.ts +28 -8
- package/src/multicast-manager.ts +38 -34
- package/src/multicast-transport.ts +74 -7
- package/test-vectors/bc-provenance-v2.json +614 -175
- package/test-vectors/catalog/README.md +24 -8
- package/test-vectors/catalog/negative/multicast-auth-asm-missing-sender-address.json +0 -2
- package/test-vectors/catalog/negative/{multicast-auth-manifest-port-equals-port.json → multicast-auth-draft01-manifest-port.json} +1 -1
- package/test-vectors/catalog/negative/multicast-auth-duplicate-first-epoch.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-duplicate-kid.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-endpoint-auth-without-object-auth.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-endpoint-missing-bandwidth.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-manifest-timer-out-of-range.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-sender-address-on-ssm.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-shared-sg-port.json +73 -0
- package/test-vectors/catalog/negative/multicast-auth-version-1.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-version-3.json +0 -1
- package/test-vectors/catalog/negative/multicast-auth-version-missing.json +0 -1
- package/test-vectors/catalog/negative/multicast-endpoint-address-family-mismatch.json +55 -0
- package/test-vectors/catalog/negative/multicast-endpoint-address-host-name.json +55 -0
- package/test-vectors/catalog/negative/multicast-endpoint-address-leading-zero.json +55 -0
- package/test-vectors/catalog/negative/multicast-endpoint-address-ls32-leading-zero.json +55 -0
- package/test-vectors/catalog/negative/multicast-endpoint-address-mapped-family-mismatch.json +55 -0
- package/test-vectors/catalog/negative/multicast-endpoint-address-zone-id.json +55 -0
- package/test-vectors/catalog/positive/multicast-auth-asm-sender.json +0 -2
- package/test-vectors/catalog/{negative/multicast-auth-max-auth-delay-above-max.json → positive/multicast-auth-max-auth-delay-above-max-clamped.json} +0 -1
- package/test-vectors/catalog/{negative/multicast-auth-max-auth-delay-below-min.json → positive/multicast-auth-max-auth-delay-below-min-clamped.json} +0 -1
- package/test-vectors/catalog/positive/multicast-auth-max-auth-delay-string.json +55 -0
- package/test-vectors/catalog/positive/multicast-auth-rotation.json +0 -1
- package/test-vectors/catalog/positive/multicast-draft01-7-2-6-example.json +0 -1
- package/test-vectors/catalog/section-codes.json +8 -3
- package/test-vectors/catalog-multicast-auth-v1.json +0 -1
- package/test-vectors/catalog-validation.json +3 -3
- package/test-vectors/generate-bc-provenance-v2.mjs +94 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mmtp-fec-session.d.ts","sourceRoot":"","sources":["../src/mmtp-fec-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mmtp-fec-session.d.ts","sourceRoot":"","sources":["../src/mmtp-fec-session.ts"],"names":[],"mappings":"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"}
|
package/dist/mmtp-fec-session.js
CHANGED
|
@@ -90,14 +90,11 @@ function readRepairFecPayloadIdFields(mmtpPacket, parsedHeader) {
|
|
|
90
90
|
dataOffset: off + REPAIR_FEC_PID_SIZE
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
function
|
|
94
|
-
return moqRepairFrameFrom(frame, readRepairFecPayloadIdFields(frame, header));
|
|
95
|
-
}
|
|
96
|
-
function moqRepairFrameFrom(frame, repairId) {
|
|
93
|
+
function moqRepairFrameFrom(frame, repairId, checkRsId = true) {
|
|
97
94
|
if (!repairId)
|
|
98
95
|
return null;
|
|
99
96
|
const symbolData = frame.subarray(repairId.dataOffset);
|
|
100
|
-
if (repairId.
|
|
97
|
+
if (repairId.ssbLength === 0 || checkRsId && repairId.rsId >= repairId.rsbLength || symbolData.length === 0)
|
|
101
98
|
return null;
|
|
102
99
|
return {
|
|
103
100
|
packetId: repairId.packetId,
|
|
@@ -108,6 +105,23 @@ function moqRepairFrameFrom(frame, repairId) {
|
|
|
108
105
|
symbolData
|
|
109
106
|
};
|
|
110
107
|
}
|
|
108
|
+
function admitMmtpRepairObject(packet, header, symbolSize, algorithm) {
|
|
109
|
+
if (header.packetType !== PACKET_TYPE_REPAIR || header.fecType !== 2)
|
|
110
|
+
return null;
|
|
111
|
+
if (header.headerLength !== MMTP_HEADER_SIZE || packet.length !== MMTP_HEADER_SIZE + REPAIR_FEC_PID_SIZE + symbolSize) {
|
|
112
|
+
return { reject: "repairLength" };
|
|
113
|
+
}
|
|
114
|
+
const frame = moqRepairFrameFrom(packet, readRepairFecPayloadIdFields(packet, header), false);
|
|
115
|
+
if (!frame)
|
|
116
|
+
return null;
|
|
117
|
+
if (frame.rsId >= frame.rsbLength)
|
|
118
|
+
return { frame, reject: "repairRsId" };
|
|
119
|
+
const blockSymbols = frame.ssbLength + frame.rsbLength;
|
|
120
|
+
if (algorithm === "reed-solomon" ? blockSymbols > 255 : algorithm === "raptorq" && blockSymbols - 1 > 16777215) {
|
|
121
|
+
return { frame, reject: "repairSchemeBound" };
|
|
122
|
+
}
|
|
123
|
+
return { frame };
|
|
124
|
+
}
|
|
111
125
|
|
|
112
126
|
// ../mmt-base/dist/ntp-short.js
|
|
113
127
|
var NTP_SHORT_BITS = 32;
|
|
@@ -216,6 +230,9 @@ var HeldLayerAdmission = class {
|
|
|
216
230
|
* @returns undefined to admit, `'discard'`, or the fail-closed reason.
|
|
217
231
|
*/
|
|
218
232
|
admit(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier) {
|
|
233
|
+
return this.#admit(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier, true);
|
|
234
|
+
}
|
|
235
|
+
#admit(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier, retroactive) {
|
|
219
236
|
if (repairTrackName !== void 0 && !this.#layerNames.has(repairTrackName)) return "discard";
|
|
220
237
|
const farAhead = sourceFrontier !== void 0 && serial32Precedes(sourceFrontier, ssStart) && serial32Distance(sourceFrontier, ssStart) > horizon;
|
|
221
238
|
for (const state of this.#states) {
|
|
@@ -243,7 +260,7 @@ var HeldLayerAdmission = class {
|
|
|
243
260
|
}
|
|
244
261
|
} else if (!state.settled && !stale(ssStart)) {
|
|
245
262
|
if (state.anchor === void 0 || serial32Precedes(ssStart, state.anchor)) state.anchor = ssStart;
|
|
246
|
-
if (state.latestBelow !== void 0 && !serial32Precedes(state.latestBelow, state.anchor)) {
|
|
263
|
+
if (retroactive && state.latestBelow !== void 0 && !serial32Precedes(state.latestBelow, state.anchor)) {
|
|
247
264
|
code = "below_anchored_total";
|
|
248
265
|
ssStart = state.latestBelow;
|
|
249
266
|
rsbLength = state.latestBelowRsb;
|
|
@@ -263,6 +280,24 @@ var HeldLayerAdmission = class {
|
|
|
263
280
|
}
|
|
264
281
|
return void 0;
|
|
265
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* The core-00 7.5 carve-out for a repair object about to be discarded
|
|
285
|
+
* (RS_ID or scheme bound): whether its own RSB_length, below a held layer's
|
|
286
|
+
* total on that layer's track or on an anchored block, fails the instance
|
|
287
|
+
* closed under 7.3.2. Leaves the anchored state as it was: a discarded
|
|
288
|
+
* object anchors nothing.
|
|
289
|
+
*/
|
|
290
|
+
failsClosed(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier) {
|
|
291
|
+
const saved = this.#states.map((state) => ({ ...state }));
|
|
292
|
+
try {
|
|
293
|
+
const verdict = this.#admit(repairTrackName, ssStart, rsbLength, horizon, sourceFrontier, false);
|
|
294
|
+
return typeof verdict === "object" ? verdict : void 0;
|
|
295
|
+
} finally {
|
|
296
|
+
saved.forEach((state, i) => {
|
|
297
|
+
this.#states[i] = state;
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
266
301
|
};
|
|
267
302
|
|
|
268
303
|
// src/mmtp-fec-session.ts
|
|
@@ -433,18 +468,29 @@ var MmtpFecSession = class {
|
|
|
433
468
|
} catch {
|
|
434
469
|
return this.#drop("repair:malformed");
|
|
435
470
|
}
|
|
436
|
-
const
|
|
437
|
-
if (!
|
|
438
|
-
if (
|
|
439
|
-
|
|
440
|
-
|
|
471
|
+
const admission = admitMmtpRepairObject(packet, header, this.symbolSize, this.algorithm);
|
|
472
|
+
if (!admission) return this.#drop("repair:malformed");
|
|
473
|
+
if (!("frame" in admission)) return this.#drop("repair:length");
|
|
474
|
+
const frame = admission.frame;
|
|
475
|
+
if (this.#repairPacketId !== void 0 && frame.packetId !== this.#repairPacketId) {
|
|
441
476
|
return this.#drop("repair:foreign-packet-id");
|
|
442
477
|
}
|
|
443
|
-
if (
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
478
|
+
if (admission.reject) {
|
|
479
|
+
const verdict2 = this.#heldLayers.failsClosed(
|
|
480
|
+
repairTrackName,
|
|
481
|
+
frame.ssStart,
|
|
482
|
+
frame.rsbLength,
|
|
483
|
+
this.#anchorHorizon,
|
|
484
|
+
this.#newestSource
|
|
485
|
+
);
|
|
486
|
+
if (verdict2) {
|
|
487
|
+
this.#stats.failClosed = verdict2;
|
|
488
|
+
return this.#drop("repair:fail-closed");
|
|
489
|
+
}
|
|
490
|
+
return this.#drop(admission.reject === "repairRsId" ? "repair:rs-id" : "repair:scheme-bound");
|
|
447
491
|
}
|
|
492
|
+
this.#repairPacketId ??= frame.packetId;
|
|
493
|
+
if (frame.ssbLength > this.sourceSymbols) return this.#drop("repair:ssb-length");
|
|
448
494
|
const verdict = this.#heldLayers.admit(
|
|
449
495
|
repairTrackName,
|
|
450
496
|
frame.ssStart,
|