@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 +2 -1
- package/lib/webtransport.browser.js +31 -2
- package/package.json +1 -1
package/lib/server.js
CHANGED
|
@@ -361,7 +361,8 @@ export class HttpServer {
|
|
|
361
361
|
break
|
|
362
362
|
}
|
|
363
363
|
} catch (/** @type {any} */ err) {
|
|
364
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|