(opts, cb)
| 26 | } |
| 27 | |
| 28 | async function setupServer(opts, cb) { |
| 29 | const certificate = await generateWebTransportCertificate( |
| 30 | [{ shortName: "CN", value: "localhost" }], |
| 31 | { |
| 32 | days: 13, // the total length of the validity period MUST NOT exceed two weeks (https://w3c.github.io/webtransport/#custom-certificate-requirements) |
| 33 | }, |
| 34 | ); |
| 35 | |
| 36 | const engine = new eio.Server(opts); |
| 37 | |
| 38 | const h3Server = new Http3Server({ |
| 39 | port: 0, // random port |
| 40 | host: "0.0.0.0", |
| 41 | secret: "changeit", |
| 42 | cert: certificate.cert, |
| 43 | privKey: certificate.private, |
| 44 | }); |
| 45 | |
| 46 | (async () => { |
| 47 | try { |
| 48 | const stream = await h3Server.sessionStream("/engine.io/"); |
| 49 | const sessionReader = stream.getReader(); |
| 50 | |
| 51 | while (true) { |
| 52 | const { done, value } = await sessionReader.read(); |
| 53 | if (done) { |
| 54 | break; |
| 55 | } |
| 56 | engine.onWebTransportSession(value); |
| 57 | } |
| 58 | } catch (ex) { |
| 59 | console.error("Server error", ex); |
| 60 | } |
| 61 | })(); |
| 62 | |
| 63 | h3Server.startServer(); |
| 64 | |
| 65 | await h3Server.ready; |
| 66 | |
| 67 | cb({ engine, h3Server, certificate }); |
| 68 | } |
| 69 | |
| 70 | function setup(opts, cb) { |
| 71 | setupServer(opts, async ({ engine, h3Server, certificate }) => { |
no test coverage detected