{"id":13447894,"url":"https://github.com/vitalets/websocket-as-promised","last_synced_at":"2025-05-15T06:05:09.486Z","repository":{"id":39801123,"uuid":"95229864","full_name":"vitalets/websocket-as-promised","owner":"vitalets","description":"A Promise-based API for WebSockets","archived":false,"fork":false,"pushed_at":"2025-04-22T09:17:59.000Z","size":856,"stargazers_count":601,"open_issues_count":6,"forks_count":43,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-22T10:36:14.091Z","etag":null,"topics":["javascript","nodejs","promise","websocket","websocket-api","websocket-client"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitalets.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["vitalets"]}},"created_at":"2017-06-23T14:54:23.000Z","updated_at":"2025-04-22T09:18:03.000Z","dependencies_parsed_at":"2024-10-22T22:53:52.856Z","dependency_job_id":null,"html_url":"https://github.com/vitalets/websocket-as-promised","commit_stats":{"total_commits":245,"total_committers":6,"mean_commits":"40.833333333333336","dds":0.05714285714285716,"last_synced_commit":"bc60644c935b69eba1284f5863d3d91099165bd0"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fwebsocket-as-promised","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fwebsocket-as-promised/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fwebsocket-as-promised/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalets%2Fwebsocket-as-promised/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitalets","download_url":"https://codeload.github.com/vitalets/websocket-as-promised/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254283339,"owners_count":22045140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","nodejs","promise","websocket","websocket-api","websocket-client"],"created_at":"2024-07-31T05:01:29.698Z","updated_at":"2025-05-15T06:05:09.462Z","avatar_url":"https://github.com/vitalets.png","language":"JavaScript","funding_links":["https://github.com/sponsors/vitalets"],"categories":["JavaScript","Tools per Language","WebSockets"],"sub_categories":["Node.js"],"readme":"# websocket-as-promised\n\n\u003cimg alt=\"websocket-as-promised logo\" align=\"right\" src=\"https://user-images.githubusercontent.com/1473072/32486445-b2443538-c3b7-11e7-8e9f-94c95efad760.png\"/\u003e\n\n[![Actions Status](https://github.com/vitalets/websocket-as-promised/workflows/autotests/badge.svg)](https://github.com/vitalets/websocket-as-promised/actions)\n[![Known Vulnerabilities](https://snyk.io/test/github/vitalets/websocket-as-promised/badge.svg?targetFile=package.json)](https://snyk.io/test/github/vitalets/websocket-as-promised?targetFile=package.json)\n[![npm](https://img.shields.io/npm/v/websocket-as-promised.svg)](https://www.npmjs.com/package/websocket-as-promised)\n[![license](https://img.shields.io/npm/l/websocket-as-promised.svg)](https://www.npmjs.com/package/websocket-as-promised)\n\nA [WebSocket] client library with [Promise]-based API for browser and Node.js.\n\n## Example\n```js\nimport WebSocketAsPromised from 'websocket-as-promised';\n\n// create instance of WebSocket connection\nconst wsp = new WebSocketAsPromised('ws://example.com');\n\n// wait for WebSocket connection to open\nawait wsp.open();\n\n// send some data\nwsp.send('data');\n\n// wait for connection to close\nawait wsp.close();\n```\n\n## Contents\n* [Requirements](#requirements)\n* [Installation](#installation)\n* [Usage](#usage-in-browser)\n  * [Browser](#usage-in-browser)\n  * [Node.js](#usage-in-nodejs)\n* [Sending data](#sending-raw-data)\n  * [raw](#sending-raw-data)\n  * [JSON](#sending-json)\n  * [binary](#sending-binary)\n  * [request / response](#sending-requests)\n* [API](#api)\n* [Changelog](#changelog)\n* [License](#license)\n\n## Requirements\n* global `Promise` constructor\n\n## Installation\n```bash\nnpm i websocket-as-promised --save\n```\n\n## Usage in browser\n```js\nimport WebSocketAsPromised from 'websocket-as-promised';\n\nconst wsp = new WebSocketAsPromised('ws://example.com');\n\nwsp.open()\n  .then(() =\u003e wsp.send('message'))\n  .then(() =\u003e wsp.close())\n  .catch(e =\u003e console.error(e));\n```\nOr with ES7 [async / await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function):\n```js\nimport WebSocketAsPromised from 'websocket-as-promised';\n\nconst wsp = new WebSocketAsPromised('ws://example.com');\n\n(async () =\u003e {\n  try {\n    await wsp.open();\n    wsp.send('message');\n  } catch(e) {\n    console.error(e);\n  } finally {\n    await wsp.close();\n  }\n})();\n```\n\n## Usage in Node.js\nAs there is no built-in WebSocket client in Node.js, you should use a third-party WebSocket npm package.\n\n### Usage with [websocket](https://www.npmjs.com/package/websocket)\nHere you should use W3C compatible client - [W3CWebSocket](https://github.com/theturtle32/WebSocket-Node/blob/master/docs/W3CWebSocket.md):\n```js\nconst WebSocketAsPromised = require('websocket-as-promised');\nconst W3CWebSocket = require('websocket').w3cwebsocket;\n\nconst wsp = new WebSocketAsPromised('ws://example.com', {\n  createWebSocket: url =\u003e new W3CWebSocket(url)\n});\n\nwsp.open()\n  .then(() =\u003e wsp.send('message'))\n  .then(() =\u003e wsp.close())\n  .catch(e =\u003e console.error(e));\n```\n\n### Usage with [ws](https://www.npmjs.com/package/ws)\nHere it is important to define `extractMessageData` option as event data are passed directly to `onmessage` handler, \nnot as `event.data` by [spec](https://html.spec.whatwg.org/multipage/comms.html#dom-messageevent-data):\n```js\nconst WebSocketAsPromised = require('websocket-as-promised');\nconst WebSocket = require('ws');\n\nconst wsp = new WebSocketAsPromised('ws://example.com', {\n  createWebSocket: url =\u003e new WebSocket(url),\n  extractMessageData: event =\u003e event, // \u003c- this is important\n});\n\nwsp.open()\n  .then(() =\u003e wsp.send('message'))\n  .then(() =\u003e wsp.close())\n  .catch(e =\u003e console.error(e));\n```\n\n## Sending raw data\nTo send raw data use `.send()` method:\n```js\nwsp.send('foo');\n```\nTo handle raw data from server use `.onMessage` channel:\n```js\nwsp.onMessage.addListener(data =\u003e console.log(data));\n```\n\n## Sending JSON\nTo send JSON you should define `packMessage / unpackMessage` options:\n```js\nconst wsp = new WebSocketAsPromised(wsUrl, {\n  packMessage: data =\u003e JSON.stringify(data),\n  unpackMessage: data =\u003e JSON.parse(data)\n});\n```\nTo send data use `.sendPacked()` method passing json as parameter:\n```js\nwsp.sendPacked({foo: 'bar'});\n```\nTo read unpacked data from received message you can subscribe to `onUnpackedMessage` channel:\n```js\nwsp.onUnpackedMessage.addListener(data =\u003e console.log(data.status));\n```\n\n## Sending binary\nExample of sending `Uint8Array`:\n```js\nconst wsp = new WebSocketAsPromised(wsUrl, {\n    packMessage: data =\u003e (new Uint8Array(data)).buffer,\n    unpackMessage: data =\u003e new Uint8Array(data),\n});\n\nwsp.open()\n  .then(() =\u003e wsp.sendPacked([1, 2, 3]))\n  .then(() =\u003e wsp.close())\n  .catch(e =\u003e console.error(e));\n```\n\n## Sending requests\n*websocket-as-promised* provides simple request-response mechanism ([JSON RPC](https://www.jsonrpc.org)). \nMethod `.sendRequest()` sends message with unique `requestId` and returns promise. \nThat promise get resolved when response message with the same `requestId` comes. \nFor reading/setting `requestId` from/to message there are two functions defined in options `attachRequestId / extractRequestId`:\n```js\nconst wsp = new WebSocketAsPromised(wsUrl, {\n  packMessage: data =\u003e JSON.stringify(data),\n  unpackMessage: data =\u003e JSON.parse(data),\n  attachRequestId: (data, requestId) =\u003e Object.assign({id: requestId}, data), // attach requestId to message as `id` field\n  extractRequestId: data =\u003e data \u0026\u0026 data.id,                                  // read requestId from message `id` field\n});\n\nwsp.open()\n .then(() =\u003e wsp.sendRequest({foo: 'bar'})) // actually sends {foo: 'bar', id: 'xxx'}, because `attachRequestId` defined above\n .then(response =\u003e console.log(response));  // waits server message with corresponding requestId: {id: 'xxx', ...}\n```\nBy default `requestId` value is auto-generated, but you can set it manually:\n```js\nwsp.sendRequest({foo: 'bar'}, {requestId: 42});\n```\n\n\u003e Note: you should implement yourself attaching `requestId` on server side.\n\n## API\n\n### Classes\n\n\u003cdl\u003e\n\u003cdt\u003e\u003ca href=\"#WebSocketAsPromised\"\u003eWebSocketAsPromised\u003c/a\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\n### Typedefs\n\n\u003cdl\u003e\n\u003cdt\u003e\u003ca href=\"#Options\"\u003eOptions\u003c/a\u003e : \u003ccode\u003eObject\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003ca name=\"WebSocketAsPromised\"\u003e\u003c/a\u003e\n\n### WebSocketAsPromised\n**Kind**: global class  \n\n* [WebSocketAsPromised](#WebSocketAsPromised)\n    * [new WebSocketAsPromised(url, [options])](#new_WebSocketAsPromised_new)\n    * [.ws](#WebSocketAsPromised+ws) ⇒ \u003ccode\u003eWebSocket\u003c/code\u003e\n    * [.url](#WebSocketAsPromised+url) ⇒ \u003ccode\u003eString\u003c/code\u003e\n    * [.isOpening](#WebSocketAsPromised+isOpening) ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\n    * [.isOpened](#WebSocketAsPromised+isOpened) ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\n    * [.isClosing](#WebSocketAsPromised+isClosing) ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\n    * [.isClosed](#WebSocketAsPromised+isClosed) ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\n    * [.onOpen](#WebSocketAsPromised+onOpen) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onSend](#WebSocketAsPromised+onSend) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onMessage](#WebSocketAsPromised+onMessage) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onUnpackedMessage](#WebSocketAsPromised+onUnpackedMessage) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onResponse](#WebSocketAsPromised+onResponse) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onClose](#WebSocketAsPromised+onClose) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.onError](#WebSocketAsPromised+onError) ⇒ \u003ccode\u003eChannel\u003c/code\u003e\n    * [.open()](#WebSocketAsPromised+open) ⇒ \u003ccode\u003ePromise.\u0026lt;Event\u0026gt;\u003c/code\u003e\n    * [.sendRequest(data, [options])](#WebSocketAsPromised+sendRequest) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n    * [.sendPacked(data)](#WebSocketAsPromised+sendPacked)\n    * [.send(data)](#WebSocketAsPromised+send)\n    * [.waitUnpackedMessage(predicate, [options])](#WebSocketAsPromised+waitUnpackedMessage) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n    * [.close([code], [reason])](#WebSocketAsPromised+close) ⇒ \u003ccode\u003ePromise.\u0026lt;Event\u0026gt;\u003c/code\u003e\n    * [.removeAllListeners()](#WebSocketAsPromised+removeAllListeners)\n\n\u003ca name=\"new_WebSocketAsPromised_new\"\u003e\u003c/a\u003e\n\n#### new WebSocketAsPromised(url, [options])\nConstructor. Unlike original WebSocket it does not immediately open connection.\nPlease call `open()` method to connect.\n\n\n| Param | Type | Description |\n| --- | --- | --- |\n| url | \u003ccode\u003eString\u003c/code\u003e | WebSocket URL |\n| [options] | [\u003ccode\u003eOptions\u003c/code\u003e](#Options) |  |\n\n\u003ca name=\"WebSocketAsPromised+ws\"\u003e\u003c/a\u003e\n\n#### wsp.ws ⇒ \u003ccode\u003eWebSocket\u003c/code\u003e\nReturns original WebSocket instance created by `options.createWebSocket`.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+url\"\u003e\u003c/a\u003e\n\n#### wsp.url ⇒ \u003ccode\u003eString\u003c/code\u003e\nReturns WebSocket url.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+isOpening\"\u003e\u003c/a\u003e\n\n#### wsp.isOpening ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\nIs WebSocket connection in opening state.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+isOpened\"\u003e\u003c/a\u003e\n\n#### wsp.isOpened ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\nIs WebSocket connection opened.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+isClosing\"\u003e\u003c/a\u003e\n\n#### wsp.isClosing ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\nIs WebSocket connection in closing state.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+isClosed\"\u003e\u003c/a\u003e\n\n#### wsp.isClosed ⇒ \u003ccode\u003eBoolean\u003c/code\u003e\nIs WebSocket connection closed.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+onOpen\"\u003e\u003c/a\u003e\n\n#### wsp.onOpen ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered when connection is opened.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onOpen.addListener(() =\u003e console.log('Connection opened'));\n```\n\u003ca name=\"WebSocketAsPromised+onSend\"\u003e\u003c/a\u003e\n\n#### wsp.onSend ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered every time when message is sent to server.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onSend.addListener(data =\u003e console.log('Message sent', data));\n```\n\u003ca name=\"WebSocketAsPromised+onMessage\"\u003e\u003c/a\u003e\n\n#### wsp.onMessage ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered every time when message received from server.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onMessage.addListener(message =\u003e console.log(message));\n```\n\u003ca name=\"WebSocketAsPromised+onUnpackedMessage\"\u003e\u003c/a\u003e\n\n#### wsp.onUnpackedMessage ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered every time when received message is successfully unpacked.\nFor example, if you are using JSON transport, the listener will receive already JSON parsed data.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onUnpackedMessage.addListener(data =\u003e console.log(data.foo));\n```\n\u003ca name=\"WebSocketAsPromised+onResponse\"\u003e\u003c/a\u003e\n\n#### wsp.onResponse ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered every time when response to some request comes.\nReceived message considered a response if requestId is found in it.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onResponse.addListener(data =\u003e console.log(data));\n```\n\u003ca name=\"WebSocketAsPromised+onClose\"\u003e\u003c/a\u003e\n\n#### wsp.onClose ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered when connection closed.\nListener accepts single argument `{code, reason}`.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onClose.addListener(event =\u003e console.log(`Connections closed: ${event.reason}`));\n```\n\u003ca name=\"WebSocketAsPromised+onError\"\u003e\u003c/a\u003e\n\n#### wsp.onError ⇒ \u003ccode\u003eChannel\u003c/code\u003e\nEvent channel triggered when by Websocket 'error' event.\n\n**Kind**: instance property of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n**See**: https://vitalets.github.io/chnl/#channel  \n**Example**  \n```js\nwsp.onError.addListener(event =\u003e console.error(event));\n```\n\u003ca name=\"WebSocketAsPromised+open\"\u003e\u003c/a\u003e\n\n#### wsp.open() ⇒ \u003ccode\u003ePromise.\u0026lt;Event\u0026gt;\u003c/code\u003e\nOpens WebSocket connection. If connection already opened, promise will be resolved with \"open event\".\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"WebSocketAsPromised+sendRequest\"\u003e\u003c/a\u003e\n\n#### wsp.sendRequest(data, [options]) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\nPerforms request and waits for response.\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\n| Param | Type | Default |\n| --- | --- | --- |\n| data | \u003ccode\u003e\\*\u003c/code\u003e |  | \n| [options] | \u003ccode\u003eObject\u003c/code\u003e |  | \n| [options.requestId] | \u003ccode\u003eString\u003c/code\u003e \\| \u003ccode\u003eNumber\u003c/code\u003e | \u003ccode\u003e\u0026lt;auto-generated\u0026gt;\u003c/code\u003e | \n| [options.timeout] | \u003ccode\u003eNumber\u003c/code\u003e | \u003ccode\u003e0\u003c/code\u003e | \n\n\u003ca name=\"WebSocketAsPromised+sendPacked\"\u003e\u003c/a\u003e\n\n#### wsp.sendPacked(data)\nPacks data with `options.packMessage` and sends to the server.\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\n| Param | Type |\n| --- | --- |\n| data | \u003ccode\u003e\\*\u003c/code\u003e | \n\n\u003ca name=\"WebSocketAsPromised+send\"\u003e\u003c/a\u003e\n\n#### wsp.send(data)\nSends data without packing.\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\n| Param | Type |\n| --- | --- |\n| data | \u003ccode\u003eString\u003c/code\u003e \\| \u003ccode\u003eBlob\u003c/code\u003e \\| \u003ccode\u003eArrayBuffer\u003c/code\u003e | \n\n\u003ca name=\"WebSocketAsPromised+waitUnpackedMessage\"\u003e\u003c/a\u003e\n\n#### wsp.waitUnpackedMessage(predicate, [options]) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\nWaits for particular message to come.\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\n| Param | Type | Default | Description |\n| --- | --- | --- | --- |\n| predicate | \u003ccode\u003efunction\u003c/code\u003e |  | function to check incoming message. |\n| [options] | \u003ccode\u003eObject\u003c/code\u003e |  |  |\n| [options.timeout] | \u003ccode\u003eNumber\u003c/code\u003e | \u003ccode\u003e0\u003c/code\u003e |  |\n| [options.timeoutError] | \u003ccode\u003eError\u003c/code\u003e |  |  |\n\n**Example**  \n```js\nconst response = await wsp.waitUnpackedMessage(data =\u003e data \u0026\u0026 data.foo === 'bar');\n```\n\u003ca name=\"WebSocketAsPromised+close\"\u003e\u003c/a\u003e\n\n#### wsp.close([code], [reason]) ⇒ \u003ccode\u003ePromise.\u0026lt;Event\u0026gt;\u003c/code\u003e\nCloses WebSocket connection. If connection already closed, promise will be resolved with \"close event\".\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\n| Param | Type | Default | Description |\n| --- | --- | --- | --- |\n| [code] | \u003ccode\u003enumber\u003c/code\u003e | \u003ccode\u003e1000\u003c/code\u003e | A numeric value indicating the status code. |\n| [reason] | \u003ccode\u003estring\u003c/code\u003e |  | A human-readable reason for closing connection. |\n\n\u003ca name=\"WebSocketAsPromised+removeAllListeners\"\u003e\u003c/a\u003e\n\n#### wsp.removeAllListeners()\nRemoves all listeners from WSP instance. Useful for cleanup.\n\n**Kind**: instance method of [\u003ccode\u003eWebSocketAsPromised\u003c/code\u003e](#WebSocketAsPromised)  \n\u003ca name=\"Options\"\u003e\u003c/a\u003e\n\n### Options : \u003ccode\u003eObject\u003c/code\u003e\n**Kind**: global typedef  \n**Defaults**: please see [options.js](https://github.com/vitalets/websocket-as-promised/blob/master/src/options.js)  \n**Properties**\n\n| Name | Type | Default | Description |\n| --- | --- | --- | --- |\n| [createWebSocket] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003eurl \u0026#x3D;\u0026gt; new WebSocket(url)\u003c/code\u003e | custom function for WebSocket construction. |\n| [packMessage] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003enoop\u003c/code\u003e | packs message for sending. For example, `data =\u003e JSON.stringify(data)`. |\n| [unpackMessage] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003enoop\u003c/code\u003e | unpacks received message. For example, `data =\u003e JSON.parse(data)`. |\n| [attachRequestId] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003enoop\u003c/code\u003e | injects request id into data. For example, `(data, requestId) =\u003e Object.assign({requestId}, data)`. |\n| [extractRequestId] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003enoop\u003c/code\u003e | extracts request id from received data. For example, `data =\u003e data.requestId`. |\n| [extractMessageData] | \u003ccode\u003efunction\u003c/code\u003e | \u003ccode\u003eevent \u0026#x3D;\u0026gt; event.data\u003c/code\u003e | extracts data from event object. |\n| timeout | \u003ccode\u003eNumber\u003c/code\u003e | \u003ccode\u003e0\u003c/code\u003e | timeout for opening connection and sending messages. |\n| connectionTimeout | \u003ccode\u003eNumber\u003c/code\u003e | \u003ccode\u003e0\u003c/code\u003e | special timeout for opening connection, by default equals to `timeout`. |\n\n## Changelog\nPlease see [CHANGELOG.md](CHANGELOG.md).\n\n## License\nMIT @ [Vitaliy Potapov](https://github.com/vitalets)\n\n\u003cdiv align=\"center\"\u003e\n* * *\u003cbr\u003e\n\u003ci\u003eIf you love :heart: JavaScript and would like to track new trending repositories, \u003cbr\u003e\nhave a look on \u003ca href=\"https://github.com/vitalets/github-trending-repos\"\u003evitalets/github-trending-repos\u003c/a\u003e.\u003c/i\u003e\n\u003c/div\u003e\n\n[Promise]: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise\n[WebSocket]: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalets%2Fwebsocket-as-promised","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitalets%2Fwebsocket-as-promised","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalets%2Fwebsocket-as-promised/lists"}