@tchain/tcabci-read-js-client 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,6 +18,9 @@ $ npm i @tchain/tcabci-read-js-client
18
18
  const tcAbciClient = require("@tchain/tcabci-read-js-client")
19
19
 
20
20
  const client = new tcAbciClient()
21
+ // OR
22
+ const client = new tcAbciClient(['https://read-node-01.transferchain.io',
23
+ 'wss://read-node-01.transferchain.io/ws'])
21
24
 
22
25
  client.Start()
23
26
 
package/client.js CHANGED
@@ -19,14 +19,21 @@ class TCAbciClient {
19
19
  #subscribedAddresses = []
20
20
  #connected = false
21
21
  #version = "v0.1.0"
22
+ #retrieverCount = 0
22
23
  errorCb = null
23
24
  listenCb = null
24
25
  #ws = null
25
26
  #httpClient = null
27
+ #readNodeAddress = READ_NODE_ADDRESS
28
+ #readNodeWSAddress = READ_NODE_WS_ADDRESS
26
29
 
27
- constructor() {
30
+ constructor(readNodeAddresses = []) {
31
+ if (readNodeAddresses.length === 2) {
32
+ this.#readNodeAddress = readNodeAddresses[0]
33
+ this.#readNodeWSAddress = readNodeAddresses[1]
34
+ }
28
35
  this.#httpClient = axios.create({
29
- baseURL: READ_NODE_ADDRESS,
36
+ baseURL: this.#readNodeAddress,
30
37
  timeout: 10000,
31
38
  headers: {'Client': `tcabaci-read-js-client${this.#version}`}
32
39
  })
@@ -39,34 +46,7 @@ class TCAbciClient {
39
46
  this.listenCb = cb
40
47
  }
41
48
  Start() {
42
- return new Promise((resolve, reject) => {
43
- if (this.#getConnected()) {
44
- reject(ALREADY_CONNECTED)
45
- }
46
- const wsClient = this.#wsClient()
47
- this.#ws = new wsClient(READ_NODE_WS_ADDRESS)
48
-
49
- this.#ws.onerror = (event) => {
50
- this.#setConnected(false)
51
- if (this.errorCb) {
52
- this.errorCb(event.error)
53
- }
54
- reject(event)
55
- }
56
- this.#ws.onopen = (event) => {
57
- this.#setConnected(true)
58
- resolve(event)
59
- }
60
- this.#ws.onmessage = (message) => {
61
- if (message.data === "OK" && message.data.length < 10) {
62
- return { status: message.data }
63
- }
64
- if (this.listenCb) {
65
- this.listenCb(toJSON(message.data))
66
- }
67
- }
68
-
69
- })
49
+ return this.#connect()
70
50
  }
71
51
  Stop() {
72
52
  if (!this.#getConnected()) {
@@ -168,6 +148,52 @@ class TCAbciClient {
168
148
  .catch(e => { throw TRANSACTION_NOT_BROADCAST })
169
149
  }
170
150
 
151
+ Disconnect(code = 1000) {
152
+ if (this.#getConnected()) {
153
+ this.#ws.close(code)
154
+ }
155
+ }
156
+
157
+ #connect() {
158
+ return new Promise((resolve, reject) => {
159
+ if (this.#getConnected()) {
160
+ reject(ALREADY_CONNECTED)
161
+ }
162
+ const wsClient = this.#wsClient()
163
+ this.#ws = new wsClient(this.#readNodeWSAddress)
164
+
165
+ this.#ws.onerror = (event) => {
166
+ this.#setConnected(false)
167
+ if (this.errorCb) {
168
+ this.errorCb(event.error)
169
+ }
170
+ reject(event)
171
+ }
172
+ this.#ws.onopen = (event) => {
173
+ this.#setConnected(true)
174
+ this.#retrieverCount = 0
175
+ resolve(event)
176
+ }
177
+ this.#ws.onmessage = (message) => {
178
+ if (message.data === "OK" && message.data.length < 10) {
179
+ return { status: message.data }
180
+ }
181
+ if (this.listenCb) {
182
+ this.listenCb(toJSON(message.data))
183
+ }
184
+ }
185
+ this.#ws.onclose = (event) => {
186
+ this.#setConnected(false)
187
+ if (event.code !== 1000 && this.#retrieverCount <= 10) {
188
+ this.#retrieverCount++
189
+ setTimeout(() => {
190
+ this.#connect().catch(() => {})
191
+ }, 3000)
192
+ }
193
+ }
194
+ })
195
+ }
196
+
171
197
  #wsClient() {
172
198
  if (typeof window !== "undefined") {
173
199
  return window.WebSocket
package/client_test.js CHANGED
@@ -1,11 +1,25 @@
1
1
  const tcAbciClient = require("./client")
2
2
  const unitJS = require("unit.js")
3
- const {INVALID_ARGUMENTS, INVALID_URL, TRANSACTION_TYPE_NOT_VALID} = require("./errors")
4
- const { TX_TYPE } = require("./constants")
3
+ const {INVALID_ARGUMENTS, INVALID_URL, TRANSACTION_TYPE_NOT_VALID, TRANSACTION_NOT_BROADCAST} = require("./errors")
4
+ const { TX_TYPE, READ_NODE_ADDRESS, READ_NODE_WS_ADDRESS} = require("./constants")
5
5
  const {randomString} = require("./util")
6
6
 
7
7
  describe("TCAbciClient TESTS", () => {
8
8
 
9
+ it('should start with valid parameters and read node addresses',(done) => {
10
+ const client = new tcAbciClient([READ_NODE_ADDRESS, READ_NODE_WS_ADDRESS])
11
+ client.Start()
12
+ .then(() => {
13
+ const { connected, subscribed } = client.Status()
14
+ unitJS.assert.equal(connected, true)
15
+ unitJS.assert.equal(subscribed, false)
16
+ done()
17
+ })
18
+ .catch(err => {
19
+ done(err)
20
+ })
21
+ })
22
+
9
23
  it('should start with valid parameters',(done) => {
10
24
  const client = new tcAbciClient()
11
25
  client.Start()
@@ -20,6 +34,33 @@ describe("TCAbciClient TESTS", () => {
20
34
  })
21
35
  })
22
36
 
37
+ it('should reconnect with start and valid parameters',(done) => {
38
+ const client = new tcAbciClient()
39
+ client.Start()
40
+ .then(() => {
41
+ const { connected, subscribed } = client.Status()
42
+ unitJS.assert.equal(connected, true)
43
+ unitJS.assert.equal(subscribed, false)
44
+
45
+ client.Disconnect(1003)
46
+ setTimeout(() => {
47
+ const { connected: c2, subscribed: b2} = client.Status()
48
+ unitJS.assert.equal(c2, false)
49
+ unitJS.assert.equal(b2, false)
50
+
51
+ setTimeout(() => {
52
+ const { connected, subscribed } = client.Status()
53
+ unitJS.assert.equal(connected, true)
54
+ unitJS.assert.equal(subscribed, false)
55
+ done()
56
+ }, 3100)
57
+ }, 1000)
58
+ })
59
+ .catch(err => {
60
+ done(err)
61
+ })
62
+ })
63
+
23
64
  it('should subscribe with valid parameters',(done) => {
24
65
  const client = new tcAbciClient()
25
66
  client.Start()
@@ -121,7 +162,8 @@ describe("TCAbciClient TESTS", () => {
121
162
  done()
122
163
  })
123
164
  .catch(err => {
124
- done(err)
165
+ unitJS.assert.equal(TRANSACTION_NOT_BROADCAST, err)
166
+ done()
125
167
  })
126
168
  })
127
169
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tchain/tcabci-read-js-client",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "TransferChain Fastest Read Network WebSocket Client",
5
5
  "main": "client.js",
6
6
  "type": "commonjs",