werift 0.24.4 → 0.25.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.
Files changed (166) hide show
  1. package/README.md +116 -113
  2. package/lib/common/src/transport.d.ts +22 -2
  3. package/lib/common/src/transport.js +84 -26
  4. package/lib/common/src/transport.js.map +1 -1
  5. package/lib/ice/src/exceptions.d.ts +9 -0
  6. package/lib/ice/src/exceptions.js +23 -1
  7. package/lib/ice/src/exceptions.js.map +1 -1
  8. package/lib/ice/src/ice.d.ts +40 -0
  9. package/lib/ice/src/ice.js +194 -28
  10. package/lib/ice/src/ice.js.map +1 -1
  11. package/lib/ice/src/iceBase.d.ts +26 -0
  12. package/lib/ice/src/iceBase.js.map +1 -1
  13. package/lib/ice/src/stun/const.d.ts +7 -0
  14. package/lib/ice/src/stun/const.js +8 -0
  15. package/lib/ice/src/stun/const.js.map +1 -1
  16. package/lib/ice/src/stun/protocol.js +1 -4
  17. package/lib/ice/src/stun/protocol.js.map +1 -1
  18. package/lib/ice/src/stun/tcpProtocol.d.ts +7 -1
  19. package/lib/ice/src/stun/tcpProtocol.js +65 -14
  20. package/lib/ice/src/stun/tcpProtocol.js.map +1 -1
  21. package/lib/ice/src/stun/transaction.d.ts +12 -1
  22. package/lib/ice/src/stun/transaction.js +37 -4
  23. package/lib/ice/src/stun/transaction.js.map +1 -1
  24. package/lib/ice/src/turn/protocol.d.ts +40 -15
  25. package/lib/ice/src/turn/protocol.js +141 -32
  26. package/lib/ice/src/turn/protocol.js.map +1 -1
  27. package/lib/ice/src/types/model.d.ts +8 -0
  28. package/lib/ice/src/types/model.js.map +1 -1
  29. package/lib/index.mjs +6175 -4073
  30. package/lib/nonstandard/index.mjs +286 -1003
  31. package/lib/polyfill/dom.mjs +23794 -0
  32. package/lib/polyfill/index.mjs +23794 -0
  33. package/lib/rtp/src/extra/container/mp4/container.js +12 -4
  34. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  35. package/lib/rtp/src/extra/processor/mp4.js +8 -3
  36. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  37. package/lib/rtp/src/extra/processor/mp4Callback.js +3 -1
  38. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  39. package/lib/sctp/src/chunk.d.ts +5 -0
  40. package/lib/sctp/src/chunk.js +16 -11
  41. package/lib/sctp/src/chunk.js.map +1 -1
  42. package/lib/sctp/src/index.d.ts +3 -1
  43. package/lib/sctp/src/index.js +10 -1
  44. package/lib/sctp/src/index.js.map +1 -1
  45. package/lib/sctp/src/sctp.d.ts +12 -3
  46. package/lib/sctp/src/sctp.js +51 -18
  47. package/lib/sctp/src/sctp.js.map +1 -1
  48. package/lib/webrtc/src/const.js +2 -0
  49. package/lib/webrtc/src/const.js.map +1 -1
  50. package/lib/webrtc/src/errors.d.ts +9 -1
  51. package/lib/webrtc/src/errors.js +19 -0
  52. package/lib/webrtc/src/errors.js.map +1 -1
  53. package/lib/webrtc/src/media/codec.d.ts +5 -0
  54. package/lib/webrtc/src/media/codec.js +21 -0
  55. package/lib/webrtc/src/media/codec.js.map +1 -1
  56. package/lib/webrtc/src/media/codecCompatibility.d.ts +23 -0
  57. package/lib/webrtc/src/media/codecCompatibility.js +138 -0
  58. package/lib/webrtc/src/media/codecCompatibility.js.map +1 -0
  59. package/lib/webrtc/src/media/index.d.ts +1 -0
  60. package/lib/webrtc/src/media/index.js +1 -0
  61. package/lib/webrtc/src/media/index.js.map +1 -1
  62. package/lib/webrtc/src/media/router.d.ts +2 -0
  63. package/lib/webrtc/src/media/router.js +23 -3
  64. package/lib/webrtc/src/media/router.js.map +1 -1
  65. package/lib/webrtc/src/media/rtpReceiver.d.ts +12 -0
  66. package/lib/webrtc/src/media/rtpReceiver.js +35 -0
  67. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  68. package/lib/webrtc/src/media/rtpSender.d.ts +65 -4
  69. package/lib/webrtc/src/media/rtpSender.js +264 -35
  70. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  71. package/lib/webrtc/src/media/rtpTransceiver.d.ts +42 -0
  72. package/lib/webrtc/src/media/rtpTransceiver.js +157 -4
  73. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  74. package/lib/webrtc/src/media/track.d.ts +29 -1
  75. package/lib/webrtc/src/media/track.js +164 -5
  76. package/lib/webrtc/src/media/track.js.map +1 -1
  77. package/lib/webrtc/src/nonstandard/index.d.ts +0 -1
  78. package/lib/webrtc/src/nonstandard/index.js +0 -1
  79. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  80. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -1
  81. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  82. package/lib/webrtc/src/nonstandard/userMedia.d.ts +1 -2
  83. package/lib/webrtc/src/nonstandard/userMedia.js +30 -14
  84. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  85. package/lib/webrtc/src/peerConnection.d.ts +126 -5
  86. package/lib/webrtc/src/peerConnection.js +609 -136
  87. package/lib/webrtc/src/peerConnection.js.map +1 -1
  88. package/lib/webrtc/src/polyfill/api.d.ts +14 -0
  89. package/lib/webrtc/src/polyfill/api.js +23 -0
  90. package/lib/webrtc/src/polyfill/api.js.map +1 -0
  91. package/lib/webrtc/src/polyfill/browserIdentity.d.ts +11 -0
  92. package/lib/webrtc/src/polyfill/browserIdentity.js +59 -0
  93. package/lib/webrtc/src/polyfill/browserIdentity.js.map +1 -0
  94. package/lib/webrtc/src/polyfill/dom.d.ts +11 -0
  95. package/lib/webrtc/src/polyfill/dom.js +18 -0
  96. package/lib/webrtc/src/polyfill/dom.js.map +1 -0
  97. package/lib/webrtc/src/polyfill/existingMediaDevices.d.ts +2 -0
  98. package/lib/webrtc/src/polyfill/existingMediaDevices.js +22 -0
  99. package/lib/webrtc/src/polyfill/existingMediaDevices.js.map +1 -0
  100. package/lib/webrtc/src/polyfill/globals.d.ts +28 -0
  101. package/lib/webrtc/src/polyfill/globals.js +3 -0
  102. package/lib/webrtc/src/polyfill/globals.js.map +1 -0
  103. package/lib/webrtc/src/polyfill/index.d.ts +2 -0
  104. package/lib/webrtc/src/polyfill/index.js +19 -0
  105. package/lib/webrtc/src/polyfill/index.js.map +1 -0
  106. package/lib/webrtc/src/polyfill/install.d.ts +13 -0
  107. package/lib/webrtc/src/polyfill/install.js +266 -0
  108. package/lib/webrtc/src/polyfill/install.js.map +1 -0
  109. package/lib/webrtc/src/polyfill/mediaDevices.d.ts +38 -0
  110. package/lib/webrtc/src/polyfill/mediaDevices.js +228 -0
  111. package/lib/webrtc/src/polyfill/mediaDevices.js.map +1 -0
  112. package/lib/webrtc/src/polyfill/mediaRegister.d.ts +51 -0
  113. package/lib/webrtc/src/polyfill/mediaRegister.js +14 -0
  114. package/lib/webrtc/src/polyfill/mediaRegister.js.map +1 -0
  115. package/lib/webrtc/src/polyfill/peerConnectionConfig.d.ts +3 -0
  116. package/lib/webrtc/src/polyfill/peerConnectionConfig.js +52 -0
  117. package/lib/webrtc/src/polyfill/peerConnectionConfig.js.map +1 -0
  118. package/lib/webrtc/src/polyfill/registers/callback.d.ts +16 -0
  119. package/lib/webrtc/src/polyfill/registers/callback.js +57 -0
  120. package/lib/webrtc/src/polyfill/registers/callback.js.map +1 -0
  121. package/lib/webrtc/src/polyfill/registers/empty.d.ts +2 -0
  122. package/lib/webrtc/src/polyfill/registers/empty.js +28 -0
  123. package/lib/webrtc/src/polyfill/registers/empty.js.map +1 -0
  124. package/lib/webrtc/src/polyfill/registers/mp4Webm.d.ts +36 -0
  125. package/lib/webrtc/src/polyfill/registers/mp4Webm.js +242 -0
  126. package/lib/webrtc/src/polyfill/registers/mp4Webm.js.map +1 -0
  127. package/lib/webrtc/src/polyfill/registers/rtpRtcp.d.ts +17 -0
  128. package/lib/webrtc/src/polyfill/registers/rtpRtcp.js +143 -0
  129. package/lib/webrtc/src/polyfill/registers/rtpRtcp.js.map +1 -0
  130. package/lib/webrtc/src/polyfill/rtcSessionDescription.d.ts +18 -0
  131. package/lib/webrtc/src/polyfill/rtcSessionDescription.js +36 -0
  132. package/lib/webrtc/src/polyfill/rtcSessionDescription.js.map +1 -0
  133. package/lib/webrtc/src/polyfill/rtpCodec.d.ts +17 -0
  134. package/lib/webrtc/src/polyfill/rtpCodec.js +93 -0
  135. package/lib/webrtc/src/polyfill/rtpCodec.js.map +1 -0
  136. package/lib/webrtc/src/polyfill/selectSettings.d.ts +31 -0
  137. package/lib/webrtc/src/polyfill/selectSettings.js +156 -0
  138. package/lib/webrtc/src/polyfill/selectSettings.js.map +1 -0
  139. package/lib/webrtc/src/polyfill/sourceIo.d.ts +21 -0
  140. package/lib/webrtc/src/polyfill/sourceIo.js +298 -0
  141. package/lib/webrtc/src/polyfill/sourceIo.js.map +1 -0
  142. package/lib/webrtc/src/polyfill/trackStop.d.ts +4 -0
  143. package/lib/webrtc/src/polyfill/trackStop.js +16 -0
  144. package/lib/webrtc/src/polyfill/trackStop.js.map +1 -0
  145. package/lib/webrtc/src/sctpManager.d.ts +2 -1
  146. package/lib/webrtc/src/sctpManager.js +5 -2
  147. package/lib/webrtc/src/sctpManager.js.map +1 -1
  148. package/lib/webrtc/src/sdp.d.ts +1 -1
  149. package/lib/webrtc/src/sdp.js +5 -6
  150. package/lib/webrtc/src/sdp.js.map +1 -1
  151. package/lib/webrtc/src/sdpManager.d.ts +38 -1
  152. package/lib/webrtc/src/sdpManager.js +236 -30
  153. package/lib/webrtc/src/sdpManager.js.map +1 -1
  154. package/lib/webrtc/src/secureTransportManager.d.ts +43 -12
  155. package/lib/webrtc/src/secureTransportManager.js +123 -47
  156. package/lib/webrtc/src/secureTransportManager.js.map +1 -1
  157. package/lib/webrtc/src/transceiverManager.d.ts +91 -6
  158. package/lib/webrtc/src/transceiverManager.js +477 -62
  159. package/lib/webrtc/src/transceiverManager.js.map +1 -1
  160. package/lib/webrtc/src/transport/ice.d.ts +8 -0
  161. package/lib/webrtc/src/transport/ice.js +17 -1
  162. package/lib/webrtc/src/transport/ice.js.map +1 -1
  163. package/lib/webrtc/src/transport/sctp.d.ts +3 -2
  164. package/lib/webrtc/src/transport/sctp.js +8 -2
  165. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  166. package/package.json +13 -3
@@ -4,6 +4,13 @@ import { type Unpacked } from "./helper";
4
4
  import { Event } from "./imports/common";
5
5
  import { OutgoingSSNResetRequestParam, type StreamParam } from "./param";
6
6
  import type { Transport } from "./transport";
7
+ export declare const DEFAULT_SCTP_MTU = 1191;
8
+ export interface SCTPOptions {
9
+ /** SCTP packet MTU used for outbound DATA chunk fragmentation. */
10
+ mtu?: number;
11
+ }
12
+ export declare function maxPayloadSizeForMtu(mtu: number, dataChunkHeaderSize?: number): number;
13
+ export declare function validateSctpMtu(mtu: number): void;
7
14
  declare const SCTPConnectionStates: readonly ["new", "closed", "connected", "connecting"];
8
15
  type SCTPConnectionState = Unpacked<typeof SCTPConnectionStates>;
9
16
  export declare class SCTP {
@@ -46,6 +53,8 @@ export declare class SCTP {
46
53
  private sackImmediate;
47
54
  private sackTimeout;
48
55
  private cwnd;
56
+ readonly mtu: number;
57
+ private readonly maxPayloadSize;
49
58
  private fastRecoveryExit?;
50
59
  private fastRecoveryTransmit;
51
60
  private forwardTsnChunk?;
@@ -86,11 +95,11 @@ export declare class SCTP {
86
95
  private timerHeartbeatHandle?;
87
96
  private heartbeatInterval;
88
97
  private ssthresh?;
89
- constructor(transport: Transport, port?: number);
98
+ constructor(transport: Transport, port?: number, options?: SCTPOptions);
90
99
  private get isStopped();
91
100
  get maxChannels(): number | undefined;
92
- static client(transport: Transport, port?: number): SCTP;
93
- static server(transport: Transport, port?: number): SCTP;
101
+ static client(transport: Transport, port?: number, options?: SCTPOptions): SCTP;
102
+ static server(transport: Transport, port?: number, options?: SCTPOptions): SCTP;
94
103
  private handleData;
95
104
  private scheduleSack;
96
105
  private sendSack;
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RTCSctpCapabilities = exports.InboundStream = exports.SCTP = void 0;
3
+ exports.RTCSctpCapabilities = exports.InboundStream = exports.SCTP = exports.DEFAULT_SCTP_MTU = void 0;
4
+ exports.maxPayloadSizeForMtu = maxPayloadSizeForMtu;
5
+ exports.validateSctpMtu = validateSctpMtu;
4
6
  const crypto_1 = require("crypto");
5
7
  const chunk_1 = require("./chunk");
6
8
  const const_1 = require("./const");
@@ -13,7 +15,22 @@ const log = (0, common_1.debug)("werift/sctp/sctp");
13
15
  const COOKIE_LENGTH = 24;
14
16
  const COOKIE_LIFETIME = 60;
15
17
  const MAX_STREAMS = 65535;
16
- const USERDATA_MAX_LENGTH = 1200;
18
+ exports.DEFAULT_SCTP_MTU = 1191;
19
+ function maxPayloadSizeForMtu(mtu, dataChunkHeaderSize = chunk_1.SCTP_DATA_CHUNK_HEADER_SIZE) {
20
+ const headerSize = chunk_1.SCTP_COMMON_HEADER_SIZE + dataChunkHeaderSize;
21
+ if (mtu <= headerSize)
22
+ return 0;
23
+ const payloadBudget = mtu - headerSize;
24
+ return payloadBudget - (payloadBudget % chunk_1.SCTP_PADDING_MULTIPLE);
25
+ }
26
+ function validateSctpMtu(mtu) {
27
+ if (!Number.isSafeInteger(mtu) || mtu <= 0) {
28
+ throw new Error("SCTP MTU must be a positive integer");
29
+ }
30
+ if (maxPayloadSizeForMtu(mtu) === 0) {
31
+ throw new Error("SCTP MTU is too small for a DATA chunk");
32
+ }
33
+ }
17
34
  // # protocol constants
18
35
  const SCTP_DATA_LAST_FRAG = 0x01;
19
36
  const SCTP_DATA_FIRST_FRAG = 0x02;
@@ -48,7 +65,7 @@ class SCTP {
48
65
  // RFC 9260 §6.2.1(D-ii): available receiver window = a_rwnd - outstanding DATA.
49
66
  return Math.max(0, this.peerAdvertisedRwnd - this.flightSize);
50
67
  }
51
- constructor(transport, port = 5000) {
68
+ constructor(transport, port = 5000, options = {}) {
52
69
  Object.defineProperty(this, "transport", {
53
70
  enumerable: true,
54
71
  configurable: true,
@@ -260,8 +277,20 @@ class SCTP {
260
277
  enumerable: true,
261
278
  configurable: true,
262
279
  writable: true,
263
- value: 3 * USERDATA_MAX_LENGTH
280
+ value: void 0
264
281
  }); // Congestion Window
282
+ Object.defineProperty(this, "mtu", {
283
+ enumerable: true,
284
+ configurable: true,
285
+ writable: true,
286
+ value: void 0
287
+ });
288
+ Object.defineProperty(this, "maxPayloadSize", {
289
+ enumerable: true,
290
+ configurable: true,
291
+ writable: true,
292
+ value: void 0
293
+ });
265
294
  Object.defineProperty(this, "fastRecoveryExit", {
266
295
  enumerable: true,
267
296
  configurable: true,
@@ -477,7 +506,7 @@ class SCTP {
477
506
  writable: true,
478
507
  value: async (streamId, ppId, userData, { expiry, maxRetransmits, ordered, } = { expiry: undefined, maxRetransmits: undefined, ordered: true }) => {
479
508
  const streamSeqNum = ordered ? this.outboundStreamSeq[streamId] || 0 : 0;
480
- const fragments = Math.ceil(userData.length / USERDATA_MAX_LENGTH);
509
+ const fragments = Math.ceil(userData.length / this.maxPayloadSize);
481
510
  let pos = 0;
482
511
  const chunks = [];
483
512
  for (let fragment = 0; fragment < fragments; fragment++) {
@@ -496,11 +525,11 @@ class SCTP {
496
525
  chunk.streamId = streamId;
497
526
  chunk.streamSeqNum = streamSeqNum;
498
527
  chunk.protocol = ppId;
499
- chunk.userData = userData.slice(pos, pos + USERDATA_MAX_LENGTH);
528
+ chunk.userData = userData.slice(pos, pos + this.maxPayloadSize);
500
529
  chunk.bookSize = chunk.userData.length;
501
530
  chunk.expiry = expiry;
502
531
  chunk.maxRetransmits = maxRetransmits;
503
- pos += USERDATA_MAX_LENGTH;
532
+ pos += this.maxPayloadSize;
504
533
  this.localTsn = tsnPlusOne(this.localTsn);
505
534
  chunks.push(chunk);
506
535
  }
@@ -587,8 +616,8 @@ class SCTP {
587
616
  this.fastRecoveryExit = undefined;
588
617
  this.flightSize = 0;
589
618
  this.partialBytesAcked = 0;
590
- this.ssthresh = Math.max(Math.floor(this.cwnd / 2), 4 * USERDATA_MAX_LENGTH);
591
- this.cwnd = USERDATA_MAX_LENGTH;
619
+ this.ssthresh = Math.max(Math.floor(this.cwnd / 2), 4 * this.maxPayloadSize);
620
+ this.cwnd = this.maxPayloadSize;
592
621
  this.transmit();
593
622
  }
594
623
  });
@@ -636,6 +665,10 @@ class SCTP {
636
665
  this.heartbeatStart();
637
666
  }
638
667
  });
668
+ this.mtu = options.mtu ?? exports.DEFAULT_SCTP_MTU;
669
+ validateSctpMtu(this.mtu);
670
+ this.maxPayloadSize = maxPayloadSizeForMtu(this.mtu);
671
+ this.cwnd = 3 * this.maxPayloadSize;
639
672
  this.localPort = this.port;
640
673
  this.transport.onData = (buf) => {
641
674
  this.handleData(buf);
@@ -650,13 +683,13 @@ class SCTP {
650
683
  }
651
684
  return undefined;
652
685
  }
653
- static client(transport, port = 5000) {
654
- const sctp = new SCTP(transport, port);
686
+ static client(transport, port = 5000, options = {}) {
687
+ const sctp = new SCTP(transport, port, options);
655
688
  sctp.isServer = false;
656
689
  return sctp;
657
690
  }
658
- static server(transport, port = 5000) {
659
- const sctp = new SCTP(transport, port);
691
+ static server(transport, port = 5000, options = {}) {
692
+ const sctp = new SCTP(transport, port, options);
660
693
  sctp.isServer = true;
661
694
  return sctp;
662
695
  }
@@ -1098,18 +1131,18 @@ class SCTP {
1098
1131
  if (this.fastRecoveryExit === undefined) {
1099
1132
  if (done && cwndFullyUtilized) {
1100
1133
  if (this.cwnd <= this.ssthresh) {
1101
- this.cwnd += Math.min(doneBytes, USERDATA_MAX_LENGTH);
1134
+ this.cwnd += Math.min(doneBytes, this.maxPayloadSize);
1102
1135
  }
1103
1136
  else {
1104
1137
  this.partialBytesAcked += doneBytes;
1105
1138
  if (this.partialBytesAcked >= this.cwnd) {
1106
1139
  this.partialBytesAcked -= this.cwnd;
1107
- this.cwnd += USERDATA_MAX_LENGTH;
1140
+ this.cwnd += this.maxPayloadSize;
1108
1141
  }
1109
1142
  }
1110
1143
  }
1111
1144
  if (loss) {
1112
- this.ssthresh = Math.max(Math.floor(this.cwnd / 2), 4 * USERDATA_MAX_LENGTH);
1145
+ this.ssthresh = Math.max(Math.floor(this.cwnd / 2), 4 * this.maxPayloadSize);
1113
1146
  this.cwnd = this.ssthresh;
1114
1147
  this.partialBytesAcked = 0;
1115
1148
  this.fastRecoveryExit = this.sentQueue[this.sentQueue.length - 1].tsn;
@@ -1243,8 +1276,8 @@ class SCTP {
1243
1276
  }
1244
1277
  }
1245
1278
  const burstSize = this.fastRecoveryExit != undefined
1246
- ? 2 * USERDATA_MAX_LENGTH
1247
- : 4 * USERDATA_MAX_LENGTH;
1279
+ ? 2 * this.maxPayloadSize
1280
+ : 4 * this.maxPayloadSize;
1248
1281
  const cwnd = Math.min(this.flightSize + burstSize, this.cwnd);
1249
1282
  let retransmitEarliest = true;
1250
1283
  for (const dataChunk of this.sentQueue) {