@fails-components/webtransport 1.3.1 → 1.4.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/browser/browser.js"],"names":[],"mappings":"AAOA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAiCtD;IA9BC,aAA6B;IAC7B,iBAAyC;IACzC,oBAAsC;IACtC,uCACmD;IACnD,wCACoD;IAEpD,oCAC8C;IAC9C,qCAC+C;IAE/C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAC7D,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IACtB,wBAAwB;IAExB,WAFW,SAAS,CAEM;IAC1B,+BAA+B;IAC/B,uBADW,SAAS,GAAC,MAAM,CACW;IAGxC;;OAEG;IACH,0BAFW;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,QA6ExB;IAED;;OAEG;IAEH,oBAHW,MAAM,QAkHhB;IAED,oBAGC;CACF"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../lib/http2/browser/browser.js"],"names":[],"mappings":"AAOA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAiCtD;IA9BC,aAA6B;IAC7B,iBAAyC;IACzC,oBAAsC;IACtC,uCACmD;IACnD,wCACoD;IAEpD,oCAC8C;IAC9C,qCAC+C;IAE/C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAC7D,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IACtB,wBAAwB;IAExB,WAFW,SAAS,CAEM;IAC1B,+BAA+B;IAC/B,uBADW,SAAS,GAAC,MAAM,CACW;IAGxC;;OAEG;IACH,0BAFW;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,QA+ExB;IAED;;OAEG;IAEH,oBAHW,MAAM,QAkHhB;IAED,oBAGC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/client.js"],"names":[],"mappings":";AAOA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAkCtD;IA7BC,aAAwB;IACxB,iBAAyC;IACzC,mEAAyE;IACzE,oBAAsC;IACtC,8BAAqD;IACrD,sBAA+C;IAC/C,mBAAyC;IACzC,uCACmD;IACnD,wCACoD;IAEpD,oCAC8C;IAC9C,qCAC+C;IAE/C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAC7D,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IAGxB,wBAiKC;IAnGC,0DAGC;IAkGH;;OAEG;IACH,oBAFW,MAAM,QAkEhB;IAED,oBAEC;CACF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/client.js"],"names":[],"mappings":";AAOA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAkCtD;IA7BC,aAAwB;IACxB,iBAAyC;IACzC,mEAAyE;IACzE,oBAAsC;IACtC,8BAAqD;IACrD,sBAA+C;IAC/C,mBAAyC;IACzC,uCACmD;IACnD,wCACoD;IAEpD,oCAC8C;IAC9C,qCAC+C;IAE/C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAC7D,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IAGxB,wBAiKC;IAnGC,0DAGC;IAkGH;;OAEG;IACH,oBAFW,MAAM,QAuEhB;IAED,oBAEC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/server.js"],"names":[],"mappings":";;AASA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAuWtD;IAlWC,aAAwB;IACxB,eAA0B;IAE1B,aAAqC;IAMrC,uCACmD;IACnD,wCACoD;IAEpD,oCAA2E;IAC3E,qCAC2C;IAE3C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAE7D,sCAAsC;IACtC,OADW,OAAO,MAAM,EAAE,OAAO,CAAC,CACnB;IACf,2BAA8B;IAC9B,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IAEtB,2BAA8B;IAG9B,iNAgBE;IAqG6B,4BAYb;IA6LpB;;;OAGG;IACH,4BAHW,OAAO,OAAO,EAAE,mBAAmB,GAClC;QAAC,aAAa,EAAE,MAAM,GAAC,SAAS,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC,CA6BvE;IAED,oBAEC;IAED,mBAGC;IAED;;;;SAIK;IAEL,iBALW,MAAM,GAAC,MAAM,EAAE,WACf,MAAM,GAAC,MAAM,EAAE,aACf,OAAO,QAKjB;IAED;;OAEG;IACH,2BAFW,OAAO,QAIjB;IAED;;OAEG;IACH,cAFW,MAAM,QAIhB;IAED;;OAEG;IACH,+CAFW;QAAC,MAAM,EAAE,OAAO,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,iBA4BvE;IAED;;OAEG;IACH,2IAFW,OAAO,gBAAgB,EAAE,0BAA0B,QAmL7D;CACF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../lib/http2/node/server.js"],"names":[],"mappings":";;AASA;IACE;;OAEG;IACH,kBAFW,OAAO,gBAAgB,EAAE,mBAAmB,EAyYtD;IApYC,aAAwB;IACxB,eAA0B;IAE1B,aAAqC;IAMrC,uCACmD;IACnD,wCACoD;IAEpD,oCAA2E;IAC3E,qCAC2C;IAE3C,wCACgD;IAChD,yCAC2D;IAE3D,yCACiD;IACjD,0CAC6D;IAE7D,sCAAsC;IACtC,OADW,OAAO,MAAM,EAAE,OAAO,CAAC,CACnB;IACf,2BAA8B;IAC9B,oDAAoD;IAEpD,OAFW,OAAO,kBAAkB,EAAE,UAAU,CAE1B;IAEtB,2BAA8B;IAG9B,iNAgBE;IAqG6B,4BAYb;IA+NpB;;;OAGG;IACH,4BAHW,OAAO,OAAO,EAAE,mBAAmB,GAClC;QAAC,aAAa,EAAE,MAAM,GAAC,SAAS,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC,CA+BvE;IAED,oBAEC;IAED,mBAGC;IAED;;;;SAIK;IAEL,iBALW,MAAM,GAAC,MAAM,EAAE,WACf,MAAM,GAAC,MAAM,EAAE,aACf,OAAO,QAKjB;IAED;;OAEG;IACH,2BAFW,OAAO,QAIjB;IAED;;OAEG;IACH,cAFW,MAAM,QAIhB;IAED;;OAEG;IACH,+CAFW;QAAC,MAAM,EAAE,OAAO,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,iBA4BvE;IAED;;OAEG;IACH,2IAFW,OAAO,gBAAgB,EAAE,0BAA0B,QAmL7D;CACF"}
@@ -54,10 +54,12 @@ export class Http2WebTransportBrowser {
54
54
  (/** @type {string} */ el) => 'webtransport_' + el
55
55
  )
56
56
  if (this.protocols.length > 0) {
57
+ const oldprotocols = protocols
57
58
  protocols = protocols
58
59
  .filter((el) => el !== 'kDraft1')
59
60
  .map((el) => this.protocols.map((el2) => el + '_' + el2))
60
61
  .flat(1)
62
+ protocols.push(...oldprotocols) // also need to support no protocol selection
61
63
  }
62
64
  // eslint-disable-next-line no-undef
63
65
  this.clientInt = new WebSocket(url, protocols)
@@ -222,7 +222,12 @@ export class Http2WebTransportClient {
222
222
  }
223
223
  if (this.protocols.length > 0) {
224
224
  // @ts-ignore
225
- requestOpts['wt-available-protocols'] = this.protocols.join(',')
225
+ requestOpts['wt-available-protocols'] =
226
+ '"' +
227
+ this.protocols
228
+ .map((el) => el.replace(/\\/g, '\\\\').replace(/"/g, '\\"'))
229
+ .join('","') +
230
+ '"'
226
231
  }
227
232
 
228
233
  const stream = this.clientInt.request(requestOpts)
@@ -241,6 +241,40 @@ export class Http2WebTransportServer {
241
241
  header['wt-available-protocols'] = obj.webtransportProt
242
242
  }
243
243
  }
244
+ if (
245
+ header[':protocol'] === 'webtransport' &&
246
+ header['wt-available-protocols']
247
+ ) {
248
+ let splitted = header['wt-available-protocols']
249
+ // @ts-ignore
250
+ .split(',')
251
+ .map((/** @type {string} */ el) => el.trim())
252
+ if (
253
+ splitted.some(
254
+ (/** @type {string} */ el) =>
255
+ typeof el !== 'string' ||
256
+ el.length < 2 ||
257
+ el[0] !== '"' ||
258
+ el.at(-1) !== '"'
259
+ )
260
+ ) {
261
+ stream.respond({
262
+ ':status': '406'
263
+ })
264
+ stream.close(constants.NGHTTP2_REFUSED_STREAM)
265
+ return
266
+ }
267
+ splitted = splitted.map((/** @type {string} */ el) => el.slice(1, -1))
268
+ if (
269
+ splitted.some((/** @type {string} */ el) => /\\([^"\\])/.test(el))
270
+ ) {
271
+ stream.close(constants.NGHTTP2_REFUSED_STREAM)
272
+ return
273
+ }
274
+ header['wt-available-protocols'] = splitted.map(
275
+ (/** @type {string} */ el) => el.replace(/\\(["\\])/g, '$1')
276
+ )
277
+ }
244
278
  if (header[':protocol'] !== 'webtransport' && !websocketProt) {
245
279
  stream.respond({
246
280
  ':status': '406'
@@ -393,11 +427,13 @@ export class Http2WebTransportServer {
393
427
  prots = prots.filter((el) => el[1] === selWtVersion)
394
428
  /** @type {{websocketProt: string|undefined, webtransportProt?: string}} */
395
429
  const retObj = { websocketProt: prots[0].slice(0, 2).join('_') }
396
- if (prots[0][2]) {
430
+ if (prots.some((el) => el[2])) {
397
431
  // @ts-ignore
398
432
  retObj.webtransportProt = [
399
- ...new Set(prots.map((el) => el.slice(2).join('_')))
400
- ].join(',')
433
+ ...new Set(
434
+ prots.filter((el) => el[2]).map((el) => el.slice(2).join('_'))
435
+ )
436
+ ]
401
437
  }
402
438
  return retObj
403
439
  } else return { websocketProt: undefined }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fails-components/webtransport",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "A component to add webtransport support (server and client) to node.js using libquiche",
5
5
  "exports": {
6
6
  ".": {