@moqtap/codec 0.8.1 → 0.9.0
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 +49 -0
- package/README.md +16 -4
- package/dist/chunk-BMJMY6FX.cjs +868 -0
- package/dist/chunk-MAXEHYVB.cjs +2362 -0
- package/dist/{chunk-3YAR3I3S.js → chunk-Q7NSUXXB.js} +3 -1
- package/dist/{chunk-VWXUT5R2.cjs → chunk-TVSFDQYE.cjs} +3 -1
- package/dist/chunk-WX5PU7HF.js +868 -0
- package/dist/chunk-YJGOD3Y4.js +2362 -0
- package/dist/{codec-BLYAy2OP.d.ts → codec--CVeqGQv.d.ts} +1 -1
- package/dist/{codec-DujHf55Z.d.ts → codec-BJ7BHuiZ.d.ts} +1 -1
- package/dist/{codec-D47r_-Rl.d.ts → codec-BKsVu3Fr.d.ts} +1 -1
- package/dist/{codec-BNS3gS77.d.ts → codec-BMwgZIgG.d.ts} +1 -1
- package/dist/{codec-CI0BjmHc.d.ts → codec-BNy5syCU.d.ts} +1 -1
- package/dist/{codec-v6Vloc7H.d.ts → codec-BQa6Qsav.d.ts} +1 -1
- package/dist/codec-Bym-K2q2.d.cts +49 -0
- package/dist/{codec-D2JbI2tp.d.ts → codec-C006F75E.d.ts} +1 -1
- package/dist/codec-C5evFHL-.d.ts +49 -0
- package/dist/{codec-DQWQSam3.d.cts → codec-C6Mx4bwz.d.cts} +1 -1
- package/dist/{codec-DL0njGkL.d.ts → codec-CA6nbbEk.d.ts} +1 -1
- package/dist/{codec-D89DWXbv.d.cts → codec-CSBFdPgP.d.cts} +1 -1
- package/dist/{codec-DvcJgYKq.d.cts → codec-CXCjya_G.d.cts} +1 -1
- package/dist/{codec-hvkJfCF5.d.cts → codec-C_xxsbKy.d.cts} +1 -1
- package/dist/{codec-BOyrk_C9.d.cts → codec-Cfo_z5ET.d.cts} +1 -1
- package/dist/{codec-xeuGZY77.d.cts → codec-CgZdadPt.d.cts} +2 -2
- package/dist/{codec-WwwUipaU.d.ts → codec-Cl73EfRW.d.ts} +1 -1
- package/dist/{codec-BOtv3R5j.d.cts → codec-CtvFK4aV.d.cts} +1 -1
- package/dist/{codec-DAePx2NL.d.ts → codec-CviAa4lp.d.ts} +2 -2
- package/dist/{codec-DJmV04i0.d.ts → codec-D4RvFQmu.d.ts} +1 -1
- package/dist/{codec-cou9XBMF.d.cts → codec-DAyiF5sq.d.cts} +1 -1
- package/dist/{codec-CyApDKwf.d.cts → codec-DJmqoIsp.d.cts} +1 -1
- package/dist/{codec-NMsTK0GX.d.cts → codec-DchsPfr3.d.cts} +1 -1
- package/dist/{codec-DplRgIKq.d.ts → codec-Dl_QIXMz.d.ts} +1 -1
- package/dist/{codec-N3g1lxQQ.d.cts → codec-DzLvG8Wb.d.cts} +1 -1
- package/dist/{codec-D95gT98n.d.cts → codec-DzkdW4kO.d.cts} +1 -1
- package/dist/{codec-CWj5iTxA.d.ts → codec-O-1Js7h4.d.ts} +1 -1
- package/dist/{codec-BqqoYdh_.d.cts → codec-vddqy0KY.d.cts} +1 -1
- package/dist/draft07-session.d.cts +3 -3
- package/dist/draft07-session.d.ts +3 -3
- package/dist/draft07.d.cts +3 -3
- package/dist/draft07.d.ts +3 -3
- package/dist/draft08-session.d.cts +3 -3
- package/dist/draft08-session.d.ts +3 -3
- package/dist/draft08.d.cts +4 -4
- package/dist/draft08.d.ts +4 -4
- package/dist/draft09-session.d.cts +3 -3
- package/dist/draft09-session.d.ts +3 -3
- package/dist/draft09.d.cts +4 -4
- package/dist/draft09.d.ts +4 -4
- package/dist/draft10-session.d.cts +3 -3
- package/dist/draft10-session.d.ts +3 -3
- package/dist/draft10.d.cts +4 -4
- package/dist/draft10.d.ts +4 -4
- package/dist/draft11-session.d.cts +3 -3
- package/dist/draft11-session.d.ts +3 -3
- package/dist/draft11.d.cts +4 -4
- package/dist/draft11.d.ts +4 -4
- package/dist/draft12-session.d.cts +3 -3
- package/dist/draft12-session.d.ts +3 -3
- package/dist/draft12.d.cts +4 -4
- package/dist/draft12.d.ts +4 -4
- package/dist/draft13-session.d.cts +3 -3
- package/dist/draft13-session.d.ts +3 -3
- package/dist/draft13.d.cts +4 -4
- package/dist/draft13.d.ts +4 -4
- package/dist/draft14-session.d.cts +3 -3
- package/dist/draft14-session.d.ts +3 -3
- package/dist/draft14.d.cts +4 -4
- package/dist/draft14.d.ts +4 -4
- package/dist/draft15-session.d.cts +3 -3
- package/dist/draft15-session.d.ts +3 -3
- package/dist/draft15.d.cts +4 -4
- package/dist/draft15.d.ts +4 -4
- package/dist/draft16-session.d.cts +3 -3
- package/dist/draft16-session.d.ts +3 -3
- package/dist/draft16.d.cts +4 -4
- package/dist/draft16.d.ts +4 -4
- package/dist/draft17-session.d.cts +3 -3
- package/dist/draft17-session.d.ts +3 -3
- package/dist/draft17.d.cts +3 -3
- package/dist/draft17.d.ts +3 -3
- package/dist/draft18-session.d.cts +3 -3
- package/dist/draft18-session.d.ts +3 -3
- package/dist/draft18.d.cts +3 -3
- package/dist/draft18.d.ts +3 -3
- package/dist/draft19-session.d.cts +3 -3
- package/dist/draft19-session.d.ts +3 -3
- package/dist/draft19.cjs +2 -2
- package/dist/draft19.d.cts +3 -3
- package/dist/draft19.d.ts +3 -3
- package/dist/draft19.js +1 -1
- package/dist/draft20-session.cjs +8 -0
- package/dist/draft20-session.d.cts +195 -0
- package/dist/draft20-session.d.ts +195 -0
- package/dist/draft20-session.js +8 -0
- package/dist/draft20.cjs +217 -0
- package/dist/draft20.d.cts +175 -0
- package/dist/draft20.d.ts +175 -0
- package/dist/draft20.js +217 -0
- package/dist/index.cjs +9 -3
- package/dist/index.d.cts +32 -17
- package/dist/index.d.ts +32 -17
- package/dist/index.js +8 -2
- package/dist/{session-types-KsqyVp6y.d.cts → session-types-B9idsih-.d.cts} +13 -1
- package/dist/{session-types-C0l_-Ups.d.ts → session-types-Dn7b3RZM.d.ts} +13 -1
- package/dist/session.cjs +5 -1
- package/dist/session.d.cts +5 -3
- package/dist/session.d.ts +5 -3
- package/dist/session.js +5 -1
- package/dist/types-CWCQwuvy.d.cts +359 -0
- package/dist/types-CWCQwuvy.d.ts +359 -0
- package/dist/{types-CdCSIfvI.d.cts → types-DG5_iKuv.d.cts} +1 -1
- package/dist/{types-CdCSIfvI.d.ts → types-DG5_iKuv.d.ts} +1 -1
- package/package.json +16 -3
- package/src/core/session-types.ts +7 -0
- package/src/core/types.ts +1 -0
- package/src/drafts/draft19/codec.ts +4 -2
- package/src/drafts/draft20/codec.ts +1737 -0
- package/src/drafts/draft20/data-streams.ts +1291 -0
- package/src/drafts/draft20/error-codes.ts +135 -0
- package/src/drafts/draft20/index.ts +165 -0
- package/src/drafts/draft20/messages.ts +68 -0
- package/src/drafts/draft20/rules.ts +107 -0
- package/src/drafts/draft20/session-fsm.ts +1063 -0
- package/src/drafts/draft20/session.ts +21 -0
- package/src/drafts/draft20/types.ts +455 -0
- package/src/index.ts +20 -2
- package/src/session.ts +4 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@moqtap/codec` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
This file starts at 0.9.0. Earlier releases are in the git history.
|
|
9
|
+
|
|
10
|
+
## [0.9.0] - 2026-09-03
|
|
11
|
+
|
|
12
|
+
Draft-20 support, and a fix to draft-19 that changes which state machine a
|
|
13
|
+
draft-19 session runs.
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **Draft-20**: codec, message and data-stream tables, wire rules, error codes
|
|
18
|
+
and session FSM, exported as `@moqtap/codec/draft20` and
|
|
19
|
+
`@moqtap/codec/draft20/session`. `createCodec({ draft: '20' })` and
|
|
20
|
+
`createDraft20Codec()` both reach it.
|
|
21
|
+
- `PUBLISH_STATE_NOTIFY` (`0x22`), the one control message draft-20 adds. It is
|
|
22
|
+
unilateral and not subject to `MAX_REQUEST_UPDATES`.
|
|
23
|
+
- Draft-20's rewritten `FETCH`. The message keeps codepoint `0x16` but drops the
|
|
24
|
+
Fetch Type discriminator, carries Track Namespace and Track Name inline, and
|
|
25
|
+
moves its range into a `LOCATION_FILTER` parameter. Nothing on the wire
|
|
26
|
+
distinguishes it from a draft-19 `FETCH` at the type byte, so a session
|
|
27
|
+
decoded under the wrong draft will silently misparse it — pick the draft from
|
|
28
|
+
the negotiated `moqt-NN` protocol string, not from message content.
|
|
29
|
+
- `INCLUDE_PROPERTIES` (`0x35`), a uint8 boolean defaulting to `1`.
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **`createDraft19Codec()` reported `draft: '18'`.** Since `createSessionState()`
|
|
34
|
+
keys off `codec.draft`, every draft-19 session was validated by the draft-18
|
|
35
|
+
FSM. Draft-19 sessions now run the draft-19 FSM, which enforces rules the
|
|
36
|
+
draft-18 one does not — a session that passed validation on 0.8.1 may now be
|
|
37
|
+
rejected, correctly.
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- Draft-20 ranges are **inclusive**. An end location names the last object, not
|
|
42
|
+
one past it; do not carry a draft-19 `+ 1` forward.
|
|
43
|
+
- Retired error codes decode rather than being refused. Draft-20 Section 14
|
|
44
|
+
requires an unknown error code in any error context to be treated as
|
|
45
|
+
`INTERNAL_ERROR`, and forbids closing the session over one in `REQUEST_ERROR`
|
|
46
|
+
or `PUBLISH_DONE`. The `RETIRED_*` sets remain exported as advisory
|
|
47
|
+
diagnostics — useful for "this peer looks like draft-19" — but are no longer
|
|
48
|
+
decode gates.
|
|
49
|
+
- `@moqtap/test-vectors` dependency raised to `^0.13.0` for the draft-20 corpus.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
MoQT (Media over QUIC Transport) wire-format codec and session state machine for JavaScript/TypeScript.
|
|
4
4
|
|
|
5
|
-
- Multi-draft support (drafts 07 through
|
|
5
|
+
- Multi-draft support (drafts 07 through 20)
|
|
6
6
|
- Stateless encode/decode of all MoQT control messages and data streams
|
|
7
7
|
- Protocol session state machine with FSM-based validation per draft
|
|
8
8
|
- Zero runtime dependencies
|
|
@@ -43,10 +43,11 @@ Or use the factory if your application supports multiple drafts:
|
|
|
43
43
|
```typescript
|
|
44
44
|
import { createCodec, DRAFT_VERSIONS } from '@moqtap/codec'
|
|
45
45
|
|
|
46
|
-
const codec = createCodec({ draft: '
|
|
46
|
+
const codec = createCodec({ draft: '20' }) // '07' through '20'
|
|
47
47
|
|
|
48
|
-
// DRAFT_VERSIONS provides
|
|
49
|
-
// DRAFT_VERSIONS['07'] — 0xff000007n
|
|
48
|
+
// DRAFT_VERSIONS provides version identifiers under short aliases:
|
|
49
|
+
// DRAFT_VERSIONS['07'] — 0xff000007n, a real draft-07 wire value
|
|
50
|
+
// DRAFT_VERSIONS['20'] — 0xff000014n, derived; see the note below
|
|
50
51
|
```
|
|
51
52
|
|
|
52
53
|
## Subpath Exports
|
|
@@ -69,10 +70,21 @@ Each draft is available as a subpath import with its own codec and session state
|
|
|
69
70
|
| `@moqtap/codec/draft17` | Draft-17 codec |
|
|
70
71
|
| `@moqtap/codec/draft18` | Draft-18 codec |
|
|
71
72
|
| `@moqtap/codec/draft19` | Draft-19 codec |
|
|
73
|
+
| `@moqtap/codec/draft20` | Draft-20 codec |
|
|
72
74
|
| `@moqtap/codec/draft{N}/session` | Session state machine for draft N |
|
|
73
75
|
|
|
74
76
|
> **Note:** A default (versionless) codec will be available once the MoQT specification reaches RFC status. Until then, always specify a draft version.
|
|
75
77
|
|
|
78
|
+
`DRAFT_VERSIONS` is a table of numeric keys, and only the entries up to `'14'` are values a peer
|
|
79
|
+
ever puts on the wire. From draft-15 the version is negotiated by ALPN (raw QUIC) or
|
|
80
|
+
`WT-Available-Protocols` (WebTransport) as the string `moqt-NN`, and no version number is sent at
|
|
81
|
+
all — so `DRAFT_VERSIONS['20']` is a derived identifier, not something observed. Each draft module
|
|
82
|
+
from 15 on exports the real one:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { PROTOCOL_STRING } from '@moqtap/codec/draft20' // 'moqt-20'
|
|
86
|
+
```
|
|
87
|
+
|
|
76
88
|
## Draft-Specific Imports
|
|
77
89
|
|
|
78
90
|
For applications targeting a single draft version:
|