werift 0.19.3 → 0.19.5

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 (370) hide show
  1. package/lib/common/src/binary.d.ts +0 -1
  2. package/lib/common/src/binary.js +14 -14
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/network.d.ts +1 -2
  5. package/lib/common/src/network.js +4 -4
  6. package/lib/common/src/network.js.map +1 -1
  7. package/lib/common/src/number.js +10 -10
  8. package/lib/common/src/number.js.map +1 -1
  9. package/lib/dtls/src/cipher/create.d.ts +1 -1
  10. package/lib/dtls/src/cipher/create.js +2 -3
  11. package/lib/dtls/src/cipher/create.js.map +1 -1
  12. package/lib/dtls/src/cipher/ec.d.ts +0 -1
  13. package/lib/dtls/src/cipher/key-exchange.js +7 -7
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/namedCurve.d.ts +1 -2
  16. package/lib/dtls/src/cipher/namedCurve.js +1 -2
  17. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  18. package/lib/dtls/src/cipher/prf.d.ts +1 -2
  19. package/lib/dtls/src/cipher/prf.js +11 -12
  20. package/lib/dtls/src/cipher/prf.js.map +1 -1
  21. package/lib/dtls/src/cipher/suites/abstract.d.ts +1 -2
  22. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  23. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -2
  24. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  25. package/lib/dtls/src/client.d.ts +1 -1
  26. package/lib/dtls/src/client.js.map +1 -1
  27. package/lib/dtls/src/context/cipher.d.ts +6 -7
  28. package/lib/dtls/src/context/cipher.js +5 -3
  29. package/lib/dtls/src/context/cipher.js.map +1 -1
  30. package/lib/dtls/src/context/dtls.d.ts +5 -6
  31. package/lib/dtls/src/context/dtls.js +1 -2
  32. package/lib/dtls/src/context/dtls.js.map +1 -1
  33. package/lib/dtls/src/context/transport.d.ts +1 -2
  34. package/lib/dtls/src/context/transport.js.map +1 -1
  35. package/lib/dtls/src/flight/client/flight1.d.ts +4 -4
  36. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  37. package/lib/dtls/src/flight/client/flight3.d.ts +3 -3
  38. package/lib/dtls/src/flight/client/flight3.js +6 -0
  39. package/lib/dtls/src/flight/client/flight3.js.map +1 -1
  40. package/lib/dtls/src/flight/client/flight5.d.ts +4 -4
  41. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  42. package/lib/dtls/src/flight/flight.d.ts +3 -4
  43. package/lib/dtls/src/flight/flight.js.map +1 -1
  44. package/lib/dtls/src/flight/server/flight2.d.ts +4 -4
  45. package/lib/dtls/src/flight/server/flight2.js +9 -2
  46. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  47. package/lib/dtls/src/flight/server/flight4.d.ts +5 -5
  48. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  49. package/lib/dtls/src/flight/server/flight6.d.ts +4 -4
  50. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  51. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -2
  52. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  53. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +0 -1
  54. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -2
  55. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  56. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -2
  57. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/alert.d.ts +0 -1
  59. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -2
  61. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +0 -1
  63. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +2 -3
  64. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  65. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -2
  66. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -2
  68. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/finished.d.ts +1 -2
  70. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  71. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +2 -3
  72. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  73. package/lib/dtls/src/handshake/message/server/hello.d.ts +2 -3
  74. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  75. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -2
  76. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  77. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -2
  78. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  79. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +2 -3
  80. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  81. package/lib/dtls/src/handshake/random.d.ts +0 -1
  82. package/lib/dtls/src/helper.d.ts +0 -1
  83. package/lib/dtls/src/helper.js +3 -3
  84. package/lib/dtls/src/helper.js.map +1 -1
  85. package/lib/dtls/src/record/builder.d.ts +2 -3
  86. package/lib/dtls/src/record/builder.js +2 -4
  87. package/lib/dtls/src/record/builder.js.map +1 -1
  88. package/lib/dtls/src/record/message/fragment.d.ts +1 -2
  89. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  90. package/lib/dtls/src/record/message/header.d.ts +0 -1
  91. package/lib/dtls/src/record/message/plaintext.d.ts +0 -1
  92. package/lib/dtls/src/record/receive.d.ts +2 -3
  93. package/lib/dtls/src/record/receive.js.map +1 -1
  94. package/lib/dtls/src/server.d.ts +1 -1
  95. package/lib/dtls/src/server.js.map +1 -1
  96. package/lib/dtls/src/socket.d.ts +5 -6
  97. package/lib/dtls/src/socket.js +17 -23
  98. package/lib/dtls/src/socket.js.map +1 -1
  99. package/lib/dtls/src/transport.d.ts +1 -3
  100. package/lib/dtls/src/transport.js.map +1 -1
  101. package/lib/dtls/src/typings/domain.d.ts +2 -3
  102. package/lib/dtls/src/typings/domain.js.map +1 -1
  103. package/lib/dtls/src/util/binary.d.ts +0 -1
  104. package/lib/dtls/src/util/binary.js +1 -2
  105. package/lib/dtls/src/util/binary.js.map +1 -1
  106. package/lib/ice/src/candidate.js +3 -3
  107. package/lib/ice/src/candidate.js.map +1 -1
  108. package/lib/ice/src/dns/lookup.d.ts +1 -1
  109. package/lib/ice/src/dns/lookup.js +1 -0
  110. package/lib/ice/src/dns/lookup.js.map +1 -1
  111. package/lib/ice/src/exceptions.js.map +1 -1
  112. package/lib/ice/src/helper.d.ts +0 -1
  113. package/lib/ice/src/helper.js +5 -5
  114. package/lib/ice/src/helper.js.map +1 -1
  115. package/lib/ice/src/ice.d.ts +3 -2
  116. package/lib/ice/src/ice.js +25 -16
  117. package/lib/ice/src/ice.js.map +1 -1
  118. package/lib/ice/src/stun/attributes.d.ts +0 -1
  119. package/lib/ice/src/stun/attributes.js +5 -5
  120. package/lib/ice/src/stun/attributes.js.map +1 -1
  121. package/lib/ice/src/stun/message.d.ts +0 -1
  122. package/lib/ice/src/stun/message.js +2 -2
  123. package/lib/ice/src/stun/message.js.map +1 -1
  124. package/lib/ice/src/stun/protocol.d.ts +0 -1
  125. package/lib/ice/src/stun/transaction.d.ts +1 -1
  126. package/lib/ice/src/transport.d.ts +1 -4
  127. package/lib/ice/src/turn/protocol.d.ts +1 -2
  128. package/lib/ice/src/turn/protocol.js +5 -4
  129. package/lib/ice/src/turn/protocol.js.map +1 -1
  130. package/lib/ice/src/types/model.d.ts +0 -1
  131. package/lib/ice/src/utils.js +3 -4
  132. package/lib/ice/src/utils.js.map +1 -1
  133. package/lib/rtp/src/codec/av1.d.ts +1 -2
  134. package/lib/rtp/src/codec/av1.js +2 -2
  135. package/lib/rtp/src/codec/av1.js.map +1 -1
  136. package/lib/rtp/src/codec/base.d.ts +1 -2
  137. package/lib/rtp/src/codec/base.js.map +1 -1
  138. package/lib/rtp/src/codec/h264.d.ts +2 -3
  139. package/lib/rtp/src/codec/h264.js.map +1 -1
  140. package/lib/rtp/src/codec/index.d.ts +1 -2
  141. package/lib/rtp/src/codec/index.js +2 -2
  142. package/lib/rtp/src/codec/index.js.map +1 -1
  143. package/lib/rtp/src/codec/opus.d.ts +2 -3
  144. package/lib/rtp/src/codec/opus.js.map +1 -1
  145. package/lib/rtp/src/codec/vp8.d.ts +2 -3
  146. package/lib/rtp/src/codec/vp8.js +1 -1
  147. package/lib/rtp/src/codec/vp8.js.map +1 -1
  148. package/lib/rtp/src/codec/vp9.d.ts +2 -3
  149. package/lib/rtp/src/codec/vp9.js +1 -1
  150. package/lib/rtp/src/codec/vp9.js.map +1 -1
  151. package/lib/rtp/src/extra/container/mp4/h264.d.ts +0 -1
  152. package/lib/rtp/src/extra/container/mp4/h264.js +2 -2
  153. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  154. package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +1 -1
  155. package/lib/rtp/src/extra/container/mp4/mp4box.js +3 -3
  156. package/lib/rtp/src/extra/container/mp4/mp4box.js.map +1 -1
  157. package/lib/rtp/src/extra/container/ogg/parser.d.ts +0 -1
  158. package/lib/rtp/src/extra/container/webm/container.d.ts +0 -1
  159. package/lib/rtp/src/extra/container/webm/container.js +2 -3
  160. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  161. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js +2 -2
  162. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  163. package/lib/rtp/src/extra/processor/depacketizer.d.ts +2 -3
  164. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  166. package/lib/rtp/src/extra/processor/depacketizerCallback.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +2 -3
  168. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/dtx.d.ts +2 -3
  170. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  171. package/lib/rtp/src/extra/processor/dtxCallback.js.map +1 -1
  172. package/lib/rtp/src/extra/processor/interface.d.ts +2 -2
  173. package/lib/rtp/src/extra/processor/jitterBuffer.d.ts +2 -2
  174. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  176. package/lib/rtp/src/extra/processor/jitterBufferCallback.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/jitterBufferTransformer.d.ts +1 -2
  178. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  179. package/lib/rtp/src/extra/processor/lipsync.d.ts +3 -4
  180. package/lib/rtp/src/extra/processor/lipsync.js +2 -2
  181. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  182. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  183. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  184. package/lib/rtp/src/extra/processor/mp4.d.ts +2 -3
  185. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  186. package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -2
  187. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  188. package/lib/rtp/src/extra/processor/mute.d.ts +2 -3
  189. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  190. package/lib/rtp/src/extra/processor/muteCallback.d.ts +2 -2
  191. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  192. package/lib/rtp/src/extra/processor/nack.d.ts +2 -2
  193. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  194. package/lib/rtp/src/extra/processor/nackHandlerCallback.js.map +1 -1
  195. package/lib/rtp/src/extra/processor/ntpTime.d.ts +2 -2
  196. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  197. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  198. package/lib/rtp/src/extra/processor/ntpTimeCallback.js.map +1 -1
  199. package/lib/rtp/src/extra/processor/rtcpCallback.d.ts +2 -2
  200. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  201. package/lib/rtp/src/extra/processor/rtpCallback.d.ts +1 -2
  202. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  203. package/lib/rtp/src/extra/processor/rtpStream.d.ts +2 -4
  204. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  205. package/lib/rtp/src/extra/processor/rtpTime.d.ts +2 -2
  206. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  207. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  208. package/lib/rtp/src/extra/processor/rtpTimeCallback.js.map +1 -1
  209. package/lib/rtp/src/extra/processor/webm.d.ts +2 -3
  210. package/lib/rtp/src/extra/processor/webm.js +2 -2
  211. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  212. package/lib/rtp/src/extra/processor/webmCallback.d.ts +2 -2
  213. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  214. package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -3
  215. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  216. package/lib/rtp/src/helper.d.ts +0 -1
  217. package/lib/rtp/src/helper.js +6 -6
  218. package/lib/rtp/src/helper.js.map +1 -1
  219. package/lib/rtp/src/index.d.ts +0 -1
  220. package/lib/rtp/src/rtcp/header.d.ts +0 -1
  221. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +0 -1
  222. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -2
  223. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  224. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +0 -1
  225. package/lib/rtp/src/rtcp/psfb/remb.d.ts +0 -1
  226. package/lib/rtp/src/rtcp/rr.d.ts +0 -1
  227. package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
  228. package/lib/rtp/src/rtcp/rtcp.js +2 -2
  229. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  230. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -2
  231. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  232. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +0 -1
  233. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +0 -1
  234. package/lib/rtp/src/rtcp/rtpfb/twcc.js +1 -2
  235. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  236. package/lib/rtp/src/rtcp/sdes.d.ts +1 -2
  237. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  238. package/lib/rtp/src/rtcp/sr.d.ts +0 -1
  239. package/lib/rtp/src/rtp/headerExtension.d.ts +1 -2
  240. package/lib/rtp/src/rtp/headerExtension.js +12 -12
  241. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  242. package/lib/rtp/src/rtp/red/encoder.d.ts +0 -1
  243. package/lib/rtp/src/rtp/red/handler.d.ts +1 -1
  244. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  245. package/lib/rtp/src/rtp/red/packet.d.ts +0 -1
  246. package/lib/rtp/src/rtp/rtp.d.ts +0 -1
  247. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  248. package/lib/rtp/src/rtp/rtx.js +2 -3
  249. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  250. package/lib/rtp/src/srtp/cipher/ctr.d.ts +0 -1
  251. package/lib/rtp/src/srtp/cipher/gcm.d.ts +0 -1
  252. package/lib/rtp/src/srtp/cipher/index.d.ts +2 -3
  253. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  254. package/lib/rtp/src/srtp/context/context.d.ts +3 -5
  255. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  256. package/lib/rtp/src/srtp/context/srtcp.d.ts +2 -3
  257. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  258. package/lib/rtp/src/srtp/context/srtp.d.ts +1 -2
  259. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  260. package/lib/rtp/src/srtp/session.d.ts +1 -2
  261. package/lib/rtp/src/srtp/session.js.map +1 -1
  262. package/lib/rtp/src/srtp/srtcp.d.ts +1 -2
  263. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  264. package/lib/rtp/src/srtp/srtp.d.ts +2 -3
  265. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  266. package/lib/rtp/src/util.d.ts +0 -1
  267. package/lib/sctp/src/chunk.d.ts +0 -1
  268. package/lib/sctp/src/chunk.js +4 -4
  269. package/lib/sctp/src/chunk.js.map +1 -1
  270. package/lib/sctp/src/helper.js +2 -3
  271. package/lib/sctp/src/helper.js.map +1 -1
  272. package/lib/sctp/src/param.d.ts +0 -1
  273. package/lib/sctp/src/param.js.map +1 -1
  274. package/lib/sctp/src/sctp.d.ts +5 -6
  275. package/lib/sctp/src/sctp.js.map +1 -1
  276. package/lib/sctp/src/transport.d.ts +1 -3
  277. package/lib/sctp/src/transport.js.map +1 -1
  278. package/lib/webrtc/src/const.d.ts +1 -1
  279. package/lib/webrtc/src/const.js.map +1 -1
  280. package/lib/webrtc/src/dataChannel.d.ts +2 -3
  281. package/lib/webrtc/src/dataChannel.js.map +1 -1
  282. package/lib/webrtc/src/helper.d.ts +0 -1
  283. package/lib/webrtc/src/helper.js +3 -3
  284. package/lib/webrtc/src/helper.js.map +1 -1
  285. package/lib/webrtc/src/media/extension/rtcpFeedback.d.ts +1 -1
  286. package/lib/webrtc/src/media/extension/rtcpFeedback.js.map +1 -1
  287. package/lib/webrtc/src/media/extension/rtpExtension.js +7 -8
  288. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  289. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  290. package/lib/webrtc/src/media/parameters.js.map +1 -1
  291. package/lib/webrtc/src/media/receiver/nack.d.ts +2 -2
  292. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  293. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  294. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  295. package/lib/webrtc/src/media/receiver/statistics.d.ts +1 -1
  296. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  297. package/lib/webrtc/src/media/router.d.ts +4 -4
  298. package/lib/webrtc/src/media/router.js.map +1 -1
  299. package/lib/webrtc/src/media/rtpReceiver.d.ts +7 -7
  300. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  301. package/lib/webrtc/src/media/rtpSender.d.ts +5 -6
  302. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  303. package/lib/webrtc/src/media/rtpTransceiver.d.ts +6 -6
  304. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  305. package/lib/webrtc/src/media/sender/senderBWE.d.ts +1 -1
  306. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  307. package/lib/webrtc/src/media/track.d.ts +6 -5
  308. package/lib/webrtc/src/media/track.js +14 -1
  309. package/lib/webrtc/src/media/track.js.map +1 -1
  310. package/lib/webrtc/src/nonstandard/index.d.ts +2 -0
  311. package/lib/webrtc/src/nonstandard/index.js +2 -0
  312. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  313. package/lib/webrtc/src/nonstandard/navigator.d.ts +73 -0
  314. package/lib/webrtc/src/nonstandard/navigator.js +88 -0
  315. package/lib/webrtc/src/nonstandard/navigator.js.map +1 -0
  316. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +23 -7
  317. package/lib/webrtc/src/nonstandard/recorder/index.js +30 -27
  318. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  319. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +17 -5
  320. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +3 -9
  321. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  322. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +1 -1
  323. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +23 -12
  324. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  325. package/lib/webrtc/src/nonstandard/userMedia.d.ts +4 -5
  326. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  327. package/lib/webrtc/src/peerConnection.d.ts +10 -10
  328. package/lib/webrtc/src/peerConnection.js +15 -21
  329. package/lib/webrtc/src/peerConnection.js.map +1 -1
  330. package/lib/webrtc/src/sdp.d.ts +4 -4
  331. package/lib/webrtc/src/sdp.js +21 -21
  332. package/lib/webrtc/src/sdp.js.map +1 -1
  333. package/lib/webrtc/src/transport/dtls.d.ts +8 -8
  334. package/lib/webrtc/src/transport/dtls.js +16 -3
  335. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  336. package/lib/webrtc/src/transport/ice.d.ts +1 -1
  337. package/lib/webrtc/src/transport/ice.js +3 -3
  338. package/lib/webrtc/src/transport/ice.js.map +1 -1
  339. package/lib/webrtc/src/transport/sctp.d.ts +1 -2
  340. package/lib/webrtc/src/transport/sctp.js +1 -1
  341. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  342. package/lib/webrtc/src/utils.d.ts +5 -5
  343. package/lib/webrtc/src/utils.js +16 -10
  344. package/lib/webrtc/src/utils.js.map +1 -1
  345. package/package.json +12 -8
  346. package/src/const.ts +1 -1
  347. package/src/dataChannel.ts +2 -2
  348. package/src/media/extension/rtcpFeedback.ts +1 -1
  349. package/src/media/parameters.ts +1 -1
  350. package/src/media/receiver/nack.ts +9 -6
  351. package/src/media/receiver/receiverTwcc.ts +3 -3
  352. package/src/media/receiver/statistics.ts +1 -1
  353. package/src/media/router.ts +45 -39
  354. package/src/media/rtpReceiver.ts +30 -19
  355. package/src/media/rtpSender.ts +84 -71
  356. package/src/media/rtpTransceiver.ts +6 -6
  357. package/src/media/sender/senderBWE.ts +1 -1
  358. package/src/media/track.ts +19 -5
  359. package/src/nonstandard/index.ts +2 -0
  360. package/src/nonstandard/navigator.ts +118 -0
  361. package/src/nonstandard/recorder/index.ts +47 -19
  362. package/src/nonstandard/recorder/writer/index.ts +7 -4
  363. package/src/nonstandard/recorder/writer/webm.ts +25 -14
  364. package/src/nonstandard/userMedia.ts +1 -1
  365. package/src/peerConnection.ts +43 -51
  366. package/src/sdp.ts +108 -94
  367. package/src/transport/dtls.ts +28 -14
  368. package/src/transport/ice.ts +1 -1
  369. package/src/transport/sctp.ts +75 -67
  370. package/src/utils.ts +13 -6
@@ -1 +1 @@
1
- {"version":3,"file":"keyExchange.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/server/keyExchange.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAG1D,+DAAuE;AAEvE,iDAAoD;AACpD,uCAA4C;AAE5C,MAAa,iBAAiB;IAe5B,YACS,iBAA6B,EAC7B,UAAgC,EAChC,eAAuB,EACvB,SAAiB,EACjB,aAAqB,EACrB,kBAA0B,EAC1B,eAAuB,EACvB,SAAiB;QAPxB;;;;mBAAO,iBAAiB;WAAY;QACpC;;;;mBAAO,UAAU;WAAsB;QACvC;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,SAAS;WAAQ;QACxB;;;;mBAAO,aAAa;WAAQ;QAC5B;;;;mBAAO,kBAAkB;WAAQ;QACjC;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,SAAS;WAAQ;QAtB1B;;;;mBAAU,qBAAa,CAAC,sBAAsB;WAAC;QAC/C;;;;;WAAoB;IAsBjB,CAAC;IAEJ,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,iBAAiB,CAC1B,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,iBAAiB;QAC1B,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AA9DH,8CA+DC;AA3DiB;;;;WAAO;QACrB,iBAAiB,EAAE,mBAAK,CAAC,KAAK;QAC9B,UAAU,EAAE,mBAAK,CAAC,QAAQ;QAC1B,eAAe,EAAE,mBAAK,CAAC,KAAK;QAC5B,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;QAClE,aAAa,EAAE,mBAAK,CAAC,KAAK;QAC1B,kBAAkB,EAAE,mBAAK,CAAC,KAAK;QAC/B,eAAe,EAAE,mBAAK,CAAC,QAAQ;QAC/B,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;KACnE;EATmB,CASlB","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\n\nimport { CurveTypes, NamedCurveAlgorithms } from \"../../../cipher/const\";\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport { Handshake } from \"../../../typings/domain\";\nimport { encodeBuffer } from \"../../../util/binary\";\nimport { HandshakeType } from \"../../const\";\n\nexport class ServerKeyExchange implements Handshake {\n msgType = HandshakeType.server_key_exchange_12;\n messageSeq?: number;\n\n static readonly spec = {\n ellipticCurveType: types.uint8,\n namedCurve: types.uint16be,\n publicKeyLength: types.uint8,\n publicKey: types.buffer((ctx: any) => ctx.current.publicKeyLength),\n hashAlgorithm: types.uint8,\n signatureAlgorithm: types.uint8,\n signatureLength: types.uint16be,\n signature: types.buffer((ctx: any) => ctx.current.signatureLength),\n };\n\n constructor(\n public ellipticCurveType: CurveTypes,\n public namedCurve: NamedCurveAlgorithms,\n public publicKeyLength: number,\n public publicKey: Buffer,\n public hashAlgorithm: number,\n public signatureAlgorithm: number,\n public signatureLength: number,\n public signature: Buffer,\n ) {}\n\n static createEmpty() {\n return new ServerKeyExchange(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n );\n }\n\n static deSerialize(buf: Buffer) {\n const res = decode(buf, ServerKeyExchange.spec);\n return new ServerKeyExchange(\n //@ts-ignore\n ...Object.values(res),\n );\n }\n\n serialize() {\n const res = encodeBuffer(this, ServerKeyExchange.spec);\n return res;\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body,\n );\n }\n}\n"]}
1
+ {"version":3,"file":"keyExchange.js","sourceRoot":"","sources":["../../../../../../../dtls/src/handshake/message/server/keyExchange.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAG1D,+DAAuE;AAEvE,iDAAoD;AACpD,uCAA4C;AAE5C,MAAa,iBAAiB;IAe5B,YACS,iBAA6B,EAC7B,UAAgC,EAChC,eAAuB,EACvB,SAAiB,EACjB,aAAqB,EACrB,kBAA0B,EAC1B,eAAuB,EACvB,SAAiB;QAPxB;;;;mBAAO,iBAAiB;WAAY;QACpC;;;;mBAAO,UAAU;WAAsB;QACvC;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,SAAS;WAAQ;QACxB;;;;mBAAO,aAAa;WAAQ;QAC5B;;;;mBAAO,kBAAkB;WAAQ;QACjC;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,SAAS;WAAQ;QAtB1B;;;;mBAAU,qBAAa,CAAC,sBAAsB;WAAC;QAC/C;;;;;WAAoB;IAsBjB,CAAC;IAEJ,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,iBAAiB,CAC1B,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,EAChB,SAAgB,CACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,GAAG,GAAG,IAAA,oBAAM,EAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,iBAAiB;QAC1B,YAAY;QACZ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,8BAAmB,CAC5B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAW,EAChB,CAAC,EACD,IAAI,CAAC,MAAM,EACX,IAAI,CACL,CAAC;IACJ,CAAC;;AA9DH,8CA+DC;AA3DiB;;;;WAAO;QACrB,iBAAiB,EAAE,mBAAK,CAAC,KAAK;QAC9B,UAAU,EAAE,mBAAK,CAAC,QAAQ;QAC1B,eAAe,EAAE,mBAAK,CAAC,KAAK;QAC5B,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;QAClE,aAAa,EAAE,mBAAK,CAAC,KAAK;QAC1B,kBAAkB,EAAE,mBAAK,CAAC,KAAK;QAC/B,eAAe,EAAE,mBAAK,CAAC,QAAQ;QAC/B,SAAS,EAAE,mBAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;KACnE;EATmB,CASlB","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\n\nimport type { CurveTypes, NamedCurveAlgorithms } from \"../../../cipher/const\";\nimport { FragmentedHandshake } from \"../../../record/message/fragment\";\nimport type { Handshake } from \"../../../typings/domain\";\nimport { encodeBuffer } from \"../../../util/binary\";\nimport { HandshakeType } from \"../../const\";\n\nexport class ServerKeyExchange implements Handshake {\n msgType = HandshakeType.server_key_exchange_12;\n messageSeq?: number;\n\n static readonly spec = {\n ellipticCurveType: types.uint8,\n namedCurve: types.uint16be,\n publicKeyLength: types.uint8,\n publicKey: types.buffer((ctx: any) => ctx.current.publicKeyLength),\n hashAlgorithm: types.uint8,\n signatureAlgorithm: types.uint8,\n signatureLength: types.uint16be,\n signature: types.buffer((ctx: any) => ctx.current.signatureLength),\n };\n\n constructor(\n public ellipticCurveType: CurveTypes,\n public namedCurve: NamedCurveAlgorithms,\n public publicKeyLength: number,\n public publicKey: Buffer,\n public hashAlgorithm: number,\n public signatureAlgorithm: number,\n public signatureLength: number,\n public signature: Buffer,\n ) {}\n\n static createEmpty() {\n return new ServerKeyExchange(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n );\n }\n\n static deSerialize(buf: Buffer) {\n const res = decode(buf, ServerKeyExchange.spec);\n return new ServerKeyExchange(\n //@ts-ignore\n ...Object.values(res),\n );\n }\n\n serialize() {\n const res = encodeBuffer(this, ServerKeyExchange.spec);\n return res;\n }\n\n toFragment() {\n const body = this.serialize();\n return new FragmentedHandshake(\n this.msgType,\n body.length,\n this.messageSeq!,\n 0,\n body.length,\n body,\n );\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class DtlsRandom {
3
2
  gmt_unix_time: number;
4
3
  random_bytes: Buffer;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare function enumerate<T>(arr: T[]): [number, T][];
3
2
  export declare function divide(from: string, split: string): [string, string];
4
3
  export declare const dumpBuffer: (data: Buffer) => string;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getObjectSummary = exports.dumpBuffer = exports.divide = exports.enumerate = void 0;
3
+ exports.getObjectSummary = exports.dumpBuffer = void 0;
4
+ exports.enumerate = enumerate;
5
+ exports.divide = divide;
4
6
  function enumerate(arr) {
5
7
  return arr.map((v, i) => [i, v]);
6
8
  }
7
- exports.enumerate = enumerate;
8
9
  function divide(from, split) {
9
10
  const arr = from.split(split);
10
11
  return [arr[0], arr.slice(1).join(split)];
11
12
  }
12
- exports.divide = divide;
13
13
  const dumpBuffer = (data) => "0x" +
14
14
  data
15
15
  .toString("hex")
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../dtls/src/helper.ts"],"names":[],"mappings":";;;AAAA,SAAgB,SAAS,CAAI,GAAQ;IACnC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAFD,8BAEC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAHD,wBAGC;AAEM,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CACzC,IAAI;IACJ,IAAI;SACD,QAAQ,CAAC,KAAK,CAAC;SACf,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC7C,IAAI,CAAC,KAAK,CAAC,CAAC;AAPJ,QAAA,UAAU,cAON;AAEV,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,EAAE,CAC3C,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AATI,QAAA,gBAAgB,oBASpB","sourcesContent":["export function enumerate<T>(arr: T[]): [number, T][] {\n return arr.map((v, i) => [i, v]);\n}\n\nexport function divide(from: string, split: string): [string, string] {\n const arr = from.split(split);\n return [arr[0], arr.slice(1).join(split)];\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport const getObjectSummary = (obj: any) =>\n Object.entries({ ...obj }).reduce((acc: any, [key, value]) => {\n if (typeof value === \"number\" || typeof value === \"string\") {\n acc[key] = value;\n }\n if (Buffer.isBuffer(value)) {\n acc[key] = dumpBuffer(value);\n }\n return acc;\n }, {});\n"]}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../dtls/src/helper.ts"],"names":[],"mappings":";;;AAAA,8BAEC;AAED,wBAGC;AAPD,SAAgB,SAAS,CAAI,GAAQ;IACnC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAEM,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CACzC,IAAI;IACJ,IAAI;SACD,QAAQ,CAAC,KAAK,CAAC;SACf,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SAC7C,IAAI,CAAC,KAAK,CAAC,CAAC;AAPJ,QAAA,UAAU,cAON;AAEV,MAAM,gBAAgB,GAAG,CAAC,GAAQ,EAAE,EAAE,CAC3C,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,kBAAU,EAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AATI,QAAA,gBAAgB,oBASpB","sourcesContent":["export function enumerate<T>(arr: T[]): [number, T][] {\n return arr.map((v, i) => [i, v]);\n}\n\nexport function divide(from: string, split: string): [string, string] {\n const arr = from.split(split);\n return [arr[0], arr.slice(1).join(split)];\n}\n\nexport const dumpBuffer = (data: Buffer) =>\n \"0x\" +\n data\n .toString(\"hex\")\n .replace(/(.)(.)/g, \"$1$2 \")\n .split(\" \")\n .filter((s) => s != undefined && s.length > 0)\n .join(\",0x\");\n\nexport const getObjectSummary = (obj: any) =>\n Object.entries({ ...obj }).reduce((acc: any, [key, value]) => {\n if (typeof value === \"number\" || typeof value === \"string\") {\n acc[key] = value;\n }\n if (Buffer.isBuffer(value)) {\n acc[key] = dumpBuffer(value);\n }\n return acc;\n }, {});\n"]}
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { DtlsContext } from "../context/dtls";
3
- import { Handshake } from "../typings/domain";
1
+ import type { DtlsContext } from "../context/dtls";
2
+ import type { Handshake } from "../typings/domain";
4
3
  import { DtlsPlaintext } from "./message/plaintext";
5
4
  export type Message = {
6
5
  type: number;
@@ -4,14 +4,12 @@ exports.createPlaintext = exports.createFragments = void 0;
4
4
  const plaintext_1 = require("./message/plaintext");
5
5
  const createFragments = (dtls) => (handshakes) => {
6
6
  dtls.lastFlight = handshakes;
7
- return handshakes
8
- .map((handshake) => {
7
+ return handshakes.flatMap((handshake) => {
9
8
  handshake.messageSeq = dtls.sequenceNumber++;
10
9
  const fragment = handshake.toFragment();
11
10
  const fragments = fragment.chunk();
12
11
  return fragments;
13
- })
14
- .flatMap((v) => v);
12
+ });
15
13
  };
16
14
  exports.createFragments = createFragments;
17
15
  const createPlaintext = (dtls) => (fragments, recordSequenceNumber) => {
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../dtls/src/record/builder.ts"],"names":[],"mappings":";;;AAEA,mDAAoD;AAI7C,MAAM,eAAe,GAC1B,CAAC,IAAiB,EAAE,EAAE,CAAC,CAAC,UAAuB,EAAE,EAAE;IACjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAE7B,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjB,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;SACD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC,CAAC;AAZS,QAAA,eAAe,mBAYxB;AAEG,MAAM,eAAe,GAC1B,CAAC,IAAiB,EAAE,EAAE,CACtB,CAAC,SAAoB,EAAE,oBAA4B,EAAE,EAAE;IACrD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAI,yBAAa,CACjC;YACE,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,eAAe,EAAE,IAAI,CAAC,OAAO;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,oBAAoB;YACpC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;SAChC,EACD,GAAG,CAAC,QAAQ,CACb,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhBS,QAAA,eAAe,mBAgBxB","sourcesContent":["import { DtlsContext } from \"../context/dtls\";\nimport { Handshake } from \"../typings/domain\";\nimport { DtlsPlaintext } from \"./message/plaintext\";\n\nexport type Message = { type: number; fragment: Buffer };\n\nexport const createFragments =\n (dtls: DtlsContext) => (handshakes: Handshake[]) => {\n dtls.lastFlight = handshakes;\n\n return handshakes\n .map((handshake) => {\n handshake.messageSeq = dtls.sequenceNumber++;\n const fragment = handshake.toFragment();\n const fragments = fragment.chunk();\n return fragments;\n })\n .flatMap((v) => v);\n };\n\nexport const createPlaintext =\n (dtls: DtlsContext) =>\n (fragments: Message[], recordSequenceNumber: number) => {\n return fragments.map((msg) => {\n const plaintext = new DtlsPlaintext(\n {\n contentType: msg.type,\n protocolVersion: dtls.version,\n epoch: dtls.epoch,\n sequenceNumber: recordSequenceNumber,\n contentLen: msg.fragment.length,\n },\n msg.fragment,\n );\n return plaintext;\n });\n };\n"]}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../dtls/src/record/builder.ts"],"names":[],"mappings":";;;AAEA,mDAAoD;AAI7C,MAAM,eAAe,GAC1B,CAAC,IAAiB,EAAE,EAAE,CAAC,CAAC,UAAuB,EAAE,EAAE;IACjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAE7B,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACtC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAVS,QAAA,eAAe,mBAUxB;AAEG,MAAM,eAAe,GAC1B,CAAC,IAAiB,EAAE,EAAE,CACtB,CAAC,SAAoB,EAAE,oBAA4B,EAAE,EAAE;IACrD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAI,yBAAa,CACjC;YACE,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,eAAe,EAAE,IAAI,CAAC,OAAO;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,oBAAoB;YACpC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;SAChC,EACD,GAAG,CAAC,QAAQ,CACb,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhBS,QAAA,eAAe,mBAgBxB","sourcesContent":["import type { DtlsContext } from \"../context/dtls\";\nimport type { Handshake } from \"../typings/domain\";\nimport { DtlsPlaintext } from \"./message/plaintext\";\n\nexport type Message = { type: number; fragment: Buffer };\n\nexport const createFragments =\n (dtls: DtlsContext) => (handshakes: Handshake[]) => {\n dtls.lastFlight = handshakes;\n\n return handshakes.flatMap((handshake) => {\n handshake.messageSeq = dtls.sequenceNumber++;\n const fragment = handshake.toFragment();\n const fragments = fragment.chunk();\n return fragments;\n });\n };\n\nexport const createPlaintext =\n (dtls: DtlsContext) =>\n (fragments: Message[], recordSequenceNumber: number) => {\n return fragments.map((msg) => {\n const plaintext = new DtlsPlaintext(\n {\n contentType: msg.type,\n protocolVersion: dtls.version,\n epoch: dtls.epoch,\n sequenceNumber: recordSequenceNumber,\n contentLen: msg.fragment.length,\n },\n msg.fragment,\n );\n return plaintext;\n });\n };\n"]}
@@ -1,5 +1,4 @@
1
- /// <reference types="node" />
2
- import { HandshakeType } from "../../handshake/const";
1
+ import type { HandshakeType } from "../../handshake/const";
3
2
  export declare class FragmentedHandshake {
4
3
  msg_type: number;
5
4
  length: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../../../../../dtls/src/record/message/fragment.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { decode, encode, types } from \"@shinyoshiaki/binary-data\";\n\nimport { HandshakeType } from \"../../handshake/const\";\nimport { getObjectSummary } from \"../../helper\";\n\nexport class FragmentedHandshake {\n static readonly spec = {\n msg_type: types.uint8,\n length: types.uint24be,\n message_seq: types.uint16be,\n fragment_offset: types.uint24be,\n fragment_length: types.uint24be,\n fragment: types.buffer((context: any) => context.current.fragment_length),\n };\n\n constructor(\n public msg_type: number,\n public length: number,\n public message_seq: number,\n public fragment_offset: number,\n public fragment_length: number,\n public fragment: Buffer,\n ) {}\n\n get summary() {\n return getObjectSummary(this);\n }\n\n static createEmpty() {\n return new FragmentedHandshake(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n );\n }\n\n static deSerialize(buf: Buffer) {\n return new FragmentedHandshake(\n //@ts-ignore\n ...Object.values(decode(buf, FragmentedHandshake.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, FragmentedHandshake.spec).slice();\n return Buffer.from(res);\n }\n\n chunk(maxFragmentLength?: number): FragmentedHandshake[] {\n let start = 0;\n const totalLength = this.fragment.length;\n\n if (totalLength === 0)\n return [\n new FragmentedHandshake(\n this.msg_type,\n totalLength,\n this.message_seq,\n start,\n 0,\n this.fragment,\n ),\n ];\n\n const fragments: FragmentedHandshake[] = [];\n if (!maxFragmentLength) {\n maxFragmentLength = 1280 - (20 + 8) - (1 + 3 + 2 + 3 + 3);\n }\n // loop through the message and fragment it\n while (start < totalLength) {\n // calculate maximum length, limited by MTU - IP/UDP headers - handshake overhead\n const fragmentLength = Math.min(maxFragmentLength, totalLength - start);\n // slice and dice\n const data = Buffer.from(\n this.fragment.slice(start, start + fragmentLength),\n );\n if (data.length <= 0) {\n // this shouldn't happen, but we don't want to introduce an infinite loop\n throw new Error(\n `Zero or less bytes processed while fragmenting handshake message.`,\n );\n }\n // create the message\n fragments.push(\n new FragmentedHandshake(\n this.msg_type,\n totalLength,\n this.message_seq,\n start,\n data.length,\n data,\n ),\n );\n // step forward by the actual fragment length\n start += data.length;\n }\n\n return fragments;\n }\n\n static assemble(messages: FragmentedHandshake[]): FragmentedHandshake {\n // cannot reassemble empty arrays\n if (!messages?.length) {\n throw new Error(\"cannot reassemble handshake from empty array\");\n }\n\n // sort by fragment start\n messages = messages.sort((a, b) => a.fragment_offset - b.fragment_offset);\n // combine into a single buffer\n const combined = Buffer.alloc(messages[0].length);\n for (const msg of messages) {\n msg.fragment.copy(combined, msg.fragment_offset);\n }\n\n // and return the complete message\n return new FragmentedHandshake(\n messages[0].msg_type,\n messages[0].length,\n messages[0].message_seq,\n 0,\n combined.length,\n combined,\n );\n }\n\n static findAllFragments(\n fragments: FragmentedHandshake[],\n type: HandshakeType,\n ): FragmentedHandshake[] {\n const reference = fragments.find((v) => v.msg_type === type);\n if (!reference) return [];\n\n // ignore empty arrays\n if (!fragments?.length) return [];\n\n // return all fragments with matching msg_type, message_seq and total length\n return fragments.filter((f) => {\n return (\n f.msg_type === reference.msg_type &&\n f.message_seq === reference.message_seq &&\n f.length === reference.length\n );\n });\n }\n}\n"]}
1
+ {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../../../../../dtls/src/record/message/fragment.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { decode, encode, types } from \"@shinyoshiaki/binary-data\";\n\nimport type { HandshakeType } from \"../../handshake/const\";\nimport { getObjectSummary } from \"../../helper\";\n\nexport class FragmentedHandshake {\n static readonly spec = {\n msg_type: types.uint8,\n length: types.uint24be,\n message_seq: types.uint16be,\n fragment_offset: types.uint24be,\n fragment_length: types.uint24be,\n fragment: types.buffer((context: any) => context.current.fragment_length),\n };\n\n constructor(\n public msg_type: number,\n public length: number,\n public message_seq: number,\n public fragment_offset: number,\n public fragment_length: number,\n public fragment: Buffer,\n ) {}\n\n get summary() {\n return getObjectSummary(this);\n }\n\n static createEmpty() {\n return new FragmentedHandshake(\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n undefined as any,\n );\n }\n\n static deSerialize(buf: Buffer) {\n return new FragmentedHandshake(\n //@ts-ignore\n ...Object.values(decode(buf, FragmentedHandshake.spec)),\n );\n }\n\n serialize() {\n const res = encode(this, FragmentedHandshake.spec).slice();\n return Buffer.from(res);\n }\n\n chunk(maxFragmentLength?: number): FragmentedHandshake[] {\n let start = 0;\n const totalLength = this.fragment.length;\n\n if (totalLength === 0)\n return [\n new FragmentedHandshake(\n this.msg_type,\n totalLength,\n this.message_seq,\n start,\n 0,\n this.fragment,\n ),\n ];\n\n const fragments: FragmentedHandshake[] = [];\n if (!maxFragmentLength) {\n maxFragmentLength = 1280 - (20 + 8) - (1 + 3 + 2 + 3 + 3);\n }\n // loop through the message and fragment it\n while (start < totalLength) {\n // calculate maximum length, limited by MTU - IP/UDP headers - handshake overhead\n const fragmentLength = Math.min(maxFragmentLength, totalLength - start);\n // slice and dice\n const data = Buffer.from(\n this.fragment.slice(start, start + fragmentLength),\n );\n if (data.length <= 0) {\n // this shouldn't happen, but we don't want to introduce an infinite loop\n throw new Error(\n `Zero or less bytes processed while fragmenting handshake message.`,\n );\n }\n // create the message\n fragments.push(\n new FragmentedHandshake(\n this.msg_type,\n totalLength,\n this.message_seq,\n start,\n data.length,\n data,\n ),\n );\n // step forward by the actual fragment length\n start += data.length;\n }\n\n return fragments;\n }\n\n static assemble(messages: FragmentedHandshake[]): FragmentedHandshake {\n // cannot reassemble empty arrays\n if (!messages?.length) {\n throw new Error(\"cannot reassemble handshake from empty array\");\n }\n\n // sort by fragment start\n messages = messages.sort((a, b) => a.fragment_offset - b.fragment_offset);\n // combine into a single buffer\n const combined = Buffer.alloc(messages[0].length);\n for (const msg of messages) {\n msg.fragment.copy(combined, msg.fragment_offset);\n }\n\n // and return the complete message\n return new FragmentedHandshake(\n messages[0].msg_type,\n messages[0].length,\n messages[0].message_seq,\n 0,\n combined.length,\n combined,\n );\n }\n\n static findAllFragments(\n fragments: FragmentedHandshake[],\n type: HandshakeType,\n ): FragmentedHandshake[] {\n const reference = fragments.find((v) => v.msg_type === type);\n if (!reference) return [];\n\n // ignore empty arrays\n if (!fragments?.length) return [];\n\n // return all fragments with matching msg_type, message_seq and total length\n return fragments.filter((f) => {\n return (\n f.msg_type === reference.msg_type &&\n f.message_seq === reference.message_seq &&\n f.length === reference.length\n );\n });\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class DtlsPlaintextHeader {
3
2
  contentType: number;
4
3
  protocolVersion: {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class DtlsPlaintext {
3
2
  recordLayerHeader: typeof DtlsPlaintext.spec.recordLayerHeader;
4
3
  fragment: Buffer;
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { CipherContext } from "../context/cipher";
3
- import { DtlsContext } from "../context/dtls";
1
+ import type { CipherContext } from "../context/cipher";
2
+ import type { DtlsContext } from "../context/dtls";
4
3
  import { ContentType } from "./const";
5
4
  import { FragmentedHandshake } from "./message/fragment";
6
5
  import { DtlsPlaintext } from "./message/plaintext";
@@ -1 +1 @@
1
- {"version":3,"file":"receive.js","sourceRoot":"","sources":["../../../../../dtls/src/record/receive.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { CipherContext } from \"../context/cipher\";\nimport { DtlsContext } from \"../context/dtls\";\nimport { Alert } from \"../handshake/message/alert\";\nimport { AlertDesc, ContentType } from \"./const\";\nimport { FragmentedHandshake } from \"./message/fragment\";\nimport { DtlsPlaintext } from \"./message/plaintext\";\n\nconst log = debug(\"werift-dtls : packages/dtls/record/receive.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/record/receive.ts : err\");\n\nexport const parsePacket = (data: Buffer) => {\n let start = 0;\n const packets: DtlsPlaintext[] = [];\n while (data.length > start) {\n const fragmentLength = data.readUInt16BE(start + 11);\n if (data.length < start + (12 + fragmentLength)) break;\n const packet = DtlsPlaintext.deSerialize(data.slice(start));\n packets.push(packet);\n\n start += 13 + fragmentLength;\n }\n\n return packets;\n};\n\nexport const parsePlainText =\n (dtls: DtlsContext, cipher: CipherContext) => (plain: DtlsPlaintext) => {\n const contentType = plain.recordLayerHeader.contentType;\n\n switch (contentType) {\n case ContentType.changeCipherSpec: {\n log(dtls.sessionId, \"change cipher spec\");\n return {\n type: ContentType.changeCipherSpec,\n data: undefined,\n };\n }\n case ContentType.handshake: {\n let raw = plain.fragment;\n try {\n if (plain.recordLayerHeader.epoch > 0) {\n log(dtls.sessionId, \"decrypt handshake\");\n raw = cipher.decryptPacket(plain);\n }\n } catch (error) {\n err(dtls.sessionId, \"decrypt failed\", error);\n throw error;\n }\n try {\n return {\n type: ContentType.handshake,\n data: FragmentedHandshake.deSerialize(raw),\n };\n } catch (error) {\n err(dtls.sessionId, \"decSerialize failed\", error, raw);\n throw error;\n }\n }\n case ContentType.applicationData: {\n return {\n type: ContentType.applicationData,\n data: cipher.decryptPacket(plain),\n };\n }\n case ContentType.alert: {\n let alert = Alert.deSerialize(plain.fragment);\n\n // TODO impl more better about handle encrypted alert\n if (AlertDesc[alert.description] == undefined) {\n const dec = cipher.decryptPacket(plain);\n alert = Alert.deSerialize(dec);\n }\n err(\n dtls.sessionId,\n \"ContentType.alert\",\n alert,\n AlertDesc[alert.description],\n \"flight\",\n dtls.flight,\n \"lastFlight\",\n dtls.lastFlight,\n );\n if (alert.level > 1) {\n throw new Error(\"alert fatal error\");\n }\n }\n // eslint-disable-next-line no-fallthrough\n default: {\n return { type: ContentType.alert, data: undefined };\n }\n }\n };\n"]}
1
+ {"version":3,"file":"receive.js","sourceRoot":"","sources":["../../../../../dtls/src/record/receive.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport type { CipherContext } from \"../context/cipher\";\nimport type { DtlsContext } from \"../context/dtls\";\nimport { Alert } from \"../handshake/message/alert\";\nimport { AlertDesc, ContentType } from \"./const\";\nimport { FragmentedHandshake } from \"./message/fragment\";\nimport { DtlsPlaintext } from \"./message/plaintext\";\n\nconst log = debug(\"werift-dtls : packages/dtls/record/receive.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/record/receive.ts : err\");\n\nexport const parsePacket = (data: Buffer) => {\n let start = 0;\n const packets: DtlsPlaintext[] = [];\n while (data.length > start) {\n const fragmentLength = data.readUInt16BE(start + 11);\n if (data.length < start + (12 + fragmentLength)) break;\n const packet = DtlsPlaintext.deSerialize(data.slice(start));\n packets.push(packet);\n\n start += 13 + fragmentLength;\n }\n\n return packets;\n};\n\nexport const parsePlainText =\n (dtls: DtlsContext, cipher: CipherContext) => (plain: DtlsPlaintext) => {\n const contentType = plain.recordLayerHeader.contentType;\n\n switch (contentType) {\n case ContentType.changeCipherSpec: {\n log(dtls.sessionId, \"change cipher spec\");\n return {\n type: ContentType.changeCipherSpec,\n data: undefined,\n };\n }\n case ContentType.handshake: {\n let raw = plain.fragment;\n try {\n if (plain.recordLayerHeader.epoch > 0) {\n log(dtls.sessionId, \"decrypt handshake\");\n raw = cipher.decryptPacket(plain);\n }\n } catch (error) {\n err(dtls.sessionId, \"decrypt failed\", error);\n throw error;\n }\n try {\n return {\n type: ContentType.handshake,\n data: FragmentedHandshake.deSerialize(raw),\n };\n } catch (error) {\n err(dtls.sessionId, \"decSerialize failed\", error, raw);\n throw error;\n }\n }\n case ContentType.applicationData: {\n return {\n type: ContentType.applicationData,\n data: cipher.decryptPacket(plain),\n };\n }\n case ContentType.alert: {\n let alert = Alert.deSerialize(plain.fragment);\n\n // TODO impl more better about handle encrypted alert\n if (AlertDesc[alert.description] == undefined) {\n const dec = cipher.decryptPacket(plain);\n alert = Alert.deSerialize(dec);\n }\n err(\n dtls.sessionId,\n \"ContentType.alert\",\n alert,\n AlertDesc[alert.description],\n \"flight\",\n dtls.flight,\n \"lastFlight\",\n dtls.lastFlight,\n );\n if (alert.level > 1) {\n throw new Error(\"alert fatal error\");\n }\n }\n // eslint-disable-next-line no-fallthrough\n default: {\n return { type: ContentType.alert, data: undefined };\n }\n }\n };\n"]}
@@ -1,4 +1,4 @@
1
- import { DtlsSocket, Options } from "./socket";
1
+ import { DtlsSocket, type Options } from "./socket";
2
2
  export declare class DtlsServer extends DtlsSocket {
3
3
  constructor(options: Options);
4
4
  private flight6?;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../dtls/src/server.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,uDAAuD;AACvD,qDAAkD;AAClD,qDAAkD;AAClD,qDAAkD;AAClD,6CAAkD;AAClD,4DAA+D;AAE/D,qCAA+C;AAE/C,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,iDAAiD,CAAC,CAAC;AAErE,MAAa,UAAW,SAAQ,mBAAU;IACxC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,EAAE,sBAAW,CAAC,MAAM,CAAC,CAAC;QAK7B;;;;;WAAkB;QAClB;;;;mBAAmB,KAAK,EAAE,SAAgC,EAAE,EAAE;gBACpE,GAAG,CACD,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,kBAAkB,EAClB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CACjC,CAAC;gBAEF,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;oBAClC,QAAQ,SAAS,CAAC,QAAQ,EAAE,CAAC;wBAC3B,YAAY;wBACZ,KAAK,qBAAa,CAAC,cAAc;4BAAE,CAAC;gCAClC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oCACnB,IAAI,CAAC,aAAa,EAAE,CAAC;gCACvB,CAAC;gCACD,MAAM,WAAW,GAAG,mBAAW,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gCAEhE,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCACpC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oCACzC,IAAA,iBAAO,EACL,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,CACV,CAAC,WAAW,CAAC,CAAC;gCACjB,CAAC;qCAAM,IACL,IAAI,CAAC,IAAI,CAAC,MAAM;oCAChB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAC3C,CAAC;oCACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;oCACzC,MAAM,IAAI,iBAAO,CACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,IAAI,CACV,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gCACrD,CAAC;qCAAM,CAAC;oCACN,GAAG,CAAC,aAAa,EAAE;wCACjB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wCACvD,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;qCAC1D,CAAC,CAAC;gCACL,CAAC;4BACH,CAAC;4BACD,MAAM;wBACN,WAAW;wBACX,KAAK,qBAAa,CAAC,cAAc,CAAC;wBAClC,KAAK,qBAAa,CAAC,qBAAqB,CAAC;wBACzC,KAAK,qBAAa,CAAC,sBAAsB;4BAAE,CAAC;gCAC1C,IAAI,IAAI,CAAC,SAAS;oCAAE,OAAO;gCAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gCACnE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;4BAC1C,CAAC;4BACD,MAAM;wBACN,KAAK,qBAAa,CAAC,WAAW;4BAAE,CAAC;gCAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAC9C,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;gCAEzC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCACpE,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;gCAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gCACtB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gCACzB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;4BAC7C,CAAC;4BACD,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;WAAC;QAvEA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC3C,CAAC;CAsEF;AA3ED,gCA2EC","sourcesContent":["import debug from \"debug\";\n\nimport { SessionType } from \"./cipher/suites/abstract\";\nimport { flight2 } from \"./flight/server/flight2\";\nimport { Flight4 } from \"./flight/server/flight4\";\nimport { Flight6 } from \"./flight/server/flight6\";\nimport { HandshakeType } from \"./handshake/const\";\nimport { ClientHello } from \"./handshake/message/client/hello\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { DtlsSocket, Options } from \"./socket\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/server.ts : log\");\n\nexport class DtlsServer extends DtlsSocket {\n constructor(options: Options) {\n super(options, SessionType.SERVER);\n this.onHandleHandshakes = this.handleHandshakes;\n log(this.dtls.sessionId, \"start server\");\n }\n\n private flight6?: Flight6;\n private handleHandshakes = async (assembled: FragmentedHandshake[]) => {\n log(\n this.dtls.sessionId,\n \"handleHandshakes\",\n assembled.map((a) => a.msg_type),\n );\n\n for (const handshake of assembled) {\n switch (handshake.msg_type) {\n // flight1,3\n case HandshakeType.client_hello_1: {\n if (this.connected) {\n this.renegotiation();\n }\n const clientHello = ClientHello.deSerialize(handshake.fragment);\n\n if (clientHello.cookie.length === 0) {\n log(this.dtls.sessionId, \"send flight2\");\n flight2(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n )(clientHello);\n } else if (\n this.dtls.cookie &&\n clientHello.cookie.equals(this.dtls.cookie)\n ) {\n log(this.dtls.sessionId, \"send flight4\");\n await new Flight4(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n ).exec(handshake, this.options.certificateRequest);\n } else {\n log(\"wrong state\", {\n dtlsCookie: this.dtls.cookie?.toString(\"hex\").slice(10),\n helloCookie: clientHello.cookie.toString(\"hex\").slice(10),\n });\n }\n }\n break;\n // flight 5\n case HandshakeType.certificate_11:\n case HandshakeType.certificate_verify_15:\n case HandshakeType.client_key_exchange_16: {\n if (this.connected) return;\n this.flight6 = new Flight6(this.transport, this.dtls, this.cipher);\n this.flight6.handleHandshake(handshake);\n }\n break;\n case HandshakeType.finished_20: {\n await this.waitForReady(() => !!this.flight6);\n this.flight6?.handleHandshake(handshake);\n\n await this.waitForReady(() => this.dtls.checkHandshakesExist([16]));\n await this.flight6?.exec();\n\n this.connected = true;\n this.onConnect.execute();\n log(this.dtls.sessionId, \"dtls connected\");\n }\n break;\n }\n }\n };\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../dtls/src/server.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport { SessionType } from \"./cipher/suites/abstract\";\nimport { flight2 } from \"./flight/server/flight2\";\nimport { Flight4 } from \"./flight/server/flight4\";\nimport { Flight6 } from \"./flight/server/flight6\";\nimport { HandshakeType } from \"./handshake/const\";\nimport { ClientHello } from \"./handshake/message/client/hello\";\nimport type { FragmentedHandshake } from \"./record/message/fragment\";\nimport { DtlsSocket, type Options } from \"./socket\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/server.ts : log\");\n\nexport class DtlsServer extends DtlsSocket {\n constructor(options: Options) {\n super(options, SessionType.SERVER);\n this.onHandleHandshakes = this.handleHandshakes;\n log(this.dtls.sessionId, \"start server\");\n }\n\n private flight6?: Flight6;\n private handleHandshakes = async (assembled: FragmentedHandshake[]) => {\n log(\n this.dtls.sessionId,\n \"handleHandshakes\",\n assembled.map((a) => a.msg_type),\n );\n\n for (const handshake of assembled) {\n switch (handshake.msg_type) {\n // flight1,3\n case HandshakeType.client_hello_1:\n {\n if (this.connected) {\n this.renegotiation();\n }\n const clientHello = ClientHello.deSerialize(handshake.fragment);\n\n if (clientHello.cookie.length === 0) {\n log(this.dtls.sessionId, \"send flight2\");\n flight2(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n )(clientHello);\n } else if (\n this.dtls.cookie &&\n clientHello.cookie.equals(this.dtls.cookie)\n ) {\n log(this.dtls.sessionId, \"send flight4\");\n await new Flight4(\n this.transport,\n this.dtls,\n this.cipher,\n this.srtp,\n ).exec(handshake, this.options.certificateRequest);\n } else {\n log(\"wrong state\", {\n dtlsCookie: this.dtls.cookie?.toString(\"hex\").slice(10),\n helloCookie: clientHello.cookie.toString(\"hex\").slice(10),\n });\n }\n }\n break;\n // flight 5\n case HandshakeType.certificate_11:\n case HandshakeType.certificate_verify_15:\n case HandshakeType.client_key_exchange_16:\n {\n if (this.connected) return;\n this.flight6 = new Flight6(this.transport, this.dtls, this.cipher);\n this.flight6.handleHandshake(handshake);\n }\n break;\n case HandshakeType.finished_20:\n {\n await this.waitForReady(() => !!this.flight6);\n this.flight6?.handleHandshake(handshake);\n\n await this.waitForReady(() => this.dtls.checkHandshakesExist([16]));\n await this.flight6?.exec();\n\n this.connected = true;\n this.onConnect.execute();\n log(this.dtls.sessionId, \"dtls connected\");\n }\n break;\n }\n }\n };\n}\n"]}
@@ -1,14 +1,13 @@
1
- /// <reference types="node" />
2
1
  import { Event } from "rx.mini";
3
- import { SignatureHash } from "./cipher/const";
4
- import { SessionTypes } from "./cipher/suites/abstract";
2
+ import { type SignatureHash } from "./cipher/const";
3
+ import { type SessionTypes } from "./cipher/suites/abstract";
5
4
  import { CipherContext } from "./context/cipher";
6
5
  import { DtlsContext } from "./context/dtls";
7
- import { Profile, SrtpContext } from "./context/srtp";
6
+ import { type Profile, SrtpContext } from "./context/srtp";
8
7
  import { TransportContext } from "./context/transport";
9
8
  import { FragmentedHandshake } from "./record/message/fragment";
10
- import { Transport } from "./transport";
11
- import { Extension } from "./typings/domain";
9
+ import type { Transport } from "./transport";
10
+ import type { Extension } from "./typings/domain";
12
11
  export declare class DtlsSocket {
13
12
  options: Options;
14
13
  sessionType: SessionTypes;
@@ -161,18 +161,16 @@ class DtlsSocket {
161
161
  configurable: true,
162
162
  writable: true,
163
163
  value: (condition) => new Promise(async (r, f) => {
164
- {
165
- for (let i = 0; i < 10; i++) {
166
- if (condition()) {
167
- r();
168
- break;
169
- }
170
- else {
171
- await (0, promises_1.setTimeout)(100 * i);
172
- }
164
+ for (let i = 0; i < 10; i++) {
165
+ if (condition()) {
166
+ r();
167
+ break;
168
+ }
169
+ else {
170
+ await (0, promises_1.setTimeout)(100 * i);
173
171
  }
174
- f("waitForReady timeout");
175
172
  }
173
+ f("waitForReady timeout");
176
174
  })
177
175
  });
178
176
  /**send application data */
@@ -201,12 +199,10 @@ class DtlsSocket {
201
199
  this.bufferFragmentedHandshakes = [];
202
200
  }
203
201
  setupExtensions() {
204
- {
205
- log(this.dtls.sessionId, "support srtpProfiles", this.options.srtpProfiles);
206
- if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {
207
- const useSrtp = useSrtp_1.UseSRTP.create(this.options.srtpProfiles, Buffer.from([0x00]));
208
- this.extensions.push(useSrtp.extension);
209
- }
202
+ log(this.dtls.sessionId, "support srtpProfiles", this.options.srtpProfiles);
203
+ if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {
204
+ const useSrtp = useSrtp_1.UseSRTP.create(this.options.srtpProfiles, Buffer.from([0x00]));
205
+ this.extensions.push(useSrtp.extension);
210
206
  }
211
207
  {
212
208
  const curve = ellipticCurves_1.EllipticCurves.createEmpty();
@@ -219,13 +215,11 @@ class DtlsSocket {
219
215
  signature.data = const_1.signatures;
220
216
  this.extensions.push(signature.extension);
221
217
  }
222
- {
223
- if (this.options.extendedMasterSecret) {
224
- this.extensions.push({
225
- type: extendedMasterSecret_1.ExtendedMasterSecret.type,
226
- data: Buffer.alloc(0),
227
- });
228
- }
218
+ if (this.options.extendedMasterSecret) {
219
+ this.extensions.push({
220
+ type: extendedMasterSecret_1.ExtendedMasterSecret.type,
221
+ data: Buffer.alloc(0),
222
+ });
229
223
  }
230
224
  {
231
225
  const renegotiationIndication = renegotiationIndication_1.RenegotiationIndication.createEmpty();
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../../dtls/src/socket.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\nimport debug from \"debug\";\nimport { Event } from \"rx.mini\";\nimport { setTimeout } from \"timers/promises\";\n\nimport {\n NamedCurveAlgorithmList,\n SignatureHash,\n signatures,\n} from \"./cipher/const\";\nimport { exportKeyingMaterial } from \"./cipher/prf\";\nimport { SessionType, SessionTypes } from \"./cipher/suites/abstract\";\nimport { CipherContext } from \"./context/cipher\";\nimport { DtlsContext } from \"./context/dtls\";\nimport { Profile, SrtpContext } from \"./context/srtp\";\nimport { TransportContext } from \"./context/transport\";\nimport { EllipticCurves } from \"./handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"./handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"./handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"./handshake/extensions/signature\";\nimport { UseSRTP } from \"./handshake/extensions/useSrtp\";\nimport { createPlaintext } from \"./record/builder\";\nimport { ContentType } from \"./record/const\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { parsePacket, parsePlainText } from \"./record/receive\";\nimport { Transport } from \"./transport\";\nimport { Extension } from \"./typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/socket.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/src/socket.ts : err\");\n\nexport class DtlsSocket {\n readonly onConnect = new Event();\n readonly onData = new Event<[Buffer]>();\n readonly onError = new Event<[Error]>();\n readonly onClose = new Event();\n readonly transport: TransportContext;\n cipher: CipherContext;\n dtls: DtlsContext;\n srtp: SrtpContext = new SrtpContext();\n\n connected = false;\n extensions: Extension[] = [];\n onHandleHandshakes!: (assembled: FragmentedHandshake[]) => Promise<void>;\n\n private bufferFragmentedHandshakes: FragmentedHandshake[] = [];\n\n constructor(public options: Options, public sessionType: SessionTypes) {\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.transport = new TransportContext(this.options.transport);\n this.setupExtensions();\n this.transport.socket.onData = this.udpOnMessage;\n }\n\n renegotiation() {\n log(\"renegotiation\", this.sessionType);\n this.connected = false;\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.srtp = new SrtpContext();\n this.extensions = [];\n this.bufferFragmentedHandshakes = [];\n }\n\n private udpOnMessage = (data: Buffer) => {\n const packets = parsePacket(data);\n\n for (const packet of packets) {\n try {\n const message = parsePlainText(this.dtls, this.cipher)(packet);\n switch (message.type) {\n case ContentType.handshake: {\n const handshake = message.data as FragmentedHandshake;\n const handshakes = this.handleFragmentHandshake([handshake]);\n const assembled = Object.values(\n handshakes.reduce(\n (acc: { [type: string]: FragmentedHandshake[] }, cur) => {\n if (!acc[cur.msg_type]) acc[cur.msg_type] = [];\n acc[cur.msg_type].push(cur);\n return acc;\n },\n {},\n ),\n )\n .map((v) => FragmentedHandshake.assemble(v))\n .sort((a, b) => a.msg_type - b.msg_type);\n\n this.onHandleHandshakes(assembled).catch((error) => {\n err(this.dtls.sessionId, \"onHandleHandshakes error\", error);\n this.onError.execute(error);\n });\n }\n break;\n case ContentType.applicationData: {\n this.onData.execute(message.data as Buffer);\n }\n break;\n case ContentType.alert:\n this.onClose.execute();\n break;\n }\n } catch (error) {\n err(this.dtls.sessionId, \"catch udpOnMessage error\", error);\n }\n }\n };\n\n private setupExtensions() {\n {\n log(\n this.dtls.sessionId,\n \"support srtpProfiles\",\n this.options.srtpProfiles,\n );\n if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {\n const useSrtp = UseSRTP.create(\n this.options.srtpProfiles,\n Buffer.from([0x00]),\n );\n this.extensions.push(useSrtp.extension);\n }\n }\n\n {\n const curve = EllipticCurves.createEmpty();\n curve.data = NamedCurveAlgorithmList;\n this.extensions.push(curve.extension);\n }\n\n {\n const signature = Signature.createEmpty();\n // libwebrtc/OpenSSL require 4=1 , 4=3 signatureHash\n signature.data = signatures;\n this.extensions.push(signature.extension);\n }\n\n {\n if (this.options.extendedMasterSecret) {\n this.extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n }\n\n {\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n this.extensions.push(renegotiationIndication.extension);\n }\n }\n\n protected waitForReady = (condition: () => boolean) =>\n new Promise<void>(async (r, f) => {\n {\n for (let i = 0; i < 10; i++) {\n if (condition()) {\n r();\n break;\n } else {\n await setTimeout(100 * i);\n }\n }\n f(\"waitForReady timeout\");\n }\n });\n\n handleFragmentHandshake(messages: FragmentedHandshake[]) {\n let handshakes = messages.filter((v) => {\n // find fragmented\n if (v.fragment_length !== v.length) {\n this.bufferFragmentedHandshakes.push(v);\n return false;\n }\n return true;\n });\n\n if (this.bufferFragmentedHandshakes.length > 1) {\n const [last] = this.bufferFragmentedHandshakes.slice(-1);\n if (last.fragment_offset + last.fragment_length === last.length) {\n handshakes = [...this.bufferFragmentedHandshakes, ...handshakes];\n this.bufferFragmentedHandshakes = [];\n }\n }\n return handshakes; // return un fragmented handshakes\n }\n\n /**send application data */\n send = async (buf: Buffer) => {\n const pkt = createPlaintext(this.dtls)(\n [{ type: ContentType.applicationData, fragment: buf }],\n ++this.dtls.recordSequenceNumber,\n )[0];\n await this.transport.send(this.cipher.encryptPacket(pkt).serialize());\n };\n\n close() {\n this.transport.socket.close();\n }\n\n extractSessionKeys(keyLength: number, saltLength: number) {\n const keyingMaterial = this.exportKeyingMaterial(\n \"EXTRACTOR-dtls_srtp\",\n keyLength * 2 + saltLength * 2,\n );\n\n const { clientKey, serverKey, clientSalt, serverSalt } = decode(\n keyingMaterial,\n {\n clientKey: types.buffer(keyLength),\n serverKey: types.buffer(keyLength),\n clientSalt: types.buffer(saltLength),\n serverSalt: types.buffer(saltLength),\n },\n );\n\n if (this.sessionType === SessionType.CLIENT) {\n return {\n localKey: clientKey,\n localSalt: clientSalt,\n remoteKey: serverKey,\n remoteSalt: serverSalt,\n };\n } else {\n return {\n localKey: serverKey,\n localSalt: serverSalt,\n remoteKey: clientKey,\n remoteSalt: clientSalt,\n };\n }\n }\n\n exportKeyingMaterial(label: string, length: number) {\n return exportKeyingMaterial(\n label,\n length,\n this.cipher.masterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n this.sessionType === SessionType.CLIENT,\n );\n }\n}\n\nexport interface Options {\n transport: Transport;\n srtpProfiles?: Profile[];\n cert?: string;\n key?: string;\n signatureHash?: SignatureHash;\n certificateRequest?: boolean;\n extendedMasterSecret?: boolean;\n}\n"]}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../../dtls/src/socket.ts"],"names":[],"mappings":"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","sourcesContent":["import { decode, types } from \"@shinyoshiaki/binary-data\";\nimport debug from \"debug\";\nimport { Event } from \"rx.mini\";\nimport { setTimeout } from \"timers/promises\";\n\nimport {\n NamedCurveAlgorithmList,\n type SignatureHash,\n signatures,\n} from \"./cipher/const\";\nimport { exportKeyingMaterial } from \"./cipher/prf\";\nimport { SessionType, type SessionTypes } from \"./cipher/suites/abstract\";\nimport { CipherContext } from \"./context/cipher\";\nimport { DtlsContext } from \"./context/dtls\";\nimport { type Profile, SrtpContext } from \"./context/srtp\";\nimport { TransportContext } from \"./context/transport\";\nimport { EllipticCurves } from \"./handshake/extensions/ellipticCurves\";\nimport { ExtendedMasterSecret } from \"./handshake/extensions/extendedMasterSecret\";\nimport { RenegotiationIndication } from \"./handshake/extensions/renegotiationIndication\";\nimport { Signature } from \"./handshake/extensions/signature\";\nimport { UseSRTP } from \"./handshake/extensions/useSrtp\";\nimport { createPlaintext } from \"./record/builder\";\nimport { ContentType } from \"./record/const\";\nimport { FragmentedHandshake } from \"./record/message/fragment\";\nimport { parsePacket, parsePlainText } from \"./record/receive\";\nimport type { Transport } from \"./transport\";\nimport type { Extension } from \"./typings/domain\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/socket.ts : log\");\nconst err = debug(\"werift-dtls : packages/dtls/src/socket.ts : err\");\n\nexport class DtlsSocket {\n readonly onConnect = new Event();\n readonly onData = new Event<[Buffer]>();\n readonly onError = new Event<[Error]>();\n readonly onClose = new Event();\n readonly transport: TransportContext;\n cipher: CipherContext;\n dtls: DtlsContext;\n srtp: SrtpContext = new SrtpContext();\n\n connected = false;\n extensions: Extension[] = [];\n onHandleHandshakes!: (assembled: FragmentedHandshake[]) => Promise<void>;\n\n private bufferFragmentedHandshakes: FragmentedHandshake[] = [];\n\n constructor(\n public options: Options,\n public sessionType: SessionTypes,\n ) {\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.transport = new TransportContext(this.options.transport);\n this.setupExtensions();\n this.transport.socket.onData = this.udpOnMessage;\n }\n\n renegotiation() {\n log(\"renegotiation\", this.sessionType);\n this.connected = false;\n this.cipher = new CipherContext(\n this.sessionType,\n this.options.cert,\n this.options.key,\n this.options.signatureHash,\n );\n this.dtls = new DtlsContext(this.options, this.sessionType);\n this.srtp = new SrtpContext();\n this.extensions = [];\n this.bufferFragmentedHandshakes = [];\n }\n\n private udpOnMessage = (data: Buffer) => {\n const packets = parsePacket(data);\n\n for (const packet of packets) {\n try {\n const message = parsePlainText(this.dtls, this.cipher)(packet);\n switch (message.type) {\n case ContentType.handshake:\n {\n const handshake = message.data as FragmentedHandshake;\n const handshakes = this.handleFragmentHandshake([handshake]);\n const assembled = Object.values(\n handshakes.reduce(\n (acc: { [type: string]: FragmentedHandshake[] }, cur) => {\n if (!acc[cur.msg_type]) acc[cur.msg_type] = [];\n acc[cur.msg_type].push(cur);\n return acc;\n },\n {},\n ),\n )\n .map((v) => FragmentedHandshake.assemble(v))\n .sort((a, b) => a.msg_type - b.msg_type);\n\n this.onHandleHandshakes(assembled).catch((error) => {\n err(this.dtls.sessionId, \"onHandleHandshakes error\", error);\n this.onError.execute(error);\n });\n }\n break;\n case ContentType.applicationData:\n {\n this.onData.execute(message.data as Buffer);\n }\n break;\n case ContentType.alert:\n this.onClose.execute();\n break;\n }\n } catch (error) {\n err(this.dtls.sessionId, \"catch udpOnMessage error\", error);\n }\n }\n };\n\n private setupExtensions() {\n log(this.dtls.sessionId, \"support srtpProfiles\", this.options.srtpProfiles);\n if (this.options.srtpProfiles && this.options.srtpProfiles.length > 0) {\n const useSrtp = UseSRTP.create(\n this.options.srtpProfiles,\n Buffer.from([0x00]),\n );\n this.extensions.push(useSrtp.extension);\n }\n\n {\n const curve = EllipticCurves.createEmpty();\n curve.data = NamedCurveAlgorithmList;\n this.extensions.push(curve.extension);\n }\n\n {\n const signature = Signature.createEmpty();\n // libwebrtc/OpenSSL require 4=1 , 4=3 signatureHash\n signature.data = signatures;\n this.extensions.push(signature.extension);\n }\n if (this.options.extendedMasterSecret) {\n this.extensions.push({\n type: ExtendedMasterSecret.type,\n data: Buffer.alloc(0),\n });\n }\n\n {\n const renegotiationIndication = RenegotiationIndication.createEmpty();\n this.extensions.push(renegotiationIndication.extension);\n }\n }\n\n protected waitForReady = (condition: () => boolean) =>\n new Promise<void>(async (r, f) => {\n for (let i = 0; i < 10; i++) {\n if (condition()) {\n r();\n break;\n } else {\n await setTimeout(100 * i);\n }\n }\n f(\"waitForReady timeout\");\n });\n\n handleFragmentHandshake(messages: FragmentedHandshake[]) {\n let handshakes = messages.filter((v) => {\n // find fragmented\n if (v.fragment_length !== v.length) {\n this.bufferFragmentedHandshakes.push(v);\n return false;\n }\n return true;\n });\n\n if (this.bufferFragmentedHandshakes.length > 1) {\n const [last] = this.bufferFragmentedHandshakes.slice(-1);\n if (last.fragment_offset + last.fragment_length === last.length) {\n handshakes = [...this.bufferFragmentedHandshakes, ...handshakes];\n this.bufferFragmentedHandshakes = [];\n }\n }\n return handshakes; // return un fragmented handshakes\n }\n\n /**send application data */\n send = async (buf: Buffer) => {\n const pkt = createPlaintext(this.dtls)(\n [{ type: ContentType.applicationData, fragment: buf }],\n ++this.dtls.recordSequenceNumber,\n )[0];\n await this.transport.send(this.cipher.encryptPacket(pkt).serialize());\n };\n\n close() {\n this.transport.socket.close();\n }\n\n extractSessionKeys(keyLength: number, saltLength: number) {\n const keyingMaterial = this.exportKeyingMaterial(\n \"EXTRACTOR-dtls_srtp\",\n keyLength * 2 + saltLength * 2,\n );\n\n const { clientKey, serverKey, clientSalt, serverSalt } = decode(\n keyingMaterial,\n {\n clientKey: types.buffer(keyLength),\n serverKey: types.buffer(keyLength),\n clientSalt: types.buffer(saltLength),\n serverSalt: types.buffer(saltLength),\n },\n );\n\n if (this.sessionType === SessionType.CLIENT) {\n return {\n localKey: clientKey,\n localSalt: clientSalt,\n remoteKey: serverKey,\n remoteSalt: serverSalt,\n };\n } else {\n return {\n localKey: serverKey,\n localSalt: serverSalt,\n remoteKey: clientKey,\n remoteSalt: clientSalt,\n };\n }\n }\n\n exportKeyingMaterial(label: string, length: number) {\n return exportKeyingMaterial(\n label,\n length,\n this.cipher.masterSecret,\n this.cipher.localRandom.serialize(),\n this.cipher.remoteRandom.serialize(),\n this.sessionType === SessionType.CLIENT,\n );\n }\n}\n\nexport interface Options {\n transport: Transport;\n srtpProfiles?: Profile[];\n cert?: string;\n key?: string;\n signatureHash?: SignatureHash;\n certificateRequest?: boolean;\n extendedMasterSecret?: boolean;\n}\n"]}
@@ -1,6 +1,4 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { RemoteInfo, Socket } from "dgram";
1
+ import type { RemoteInfo, Socket } from "dgram";
4
2
  export interface Transport {
5
3
  onData?: (buf: Buffer) => void;
6
4
  send: (buf: Buffer) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../dtls/src/transport.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAE1B,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,8CAA8C,CAAC,CAAC;AAQlE,MAAa,YAAY;IACvB,YAAoB,GAAW,EAAU,KAA0B;QAAvD;;;;mBAAQ,GAAG;WAAQ;QAAE;;;;mBAAQ,KAAK;WAAqB;QAMnE;;;;;WAA+B;QAE/B;;;;mBAAO,CAAC,GAAW,EAAE,EAAE,CACrB,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC9D,IAAI,GAAG,EAAE,CAAC;wBACR,CAAC,CAAC,GAAG,CAAC,CAAC;oBACT,CAAC;yBAAM,CAAC;wBACN,CAAC,EAAE,CAAC;oBACN,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;WAAC;QAjBH,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAeD,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IACpB,CAAC;CACF;AA1BD,oCA0BC;AAEM,MAAM,kBAAkB,GAAG,CAChC,MAAc,EACd,QAA6B,EAAE,EAC/B,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAHxB,QAAA,kBAAkB,sBAGM","sourcesContent":["import { RemoteInfo, Socket } from \"dgram\";\nimport debug from \"debug\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/transport.ts\");\n\nexport interface Transport {\n onData?: (buf: Buffer) => void;\n send: (buf: Buffer) => Promise<void>;\n close: () => void;\n}\n\nexport class UdpTransport implements Transport {\n constructor(private upd: Socket, private rinfo: Partial<RemoteInfo>) {\n upd.on(\"message\", (buf, target) => {\n this.rinfo = target;\n if (this.onData) this.onData(buf);\n });\n }\n onData?: (buf: Buffer) => void;\n\n send = (buf: Buffer) =>\n new Promise<void>((r, f) => {\n log(\"this.rinfo\", this.rinfo);\n this.upd.send(buf, this.rinfo.port, this.rinfo.address, (err) => {\n if (err) {\n f(err);\n } else {\n r();\n }\n });\n });\n\n close() {\n try {\n this.upd.close();\n } catch (error) {}\n }\n}\n\nexport const createUdpTransport = (\n socket: Socket,\n rinfo: Partial<RemoteInfo> = {},\n) => new UdpTransport(socket, rinfo);\n"]}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../dtls/src/transport.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAE1B,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,8CAA8C,CAAC,CAAC;AAQlE,MAAa,YAAY;IACvB,YACU,GAAW,EACX,KAA0B;QADlC;;;;mBAAQ,GAAG;WAAQ;QACnB;;;;mBAAQ,KAAK;WAAqB;QAOpC;;;;;WAA+B;QAE/B;;;;mBAAO,CAAC,GAAW,EAAE,EAAE,CACrB,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACzB,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC9D,IAAI,GAAG,EAAE,CAAC;wBACR,CAAC,CAAC,GAAG,CAAC,CAAC;oBACT,CAAC;yBAAM,CAAC;wBACN,CAAC,EAAE,CAAC;oBACN,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;WAAC;QAjBH,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAeD,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,CAAA,CAAC;IACpB,CAAC;CACF;AA7BD,oCA6BC;AAEM,MAAM,kBAAkB,GAAG,CAChC,MAAc,EACd,QAA6B,EAAE,EAC/B,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAHxB,QAAA,kBAAkB,sBAGM","sourcesContent":["import type { RemoteInfo, Socket } from \"dgram\";\nimport debug from \"debug\";\n\nconst log = debug(\"werift-dtls : packages/dtls/src/transport.ts\");\n\nexport interface Transport {\n onData?: (buf: Buffer) => void;\n send: (buf: Buffer) => Promise<void>;\n close: () => void;\n}\n\nexport class UdpTransport implements Transport {\n constructor(\n private upd: Socket,\n private rinfo: Partial<RemoteInfo>,\n ) {\n upd.on(\"message\", (buf, target) => {\n this.rinfo = target;\n if (this.onData) this.onData(buf);\n });\n }\n onData?: (buf: Buffer) => void;\n\n send = (buf: Buffer) =>\n new Promise<void>((r, f) => {\n log(\"this.rinfo\", this.rinfo);\n this.upd.send(buf, this.rinfo.port, this.rinfo.address, (err) => {\n if (err) {\n f(err);\n } else {\n r();\n }\n });\n });\n\n close() {\n try {\n this.upd.close();\n } catch (error) {}\n }\n}\n\nexport const createUdpTransport = (\n socket: Socket,\n rinfo: Partial<RemoteInfo> = {},\n) => new UdpTransport(socket, rinfo);\n"]}
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { HandshakeType } from "../handshake/const";
3
- import { FragmentedHandshake } from "../record/message/fragment";
1
+ import type { HandshakeType } from "../handshake/const";
2
+ import type { FragmentedHandshake } from "../record/message/fragment";
4
3
  export type Version = {
5
4
  major: number;
6
5
  minor: number;
@@ -1 +1 @@
1
- {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../../../dtls/src/typings/domain.ts"],"names":[],"mappings":"","sourcesContent":["import { HandshakeType } from \"../handshake/const\";\nimport { FragmentedHandshake } from \"../record/message/fragment\";\n\nexport type Version = { major: number; minor: number };\nexport type Random = { gmt_unix_time: number; random_bytes: Buffer };\n\nexport type Handshake = {\n msgType: HandshakeType;\n messageSeq?: number;\n serialize: () => Buffer;\n toFragment: () => FragmentedHandshake;\n};\n\nexport type Extension = {\n type: number;\n data: Buffer;\n};\n"]}
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../../../../dtls/src/typings/domain.ts"],"names":[],"mappings":"","sourcesContent":["import type { HandshakeType } from \"../handshake/const\";\nimport type { FragmentedHandshake } from \"../record/message/fragment\";\n\nexport type Version = { major: number; minor: number };\nexport type Random = { gmt_unix_time: number; random_bytes: Buffer };\n\nexport type Handshake = {\n msgType: HandshakeType;\n messageSeq?: number;\n serialize: () => Buffer;\n toFragment: () => FragmentedHandshake;\n};\n\nexport type Extension = {\n type: number;\n data: Buffer;\n};\n"]}
@@ -1,2 +1 @@
1
- /// <reference types="node" />
2
1
  export declare function encodeBuffer(obj: object, spec: object): Buffer;
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeBuffer = void 0;
3
+ exports.encodeBuffer = encodeBuffer;
4
4
  const binary_data_1 = require("@shinyoshiaki/binary-data");
5
5
  function encodeBuffer(obj, spec) {
6
6
  return Buffer.from((0, binary_data_1.encode)(obj, spec).slice());
7
7
  }
8
- exports.encodeBuffer = encodeBuffer;
9
8
  //# sourceMappingURL=binary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../../dtls/src/util/binary.ts"],"names":[],"mappings":";;;AAAA,2DAAmD;AAEnD,SAAgB,YAAY,CAAC,GAAW,EAAE,IAAY;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAFD,oCAEC","sourcesContent":["import { encode } from \"@shinyoshiaki/binary-data\";\n\nexport function encodeBuffer(obj: object, spec: object) {\n return Buffer.from(encode(obj, spec).slice());\n}\n"]}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../../../dtls/src/util/binary.ts"],"names":[],"mappings":";;AAEA,oCAEC;AAJD,2DAAmD;AAEnD,SAAgB,YAAY,CAAC,GAAW,EAAE,IAAY;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { encode } from \"@shinyoshiaki/binary-data\";\n\nexport function encodeBuffer(obj: object, spec: object) {\n return Buffer.from(encode(obj, spec).slice());\n}\n"]}
@@ -3,7 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.candidatePriority = exports.candidateFoundation = exports.Candidate = void 0;
6
+ exports.Candidate = void 0;
7
+ exports.candidateFoundation = candidateFoundation;
8
+ exports.candidatePriority = candidatePriority;
7
9
  const crypto_1 = require("crypto");
8
10
  const net_1 = require("net");
9
11
  const range_1 = __importDefault(require("lodash/range"));
@@ -144,7 +146,6 @@ function candidateFoundation(candidateType, candidateTransport, baseAddress) {
144
146
  const key = `${candidateType}|${candidateTransport}|${baseAddress}`;
145
147
  return (0, crypto_1.createHash)("md5").update(key, "ascii").digest("hex").slice(7);
146
148
  }
147
- exports.candidateFoundation = candidateFoundation;
148
149
  // priorityを決める
149
150
  function candidatePriority(candidateComponent, candidateType, localPref = 65535) {
150
151
  // See RFC 5245 - 4.1.2.1. Recommended Formula
@@ -163,5 +164,4 @@ function candidatePriority(candidateComponent, candidateType, localPref = 65535)
163
164
  }
164
165
  return ((1 << 24) * typePref + (1 << 8) * localPref + (256 - candidateComponent));
165
166
  }
166
- exports.candidatePriority = candidatePriority;
167
167
  //# sourceMappingURL=candidate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"candidate.js","sourceRoot":"","sources":["../../../../ice/src/candidate.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport { isIPv4 } from \"net\";\nimport range from \"lodash/range\";\n\nexport class Candidate {\n // An ICE candidate.\n\n constructor(\n public foundation: string,\n public component: number,\n public transport: string,\n public priority: number,\n public host: string,\n public port: number,\n public type: string,\n public relatedAddress?: string,\n public relatedPort?: number,\n public tcptype?: string,\n public generation?: number,\n ) {}\n\n static fromSdp(sdp: string) {\n // Parse a :class:`Candidate` from SDP.\n // .. code-block:: python\n // Candidate.from_sdp(\n // '6815297761 1 udp 659136 1.2.3.4 31102 typ host generation 0')\n\n const bits = sdp.split(\" \");\n if (bits.length < 8) throw new Error(\"SDP does not have enough properties\");\n\n const kwargs = {\n foundation: bits[0],\n component: Number(bits[1]),\n transport: bits[2],\n priority: Number(bits[3]),\n host: bits[4],\n port: Number(bits[5]),\n type: bits[7],\n };\n\n for (const i of range(8, bits.length - 1, 2)) {\n if (bits[i] === \"raddr\") {\n (kwargs as any)[\"related_address\"] = bits[i + 1];\n } else if (bits[i] === \"rport\") {\n (kwargs as any)[\"related_port\"] = Number(bits[i + 1]);\n } else if (bits[i] === \"tcptype\") {\n (kwargs as any)[\"tcptype\"] = bits[i + 1];\n } else if (bits[i] === \"generation\") {\n (kwargs as any)[\"generation\"] = Number(bits[i + 1]);\n }\n }\n const { foundation, component, transport, priority, host, port, type } =\n kwargs;\n\n return new Candidate(\n foundation,\n component,\n transport,\n priority,\n host,\n port,\n type,\n (kwargs as any)[\"related_address\"],\n (kwargs as any)[\"related_port\"],\n (kwargs as any)[\"tcptype\"],\n (kwargs as any)[\"generation\"],\n );\n }\n\n canPairWith(other: Candidate) {\n // \"\"\"\n // A local candidate is paired with a remote candidate if and only if\n // the two candidates have the same component ID and have the same IP\n // address version.\n // \"\"\"\n const a = isIPv4(this.host);\n const b = isIPv4(other.host);\n return (\n this.component === other.component &&\n this.transport.toLowerCase() === other.transport.toLowerCase() &&\n a === b\n );\n }\n\n toSdp() {\n let sdp = `${this.foundation} ${this.component} ${this.transport} ${this.priority} ${this.host} ${this.port} typ ${this.type}`;\n\n if (this.relatedAddress) sdp += ` raddr ${this.relatedAddress}`;\n if (this.relatedPort != undefined) sdp += ` rport ${this.relatedPort}`;\n if (this.tcptype) sdp += ` tcptype ${this.tcptype}`;\n if (this.generation != undefined) sdp += ` generation ${this.generation}`;\n\n return sdp;\n }\n}\n\nexport function candidateFoundation(\n candidateType: string,\n candidateTransport: string,\n baseAddress: string,\n) {\n // \"\"\"\n // See RFC 5245 - 4.1.1.3. Computing Foundations\n // \"\"\"\n const key = `${candidateType}|${candidateTransport}|${baseAddress}`;\n\n return createHash(\"md5\").update(key, \"ascii\").digest(\"hex\").slice(7);\n}\n\n// priorityを決める\nexport function candidatePriority(\n candidateComponent: number,\n candidateType: string,\n localPref = 65535,\n) {\n // See RFC 5245 - 4.1.2.1. Recommended Formula\n let typePref = 0;\n if (candidateType === \"host\") {\n typePref = 126;\n } else if (candidateType === \"prflx\") {\n typePref = 110;\n } else if (candidateType === \"srflx\") {\n typePref = 100;\n } else {\n typePref = 0;\n }\n return (\n (1 << 24) * typePref + (1 << 8) * localPref + (256 - candidateComponent)\n );\n}\n"]}
1
+ {"version":3,"file":"candidate.js","sourceRoot":"","sources":["../../../../ice/src/candidate.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport { isIPv4 } from \"net\";\nimport range from \"lodash/range\";\n\nexport class Candidate {\n // An ICE candidate.\n\n constructor(\n public foundation: string,\n public component: number,\n public transport: string,\n public priority: number,\n public host: string,\n public port: number,\n public type: string,\n public relatedAddress?: string,\n public relatedPort?: number,\n public tcptype?: string,\n public generation?: number,\n ) {}\n\n static fromSdp(sdp: string) {\n // Parse a :class:`Candidate` from SDP.\n // .. code-block:: python\n // Candidate.from_sdp(\n // '6815297761 1 udp 659136 1.2.3.4 31102 typ host generation 0')\n\n const bits = sdp.split(\" \");\n if (bits.length < 8) throw new Error(\"SDP does not have enough properties\");\n\n const kwargs = {\n foundation: bits[0],\n component: Number(bits[1]),\n transport: bits[2],\n priority: Number(bits[3]),\n host: bits[4],\n port: Number(bits[5]),\n type: bits[7],\n };\n\n for (const i of range(8, bits.length - 1, 2)) {\n if (bits[i] === \"raddr\") {\n (kwargs as any)[\"related_address\"] = bits[i + 1];\n } else if (bits[i] === \"rport\") {\n (kwargs as any)[\"related_port\"] = Number(bits[i + 1]);\n } else if (bits[i] === \"tcptype\") {\n (kwargs as any)[\"tcptype\"] = bits[i + 1];\n } else if (bits[i] === \"generation\") {\n (kwargs as any)[\"generation\"] = Number(bits[i + 1]);\n }\n }\n const { foundation, component, transport, priority, host, port, type } =\n kwargs;\n\n return new Candidate(\n foundation,\n component,\n transport,\n priority,\n host,\n port,\n type,\n (kwargs as any)[\"related_address\"],\n (kwargs as any)[\"related_port\"],\n (kwargs as any)[\"tcptype\"],\n (kwargs as any)[\"generation\"],\n );\n }\n\n canPairWith(other: Candidate) {\n // \"\"\"\n // A local candidate is paired with a remote candidate if and only if\n // the two candidates have the same component ID and have the same IP\n // address version.\n // \"\"\"\n const a = isIPv4(this.host);\n const b = isIPv4(other.host);\n return (\n this.component === other.component &&\n this.transport.toLowerCase() === other.transport.toLowerCase() &&\n a === b\n );\n }\n\n toSdp() {\n let sdp = `${this.foundation} ${this.component} ${this.transport} ${this.priority} ${this.host} ${this.port} typ ${this.type}`;\n\n if (this.relatedAddress) sdp += ` raddr ${this.relatedAddress}`;\n if (this.relatedPort != undefined) sdp += ` rport ${this.relatedPort}`;\n if (this.tcptype) sdp += ` tcptype ${this.tcptype}`;\n if (this.generation != undefined) sdp += ` generation ${this.generation}`;\n\n return sdp;\n }\n}\n\nexport function candidateFoundation(\n candidateType: string,\n candidateTransport: string,\n baseAddress: string,\n) {\n // \"\"\"\n // See RFC 5245 - 4.1.1.3. Computing Foundations\n // \"\"\"\n const key = `${candidateType}|${candidateTransport}|${baseAddress}`;\n\n return createHash(\"md5\").update(key, \"ascii\").digest(\"hex\").slice(7);\n}\n\n// priorityを決める\nexport function candidatePriority(\n candidateComponent: number,\n candidateType: string,\n localPref = 65535,\n) {\n // See RFC 5245 - 4.1.2.1. Recommended Formula\n let typePref = 0;\n if (candidateType === \"host\") {\n typePref = 126;\n } else if (candidateType === \"prflx\") {\n typePref = 110;\n } else if (candidateType === \"srflx\") {\n typePref = 100;\n } else {\n typePref = 0;\n }\n return (\n (1 << 24) * typePref + (1 << 8) * localPref + (256 - candidateComponent)\n );\n}\n"]}
@@ -1,9 +1,9 @@
1
- /// <reference types="node" />
2
1
  import mdns from "multicast-dns";
3
2
  import worker_thread from "worker_threads";
4
3
  export declare class MdnsLookup {
5
4
  cache: Map<string, Promise<string>>;
6
5
  mdnsInstance: mdns.MulticastDNS;
6
+ constructor();
7
7
  lookup(host: string): Promise<string>;
8
8
  close(): void;
9
9
  }
@@ -20,6 +20,7 @@ class MdnsLookup {
20
20
  writable: true,
21
21
  value: (0, multicast_dns_1.default)()
22
22
  });
23
+ this.mdnsInstance.setMaxListeners(50);
23
24
  }
24
25
  lookup(host) {
25
26
  return new Promise((r, f) => {