import * as moqWebTransportNode from "@moq/web-transport";
// bun build --target=node ./node_modules/@moq/web-transport/src/index.ts --outdir=moq-wt-node-bundle
// import * as moqWebTransportNode from "./moq-wt-node-bundle/index.js";
import { readFileSync } from "node:fs";
const cert = readFileSync("./cert.pem");
const key = readFileSync("./key.pem");
const encoder = new TextEncoder();
let now;
// moqWebTransportNode.install();
globalThis.WebTransport = moqWebTransportNode.default;
const server = moqWebTransportNode.NapiServer.bind("127.0.0.1:8080", cert, key)
.accept().then(
async (napiRequest) => {
// napiRequest.url is a Promise? Why?
// console.log(await napiRequest.url);
const napiSession = await napiRequest.ok();
return new WebTransport(napiSession);
},
);
server.then(async (clientSession) => {
await clientSession.ready;
const { readable: serverReadable, writable: serverWritable } =
clientSession.datagrams;
serverReadable.pipeThrough(new TextDecoderStream())
.pipeThrough(
new TransformStream({
transform(value, controller) {
console.log(`Received value from WebTransport client: ${value}`);
controller.enqueue(value.toUpperCase());
},
}),
).pipeThrough(new TextEncoderStream()).pipeTo(serverWritable);
});
const client = new WebTransport("https://127.0.0.1:8080", {
serverCertificateDisableVerify: true,
});
await client.ready;
client.closed.then(({ closeCode, reason }) => {
console.log({ closeCode, reason });
// Server (?) times out and exits in 30 seconds?
console.log((performance.now() - now) / 1000);
}).catch((e) => {
console.log(e.stack);
console.trace();
});
const { readable: clientReadable, writable: clientWritable } = client.datagrams;
const clientWriter = clientWritable.getWriter();
clientReadable.pipeThrough(new TextDecoderStream()).pipeTo(
new WritableStream({
write(value) {
console.log(`Received value from WebTransport server: ${value}`);
now = performance.now();
},
}),
).catch((e) => {
console.log(e.stack);
console.trace();
});
clientWriter.write(encoder.encode("test"));
$ bun moq-web-transport-node-server-client-test.js
Received value from WebTransport client: test
Received value from WebTransport server: TEST
{
closeCode: 0,
reason: "connection error: timed out",
}
30.018914800999998
(Node.js WebTransport via NAPI-RS)
Steps to reproduce:
moq-web-transport-node-server-client-test.js