From bfefbaf196c8235170f578d484555b894d83c1af Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 19 Nov 2017 10:12:28 +0100 Subject: [PATCH] Split providers into @polkadot/api-provider --- README.md | 5 +- package-lock.json | 1016 ++++++++++++++++++++++++++--- package.json | 8 +- src/api.js | 6 +- src/api.spec.js | 6 - src/index.js | 2 - src/polyfill.js | 6 - src/polyfill.spec.js | 15 - src/provider/http.js | 37 -- src/provider/http.spec.js | 97 --- src/provider/index.js | 8 - src/provider/jsonRpcCoder.js | 55 -- src/provider/jsonRpcCoder.spec.js | 77 --- src/provider/types.js | 26 - src/provider/ws.js | 101 --- src/provider/ws.spec.js | 194 ------ test/mocha.config.js | 2 - test/mockHttp.js | 31 - test/mockWs.js | 55 -- 19 files changed, 944 insertions(+), 803 deletions(-) delete mode 100644 src/polyfill.js delete mode 100644 src/polyfill.spec.js delete mode 100644 src/provider/http.js delete mode 100644 src/provider/http.spec.js delete mode 100644 src/provider/index.js delete mode 100644 src/provider/jsonRpcCoder.js delete mode 100644 src/provider/jsonRpcCoder.spec.js delete mode 100644 src/provider/types.js delete mode 100644 src/provider/ws.js delete mode 100644 src/provider/ws.spec.js delete mode 100644 test/mockHttp.js delete mode 100644 test/mockWs.js diff --git a/README.md b/README.md index b4dfae886426..e14d6e329c7c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Polkadot JavaScript API +# API wrapper for RPC calls [![Build Status](https://travis-ci.org/polkadot-js/api.svg?branch=master)](https://travis-ci.org/polkadot-js/api) [![Coverage Status](https://coveralls.io/repos/github/polkadot-js/api/badge.svg?branch=master)](https://coveralls.io/github/polkadot-js/api?branch=master) @@ -21,8 +21,9 @@ Initialisation - ``` import Api from '@polkadot/api'; +import HttpProvider from '@polkadot/api-provider/http'; -const provider = new Api.HttpProvider('http://127.0.0.1:9933'); +const provider = new HttpProvider('http://127.0.0.1:9933'); const api = new Api(provider); ``` diff --git a/package-lock.json b/package-lock.json index e151ff7838a8..2e101c114b77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@polkadot/api", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -153,6 +153,17 @@ "babel-runtime": "6.26.0" } }, + "@polkadot/api-provider": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-provider/-/api-provider-0.1.1.tgz", + "integrity": "sha512-spwE6q5CLMYMcQV27eQO/cg259qlqyRwbRbimIQXgijPKljeb+1Y18z66wvdQvq0lRRlYvYT5xD1YTYnmsCmrg==", + "dev": true, + "requires": { + "@polkadot/util": "0.3.1", + "babel-runtime": "6.26.0", + "isomorphic-fetch": "2.2.1" + } + }, "@polkadot/jsonrpc": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@polkadot/jsonrpc/-/jsonrpc-0.3.2.tgz", @@ -1348,9 +1359,9 @@ } }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true, "optional": true }, @@ -1506,6 +1517,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1728,12 +1740,6 @@ "type-detect": "4.0.5" } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1806,6 +1812,7 @@ "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, "requires": { "iconv-lite": "0.4.19" } @@ -2334,6 +2341,910 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2544,7 +3455,8 @@ "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true }, "ignore": { "version": "3.3.7", @@ -2664,7 +3576,7 @@ "dev": true, "optional": true, "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -2802,7 +3714,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-typedarray": { "version": "1.0.0", @@ -2842,6 +3755,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, "requires": { "node-fetch": "1.7.3", "whatwg-fetch": "2.0.3" @@ -3204,12 +4118,6 @@ } } }, - "mock-socket": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-7.1.0.tgz", - "integrity": "sha512-rGLU70pR+0C9xgsRKXLd54heGWg1hQcarH1RMX2Jpn4pgGIWzbGFsM1RvQqbWMXpDXsSoNPBhqVgBStza/wT3Q==", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3254,6 +4162,13 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -3281,63 +4196,11 @@ } } }, - "nock": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.0.tgz", - "integrity": "sha512-u9QOLOZP0DlcKzmAzCuX5PRsIhbiRJupR7hJn1cCCT7VW3ZKUrEH/oxGEtVA8Xbu4EmzH9d/VK0x/3FxCGRrRg==", - "dev": true, - "requires": { - "chai": "3.5.0", - "debug": "2.6.9", - "deep-equal": "1.0.1", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "propagate": "0.4.0", - "qs": "6.5.1", - "semver": "5.4.1" - }, - "dependencies": { - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "dev": true, - "requires": { - "assertion-error": "1.0.2", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - }, - "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - } - } - }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", - "dev": true - } - } - }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, "requires": { "encoding": "0.1.12", "is-stream": "1.1.0" @@ -3644,12 +4507,6 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, - "propagate": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz", - "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -4421,7 +5278,8 @@ "whatwg-fetch": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=", + "dev": true }, "which": { "version": "1.2.14", diff --git a/package.json b/package.json index 6ddc4f62c163..432916047cde 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@polkadot/api", - "version": "0.3.1", + "version": "0.4.0", "description": "A JavaScript wrapper for the Polkadot JsonRPC interface", "main": "index.js", "keywords": [ @@ -35,6 +35,7 @@ "test": "cross-env NODE_ENV=test babel-istanbul cover _mocha 'src/*.spec.js' 'src/**/*.spec.js'" }, "devDependencies": { + "@polkadot/api-provider": "~0.1.0", "babel-cli": "^6.26.0", "babel-core": "^6.26.0", "babel-eslint": "^8.0.2", @@ -60,8 +61,6 @@ "flow-bin": "^0.59.0", "makeshift": "^1.1.0", "mocha": "^4.0.1", - "mock-socket": "^7.1.0", - "nock": "^9.1.0", "rimraf": "^2.6.2", "sinon": "^4.1.2", "sinon-chai": "^2.14.0" @@ -70,7 +69,6 @@ "@polkadot/api-format": "~0.3.0", "@polkadot/jsonrpc": "~0.3.0", "@polkadot/util": "~0.3.0", - "babel-runtime": "^6.26.0", - "isomorphic-fetch": "^2.2.1" + "babel-runtime": "^6.26.0" } } diff --git a/src/api.js b/src/api.js index aa990e72225a..a90de4b9083a 100644 --- a/src/api.js +++ b/src/api.js @@ -1,17 +1,15 @@ // ISC, Copyright 2017 Jaco Greeff // @flow +import type { ProviderInterface } from '@polkadot/api-provider/types'; import type { InterfaceDefinition } from '@polkadot/jsonrpc/types'; import type { ApiInterface } from './types'; -import type { ProviderInterface } from './provider/types'; const { formatInputs, formatOutput } = require('@polkadot/api-format'); const interfaces = require('@polkadot/jsonrpc'); const { callSignature } = require('@polkadot/jsonrpc/util'); const { isFunction } = require('@polkadot/util/is'); -const { HttpProvider } = require('./provider'); - module.exports = class Api implements ApiInterface { _provider: ProviderInterface; _chainInterface: any = null; @@ -67,6 +65,4 @@ module.exports = class Api implements ApiInterface { return container; }, {}); } - - static HttpProvider = HttpProvider; }; diff --git a/src/api.spec.js b/src/api.spec.js index c9ee472b645f..fa935ba7fd7c 100644 --- a/src/api.spec.js +++ b/src/api.spec.js @@ -109,10 +109,4 @@ describe('Api', () => { }); }); }); - - describe('static', () => { - it('exports Api.HttpProvider', () => { - expect(Api.HttpProvider).to.be.ok; - }); - }); }); diff --git a/src/index.js b/src/index.js index 35b6ff5e3e47..0581dc2a74d4 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,6 @@ // ISC, Copyright 2017 Jaco Greeff // @flow -require('./polyfill'); - const Api = require('./api'); module.exports = Api; diff --git a/src/polyfill.js b/src/polyfill.js deleted file mode 100644 index 63e67c470b83..000000000000 --- a/src/polyfill.js +++ /dev/null @@ -1,6 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -if (typeof fetch === 'undefined') { - require('isomorphic-fetch'); -} diff --git a/src/polyfill.spec.js b/src/polyfill.spec.js deleted file mode 100644 index 7bc3997a7355..000000000000 --- a/src/polyfill.spec.js +++ /dev/null @@ -1,15 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -/* eslint-disable no-unused-expressions */ - -describe('polyfill', () => { - it('adds polyfills with no exceptions', () => { - expect(require('./polyfill')).to.be.ok; - }); - - describe('interfaces', () => { - it('fetch is available', () => { - expect(fetch).to.be.ok; - }); - }); -}); diff --git a/src/provider/http.js b/src/provider/http.js deleted file mode 100644 index b7de67273bc9..000000000000 --- a/src/provider/http.js +++ /dev/null @@ -1,37 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -import type { ProviderInterface } from './types'; - -const JsonRpcCoder = require('./jsonRpcCoder'); - -module.exports = class HttpProvider extends JsonRpcCoder implements ProviderInterface { - _endpoint: string; - - constructor (endpoint: string) { - super(); - - this._endpoint = endpoint; - } - - async send (method: string, params: Array): Promise { - const body = this.encodeJson(method, params); - const response = await fetch(this._endpoint, { - body, - headers: { - 'Accept': 'application/json', - 'Content-Length': `${body.length}`, - 'Content-Type': 'application/json' - }, - method: 'POST' - }); - - if (!response.ok) { - throw new Error(`[${response.status}]: ${response.statusText}`); - } - - const result = await response.json(); - - return this.decodeResponse(result); - } -}; diff --git a/src/provider/http.spec.js b/src/provider/http.spec.js deleted file mode 100644 index b7660e0cccab..000000000000 --- a/src/provider/http.spec.js +++ /dev/null @@ -1,97 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -/* eslint-disable no-unused-expressions */ - -const { mockHttp, TEST_HTTP_URL } = require('../../test/mockHttp'); - -const sinon = require('sinon'); - -const Http = require('./http'); - -describe('provider/Http', () => { - let http; - let mock; - - beforeEach(() => { - http = new Http(TEST_HTTP_URL); - - sinon.spy(http, 'encodeJson'); - sinon.spy(http, 'decodeResponse'); - }); - - afterEach(() => { - http.encodeJson.restore(); - http.decodeResponse.restore(); - - mock.done(); - }); - - describe('send', () => { - it('encodes requests', () => { - mock = mockHttp([{ - method: 'test_encoding', - reply: { - result: 'ok' - } - }]); - - return http - .send('test_encoding', ['param']) - .then((result) => { - expect(http.encodeJson).to.have.been.calledWith('test_encoding', ['param']); - }); - }); - - it('decodes responses', () => { - mock = mockHttp([{ - method: 'test_encoding', - reply: { - result: 'ok' - } - }]); - - return http - .send('test_encoding', ['param']) - .then((result) => { - expect(http.decodeResponse).to.have.been.calledWith({ - id: 1, - jsonrpc: '2.0', - result: 'ok' - }); - }); - }); - - it('passes the body through correctly', () => { - mock = mockHttp([{ - method: 'test_body', - reply: { - result: 'ok' - } - }]); - - return http - .send('test_body', ['param']) - .then((result) => { - expect(mock.body['test_body']).to.deep.equal({ - id: 1, - jsonrpc: '2.0', - method: 'test_body', - params: ['param'] - }); - }); - }); - - it('throws error when !response.ok', () => { - mock = mockHttp([{ - code: 500, - method: 'test_error' - }]); - - return http - .send('test_error', []) - .catch((error) => { - expect(error).to.match(/\[500\]: Internal Server/); - }); - }); - }); -}); diff --git a/src/provider/index.js b/src/provider/index.js deleted file mode 100644 index 729345f56b57..000000000000 --- a/src/provider/index.js +++ /dev/null @@ -1,8 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -const HttpProvider = require('./http'); - -module.exports = { - HttpProvider -}; diff --git a/src/provider/jsonRpcCoder.js b/src/provider/jsonRpcCoder.js deleted file mode 100644 index 496d968dd6e9..000000000000 --- a/src/provider/jsonRpcCoder.js +++ /dev/null @@ -1,55 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -import type { JsonRpcRequest, JsonRpcResponse } from './types'; - -const { isNumber, isUndefined } = require('@polkadot/util/is'); - -module.exports = class JsonRpcCoder { - _id: number = 0; - - decodeResponse (response: JsonRpcResponse): any { - if (!response) { - throw new Error('Empty response object received'); - } - - if (response.jsonrpc !== '2.0') { - throw new Error('Invalid jsonrpc field in decoded object'); - } - - if (!isNumber(response.id)) { - throw new Error('Invalid id field in decoded object'); - } - - if (response.error) { - const { code, message } = response.error; - - throw new Error(`[${code}]: ${message}`); - } - - if (isUndefined(response.result)) { - throw new Error('No result found in JsonRpc response'); - } - - return response.result; - } - - encodeObject (method: string, params: Array): JsonRpcRequest { - return { - id: ++this._id, - jsonrpc: '2.0', - method, - params - }; - } - - encodeJson (method: string, params: Array): string { - return JSON.stringify( - this.encodeObject(method, params) - ); - } - - get id (): number { - return this._id; - } -}; diff --git a/src/provider/jsonRpcCoder.spec.js b/src/provider/jsonRpcCoder.spec.js deleted file mode 100644 index a9ad50cfea7d..000000000000 --- a/src/provider/jsonRpcCoder.spec.js +++ /dev/null @@ -1,77 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -const JsonRpcCoder = require('./jsonRpcCoder'); - -describe('provider/JsonRpcCoder', () => { - let coder; - - beforeEach(() => { - coder = new JsonRpcCoder(); - }); - - describe('id', () => { - it('starts with id === 0 (nothing sent)', () => { - expect(coder.id).to.equal(0); - }); - }); - - describe('decodeResponse', () => { - it('expects a non-empty input object', () => { - expect( - () => coder.decodeResponse() - ).to.throw(/Empty response/); - }); - - it('expects a valid jsonrpc field', () => { - expect( - () => coder.decodeResponse({}) - ).to.throw(/Invalid jsonrpc/); - }); - - it('expects a valid id field', () => { - expect( - () => coder.decodeResponse({ jsonrpc: '2.0' }) - ).to.throw(/Invalid id/); - }); - - it('expects a valid result field', () => { - expect( - () => coder.decodeResponse({ id: 1, jsonrpc: '2.0' }) - ).to.throw(/No result/); - }); - - it('throws any error found', () => { - expect( - () => coder.decodeResponse({ id: 1, jsonrpc: '2.0', error: { code: 123, message: 'test error' } }) - ).to.throw(/\[123\]: test error/); - }); - - it('returns the result', () => { - expect( - coder.decodeResponse({ id: 1, jsonrpc: '2.0', result: 'some result' }) - ).to.equal('some result'); - }); - }); - - describe('encodeObject', () => { - it('encodes a valid JsonRPC object', () => { - expect( - coder.encodeObject('method', 'params') - ).to.deep.equal({ - id: 1, - jsonrpc: '2.0', - method: 'method', - params: 'params' - }); - expect(coder.id).to.equal(1); - }); - }); - - describe('encodeJson', () => { - it('encodes a valid JsonRPC JSON string', () => { - expect( - coder.encodeJson('method', 'params') - ).to.equal('{"id":1,"jsonrpc":"2.0","method":"method","params":"params"}'); - }); - }); -}); diff --git a/src/provider/types.js b/src/provider/types.js deleted file mode 100644 index ab60b4d7cbd0..000000000000 --- a/src/provider/types.js +++ /dev/null @@ -1,26 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -export type JsonRpcObject = { - id: number; - jsonrpc: '2.0'; -}; - -export type JsonRpcRequest = JsonRpcObject & { - method: string; - params: Array; -}; - -export type JsonRpcResponseBase = { - error?: { - code: number, - message: string - }; - result?: any; -} - -export type JsonRpcResponse = JsonRpcObject & JsonRpcResponseBase; - -export interface ProviderInterface { - send (method: string, params: Array): Promise; -} diff --git a/src/provider/ws.js b/src/provider/ws.js deleted file mode 100644 index a8522000d3a2..000000000000 --- a/src/provider/ws.js +++ /dev/null @@ -1,101 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff -// @flow - -import type { JsonRpcResponse, ProviderInterface } from './types'; - -type AwaitingType = { - callback: (error: ?Error, result: any) => void -}; - -type WsMessageType = { - data: any -}; - -const JsonRpcCoder = require('./jsonRpcCoder'); - -module.exports = class WsProvider extends JsonRpcCoder implements ProviderInterface { - _autoConnect: boolean = true; - _endpoint: string; - _handlers: { [number]: AwaitingType } = {}; - _websocket: WebSocket; - - constructor (endpoint: string, autoConnect: boolean = true) { - super(); - - this._endpoint = endpoint; - this._autoConnect = autoConnect; - - if (autoConnect) { - this.connect(); - } - } - - connect = () => { - this._handlers = {}; - - this._websocket = new WebSocket(this._endpoint); - - this._websocket.onclose = this._onClose; - this._websocket.onerror = this._onError; - this._websocket.onmessage = this._onMessage; - this._websocket.onopen = this._onOpen; - } - - _onClose = () => { - // console.log('disconnected from', this._endpoint); - - if (this._autoConnect) { - setTimeout(this.connect, 1000); - } - } - - _onError = (error: Event) => { - console.error(error); - } - - _onOpen = () => { - // console.log('connected to', this._endpoint); - } - - _onMessage = (message: WsMessageType) => { - const response: JsonRpcResponse = JSON.parse(message.data); - const handler = this._handlers[response.id]; - - if (!handler) { - console.error(`Unable to find handler for id=${response.id}`); - return; - } - - try { - const result = this.decodeResponse(response); - - handler.callback(null, result); - } catch (error) { - handler.callback(error); - } - - delete this._handlers[response.id]; - } - - send (method: string, params: Array): Promise { - return new Promise((resolve, reject) => { - try { - this._websocket.send( - this.encodeObject(method, params) - ); - - this._handlers[this.id] = { - callback: (error: ?Error, result: any) => { - if (error) { - reject(error); - } else { - resolve(result); - } - } - }; - } catch (error) { - reject(error); - } - }); - } -}; diff --git a/src/provider/ws.spec.js b/src/provider/ws.spec.js deleted file mode 100644 index 9ce2c256f6eb..000000000000 --- a/src/provider/ws.spec.js +++ /dev/null @@ -1,194 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -/* eslint-disable no-unused-expressions */ - -const { mockWs, TEST_WS_URL } = require('../../test/mockWs'); - -const { isUndefined } = require('@polkadot/util/is'); -const sinon = require('sinon'); - -const Ws = require('./ws'); - -let ws; -let mock; - -function createWs (requests, autoConnect) { - mock = autoConnect || isUndefined(autoConnect) - ? mockWs(requests) - : null; - - ws = new Ws(TEST_WS_URL, autoConnect); - - sinon.spy(ws, 'encodeObject'); - sinon.spy(ws, 'decodeResponse'); - - return ws; -} - -describe('provider/Ws', () => { - afterEach(() => { - ws.encodeObject.restore(); - ws.decodeResponse.restore(); - - if (mock) { - mock.done(); - } - }); - - describe('websocket', () => { - beforeEach(() => { - ws = createWs([]); - - sinon.spy(console, 'error'); - sinon.spy(console, 'log'); - }); - - afterEach(() => { - console.error.restore(); - console.log.restore(); - }); - - it('sets up the on* handlers', () => { - expect(ws._websocket.onclose[0]).to.equal(ws._onClose); - expect(ws._websocket.onerror[0]).to.equal(ws._onError); - expect(ws._websocket.onmessage[0]).to.equal(ws._onMessage); - expect(ws._websocket.onopen[0]).to.equal(ws._onOpen); - }); - - describe('_onClose', () => { - it('reconnects after delay', () => { - const clock = sinon.useFakeTimers(); - - ws.connect = sinon.stub(); - ws._onClose(); - - expect(ws.connect).not.to.have.been.called; - - clock.tick(1001); - - expect(ws.connect).to.have.been.called; - - clock.restore(); - }); - - it('does not reconnect when autoConnect false', () => { - mock.done(); - ws = createWs([], false); - - const clock = sinon.useFakeTimers(); - - ws.connect = sinon.stub(); - ws._onClose(); - - expect(ws.connect).not.to.have.been.called; - - clock.tick(1001); - - expect(ws.connect).not.to.have.been.called; - - clock.restore(); - }); - }); - - describe('_onError', () => { - it('logs the error', () => { - ws._onError('test error'); - - expect(console.error).to.have.been.calledWith('test error'); - }); - }); - - describe('_onMessage', () => { - it('fails with log when handler not found', () => { - ws._onMessage({ data: '{"id":2}' }); - - expect(console.error).to.have.been.calledWith('Unable to find handler for id=2'); - }); - }); - }); - - describe('send', () => { - it('handles internal errors', () => { - ws = createWs([], false); - - return ws - .send('test_encoding', ['param']) - .catch((error) => { - expect(error).to.be.ok; - }); - }); - - it('encodes requests', () => { - ws = createWs([{ - id: 1, - method: 'test_encoding', - reply: { - result: 'ok' - } - }]); - - return ws - .send('test_encoding', ['param']) - .then((result) => { - expect(ws.encodeObject).to.have.been.calledWith('test_encoding', ['param']); - }); - }); - - it('decodes responses', () => { - ws = createWs([{ - id: 1, - method: 'test_encoding', - reply: { - result: 'ok' - } - }]); - - return ws - .send('test_encoding', ['param']) - .then((result) => { - expect(ws.decodeResponse).to.have.been.calledWith({ - id: 1, - jsonrpc: '2.0', - result: 'ok' - }); - }); - }); - - it('passes the body through correctly', () => { - ws = createWs([{ - id: 1, - method: 'test_body', - reply: { - result: 'ok' - } - }]); - - return ws - .send('test_body', ['param']) - .then((result) => { - expect(mock.body['test_body']).to.deep.equal({ - id: 1, - jsonrpc: '2.0', - method: 'test_body', - params: ['param'] - }); - }); - }); - - it('throws error when !response.ok', () => { - ws = createWs([{ - id: 1, - error: { - code: 666, - message: 'error' - } - }]); - - return ws - .send('test_error', []) - .catch((error) => { - expect(error).to.match(/\[666\]: error/); - }); - }); - }); -}); diff --git a/test/mocha.config.js b/test/mocha.config.js index ea8fc2b2a499..74d56fb9bd0a 100644 --- a/test/mocha.config.js +++ b/test/mocha.config.js @@ -1,7 +1,5 @@ // ISC, Copyright 2017 Jaco Greeff -require('../src/polyfill'); - const chai = require('chai'); const sinonChai = require('sinon-chai'); diff --git a/test/mockHttp.js b/test/mockHttp.js deleted file mode 100644 index f33a37bf9989..000000000000 --- a/test/mockHttp.js +++ /dev/null @@ -1,31 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -const nock = require('nock'); - -const TEST_HTTP_URL = 'http://localhost:9944'; - -function mockHttp (requests) { - nock.cleanAll(); - - return requests.reduce((scope, request, index) => { - return scope - .post('/') - .reply(request.code || 200, (uri, body) => { - if (body.method !== request.method) { - return { - error: `Invalid method ${body.method}, expected ${request.method}` - }; - } - - scope.body = scope.body || {}; - scope.body[request.method] = body; - - return Object.assign({ id: body.id, jsonrpc: '2.0' }, request.reply || {}); - }); - }, nock(TEST_HTTP_URL)); -} - -module.exports = { - TEST_HTTP_URL, - mockHttp -}; diff --git a/test/mockWs.js b/test/mockWs.js deleted file mode 100644 index 6ca9b7618ac0..000000000000 --- a/test/mockWs.js +++ /dev/null @@ -1,55 +0,0 @@ -// ISC, Copyright 2017 Jaco Greeff - -const { Server } = require('mock-socket'); - -const TEST_WS_URL = 'ws://localhost:9955'; - -let server; - -function mockWs (requests) { - server = new Server(TEST_WS_URL); - let requestCount = 0; - - server.on('message', (body) => { - try { - const request = requests[requestCount]; - const result = request.reply; - const response = request.error - ? { - id: request.id, - jsonrpc: '2.0', - error: { - code: request.error.code, - message: request.error.message - } - } - : { - id: request.id, - jsonrpc: '2.0', - result: result.result - }; - - scope.body[request.method] = body; - requestCount++; - - server.send(JSON.stringify(response)); - } catch (error) { - console.error('mock:onmessage', body, error); - } - }); - - const scope = { - body: {}, - requests: 0, - server, - done: () => server.stop(), - isDone: () => requestCount === requests.length - }; - - return scope; -} - -module.exports = { - TEST_WS_URL, - mockWs -};