@moqtap/codec
v0.5.0
Published
MoQT wire-format codec and session state machine — multi-draft, zero dependencies
Downloads
316
Maintainers
Readme
@moqtap/codec
MoQT (Media over QUIC Transport) wire-format codec and session state machine for JavaScript/TypeScript.
- Multi-draft support (drafts 07 through 17)
- Stateless encode/decode of all MoQT control messages and data streams
- Protocol session state machine with FSM-based validation per draft
- Zero runtime dependencies
- Works in Node.js, Bun, and browsers
- Full TypeScript types with discriminated unions
Install
npm install @moqtap/codecQuick Start
MoQT is pre-RFC, so a draft version must always be specified. Use draft-scoped imports for the best experience:
import { createDraft07Codec, DRAFT_VERSION } from '@moqtap/codec/draft07'
const codec = createDraft07Codec()
// Decode a message from bytes
const result = codec.decodeMessage(bytes)
if (result.ok) {
console.log(result.value.type) // e.g. 'subscribe'
}
// Encode a message to bytes
const encoded = codec.encodeMessage({
type: 'client_setup',
supportedVersions: [DRAFT_VERSION],
parameters: new Map(),
})Or use the factory if your application supports multiple drafts:
import { createCodec, DRAFT_VERSIONS } from '@moqtap/codec'
const codec = createCodec({ draft: '17' }) // '07' through '17'
// DRAFT_VERSIONS provides wire version numbers under short aliases:
// DRAFT_VERSIONS['07'] — 0xff000007nSubpath Exports
Each draft is available as a subpath import with its own codec and session state machine:
| Import path | Description |
| -------------------------------- | ------------------------------------------------- |
| @moqtap/codec | Factory + shared types (createCodec({ draft })) |
| @moqtap/codec/draft07 | Draft-07 codec |
| @moqtap/codec/draft08 | Draft-08 codec |
| @moqtap/codec/draft09 | Draft-09 codec |
| @moqtap/codec/draft10 | Draft-10 codec |
| @moqtap/codec/draft11 | Draft-11 codec |
| @moqtap/codec/draft12 | Draft-12 codec |
| @moqtap/codec/draft13 | Draft-13 codec |
| @moqtap/codec/draft14 | Draft-14 codec |
| @moqtap/codec/draft15 | Draft-15 codec |
| @moqtap/codec/draft16 | Draft-16 codec |
| @moqtap/codec/draft17 | Draft-17 codec |
| @moqtap/codec/draft{N}/session | Session state machine for draft N |
Note: A default (versionless) codec will be available once the MoQT specification reaches RFC status. Until then, always specify a draft version.
Draft-Specific Imports
For applications targeting a single draft version:
import { createDraft17Codec } from '@moqtap/codec/draft17'
import { createDraft17SessionState } from '@moqtap/codec/draft17/session'Session State Machine
Validate protocol message sequences without transport coupling:
import { createDraft17SessionState } from '@moqtap/codec/draft17/session'
const session = createDraft17SessionState('client')
const result = session.receive(incomingMessage)
if (!result.ok) {
console.error('Protocol violation:', result.violation)
}License
MIT
