@tchain/tcabci-read-js-client 1.0.3 → 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,26 +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 = this.#listen
61
- })
49
+ return this.#connect()
62
50
  }
63
51
  Stop() {
64
52
  if (!this.#getConnected()) {
@@ -160,6 +148,52 @@ class TCAbciClient {
160
148
  .catch(e => { throw TRANSACTION_NOT_BROADCAST })
161
149
  }
162
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
+
163
197
  #wsClient() {
164
198
  if (typeof window !== "undefined") {
165
199
  return window.WebSocket
@@ -167,15 +201,6 @@ class TCAbciClient {
167
201
  const { WebSocket } = require("ws")
168
202
  return WebSocket
169
203
  }
170
- #listen(message) {
171
- if (message.data === "OK" && message.data.length < 10) {
172
- return { status: message.data }
173
- }
174
- const txData = toJSON(message.data)
175
- if (this.listenCb) {
176
- this.listenCb(new Transaction(txData).ToJSONString())
177
- }
178
- }
179
204
  #getConnected() {
180
205
  return this.#connected
181
206
  }
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.3",
3
+ "version": "1.0.5",
4
4
  "description": "TransferChain Fastest Read Network WebSocket Client",
5
5
  "main": "client.js",
6
6
  "type": "commonjs",