@fails-components/webtransport 1.0.1 → 1.0.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/lib/server.js CHANGED
@@ -361,7 +361,8 @@ export class HttpServer {
361
361
  break
362
362
  }
363
363
  } catch (/** @type {any} */ err) {
364
- const error = new WebTransportError('Opening handshake failed.')
364
+ log('Problem opening transports:', err)
365
+ const error = new WebTransportError('Opening transport failed.')
365
366
  error.stack = err.stack
366
367
 
367
368
  throw error
@@ -2,6 +2,9 @@ import { WebTransportBase } from './webtransportbase.js'
2
2
  import { HttpWTSession } from './session.js'
3
3
  import { HttpClient } from './client.js'
4
4
  import { Http2WebTransportBrowser } from './http2/browser/browser.js'
5
+ import { logger } from './utils.js'
6
+
7
+ const log = logger(`webtransport:browser()`)
5
8
 
6
9
  /**
7
10
  * @typedef {import('./dom').WebTransport} WebTransport
@@ -16,6 +19,30 @@ import { Http2WebTransportBrowser } from './http2/browser/browser.js'
16
19
  * @typedef {import('node:stream/web').ReadableStream<T>} ReadableStream<T>
17
20
  */
18
21
 
22
+ let serverCertificateHashesNotSupported = false
23
+ let webtransportSupported = false
24
+
25
+ // @ts-ignore
26
+ if (globalThis.WebTransport) {
27
+ webtransportSupported = true
28
+ try {
29
+ // @ts-ignore
30
+ // eslint-disable-next-line no-undef
31
+ const transport = new WebTransport('https://example.org/test', {
32
+ serverCertificateHashes: []
33
+ })
34
+ transport.close()
35
+ } catch (error) {
36
+ // @ts-ignore
37
+ if (error?.name === 'NotSupportedError') {
38
+ // note: we also do not support this, but http2 is a different transport
39
+ // so we assume that the UDP and TCP part have different capabilities
40
+ log('serverCertificateHashesNotSupported')
41
+ serverCertificateHashesNotSupported = true
42
+ }
43
+ }
44
+ }
45
+
19
46
  /**
20
47
  * @typedef {import('./dom').WebTransport} WebTransportInterface
21
48
  *
@@ -102,8 +129,10 @@ export class WebTransportPolyfill {
102
129
  .then((val) => this.drainingRes(val))
103
130
  .catch((error) => this.drainingRej(error))
104
131
  }
105
- // @ts-ignore
106
- if (globalThis.WebTransport) {
132
+ if (
133
+ webtransportSupported &&
134
+ (!args?.serverCertificateHashes || !serverCertificateHashesNotSupported)
135
+ ) {
107
136
  /** @type {WebTransport|WebTransportPonyfill} */
108
137
  // @ts-ignore
109
138
  // eslint-disable-next-line no-undef
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fails-components/webtransport",
3
- "version": "1.0.1",
3
+ "version": "1.0.4",
4
4
  "description": "A component to add webtransport support (server and client) to node.js using libquiche",
5
5
  "exports": {
6
6
  ".": {