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.
- checksums.yaml +4 -4
- data/README.md +12 -17
- data/lib/isomorfeus/puppetmaster/driver/puppeteer.rb +32 -20
- data/lib/isomorfeus/puppetmaster/driver/puppeteer_document.rb +30 -30
- data/lib/isomorfeus/puppetmaster/driver/puppeteer_node.rb +4 -4
- data/lib/isomorfeus/puppetmaster/node.rb +3 -3
- data/lib/isomorfeus/puppetmaster/server.rb +1 -1
- data/lib/isomorfeus/puppetmaster/version.rb +1 -1
- data/lib/isomorfeus/puppetmaster.rb +2 -2
- data/lib/isomorfeus-puppetmaster.rb +5 -2
- data/node_modules/.package-lock.json +56 -45
- data/node_modules/debug/package.json +1 -1
- data/node_modules/debug/src/common.js +14 -1
- data/node_modules/{mkdirp → mkdirp-classic}/LICENSE +2 -2
- data/node_modules/mkdirp-classic/README.md +18 -0
- data/node_modules/{mkdirp → mkdirp-classic}/index.js +2 -3
- data/node_modules/mkdirp-classic/package.json +18 -0
- data/node_modules/node-fetch/lib/index.es.js +25 -3
- data/node_modules/node-fetch/lib/index.js +25 -3
- data/node_modules/node-fetch/lib/index.mjs +25 -3
- data/node_modules/node-fetch/package.json +8 -6
- data/node_modules/progress/lib/node-progress.js +4 -3
- data/node_modules/progress/package.json +1 -1
- data/node_modules/puppeteer-core/CHANGELOG.md +64 -0
- data/node_modules/puppeteer-core/README.md +13 -15
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/AriaQueryHandler.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts +20 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js +20 -7
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Browser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts +8 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js +26 -8
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Connection.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts +18 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js +16 -9
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts +4 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js +26 -18
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js +120 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/DeviceDescriptors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Dialog.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts +10 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js +9 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Errors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EvalTypes.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js +8 -8
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js +2 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FileChooser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts +21 -9
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js +157 -74
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js +32 -29
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js +14 -4
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts +2 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js +3 -4
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Input.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts +27 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js +46 -21
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js +7 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/PDFOptions.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts +51 -6
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js +157 -50
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Page.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts +3 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js +3 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Target.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts +21 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js +30 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/TaskQueue.js.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js +9 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js +6 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/assert.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js +5 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/common/helper.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts +17 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js +3 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/global.js.map +1 -0
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js +20 -21
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js +11 -5
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts +6 -2
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js +30 -15
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +7 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js +17 -3
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node/install.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node-puppeteer-core.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/node.js.map +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js +1 -1
- data/node_modules/puppeteer-core/lib/cjs/puppeteer/web.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js +5 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/AriaQueryHandler.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts +20 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js +16 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Browser.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts +8 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js +23 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Connection.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts +18 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js +10 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Coverage.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts +4 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js +16 -8
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js +120 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/DeviceDescriptors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts +10 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js +7 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Errors.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/EvalTypes.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts +21 -9
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js +152 -69
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js +22 -19
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js +14 -4
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts +2 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js +2 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Input.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts +27 -5
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js +35 -10
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js +6 -4
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts +5 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/PDFOptions.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts +51 -6
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js +136 -29
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Page.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts +3 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js +3 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Target.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts +21 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js +26 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/TaskQueue.js.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js +8 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/Tracing.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js +4 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/assert.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/common/helper.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts +17 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.d.ts.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js +2 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/global.js.map +1 -0
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js +9 -10
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js +7 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts +6 -2
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js +27 -12
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/Launcher.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js +7 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.d.ts.map +1 -1
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js +17 -3
- data/node_modules/puppeteer-core/lib/esm/puppeteer/node/install.js.map +1 -1
- data/node_modules/puppeteer-core/lib/types.d.ts +3898 -3710
- data/node_modules/puppeteer-core/package.json +35 -41
- data/node_modules/tar-fs/.travis.yml +2 -1
- data/node_modules/tar-fs/README.md +4 -2
- data/node_modules/tar-fs/index.js +11 -8
- data/node_modules/tar-fs/package.json +4 -4
- data/node_modules/tar-fs/test/index.js +1 -1
- data/node_modules/tr46/.npmignore +4 -0
- data/node_modules/tr46/index.js +193 -0
- data/node_modules/tr46/lib/.gitkeep +0 -0
- data/node_modules/tr46/lib/mappingTable.json +1 -0
- data/node_modules/tr46/package.json +31 -0
- data/node_modules/unbzip2-stream/README.md +1 -1
- data/node_modules/unbzip2-stream/dist/unbzip2-stream.min.js +1 -1
- data/node_modules/unbzip2-stream/index.js +3 -2
- data/node_modules/unbzip2-stream/lib/bzip2.js +4 -6
- data/node_modules/unbzip2-stream/package.json +1 -1
- data/node_modules/webidl-conversions/LICENSE.md +12 -0
- data/node_modules/webidl-conversions/README.md +53 -0
- data/node_modules/webidl-conversions/lib/index.js +189 -0
- data/node_modules/webidl-conversions/package.json +23 -0
- data/node_modules/whatwg-url/LICENSE.txt +21 -0
- data/node_modules/whatwg-url/README.md +67 -0
- data/node_modules/whatwg-url/lib/URL-impl.js +200 -0
- data/node_modules/whatwg-url/lib/URL.js +196 -0
- data/node_modules/whatwg-url/lib/public-api.js +11 -0
- data/node_modules/whatwg-url/lib/url-state-machine.js +1297 -0
- data/node_modules/whatwg-url/lib/utils.js +20 -0
- data/node_modules/whatwg-url/package.json +32 -0
- data/node_modules/ws/LICENSE +0 -2
- data/node_modules/ws/README.md +49 -52
- data/node_modules/ws/index.js +3 -0
- data/node_modules/ws/lib/buffer-util.js +3 -6
- data/node_modules/ws/lib/constants.js +3 -1
- data/node_modules/ws/lib/event-target.js +172 -90
- data/node_modules/ws/lib/extension.js +8 -28
- data/node_modules/ws/lib/permessage-deflate.js +10 -16
- data/node_modules/ws/lib/receiver.js +143 -38
- data/node_modules/ws/lib/sender.js +29 -12
- data/node_modules/ws/lib/stream.js +20 -5
- data/node_modules/ws/lib/subprotocol.js +62 -0
- data/node_modules/ws/lib/validation.js +28 -8
- data/node_modules/ws/lib/websocket-server.js +129 -62
- data/node_modules/ws/lib/websocket.js +311 -104
- data/node_modules/ws/package.json +10 -5
- data/node_modules/ws/wrapper.mjs +8 -0
- data/package.json +1 -1
- metadata +83 -61
- data/node_modules/.bin/mkdirp +0 -12
- data/node_modules/.bin/mkdirp.cmd +0 -17
- data/node_modules/.bin/mkdirp.ps1 +0 -28
- data/node_modules/minimist/.travis.yml +0 -8
- data/node_modules/minimist/LICENSE +0 -18
- data/node_modules/minimist/example/parse.js +0 -2
- data/node_modules/minimist/index.js +0 -245
- data/node_modules/minimist/package.json +0 -45
- data/node_modules/minimist/readme.markdown +0 -95
- data/node_modules/minimist/test/all_bool.js +0 -32
- data/node_modules/minimist/test/bool.js +0 -178
- data/node_modules/minimist/test/dash.js +0 -31
- data/node_modules/minimist/test/default_bool.js +0 -35
- data/node_modules/minimist/test/dotted.js +0 -22
- data/node_modules/minimist/test/kv_short.js +0 -16
- data/node_modules/minimist/test/long.js +0 -31
- data/node_modules/minimist/test/num.js +0 -36
- data/node_modules/minimist/test/parse.js +0 -197
- data/node_modules/minimist/test/parse_modified.js +0 -9
- data/node_modules/minimist/test/proto.js +0 -44
- data/node_modules/minimist/test/short.js +0 -67
- data/node_modules/minimist/test/stop_early.js +0 -15
- data/node_modules/minimist/test/unknown.js +0 -102
- data/node_modules/minimist/test/whitespace.js +0 -8
- data/node_modules/mkdirp/bin/cmd.js +0 -33
- data/node_modules/mkdirp/bin/usage.txt +0 -12
- data/node_modules/mkdirp/package.json +0 -34
- data/node_modules/mkdirp/readme.markdown +0 -100
- 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 {
|
|
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|
|
|
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 (
|
|
65
|
-
protocols =
|
|
66
|
-
} else if (
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
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 {
|
|
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,
|
|
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]
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
384
|
-
|
|
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
|
-
|
|
387
|
-
|
|
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
|
|
417
|
-
|
|
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
|
|
540
|
+
return null;
|
|
422
541
|
},
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
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
|
-
|
|
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|
|
|
452
|
-
* @param {
|
|
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 {
|
|
455
|
-
*
|
|
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
|
-
|
|
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 (
|
|
509
|
-
throw new
|
|
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
|
-
|
|
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 (
|
|
637
|
-
|
|
638
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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
|
-
|
|
662
|
-
|
|
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,
|
|
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
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
881
|
-
// `'data'` event.
|
|
1081
|
+
// data will be read as a single chunk.
|
|
882
1082
|
//
|
|
883
|
-
|
|
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": "
|
|
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": ">=
|
|
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": "^
|
|
51
|
-
"mocha": "^
|
|
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"
|