isomorfeus-puppetmaster 0.5.1 → 0.5.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 (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"