isomorfeus-puppetmaster 0.5.1 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -17
  3. data/lib/isomorfeus/puppetmaster/driver/puppeteer.rb +32 -20
  4. data/lib/isomorfeus/puppetmaster/driver/puppeteer_document.rb +30 -30
  5. data/lib/isomorfeus/puppetmaster/driver/puppeteer_node.rb +4 -4
  6. data/lib/isomorfeus/puppetmaster/node.rb +3 -3
  7. data/lib/isomorfeus/puppetmaster/server.rb +1 -1
  8. data/lib/isomorfeus/puppetmaster/version.rb +1 -1
  9. data/lib/isomorfeus/puppetmaster.rb +2 -2
  10. data/lib/isomorfeus-puppetmaster.rb +5 -2
  11. data/node_modules/.package-lock.json +56 -45
  12. data/node_modules/debug/package.json +1 -1
  13. data/node_modules/debug/src/common.js +14 -1
  14. data/node_modules/{mkdirp → mkdirp-classic}/LICENSE +2 -2
  15. data/node_modules/mkdirp-classic/README.md +18 -0
  16. data/node_modules/{mkdirp → mkdirp-classic}/index.js +2 -3
  17. data/node_modules/mkdirp-classic/package.json +18 -0
  18. data/node_modules/node-fetch/lib/index.es.js +25 -3
  19. data/node_modules/node-fetch/lib/index.js +25 -3
  20. data/node_modules/node-fetch/lib/index.mjs +25 -3
  21. data/node_modules/node-fetch/package.json +8 -6
  22. data/node_modules/progress/lib/node-progress.js +4 -3
  23. data/node_modules/progress/package.json +1 -1
  24. data/node_modules/puppeteer-core/CHANGELOG.md +64 -0
  25. data/node_modules/puppeteer-core/README.md +13 -15
  26. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  27. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js +5 -5
  28. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
  29. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts +20 -2
  30. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
  31. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js +20 -7
  32. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js.map +1 -1
  33. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js +2 -2
  34. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  35. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts +8 -2
  36. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
  37. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js +26 -8
  38. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js.map +1 -1
  39. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts +18 -2
  40. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
  41. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js +16 -9
  42. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
  43. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts +4 -1
  44. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
  45. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js +26 -18
  46. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
  47. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
  48. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js +120 -0
  49. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +1 -1
  50. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js +2 -2
  51. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js.map +1 -1
  52. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts +10 -1
  53. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
  54. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js +9 -1
  55. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js.map +1 -1
  56. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts +1 -1
  57. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts.map +1 -1
  58. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js +1 -1
  59. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
  60. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js +8 -8
  61. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
  62. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js +2 -2
  63. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js.map +1 -1
  64. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts +21 -9
  65. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
  66. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js +157 -74
  67. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
  68. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts +5 -0
  69. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  70. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js +32 -29
  71. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
  72. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  73. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js +14 -4
  74. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
  75. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts +2 -3
  76. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
  77. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js +3 -4
  78. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js.map +1 -1
  79. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts +27 -5
  80. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
  81. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js +46 -21
  82. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
  83. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js +1 -1
  84. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
  85. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts +1 -0
  86. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
  87. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js +7 -5
  88. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
  89. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts +5 -0
  90. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts.map +1 -1
  91. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.js.map +1 -1
  92. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts +51 -6
  93. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
  94. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js +157 -50
  95. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js.map +1 -1
  96. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js +5 -5
  97. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
  98. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts +3 -1
  99. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
  100. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js +3 -2
  101. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js.map +1 -1
  102. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts +21 -0
  103. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts.map +1 -0
  104. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js +30 -0
  105. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js.map +1 -0
  106. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.d.ts.map +1 -1
  107. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js +9 -3
  108. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
  109. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts +1 -0
  110. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts.map +1 -1
  111. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js +6 -1
  112. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js.map +1 -1
  113. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js +5 -5
  114. data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js.map +1 -1
  115. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts +17 -0
  116. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts.map +1 -0
  117. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js +3 -0
  118. data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js.map +1 -0
  119. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  120. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js +20 -21
  121. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
  122. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  123. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js +11 -5
  124. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
  125. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts +6 -2
  126. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  127. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
  128. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js +30 -15
  129. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
  130. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  131. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +7 -1
  132. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  133. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js +1 -1
  134. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
  135. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.d.ts.map +1 -1
  136. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js +17 -3
  137. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js.map +1 -1
  138. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js +1 -1
  139. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js.map +1 -1
  140. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js +1 -1
  141. data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js.map +1 -1
  142. data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js +1 -1
  143. data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js.map +1 -1
  144. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
  145. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js +5 -5
  146. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
  147. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts +20 -2
  148. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
  149. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js +16 -3
  150. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js.map +1 -1
  151. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts +8 -2
  152. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
  153. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js +23 -5
  154. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js.map +1 -1
  155. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts +18 -2
  156. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
  157. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js +10 -3
  158. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js.map +1 -1
  159. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts +4 -1
  160. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
  161. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js +16 -8
  162. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
  163. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
  164. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js +120 -0
  165. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js.map +1 -1
  166. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts +10 -1
  167. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
  168. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js +7 -0
  169. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js.map +1 -1
  170. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts +1 -1
  171. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts.map +1 -1
  172. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts +21 -9
  173. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
  174. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js +152 -69
  175. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
  176. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts +5 -0
  177. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
  178. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js +22 -19
  179. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
  180. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
  181. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js +14 -4
  182. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
  183. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts +2 -3
  184. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
  185. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js +2 -3
  186. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js.map +1 -1
  187. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts +27 -5
  188. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
  189. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js +35 -10
  190. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
  191. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts +1 -0
  192. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
  193. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js +6 -4
  194. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
  195. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts +5 -0
  196. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts.map +1 -1
  197. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js.map +1 -1
  198. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts +51 -6
  199. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
  200. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js +136 -29
  201. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js.map +1 -1
  202. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts +3 -1
  203. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
  204. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js +3 -2
  205. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js.map +1 -1
  206. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts +21 -0
  207. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts.map +1 -0
  208. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js +26 -0
  209. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js.map +1 -0
  210. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.d.ts.map +1 -1
  211. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js +8 -2
  212. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js.map +1 -1
  213. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts +1 -0
  214. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts.map +1 -1
  215. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js +4 -0
  216. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js.map +1 -1
  217. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js +1 -1
  218. data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js.map +1 -1
  219. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts +17 -0
  220. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts.map +1 -0
  221. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js +2 -0
  222. data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js.map +1 -0
  223. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
  224. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js +9 -10
  225. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
  226. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
  227. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js +7 -1
  228. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
  229. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts +6 -2
  230. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
  231. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
  232. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js +27 -12
  233. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js.map +1 -1
  234. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  235. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js +7 -1
  236. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  237. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.d.ts.map +1 -1
  238. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js +17 -3
  239. data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js.map +1 -1
  240. data/node_modules/puppeteer-core/lib/types.d.ts +3898 -3710
  241. data/node_modules/puppeteer-core/package.json +35 -41
  242. data/node_modules/tar-fs/.travis.yml +2 -1
  243. data/node_modules/tar-fs/README.md +4 -2
  244. data/node_modules/tar-fs/index.js +11 -8
  245. data/node_modules/tar-fs/package.json +4 -4
  246. data/node_modules/tar-fs/test/index.js +1 -1
  247. data/node_modules/tr46/.npmignore +4 -0
  248. data/node_modules/tr46/index.js +193 -0
  249. data/node_modules/tr46/lib/.gitkeep +0 -0
  250. data/node_modules/tr46/lib/mappingTable.json +1 -0
  251. data/node_modules/tr46/package.json +31 -0
  252. data/node_modules/unbzip2-stream/README.md +1 -1
  253. data/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js +1 -1
  254. data/node_modules/unbzip2-stream/index.js +3 -2
  255. data/node_modules/unbzip2-stream/lib/bzip2.js +4 -6
  256. data/node_modules/unbzip2-stream/package.json +1 -1
  257. data/node_modules/webidl-conversions/LICENSE.md +12 -0
  258. data/node_modules/webidl-conversions/README.md +53 -0
  259. data/node_modules/webidl-conversions/lib/index.js +189 -0
  260. data/node_modules/webidl-conversions/package.json +23 -0
  261. data/node_modules/whatwg-url/LICENSE.txt +21 -0
  262. data/node_modules/whatwg-url/README.md +67 -0
  263. data/node_modules/whatwg-url/lib/URL-impl.js +200 -0
  264. data/node_modules/whatwg-url/lib/URL.js +196 -0
  265. data/node_modules/whatwg-url/lib/public-api.js +11 -0
  266. data/node_modules/whatwg-url/lib/url-state-machine.js +1297 -0
  267. data/node_modules/whatwg-url/lib/utils.js +20 -0
  268. data/node_modules/whatwg-url/package.json +32 -0
  269. data/node_modules/ws/LICENSE +0 -2
  270. data/node_modules/ws/README.md +49 -52
  271. data/node_modules/ws/index.js +3 -0
  272. data/node_modules/ws/lib/buffer-util.js +3 -6
  273. data/node_modules/ws/lib/constants.js +3 -1
  274. data/node_modules/ws/lib/event-target.js +172 -90
  275. data/node_modules/ws/lib/extension.js +8 -28
  276. data/node_modules/ws/lib/permessage-deflate.js +10 -16
  277. data/node_modules/ws/lib/receiver.js +143 -38
  278. data/node_modules/ws/lib/sender.js +29 -12
  279. data/node_modules/ws/lib/stream.js +20 -5
  280. data/node_modules/ws/lib/subprotocol.js +62 -0
  281. data/node_modules/ws/lib/validation.js +28 -8
  282. data/node_modules/ws/lib/websocket-server.js +129 -62
  283. data/node_modules/ws/lib/websocket.js +311 -104
  284. data/node_modules/ws/package.json +10 -5
  285. data/node_modules/ws/wrapper.mjs +8 -0
  286. data/package.json +1 -1
  287. metadata +83 -61
  288. data/node_modules/.bin/mkdirp +0 -12
  289. data/node_modules/.bin/mkdirp.cmd +0 -17
  290. data/node_modules/.bin/mkdirp.ps1 +0 -28
  291. data/node_modules/minimist/.travis.yml +0 -8
  292. data/node_modules/minimist/LICENSE +0 -18
  293. data/node_modules/minimist/example/parse.js +0 -2
  294. data/node_modules/minimist/index.js +0 -245
  295. data/node_modules/minimist/package.json +0 -45
  296. data/node_modules/minimist/readme.markdown +0 -95
  297. data/node_modules/minimist/test/all_bool.js +0 -32
  298. data/node_modules/minimist/test/bool.js +0 -178
  299. data/node_modules/minimist/test/dash.js +0 -31
  300. data/node_modules/minimist/test/default_bool.js +0 -35
  301. data/node_modules/minimist/test/dotted.js +0 -22
  302. data/node_modules/minimist/test/kv_short.js +0 -16
  303. data/node_modules/minimist/test/long.js +0 -31
  304. data/node_modules/minimist/test/num.js +0 -36
  305. data/node_modules/minimist/test/parse.js +0 -197
  306. data/node_modules/minimist/test/parse_modified.js +0 -9
  307. data/node_modules/minimist/test/proto.js +0 -44
  308. data/node_modules/minimist/test/short.js +0 -67
  309. data/node_modules/minimist/test/stop_early.js +0 -15
  310. data/node_modules/minimist/test/unknown.js +0 -102
  311. data/node_modules/minimist/test/whitespace.js +0 -8
  312. data/node_modules/mkdirp/bin/cmd.js +0 -33
  313. data/node_modules/mkdirp/bin/usage.txt +0 -12
  314. data/node_modules/mkdirp/package.json +0 -34
  315. data/node_modules/mkdirp/readme.markdown +0 -100
  316. data/node_modules/node-fetch/CHANGELOG.md +0 -272
@@ -1,3 +1,5 @@
1
+ /* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */
2
+
1
3
  'use strict';
2
4
 
3
5
  const EventEmitter = require('events');
@@ -6,6 +8,7 @@ const http = require('http');
6
8
  const net = require('net');
7
9
  const tls = require('tls');
8
10
  const { randomBytes, createHash } = require('crypto');
11
+ const { Readable } = require('stream');
9
12
  const { URL } = require('url');
10
13
 
11
14
  const PerMessageDeflate = require('./permessage-deflate');
@@ -15,15 +18,20 @@ const {
15
18
  BINARY_TYPES,
16
19
  EMPTY_BUFFER,
17
20
  GUID,
21
+ kForOnEventAttribute,
22
+ kListener,
18
23
  kStatusCode,
19
24
  kWebSocket,
20
25
  NOOP
21
26
  } = require('./constants');
22
- const { addEventListener, removeEventListener } = require('./event-target');
27
+ const {
28
+ EventTarget: { addEventListener, removeEventListener }
29
+ } = require('./event-target');
23
30
  const { format, parse } = require('./extension');
24
31
  const { toBuffer } = require('./buffer-util');
25
32
 
26
33
  const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];
34
+ const subprotocolRegex = /^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;
27
35
  const protocolVersions = [8, 13];
28
36
  const closeTimeout = 30 * 1000;
29
37
 
@@ -36,7 +44,7 @@ class WebSocket extends EventEmitter {
36
44
  /**
37
45
  * Create a new `WebSocket`.
38
46
  *
39
- * @param {(String|url.URL)} address The URL to which to connect
47
+ * @param {(String|URL)} address The URL to which to connect
40
48
  * @param {(String|String[])} [protocols] The subprotocols
41
49
  * @param {Object} [options] Connection options
42
50
  */
@@ -47,7 +55,7 @@ class WebSocket extends EventEmitter {
47
55
  this._closeCode = 1006;
48
56
  this._closeFrameReceived = false;
49
57
  this._closeFrameSent = false;
50
- this._closeMessage = '';
58
+ this._closeMessage = EMPTY_BUFFER;
51
59
  this._closeTimer = null;
52
60
  this._extensions = {};
53
61
  this._protocol = '';
@@ -61,11 +69,15 @@ class WebSocket extends EventEmitter {
61
69
  this._isServer = false;
62
70
  this._redirects = 0;
63
71
 
64
- if (Array.isArray(protocols)) {
65
- protocols = protocols.join(', ');
66
- } else if (typeof protocols === 'object' && protocols !== null) {
67
- options = protocols;
68
- protocols = undefined;
72
+ if (protocols === undefined) {
73
+ protocols = [];
74
+ } else if (!Array.isArray(protocols)) {
75
+ if (typeof protocols === 'object' && protocols !== null) {
76
+ options = protocols;
77
+ protocols = [];
78
+ } else {
79
+ protocols = [protocols];
80
+ }
69
81
  }
70
82
 
71
83
  initAsClient(this, address, protocols, options);
@@ -112,6 +124,38 @@ class WebSocket extends EventEmitter {
112
124
  return Object.keys(this._extensions).join();
113
125
  }
114
126
 
127
+ /**
128
+ * @type {Function}
129
+ */
130
+ /* istanbul ignore next */
131
+ get onclose() {
132
+ return null;
133
+ }
134
+
135
+ /**
136
+ * @type {Function}
137
+ */
138
+ /* istanbul ignore next */
139
+ get onerror() {
140
+ return null;
141
+ }
142
+
143
+ /**
144
+ * @type {Function}
145
+ */
146
+ /* istanbul ignore next */
147
+ get onopen() {
148
+ return null;
149
+ }
150
+
151
+ /**
152
+ * @type {Function}
153
+ */
154
+ /* istanbul ignore next */
155
+ get onmessage() {
156
+ return null;
157
+ }
158
+
115
159
  /**
116
160
  * @type {String}
117
161
  */
@@ -136,18 +180,23 @@ class WebSocket extends EventEmitter {
136
180
  /**
137
181
  * Set up the socket and the internal resources.
138
182
  *
139
- * @param {net.Socket} socket The network socket between the server and client
183
+ * @param {(net.Socket|tls.Socket)} socket The network socket between the
184
+ * server and client
140
185
  * @param {Buffer} head The first packet of the upgraded stream
141
- * @param {Number} [maxPayload=0] The maximum allowed message size
186
+ * @param {Object} options Options object
187
+ * @param {Number} [options.maxPayload=0] The maximum allowed message size
188
+ * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
189
+ * not to skip UTF-8 validation for text and close messages
142
190
  * @private
143
191
  */
144
- setSocket(socket, head, maxPayload) {
145
- const receiver = new Receiver(
146
- this.binaryType,
147
- this._extensions,
148
- this._isServer,
149
- maxPayload
150
- );
192
+ setSocket(socket, head, options) {
193
+ const receiver = new Receiver({
194
+ binaryType: this.binaryType,
195
+ extensions: this._extensions,
196
+ isServer: this._isServer,
197
+ maxPayload: options.maxPayload,
198
+ skipUTF8Validation: options.skipUTF8Validation
199
+ });
151
200
 
152
201
  this._sender = new Sender(socket, this._extensions);
153
202
  this._receiver = receiver;
@@ -214,7 +263,8 @@ class WebSocket extends EventEmitter {
214
263
  * +---+
215
264
  *
216
265
  * @param {Number} [code] Status code explaining why the connection is closing
217
- * @param {String} [data] A string explaining why the connection is closing
266
+ * @param {(String|Buffer)} [data] The reason why the connection is
267
+ * closing
218
268
  * @public
219
269
  */
220
270
  close(code, data) {
@@ -225,7 +275,13 @@ class WebSocket extends EventEmitter {
225
275
  }
226
276
 
227
277
  if (this.readyState === WebSocket.CLOSING) {
228
- if (this._closeFrameSent && this._closeFrameReceived) this._socket.end();
278
+ if (
279
+ this._closeFrameSent &&
280
+ (this._closeFrameReceived || this._receiver._writableState.errorEmitted)
281
+ ) {
282
+ this._socket.end();
283
+ }
284
+
229
285
  return;
230
286
  }
231
287
 
@@ -238,7 +294,13 @@ class WebSocket extends EventEmitter {
238
294
  if (err) return;
239
295
 
240
296
  this._closeFrameSent = true;
241
- if (this._closeFrameReceived) this._socket.end();
297
+
298
+ if (
299
+ this._closeFrameReceived ||
300
+ this._receiver._writableState.errorEmitted
301
+ ) {
302
+ this._socket.end();
303
+ }
242
304
  });
243
305
 
244
306
  //
@@ -319,10 +381,10 @@ class WebSocket extends EventEmitter {
319
381
  *
320
382
  * @param {*} data The message to send
321
383
  * @param {Object} [options] Options object
322
- * @param {Boolean} [options.compress] Specifies whether or not to compress
323
- * `data`
324
384
  * @param {Boolean} [options.binary] Specifies whether `data` is binary or
325
385
  * text
386
+ * @param {Boolean} [options.compress] Specifies whether or not to compress
387
+ * `data`
326
388
  * @param {Boolean} [options.fin=true] Specifies whether the fragment is the
327
389
  * last one
328
390
  * @param {Boolean} [options.mask] Specifies whether or not to mask `data`
@@ -380,11 +442,76 @@ class WebSocket extends EventEmitter {
380
442
  }
381
443
  }
382
444
 
383
- readyStates.forEach((readyState, i) => {
384
- const descriptor = { enumerable: true, value: i };
445
+ /**
446
+ * @constant {Number} CONNECTING
447
+ * @memberof WebSocket
448
+ */
449
+ Object.defineProperty(WebSocket, 'CONNECTING', {
450
+ enumerable: true,
451
+ value: readyStates.indexOf('CONNECTING')
452
+ });
453
+
454
+ /**
455
+ * @constant {Number} CONNECTING
456
+ * @memberof WebSocket.prototype
457
+ */
458
+ Object.defineProperty(WebSocket.prototype, 'CONNECTING', {
459
+ enumerable: true,
460
+ value: readyStates.indexOf('CONNECTING')
461
+ });
385
462
 
386
- Object.defineProperty(WebSocket.prototype, readyState, descriptor);
387
- Object.defineProperty(WebSocket, readyState, descriptor);
463
+ /**
464
+ * @constant {Number} OPEN
465
+ * @memberof WebSocket
466
+ */
467
+ Object.defineProperty(WebSocket, 'OPEN', {
468
+ enumerable: true,
469
+ value: readyStates.indexOf('OPEN')
470
+ });
471
+
472
+ /**
473
+ * @constant {Number} OPEN
474
+ * @memberof WebSocket.prototype
475
+ */
476
+ Object.defineProperty(WebSocket.prototype, 'OPEN', {
477
+ enumerable: true,
478
+ value: readyStates.indexOf('OPEN')
479
+ });
480
+
481
+ /**
482
+ * @constant {Number} CLOSING
483
+ * @memberof WebSocket
484
+ */
485
+ Object.defineProperty(WebSocket, 'CLOSING', {
486
+ enumerable: true,
487
+ value: readyStates.indexOf('CLOSING')
488
+ });
489
+
490
+ /**
491
+ * @constant {Number} CLOSING
492
+ * @memberof WebSocket.prototype
493
+ */
494
+ Object.defineProperty(WebSocket.prototype, 'CLOSING', {
495
+ enumerable: true,
496
+ value: readyStates.indexOf('CLOSING')
497
+ });
498
+
499
+ /**
500
+ * @constant {Number} CLOSED
501
+ * @memberof WebSocket
502
+ */
503
+ Object.defineProperty(WebSocket, 'CLOSED', {
504
+ enumerable: true,
505
+ value: readyStates.indexOf('CLOSED')
506
+ });
507
+
508
+ /**
509
+ * @constant {Number} CLOSED
510
+ * @memberof WebSocket.prototype
511
+ */
512
+ Object.defineProperty(WebSocket.prototype, 'CLOSED', {
513
+ enumerable: true,
514
+ value: readyStates.indexOf('CLOSED')
388
515
  });
389
516
 
390
517
  [
@@ -404,37 +531,27 @@ readyStates.forEach((readyState, i) => {
404
531
  //
405
532
  ['open', 'error', 'close', 'message'].forEach((method) => {
406
533
  Object.defineProperty(WebSocket.prototype, `on${method}`, {
407
- configurable: true,
408
534
  enumerable: true,
409
- /**
410
- * Return the listener of the event.
411
- *
412
- * @return {(Function|undefined)} The event listener or `undefined`
413
- * @public
414
- */
415
535
  get() {
416
- const listeners = this.listeners(method);
417
- for (let i = 0; i < listeners.length; i++) {
418
- if (listeners[i]._listener) return listeners[i]._listener;
536
+ for (const listener of this.listeners(method)) {
537
+ if (listener[kForOnEventAttribute]) return listener[kListener];
419
538
  }
420
539
 
421
- return undefined;
540
+ return null;
422
541
  },
423
- /**
424
- * Add a listener for the event.
425
- *
426
- * @param {Function} listener The listener to add
427
- * @public
428
- */
429
- set(listener) {
430
- const listeners = this.listeners(method);
431
- for (let i = 0; i < listeners.length; i++) {
432
- //
433
- // Remove only the listeners added via `addEventListener`.
434
- //
435
- if (listeners[i]._listener) this.removeListener(method, listeners[i]);
542
+ set(handler) {
543
+ for (const listener of this.listeners(method)) {
544
+ if (listener[kForOnEventAttribute]) {
545
+ this.removeListener(method, listener);
546
+ break;
547
+ }
436
548
  }
437
- this.addEventListener(method, listener);
549
+
550
+ if (typeof handler !== 'function') return;
551
+
552
+ this.addEventListener(method, handler, {
553
+ [kForOnEventAttribute]: true
554
+ });
438
555
  }
439
556
  });
440
557
  });
@@ -448,29 +565,32 @@ module.exports = WebSocket;
448
565
  * Initialize a WebSocket client.
449
566
  *
450
567
  * @param {WebSocket} websocket The client to initialize
451
- * @param {(String|url.URL)} address The URL to which to connect
452
- * @param {String} [protocols] The subprotocols
568
+ * @param {(String|URL)} address The URL to which to connect
569
+ * @param {Array} protocols The subprotocols
453
570
  * @param {Object} [options] Connection options
454
- * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
455
- * permessage-deflate
571
+ * @param {Boolean} [options.followRedirects=false] Whether or not to follow
572
+ * redirects
456
573
  * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the
457
574
  * handshake request
458
- * @param {Number} [options.protocolVersion=13] Value of the
459
- * `Sec-WebSocket-Version` header
460
- * @param {String} [options.origin] Value of the `Origin` or
461
- * `Sec-WebSocket-Origin` header
462
575
  * @param {Number} [options.maxPayload=104857600] The maximum allowed message
463
576
  * size
464
- * @param {Boolean} [options.followRedirects=false] Whether or not to follow
465
- * redirects
466
577
  * @param {Number} [options.maxRedirects=10] The maximum number of redirects
467
578
  * allowed
579
+ * @param {String} [options.origin] Value of the `Origin` or
580
+ * `Sec-WebSocket-Origin` header
581
+ * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable
582
+ * permessage-deflate
583
+ * @param {Number} [options.protocolVersion=13] Value of the
584
+ * `Sec-WebSocket-Version` header
585
+ * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
586
+ * not to skip UTF-8 validation for text and close messages
468
587
  * @private
469
588
  */
470
589
  function initAsClient(websocket, address, protocols, options) {
471
590
  const opts = {
472
591
  protocolVersion: protocolVersions[1],
473
592
  maxPayload: 100 * 1024 * 1024,
593
+ skipUTF8Validation: false,
474
594
  perMessageDeflate: true,
475
595
  followRedirects: false,
476
596
  maxRedirects: 10,
@@ -499,21 +619,36 @@ function initAsClient(websocket, address, protocols, options) {
499
619
  parsedUrl = address;
500
620
  websocket._url = address.href;
501
621
  } else {
502
- parsedUrl = new URL(address);
622
+ try {
623
+ parsedUrl = new URL(address);
624
+ } catch (e) {
625
+ throw new SyntaxError(`Invalid URL: ${address}`);
626
+ }
627
+
503
628
  websocket._url = address;
504
629
  }
505
630
 
631
+ const isSecure = parsedUrl.protocol === 'wss:';
506
632
  const isUnixSocket = parsedUrl.protocol === 'ws+unix:';
507
633
 
508
- if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {
509
- throw new Error(`Invalid URL: ${websocket.url}`);
634
+ if (parsedUrl.protocol !== 'ws:' && !isSecure && !isUnixSocket) {
635
+ throw new SyntaxError(
636
+ 'The URL\'s protocol must be one of "ws:", "wss:", or "ws+unix:"'
637
+ );
638
+ }
639
+
640
+ if (isUnixSocket && !parsedUrl.pathname) {
641
+ throw new SyntaxError("The URL's pathname is empty");
642
+ }
643
+
644
+ if (parsedUrl.hash) {
645
+ throw new SyntaxError('The URL contains a fragment identifier');
510
646
  }
511
647
 
512
- const isSecure =
513
- parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';
514
648
  const defaultPort = isSecure ? 443 : 80;
515
649
  const key = randomBytes(16).toString('base64');
516
650
  const get = isSecure ? https.get : http.get;
651
+ const protocolSet = new Set();
517
652
  let perMessageDeflate;
518
653
 
519
654
  opts.createConnection = isSecure ? tlsConnect : netConnect;
@@ -542,8 +677,22 @@ function initAsClient(websocket, address, protocols, options) {
542
677
  [PerMessageDeflate.extensionName]: perMessageDeflate.offer()
543
678
  });
544
679
  }
545
- if (protocols) {
546
- opts.headers['Sec-WebSocket-Protocol'] = protocols;
680
+ if (protocols.length) {
681
+ for (const protocol of protocols) {
682
+ if (
683
+ typeof protocol !== 'string' ||
684
+ !subprotocolRegex.test(protocol) ||
685
+ protocolSet.has(protocol)
686
+ ) {
687
+ throw new SyntaxError(
688
+ 'An invalid or duplicated subprotocol was specified'
689
+ );
690
+ }
691
+
692
+ protocolSet.add(protocol);
693
+ }
694
+
695
+ opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');
547
696
  }
548
697
  if (opts.origin) {
549
698
  if (opts.protocolVersion < 13) {
@@ -630,15 +779,16 @@ function initAsClient(websocket, address, protocols, options) {
630
779
  }
631
780
 
632
781
  const serverProt = res.headers['sec-websocket-protocol'];
633
- const protList = (protocols || '').split(/, */);
634
782
  let protError;
635
783
 
636
- if (!protocols && serverProt) {
637
- protError = 'Server sent a subprotocol but none was requested';
638
- } else if (protocols && !serverProt) {
784
+ if (serverProt !== undefined) {
785
+ if (!protocolSet.size) {
786
+ protError = 'Server sent a subprotocol but none was requested';
787
+ } else if (!protocolSet.has(serverProt)) {
788
+ protError = 'Server sent an invalid subprotocol';
789
+ }
790
+ } else if (protocolSet.size) {
639
791
  protError = 'Server sent no subprotocol';
640
- } else if (serverProt && !protList.includes(serverProt)) {
641
- protError = 'Server sent an invalid subprotocol';
642
792
  }
643
793
 
644
794
  if (protError) {
@@ -648,26 +798,54 @@ function initAsClient(websocket, address, protocols, options) {
648
798
 
649
799
  if (serverProt) websocket._protocol = serverProt;
650
800
 
651
- if (perMessageDeflate) {
801
+ const secWebSocketExtensions = res.headers['sec-websocket-extensions'];
802
+
803
+ if (secWebSocketExtensions !== undefined) {
804
+ if (!perMessageDeflate) {
805
+ const message =
806
+ 'Server sent a Sec-WebSocket-Extensions header but no extension ' +
807
+ 'was requested';
808
+ abortHandshake(websocket, socket, message);
809
+ return;
810
+ }
811
+
812
+ let extensions;
813
+
652
814
  try {
653
- const extensions = parse(res.headers['sec-websocket-extensions']);
815
+ extensions = parse(secWebSocketExtensions);
816
+ } catch (err) {
817
+ const message = 'Invalid Sec-WebSocket-Extensions header';
818
+ abortHandshake(websocket, socket, message);
819
+ return;
820
+ }
654
821
 
655
- if (extensions[PerMessageDeflate.extensionName]) {
656
- perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
657
- websocket._extensions[PerMessageDeflate.extensionName] =
658
- perMessageDeflate;
659
- }
822
+ const extensionNames = Object.keys(extensions);
823
+
824
+ if (
825
+ extensionNames.length !== 1 ||
826
+ extensionNames[0] !== PerMessageDeflate.extensionName
827
+ ) {
828
+ const message = 'Server indicated an extension that was not requested';
829
+ abortHandshake(websocket, socket, message);
830
+ return;
831
+ }
832
+
833
+ try {
834
+ perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
660
835
  } catch (err) {
661
- abortHandshake(
662
- websocket,
663
- socket,
664
- 'Invalid Sec-WebSocket-Extensions header'
665
- );
836
+ const message = 'Invalid Sec-WebSocket-Extensions header';
837
+ abortHandshake(websocket, socket, message);
666
838
  return;
667
839
  }
840
+
841
+ websocket._extensions[PerMessageDeflate.extensionName] =
842
+ perMessageDeflate;
668
843
  }
669
844
 
670
- websocket.setSocket(socket, head, opts.maxPayload);
845
+ websocket.setSocket(socket, head, {
846
+ maxPayload: opts.maxPayload,
847
+ skipUTF8Validation: opts.skipUTF8Validation
848
+ });
671
849
  });
672
850
  }
673
851
 
@@ -704,8 +882,8 @@ function tlsConnect(options) {
704
882
  * Abort the handshake and emit an error.
705
883
  *
706
884
  * @param {WebSocket} websocket The WebSocket instance
707
- * @param {(http.ClientRequest|net.Socket)} stream The request to abort or the
708
- * socket to destroy
885
+ * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to
886
+ * abort or the socket to destroy
709
887
  * @param {String} message The error message
710
888
  * @private
711
889
  */
@@ -772,19 +950,21 @@ function sendAfterClose(websocket, data, cb) {
772
950
  * The listener of the `Receiver` `'conclude'` event.
773
951
  *
774
952
  * @param {Number} code The status code
775
- * @param {String} reason The reason for closing
953
+ * @param {Buffer} reason The reason for closing
776
954
  * @private
777
955
  */
778
956
  function receiverOnConclude(code, reason) {
779
957
  const websocket = this[kWebSocket];
780
958
 
781
- websocket._socket.removeListener('data', socketOnData);
782
- websocket._socket.resume();
783
-
784
959
  websocket._closeFrameReceived = true;
785
960
  websocket._closeMessage = reason;
786
961
  websocket._closeCode = code;
787
962
 
963
+ if (websocket._socket[kWebSocket] === undefined) return;
964
+
965
+ websocket._socket.removeListener('data', socketOnData);
966
+ process.nextTick(resume, websocket._socket);
967
+
788
968
  if (code === 1005) websocket.close();
789
969
  else websocket.close(code, reason);
790
970
  }
@@ -807,12 +987,19 @@ function receiverOnDrain() {
807
987
  function receiverOnError(err) {
808
988
  const websocket = this[kWebSocket];
809
989
 
810
- websocket._socket.removeListener('data', socketOnData);
990
+ if (websocket._socket[kWebSocket] !== undefined) {
991
+ websocket._socket.removeListener('data', socketOnData);
992
+
993
+ //
994
+ // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
995
+ // https://github.com/websockets/ws/issues/1940.
996
+ //
997
+ process.nextTick(resume, websocket._socket);
998
+
999
+ websocket.close(err[kStatusCode]);
1000
+ }
811
1001
 
812
- websocket._readyState = WebSocket.CLOSING;
813
- websocket._closeCode = err[kStatusCode];
814
1002
  websocket.emit('error', err);
815
- websocket._socket.destroy();
816
1003
  }
817
1004
 
818
1005
  /**
@@ -827,11 +1014,12 @@ function receiverOnFinish() {
827
1014
  /**
828
1015
  * The listener of the `Receiver` `'message'` event.
829
1016
  *
830
- * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message
1017
+ * @param {Buffer|ArrayBuffer|Buffer[])} data The message
1018
+ * @param {Boolean} isBinary Specifies whether the message is binary or not
831
1019
  * @private
832
1020
  */
833
- function receiverOnMessage(data) {
834
- this[kWebSocket].emit('message', data);
1021
+ function receiverOnMessage(data, isBinary) {
1022
+ this[kWebSocket].emit('message', data, isBinary);
835
1023
  }
836
1024
 
837
1025
  /**
@@ -857,6 +1045,16 @@ function receiverOnPong(data) {
857
1045
  this[kWebSocket].emit('pong', data);
858
1046
  }
859
1047
 
1048
+ /**
1049
+ * Resume a readable stream
1050
+ *
1051
+ * @param {Readable} stream The readable stream
1052
+ * @private
1053
+ */
1054
+ function resume(stream) {
1055
+ stream.resume();
1056
+ }
1057
+
860
1058
  /**
861
1059
  * The listener of the `net.Socket` `'close'` event.
862
1060
  *
@@ -866,10 +1064,13 @@ function socketOnClose() {
866
1064
  const websocket = this[kWebSocket];
867
1065
 
868
1066
  this.removeListener('close', socketOnClose);
1067
+ this.removeListener('data', socketOnData);
869
1068
  this.removeListener('end', socketOnEnd);
870
1069
 
871
1070
  websocket._readyState = WebSocket.CLOSING;
872
1071
 
1072
+ let chunk;
1073
+
873
1074
  //
874
1075
  // The close frame might not have been received or the `'end'` event emitted,
875
1076
  // for example, if the socket was destroyed due to an error. Ensure that the
@@ -877,13 +1078,19 @@ function socketOnClose() {
877
1078
  // it. If the readable side of the socket is in flowing mode then there is no
878
1079
  // buffered data as everything has been already written and `readable.read()`
879
1080
  // will return `null`. If instead, the socket is paused, any possible buffered
880
- // data will be read as a single chunk and emitted synchronously in a single
881
- // `'data'` event.
1081
+ // data will be read as a single chunk.
882
1082
  //
883
- websocket._socket.read();
1083
+ if (
1084
+ !this._readableState.endEmitted &&
1085
+ !websocket._closeFrameReceived &&
1086
+ !websocket._receiver._writableState.errorEmitted &&
1087
+ (chunk = websocket._socket.read()) !== null
1088
+ ) {
1089
+ websocket._receiver.write(chunk);
1090
+ }
1091
+
884
1092
  websocket._receiver.end();
885
1093
 
886
- this.removeListener('data', socketOnData);
887
1094
  this[kWebSocket] = undefined;
888
1095
 
889
1096
  clearTimeout(websocket._closeTimer);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ws",
3
- "version": "7.4.6",
3
+ "version": "8.2.3",
4
4
  "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js",
5
5
  "keywords": [
6
6
  "HyBi",
@@ -16,14 +16,19 @@
16
16
  "author": "Einar Otto Stangvik <einaros@gmail.com> (http://2x.io)",
17
17
  "license": "MIT",
18
18
  "main": "index.js",
19
+ "exports": {
20
+ "import": "./wrapper.mjs",
21
+ "require": "./index.js"
22
+ },
19
23
  "browser": "browser.js",
20
24
  "engines": {
21
- "node": ">=8.3.0"
25
+ "node": ">=10.0.0"
22
26
  },
23
27
  "files": [
24
28
  "browser.js",
25
29
  "index.js",
26
- "lib/*.js"
30
+ "lib/*.js",
31
+ "wrapper.mjs"
27
32
  ],
28
33
  "scripts": {
29
34
  "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js",
@@ -47,8 +52,8 @@
47
52
  "bufferutil": "^4.0.1",
48
53
  "eslint": "^7.2.0",
49
54
  "eslint-config-prettier": "^8.1.0",
50
- "eslint-plugin-prettier": "^3.0.1",
51
- "mocha": "^7.0.0",
55
+ "eslint-plugin-prettier": "^4.0.0",
56
+ "mocha": "^8.4.0",
52
57
  "nyc": "^15.0.0",
53
58
  "prettier": "^2.0.5",
54
59
  "utf-8-validate": "^5.0.2"