@blockcast/mmt-container 0.5.0 → 1.0.0-main.215b8665a0eb

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.
@@ -0,0 +1,33 @@
1
+ export type FecCatalogOutcome = "ok" | "unavailable" | "violation";
2
+ export type FecCatalogCode = "fec_scheme_absent" | "fec_scheme_unimplemented" | "fec_block_profile_absent" | "fec_block_profile_unimplemented" | "fec_block_profile_packaging" | "fec_member" | "fec_naming" | "fec_resolution" | "fec_enhancement_repair" | "fec_orphan" | "fec_layers" | "fec_layer0" | "fec_bounds" | "fec_instance_id" | "fec_symbol_tracks" | "fec_track_geometry" | "fec_priority" | "fec_overlay" | "fec_overlay_unsupported";
3
+ export interface FecCatalogIssue {
4
+ readonly code: FecCatalogCode;
5
+ /** JSON Pointer into the catalog. */
6
+ readonly path: string;
7
+ }
8
+ export interface FecCatalogInstance {
9
+ /** JSON Pointer of the instance object, `/tracks/<i>/fec/<j>`. */
10
+ readonly path: string;
11
+ readonly track: string | null;
12
+ /** Resolved Instance ID; null when `instanceId` is malformed. */
13
+ readonly instanceId: number | null;
14
+ readonly outcome: FecCatalogOutcome;
15
+ readonly issues: readonly FecCatalogIssue[];
16
+ }
17
+ export interface FecCatalogReport {
18
+ readonly instances: readonly FecCatalogInstance[];
19
+ /** Every report, instance-attributed or not, in discovery order. */
20
+ readonly issues: readonly FecCatalogIssue[];
21
+ }
22
+ export interface FecCatalogReceiver {
23
+ /** Schemes the receiver implements. Default: reed-solomon, raptorq. */
24
+ readonly schemes?: readonly string[];
25
+ /** Block profiles the receiver implements. Default: moq-object-v1, iso-ssbg1-v1. */
26
+ readonly blockProfiles?: readonly string[];
27
+ /** Whether the receiver implements the mmt-02 7.4 keyframe overlay. Default true. */
28
+ readonly overlays?: boolean;
29
+ }
30
+ type Json = unknown;
31
+ export declare function validateFecCatalog(catalog: Json, receiver?: FecCatalogReceiver): FecCatalogReport;
32
+ export {};
33
+ //# sourceMappingURL=fec-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fec-catalog.d.ts","sourceRoot":"","sources":["../src/fec-catalog.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,aAAa,GAAG,WAAW,CAAC;AAEnE,MAAM,MAAM,cAAc,GAEvB,mBAAmB,GACnB,0BAA0B,GAC1B,0BAA0B,GAC1B,iCAAiC,GACjC,6BAA6B,GAE7B,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,wBAAwB,GACxB,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,cAAc,GACd,aAAa,GACb,yBAAyB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAClC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC5B;AAoBD,KAAK,IAAI,GAAG,OAAO,CAAC;AAgCpB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAE,kBAAuB,GAAG,gBAAgB,CA4SrG"}
@@ -0,0 +1,296 @@
1
+ // src/fec-catalog.ts
2
+ var DEFAULT_SCHEMES = ["reed-solomon", "raptorq"];
3
+ var DEFAULT_PROFILES = ["moq-object-v1", "iso-ssbg1-v1"];
4
+ var RS_MAX_BLOCK = 255;
5
+ var RAPTORQ_MAX_K = 56403;
6
+ var MAX_24 = 16777215;
7
+ var ISO_MIN_T = 14;
8
+ var GEOMETRY_KEYS = [
9
+ "scheme",
10
+ "blockProfile",
11
+ "mmtpMode",
12
+ "timescale",
13
+ "symbolSize",
14
+ "interleaveDepthMs",
15
+ "reorderToleranceMs",
16
+ "sourceSymbols",
17
+ "fec"
18
+ ];
19
+ var isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
20
+ var has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
21
+ var isInt = (v) => typeof v === "number" && Number.isInteger(v);
22
+ var intIn = (v, lo, hi = Number.MAX_SAFE_INTEGER) => isInt(v) && v >= lo && v <= hi;
23
+ var profileAdmits = (profile, packaging) => profile !== "iso-ssbg1-v1" || packaging === "mmtp";
24
+ function validateFecCatalog(catalog, receiver = {}) {
25
+ const schemes = receiver.schemes ?? DEFAULT_SCHEMES;
26
+ const profiles = receiver.blockProfiles ?? DEFAULT_PROFILES;
27
+ const overlays = receiver.overlays ?? true;
28
+ const all = [];
29
+ const report = (code, path, inst) => {
30
+ const issue = { code, path };
31
+ all.push(issue);
32
+ inst?.issues.push(issue);
33
+ };
34
+ const tracks = isObj(catalog) && Array.isArray(catalog.tracks) ? catalog.tracks : [];
35
+ if (!isObj(catalog) || !Array.isArray(catalog.tracks)) report("fec_member", "/tracks");
36
+ let rejectAll = false;
37
+ tracks.forEach((t, ti) => {
38
+ if (!isObj(t)) return;
39
+ if (has(t, "enhancementRepair")) {
40
+ rejectAll = true;
41
+ report("fec_enhancement_repair", `/tracks/${ti}/enhancementRepair`);
42
+ }
43
+ if (Array.isArray(t.fec))
44
+ t.fec.forEach((o, ii) => {
45
+ if (isObj(o) && has(o, "enhancementRepair")) {
46
+ rejectAll = true;
47
+ report("fec_enhancement_repair", `/tracks/${ti}/fec/${ii}/enhancementRepair`);
48
+ }
49
+ });
50
+ });
51
+ const key = (ns, name) => JSON.stringify([ns ?? null, name]);
52
+ const byName = /* @__PURE__ */ new Map();
53
+ tracks.forEach((t, ti) => {
54
+ if (isObj(t) && typeof t.name === "string") {
55
+ const k = key(t.namespace, t.name);
56
+ if (!byName.has(k)) byName.set(k, ti);
57
+ }
58
+ });
59
+ const trackAt = (ti) => tracks[ti];
60
+ const insts = [];
61
+ tracks.forEach((t, ti) => {
62
+ if (!isObj(t) || !has(t, "fec") || t.packaging === "fec-repair" || t.packaging === "fec-source") return;
63
+ if (!Array.isArray(t.fec)) {
64
+ report("fec_member", `/tracks/${ti}/fec`);
65
+ return;
66
+ }
67
+ t.fec.forEach((o, ii) => {
68
+ const path = `/tracks/${ti}/fec/${ii}`;
69
+ const inst = {
70
+ path,
71
+ ti,
72
+ track: t,
73
+ obj: isObj(o) ? o : null,
74
+ id: null,
75
+ unavailable: false,
76
+ overlay: false,
77
+ issues: [],
78
+ layer0: null,
79
+ symbolNamed: null,
80
+ attached: []
81
+ };
82
+ insts.push(inst);
83
+ if (!inst.obj) return report("fec_member", path, inst);
84
+ const o2 = inst.obj;
85
+ if (!has(o2, "instanceId")) inst.id = 0;
86
+ else if (intIn(o2.instanceId, 0, 255)) inst.id = o2.instanceId;
87
+ else report("fec_member", `${path}/instanceId`, inst);
88
+ inst.overlay = has(o2, "scope");
89
+ });
90
+ });
91
+ const declaresFec = insts.length > 0;
92
+ for (const inst of insts) {
93
+ const o = inst.obj;
94
+ if (!o) continue;
95
+ const avail = (field, impl) => {
96
+ const p = `${inst.path}/${field}`;
97
+ const absent = field === "scheme" ? "fec_scheme_absent" : "fec_block_profile_absent";
98
+ const unimpl = field === "scheme" ? "fec_scheme_unimplemented" : "fec_block_profile_unimplemented";
99
+ if (!has(o, field)) return report(absent, p, inst), false;
100
+ if (typeof o[field] !== "string") return report("fec_member", p, inst), true;
101
+ if (!impl.includes(o[field])) return report(unimpl, p, inst), false;
102
+ return true;
103
+ };
104
+ if (!avail("scheme", schemes) || !avail("blockProfile", profiles)) inst.unavailable = true;
105
+ else if (typeof o.blockProfile === "string" && !profileAdmits(o.blockProfile, inst.track.packaging)) {
106
+ report("fec_block_profile_packaging", `${inst.path}/blockProfile`, inst);
107
+ inst.unavailable = true;
108
+ }
109
+ }
110
+ const live = (i) => !i.unavailable;
111
+ for (const inst of insts.filter(live)) {
112
+ const o = inst.obj;
113
+ if (!o) continue;
114
+ const p = inst.path;
115
+ for (const m of ["sourceSymbols", "repairSymbols", "symbolSize"])
116
+ if (!intIn(o[m], 1)) report("fec_member", `${p}/${m}`, inst);
117
+ if (typeof o.repairTrack !== "string") report("fec_member", `${p}/repairTrack`, inst);
118
+ if (has(o, "symbolTrack") && typeof o.symbolTrack !== "string") report("fec_member", `${p}/symbolTrack`, inst);
119
+ if (has(o, "interleaveDepthMs")) {
120
+ const d = o.interleaveDepthMs;
121
+ if (!intIn(d, 0) || d === 0 && o.blockProfile !== "iso-ssbg1-v1")
122
+ report("fec_member", `${p}/interleaveDepthMs`, inst);
123
+ }
124
+ if (has(o, "reorderToleranceMs")) {
125
+ const r = o.reorderToleranceMs;
126
+ if (typeof r !== "number" || !Number.isFinite(r) || r < 0) report("fec_member", `${p}/reorderToleranceMs`, inst);
127
+ }
128
+ if (has(o, "label") && typeof o.label !== "string") report("fec_member", `${p}/label`, inst);
129
+ if (inst.overlay && o.scope !== "keyframe") report("fec_member", `${p}/scope`, inst);
130
+ }
131
+ const idGroups = /* @__PURE__ */ new Map();
132
+ for (const inst of insts)
133
+ if (inst.id !== null) {
134
+ const k = `${inst.ti}:${inst.id}`;
135
+ idGroups.set(k, [...idGroups.get(k) ?? [], inst]);
136
+ }
137
+ for (const group of idGroups.values())
138
+ if (group.length > 1)
139
+ for (const inst of group.filter(live))
140
+ report("fec_instance_id", inst.obj && has(inst.obj, "instanceId") ? `${inst.path}/instanceId` : inst.path, inst);
141
+ const nameUses = /* @__PURE__ */ new Map();
142
+ for (const inst of insts)
143
+ for (const field of ["repairTrack", "symbolTrack"])
144
+ if (inst.obj && typeof inst.obj[field] === "string") {
145
+ const k = key(inst.track.namespace, inst.obj[field]);
146
+ nameUses.set(k, [...nameUses.get(k) ?? [], { inst, field }]);
147
+ }
148
+ const namedBy = /* @__PURE__ */ new Map();
149
+ for (const [k, uses] of nameUses) {
150
+ const tj = byName.get(k);
151
+ for (const { inst, field } of uses) {
152
+ const path = `${inst.path}/${field}`;
153
+ if (tj === void 0 || trackAt(tj).packaging !== (field === "repairTrack" ? "fec-repair" : "fec-source")) {
154
+ if (live(inst)) report("fec_naming", path, inst);
155
+ } else if (uses.length > 1) {
156
+ if (live(inst)) report("fec_naming", path, inst);
157
+ if (!namedBy.has(tj)) namedBy.set(tj, inst);
158
+ } else {
159
+ namedBy.set(tj, inst);
160
+ if (field === "repairTrack") inst.layer0 = tj;
161
+ else inst.symbolNamed = tj;
162
+ }
163
+ }
164
+ }
165
+ const owner = /* @__PURE__ */ new Map();
166
+ if (declaresFec)
167
+ tracks.forEach((t, tj) => {
168
+ if (!isObj(t) || t.packaging !== "fec-repair" && t.packaging !== "fec-source") return;
169
+ const tp = `/tracks/${tj}`;
170
+ const named = namedBy.get(tj);
171
+ if (named) {
172
+ owner.set(tj, named);
173
+ if (!live(named)) return;
174
+ if (has(t, "source") && t.source !== named.track.name) report("fec_resolution", `${tp}/source`, named);
175
+ if (has(t, "instanceId") && t.instanceId !== named.id) report("fec_resolution", `${tp}/instanceId`, named);
176
+ return;
177
+ }
178
+ if (!has(t, "source")) return report("fec_orphan", tp);
179
+ const id = has(t, "instanceId") ? t.instanceId : 0;
180
+ const src = typeof t.source === "string" ? byName.get(key(t.namespace, t.source)) : void 0;
181
+ const target = src === void 0 ? void 0 : insts.find((i) => i.ti === src && i.id === id);
182
+ if (!target) return report("fec_naming", has(t, "instanceId") && src !== void 0 ? `${tp}/instanceId` : `${tp}/source`);
183
+ owner.set(tj, target);
184
+ target.attached.push(tj);
185
+ });
186
+ for (const [tj, inst] of owner) {
187
+ if (!live(inst)) continue;
188
+ const t = trackAt(tj);
189
+ const tp = `/tracks/${tj}`;
190
+ const symbol = t.packaging === "fec-source";
191
+ if (has(t, "source") && typeof t.source !== "string") report("fec_member", `${tp}/source`, inst);
192
+ if (has(t, "instanceId") && !intIn(t.instanceId, 0, 255)) report("fec_member", `${tp}/instanceId`, inst);
193
+ for (const m of ["repairLayer", "repairSymbols"]) {
194
+ if (!has(t, m)) continue;
195
+ if (symbol || !intIn(t[m], m === "repairLayer" ? 0 : 1)) report("fec_member", `${tp}/${m}`, inst);
196
+ }
197
+ if (has(t, "priority") && !intIn(t.priority, symbol ? 0 : 192, 255)) report("fec_member", `${tp}/priority`, inst);
198
+ for (const k of Object.keys(t))
199
+ if (GEOMETRY_KEYS.includes(k) || k.startsWith("groupDuration")) report("fec_track_geometry", `${tp}/${k}`, inst);
200
+ }
201
+ for (const inst of insts.filter(live)) {
202
+ const o = inst.obj;
203
+ if (!o) continue;
204
+ const repairs = inst.attached.filter((tj) => trackAt(tj).packaging === "fec-repair");
205
+ const symbols = inst.attached.filter((tj) => trackAt(tj).packaging === "fec-source");
206
+ if (symbols.length + (inst.symbolNamed !== null ? 1 : 0) > 1)
207
+ for (const tj of symbols) report("fec_symbol_tracks", `/tracks/${tj}`, inst);
208
+ const l0 = inst.layer0 === null ? null : trackAt(inst.layer0);
209
+ const l0p = `/tracks/${inst.layer0}`;
210
+ if (inst.overlay) {
211
+ if (l0 && has(l0, "repairLayer")) report("fec_overlay", `${l0p}/repairLayer`, inst);
212
+ for (const tj of repairs)
213
+ report("fec_overlay", has(trackAt(tj), "repairLayer") ? `/tracks/${tj}/repairLayer` : `/tracks/${tj}`, inst);
214
+ } else {
215
+ if (l0 && has(l0, "repairLayer") && l0.repairLayer !== 0) report("fec_layers", `${l0p}/repairLayer`, inst);
216
+ if (l0 && has(l0, "repairSymbols") && intIn(o.repairSymbols, 1) && l0.repairSymbols !== o.repairSymbols)
217
+ report("fec_layer0", `${l0p}/repairSymbols`, inst);
218
+ const layers = [];
219
+ for (const tj of repairs) {
220
+ const t = trackAt(tj);
221
+ if (!has(t, "repairLayer")) report("fec_member", `/tracks/${tj}/repairLayer`, inst);
222
+ else if (t.repairLayer === 0) report("fec_layers", `/tracks/${tj}/repairLayer`, inst);
223
+ else if (intIn(t.repairLayer, 1)) layers.push({ tj, layer: t.repairLayer });
224
+ if (!has(t, "repairSymbols")) report("fec_member", `/tracks/${tj}/repairSymbols`, inst);
225
+ }
226
+ const counts = /* @__PURE__ */ new Map();
227
+ for (const { layer } of layers) counts.set(layer, (counts.get(layer) ?? 0) + 1);
228
+ let missing = 1;
229
+ while (counts.has(missing)) missing++;
230
+ for (const { tj, layer } of layers)
231
+ if (counts.get(layer) > 1 || layer > missing) report("fec_layers", `/tracks/${tj}/repairLayer`, inst);
232
+ const chain = [
233
+ { layer: 0, tj: inst.layer0, pri: l0 && intIn(l0.priority, 192, 255) ? l0.priority : l0 && has(l0, "priority") ? null : 240 },
234
+ ...layers.map(({ tj, layer }) => {
235
+ const pr = trackAt(tj).priority;
236
+ return { layer, tj, pri: intIn(pr, 192, 255) ? pr : null };
237
+ })
238
+ ].sort((a, b) => a.layer - b.layer);
239
+ let prev = null;
240
+ for (const c of chain) {
241
+ if (c.pri === null) continue;
242
+ if (prev !== null && c.pri < prev) report("fec_priority", `/tracks/${c.tj}/priority`, inst);
243
+ prev = Math.max(prev ?? c.pri, c.pri);
244
+ }
245
+ }
246
+ const K = o.sourceSymbols;
247
+ const T = o.symbolSize;
248
+ const P0 = o.repairSymbols;
249
+ if (intIn(K, 1) && intIn(P0, 1)) {
250
+ let P = P0;
251
+ if (!inst.overlay)
252
+ for (const tj of repairs) {
253
+ const t = trackAt(tj);
254
+ if (intIn(t.repairLayer, 1) && intIn(t.repairSymbols, 1)) P += t.repairSymbols;
255
+ }
256
+ if (P > MAX_24 || K + P - 1 > MAX_24) report("fec_bounds", inst.path, inst);
257
+ else if (o.scheme === "reed-solomon" && K + P > RS_MAX_BLOCK) report("fec_bounds", inst.path, inst);
258
+ }
259
+ if (o.scheme === "raptorq" && intIn(K, 1) && K > RAPTORQ_MAX_K) report("fec_bounds", `${inst.path}/sourceSymbols`, inst);
260
+ if (intIn(T, 1)) {
261
+ if (o.scheme === "raptorq" && T % 8 !== 0) report("fec_bounds", `${inst.path}/symbolSize`, inst);
262
+ else if (o.blockProfile === "iso-ssbg1-v1" && T < ISO_MIN_T) report("fec_bounds", `${inst.path}/symbolSize`, inst);
263
+ }
264
+ }
265
+ const overlayTracks = new Set(insts.filter((i) => live(i) && i.overlay).map((i) => i.ti));
266
+ for (const ti of overlayTracks) {
267
+ const ofTrack = insts.filter((i) => i.ti === ti && live(i));
268
+ const ovs = ofTrack.filter((i) => i.overlay);
269
+ if (!overlays) {
270
+ for (const ov of ovs) report("fec_overlay_unsupported", `${ov.path}/scope`, ov);
271
+ for (const i of ofTrack) i.issues.length === 0 && i.issues.push({ code: "fec_overlay_unsupported", path: `${ovs[0].path}/scope` });
272
+ continue;
273
+ }
274
+ if (ovs.length > 1) for (const ov of ovs) report("fec_overlay", `${ov.path}/scope`, ov);
275
+ for (const ov of ovs)
276
+ if (ov.obj?.blockProfile !== "iso-ssbg1-v1") report("fec_overlay", `${ov.path}/blockProfile`, ov);
277
+ const cause = ovs.flatMap((ov) => ov.issues).find((x) => x.code === "fec_overlay");
278
+ if (cause) {
279
+ for (const ov of ovs) if (ov.issues.length === 0) ov.issues.push(cause);
280
+ }
281
+ }
282
+ return {
283
+ instances: insts.map((i) => ({
284
+ path: i.path,
285
+ track: typeof i.track.name === "string" ? i.track.name : null,
286
+ instanceId: i.id,
287
+ outcome: rejectAll || !i.unavailable && i.issues.length > 0 ? "violation" : i.unavailable ? "unavailable" : "ok",
288
+ issues: i.issues
289
+ })),
290
+ issues: all
291
+ };
292
+ }
293
+ export {
294
+ validateFecCatalog
295
+ };
296
+ //# sourceMappingURL=fec-catalog.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fec-catalog.ts"],
4
+ "sourcesContent": ["// FEC catalog binding validator (draft-ramadan-moq-fec-catalog-00, as posted\n// 2026-11-02, moqcast-draft 5f49172).\n//\n// The catalog-00 shape only: a track's `fec` is an array of instance objects,\n// and a repair or symbol track binds to its instance by `source` + `instanceId`\n// (or by being named in `repairTrack` / `symbolTrack`). The draft-01 object\n// shape (`fec: {...}`, `depends`) is not accepted: an object `fec` is a type\n// violation, and a repair track that only `depends` on its source is an orphan.\n//\n// Validation fails closed per instance (fec-core-00 10.3): a violation stops\n// FEC for that instance and no other. Three outcomes, each reported with the\n// catalog path that caused it:\n// ok - FEC may start for the instance.\n// unavailable - the receiver forgoes FEC for it (fec-core-00 10.3 rule 1,\n// 4.5); not a validation failure.\n// violation - the configuration is invalid for this receiver.\n// An orphan repair or symbol track (fec-catalog-00 5 rule 6) is reported and\n// stops nothing. `enhancementRepair` anywhere rejects the catalog (rule 4).\n//\n// The Rust twin is `mmt_fec::fec_catalog`; both run vectors/fec-catalog-00/.\n\nexport type FecCatalogOutcome = \"ok\" | \"unavailable\" | \"violation\";\n\nexport type FecCatalogCode =\n\t// Unavailable (fec-core-00 10.3 rule 1; fec-catalog-00 3.1).\n\t| \"fec_scheme_absent\"\n\t| \"fec_scheme_unimplemented\"\n\t| \"fec_block_profile_absent\"\n\t| \"fec_block_profile_unimplemented\"\n\t| \"fec_block_profile_packaging\"\n\t// Violations.\n\t| \"fec_member\" // fec-catalog-00 5 rule 1; fec-core-00 10.3 rule 11\n\t| \"fec_naming\" // fec-catalog-00 5 rule 2\n\t| \"fec_resolution\" // fec-catalog-00 5 rule 3\n\t| \"fec_enhancement_repair\" // fec-catalog-00 5 rule 4, 3.4\n\t| \"fec_orphan\" // fec-catalog-00 5 rule 6 (report only)\n\t| \"fec_layers\" // fec-core-00 10.3 rule 3\n\t| \"fec_layer0\" // fec-core-00 10.3 rule 4\n\t| \"fec_bounds\" // fec-core-00 10.3 rule 5; block-codes-00 7; mmt-02 7.1\n\t| \"fec_instance_id\" // fec-core-00 10.3 rule 7\n\t| \"fec_symbol_tracks\" // fec-core-00 10.3 rule 7\n\t| \"fec_track_geometry\" // fec-core-00 10.3 rule 8\n\t| \"fec_priority\" // fec-core-00 10.3 rule 10\n\t| \"fec_overlay\" // mmt-02 7.4.1\n\t| \"fec_overlay_unsupported\"; // mmt-02 7.4.4\n\nexport interface FecCatalogIssue {\n\treadonly code: FecCatalogCode;\n\t/** JSON Pointer into the catalog. */\n\treadonly path: string;\n}\n\nexport interface FecCatalogInstance {\n\t/** JSON Pointer of the instance object, `/tracks/<i>/fec/<j>`. */\n\treadonly path: string;\n\treadonly track: string | null;\n\t/** Resolved Instance ID; null when `instanceId` is malformed. */\n\treadonly instanceId: number | null;\n\treadonly outcome: FecCatalogOutcome;\n\treadonly issues: readonly FecCatalogIssue[];\n}\n\nexport interface FecCatalogReport {\n\treadonly instances: readonly FecCatalogInstance[];\n\t/** Every report, instance-attributed or not, in discovery order. */\n\treadonly issues: readonly FecCatalogIssue[];\n}\n\nexport interface FecCatalogReceiver {\n\t/** Schemes the receiver implements. Default: reed-solomon, raptorq. */\n\treadonly schemes?: readonly string[];\n\t/** Block profiles the receiver implements. Default: moq-object-v1, iso-ssbg1-v1. */\n\treadonly blockProfiles?: readonly string[];\n\t/** Whether the receiver implements the mmt-02 7.4 keyframe overlay. Default true. */\n\treadonly overlays?: boolean;\n}\n\nconst DEFAULT_SCHEMES = [\"reed-solomon\", \"raptorq\"];\nconst DEFAULT_PROFILES = [\"moq-object-v1\", \"iso-ssbg1-v1\"];\nconst RS_MAX_BLOCK = 255; // block-codes-00 7\nconst RAPTORQ_MAX_K = 56403; // block-codes-00 7\nconst MAX_24 = 0xffffff; // fec-core-00 10.3 rule 5\nconst ISO_MIN_T = 14; // mmt-02 7.1\nconst GEOMETRY_KEYS = [\n\t\"scheme\",\n\t\"blockProfile\",\n\t\"mmtpMode\",\n\t\"timescale\",\n\t\"symbolSize\",\n\t\"interleaveDepthMs\",\n\t\"reorderToleranceMs\",\n\t\"sourceSymbols\",\n\t\"fec\",\n];\n\ntype Json = unknown;\ntype Known =\n\t| \"tracks\" | \"fec\" | \"name\" | \"namespace\" | \"packaging\" | \"source\" | \"instanceId\"\n\t| \"repairLayer\" | \"repairSymbols\" | \"priority\" | \"scheme\" | \"blockProfile\"\n\t| \"sourceSymbols\" | \"symbolSize\" | \"repairTrack\" | \"symbolTrack\"\n\t| \"interleaveDepthMs\" | \"reorderToleranceMs\" | \"label\" | \"scope\";\ntype Obj = Record<string, Json> & Partial<Record<Known, Json>>;\n\nconst isObj = (v: Json): v is Obj => typeof v === \"object\" && v !== null && !Array.isArray(v);\nconst has = (o: Obj, k: string) => Object.prototype.hasOwnProperty.call(o, k);\nconst isInt = (v: Json): v is number => typeof v === \"number\" && Number.isInteger(v);\nconst intIn = (v: Json, lo: number, hi = Number.MAX_SAFE_INTEGER): v is number =>\n\tisInt(v) && v >= lo && v <= hi;\n\n// moq-object-v1 admits any packaging whose objects carry media as whole\n// objects (fec-core-00 15.3); iso-ssbg1-v1 admits mmtp (mmt-02 7.1).\nconst profileAdmits = (profile: string, packaging: Json) => profile !== \"iso-ssbg1-v1\" || packaging === \"mmtp\";\n\ninterface Inst {\n\tpath: string;\n\tti: number;\n\ttrack: Obj;\n\tobj: Obj | null;\n\tid: number | null;\n\tunavailable: boolean;\n\toverlay: boolean;\n\tissues: FecCatalogIssue[];\n\tlayer0: number | null; // track index of the resolved repairTrack\n\tsymbolNamed: number | null;\n\tattached: number[]; // unnamed fec-repair/fec-source tracks bound by source\n}\n\nexport function validateFecCatalog(catalog: Json, receiver: FecCatalogReceiver = {}): FecCatalogReport {\n\tconst schemes = receiver.schemes ?? DEFAULT_SCHEMES;\n\tconst profiles = receiver.blockProfiles ?? DEFAULT_PROFILES;\n\tconst overlays = receiver.overlays ?? true;\n\tconst all: FecCatalogIssue[] = [];\n\tconst report = (code: FecCatalogCode, path: string, inst?: Inst) => {\n\t\tconst issue = { code, path };\n\t\tall.push(issue);\n\t\tinst?.issues.push(issue);\n\t};\n\n\tconst tracks: Json[] = isObj(catalog) && Array.isArray(catalog.tracks) ? catalog.tracks : [];\n\tif (!isObj(catalog) || !Array.isArray(catalog.tracks)) report(\"fec_member\", \"/tracks\");\n\n\t// Rule 4: enhancementRepair at track level or inside an instance object.\n\tlet rejectAll = false;\n\ttracks.forEach((t, ti) => {\n\t\tif (!isObj(t)) return;\n\t\tif (has(t, \"enhancementRepair\")) {\n\t\t\trejectAll = true;\n\t\t\treport(\"fec_enhancement_repair\", `/tracks/${ti}/enhancementRepair`);\n\t\t}\n\t\tif (Array.isArray(t.fec))\n\t\t\tt.fec.forEach((o, ii) => {\n\t\t\t\tif (isObj(o) && has(o, \"enhancementRepair\")) {\n\t\t\t\t\trejectAll = true;\n\t\t\t\t\treport(\"fec_enhancement_repair\", `/tracks/${ti}/fec/${ii}/enhancementRepair`);\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\t// Track lookup by (namespace, name): a name resolves in the source track's namespace.\n\tconst key = (ns: Json, name: string) => JSON.stringify([ns ?? null, name]);\n\tconst byName = new Map<string, number>();\n\ttracks.forEach((t, ti) => {\n\t\tif (isObj(t) && typeof t.name === \"string\") {\n\t\t\tconst k = key(t.namespace, t.name);\n\t\t\tif (!byName.has(k)) byName.set(k, ti);\n\t\t}\n\t});\n\tconst trackAt = (ti: number) => tracks[ti] as Obj;\n\n\t// Collect instances.\n\tconst insts: Inst[] = [];\n\ttracks.forEach((t, ti) => {\n\t\t// A repair or symbol track's own `fec` is geometry (core rule 8), not instances.\n\t\tif (!isObj(t) || !has(t, \"fec\") || t.packaging === \"fec-repair\" || t.packaging === \"fec-source\") return;\n\t\tif (!Array.isArray(t.fec)) {\n\t\t\treport(\"fec_member\", `/tracks/${ti}/fec`);\n\t\t\treturn;\n\t\t}\n\t\tt.fec.forEach((o, ii) => {\n\t\t\tconst path = `/tracks/${ti}/fec/${ii}`;\n\t\t\tconst inst: Inst = {\n\t\t\t\tpath,\n\t\t\t\tti,\n\t\t\t\ttrack: t,\n\t\t\t\tobj: isObj(o) ? o : null,\n\t\t\t\tid: null,\n\t\t\t\tunavailable: false,\n\t\t\t\toverlay: false,\n\t\t\t\tissues: [],\n\t\t\t\tlayer0: null,\n\t\t\t\tsymbolNamed: null,\n\t\t\t\tattached: [],\n\t\t\t};\n\t\t\tinsts.push(inst);\n\t\t\tif (!inst.obj) return report(\"fec_member\", path, inst);\n\t\t\tconst o2 = inst.obj;\n\t\t\tif (!has(o2, \"instanceId\")) inst.id = 0;\n\t\t\telse if (intIn(o2.instanceId, 0, 255)) inst.id = o2.instanceId;\n\t\t\telse report(\"fec_member\", `${path}/instanceId`, inst);\n\t\t\tinst.overlay = has(o2, \"scope\");\n\t\t});\n\t});\n\tconst declaresFec = insts.length > 0;\n\n\t// Availability (fec-core-00 10.3 rule 1). Scheme first, then profile.\n\tfor (const inst of insts) {\n\t\tconst o = inst.obj;\n\t\tif (!o) continue;\n\t\tconst avail = (field: \"scheme\" | \"blockProfile\", impl: readonly string[]) => {\n\t\t\tconst p = `${inst.path}/${field}`;\n\t\t\tconst absent = field === \"scheme\" ? \"fec_scheme_absent\" : \"fec_block_profile_absent\";\n\t\t\tconst unimpl = field === \"scheme\" ? \"fec_scheme_unimplemented\" : \"fec_block_profile_unimplemented\";\n\t\t\tif (!has(o, field)) return report(absent, p, inst), false;\n\t\t\tif (typeof o[field] !== \"string\") return report(\"fec_member\", p, inst), true;\n\t\t\tif (!impl.includes(o[field] as string)) return report(unimpl, p, inst), false;\n\t\t\treturn true;\n\t\t};\n\t\tif (!avail(\"scheme\", schemes) || !avail(\"blockProfile\", profiles)) inst.unavailable = true;\n\t\telse if (typeof o.blockProfile === \"string\" && !profileAdmits(o.blockProfile, inst.track.packaging)) {\n\t\t\treport(\"fec_block_profile_packaging\", `${inst.path}/blockProfile`, inst);\n\t\t\tinst.unavailable = true;\n\t\t}\n\t}\n\tconst live = (i: Inst) => !i.unavailable;\n\n\t// Rule 1 on instance members, and core rule 11.\n\tfor (const inst of insts.filter(live)) {\n\t\tconst o = inst.obj;\n\t\tif (!o) continue;\n\t\tconst p = inst.path;\n\t\tfor (const m of [\"sourceSymbols\", \"repairSymbols\", \"symbolSize\"])\n\t\t\tif (!intIn(o[m], 1)) report(\"fec_member\", `${p}/${m}`, inst);\n\t\tif (typeof o.repairTrack !== \"string\") report(\"fec_member\", `${p}/repairTrack`, inst);\n\t\tif (has(o, \"symbolTrack\") && typeof o.symbolTrack !== \"string\") report(\"fec_member\", `${p}/symbolTrack`, inst);\n\t\tif (has(o, \"interleaveDepthMs\")) {\n\t\t\tconst d = o.interleaveDepthMs;\n\t\t\tif (!intIn(d, 0) || (d === 0 && o.blockProfile !== \"iso-ssbg1-v1\"))\n\t\t\t\treport(\"fec_member\", `${p}/interleaveDepthMs`, inst);\n\t\t}\n\t\tif (has(o, \"reorderToleranceMs\")) {\n\t\t\tconst r = o.reorderToleranceMs;\n\t\t\tif (typeof r !== \"number\" || !Number.isFinite(r) || r < 0) report(\"fec_member\", `${p}/reorderToleranceMs`, inst);\n\t\t}\n\t\tif (has(o, \"label\") && typeof o.label !== \"string\") report(\"fec_member\", `${p}/label`, inst);\n\t\tif (inst.overlay && o.scope !== \"keyframe\") report(\"fec_member\", `${p}/scope`, inst);\n\t}\n\n\t// Core rule 7: unique Instance IDs within a track.\n\tconst idGroups = new Map<string, Inst[]>();\n\tfor (const inst of insts)\n\t\tif (inst.id !== null) {\n\t\t\tconst k = `${inst.ti}:${inst.id}`;\n\t\t\tidGroups.set(k, [...(idGroups.get(k) ?? []), inst]);\n\t\t}\n\tfor (const group of idGroups.values())\n\t\tif (group.length > 1)\n\t\t\tfor (const inst of group.filter(live))\n\t\t\t\treport(\"fec_instance_id\", inst.obj && has(inst.obj, \"instanceId\") ? `${inst.path}/instanceId` : inst.path, inst);\n\n\t// Rule 2: repairTrack / symbolTrack name a track of the right packaging, once\n\t// per catalog. A name used twice binds no layer 0 or symbol track for either\n\t// namer; the track is still claimed by the first, so it is not re-attached.\n\tconst nameUses = new Map<string, { inst: Inst; field: \"repairTrack\" | \"symbolTrack\" }[]>();\n\tfor (const inst of insts)\n\t\tfor (const field of [\"repairTrack\", \"symbolTrack\"] as const)\n\t\t\tif (inst.obj && typeof inst.obj[field] === \"string\") {\n\t\t\t\tconst k = key(inst.track.namespace, inst.obj[field] as string);\n\t\t\t\tnameUses.set(k, [...(nameUses.get(k) ?? []), { inst, field }]);\n\t\t\t}\n\tconst namedBy = new Map<number, Inst>();\n\tfor (const [k, uses] of nameUses) {\n\t\tconst tj = byName.get(k);\n\t\tfor (const { inst, field } of uses) {\n\t\t\tconst path = `${inst.path}/${field}`;\n\t\t\tif (tj === undefined || trackAt(tj).packaging !== (field === \"repairTrack\" ? \"fec-repair\" : \"fec-source\")) {\n\t\t\t\tif (live(inst)) report(\"fec_naming\", path, inst);\n\t\t\t} else if (uses.length > 1) {\n\t\t\t\tif (live(inst)) report(\"fec_naming\", path, inst);\n\t\t\t\tif (!namedBy.has(tj)) namedBy.set(tj, inst);\n\t\t\t} else {\n\t\t\t\tnamedBy.set(tj, inst);\n\t\t\t\tif (field === \"repairTrack\") inst.layer0 = tj;\n\t\t\t\telse inst.symbolNamed = tj;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Repair and symbol tracks: resolve each to its instance.\n\tconst owner = new Map<number, Inst>();\n\tif (declaresFec)\n\t\ttracks.forEach((t, tj) => {\n\t\t\tif (!isObj(t) || (t.packaging !== \"fec-repair\" && t.packaging !== \"fec-source\")) return;\n\t\t\tconst tp = `/tracks/${tj}`;\n\t\t\tconst named = namedBy.get(tj);\n\t\t\tif (named) {\n\t\t\t\towner.set(tj, named);\n\t\t\t\tif (!live(named)) return;\n\t\t\t\t// Rule 3: a named track's source / instanceId agree with its namer.\n\t\t\t\tif (has(t, \"source\") && t.source !== named.track.name) report(\"fec_resolution\", `${tp}/source`, named);\n\t\t\t\tif (has(t, \"instanceId\") && t.instanceId !== named.id) report(\"fec_resolution\", `${tp}/instanceId`, named);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!has(t, \"source\")) return report(\"fec_orphan\", tp); // rule 6, stops nothing\n\t\t\tconst id = has(t, \"instanceId\") ? t.instanceId : 0;\n\t\t\tconst src = typeof t.source === \"string\" ? byName.get(key(t.namespace, t.source)) : undefined;\n\t\t\tconst target = src === undefined ? undefined : insts.find((i) => i.ti === src && i.id === id);\n\t\t\tif (!target) return report(\"fec_naming\", has(t, \"instanceId\") && src !== undefined ? `${tp}/instanceId` : `${tp}/source`);\n\t\t\towner.set(tj, target);\n\t\t\ttarget.attached.push(tj);\n\t\t});\n\n\t// Track fields (rule 1) and no geometry (core rule 8), charged to the owner.\n\tfor (const [tj, inst] of owner) {\n\t\tif (!live(inst)) continue;\n\t\tconst t = trackAt(tj);\n\t\tconst tp = `/tracks/${tj}`;\n\t\tconst symbol = t.packaging === \"fec-source\";\n\t\tif (has(t, \"source\") && typeof t.source !== \"string\") report(\"fec_member\", `${tp}/source`, inst);\n\t\tif (has(t, \"instanceId\") && !intIn(t.instanceId, 0, 255)) report(\"fec_member\", `${tp}/instanceId`, inst);\n\t\tfor (const m of [\"repairLayer\", \"repairSymbols\"]) {\n\t\t\tif (!has(t, m)) continue;\n\t\t\tif (symbol || !intIn(t[m], m === \"repairLayer\" ? 0 : 1)) report(\"fec_member\", `${tp}/${m}`, inst);\n\t\t}\n\t\tif (has(t, \"priority\") && !intIn(t.priority, symbol ? 0 : 192, 255)) report(\"fec_member\", `${tp}/priority`, inst);\n\t\tfor (const k of Object.keys(t))\n\t\t\tif (GEOMETRY_KEYS.includes(k) || k.startsWith(\"groupDuration\")) report(\"fec_track_geometry\", `${tp}/${k}`, inst);\n\t}\n\n\t// Per instance: layers, symbol tracks, priorities, scheme bounds.\n\tfor (const inst of insts.filter(live)) {\n\t\tconst o = inst.obj;\n\t\tif (!o) continue;\n\t\tconst repairs = inst.attached.filter((tj) => trackAt(tj).packaging === \"fec-repair\");\n\t\tconst symbols = inst.attached.filter((tj) => trackAt(tj).packaging === \"fec-source\");\n\t\tif (symbols.length + (inst.symbolNamed !== null ? 1 : 0) > 1)\n\t\t\tfor (const tj of symbols) report(\"fec_symbol_tracks\", `/tracks/${tj}`, inst);\n\n\t\tconst l0 = inst.layer0 === null ? null : trackAt(inst.layer0);\n\t\tconst l0p = `/tracks/${inst.layer0}`;\n\t\tif (inst.overlay) {\n\t\t\t// mmt-02 7.4.1: an overlay has one repair track and no repairLayer.\n\t\t\tif (l0 && has(l0, \"repairLayer\")) report(\"fec_overlay\", `${l0p}/repairLayer`, inst);\n\t\t\tfor (const tj of repairs)\n\t\t\t\treport(\"fec_overlay\", has(trackAt(tj), \"repairLayer\") ? `/tracks/${tj}/repairLayer` : `/tracks/${tj}`, inst);\n\t\t} else {\n\t\t\tif (l0 && has(l0, \"repairLayer\") && l0.repairLayer !== 0) report(\"fec_layers\", `${l0p}/repairLayer`, inst);\n\t\t\tif (l0 && has(l0, \"repairSymbols\") && intIn(o.repairSymbols, 1) && l0.repairSymbols !== o.repairSymbols)\n\t\t\t\treport(\"fec_layer0\", `${l0p}/repairSymbols`, inst);\n\t\t\tconst layers: { tj: number; layer: number }[] = [];\n\t\t\tfor (const tj of repairs) {\n\t\t\t\tconst t = trackAt(tj);\n\t\t\t\tif (!has(t, \"repairLayer\")) report(\"fec_member\", `/tracks/${tj}/repairLayer`, inst);\n\t\t\t\telse if (t.repairLayer === 0) report(\"fec_layers\", `/tracks/${tj}/repairLayer`, inst);\n\t\t\t\telse if (intIn(t.repairLayer, 1)) layers.push({ tj, layer: t.repairLayer });\n\t\t\t\tif (!has(t, \"repairSymbols\")) report(\"fec_member\", `/tracks/${tj}/repairSymbols`, inst);\n\t\t\t}\n\t\t\t// Core rule 3: layers 1..n contiguous, no duplicates.\n\t\t\tconst counts = new Map<number, number>();\n\t\t\tfor (const { layer } of layers) counts.set(layer, (counts.get(layer) ?? 0) + 1);\n\t\t\tlet missing = 1;\n\t\t\twhile (counts.has(missing)) missing++;\n\t\t\tfor (const { tj, layer } of layers)\n\t\t\t\tif (counts.get(layer)! > 1 || layer > missing) report(\"fec_layers\", `/tracks/${tj}/repairLayer`, inst);\n\t\t\t// Core rule 10: priority non-decreasing with layer; layer 0 defaults to 240.\n\t\t\tconst chain = [\n\t\t\t\t{ layer: 0, tj: inst.layer0, pri: l0 && intIn(l0.priority, 192, 255) ? l0.priority : l0 && has(l0, \"priority\") ? null : 240 },\n\t\t\t\t...layers.map(({ tj, layer }) => {\n\t\t\t\t\tconst pr = trackAt(tj).priority;\n\t\t\t\t\treturn { layer, tj, pri: intIn(pr, 192, 255) ? pr : null };\n\t\t\t\t}),\n\t\t\t].sort((a, b) => a.layer - b.layer);\n\t\t\tlet prev: number | null = null;\n\t\t\tfor (const c of chain) {\n\t\t\t\tif (c.pri === null) continue;\n\t\t\t\tif (prev !== null && c.pri < prev) report(\"fec_priority\", `/tracks/${c.tj}/priority`, inst);\n\t\t\t\tprev = Math.max(prev ?? c.pri, c.pri);\n\t\t\t}\n\t\t}\n\n\t\t// Core rule 5 and the scheme / profile bounds.\n\t\tconst K = o.sourceSymbols;\n\t\tconst T = o.symbolSize;\n\t\tconst P0 = o.repairSymbols;\n\t\tif (intIn(K, 1) && intIn(P0, 1)) {\n\t\t\tlet P = P0;\n\t\t\tif (!inst.overlay)\n\t\t\t\tfor (const tj of repairs) {\n\t\t\t\t\tconst t = trackAt(tj);\n\t\t\t\t\tif (intIn(t.repairLayer, 1) && intIn(t.repairSymbols, 1)) P += t.repairSymbols;\n\t\t\t\t}\n\t\t\tif (P > MAX_24 || K + P - 1 > MAX_24) report(\"fec_bounds\", inst.path, inst);\n\t\t\telse if (o.scheme === \"reed-solomon\" && K + P > RS_MAX_BLOCK) report(\"fec_bounds\", inst.path, inst);\n\t\t}\n\t\tif (o.scheme === \"raptorq\" && intIn(K, 1) && K > RAPTORQ_MAX_K) report(\"fec_bounds\", `${inst.path}/sourceSymbols`, inst);\n\t\tif (intIn(T, 1)) {\n\t\t\tif (o.scheme === \"raptorq\" && T % 8 !== 0) report(\"fec_bounds\", `${inst.path}/symbolSize`, inst);\n\t\t\telse if (o.blockProfile === \"iso-ssbg1-v1\" && T < ISO_MIN_T) report(\"fec_bounds\", `${inst.path}/symbolSize`, inst);\n\t\t}\n\t}\n\n\t// mmt-02 7.4.1 / 7.4.4: overlays, per source track.\n\tconst overlayTracks = new Set(insts.filter((i) => live(i) && i.overlay).map((i) => i.ti));\n\tfor (const ti of overlayTracks) {\n\t\tconst ofTrack = insts.filter((i) => i.ti === ti && live(i));\n\t\tconst ovs = ofTrack.filter((i) => i.overlay);\n\t\tif (!overlays) {\n\t\t\tfor (const ov of ovs) report(\"fec_overlay_unsupported\", `${ov.path}/scope`, ov);\n\t\t\tfor (const i of ofTrack) i.issues.length === 0 && i.issues.push({ code: \"fec_overlay_unsupported\", path: `${ovs[0].path}/scope` });\n\t\t\tcontinue;\n\t\t}\n\t\tif (ovs.length > 1) for (const ov of ovs) report(\"fec_overlay\", `${ov.path}/scope`, ov);\n\t\tfor (const ov of ovs)\n\t\t\tif (ov.obj?.blockProfile !== \"iso-ssbg1-v1\") report(\"fec_overlay\", `${ov.path}/blockProfile`, ov);\n\t\tconst cause = ovs.flatMap((ov) => ov.issues).find((x) => x.code === \"fec_overlay\");\n\t\tif (cause) for (const ov of ovs) if (ov.issues.length === 0) ov.issues.push(cause);\n\t}\n\n\treturn {\n\t\tinstances: insts.map((i) => ({\n\t\t\tpath: i.path,\n\t\t\ttrack: typeof i.track.name === \"string\" ? i.track.name : null,\n\t\t\tinstanceId: i.id,\n\t\t\toutcome: rejectAll || (!i.unavailable && i.issues.length > 0) ? \"violation\" : i.unavailable ? \"unavailable\" : \"ok\",\n\t\t\tissues: i.issues,\n\t\t})),\n\t\tissues: all,\n\t};\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export { isCompleteFmp4DataUnit } from './fmp4-completion.js';
12
12
  export { type AvcCInfo, type AacAscInfo, type SpsPps, type FallbackAvcCOptions, type HevcParameterSets, type H264KeyframeDetectionOptions, type H264AvccSample, type H264SampleFormat, type H264NalUnitFormat, type H264NalUnitSample, extractAvcCFromInitSegment, extractAacAscFromInitSegment, normalizeMmtpInitSegment, generateFallbackAvcC, extractSpsPpsFromAvcC, avccToAnnexB, extractCodecDescriptionFromAnnexB, codecStringFromAvcC, isAnnexB, isCompleteAvccSample, findAnnexBStartCode, splitAnnexBNalUnits, annexBToAvcc, normalizeH264SampleToAvcc, splitH264SampleNalUnits, classifyH264Keyframe, detectH264Keyframe, mmtpTimestampToMicros, isFmp4InitSegment, wrapAdtsFrame, isHevcCodec, removeEmulationPrevention, splitAvccNalUnits, extractHevcParameterSets, generateHvcCFromParameterSets, extractHevcCodecDescription, hevcVclOnly, type VideoSampleEntry, type VideoCodecFamily, type HevcSpsInfo, type HevcCmafSample, videoSampleEntryFromCodecString, videoCodecFamily, HEVC_NAL_UNIT_TYPE, HEVC_NAL_HEADER_LENGTH, hevcNalUnitType, isHevcIrapNalUnitType, parseHevcSps, hevcCodecStringFromSps, classifyHevcKeyframe, detectHevcKeyframe, normalizeHevcSampleToLengthPrefixed, prepareHevcCmafSample, } from './codec-utils.js';
13
13
  export { LOCHeaderExtensionId, FEC_SS_ID_MAX, FEC_SOURCE_INFO_LEN, encodeFecSourceInfo, decodeFecSourceInfo, FecSourceInfo, AuthTag, } from './loc.js';
14
14
  export { type FecAlgorithm, type FecCatalogConfig, isFecCatalogConfig, isFecCatalogGeometry, type MulticastProtocol, type MulticastTrack, type MulticastTrackObject, type MulticastEndpoint, type AmtDiscovery, type MulticastCatalogConfig, type NetworkSource, isMulticastTrackObject, isMulticastEndpoint, isMulticastCatalogConfig, type TrackTimingConfig, isTrackTimingConfig, resolveGroupDurationTicks, resolveGroupDurationMs, validateSwitchingSetTiming, type CmsfCatalog, type CmsfCatalogErrorCode, CmsfCatalogValidationError, validateCmsfMmtpCatalog, type ArchiveConfig, archiveOrigin, } from './carp-catalog.js';
15
+ export { validateFecCatalog, type FecCatalogCode, type FecCatalogInstance, type FecCatalogIssue, type FecCatalogOutcome, type FecCatalogReceiver, type FecCatalogReport, } from './fec-catalog.js';
15
16
  export { normalizeDeliveryCatalog, type DeliveryPackaging, type DeliveryContentType, type DeliveryEndpoint, type DeliveryPolicy, type DeliveryObjectMapping, type DeliveryFec, type DeliveryRouteBase, type DashDeliveryRoute, type HlsDeliveryRoute, type MmtpDeliveryRoute, type DashDeliveryConfig, type HlsDeliveryConfig, type MmtpDeliveryConfig, type DeliveryMulticastBase, type DeliveryMulticastV2, type DeliveryCatalogV2, } from './delivery-catalog.js';
16
17
  export { type MulticastInput, type MulticastEndpointInput, type MulticastInputErrorKind, MulticastInputError, multicastFromConfig, multicastFromEnv, } from './multicast-input.js';
17
18
  export { type Phase14OverrideTrack, type Phase14CatalogOverride, getPhase14CatalogOverride, mergeOverrideIntoHangRenditions, mergeOverrideIntoCmsfTracks, } from './phase14-catalog-override.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -75,6 +75,9 @@ import {
75
75
  validateCmsfMmtpCatalog,
76
76
  archiveOrigin
77
77
  } from "./carp-catalog.js";
78
+ import {
79
+ validateFecCatalog
80
+ } from "./fec-catalog.js";
78
81
  import {
79
82
  normalizeDeliveryCatalog
80
83
  } from "./delivery-catalog.js";
@@ -470,6 +473,7 @@ export {
470
473
  splitH264SampleNalUnits,
471
474
  unwrapMulticastPacket,
472
475
  validateCmsfMmtpCatalog,
476
+ validateFecCatalog,
473
477
  validateMulticastContainerContract,
474
478
  validateRepairTrackFields,
475
479
  validateSwitchingSetTiming,
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/**\n * @mmt/container - MMTP/LOC Container Parsing\n *\n * Shared container parsing library for MMT over MoQ and SSM.\n *\n * @packageDocumentation\n */\n\nexport type { AuthoredTiming } from './authored-timing.js'\n\n// MFU Reassembler\nexport {\n type MFUFragment,\n type ReassembledMFU,\n type ReassemblerStats,\n type MFUReassemblerOptions,\n type MfuReassemblerBackend,\n type MmtpSourcePath,\n MFUReassembler,\n isMfuReassemblyError,\n MfuReassemblyError,\n type MfuReassemblyErrorCode,\n createFragment,\n processMMTPWithReassembly,\n} from './mfu-reassembler.js'\n\n// Sample combiner: combines subsample data units (moqcast #37) of one\n// timed sample, each already reassembled by MFUReassembler, back into one\n// contiguous sample.\nexport {\n type CombinedSample,\n type SampleCombinerStats,\n SampleCombiner,\n SampleCombineError,\n type SampleCombineErrorCode,\n} from './sample-combiner.js'\n\n// fMP4 data-unit completion policy (BLO-13291)\nexport { isCompleteFmp4DataUnit } from './fmp4-completion.js'\n\n\n// The bc-provenance v2 surface (@blockcast/mmt-manifest-verify) is intentionally\n// NOT re-exported from the eager index barrel: it imports @noble/curves and\n// @noble/hashes, bare specifiers the moq-lib / shred / moqtail players (which\n// load the barrel as raw ESM via an import map) cannot resolve. Import it from\n// that package directly. The router's provenance hooks take it by type only.\n\n// H.264/AVC + H.265/HEVC Codec Utilities\nexport {\n type AvcCInfo,\n type AacAscInfo,\n type SpsPps,\n type FallbackAvcCOptions,\n type HevcParameterSets,\n type H264KeyframeDetectionOptions,\n type H264AvccSample,\n type H264SampleFormat,\n type H264NalUnitFormat,\n type H264NalUnitSample,\n extractAvcCFromInitSegment,\n extractAacAscFromInitSegment,\n normalizeMmtpInitSegment,\n generateFallbackAvcC,\n extractSpsPpsFromAvcC,\n avccToAnnexB,\n extractCodecDescriptionFromAnnexB,\n codecStringFromAvcC,\n isAnnexB,\n isCompleteAvccSample,\n findAnnexBStartCode,\n splitAnnexBNalUnits,\n annexBToAvcc,\n normalizeH264SampleToAvcc,\n splitH264SampleNalUnits,\n classifyH264Keyframe,\n detectH264Keyframe,\n mmtpTimestampToMicros,\n isFmp4InitSegment,\n wrapAdtsFrame,\n // HEVC (BLO-7764): build the hvcC description WebCodecs requires for length-prefixed H.265.\n isHevcCodec,\n removeEmulationPrevention,\n splitAvccNalUnits,\n extractHevcParameterSets,\n generateHvcCFromParameterSets,\n extractHevcCodecDescription,\n hevcVclOnly,\n // HEVC receive path (BLO-35597): catalog-selected family, IRAP keyframes,\n // SPS-derived codec string, MSE sample normalization.\n type VideoSampleEntry,\n type VideoCodecFamily,\n type HevcSpsInfo,\n type HevcCmafSample,\n videoSampleEntryFromCodecString,\n videoCodecFamily,\n HEVC_NAL_UNIT_TYPE,\n HEVC_NAL_HEADER_LENGTH,\n hevcNalUnitType,\n isHevcIrapNalUnitType,\n parseHevcSps,\n hevcCodecStringFromSps,\n classifyHevcKeyframe,\n detectHevcKeyframe,\n normalizeHevcSampleToLengthPrefixed,\n prepareHevcCmafSample,\n} from './codec-utils.js'\n\n// LOC FEC Extensions (draft-ramadan-moq-fec \u00A75.3, object extension 0x11)\nexport {\n LOCHeaderExtensionId,\n FEC_SS_ID_MAX,\n FEC_SOURCE_INFO_LEN,\n encodeFecSourceInfo,\n decodeFecSourceInfo,\n FecSourceInfo,\n AuthTag,\n} from './loc.js'\n\n// CARP Catalog Extensions (draft-law-ramadan-moq-carp-reliability \u00A73-4)\n// + Track Timing (draft-ramadan-moq-mmt-01 \u00A74.4.2)\nexport {\n type FecAlgorithm,\n type FecCatalogConfig,\n isFecCatalogConfig,\n isFecCatalogGeometry,\n type MulticastProtocol,\n type MulticastTrack,\n type MulticastTrackObject,\n type MulticastEndpoint,\n type AmtDiscovery,\n type MulticastCatalogConfig,\n type NetworkSource,\n isMulticastTrackObject,\n isMulticastEndpoint,\n isMulticastCatalogConfig,\n type TrackTimingConfig,\n isTrackTimingConfig,\n resolveGroupDurationTicks,\n resolveGroupDurationMs,\n validateSwitchingSetTiming,\n type CmsfCatalog,\n type CmsfCatalogErrorCode,\n CmsfCatalogValidationError,\n validateCmsfMmtpCatalog,\n type ArchiveConfig,\n archiveOrigin,\n} from './carp-catalog.js'\n\n// Strict v2 multicast delivery catalog (DASH/HLS/MMTP routes), moved from\n// moqtail-private so players share one contract (BLO-47003).\nexport {\n normalizeDeliveryCatalog,\n type DeliveryPackaging,\n type DeliveryContentType,\n type DeliveryEndpoint,\n type DeliveryPolicy,\n type DeliveryObjectMapping,\n type DeliveryFec,\n type DeliveryRouteBase,\n type DashDeliveryRoute,\n type HlsDeliveryRoute,\n type MmtpDeliveryRoute,\n type DashDeliveryConfig,\n type HlsDeliveryConfig,\n type MmtpDeliveryConfig,\n type DeliveryMulticastBase,\n type DeliveryMulticastV2,\n type DeliveryCatalogV2,\n} from './delivery-catalog.js'\n\n// Multicast input contract \u2014 validator + builder for publisher-emitted\n// catalogs (draft-ramadan-moq-multicast-01 \u00A74.1, BLO-3323 A.1).\n// `multicastFromEnv` is the env-var helper used by FFmpeg and the\n// cast bridge (BLO-3337).\nexport {\n type MulticastInput,\n type MulticastEndpointInput,\n type MulticastInputErrorKind,\n MulticastInputError,\n multicastFromConfig,\n multicastFromEnv,\n} from './multicast-input.js'\n\n// Phase 14 catalog override hook (test harness injects\n// globalThis.__PHASE14_CATALOG_OVERRIDE; see 7point-validation.test.mjs)\nexport {\n type Phase14OverrideTrack,\n type Phase14CatalogOverride,\n getPhase14CatalogOverride,\n mergeOverrideIntoHangRenditions,\n mergeOverrideIntoCmsfTracks,\n} from './phase14-catalog-override.js'\n\n// Multicast Unwrap (container-aware MMTP dispatch)\nexport {\n type MulticastContainerContract,\n type MulticastContainerErrorCode,\n type FecPayloadId as MulticastFecPayloadId,\n type MulticastFrame,\n MulticastContainerContractError,\n validateMulticastContainerContract,\n unwrapMulticastPacket,\n} from './multicast-unwrap.js'\n\n// Timestamp Codec \u2014 container-format-agnostic timestamp encoding/decoding\nexport {\n type ContainerFormat,\n type LocHeader,\n encodeTimestamp,\n decodeTimestamp,\n getTimestampSize,\n decodeLocHeader,\n decodeLocTimestamp,\n encodeLocTimestamp,\n} from './timestamp-codec.js'\n\n// MMTP \u2192 CMAF conversion (draft-ramadan-moq-mmt \u00A75.3)\nexport {\n MmtpToCmaf,\n encodeDataSegment,\n encodeMultiSampleSegment,\n buildVideoInitSegment,\n buildHevcVideoInitSegment,\n buildAudioInitSegment,\n generateSilenceFrame,\n} from './mmtp-to-cmaf.js'\n\n// MMTP Signaling \u2014 packet type detection and classification\nexport {\n type PacketClass,\n getPacketType,\n isSignalingPacket,\n isSourcePacket,\n classifyPacket,\n} from './signaling.js'\n\n// FEC Block \u2192 CMAF Segment Assembler\nexport {\n CmafBlockAssembler,\n type CmafBlockSample,\n type CmafSampleOrderPolicy,\n type CmafSampleOrderStats,\n type CmafEmitStats,\n type CmafAudioConcealStats,\n type BlockAssemblerConfig,\n} from './cmaf-block-assembler.js'\n\n// MoQ Group \u2192 CMAF Segment Batcher\nexport {\n CmafGroupBatcher,\n type CmafGroupBatcherConfig,\n} from './cmaf-group-batcher.js'\n\n// FEC Manager (codec-agnostic FEC decode service)\nexport {\n FECManager,\n type FECManagerConfig,\n type FecDecoderUnavailableEvent,\n type FecDecoderUnavailableReason,\n type FecFallbackDecoder,\n type WasmFecDecoder,\n type FecStats,\n type MulticastSymbolDelivery,\n type UndelimitedIsoLoss,\n type FecBlockResolution,\n type RepairVia,\n type FecRepairLayer,\n type FecFailClosedReason,\n type FecFailClosedEvent,\n} from './fec-manager.js'\n\n// MMTP Router (packet processing + frame routing)\nexport {\n MmtpRouter,\n KEYFRAME_LOST_TIMEOUT_SLACK,\n type FrameCallback,\n type FECManagerLike,\n type MmtpIngressContext,\n type MmtpStreamIdentity,\n type RoutedPacketMeta,\n type StagedStreamSwitch,\n type StreamSwitchCommit,\n type StreamSwitchCommitReason,\n type StreamSwitchOptions,\n type StreamSwitchPosition,\n type TrackPacketCallback,\n} from './mmtp-router.js'\n\n// MmtpContainerParser (unified, transport-agnostic)\nexport {\n MmtpContainerParser,\n type MmtpParserConfig,\n type MmtpParserRecord,\n type MmtpParserFeedStats,\n type MmtpFeedDropReason,\n type MmtpFeedOutcomeKey,\n type TrackInfo,\n type MmtpReorderStats,\n type MmtpReorderFrameDiagnostics,\n type MmtpReorderStreamDiagnostics,\n type FrameMeta as ParserFrameMeta,\n type PacketInfo,\n type ParsedMmtpPacket,\n} from './mmtp-container-parser.js'\n\nexport {\n datagramMfuReassembly,\n reliableMoqMfuReassembly,\n mmtpFrameReorderWindowFrames,\n mfuReassemblyTimeoutMs,\n type MfuReassemblyPolicy,\n type MmtpTrackType,\n type ReliableMoqReassemblyOptions,\n} from './mfu-reassembly-policy.js'\n\nexport {\n WasmMfuReassembler,\n resolveGlobalMmtWasmBindings,\n type MmtWasmBindings,\n type WasmMfuReassemblerOptions,\n} from './wasm-mfu-reassembler.js'\n\nexport {\n createWasmMmtpContainerParser,\n type WasmMmtpParserConfig,\n} from './wasm-mmtp-container-parser.js'\n\n// Multicast Transport (SSM join/socket/watchdog)\nexport {\n MulticastTransport,\n type MulticastFailbackReason,\n type MulticastJoinDeclineReason,\n type MulticastJoinOutcome,\n type MulticastJoinProviderError,\n type MulticastJoinStats,\n type MulticastTransportConfig,\n type ResolvedMulticastTransport,\n} from './multicast-transport.js'\n\n// Multicast Manager (backwards-compat facade composing all three)\nexport {\n MulticastManager,\n forwardRepairLifecycleEvents,\n isRepairLifecycleEvent,\n REPAIR_LIFECYCLE_EVENT_TYPE,\n REPAIR_LIFECYCLE_LOG_PREFIX,\n type MulticastEndpointConfig,\n type MultiTrackCatalog,\n type MultiTrackCatalogTrack,\n type WasmFecDecoderFactory,\n type RepairBlockIdentity,\n type RepairLifecycleApplicationEvent,\n type RepairLifecycleEventOptions,\n type RepairLifecycleEventFactory,\n type RepairLifecycleEventTarget,\n type RepairLifecycleSource,\n type RepairLifecycleEvent,\n type RepairLifecycleObserver,\n type RepairStreamIdentity,\n type BlockPolicyStats,\n type RenditionSwitch,\n type RenditionSwitchCancel,\n type RenditionSwitchRequest,\n type RenditionSwitchState,\n} from './multicast-manager.js'\n\n// Keyframe-protected FEC repair policy: block classification, repair\n// priority, and the stall/conceal decision every player applies.\nexport {\n BlockClassifier,\n decideGap,\n deriveBlockClassifierGeometry,\n keyframeIntervalMediaTicks,\n repairPriorityForClass,\n type BlockClass,\n type BlockClassifierGeometry,\n type BlockClassifierGeometryInput,\n type ClassifierChange,\n type ClassifierMode,\n type ClassifierReason,\n type DecideGapInput,\n type FrameGapAction,\n type FrameGapDecision,\n type FrameGapReason,\n type GapFrameEvidence,\n type GapStreamIdentity,\n type KeyframeInterval,\n type ReclassificationEvidence,\n type RepairPriority,\n type SourceSymbolEvidence,\n type TrackKind,\n} from './block-policy.js'\n\n// Sink-side concealment: hold last good frame, exact audio gap sizing.\nexport {\n AudioGapConcealer,\n HoldLastTimeline,\n videoConcealModeForCodec,\n type AudioAccessUnit,\n type AudioGapConcealerStats,\n type AudioGapPlan,\n type HoldLastTimelineOptions,\n type HoldLastTimelineStats,\n type TimelineEmit,\n type TimelineSample,\n type VideoConcealMode,\n} from './conceal-timeline.js'\n\n// FEC Worker Setup (shared fec-setup helper)\nexport {\n setupFecWorkerForTrack,\n type FecWorkerAssetUrls,\n type FecWorkerSetupOptions,\n type FecWorkerSetupResult,\n} from './fec-worker-setup.js'\n\n// Media Router (shared MoQ \u2194 multicast source arbitration)\nexport {\n MediaRouter,\n TrackSourceConflictError,\n type MediaRouterOptions,\n type TrackSource,\n type SetTrackSourceOptions,\n type MigrationPolicy,\n type FrameMeta as RouterFrameMeta,\n type FrameKind,\n type SourceKind,\n type DeltaFallbackConfig,\n} from './media-router.js'\nexport {\n resolveDeltaFallback,\n type DeltaFallbackTrack,\n type ResolvedDeltaFallback,\n} from './delta-fallback-config.js'\n\n// Group-alignment primitive \u2014 shared with Go sender + Rust relay.\n// See align.ts docstring for cross-language contract. Authoritative form\n// is integer-ticks (groupIdForTicks); seconds-form is the legacy ramp.\nexport {\n groupIdForTicks,\n groupIdFor,\n secondsFromTicks,\n asSeconds,\n driftCheck,\n type Seconds,\n type DriftCheckResult,\n} from './align.js'\n\n// Audio Ring Buffer \u2014 DEPRECATED: canonical location is @blockcast/mmt-render/audio.\n// Kept here for backwards compat with consumers not yet migrated to mmt-render.\n// The mmt-render version includes warmup-delayed clock recovery + adaptive target fill.\nexport {\n AudioRingBuffer,\n type AudioRingBufferConfig,\n} from './audio-ring-buffer.js'\n\n// MMTP Decode Pipeline (MoQ + multicast unified decode path)\nexport {\n MmtpDecodePipeline,\n type PipelineFecClient,\n type PipelineConfig,\n type MmtpFeedStats,\n} from './mmtp-decode-pipeline.js'\n\n// Track Pipeline (per-track transport promotion + ABR)\nexport {\n TrackPipeline,\n type TrackTransport,\n type TrackTransportPreference,\n type TransportCapabilityReport,\n type TrackTransportResolution,\n type TrackSourceFactory,\n} from './track-pipeline.js'\n\n// Track Pipeline Setup (shared wiring helper for both players)\nexport {\n setupTrackPipeline,\n type TrackDescriptor,\n type SetupTrackPipelineOptions,\n type SetupTrackPipelineResult,\n} from './track-pipeline-setup.js'\n\n// Audio Init Data Parser (spec-compliant frame samples from initData)\nexport {\n parseAacFrameSamples,\n parseAacSampleRate,\n parseOpusFrameSamples,\n frameSamplesFromInit,\n} from './audio-init-parser.js'\n\n// Transport Pool (ref-counted subscription lifecycle, PIM)\nexport {\n TransportPool,\n type SubscriptionMode,\n type DirectSocketHealth,\n type Subscription,\n type SubscriptionStats,\n type AcquireOptions,\n type TransportPoolOptions,\n} from './transport-pool.js'\n\n// Track Session + Session Manager (per-track state machine, Patent Claim 9)\nexport {\n TrackSession,\n SessionManager,\n MAX_TAKEOVER_DEADLINE_MS,\n JOIN_DEFER_WARN_MS,\n computeFecDeliveryWindowMs,\n computeFecDeliveryWindowMediaUnits,\n computeFecLossWindowMs,\n type FecDeliveryWindowConfig,\n type TrackState,\n type TrackSessionConfig,\n type SessionManagerCallbacks,\n type MmtpTrackEvent,\n type MmtpSessionCallbacks,\n} from './track-session.js'\n\n// FEC starvation detector (post-cutover repair-only/no-progress detection,\n// drives TrackSession lossDetected/lossRecovered \u2014 BLO-9413/D4)\nexport {\n FecStarvationDetector,\n type FecStarvationSnapshot,\n type FecStarvationDetectorConfig,\n} from './fec-starvation-detector.js'\n\n// CMCD Producer (x-bc-* vendor key telemetry, BLO-1044)\nexport {\n CmcdProducer,\n type CmcdParams,\n type CmcdProducerOptions,\n type SnapshotData,\n type TransportSnapshot,\n type TransportTransitionEvent,\n} from './cmcd-producer.js'\n\nexport {\n\tcatalogFecInterleaveMs,\n\tresolveCatalogTrackFec,\n\ttype CatalogTrackRef,\n\ttype FecInterleaveCatalog,\n\ttype GroupDurationCatalog,\n\ttype KeyframeCadenceCatalog,\n\ttype TrackFecParams,\n\ttype TrackFecUnavailable,\n\tcatalogFecUnavailable,\n\tcatalogFecAvailable,\n\tcatalogFecDeclaresUnconfigurableInstance,\n\tfecAlgorithmUnimplemented,\n\tlocateCatalogFecSource,\n\ttype CatalogFecRole,\n\ttype CatalogFecSource,\n\tcatalogGroupDurationMs,\n\tcatalogKeyframeCadenceMs,\n\tcatalogFecMediaUnitsPerSecond,\n\ttype GroupDurationRendition,\n\tresolveCatalogTrackGroupDurationMs,\n\tjoinedRepairSymbolCount,\n\tFEC_BLOCK_PROFILES,\n\tisFecBlockProfile,\n\tparseFecBlockProfile,\n\treadFecBlockProfile,\n\ttype FecBlockProfile,\n\tresolveRepairLayers,\n\tcatalogRepairTarget,\n\tassembleRepairLayers,\n\tassertRepairTrackReachable,\n\trepairReachability,\n\ttype AssembleRepairLayersOptions,\n\ttype RepairReachability,\n\tdependsTarget,\n\tdescribeRepairTrack,\n\trejectRepairFieldsOnMediaTrack,\n\trejectRepairTrackGeometry,\n\tREPAIR_TRACK_GEOMETRY_KEYS,\n\tREPAIR_TRACK_ONLY_KEYS,\n\tvalidateRepairTrackFields,\n\tRepairContractError,\n\tDEFAULT_REPAIR_PRIORITY,\n\tMAX_ENCODING_SYMBOL_ID,\n\tMAX_RAPTORQ_SOURCE_SYMBOLS,\n\tMAX_REPAIR_SYMBOLS,\n\tREPAIR_PRIORITY_MAX,\n\tREPAIR_PRIORITY_MIN,\n\ttype RepairContractCode,\n\ttype RepairContractFail,\n\ttype RepairLayerCatalog,\n\ttype RepairLayerParams,\n\ttype RepairLayersResolution,\n\ttype RepairOverlayParams,\n\ttype RepairRenditionCatalog,\n\ttype RepairSourceGeometry,\n\ttype RepairTrackDescriptor,\n} from \"./catalog-fec-params.js\";\n\n// Typed FEC state (active with counters, or inactive with a reason) shared by\n// every player, resolved from catalog, transport policy, bridge and\n// subscription state rather than from counters.\nexport {\n\tFEC_INACTIVE_REASONS,\n\tcatalogDeclaresFec,\n\tresolveFecState,\n\ttype FecActiveState,\n\ttype FecInactiveReason,\n\ttype FecInactiveState,\n\ttype FecState,\n\ttype FecStateEvidence,\n\ttype FecTransportPolicy,\n\ttype NoFecCounters,\n} from \"./fec-state.js\";\n\n// In-band AL-FEC for one MMTP asset over a MoQT subscription, for a player\n// that owns its own parser (the Shaka MSF MMTP packaging).\nexport {\n\tMmtpFecSession,\n\ttype MmtpFecSessionCatalogFec,\n\ttype MmtpFecSessionConfig,\n\ttype MmtpFecSessionDecoder,\n\ttype MmtpFecSessionDecoderConstructor,\n\ttype MmtpFecSessionMixedPathStats,\n\ttype MmtpFecSessionPath,\n\ttype MmtpFecSessionPathCounts,\n\ttype MmtpFecSessionStats,\n} from \"./mmtp-fec-session.js\";\n\nexport {\n\tcatalogAmtNetworkSource,\n\tcatalogAtsc3NetworkSource,\n\tDEFAULT_AMT_RELAY_PORT,\n\ttype AmtNetworkSource,\n\ttype Atsc3NetworkSource,\n\ttype CatalogNetworkSource,\n} from \"./catalog-network-source.js\";\n\n// D-28 shared repair-fetch shell (per-SBN on-demand MoQ FEC repair backfill)\nexport {\n wireRepairFetch,\n repairFetchSubscriberPriority,\n SOURCE_MEDIA_PRIORITY_MAX,\n type ResolveRepairTarget,\n type RepairTarget,\n type RepairFetchHost,\n type RepairFetchPriority,\n type RepairFetchRequest,\n type RepairFetchTransport,\n type RepairRangeFetchRequest,\n type RepairRangeFetchTransport,\n type RepairDeadlineBound,\n type RepairPriorityReason,\n type RepairSendMeasurement,\n type RepairSkipReason,\n type RepairStopReason,\n type RepairSubscribeCallback,\n type WireRepairFetchOptions,\n} from './repair-fetch.js'\n// MoQ repair group ids for iso-ssbg1-v1 blocks (BLO-35597): the 62-bit\n// wrap-epoch-extended SS_Start and the repair FETCH range for a lost SS_ID.\nexport {\n extSsStart,\n extendSsId,\n repairFetchRange,\n type RepairFetchRange,\n} from '@blockcast/mmt-fec'\nexport { DeliveryGapEstimator } from './delivery-gap.js'\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @mmt/container - MMTP/LOC Container Parsing\n *\n * Shared container parsing library for MMT over MoQ and SSM.\n *\n * @packageDocumentation\n */\n\nexport type { AuthoredTiming } from './authored-timing.js'\n\n// MFU Reassembler\nexport {\n type MFUFragment,\n type ReassembledMFU,\n type ReassemblerStats,\n type MFUReassemblerOptions,\n type MfuReassemblerBackend,\n type MmtpSourcePath,\n MFUReassembler,\n isMfuReassemblyError,\n MfuReassemblyError,\n type MfuReassemblyErrorCode,\n createFragment,\n processMMTPWithReassembly,\n} from './mfu-reassembler.js'\n\n// Sample combiner: combines subsample data units (moqcast #37) of one\n// timed sample, each already reassembled by MFUReassembler, back into one\n// contiguous sample.\nexport {\n type CombinedSample,\n type SampleCombinerStats,\n SampleCombiner,\n SampleCombineError,\n type SampleCombineErrorCode,\n} from './sample-combiner.js'\n\n// fMP4 data-unit completion policy (BLO-13291)\nexport { isCompleteFmp4DataUnit } from './fmp4-completion.js'\n\n\n// The bc-provenance v2 surface (@blockcast/mmt-manifest-verify) is intentionally\n// NOT re-exported from the eager index barrel: it imports @noble/curves and\n// @noble/hashes, bare specifiers the moq-lib / shred / moqtail players (which\n// load the barrel as raw ESM via an import map) cannot resolve. Import it from\n// that package directly. The router's provenance hooks take it by type only.\n\n// H.264/AVC + H.265/HEVC Codec Utilities\nexport {\n type AvcCInfo,\n type AacAscInfo,\n type SpsPps,\n type FallbackAvcCOptions,\n type HevcParameterSets,\n type H264KeyframeDetectionOptions,\n type H264AvccSample,\n type H264SampleFormat,\n type H264NalUnitFormat,\n type H264NalUnitSample,\n extractAvcCFromInitSegment,\n extractAacAscFromInitSegment,\n normalizeMmtpInitSegment,\n generateFallbackAvcC,\n extractSpsPpsFromAvcC,\n avccToAnnexB,\n extractCodecDescriptionFromAnnexB,\n codecStringFromAvcC,\n isAnnexB,\n isCompleteAvccSample,\n findAnnexBStartCode,\n splitAnnexBNalUnits,\n annexBToAvcc,\n normalizeH264SampleToAvcc,\n splitH264SampleNalUnits,\n classifyH264Keyframe,\n detectH264Keyframe,\n mmtpTimestampToMicros,\n isFmp4InitSegment,\n wrapAdtsFrame,\n // HEVC (BLO-7764): build the hvcC description WebCodecs requires for length-prefixed H.265.\n isHevcCodec,\n removeEmulationPrevention,\n splitAvccNalUnits,\n extractHevcParameterSets,\n generateHvcCFromParameterSets,\n extractHevcCodecDescription,\n hevcVclOnly,\n // HEVC receive path (BLO-35597): catalog-selected family, IRAP keyframes,\n // SPS-derived codec string, MSE sample normalization.\n type VideoSampleEntry,\n type VideoCodecFamily,\n type HevcSpsInfo,\n type HevcCmafSample,\n videoSampleEntryFromCodecString,\n videoCodecFamily,\n HEVC_NAL_UNIT_TYPE,\n HEVC_NAL_HEADER_LENGTH,\n hevcNalUnitType,\n isHevcIrapNalUnitType,\n parseHevcSps,\n hevcCodecStringFromSps,\n classifyHevcKeyframe,\n detectHevcKeyframe,\n normalizeHevcSampleToLengthPrefixed,\n prepareHevcCmafSample,\n} from './codec-utils.js'\n\n// LOC FEC Extensions (draft-ramadan-moq-fec \u00A75.3, object extension 0x11)\nexport {\n LOCHeaderExtensionId,\n FEC_SS_ID_MAX,\n FEC_SOURCE_INFO_LEN,\n encodeFecSourceInfo,\n decodeFecSourceInfo,\n FecSourceInfo,\n AuthTag,\n} from './loc.js'\n\n// CARP Catalog Extensions (draft-law-ramadan-moq-carp-reliability \u00A73-4)\n// + Track Timing (draft-ramadan-moq-mmt-01 \u00A74.4.2)\nexport {\n type FecAlgorithm,\n type FecCatalogConfig,\n isFecCatalogConfig,\n isFecCatalogGeometry,\n type MulticastProtocol,\n type MulticastTrack,\n type MulticastTrackObject,\n type MulticastEndpoint,\n type AmtDiscovery,\n type MulticastCatalogConfig,\n type NetworkSource,\n isMulticastTrackObject,\n isMulticastEndpoint,\n isMulticastCatalogConfig,\n type TrackTimingConfig,\n isTrackTimingConfig,\n resolveGroupDurationTicks,\n resolveGroupDurationMs,\n validateSwitchingSetTiming,\n type CmsfCatalog,\n type CmsfCatalogErrorCode,\n CmsfCatalogValidationError,\n validateCmsfMmtpCatalog,\n type ArchiveConfig,\n archiveOrigin,\n} from './carp-catalog.js'\n\n// FEC catalog binding, draft-ramadan-moq-fec-catalog-00 array shape (BLO-50171).\nexport {\n validateFecCatalog,\n type FecCatalogCode,\n type FecCatalogInstance,\n type FecCatalogIssue,\n type FecCatalogOutcome,\n type FecCatalogReceiver,\n type FecCatalogReport,\n} from './fec-catalog.js'\n\n// Strict v2 multicast delivery catalog (DASH/HLS/MMTP routes), moved from\n// moqtail-private so players share one contract (BLO-47003).\nexport {\n normalizeDeliveryCatalog,\n type DeliveryPackaging,\n type DeliveryContentType,\n type DeliveryEndpoint,\n type DeliveryPolicy,\n type DeliveryObjectMapping,\n type DeliveryFec,\n type DeliveryRouteBase,\n type DashDeliveryRoute,\n type HlsDeliveryRoute,\n type MmtpDeliveryRoute,\n type DashDeliveryConfig,\n type HlsDeliveryConfig,\n type MmtpDeliveryConfig,\n type DeliveryMulticastBase,\n type DeliveryMulticastV2,\n type DeliveryCatalogV2,\n} from './delivery-catalog.js'\n\n// Multicast input contract \u2014 validator + builder for publisher-emitted\n// catalogs (draft-ramadan-moq-multicast-01 \u00A74.1, BLO-3323 A.1).\n// `multicastFromEnv` is the env-var helper used by FFmpeg and the\n// cast bridge (BLO-3337).\nexport {\n type MulticastInput,\n type MulticastEndpointInput,\n type MulticastInputErrorKind,\n MulticastInputError,\n multicastFromConfig,\n multicastFromEnv,\n} from './multicast-input.js'\n\n// Phase 14 catalog override hook (test harness injects\n// globalThis.__PHASE14_CATALOG_OVERRIDE; see 7point-validation.test.mjs)\nexport {\n type Phase14OverrideTrack,\n type Phase14CatalogOverride,\n getPhase14CatalogOverride,\n mergeOverrideIntoHangRenditions,\n mergeOverrideIntoCmsfTracks,\n} from './phase14-catalog-override.js'\n\n// Multicast Unwrap (container-aware MMTP dispatch)\nexport {\n type MulticastContainerContract,\n type MulticastContainerErrorCode,\n type FecPayloadId as MulticastFecPayloadId,\n type MulticastFrame,\n MulticastContainerContractError,\n validateMulticastContainerContract,\n unwrapMulticastPacket,\n} from './multicast-unwrap.js'\n\n// Timestamp Codec \u2014 container-format-agnostic timestamp encoding/decoding\nexport {\n type ContainerFormat,\n type LocHeader,\n encodeTimestamp,\n decodeTimestamp,\n getTimestampSize,\n decodeLocHeader,\n decodeLocTimestamp,\n encodeLocTimestamp,\n} from './timestamp-codec.js'\n\n// MMTP \u2192 CMAF conversion (draft-ramadan-moq-mmt \u00A75.3)\nexport {\n MmtpToCmaf,\n encodeDataSegment,\n encodeMultiSampleSegment,\n buildVideoInitSegment,\n buildHevcVideoInitSegment,\n buildAudioInitSegment,\n generateSilenceFrame,\n} from './mmtp-to-cmaf.js'\n\n// MMTP Signaling \u2014 packet type detection and classification\nexport {\n type PacketClass,\n getPacketType,\n isSignalingPacket,\n isSourcePacket,\n classifyPacket,\n} from './signaling.js'\n\n// FEC Block \u2192 CMAF Segment Assembler\nexport {\n CmafBlockAssembler,\n type CmafBlockSample,\n type CmafSampleOrderPolicy,\n type CmafSampleOrderStats,\n type CmafEmitStats,\n type CmafAudioConcealStats,\n type BlockAssemblerConfig,\n} from './cmaf-block-assembler.js'\n\n// MoQ Group \u2192 CMAF Segment Batcher\nexport {\n CmafGroupBatcher,\n type CmafGroupBatcherConfig,\n} from './cmaf-group-batcher.js'\n\n// FEC Manager (codec-agnostic FEC decode service)\nexport {\n FECManager,\n type FECManagerConfig,\n type FecDecoderUnavailableEvent,\n type FecDecoderUnavailableReason,\n type FecFallbackDecoder,\n type WasmFecDecoder,\n type FecStats,\n type MulticastSymbolDelivery,\n type UndelimitedIsoLoss,\n type FecBlockResolution,\n type RepairVia,\n type FecRepairLayer,\n type FecFailClosedReason,\n type FecFailClosedEvent,\n} from './fec-manager.js'\n\n// MMTP Router (packet processing + frame routing)\nexport {\n MmtpRouter,\n KEYFRAME_LOST_TIMEOUT_SLACK,\n type FrameCallback,\n type FECManagerLike,\n type MmtpIngressContext,\n type MmtpStreamIdentity,\n type RoutedPacketMeta,\n type StagedStreamSwitch,\n type StreamSwitchCommit,\n type StreamSwitchCommitReason,\n type StreamSwitchOptions,\n type StreamSwitchPosition,\n type TrackPacketCallback,\n} from './mmtp-router.js'\n\n// MmtpContainerParser (unified, transport-agnostic)\nexport {\n MmtpContainerParser,\n type MmtpParserConfig,\n type MmtpParserRecord,\n type MmtpParserFeedStats,\n type MmtpFeedDropReason,\n type MmtpFeedOutcomeKey,\n type TrackInfo,\n type MmtpReorderStats,\n type MmtpReorderFrameDiagnostics,\n type MmtpReorderStreamDiagnostics,\n type FrameMeta as ParserFrameMeta,\n type PacketInfo,\n type ParsedMmtpPacket,\n} from './mmtp-container-parser.js'\n\nexport {\n datagramMfuReassembly,\n reliableMoqMfuReassembly,\n mmtpFrameReorderWindowFrames,\n mfuReassemblyTimeoutMs,\n type MfuReassemblyPolicy,\n type MmtpTrackType,\n type ReliableMoqReassemblyOptions,\n} from './mfu-reassembly-policy.js'\n\nexport {\n WasmMfuReassembler,\n resolveGlobalMmtWasmBindings,\n type MmtWasmBindings,\n type WasmMfuReassemblerOptions,\n} from './wasm-mfu-reassembler.js'\n\nexport {\n createWasmMmtpContainerParser,\n type WasmMmtpParserConfig,\n} from './wasm-mmtp-container-parser.js'\n\n// Multicast Transport (SSM join/socket/watchdog)\nexport {\n MulticastTransport,\n type MulticastFailbackReason,\n type MulticastJoinDeclineReason,\n type MulticastJoinOutcome,\n type MulticastJoinProviderError,\n type MulticastJoinStats,\n type MulticastTransportConfig,\n type ResolvedMulticastTransport,\n} from './multicast-transport.js'\n\n// Multicast Manager (backwards-compat facade composing all three)\nexport {\n MulticastManager,\n forwardRepairLifecycleEvents,\n isRepairLifecycleEvent,\n REPAIR_LIFECYCLE_EVENT_TYPE,\n REPAIR_LIFECYCLE_LOG_PREFIX,\n type MulticastEndpointConfig,\n type MultiTrackCatalog,\n type MultiTrackCatalogTrack,\n type WasmFecDecoderFactory,\n type RepairBlockIdentity,\n type RepairLifecycleApplicationEvent,\n type RepairLifecycleEventOptions,\n type RepairLifecycleEventFactory,\n type RepairLifecycleEventTarget,\n type RepairLifecycleSource,\n type RepairLifecycleEvent,\n type RepairLifecycleObserver,\n type RepairStreamIdentity,\n type BlockPolicyStats,\n type RenditionSwitch,\n type RenditionSwitchCancel,\n type RenditionSwitchRequest,\n type RenditionSwitchState,\n} from './multicast-manager.js'\n\n// Keyframe-protected FEC repair policy: block classification, repair\n// priority, and the stall/conceal decision every player applies.\nexport {\n BlockClassifier,\n decideGap,\n deriveBlockClassifierGeometry,\n keyframeIntervalMediaTicks,\n repairPriorityForClass,\n type BlockClass,\n type BlockClassifierGeometry,\n type BlockClassifierGeometryInput,\n type ClassifierChange,\n type ClassifierMode,\n type ClassifierReason,\n type DecideGapInput,\n type FrameGapAction,\n type FrameGapDecision,\n type FrameGapReason,\n type GapFrameEvidence,\n type GapStreamIdentity,\n type KeyframeInterval,\n type ReclassificationEvidence,\n type RepairPriority,\n type SourceSymbolEvidence,\n type TrackKind,\n} from './block-policy.js'\n\n// Sink-side concealment: hold last good frame, exact audio gap sizing.\nexport {\n AudioGapConcealer,\n HoldLastTimeline,\n videoConcealModeForCodec,\n type AudioAccessUnit,\n type AudioGapConcealerStats,\n type AudioGapPlan,\n type HoldLastTimelineOptions,\n type HoldLastTimelineStats,\n type TimelineEmit,\n type TimelineSample,\n type VideoConcealMode,\n} from './conceal-timeline.js'\n\n// FEC Worker Setup (shared fec-setup helper)\nexport {\n setupFecWorkerForTrack,\n type FecWorkerAssetUrls,\n type FecWorkerSetupOptions,\n type FecWorkerSetupResult,\n} from './fec-worker-setup.js'\n\n// Media Router (shared MoQ \u2194 multicast source arbitration)\nexport {\n MediaRouter,\n TrackSourceConflictError,\n type MediaRouterOptions,\n type TrackSource,\n type SetTrackSourceOptions,\n type MigrationPolicy,\n type FrameMeta as RouterFrameMeta,\n type FrameKind,\n type SourceKind,\n type DeltaFallbackConfig,\n} from './media-router.js'\nexport {\n resolveDeltaFallback,\n type DeltaFallbackTrack,\n type ResolvedDeltaFallback,\n} from './delta-fallback-config.js'\n\n// Group-alignment primitive \u2014 shared with Go sender + Rust relay.\n// See align.ts docstring for cross-language contract. Authoritative form\n// is integer-ticks (groupIdForTicks); seconds-form is the legacy ramp.\nexport {\n groupIdForTicks,\n groupIdFor,\n secondsFromTicks,\n asSeconds,\n driftCheck,\n type Seconds,\n type DriftCheckResult,\n} from './align.js'\n\n// Audio Ring Buffer \u2014 DEPRECATED: canonical location is @blockcast/mmt-render/audio.\n// Kept here for backwards compat with consumers not yet migrated to mmt-render.\n// The mmt-render version includes warmup-delayed clock recovery + adaptive target fill.\nexport {\n AudioRingBuffer,\n type AudioRingBufferConfig,\n} from './audio-ring-buffer.js'\n\n// MMTP Decode Pipeline (MoQ + multicast unified decode path)\nexport {\n MmtpDecodePipeline,\n type PipelineFecClient,\n type PipelineConfig,\n type MmtpFeedStats,\n} from './mmtp-decode-pipeline.js'\n\n// Track Pipeline (per-track transport promotion + ABR)\nexport {\n TrackPipeline,\n type TrackTransport,\n type TrackTransportPreference,\n type TransportCapabilityReport,\n type TrackTransportResolution,\n type TrackSourceFactory,\n} from './track-pipeline.js'\n\n// Track Pipeline Setup (shared wiring helper for both players)\nexport {\n setupTrackPipeline,\n type TrackDescriptor,\n type SetupTrackPipelineOptions,\n type SetupTrackPipelineResult,\n} from './track-pipeline-setup.js'\n\n// Audio Init Data Parser (spec-compliant frame samples from initData)\nexport {\n parseAacFrameSamples,\n parseAacSampleRate,\n parseOpusFrameSamples,\n frameSamplesFromInit,\n} from './audio-init-parser.js'\n\n// Transport Pool (ref-counted subscription lifecycle, PIM)\nexport {\n TransportPool,\n type SubscriptionMode,\n type DirectSocketHealth,\n type Subscription,\n type SubscriptionStats,\n type AcquireOptions,\n type TransportPoolOptions,\n} from './transport-pool.js'\n\n// Track Session + Session Manager (per-track state machine, Patent Claim 9)\nexport {\n TrackSession,\n SessionManager,\n MAX_TAKEOVER_DEADLINE_MS,\n JOIN_DEFER_WARN_MS,\n computeFecDeliveryWindowMs,\n computeFecDeliveryWindowMediaUnits,\n computeFecLossWindowMs,\n type FecDeliveryWindowConfig,\n type TrackState,\n type TrackSessionConfig,\n type SessionManagerCallbacks,\n type MmtpTrackEvent,\n type MmtpSessionCallbacks,\n} from './track-session.js'\n\n// FEC starvation detector (post-cutover repair-only/no-progress detection,\n// drives TrackSession lossDetected/lossRecovered \u2014 BLO-9413/D4)\nexport {\n FecStarvationDetector,\n type FecStarvationSnapshot,\n type FecStarvationDetectorConfig,\n} from './fec-starvation-detector.js'\n\n// CMCD Producer (x-bc-* vendor key telemetry, BLO-1044)\nexport {\n CmcdProducer,\n type CmcdParams,\n type CmcdProducerOptions,\n type SnapshotData,\n type TransportSnapshot,\n type TransportTransitionEvent,\n} from './cmcd-producer.js'\n\nexport {\n\tcatalogFecInterleaveMs,\n\tresolveCatalogTrackFec,\n\ttype CatalogTrackRef,\n\ttype FecInterleaveCatalog,\n\ttype GroupDurationCatalog,\n\ttype KeyframeCadenceCatalog,\n\ttype TrackFecParams,\n\ttype TrackFecUnavailable,\n\tcatalogFecUnavailable,\n\tcatalogFecAvailable,\n\tcatalogFecDeclaresUnconfigurableInstance,\n\tfecAlgorithmUnimplemented,\n\tlocateCatalogFecSource,\n\ttype CatalogFecRole,\n\ttype CatalogFecSource,\n\tcatalogGroupDurationMs,\n\tcatalogKeyframeCadenceMs,\n\tcatalogFecMediaUnitsPerSecond,\n\ttype GroupDurationRendition,\n\tresolveCatalogTrackGroupDurationMs,\n\tjoinedRepairSymbolCount,\n\tFEC_BLOCK_PROFILES,\n\tisFecBlockProfile,\n\tparseFecBlockProfile,\n\treadFecBlockProfile,\n\ttype FecBlockProfile,\n\tresolveRepairLayers,\n\tcatalogRepairTarget,\n\tassembleRepairLayers,\n\tassertRepairTrackReachable,\n\trepairReachability,\n\ttype AssembleRepairLayersOptions,\n\ttype RepairReachability,\n\tdependsTarget,\n\tdescribeRepairTrack,\n\trejectRepairFieldsOnMediaTrack,\n\trejectRepairTrackGeometry,\n\tREPAIR_TRACK_GEOMETRY_KEYS,\n\tREPAIR_TRACK_ONLY_KEYS,\n\tvalidateRepairTrackFields,\n\tRepairContractError,\n\tDEFAULT_REPAIR_PRIORITY,\n\tMAX_ENCODING_SYMBOL_ID,\n\tMAX_RAPTORQ_SOURCE_SYMBOLS,\n\tMAX_REPAIR_SYMBOLS,\n\tREPAIR_PRIORITY_MAX,\n\tREPAIR_PRIORITY_MIN,\n\ttype RepairContractCode,\n\ttype RepairContractFail,\n\ttype RepairLayerCatalog,\n\ttype RepairLayerParams,\n\ttype RepairLayersResolution,\n\ttype RepairOverlayParams,\n\ttype RepairRenditionCatalog,\n\ttype RepairSourceGeometry,\n\ttype RepairTrackDescriptor,\n} from \"./catalog-fec-params.js\";\n\n// Typed FEC state (active with counters, or inactive with a reason) shared by\n// every player, resolved from catalog, transport policy, bridge and\n// subscription state rather than from counters.\nexport {\n\tFEC_INACTIVE_REASONS,\n\tcatalogDeclaresFec,\n\tresolveFecState,\n\ttype FecActiveState,\n\ttype FecInactiveReason,\n\ttype FecInactiveState,\n\ttype FecState,\n\ttype FecStateEvidence,\n\ttype FecTransportPolicy,\n\ttype NoFecCounters,\n} from \"./fec-state.js\";\n\n// In-band AL-FEC for one MMTP asset over a MoQT subscription, for a player\n// that owns its own parser (the Shaka MSF MMTP packaging).\nexport {\n\tMmtpFecSession,\n\ttype MmtpFecSessionCatalogFec,\n\ttype MmtpFecSessionConfig,\n\ttype MmtpFecSessionDecoder,\n\ttype MmtpFecSessionDecoderConstructor,\n\ttype MmtpFecSessionMixedPathStats,\n\ttype MmtpFecSessionPath,\n\ttype MmtpFecSessionPathCounts,\n\ttype MmtpFecSessionStats,\n} from \"./mmtp-fec-session.js\";\n\nexport {\n\tcatalogAmtNetworkSource,\n\tcatalogAtsc3NetworkSource,\n\tDEFAULT_AMT_RELAY_PORT,\n\ttype AmtNetworkSource,\n\ttype Atsc3NetworkSource,\n\ttype CatalogNetworkSource,\n} from \"./catalog-network-source.js\";\n\n// D-28 shared repair-fetch shell (per-SBN on-demand MoQ FEC repair backfill)\nexport {\n wireRepairFetch,\n repairFetchSubscriberPriority,\n SOURCE_MEDIA_PRIORITY_MAX,\n type ResolveRepairTarget,\n type RepairTarget,\n type RepairFetchHost,\n type RepairFetchPriority,\n type RepairFetchRequest,\n type RepairFetchTransport,\n type RepairRangeFetchRequest,\n type RepairRangeFetchTransport,\n type RepairDeadlineBound,\n type RepairPriorityReason,\n type RepairSendMeasurement,\n type RepairSkipReason,\n type RepairStopReason,\n type RepairSubscribeCallback,\n type WireRepairFetchOptions,\n} from './repair-fetch.js'\n// MoQ repair group ids for iso-ssbg1-v1 blocks (BLO-35597): the 62-bit\n// wrap-epoch-extended SS_Start and the repair FETCH range for a lost SS_ID.\nexport {\n extSsStart,\n extendSsId,\n repairFetchRange,\n type RepairFetchRange,\n} from '@blockcast/mmt-fec'\nexport { DeliveryGapEstimator } from './delivery-gap.js'\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }