@norskvideo/moq-net 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/announced.d.ts +111 -21
- package/announced.d.ts.map +1 -1
- package/announced.js +213 -40
- package/announced.js.map +1 -1
- package/broadcast.d.ts +80 -25
- package/broadcast.d.ts.map +1 -1
- package/broadcast.js +270 -49
- package/broadcast.js.map +1 -1
- package/connection/accept.d.ts +6 -0
- package/connection/accept.d.ts.map +1 -1
- package/connection/accept.js +42 -13
- package/connection/accept.js.map +1 -1
- package/connection/browser.d.ts +5 -0
- package/connection/browser.d.ts.map +1 -0
- package/connection/browser.js +31 -0
- package/connection/browser.js.map +1 -0
- package/connection/connect.d.ts +43 -1
- package/connection/connect.d.ts.map +1 -1
- package/connection/connect.js +118 -123
- package/connection/connect.js.map +1 -1
- package/connection/established.d.ts +43 -16
- package/connection/established.d.ts.map +1 -1
- package/connection/established.js.map +1 -1
- package/connection/handshake.d.ts +12 -1
- package/connection/handshake.d.ts.map +1 -1
- package/connection/handshake.js +30 -14
- package/connection/handshake.js.map +1 -1
- package/connection/index.d.ts +8 -0
- package/connection/index.d.ts.map +1 -1
- package/connection/index.js +6 -0
- package/connection/index.js.map +1 -1
- package/connection/reload.d.ts +66 -9
- package/connection/reload.d.ts.map +1 -1
- package/connection/reload.js +192 -66
- package/connection/reload.js.map +1 -1
- package/connection/stats.d.ts +92 -0
- package/connection/stats.d.ts.map +1 -0
- package/connection/stats.js +35 -0
- package/connection/stats.js.map +1 -0
- package/connection/transport.d.ts +10 -0
- package/connection/transport.d.ts.map +1 -0
- package/connection/transport.js +12 -0
- package/connection/transport.js.map +1 -0
- package/consume.d.ts +44 -0
- package/consume.d.ts.map +1 -0
- package/consume.js +60 -0
- package/consume.js.map +1 -0
- package/datagram.d.ts +23 -0
- package/datagram.d.ts.map +1 -0
- package/datagram.js +3 -0
- package/datagram.js.map +1 -0
- package/error.d.ts +76 -0
- package/error.d.ts.map +1 -0
- package/error.js +107 -0
- package/error.js.map +1 -0
- package/group.d.ts +143 -38
- package/group.d.ts.map +1 -1
- package/group.js +270 -68
- package/group.js.map +1 -1
- package/ietf/adapter.d.ts +2 -2
- package/ietf/adapter.d.ts.map +1 -1
- package/ietf/adapter.js +20 -10
- package/ietf/adapter.js.map +1 -1
- package/ietf/aliases.d.ts +73 -5
- package/ietf/aliases.d.ts.map +1 -1
- package/ietf/aliases.js +121 -14
- package/ietf/aliases.js.map +1 -1
- package/ietf/cluster.d.ts +141 -0
- package/ietf/cluster.d.ts.map +1 -0
- package/ietf/cluster.js +204 -0
- package/ietf/cluster.js.map +1 -0
- package/ietf/connection.d.ts +39 -6
- package/ietf/connection.d.ts.map +1 -1
- package/ietf/connection.js +73 -12
- package/ietf/connection.js.map +1 -1
- package/ietf/fetch.d.ts +17 -0
- package/ietf/fetch.d.ts.map +1 -1
- package/ietf/fetch.js +21 -0
- package/ietf/fetch.js.map +1 -1
- package/ietf/filter.d.ts +87 -0
- package/ietf/filter.d.ts.map +1 -0
- package/ietf/filter.js +292 -0
- package/ietf/filter.js.map +1 -0
- package/ietf/index.d.ts +2 -0
- package/ietf/index.d.ts.map +1 -1
- package/ietf/index.js +3 -0
- package/ietf/index.js.map +1 -1
- package/ietf/namespace.d.ts +6 -0
- package/ietf/namespace.d.ts.map +1 -1
- package/ietf/namespace.js +27 -2
- package/ietf/namespace.js.map +1 -1
- package/ietf/object.d.ts +54 -6
- package/ietf/object.d.ts.map +1 -1
- package/ietf/object.js +178 -25
- package/ietf/object.js.map +1 -1
- package/ietf/parameters.d.ts +35 -10
- package/ietf/parameters.d.ts.map +1 -1
- package/ietf/parameters.js +236 -45
- package/ietf/parameters.js.map +1 -1
- package/ietf/priority.d.ts +5 -0
- package/ietf/priority.d.ts.map +1 -0
- package/ietf/priority.js +10 -0
- package/ietf/priority.js.map +1 -0
- package/ietf/properties.d.ts +13 -2
- package/ietf/properties.d.ts.map +1 -1
- package/ietf/properties.js +65 -8
- package/ietf/properties.js.map +1 -1
- package/ietf/publish.d.ts.map +1 -1
- package/ietf/publish.js +13 -3
- package/ietf/publish.js.map +1 -1
- package/ietf/publish_namespace.d.ts +16 -2
- package/ietf/publish_namespace.d.ts.map +1 -1
- package/ietf/publish_namespace.js +25 -6
- package/ietf/publish_namespace.js.map +1 -1
- package/ietf/publisher.d.ts +40 -7
- package/ietf/publisher.d.ts.map +1 -1
- package/ietf/publisher.js +751 -134
- package/ietf/publisher.js.map +1 -1
- package/ietf/request.js +1 -1
- package/ietf/request.js.map +1 -1
- package/ietf/solicit.d.ts +41 -0
- package/ietf/solicit.d.ts.map +1 -0
- package/ietf/solicit.js +47 -0
- package/ietf/solicit.js.map +1 -0
- package/ietf/subscribe.d.ts +41 -2
- package/ietf/subscribe.d.ts.map +1 -1
- package/ietf/subscribe.js +103 -22
- package/ietf/subscribe.js.map +1 -1
- package/ietf/subscribe_namespace.d.ts +21 -7
- package/ietf/subscribe_namespace.d.ts.map +1 -1
- package/ietf/subscribe_namespace.js +31 -14
- package/ietf/subscribe_namespace.js.map +1 -1
- package/ietf/subscriber.d.ts +20 -7
- package/ietf/subscriber.d.ts.map +1 -1
- package/ietf/subscriber.js +512 -142
- package/ietf/subscriber.js.map +1 -1
- package/ietf/version.d.ts +7 -1
- package/ietf/version.d.ts.map +1 -1
- package/ietf/version.js +7 -0
- package/ietf/version.js.map +1 -1
- package/index.d.ts +10 -5
- package/index.d.ts.map +1 -1
- package/index.js +10 -5
- package/index.js.map +1 -1
- package/internal.d.ts +29 -0
- package/internal.d.ts.map +1 -0
- package/internal.js +8 -0
- package/internal.js.map +1 -0
- package/lite/announce.d.ts +62 -15
- package/lite/announce.d.ts.map +1 -1
- package/lite/announce.js +230 -94
- package/lite/announce.js.map +1 -1
- package/lite/connection.d.ts +69 -20
- package/lite/connection.d.ts.map +1 -1
- package/lite/connection.js +128 -81
- package/lite/connection.js.map +1 -1
- package/lite/datagram.d.ts +23 -0
- package/lite/datagram.d.ts.map +1 -0
- package/lite/datagram.js +57 -0
- package/lite/datagram.js.map +1 -0
- package/lite/datagram_stream.d.ts +8 -0
- package/lite/datagram_stream.d.ts.map +1 -0
- package/lite/datagram_stream.js +44 -0
- package/lite/datagram_stream.js.map +1 -0
- package/lite/fetch.d.ts.map +1 -1
- package/lite/fetch.js +2 -2
- package/lite/fetch.js.map +1 -1
- package/lite/index.d.ts +3 -0
- package/lite/index.d.ts.map +1 -1
- package/lite/index.js +3 -0
- package/lite/index.js.map +1 -1
- package/lite/priority.d.ts +67 -0
- package/lite/priority.d.ts.map +1 -0
- package/lite/priority.js +114 -0
- package/lite/priority.js.map +1 -0
- package/lite/probe.d.ts +18 -2
- package/lite/probe.d.ts.map +1 -1
- package/lite/probe.js +24 -22
- package/lite/probe.js.map +1 -1
- package/lite/publisher.d.ts +14 -7
- package/lite/publisher.d.ts.map +1 -1
- package/lite/publisher.js +406 -84
- package/lite/publisher.js.map +1 -1
- package/lite/setup.d.ts +83 -6
- package/lite/setup.d.ts.map +1 -1
- package/lite/setup.js +203 -31
- package/lite/setup.js.map +1 -1
- package/lite/stream.d.ts +12 -3
- package/lite/stream.d.ts.map +1 -1
- package/lite/stream.js +7 -4
- package/lite/stream.js.map +1 -1
- package/lite/subscribe.d.ts +37 -23
- package/lite/subscribe.d.ts.map +1 -1
- package/lite/subscribe.js +70 -55
- package/lite/subscribe.js.map +1 -1
- package/lite/subscriber.d.ts +29 -23
- package/lite/subscriber.d.ts.map +1 -1
- package/lite/subscriber.js +689 -112
- package/lite/subscriber.js.map +1 -1
- package/lite/track.d.ts +25 -13
- package/lite/track.d.ts.map +1 -1
- package/lite/track.js +60 -35
- package/lite/track.js.map +1 -1
- package/lite/version.d.ts +39 -4
- package/lite/version.d.ts.map +1 -1
- package/lite/version.js +139 -17
- package/lite/version.js.map +1 -1
- package/mock.d.ts +53 -3
- package/mock.d.ts.map +1 -1
- package/mock.js +110 -21
- package/mock.js.map +1 -1
- package/{lite/origin.d.ts → origin.d.ts} +25 -1
- package/origin.d.ts.map +1 -0
- package/{lite/origin.js → origin.js} +25 -1
- package/origin.js.map +1 -0
- package/package.json +6 -4
- package/path.d.ts +67 -0
- package/path.d.ts.map +1 -1
- package/path.js +128 -0
- package/path.js.map +1 -1
- package/stream.d.ts +94 -4
- package/stream.d.ts.map +1 -1
- package/stream.js +128 -17
- package/stream.js.map +1 -1
- package/time.d.ts +109 -86
- package/time.d.ts.map +1 -1
- package/time.js +80 -30
- package/time.js.map +1 -1
- package/track.d.ts +298 -47
- package/track.d.ts.map +1 -1
- package/track.js +721 -109
- package/track.js.map +1 -1
- package/util/timeout.d.ts +5 -0
- package/util/timeout.d.ts.map +1 -0
- package/util/timeout.js +18 -0
- package/util/timeout.js.map +1 -0
- package/util/utf8.d.ts +3 -0
- package/util/utf8.d.ts.map +1 -0
- package/util/utf8.js +7 -0
- package/util/utf8.js.map +1 -0
- package/varint.d.ts +14 -3
- package/varint.d.ts.map +1 -1
- package/varint.js +23 -12
- package/varint.js.map +1 -1
- package/zod.d.ts +5 -5
- package/zod.d.ts.map +1 -1
- package/zod.js.map +1 -1
- package/bandwidth.d.ts +0 -11
- package/bandwidth.d.ts.map +0 -1
- package/bandwidth.js +0 -7
- package/bandwidth.js.map +0 -1
- package/connection/cert.test.d.ts +0 -2
- package/connection/cert.test.d.ts.map +0 -1
- package/connection/cert.test.js +0 -26
- package/connection/cert.test.js.map +0 -1
- package/connection/reload.test.d.ts +0 -2
- package/connection/reload.test.d.ts.map +0 -1
- package/connection/reload.test.js +0 -39
- package/connection/reload.test.js.map +0 -1
- package/group.test.d.ts +0 -2
- package/group.test.d.ts.map +0 -1
- package/group.test.js +0 -66
- package/group.test.js.map +0 -1
- package/ietf/aliases.test.d.ts +0 -2
- package/ietf/aliases.test.d.ts.map +0 -1
- package/ietf/aliases.test.js +0 -30
- package/ietf/aliases.test.js.map +0 -1
- package/ietf/ietf.test.d.ts +0 -2
- package/ietf/ietf.test.d.ts.map +0 -1
- package/ietf/ietf.test.js +0 -873
- package/ietf/ietf.test.js.map +0 -1
- package/integration.test.d.ts +0 -2
- package/integration.test.d.ts.map +0 -1
- package/integration.test.js +0 -90
- package/integration.test.js.map +0 -1
- package/lite/origin.d.ts.map +0 -1
- package/lite/origin.js.map +0 -1
- package/lite/subscriber.test.d.ts +0 -2
- package/lite/subscriber.test.d.ts.map +0 -1
- package/lite/subscriber.test.js +0 -30
- package/lite/subscriber.test.js.map +0 -1
- package/lite/track.test.d.ts +0 -2
- package/lite/track.test.d.ts.map +0 -1
- package/lite/track.test.js +0 -53
- package/lite/track.test.js.map +0 -1
- package/path.test.d.ts +0 -2
- package/path.test.d.ts.map +0 -1
- package/path.test.js +0 -169
- package/path.test.js.map +0 -1
- package/stream.test.d.ts +0 -2
- package/stream.test.d.ts.map +0 -1
- package/stream.test.js +0 -210
- package/stream.test.js.map +0 -1
- package/track.test.d.ts +0 -2
- package/track.test.d.ts.map +0 -1
- package/track.test.js +0 -56
- package/track.test.js.map +0 -1
- package/util/error.d.ts +0 -3
- package/util/error.d.ts.map +0 -1
- package/util/error.js +0 -9
- package/util/error.js.map +0 -1
- package/util/index.d.ts +0 -2
- package/util/index.d.ts.map +0 -1
- package/util/index.js +0 -3
- package/util/index.js.map +0 -1
- package/varint.test.d.ts +0 -2
- package/varint.test.d.ts.map +0 -1
- package/varint.test.js +0 -106
- package/varint.test.js.map +0 -1
package/ietf/ietf.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ietf.test.js","sourceRoot":"","sources":["../../src/ietf/ietf.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"bun:test\";\nimport * as Path from \"../path.ts\";\nimport { Reader, Writer } from \"../stream.ts\";\nimport * as Varint from \"../varint.ts\";\nimport * as GoAway from \"./goaway.ts\";\nimport * as Namespace from \"./namespace.ts\";\nimport { Group } from \"./object.ts\";\nimport { SetupOptions } from \"./parameters.ts\";\nimport { Publish, PublishDone } from \"./publish.ts\";\nimport * as Announce from \"./publish_namespace.ts\";\nimport { RequestError, RequestOk } from \"./request.ts\";\nimport * as Setup from \"./setup.ts\";\nimport * as Subscribe from \"./subscribe.ts\";\nimport * as SubscribeNamespace from \"./subscribe_namespace.ts\";\nimport * as Track from \"./track.ts\";\nimport { type IetfVersion, Version } from \"./version.ts\";\n\n// Helper to create a writable stream that captures written data\nfunction createTestWritableStream(): { stream: WritableStream<Uint8Array>; written: Uint8Array[] } {\n\tconst written: Uint8Array[] = [];\n\tconst stream = new WritableStream<Uint8Array>({\n\t\twrite(chunk) {\n\t\t\twritten.push(new Uint8Array(chunk));\n\t\t},\n\t});\n\treturn { stream, written };\n}\n\n// Helper to concatenate written chunks\nfunction concatChunks(chunks: Uint8Array[]): Uint8Array {\n\tconst totalLength = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tresult.set(chunk, offset);\n\t\toffset += chunk.byteLength;\n\t}\n\treturn result;\n}\n\n// Helper to encode a versioned message\nasync function encodeVersioned<T extends { encode(w: Writer, v: IetfVersion): Promise<void> }>(\n\tmessage: T,\n\tversion: IetfVersion,\n): Promise<Uint8Array> {\n\tconst { stream, written } = createTestWritableStream();\n\tconst writer = new Writer(stream, version);\n\tawait message.encode(writer, version);\n\twriter.close();\n\tawait writer.closed;\n\treturn concatChunks(written);\n}\n\n// Helper to decode a versioned message\nasync function decodeVersioned<T>(\n\tbytes: Uint8Array,\n\tdecoder: (r: Reader, v: IetfVersion) => Promise<T>,\n\tversion: IetfVersion,\n): Promise<T> {\n\tconst reader = new Reader(undefined, bytes, version);\n\treturn await decoder(reader, version);\n}\n\n// Subscribe tests (v14)\ntest(\"Subscribe v14: round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"Subscribe v14: nested namespace\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 100n,\n\t\ttrackNamespace: Path.from(\"conference/room123\"),\n\t\ttrackName: \"audio\",\n\t\tsubscriberPriority: 255,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"conference/room123\" as Path.Valid);\n});\n\ntest(\"SubscribeOk v14: without largest\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ requestId: 42n, trackAlias: 43n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(42n);\n\texpect(decoded.trackAlias).toBe(43n);\n});\n\n// Subscribe tests (v15)\ntest(\"Subscribe v15: round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v15: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ requestId: 42n, trackAlias: 43n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(42n);\n\texpect(decoded.trackAlias).toBe(43n);\n});\n\ntest(\"SubscribeError: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeError({ requestId: 123n, errorCode: 500, reasonPhrase: \"Not found\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(123n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Not found\");\n});\n\ntest(\"Unsubscribe: round trip\", async () => {\n\tconst msg = new Subscribe.Unsubscribe({ requestId: 999n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Unsubscribe.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(999n);\n});\n\ntest(\"PublishDone: basic test\", async () => {\n\tconst msg = new PublishDone({ requestId: 10n, statusCode: 0, reasonPhrase: \"complete\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(10n);\n\texpect(decoded.statusCode).toBe(0);\n\texpect(decoded.reasonPhrase).toBe(\"complete\");\n});\n\ntest(\"PublishDone: with error\", async () => {\n\tconst msg = new PublishDone({ requestId: 10n, statusCode: 1, reasonPhrase: \"error\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(10n);\n\texpect(decoded.statusCode).toBe(1);\n\texpect(decoded.reasonPhrase).toBe(\"error\");\n});\n\n// Announce/PublishNamespace tests\ntest(\"PublishNamespace: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.from(\"test/broadcast\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/broadcast\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceOk: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceOk({ requestId: 2n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceOk.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(2n);\n});\n\ntest(\"PublishNamespaceError: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceError({ requestId: 3n, errorCode: 404, reasonPhrase: \"Unauthorized\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(3n);\n\texpect(decoded.errorCode).toBe(404);\n\texpect(decoded.reasonPhrase).toBe(\"Unauthorized\");\n});\n\ntest(\"PublishNamespaceDone: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ trackNamespace: Path.from(\"old/stream\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceDone.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"old/stream\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceCancel: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespaceCancel({\n\t\ttrackNamespace: Path.from(\"canceled\"),\n\t\terrorCode: 1,\n\t\treasonPhrase: \"Shutdown\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespaceCancel.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"canceled\" as Path.Valid);\n\texpect(decoded.errorCode).toBe(1);\n\texpect(decoded.reasonPhrase).toBe(\"Shutdown\");\n});\n\n// GoAway tests\ntest(\"GoAway: with URL\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"https://example.com/new\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_14);\n\n\texpect(decoded.newSessionUri).toBe(\"https://example.com/new\");\n});\n\ntest(\"GoAway: empty\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_14);\n\n\texpect(decoded.newSessionUri).toBe(\"\");\n});\n\n// Track tests\ntest(\"TrackStatusRequest: round trip\", async () => {\n\tconst msg = new Track.TrackStatusRequest({\n\t\trequestId: 0n,\n\t\ttrackNamespace: Path.from(\"video/stream\"),\n\t\ttrackName: \"main\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(0n);\n\texpect(decoded.trackNamespace).toBe(\"video/stream\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"main\");\n});\n\ntest(\"TrackStatus v14: round trip\", async () => {\n\tconst msg = new Track.TrackStatus({\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"status\",\n\t\tstatusCode: 200,\n\t\tlastGroupId: 42n,\n\t\tlastObjectId: 100n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatus.decode, Version.DRAFT_14);\n\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"status\");\n\texpect(decoded.statusCode).toBe(200);\n\texpect(decoded.lastGroupId).toBe(42n);\n\texpect(decoded.lastObjectId).toBe(100n);\n});\n\n// Validation tests\ntest(\"Subscribe v14: rejects invalid filter type\", async () => {\n\tconst invalidBytes = new Uint8Array([\n\t\t0x01, // subscribe_id\n\t\t0x02, // track_alias\n\t\t0x01, // namespace length\n\t\t0x04,\n\t\t0x74,\n\t\t0x65,\n\t\t0x73,\n\t\t0x74, // \"test\"\n\t\t0x05,\n\t\t0x76,\n\t\t0x69,\n\t\t0x64,\n\t\t0x65,\n\t\t0x6f, // \"video\"\n\t\t0x80, // subscriber_priority\n\t\t0x02, // group_order\n\t\t0x99, // INVALID filter_type\n\t\t0x00, // num_params\n\t]);\n\n\tawait expect(\n\t\t(async () => {\n\t\t\tawait decodeVersioned(invalidBytes, Subscribe.Subscribe.decode, Version.DRAFT_14);\n\t\t})(),\n\t).rejects.toThrow();\n});\n\ntest(\"SubscribeOk v14: rejects non-zero expires\", async () => {\n\tconst invalidBytes = new Uint8Array([\n\t\t0x01, // subscribe_id\n\t\t0x05, // INVALID: expires = 5\n\t\t0x02, // group_order\n\t\t0x00, // content_exists\n\t\t0x00, // num_params\n\t]);\n\n\tawait expect(\n\t\t(async () => {\n\t\t\tawait decodeVersioned(invalidBytes, Subscribe.SubscribeOk.decode, Version.DRAFT_14);\n\t\t})(),\n\t).rejects.toThrow();\n});\n\n// Unicode tests\ntest(\"SubscribeError: unicode strings\", async () => {\n\tconst msg = new Subscribe.SubscribeError({ requestId: 1n, errorCode: 400, reasonPhrase: \"Error: 错误 🚫\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeError.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.errorCode).toBe(400);\n\texpect(decoded.reasonPhrase).toBe(\"Error: 错误 🚫\");\n});\n\ntest(\"PublishNamespace: unicode namespace\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.from(\"会议/房间\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"会议/房间\" as Path.Valid);\n});\n\n// Publish v15 tests\ntest(\"Publish v15: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"Publish v14: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: true,\n\t\tlargest: { groupId: 10n, objectId: 5n },\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n\texpect(decoded.contentExists).toBe(true);\n\texpect(decoded.largest?.groupId).toBe(10n);\n\texpect(decoded.largest?.objectId).toBe(5n);\n});\n\n// ClientSetup v15 tests\ntest(\"ClientSetup v15: round trip\", async () => {\n\tconst msg = new Setup.ClientSetup({ versions: [Version.DRAFT_15] });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Setup.ClientSetup.decode, Version.DRAFT_15);\n\n\texpect(decoded.versions.length).toBe(1);\n\texpect(decoded.versions[0]).toBe(Version.DRAFT_15);\n});\n\ntest(\"ClientSetup v14: round trip\", async () => {\n\tconst msg = new Setup.ClientSetup({ versions: [Version.DRAFT_14] });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Setup.ClientSetup.decode, Version.DRAFT_14);\n\n\texpect(decoded.versions.length).toBe(1);\n\texpect(decoded.versions[0]).toBe(Version.DRAFT_14);\n});\n\n// ServerSetup v15 tests\ntest(\"ServerSetup v15: round trip\", async () => {\n\tconst msg = new Setup.ServerSetup({ version: Version.DRAFT_15 });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Setup.ServerSetup.decode, Version.DRAFT_15);\n\n\texpect(decoded.version).toBe(Version.DRAFT_15);\n});\n\ntest(\"ServerSetup v14: round trip\", async () => {\n\tconst msg = new Setup.ServerSetup({ version: Version.DRAFT_14 });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Setup.ServerSetup.decode, Version.DRAFT_14);\n\n\texpect(decoded.version).toBe(Version.DRAFT_14);\n});\n\n// RequestOk / RequestError v15 tests\ntest(\"RequestOk: round trip\", async () => {\n\tconst msg = new RequestOk({ requestId: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(42n);\n});\n\ntest(\"RequestError v15: round trip\", async () => {\n\tconst msg = new RequestError({ requestId: 99n, errorCode: 500, reasonPhrase: \"Internal error\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(99n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(0n);\n});\n\ntest(\"RequestError v16: round trip with retryInterval\", async () => {\n\tconst msg = new RequestError({\n\t\trequestId: 99n,\n\t\terrorCode: 500,\n\t\treasonPhrase: \"Internal error\",\n\t\tretryInterval: 5000n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_16);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_16);\n\n\texpect(decoded.requestId).toBe(99n);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(5000n);\n});\n\n// --- Leading-ones varint tests ---\n\ntest(\"Leading-ones varint: spec test vectors\", () => {\n\t// Test vectors from draft-17 spec (Table 2)\n\tconst cases: [Uint8Array, bigint][] = [\n\t\t[new Uint8Array([0x25]), 37n],\n\t\t[new Uint8Array([0x80, 0x25]), 37n], // non-minimal encoding of 37\n\t\t[new Uint8Array([0xbb, 0xbd]), 15_293n],\n\t\t[new Uint8Array([0xfa, 0xa1, 0xa0, 0xe4, 0x03, 0xd8]), 2_893_212_287_960n],\n\t\t[new Uint8Array([0xfe, 0xfa, 0x31, 0x8f, 0xa8, 0xe3, 0xca, 0x11]), 70_423_237_261_249_041n],\n\t\t[\n\t\t\tnew Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]),\n\t\t\t18_446_744_073_709_551_615n, // u64::MAX\n\t\t],\n\t];\n\n\tfor (const [bytes, expected] of cases) {\n\t\tconst [decoded, remain] = Varint.decodeLeadingOnes(bytes);\n\t\texpect(decoded).toBe(expected);\n\t\texpect(remain.length).toBe(0);\n\t}\n\n\t// Test minimal round-trip (skip non-minimal 0x8025 for 37, and u64::MAX which exceeds safe range)\n\tconst roundTripCases: [Uint8Array, bigint][] = [\n\t\t[new Uint8Array([0x25]), 37n],\n\t\t[new Uint8Array([0xbb, 0xbd]), 15_293n],\n\t\t[new Uint8Array([0xfa, 0xa1, 0xa0, 0xe4, 0x03, 0xd8]), 2_893_212_287_960n],\n\t\t[new Uint8Array([0xfe, 0xfa, 0x31, 0x8f, 0xa8, 0xe3, 0xca, 0x11]), 70_423_237_261_249_041n],\n\t];\n\n\tfor (const [expectedBytes, value] of roundTripCases) {\n\t\tconst encoded = Varint.encodeLeadingOnes(value);\n\t\texpect(encoded).toEqual(expectedBytes);\n\t}\n});\n\ntest(\"Leading-ones varint: boundary round-trips\", () => {\n\tconst cases: [bigint, number][] = [\n\t\t[(1n << 7n) - 1n, 1],\n\t\t[1n << 7n, 2],\n\t\t[(1n << 14n) - 1n, 2],\n\t\t[1n << 14n, 3],\n\t\t[(1n << 56n) - 1n, 8],\n\t\t[1n << 56n, 9],\n\t];\n\n\tfor (const [value, expectedLen] of cases) {\n\t\tconst encoded = Varint.encodeLeadingOnes(value);\n\t\texpect(encoded.length).toBe(expectedLen);\n\n\t\tconst [decoded, remain] = Varint.decodeLeadingOnes(encoded);\n\t\texpect(decoded).toBe(value);\n\t\texpect(remain.length).toBe(0);\n\t}\n});\n\ntest(\"Leading-ones varint: 0xFC is a 7-byte form on draft-18+ (per #1595)\", () => {\n\t// Standalone decoder is permissive; draft-17 enforcement is in Reader#readLeadingOnes.\n\t// Only check that it doesn't reject the prefix as \"reserved\" — it now needs more bytes.\n\texpect(() => {\n\t\tVarint.decodeLeadingOnes(new Uint8Array([0xfc]));\n\t}).toThrow(/buffer too short/);\n});\n\ntest(\"Reader#u62: rejects 0xFC 7-byte form on draft-17\", async () => {\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_17);\n\tawait expect(reader.u62()).rejects.toThrow(/reserved on draft-17/);\n});\n\ntest(\"Reader#u62: accepts 0xFC 7-byte form on draft-18\", async () => {\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_18);\n\texpect(await reader.u62()).toBe(value);\n\texpect(await reader.done()).toBe(true);\n});\n\ntest(\"Reader#u62: accepts 0xFC 7-byte form on draft-19\", async () => {\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array([0xfc, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc]);\n\tconst reader = new Reader(undefined, bytes, Version.DRAFT_19);\n\texpect(await reader.u62()).toBe(value);\n\texpect(await reader.done()).toBe(true);\n});\n\ntest(\"Leading-ones varint: 7-byte form round-trips on draft-18\", () => {\n\t// Encode 7 bytes manually: 1111110_0 (prefix bit 48 = 0) + 6 bytes payload\n\tconst value = 0x12_3456_789a_bcn;\n\tconst bytes = new Uint8Array(7);\n\tbytes[0] = 0xfc; // 1111110_0\n\tbytes[1] = 0x12;\n\tbytes[2] = 0x34;\n\tbytes[3] = 0x56;\n\tbytes[4] = 0x78;\n\tbytes[5] = 0x9a;\n\tbytes[6] = 0xbc;\n\tconst [decoded, remain] = Varint.decodeLeadingOnes(bytes);\n\texpect(decoded).toBe(value);\n\texpect(remain.length).toBe(0);\n});\n\n// --- Draft-17 message tests ---\n\ntest(\"Subscribe v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v17: no requestId\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ trackAlias: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.trackAlias).toBe(42n);\n});\n\ntest(\"RequestOk v17: no requestId\", async () => {\n\tconst msg = new RequestOk({});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n});\n\ntest(\"RequestError v17: no requestId, has retryInterval\", async () => {\n\tconst msg = new RequestError({\n\t\terrorCode: 500,\n\t\treasonPhrase: \"Internal error\",\n\t\tretryInterval: 3000n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"Internal error\");\n\texpect(decoded.retryInterval).toBe(3000n);\n});\n\ntest(\"GoAway v17: with timeout\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"https://example.com/new\", timeout: 5000n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_17);\n\n\texpect(decoded.newSessionUri).toBe(\"https://example.com/new\");\n\texpect(decoded.timeout).toBe(5000n);\n});\n\ntest(\"Setup v17: unified 0x2F00 round trip\", async () => {\n\tconst params = new SetupOptions();\n\tparams.setBytes(7n, new TextEncoder().encode(\"test-impl\"));\n\tconst msg = new Setup.Setup({ parameters: params });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Setup.Setup.decode, Version.DRAFT_17);\n\n\texpect(decoded.parameters.getBytes(7n)).toEqual(new TextEncoder().encode(\"test-impl\"));\n});\n\ntest(\"Publish v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 42n,\n\t\tgroupOrder: 0x02,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(42n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"PublishNamespace v17: round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 5n, trackNamespace: Path.from(\"live/stream\") });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(5n);\n\texpect(decoded.trackNamespace).toBe(\"live/stream\" as Path.Valid);\n});\n\ntest(\"PublishNamespaceDone v17: encode rejects\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ trackNamespace: Path.from(\"old/stream\") });\n\n\tawait expect((() => encodeVersioned(msg, Version.DRAFT_17))()).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"PublishNamespaceCancel v17: encode rejects\", async () => {\n\tconst msg = new Announce.PublishNamespaceCancel({ trackNamespace: Path.from(\"canceled\") });\n\n\tawait expect((() => encodeVersioned(msg, Version.DRAFT_17))()).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"PublishDone v17: no requestId\", async () => {\n\tconst msg = new PublishDone({ statusCode: 0, reasonPhrase: \"done\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.statusCode).toBe(0);\n\texpect(decoded.reasonPhrase).toBe(\"done\");\n});\n\n// --- SubscribeUpdate tests ---\n\ntest(\"SubscribeUpdate v14: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 5n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(5n);\n});\n\ntest(\"SubscribeUpdate v15: round trip\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 10n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(10n);\n});\n\ntest(\"SubscribeUpdate v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeUpdate.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(42n);\n});\n\n// --- PublishBlocked tests ---\n\ntest(\"PublishBlocked v17: round trip\", async () => {\n\tconst msg = new SubscribeNamespace.PublishBlocked({\n\t\tsuffix: Path.from(\"stream1\"),\n\t\ttrackName: \"video\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, SubscribeNamespace.PublishBlocked.decode, Version.DRAFT_17);\n\n\texpect(decoded.suffix).toBe(\"stream1\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n});\n\n// --- TrackStatusRequest version-aware tests ---\n\ntest(\"TrackStatusRequest v14: round trip with subscribe fields\", async () => {\n\tconst msg = new Track.TrackStatusRequest({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"video/stream\"),\n\t\ttrackName: \"main\",\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_14);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_14);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"video/stream\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"main\");\n});\n\ntest(\"TrackStatusRequest v15: round trip with params\", async () => {\n\tconst msg = new Track.TrackStatusRequest({ requestId: 2n, trackNamespace: Path.from(\"test\"), trackName: \"audio\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_15);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_15);\n\n\texpect(decoded.requestId).toBe(2n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"audio\");\n});\n\ntest(\"TrackStatusRequest v17: round trip with requiredRequestIdDelta\", async () => {\n\tconst msg = new Track.TrackStatusRequest({ requestId: 3n, trackNamespace: Path.from(\"live\"), trackName: \"data\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Track.TrackStatusRequest.decode, Version.DRAFT_17);\n\n\texpect(decoded.requestId).toBe(3n);\n\texpect(decoded.trackNamespace).toBe(\"live\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"data\");\n});\n\n// --- Namespace encoding tests ---\n\n// Helper to encode a namespace to raw bytes\nasync function encodeNamespace(namespace: Path.Valid): Promise<Uint8Array> {\n\tconst { stream, written } = createTestWritableStream();\n\tconst writer = new Writer(stream);\n\tawait Namespace.encode(writer, namespace);\n\twriter.close();\n\tawait writer.closed;\n\treturn concatChunks(written);\n}\n\n// Helper to decode a namespace from raw bytes\nasync function decodeNamespace(bytes: Uint8Array): Promise<Path.Valid> {\n\tconst reader = new Reader(undefined, bytes);\n\treturn await Namespace.decode(reader);\n}\n\ntest(\"Namespace: empty encodes as zero-length tuple\", async () => {\n\tconst bytes = await encodeNamespace(Path.empty());\n\n\t// Should be a single byte: varint 0 (zero parts)\n\texpect(bytes).toEqual(new Uint8Array([0x00]));\n});\n\ntest(\"Namespace: empty round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.empty());\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"\" as Path.Valid);\n});\n\ntest(\"Namespace: single part round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.from(\"test\"));\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"test\" as Path.Valid);\n});\n\ntest(\"Namespace: single part encodes as one-length tuple\", async () => {\n\tconst bytes = await encodeNamespace(Path.from(\"test\"));\n\n\t// varint 1 (one part), then length-prefixed \"test\"\n\texpect(bytes[0]).toBe(0x01);\n});\n\ntest(\"Namespace: multi-part round trip\", async () => {\n\tconst encoded = await encodeNamespace(Path.from(\"conference/room/123\"));\n\tconst decoded = await decodeNamespace(encoded);\n\n\texpect(decoded).toBe(\"conference/room/123\" as Path.Valid);\n});\n\ntest(\"Namespace: multi-part encodes correct count\", async () => {\n\tconst bytes = await encodeNamespace(Path.from(\"a/b/c\"));\n\n\t// First byte should be varint 3 (three parts)\n\texpect(bytes[0]).toBe(0x03);\n});\n\ntest(\"Namespace: Subscribe with empty namespace round trip\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.empty(),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_17);\n\n\texpect(decoded.trackNamespace).toBe(\"\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n});\n\ntest(\"Namespace: PublishNamespace with empty namespace round trip\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 1n, trackNamespace: Path.empty() });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_17);\n\n\texpect(decoded.trackNamespace).toBe(\"\" as Path.Valid);\n});\n\n// --- Draft-18 message tests ---\n\ntest(\"Subscribe v18: round trip (same wire as v17 minus required_request_id_delta)\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.Subscribe.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(1n);\n\texpect(decoded.trackNamespace).toBe(\"test\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.subscriberPriority).toBe(128);\n});\n\ntest(\"SubscribeOk v18: no requestId\", async () => {\n\tconst msg = new Subscribe.SubscribeOk({ trackAlias: 42n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Subscribe.SubscribeOk.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.trackAlias).toBe(42n);\n});\n\ntest(\"SubscribeUpdate v18: 1 byte shorter than v17 (no required_request_id_delta)\", async () => {\n\tconst msg = new Subscribe.SubscribeUpdate({ requestId: 10n });\n\tconst v17 = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst v18 = await encodeVersioned(msg, Version.DRAFT_18);\n\texpect(v17.length).toBe(v18.length + 1);\n\n\t// Round-trip the v18 bytes too. A different shape that happens to be one byte\n\t// shorter would silently pass the length check otherwise.\n\tconst decoded = await decodeVersioned(v18, Subscribe.SubscribeUpdate.decode, Version.DRAFT_18);\n\texpect(decoded.requestId).toBe(10n);\n});\n\ntest(\"PublishNamespace v18: round trip without required_request_id_delta\", async () => {\n\tconst msg = new Announce.PublishNamespace({ requestId: 5n, trackNamespace: Path.from(\"v18/broadcast\") });\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Announce.PublishNamespace.decode, Version.DRAFT_18);\n\texpect(decoded.requestId).toBe(5n);\n\texpect(decoded.trackNamespace).toBe(\"v18/broadcast\" as Path.Valid);\n});\n\ntest(\"Publish v18: round trip\", async () => {\n\tconst msg = new Publish({\n\t\trequestId: 7n,\n\t\ttrackNamespace: Path.from(\"v18/ns\"),\n\t\ttrackName: \"video\",\n\t\ttrackAlias: 1n,\n\t\tgroupOrder: 2,\n\t\tcontentExists: false,\n\t\tlargest: undefined,\n\t\tforward: true,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, Publish.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(7n);\n\texpect(decoded.trackNamespace).toBe(\"v18/ns\" as Path.Valid);\n\texpect(decoded.trackName).toBe(\"video\");\n\texpect(decoded.trackAlias).toBe(1n);\n\texpect(decoded.forward).toBe(true);\n});\n\ntest(\"PublishDone v18: no requestId\", async () => {\n\tconst msg = new PublishDone({ statusCode: 200, reasonPhrase: \"OK\" });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, PublishDone.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.statusCode).toBe(200);\n\texpect(decoded.reasonPhrase).toBe(\"OK\");\n});\n\ntest(\"RequestOk v18: no requestId (regression: don't treat Draft18 as legacy)\", async () => {\n\tconst msg = new RequestOk({});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, RequestOk.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n});\n\ntest(\"RequestError v18: no requestId, retry_interval still present\", async () => {\n\tconst msg = new RequestError({\n\t\terrorCode: 500,\n\t\treasonPhrase: \"boom\",\n\t\tretryInterval: 1234n,\n\t});\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, RequestError.decode, Version.DRAFT_18);\n\n\texpect(decoded.requestId).toBe(undefined);\n\texpect(decoded.errorCode).toBe(500);\n\texpect(decoded.reasonPhrase).toBe(\"boom\");\n\texpect(decoded.retryInterval).toBe(1234n);\n});\n\ntest(\"Subscribe v18 wire bytes match v17 (FIRST_OBJECT bit doesn't affect control messages)\", async () => {\n\tconst msg = new Subscribe.Subscribe({\n\t\trequestId: 1n,\n\t\ttrackNamespace: Path.from(\"test\"),\n\t\ttrackName: \"video\",\n\t\tsubscriberPriority: 128,\n\t});\n\n\tconst v17 = await encodeVersioned(msg, Version.DRAFT_17);\n\tconst v18 = await encodeVersioned(msg, Version.DRAFT_18);\n\n\t// Draft18 drops the required_request_id_delta (1 byte) from v17.\n\texpect(v18.length).toBe(v17.length - 1);\n});\n\ntest(\"PublishNamespaceDone v18: rejected (removed in draft-17+)\", async () => {\n\tconst msg = new Announce.PublishNamespaceDone({ requestId: 1n });\n\tconst { stream } = createTestWritableStream();\n\tconst writer = new Writer(stream, Version.DRAFT_18);\n\tawait expect(msg.encode(writer, Version.DRAFT_18)).rejects.toThrow(/removed in draft-17/);\n});\n\ntest(\"GoAway v18: round trip (timeout field still present)\", async () => {\n\tconst msg = new GoAway.GoAway({ newSessionUri: \"moqt://relay.example/\", timeout: 5000n });\n\n\tconst encoded = await encodeVersioned(msg, Version.DRAFT_18);\n\tconst decoded = await decodeVersioned(encoded, GoAway.GoAway.decode, Version.DRAFT_18);\n\n\texpect(decoded.newSessionUri).toBe(\"moqt://relay.example/\");\n\texpect(decoded.timeout).toBe(5000n);\n});\n\ntest(\"Parameters v18 wire is identical to v17 (no count prefix, delta encoded keys)\", async () => {\n\tconst params = new SetupOptions();\n\tparams.setVarint(0x2n, 42n);\n\tparams.setVarint(0x4n, 100n);\n\n\tconst v17 = (() => {\n\t\tconst { stream, written } = createTestWritableStream();\n\t\tconst w = new Writer(stream, Version.DRAFT_17);\n\t\treturn params.encode(w, Version.DRAFT_17).then(() => concatChunks(written));\n\t})();\n\tconst v18 = (() => {\n\t\tconst { stream, written } = createTestWritableStream();\n\t\tconst w = new Writer(stream, Version.DRAFT_18);\n\t\treturn params.encode(w, Version.DRAFT_18).then(() => concatChunks(written));\n\t})();\n\n\texpect(Array.from(await v18)).toEqual(Array.from(await v17));\n});\n\ntest(\"SubscribeNamespace: message IDs\", () => {\n\t// 0x11 through draft-17 (legacy), renumbered to 0x50 in draft-18 (#1542).\n\texpect(SubscribeNamespace.SubscribeNamespaceLegacy.id).toBe(0x11);\n\texpect(SubscribeNamespace.SubscribeNamespace.id).toBe(0x50);\n});\n\ntest(\"SubscribeNamespace: decode rejects the wrong draft version\", async () => {\n\t// Modern 0x50 is draft-18+ only.\n\tconst modern = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespace({ namespace: Path.empty(), requestId: 0n }),\n\t\tVersion.DRAFT_18,\n\t);\n\tawait expect(\n\t\tdecodeVersioned(modern, SubscribeNamespace.SubscribeNamespace.decode, Version.DRAFT_17),\n\t).rejects.toThrow(/draft-18\\+ only/);\n\n\t// Legacy 0x11 is draft-14..17 only.\n\tconst legacy = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.empty(), requestId: 0n }),\n\t\tVersion.DRAFT_17,\n\t);\n\tawait expect(\n\t\tdecodeVersioned(legacy, SubscribeNamespace.SubscribeNamespaceLegacy.decode, Version.DRAFT_18),\n\t).rejects.toThrow(/draft-14\\.\\.17 only/);\n});\n\ntest(\"SubscribeNamespace: draft-18 omits subscribe options\", async () => {\n\t// The legacy draft-17 body carries the Subscribe Options field, so it is\n\t// longer than the modern draft-18 body.\n\tconst modern = new SubscribeNamespace.SubscribeNamespace({ namespace: Path.empty(), requestId: 0n });\n\tconst legacy = new SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.empty(), requestId: 0n });\n\tconst v18 = await encodeVersioned(modern, Version.DRAFT_18);\n\tconst v17 = await encodeVersioned(legacy, Version.DRAFT_17);\n\texpect(v18.byteLength).toBeLessThan(v17.byteLength);\n\n\t// Modern round-trips on draft-18.\n\tconst m = await encodeVersioned(\n\t\tnew SubscribeNamespace.SubscribeNamespace({ namespace: Path.from(\"example/meeting\"), requestId: 4n }),\n\t\tVersion.DRAFT_18,\n\t);\n\tconst dm = await decodeVersioned(m, SubscribeNamespace.SubscribeNamespace.decode, Version.DRAFT_18);\n\texpect(dm.requestId).toBe(4n);\n\texpect(dm.namespace).toBe(\"example/meeting\" as Path.Valid);\n\n\t// Legacy round-trips on draft-16/17.\n\tfor (const version of [Version.DRAFT_16, Version.DRAFT_17]) {\n\t\tconst encoded = await encodeVersioned(\n\t\t\tnew SubscribeNamespace.SubscribeNamespaceLegacy({ namespace: Path.from(\"example/meeting\"), requestId: 4n }),\n\t\t\tversion,\n\t\t);\n\t\tconst decoded = await decodeVersioned(encoded, SubscribeNamespace.SubscribeNamespaceLegacy.decode, version);\n\t\texpect(decoded.requestId).toBe(4n);\n\t\texpect(decoded.namespace).toBe(\"example/meeting\" as Path.Valid);\n\t}\n});\n\ntest(\"Group: draft-18 sets FIRST_OBJECT bit, draft-17 does not\", async () => {\n\tconst makeGroup = () =>\n\t\tnew Group({\n\t\t\ttrackAlias: 7n,\n\t\t\tgroupId: 3,\n\t\t\tsubGroupId: 0,\n\t\t\tpublisherPriority: 0,\n\t\t\tflags: {\n\t\t\t\thasExtensions: false,\n\t\t\t\thasSubgroup: false,\n\t\t\t\thasSubgroupObject: false,\n\t\t\t\thasEnd: true,\n\t\t\t\thasPriority: true,\n\t\t\t},\n\t\t});\n\n\t// Round-trips on each version.\n\tfor (const version of [Version.DRAFT_17, Version.DRAFT_18]) {\n\t\tconst encoded = await encodeVersioned(makeGroup(), version);\n\t\tconst decoded = await decodeVersioned(encoded, Group.decode, version);\n\t\texpect(decoded.groupId).toBe(3);\n\t\texpect(decoded.trackAlias).toBe(7n);\n\t\texpect(decoded.flags.hasEnd).toBe(true);\n\t\texpect(decoded.flags.hasPriority).toBe(true);\n\t}\n\n\t// The draft-18 header carries the 0x40 FIRST_OBJECT bit (type 0x18 -> 0x58),\n\t// so the same bytes are not a valid draft-17 subgroup header.\n\tconst v18 = await encodeVersioned(makeGroup(), Version.DRAFT_18);\n\tconst v17 = await encodeVersioned(makeGroup(), Version.DRAFT_17);\n\texpect(Array.from(v18)).not.toEqual(Array.from(v17));\n\tawait expect(decodeVersioned(v18, Group.decode, Version.DRAFT_17)).rejects.toThrow(/Unsupported group type/);\n});\n"]}
|
package/integration.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../src/integration.test.ts"],"names":[],"mappings":""}
|
package/integration.test.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/* @ts-self-types="./integration.test.d.ts" */
|
|
2
|
-
import { expect, test } from "bun:test";
|
|
3
|
-
import { Broadcast } from "./broadcast.js";
|
|
4
|
-
import { accept, connect } from "./connection/index.js";
|
|
5
|
-
import * as Ietf from "./ietf/index.js";
|
|
6
|
-
import * as Lite from "./lite/index.js";
|
|
7
|
-
import { createMockTransportPair } from "./mock.js";
|
|
8
|
-
import * as Path from "./path.js";
|
|
9
|
-
const url = new URL("https://localhost:4443/test");
|
|
10
|
-
async function runPublishSubscribeFlow(protocol, version) {
|
|
11
|
-
const pair = createMockTransportPair(protocol);
|
|
12
|
-
const [client, server] = await Promise.all([
|
|
13
|
-
connect(url, { transport: pair.client }),
|
|
14
|
-
accept(pair.server, url, version !== undefined ? { version } : undefined),
|
|
15
|
-
]);
|
|
16
|
-
// Server publishes a broadcast
|
|
17
|
-
const broadcast = new Broadcast();
|
|
18
|
-
server.publish(Path.from("test"), broadcast);
|
|
19
|
-
// Client discovers announced broadcast
|
|
20
|
-
const announced = client.announced();
|
|
21
|
-
const entry = await announced.next();
|
|
22
|
-
if (!entry)
|
|
23
|
-
throw new Error("expected entry");
|
|
24
|
-
expect(entry.path).toBe("test");
|
|
25
|
-
expect(entry.active).toBe(true);
|
|
26
|
-
// Client consumes the broadcast and subscribes to a track
|
|
27
|
-
const remote = client.consume(Path.from("test"));
|
|
28
|
-
const track = remote.subscribe("video", 0);
|
|
29
|
-
// Server handles the subscription request
|
|
30
|
-
const req = await broadcast.requested();
|
|
31
|
-
if (!req)
|
|
32
|
-
throw new Error("expected req");
|
|
33
|
-
expect(req.track.name).toBe("video");
|
|
34
|
-
// Server writes data
|
|
35
|
-
req.track.writeString("hello");
|
|
36
|
-
// Client reads data
|
|
37
|
-
const data = await track.readString();
|
|
38
|
-
expect(data).toBe("hello");
|
|
39
|
-
// Cleanup
|
|
40
|
-
req.track.close();
|
|
41
|
-
broadcast.close();
|
|
42
|
-
announced.close();
|
|
43
|
-
remote.close();
|
|
44
|
-
client.close();
|
|
45
|
-
server.close();
|
|
46
|
-
}
|
|
47
|
-
test("integration: lite draft-01", async () => {
|
|
48
|
-
await runPublishSubscribeFlow("", Lite.Version.DRAFT_01);
|
|
49
|
-
});
|
|
50
|
-
test("integration: lite draft-02", async () => {
|
|
51
|
-
await runPublishSubscribeFlow("", Lite.Version.DRAFT_02);
|
|
52
|
-
});
|
|
53
|
-
test("integration: lite draft-03", async () => {
|
|
54
|
-
await runPublishSubscribeFlow(Lite.ALPN_03);
|
|
55
|
-
});
|
|
56
|
-
test("integration: ietf draft-14", async () => {
|
|
57
|
-
await runPublishSubscribeFlow("", Ietf.Version.DRAFT_14);
|
|
58
|
-
});
|
|
59
|
-
test("integration: ietf draft-15", async () => {
|
|
60
|
-
await runPublishSubscribeFlow(Ietf.ALPN.DRAFT_15);
|
|
61
|
-
});
|
|
62
|
-
test("integration: ietf draft-16", async () => {
|
|
63
|
-
await runPublishSubscribeFlow(Ietf.ALPN.DRAFT_16);
|
|
64
|
-
});
|
|
65
|
-
test("integration: ietf draft-17", async () => {
|
|
66
|
-
await runPublishSubscribeFlow(Ietf.ALPN.DRAFT_17);
|
|
67
|
-
});
|
|
68
|
-
test("integration: ietf draft-18", async () => {
|
|
69
|
-
await runPublishSubscribeFlow(Ietf.ALPN.DRAFT_18);
|
|
70
|
-
});
|
|
71
|
-
test("integration: ietf draft-19", async () => {
|
|
72
|
-
await runPublishSubscribeFlow(Ietf.ALPN.DRAFT_19);
|
|
73
|
-
});
|
|
74
|
-
test("integration: subscribe to non-existent broadcast", async () => {
|
|
75
|
-
const pair = createMockTransportPair("");
|
|
76
|
-
const [client, server] = await Promise.all([
|
|
77
|
-
connect(url, { transport: pair.client }),
|
|
78
|
-
accept(pair.server, url, { version: Ietf.Version.DRAFT_14 }),
|
|
79
|
-
]);
|
|
80
|
-
// Client tries to consume a broadcast that nobody is publishing
|
|
81
|
-
const remote = client.consume(Path.from("nonexistent"));
|
|
82
|
-
const track = remote.subscribe("video", 0);
|
|
83
|
-
// Reading should eventually error since the broadcast doesn't exist
|
|
84
|
-
await expect((async () => {
|
|
85
|
-
await track.readString();
|
|
86
|
-
})()).rejects.toThrow();
|
|
87
|
-
client.close();
|
|
88
|
-
server.close();
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=integration.test.js.map
|
package/integration.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../src/integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"bun:test\";\nimport { Broadcast } from \"./broadcast.ts\";\nimport { accept, connect } from \"./connection/index.ts\";\nimport * as Ietf from \"./ietf/index.ts\";\nimport * as Lite from \"./lite/index.ts\";\nimport { createMockTransportPair } from \"./mock.ts\";\nimport * as Path from \"./path.ts\";\n\nconst url = new URL(\"https://localhost:4443/test\");\n\nasync function runPublishSubscribeFlow(protocol: string, version?: number) {\n\tconst pair = createMockTransportPair(protocol);\n\n\tconst [client, server] = await Promise.all([\n\t\tconnect(url, { transport: pair.client }),\n\t\taccept(pair.server, url, version !== undefined ? { version } : undefined),\n\t]);\n\n\t// Server publishes a broadcast\n\tconst broadcast = new Broadcast();\n\tserver.publish(Path.from(\"test\"), broadcast);\n\n\t// Client discovers announced broadcast\n\tconst announced = client.announced();\n\tconst entry = await announced.next();\n\tif (!entry) throw new Error(\"expected entry\");\n\texpect(entry.path).toBe(\"test\" as Path.Valid);\n\texpect(entry.active).toBe(true);\n\n\t// Client consumes the broadcast and subscribes to a track\n\tconst remote = client.consume(Path.from(\"test\"));\n\tconst track = remote.subscribe(\"video\", 0);\n\n\t// Server handles the subscription request\n\tconst req = await broadcast.requested();\n\tif (!req) throw new Error(\"expected req\");\n\texpect(req.track.name).toBe(\"video\");\n\n\t// Server writes data\n\treq.track.writeString(\"hello\");\n\n\t// Client reads data\n\tconst data = await track.readString();\n\texpect(data).toBe(\"hello\");\n\n\t// Cleanup\n\treq.track.close();\n\tbroadcast.close();\n\tannounced.close();\n\tremote.close();\n\tclient.close();\n\tserver.close();\n}\n\ntest(\"integration: lite draft-01\", async () => {\n\tawait runPublishSubscribeFlow(\"\", Lite.Version.DRAFT_01);\n});\n\ntest(\"integration: lite draft-02\", async () => {\n\tawait runPublishSubscribeFlow(\"\", Lite.Version.DRAFT_02);\n});\n\ntest(\"integration: lite draft-03\", async () => {\n\tawait runPublishSubscribeFlow(Lite.ALPN_03);\n});\n\ntest(\"integration: ietf draft-14\", async () => {\n\tawait runPublishSubscribeFlow(\"\", Ietf.Version.DRAFT_14);\n});\n\ntest(\"integration: ietf draft-15\", async () => {\n\tawait runPublishSubscribeFlow(Ietf.ALPN.DRAFT_15);\n});\n\ntest(\"integration: ietf draft-16\", async () => {\n\tawait runPublishSubscribeFlow(Ietf.ALPN.DRAFT_16);\n});\n\ntest(\"integration: ietf draft-17\", async () => {\n\tawait runPublishSubscribeFlow(Ietf.ALPN.DRAFT_17);\n});\n\ntest(\"integration: ietf draft-18\", async () => {\n\tawait runPublishSubscribeFlow(Ietf.ALPN.DRAFT_18);\n});\n\ntest(\"integration: ietf draft-19\", async () => {\n\tawait runPublishSubscribeFlow(Ietf.ALPN.DRAFT_19);\n});\n\ntest(\"integration: subscribe to non-existent broadcast\", async () => {\n\tconst pair = createMockTransportPair(\"\");\n\n\tconst [client, server] = await Promise.all([\n\t\tconnect(url, { transport: pair.client }),\n\t\taccept(pair.server, url, { version: Ietf.Version.DRAFT_14 }),\n\t]);\n\n\t// Client tries to consume a broadcast that nobody is publishing\n\tconst remote = client.consume(Path.from(\"nonexistent\"));\n\tconst track = remote.subscribe(\"video\", 0);\n\n\t// Reading should eventually error since the broadcast doesn't exist\n\tawait expect(\n\t\t(async () => {\n\t\t\tawait track.readString();\n\t\t})(),\n\t).rejects.toThrow();\n\n\tclient.close();\n\tserver.close();\n});\n"]}
|
package/lite/origin.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/lite/origin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,8DAGR,CAAC;AAElB,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAOrC"}
|
package/lite/origin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/lite/origin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,EAAE,8CAA8C,CAAC,CAAC;KAC5G,KAAK,CAAC,QAAQ,CAAC,CAAC;AAIlB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY;IAC3B,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5B,mBAAmB;IACnB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAoB,CAAC;IAC1C,yDAAyD;IACzD,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import * as z from \"zod/mini\";\n\n/**\n * A relay origin id, encoded as a 62-bit varint on the wire.\n *\n * The {@link OriginSchema} validates any incoming value and brands it so the\n * type system enforces \"only validated origins flow into hop lists.\" Internal\n * code that synthesizes an id (e.g. {@link randomOrigin}) uses\n * `OriginSchema.parse(...)` to produce a branded value from the raw bigint.\n */\nexport const OriginSchema = z\n\t.bigint()\n\t.check(z.refine((value) => value >= 0n && value < 1n << 62n, \"Origin must be a non-negative 62-bit integer\"))\n\t.brand(\"Origin\");\n\nexport type Origin = z.infer<typeof OriginSchema>;\n\n/**\n * Generate a fresh origin with a random non-zero id.\n *\n * `crypto.getRandomValues` is overkill for best-effort loop detection, but\n * used for slightly better distribution than `Math.random` at negligible cost.\n *\n * TEMPORARY: the wire format allows 62 bits, but older `@moq/lite` JS clients\n * decode `AnnounceInterest.exclude_hop` as a u53 (number) and throw on anything\n * > 2^53-1. To keep those clients alive against fresh peers, we cap the random\n * id at 53 bits. Restore to 62 bits once the u62 fix has propagated to deployed\n * bundles. Mirrors `Origin::random` in rs/moq-net.\n */\nexport function randomOrigin(): Origin {\n\tconst buf = new BigUint64Array(1);\n\tcrypto.getRandomValues(buf);\n\t// Mask to 53 bits.\n\tconst raw = buf[0] & 0x1f_ffff_ffff_ffffn;\n\t// Guard against the (astronomically unlikely) zero draw.\n\treturn OriginSchema.parse(raw === 0n ? 1n : raw);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscriber.test.d.ts","sourceRoot":"","sources":["../../src/lite/subscriber.test.ts"],"names":[],"mappings":""}
|
package/lite/subscriber.test.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/* @ts-self-types="./subscriber.test.d.ts" */
|
|
2
|
-
import { expect, spyOn, test } from "bun:test";
|
|
3
|
-
import { createBandwidth } from "../bandwidth.js";
|
|
4
|
-
import { OriginSchema } from "./origin.js";
|
|
5
|
-
import { Subscriber } from "./subscriber.js";
|
|
6
|
-
import { Version } from "./version.js";
|
|
7
|
-
test("closing the subscriber suppresses probe stream warnings", async () => {
|
|
8
|
-
let readable;
|
|
9
|
-
const quic = {
|
|
10
|
-
createBidirectionalStream: async () => ({
|
|
11
|
-
readable: new ReadableStream({ start: (controller) => (readable = controller) }),
|
|
12
|
-
writable: new WritableStream(),
|
|
13
|
-
}),
|
|
14
|
-
};
|
|
15
|
-
const subscriber = new Subscriber(quic, Version.DRAFT_03, OriginSchema.parse(1n), createBandwidth());
|
|
16
|
-
const warn = spyOn(console, "warn").mockImplementation(() => { });
|
|
17
|
-
try {
|
|
18
|
-
const probe = subscriber.runProbe();
|
|
19
|
-
await Promise.resolve();
|
|
20
|
-
await Promise.resolve();
|
|
21
|
-
subscriber.close();
|
|
22
|
-
readable.error(new Error("session closed"));
|
|
23
|
-
await probe;
|
|
24
|
-
expect(warn).not.toHaveBeenCalled();
|
|
25
|
-
}
|
|
26
|
-
finally {
|
|
27
|
-
warn.mockRestore();
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
//# sourceMappingURL=subscriber.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscriber.test.js","sourceRoot":"","sources":["../../src/lite/subscriber.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;IAC1E,IAAI,QAAsD,CAAC;IAC3D,MAAM,IAAI,GAAG;QACZ,yBAAyB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACvC,QAAQ,EAAE,IAAI,cAAc,CAAa,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC;YAC5F,QAAQ,EAAE,IAAI,cAAc,EAAc;SAC1C,CAAC;KACyB,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEjE,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEpC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;QAEZ,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACrC,CAAC;YAAS,CAAC;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC","sourcesContent":["import { expect, spyOn, test } from \"bun:test\";\nimport { createBandwidth } from \"../bandwidth.ts\";\nimport { OriginSchema } from \"./origin.ts\";\nimport { Subscriber } from \"./subscriber.ts\";\nimport { Version } from \"./version.ts\";\n\ntest(\"closing the subscriber suppresses probe stream warnings\", async () => {\n\tlet readable!: ReadableStreamDefaultController<Uint8Array>;\n\tconst quic = {\n\t\tcreateBidirectionalStream: async () => ({\n\t\t\treadable: new ReadableStream<Uint8Array>({ start: (controller) => (readable = controller) }),\n\t\t\twritable: new WritableStream<Uint8Array>(),\n\t\t}),\n\t} as unknown as WebTransport;\n\tconst subscriber = new Subscriber(quic, Version.DRAFT_03, OriginSchema.parse(1n), createBandwidth());\n\tconst warn = spyOn(console, \"warn\").mockImplementation(() => {});\n\n\ttry {\n\t\tconst probe = subscriber.runProbe();\n\n\t\tawait Promise.resolve();\n\t\tawait Promise.resolve();\n\t\tsubscriber.close();\n\t\treadable.error(new Error(\"session closed\"));\n\t\tawait probe;\n\n\t\texpect(warn).not.toHaveBeenCalled();\n\t} finally {\n\t\twarn.mockRestore();\n\t}\n});\n"]}
|
package/lite/track.test.d.ts
DELETED
package/lite/track.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"track.test.d.ts","sourceRoot":"","sources":["../../src/lite/track.test.ts"],"names":[],"mappings":""}
|
package/lite/track.test.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/* @ts-self-types="./track.test.d.ts" */
|
|
2
|
-
import { expect, test } from "bun:test";
|
|
3
|
-
import * as Path from "../path.js";
|
|
4
|
-
import { Reader, Writer } from "../stream.js";
|
|
5
|
-
import { Track, TrackInfo } from "./track.js";
|
|
6
|
-
import { Version } from "./version.js";
|
|
7
|
-
function concat(chunks) {
|
|
8
|
-
const total = chunks.reduce((sum, c) => sum + c.byteLength, 0);
|
|
9
|
-
const out = new Uint8Array(total);
|
|
10
|
-
let offset = 0;
|
|
11
|
-
for (const c of chunks) {
|
|
12
|
-
out.set(c, offset);
|
|
13
|
-
offset += c.byteLength;
|
|
14
|
-
}
|
|
15
|
-
return out;
|
|
16
|
-
}
|
|
17
|
-
async function bytes(f) {
|
|
18
|
-
const written = [];
|
|
19
|
-
const writer = new Writer(new WritableStream({ write: (chunk) => void written.push(new Uint8Array(chunk)) }));
|
|
20
|
-
await f(writer);
|
|
21
|
-
writer.close();
|
|
22
|
-
await writer.closed;
|
|
23
|
-
return concat(written);
|
|
24
|
-
}
|
|
25
|
-
test("TrackInfo round-trips on draft-05", async () => {
|
|
26
|
-
const info = new TrackInfo({
|
|
27
|
-
priority: 7,
|
|
28
|
-
ordered: false,
|
|
29
|
-
maxLatency: 2000,
|
|
30
|
-
timescale: 90000,
|
|
31
|
-
});
|
|
32
|
-
const reader = new Reader(undefined, await bytes((w) => info.encode(w, Version.DRAFT_05_WIP)));
|
|
33
|
-
const got = await TrackInfo.decode(reader, Version.DRAFT_05_WIP);
|
|
34
|
-
expect(got.priority).toBe(7);
|
|
35
|
-
expect(got.ordered).toBe(false);
|
|
36
|
-
expect(got.maxLatency).toBe(2000);
|
|
37
|
-
expect(got.timescale).toBe(90000);
|
|
38
|
-
});
|
|
39
|
-
test("Track request round-trips on draft-05", async () => {
|
|
40
|
-
const msg = new Track({ broadcast: Path.from("room"), track: "video" });
|
|
41
|
-
const reader = new Reader(undefined, await bytes((w) => msg.encode(w, Version.DRAFT_05_WIP)));
|
|
42
|
-
const got = await Track.decode(reader, Version.DRAFT_05_WIP);
|
|
43
|
-
expect(got.broadcast).toBe(Path.from("room"));
|
|
44
|
-
expect(got.track).toBe("video");
|
|
45
|
-
});
|
|
46
|
-
test("TrackInfo rejects zero timescale", () => {
|
|
47
|
-
expect(() => new TrackInfo({ timescale: 0 })).toThrow(/timescale/);
|
|
48
|
-
});
|
|
49
|
-
test("TRACK_INFO is rejected before draft-05", async () => {
|
|
50
|
-
const info = new TrackInfo({ timescale: 90000 });
|
|
51
|
-
await expect(bytes((w) => info.encode(w, Version.DRAFT_04))).rejects.toThrow();
|
|
52
|
-
});
|
|
53
|
-
//# sourceMappingURL=track.test.js.map
|
package/lite/track.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"track.test.js","sourceRoot":"","sources":["../../src/lite/track.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"bun:test\";\nimport * as Path from \"../path.ts\";\nimport { Reader, Writer } from \"../stream.ts\";\nimport { Track, TrackInfo } from \"./track.ts\";\nimport { Version } from \"./version.ts\";\n\nfunction concat(chunks: Uint8Array[]): Uint8Array {\n\tconst total = chunks.reduce((sum, c) => sum + c.byteLength, 0);\n\tconst out = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const c of chunks) {\n\t\tout.set(c, offset);\n\t\toffset += c.byteLength;\n\t}\n\treturn out;\n}\n\nasync function bytes(f: (w: Writer) => Promise<void>): Promise<Uint8Array> {\n\tconst written: Uint8Array[] = [];\n\tconst writer = new Writer(\n\t\tnew WritableStream<Uint8Array>({ write: (chunk) => void written.push(new Uint8Array(chunk)) }),\n\t);\n\tawait f(writer);\n\twriter.close();\n\tawait writer.closed;\n\treturn concat(written);\n}\n\ntest(\"TrackInfo round-trips on draft-05\", async () => {\n\tconst info = new TrackInfo({\n\t\tpriority: 7,\n\t\tordered: false,\n\t\tmaxLatency: 2000,\n\t\ttimescale: 90000,\n\t});\n\tconst reader = new Reader(undefined, await bytes((w) => info.encode(w, Version.DRAFT_05_WIP)));\n\tconst got = await TrackInfo.decode(reader, Version.DRAFT_05_WIP);\n\texpect(got.priority).toBe(7);\n\texpect(got.ordered).toBe(false);\n\texpect(got.maxLatency).toBe(2000);\n\texpect(got.timescale).toBe(90000);\n});\n\ntest(\"Track request round-trips on draft-05\", async () => {\n\tconst msg = new Track({ broadcast: Path.from(\"room\"), track: \"video\" });\n\tconst reader = new Reader(undefined, await bytes((w) => msg.encode(w, Version.DRAFT_05_WIP)));\n\tconst got = await Track.decode(reader, Version.DRAFT_05_WIP);\n\texpect(got.broadcast).toBe(Path.from(\"room\"));\n\texpect(got.track).toBe(\"video\");\n});\n\ntest(\"TrackInfo rejects zero timescale\", () => {\n\texpect(() => new TrackInfo({ timescale: 0 })).toThrow(/timescale/);\n});\n\ntest(\"TRACK_INFO is rejected before draft-05\", async () => {\n\tconst info = new TrackInfo({ timescale: 90000 });\n\tawait expect(bytes((w) => info.encode(w, Version.DRAFT_04))).rejects.toThrow();\n});\n"]}
|
package/path.test.d.ts
DELETED
package/path.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"path.test.d.ts","sourceRoot":"","sources":["../src/path.test.ts"],"names":[],"mappings":""}
|