isomorfeus-puppetmaster 0.5.1 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|