@tchain/tcabci-read-js-client 2.5.6 → 2.5.8

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/bytea.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare class Bytea {
2
+ constructor(bytes: Uint8Array, status: number)
3
+ ToJSON(): string
4
+ }
package/client.d.ts ADDED
@@ -0,0 +1,112 @@
1
+ import { TXType } from './transaction'
2
+
3
+ declare class TCaBCIClient {
4
+ constructor(
5
+ readNodeAddresses: string[],
6
+ wsLibrary: WebSocket,
7
+ chainName: string,
8
+ chainVersion: string,
9
+ )
10
+
11
+ SetDebug(debug: boolean): TCaBCIClient
12
+ Socket(): WebSocket
13
+ SetSuccessCallback(cb: (event: Event) => void): TCaBCIClient
14
+ SetErrorCallback(cb: (event: Event) => void): TCaBCIClient
15
+ SetCloseCallback(cb: (event: Event) => void): TCaBCIClient
16
+ SetListenCallback(cb: (event: Event) => void): TCaBCIClient
17
+ Start(): Awaited<TCaBCIClient>
18
+ Stop(): Awaited<TCaBCIClient>
19
+ Status(): {
20
+ chain_name: string
21
+ chain_version: string
22
+ connected: boolean
23
+ subscribed: boolean
24
+ }
25
+ Subscribe(
26
+ addresses: string[],
27
+ signedData: Record<string, string>,
28
+ txTypes?: TXType[],
29
+ ): TCaBCIClient
30
+ Unsubscribe(): TCaBCIClient
31
+ LastBlock(
32
+ chainName?: null,
33
+ chainVersion?: null,
34
+ ): { blocks: Record<string, any>; total_count: number }
35
+ Tx(id: string, signature: string): Promise<{ tx: Record<string, any> }>
36
+ TxSummary({
37
+ recipientAddrs,
38
+ senderAddrs,
39
+ signedData,
40
+ typ,
41
+ types,
42
+ chainName,
43
+ chainVersion,
44
+ }: Record<string, any>): Promise<{
45
+ chain_name: string
46
+ chain_version: string
47
+ first_block_height: number
48
+ first_transaction: Record<string, any>
49
+ last_block_height: number
50
+ last_transaction: Record<string, any>
51
+ total_count: number
52
+ }>
53
+ TxSearch({
54
+ heightOperator,
55
+ height,
56
+ maxHeight,
57
+ lastOrder,
58
+ recipientAddrs,
59
+ senderAddrs,
60
+ signedData,
61
+ hashes,
62
+ typ,
63
+ types,
64
+ limit,
65
+ offset,
66
+ orderField,
67
+ orderBy,
68
+ chainName,
69
+ chainVersion,
70
+ }): Promise<{ txs: Record<string, any>[]; total_count: number }>
71
+ BroadcastCommit({
72
+ id,
73
+ version,
74
+ type,
75
+ data,
76
+ sender_addr,
77
+ recipient_addr,
78
+ sign,
79
+ fee,
80
+ }): Promise<{ data: Record<string, any> }>
81
+ BroadcastSync({
82
+ id,
83
+ version,
84
+ type,
85
+ data,
86
+ sender_addr,
87
+ recipient_addr,
88
+ sign,
89
+ fee,
90
+ }): Promise<{ data: Record<string, any> }>
91
+ Broadcast({
92
+ id,
93
+ version,
94
+ type,
95
+ data,
96
+ sender_addr,
97
+ recipient_addr,
98
+ sign,
99
+ fee,
100
+ }): Promise<{ data: Record<string, any> }>
101
+ Bulk(
102
+ addresses: string[],
103
+ signedData: Record<string, any>,
104
+ maxHeight?: number,
105
+ chainName?: string,
106
+ chainVersion?: string,
107
+ ): Promise<{ data: Record<string, any> }>
108
+ Disconnect(code?: number): Awaited<TCaBCIClient>
109
+ Reconnect(code?: number): Awaited<TCaBCIClient>
110
+ }
111
+
112
+ export = TCaBCIClient
package/client.js CHANGED
@@ -11,16 +11,16 @@ import {
11
11
  TRANSACTION_TYPE_NOT_VALID,
12
12
  } from './errors.js'
13
13
  import {
14
- MESSAGE_TYPE,
14
+ SUBSCRIBEMessage,
15
+ UNSUBSCRIBEMessage,
15
16
  READ_NODE_ADDRESS,
16
17
  READ_NODE_WS_ADDRESS,
17
18
  } from './constants.js'
18
19
  import Message from './message.js'
19
- import { isJSON, toJSON } from './util.js'
20
+ import { isJSON, fromJSON } from './util.js'
20
21
  import { Options } from './websocketOptions.js'
21
22
  import { TWebSocket } from './websocket.js'
22
- import { TX_TYPE, TX_TYPE_LIST } from './transaction.js'
23
- let https
23
+ import { TX_TYPE_LIST } from './transaction.js'
24
24
 
25
25
  /**
26
26
  * @callback successCallback
@@ -49,7 +49,7 @@ export default class TCaBCIClient {
49
49
  _connected = false
50
50
  _chainName = 'transferchain'
51
51
  _chainVersion = 'v1'
52
- _version = `v2.5.6`
52
+ _version = `v2.5.8`
53
53
  /**
54
54
  * @type {?successCallback}
55
55
  */
@@ -111,25 +111,9 @@ export default class TCaBCIClient {
111
111
  if (chainVersion) this._chainVersion = chainVersion
112
112
  }
113
113
 
114
- /**
115
- * @param {string} uri
116
- * @param {RequestInit} req
117
- * @return {Promise<any>}
118
- */
119
- httpClient(uri, req) {
120
- req.cache = 'no-cache'
121
- req.headers = {
122
- Client: `tcabaci-read-js-client-${this._version}`,
123
- }
124
- req.priority = 'high'
125
-
126
- return fetch(this._readNodeAddress + uri, req).then((response) =>
127
- this.handleRestResponse(response),
128
- )
129
- }
130
-
131
114
  SetDebug(debug) {
132
115
  this._options.setDebug(debug)
116
+ return this
133
117
  }
134
118
 
135
119
  Socket() {
@@ -138,7 +122,7 @@ export default class TCaBCIClient {
138
122
 
139
123
  /**
140
124
  * @param {successCallback} cb
141
- * @constructor
125
+ * @return {TCaBCIClient}
142
126
  */
143
127
  SetSuccessCallback(cb) {
144
128
  this._successCb = cb
@@ -148,7 +132,7 @@ export default class TCaBCIClient {
148
132
 
149
133
  /**
150
134
  * @param {errorCallback} cb
151
- * @constructor
135
+ * @return {TCaBCIClient}
152
136
  */
153
137
  SetErrorCallback(cb) {
154
138
  this._errorCb = cb
@@ -158,7 +142,7 @@ export default class TCaBCIClient {
158
142
 
159
143
  /**
160
144
  * @param {closeCallback} cb
161
- * @constructor
145
+ * @return {TCaBCIClient}
162
146
  */
163
147
  SetCloseCallback(cb) {
164
148
  this._closeCb = cb
@@ -168,7 +152,7 @@ export default class TCaBCIClient {
168
152
 
169
153
  /**
170
154
  * @param {listenCallback} cb
171
- * @constructor
155
+ * @return {TCaBCIClient}
172
156
  */
173
157
  SetListenCallback(cb) {
174
158
  this._listenCb = cb
@@ -195,6 +179,15 @@ export default class TCaBCIClient {
195
179
  return this
196
180
  }
197
181
 
182
+ Status() {
183
+ return {
184
+ chain_name: this._chainName,
185
+ chain_version: this._chainVersion,
186
+ connected: this._connected,
187
+ subscribed: this._subscribed,
188
+ }
189
+ }
190
+
198
191
  /**
199
192
  * @param {Array<string>} addresses
200
193
  * @param {Object} signedData
@@ -216,7 +209,7 @@ export default class TCaBCIClient {
216
209
  throw new Error(INVALID_ARGUMENT_WITH_CS('txTypes'))
217
210
 
218
211
  for (let i = 0; i < txTypes.length; i++) {
219
- if (!TX_TYPE[txTypes[i]])
212
+ if (!TX_TYPE_LIST.includes(txTypes[i]))
220
213
  throw new Error(INVALID_ARGUMENT_WITH_CS('txType ', txTypes[i]))
221
214
  }
222
215
  }
@@ -244,13 +237,7 @@ export default class TCaBCIClient {
244
237
  sdata = this.getSubscribedSignedData()
245
238
  }
246
239
 
247
- const message = new Message(
248
- true,
249
- MESSAGE_TYPE.SUBSCRIBE,
250
- addrs,
251
- sdata,
252
- txTypes,
253
- )
240
+ const message = new Message(true, SUBSCRIBEMessage, addrs, sdata, txTypes)
254
241
 
255
242
  this._ws.send(message.ToJSON())
256
243
  this.setSubscribeAddresses(addrs, true)
@@ -260,6 +247,9 @@ export default class TCaBCIClient {
260
247
  return this
261
248
  }
262
249
 
250
+ /**
251
+ * @return {TCaBCIClient}
252
+ */
263
253
  Unsubscribe() {
264
254
  if (!this.getSubscribed()) {
265
255
  throw new Error(NOT_SUBSCRIBED)
@@ -267,22 +257,24 @@ export default class TCaBCIClient {
267
257
  this._ws.send(
268
258
  new Message(
269
259
  true,
270
- MESSAGE_TYPE.UNSUBSCRIBE,
260
+ UNSUBSCRIBEMessage,
271
261
  this.getSubscribeAddresses(),
272
262
  ).ToJSON(),
273
263
  )
274
264
  this.setSubscribed(false)
275
265
  this.setSubscribeAddresses([])
276
266
  this.setSubscribeSignedData({})
267
+
268
+ return this
277
269
  }
278
270
 
279
271
  /**
280
272
  * @param {?string} chainName
281
273
  * @param {?string} chainVersion
282
- * @return {Promise<any>}
274
+ * @return {Promise<{blocks: Object<string, *>, total_count: number}>}
283
275
  */
284
276
  LastBlock(chainName = null, chainVersion = null) {
285
- return this.httpClient(
277
+ return this._httpClient(
286
278
  `/v1/blocks?chain_name=${chainName ?? this._chainName}&chain_version=${chainVersion ?? this._chainVersion}&limit=1&offset=0`,
287
279
  {
288
280
  method: 'GET',
@@ -291,7 +283,7 @@ export default class TCaBCIClient {
291
283
  .then((res) => {
292
284
  return { blocks: res.data, total_count: res.total_count }
293
285
  })
294
- .catch((e) => this.handleRestError(e, new Error(BLOCK_NOT_FOUND)))
286
+ .catch((e) => this._handleRestError(e, new Error(BLOCK_NOT_FOUND)))
295
287
  }
296
288
 
297
289
  /**
@@ -304,14 +296,14 @@ export default class TCaBCIClient {
304
296
  return Promise.reject(new Error(INVALID_ARGUMENTS))
305
297
  }
306
298
 
307
- return this.httpClient(`/v1/tx/${id}`, {
299
+ return this._httpClient(`/v1/tx/${id}`, {
308
300
  method: 'GET',
309
301
  headers: { 'X-Signature': signature },
310
302
  })
311
303
  .then((res) => {
312
304
  return { tx: res.data }
313
305
  })
314
- .catch((e) => this.handleRestError(e))
306
+ .catch((e) => this._handleRestError(e))
315
307
  }
316
308
 
317
309
  /**
@@ -337,7 +329,7 @@ export default class TCaBCIClient {
337
329
  return Promise.reject(new Error(INVALID_ARGUMENTS))
338
330
  }
339
331
 
340
- return this.httpClient('/v1/tx_summary', {
332
+ return this._httpClient('/v1/tx_summary', {
341
333
  method: 'POST',
342
334
  body: JSON.stringify({
343
335
  chain_name: chainName ?? this._chainName,
@@ -359,7 +351,7 @@ export default class TCaBCIClient {
359
351
  total_count: res.total_count,
360
352
  }
361
353
  })
362
- .catch((e) => this.handleRestError(e))
354
+ .catch((e) => this._handleRestError(e))
363
355
  }
364
356
 
365
357
  /**
@@ -399,7 +391,7 @@ export default class TCaBCIClient {
399
391
  chainName = null,
400
392
  chainVersion = null,
401
393
  }) {
402
- return this.httpClient('/v1/tx_search/p', {
394
+ return this._httpClient('/v1/tx_search/p', {
403
395
  method: 'POST',
404
396
  body: JSON.stringify({
405
397
  chain_name: chainName ?? this._chainName,
@@ -424,16 +416,7 @@ export default class TCaBCIClient {
424
416
  total_count: res.total_count,
425
417
  }
426
418
  })
427
- .catch((e) => this.handleRestError(e))
428
- }
429
-
430
- Status() {
431
- return {
432
- chain_name: this._chainName,
433
- chain_version: this._chainVersion,
434
- connected: this._connected,
435
- subscribed: this._subscribed,
436
- }
419
+ .catch((e) => this._handleRestError(e))
437
420
  }
438
421
 
439
422
  /**
@@ -556,7 +539,7 @@ export default class TCaBCIClient {
556
539
  throw new Error(TRANSACTION_TYPE_NOT_VALID)
557
540
  }
558
541
 
559
- return this.httpClient(
542
+ return this._httpClient(
560
543
  commit ? '/v1/tx/commit' : sync ? '/v1/tx/sync' : '/v1/tx',
561
544
  {
562
545
  method: 'POST',
@@ -576,7 +559,7 @@ export default class TCaBCIClient {
576
559
  return { data: res.data }
577
560
  })
578
561
  .catch((e) =>
579
- this.handleRestError(e, { 400: new Error(TRANSACTION_NOT_BROADCAST) }),
562
+ this._handleRestError(e, { 400: new Error(TRANSACTION_NOT_BROADCAST) }),
580
563
  )
581
564
  }
582
565
 
@@ -596,7 +579,7 @@ export default class TCaBCIClient {
596
579
  chainName = null,
597
580
  chainVersion = null,
598
581
  ) {
599
- return this.httpClient('/v1/bulk_tx', {
582
+ return this._httpClient('/v1/bulk_tx', {
600
583
  method: 'POST',
601
584
  body: JSON.stringify({
602
585
  chain_name: chainName ?? this._chainName,
@@ -608,6 +591,10 @@ export default class TCaBCIClient {
608
591
  })
609
592
  }
610
593
 
594
+ /**
595
+ * @param {?number} code
596
+ * @return {Promise<TCaBCIClient>}
597
+ */
611
598
  async Disconnect(code = 1000) {
612
599
  if (this.getConnected()) {
613
600
  await this._ws.disconnect(code)
@@ -615,6 +602,8 @@ export default class TCaBCIClient {
615
602
  this.setConnected(false)
616
603
  this.setSubscribed(false)
617
604
  }
605
+
606
+ return this
618
607
  }
619
608
 
620
609
  async Reconnect(code = 1000) {
@@ -672,7 +661,7 @@ export default class TCaBCIClient {
672
661
  }
673
662
 
674
663
  this.callListenCallback(
675
- !isJSON(message.data) ? message.data : toJSON(message.data),
664
+ !isJSON(message.data) ? message.data : fromJSON(message.data),
676
665
  )
677
666
  })
678
667
 
@@ -737,25 +726,44 @@ export default class TCaBCIClient {
737
726
  return this
738
727
  }
739
728
 
729
+ /**
730
+ * @param {string} uri
731
+ * @param {RequestInit} req
732
+ * @return {Promise<any>}
733
+ */
734
+ _httpClient(uri, req) {
735
+ req.cache = 'no-cache'
736
+ req.headers = {
737
+ Client: `tcabaci-read-js-client-${this._version}`,
738
+ }
739
+ req.priority = 'high'
740
+
741
+ return fetch(this._readNodeAddress + uri, req).then((response) =>
742
+ this._handleRestResponse(response),
743
+ )
744
+ }
745
+
740
746
  /**
741
747
  * @param {Response} response
742
748
  * @return {Promise<*>}
743
749
  */
744
- async handleRestResponse(response) {
750
+ async _handleRestResponse(response) {
745
751
  if (response.status >= 200 && response.status < 400) {
746
752
  return response.json()
747
753
  }
748
754
 
749
- let data = await response.text()
750
-
751
755
  try {
752
- data = JSON.parse(data)
756
+ const data = JSON.parse(await response.text())
753
757
 
754
758
  return Promise.reject(
755
- new FetchError(data.message).setCode(response.status).setResponse(data),
759
+ new FetchError(data.message)
760
+ .setStatus(response.status)
761
+ .setResponse(data),
756
762
  )
757
763
  } catch (e) {
758
- return Promise.reject(new FetchError(response.statusText))
764
+ return Promise.reject(
765
+ new FetchError(response.statusText).setOriginError(e),
766
+ )
759
767
  }
760
768
  }
761
769
 
@@ -764,7 +772,7 @@ export default class TCaBCIClient {
764
772
  * @param {?Object|Error} custom
765
773
  * @throws Error
766
774
  */
767
- handleRestError(err, custom = null) {
775
+ _handleRestError(err, custom = null) {
768
776
  const code = err.code
769
777
 
770
778
  if (custom && typeof custom === 'object' && custom[code]) {
package/constants.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export declare type MessageType = string
2
+
3
+ export declare const SUBSCRIBEMessage: MessageType,
4
+ UNSUBSCRIBEMessage: MessageType
5
+
6
+ export declare const CHARACTERS: string,
7
+ READ_NODE_ADDRESS: string,
8
+ READ_NODE_WS_ADDRESS: string
package/constants.js CHANGED
@@ -1,7 +1,5 @@
1
- export const MESSAGE_TYPE = {
2
- SUBSCRIBE: 'subscribe',
3
- UNSUBSCRIBE: 'unsubscribe',
4
- },
1
+ export const SUBSCRIBEMessage = 'subscribe',
2
+ UNSUBSCRIBEMessage = 'unsubscribe',
5
3
  CHARACTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
6
4
  READ_NODE_ADDRESS = 'https://read-node-01.transferchain.io',
7
5
  READ_NODE_WS_ADDRESS = 'wss://read-node-01.transferchain.io/ws'
package/errors.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ export declare type ErrMessage = string
2
+
3
+ export declare const ALREADY_CONNECTED: ErrMessage,
4
+ NOT_CONNECTED: ErrMessage,
5
+ ERR_NETWORK: ErrMessage,
6
+ INVALID_ARGUMENTS: ErrMessage,
7
+ INVALID_ARGUMENT_WITH_CS: (val: string) => ErrMessage,
8
+ NOT_SUBSCRIBED: ErrMessage,
9
+ ALREADY_SUBSCRIBED: ErrMessage,
10
+ ADDRESSES_IS_EMPTY: ErrMessage,
11
+ BLOCK_NOT_FOUND: ErrMessage,
12
+ TRANSACTION_TYPE_NOT_VALID: ErrMessage,
13
+ TRANSACTION_NOT_BROADCAST: ErrMessage
14
+
15
+ export declare class FetchError extends Error {
16
+ code: number
17
+ response: Record<string, any>
18
+ originError?: Error
19
+ constructor(message: string)
20
+ setStatus(status: number): FetchError
21
+ setCode(code: number): FetchError
22
+ setResponse(data: Record<string, any>): FetchError
23
+ setOriginError(error: Error): FetchError
24
+ }
package/errors.js CHANGED
@@ -13,8 +13,9 @@ export const ALREADY_CONNECTED = 'Already connected',
13
13
  TRANSACTION_NOT_BROADCAST = 'Transaction can not be broadcast'
14
14
 
15
15
  export class FetchError extends Error {
16
- code = -1
17
- response = {}
16
+ status = -1
17
+ response
18
+ originError
18
19
 
19
20
  /**
20
21
  * @param {string} message
@@ -24,18 +25,35 @@ export class FetchError extends Error {
24
25
  this.name = 'FetchError'
25
26
  }
26
27
 
28
+ /**
29
+ * @param {number} status
30
+ * @return {FetchError}
31
+ */
32
+ setStatus(status) {
33
+ this.status = status
34
+
35
+ return this
36
+ }
37
+
38
+ /**
39
+ * @deprecated use .setStatus/1
40
+ * @param {number} code
41
+ * @return {FetchError}
42
+ */
27
43
  setCode(code) {
28
- this.code = code
44
+ this.status = code
29
45
 
30
46
  return this
31
47
  }
32
48
 
33
49
  setResponse(data) {
34
- this.response = {
35
- status: this.code,
36
- message: this.message,
37
- data: data,
38
- }
50
+ this.response = data
51
+
52
+ return this
53
+ }
54
+
55
+ setOriginError(error) {
56
+ this.originError = error
39
57
 
40
58
  return this
41
59
  }
package/errors_test.js CHANGED
@@ -3,7 +3,7 @@ import unitJS from 'unit.js'
3
3
 
4
4
  describe('Errors', () => {
5
5
  it('FetchError', () => {
6
- const err = new FetchError('err1').setCode(1)
6
+ const err = new FetchError('err1').setStatus(1)
7
7
 
8
8
  unitJS.assert.equal(err.message, 'err1')
9
9
  unitJS.assert.equal(err.code, 1)
@@ -0,0 +1,45 @@
1
+ import globals from 'globals'
2
+ import pluginJs from '@eslint/js'
3
+ import pluginPrettier from 'eslint-plugin-prettier/recommended'
4
+
5
+ export default [
6
+ {
7
+ languageOptions: {
8
+ globals: {
9
+ ...globals.browser,
10
+ process: 'readonly',
11
+ global: 'readonly',
12
+ },
13
+ },
14
+ },
15
+ pluginJs.configs.recommended,
16
+ {
17
+ ignores: ['.nyc*', 'node_modules/*', 'eslint*', '*_test.js'],
18
+ },
19
+ {
20
+ rules: {
21
+ 'no-console': 'error',
22
+ 'no-debugger': 'error',
23
+ 'no-extra-boolean-cast': 'off',
24
+ 'no-unused-vars': [
25
+ 'error',
26
+ {
27
+ argsIgnorePattern: '^_',
28
+ varsIgnorePattern: '^_',
29
+ caughtErrorsIgnorePattern: '^_',
30
+ },
31
+ ],
32
+ indent: [
33
+ 'error',
34
+ 2,
35
+ {
36
+ SwitchCase: 1,
37
+ MemberExpression: 1,
38
+ ImportDeclaration: 1,
39
+ // VariableDeclarator: { var: 2, let: 2, const: 3 },
40
+ },
41
+ ],
42
+ },
43
+ },
44
+ pluginPrettier,
45
+ ]
package/message.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ import { MessageType } from './constants'
2
+ import { TXType } from './transaction'
3
+
4
+ export declare class Message {
5
+ constructor(
6
+ isWeb: boolean,
7
+ type: MessageType,
8
+ addrs: string[],
9
+ signedData?: Record<string, string>,
10
+ txTypes?: TXType[],
11
+ )
12
+ ToJSON(): string
13
+ }
package/message.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { INVALID_ARGUMENTS, INVALID_ARGUMENT_WITH_CS } from './errors.js'
2
- import { MESSAGE_TYPE } from './constants.js'
2
+ import { SUBSCRIBEMessage, UNSUBSCRIBEMessage } from './constants.js'
3
3
  import { TX_TYPE_LIST } from './transaction.js'
4
4
 
5
5
  export default class Message {
@@ -53,10 +53,7 @@ export default class Message {
53
53
  throw new Error(INVALID_ARGUMENT_WITH_CS('signedData'))
54
54
  }
55
55
 
56
- if (
57
- [MESSAGE_TYPE.SUBSCRIBE, MESSAGE_TYPE.UNSUBSCRIBE].indexOf(this._type) ===
58
- -1
59
- ) {
56
+ if (![SUBSCRIBEMessage, UNSUBSCRIBEMessage].includes(this._type)) {
60
57
  throw new Error(INVALID_ARGUMENTS)
61
58
  }
62
59
 
package/package.json CHANGED
@@ -1,15 +1,9 @@
1
1
  {
2
2
  "name": "@tchain/tcabci-read-js-client",
3
- "version": "2.5.6",
3
+ "version": "2.5.8",
4
4
  "description": "TransferChain Fastest Read Network WebSocket Client",
5
5
  "main": "client.js",
6
6
  "type": "module",
7
- "scripts": {
8
- "test": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha --require esm --timeout 5000",
9
- "test:all": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha --require esm --timeout 5000 '*_test.js'",
10
- "test:coverage": "export NODE_ENV=test || SET \"NODE_ENV=test\" && nyc --reporter=text mocha --require esm --timeout 5000",
11
- "format": "prettier --write \"**/*.{js,md,json}\" --ignore-path .gitignore"
12
- },
13
7
  "repository": {
14
8
  "type": "git",
15
9
  "url": "git+https://github.com/TransferChain/tcabci-read-js-client.git"
@@ -20,10 +14,13 @@
20
14
  "url": "https://github.com/TransferChain/tcabci-read-js-client/issues"
21
15
  },
22
16
  "homepage": "https://github.com/TransferChain/tcabci-read-js-client#readme",
23
- "packageManager": "pnpm@10.18.2",
24
17
  "devDependencies": {
25
- "@eslint/js": "^9.37.0",
18
+ "@eslint/js": "^9.38.0",
19
+ "@types/chai": "^5.2.3",
26
20
  "chai": "^6.2.0",
21
+ "eslint": "^9.38.0",
22
+ "eslint-config-prettier": "^10.1.8",
23
+ "eslint-plugin-prettier": "^5.5.4",
27
24
  "esm": "^3.2.25",
28
25
  "express": "^5.1.0",
29
26
  "globals": "^16.4.0",
@@ -35,5 +32,12 @@
35
32
  },
36
33
  "dependencies": {
37
34
  "reconnecting-websocket": "^4.4.0"
35
+ },
36
+ "scripts": {
37
+ "format": "prettier --write \"**/*.{js,md,json}\" --ignore-path .gitignore",
38
+ "lint:fix": "eslint --fix",
39
+ "test": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha --require esm --timeout 5000",
40
+ "test:all": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha --require esm --timeout 5000 '*_test.js'",
41
+ "test:coverage": "export NODE_ENV=test || SET \"NODE_ENV=test\" && nyc --reporter=text mocha --require esm --timeout 5000"
38
42
  }
39
- }
43
+ }
@@ -0,0 +1,83 @@
1
+ export declare type TXType = string;
2
+
3
+ export declare const TX_TYPE_MASTER: TXType,
4
+ TX_TYPE_ADDRESS: TXType,
5
+ TX_TYPE_ADDRESSES: TXType,
6
+ TX_TYPE_ACCOUNT: TXType,
7
+ TX_TYPE_ACCOUNT_INITIAL_TXS: TXType,
8
+ TX_TYPE_MESSAGE: TXType,
9
+ TX_TYPE_MESSAGE_SENT: TXType,
10
+ TX_TYPE_MESSAGE_THREAD_DELETE: TXType,
11
+ TX_TYPE_TRANSFER: TXType,
12
+ TX_TYPE_TRANSFER_CANCEL: TXType,
13
+ TX_TYPE_TRANSFER_SENT: TXType,
14
+ TX_TYPE_TRANSFER_RECEIVE_DELETE: TXType,
15
+ TX_TYPE_TRANSFER_INFO: TXType,
16
+ TX_TYPE_STORAGE: TXType,
17
+ TX_TYPE_STORAGE_DELETE: TXType,
18
+ TX_TYPE_BACKUP: TXType,
19
+ TX_TYPE_CONTACT: TXType,
20
+ TX_TYPE_FILE_VIRTUAL: TXType,
21
+ TX_TYPE_FILE_FS: TXType,
22
+ TX_TYPE_RFILE_VIRTUAL: TXType,
23
+ TX_TYPE_RFILE_FS: TXType,
24
+ TX_TYPE_DFILE_VIRTUAL: TXType,
25
+ TX_TYPE_DFILE_FS: TXType,
26
+ TX_TYPE_PFILE_VIRTUAL: TXType,
27
+ TX_TYPE_REQUEST: TXType,
28
+ TX_TYPE_REQUEST_IN: TXType,
29
+ TX_TYPE_REQUEST_UPLOAD: TXType,
30
+ TX_TYPE_REQUEST_CANCEL: TXType,
31
+ TX_TYPE_DATA_ROOM: TXType,
32
+ TX_TYPE_DATA_ROOMF: TXType,
33
+ TX_TYPE_DATA_ROOM_POLICY: TXType,
34
+ TX_TYPE_DATA_ROOM_DATA: TXType,
35
+ TX_TYPE_DATA_ROOM_DATA_DELETE: TXType,
36
+ TX_TYPE_DATA_ROOM_DATA_POLICY: TXType,
37
+ TX_TYPE_MULTI_DATA_ROOM: TXType,
38
+ TX_TYPE_MULTI_STORAGE: TXType,
39
+ TX_TYPE_MULTI_TRANSFER: TXType,
40
+ TX_TYPE_MULTI_TRANSFER_SENT: TXType,
41
+ TX_TYPE_MULTI_BACKUP: TXType,
42
+ TX_TYPE_MULTI_PASSWD: TXType,
43
+ TX_TYPE_PASSWD_DATA: TXType,
44
+ TX_TYPE_PASSWD_ROOM: TXType,
45
+ TX_TYPE_PASSWD_ROOMF: TXType,
46
+ TX_TYPE_PASSWD_ROOM_POLICY: TXType,
47
+ TX_TYPE_PASSWD_ROOM_DATA: TXType,
48
+ TX_TYPE_PASSWD_ROOM_DATA_DELETE: TXType,
49
+ TX_TYPE_PASSWD_ROOM_DATA_POLICY: TXType,
50
+ TX_TYPE_PASSWD_DATAV2: TXType,
51
+ TX_TYPE_PASSWD_DATAV2_POLICY: TXType,
52
+ TX_TYPE_COLLECTION: TXType,
53
+ TX_TYPE_COLLECTION_POLICY: TXType;
54
+
55
+ export declare const TX_TYPE_LIST: TXType[];
56
+
57
+ export declare class Transaction {
58
+ constructor(
59
+ id: string,
60
+ height: number,
61
+ version: number,
62
+ typ: TXType,
63
+ sender_addr: string,
64
+ recipient_addr: string,
65
+ data: string,
66
+ sign: string,
67
+ fee: number,
68
+ hash: string,
69
+ inserted_at: Date,
70
+ )
71
+ get ID(): string;
72
+ get Height(): number;
73
+ get Version(): number;
74
+ get Typ(): TXType;
75
+ get SenderAddr(): string;
76
+ get RecipientAddr(): string;
77
+ get Data(): string;
78
+ get Sign(): string;
79
+ get Fee(): number;
80
+ get Hash(): string;
81
+ get InsertedAt(): Date;
82
+ ToJSON(): string;
83
+ }
package/transaction.js CHANGED
@@ -51,62 +51,61 @@ export const TX_TYPE_MASTER = 'initial_storage',
51
51
  TX_TYPE_PASSWD_DATAV2_POLICY = 'pwdd_policy',
52
52
  TX_TYPE_COLLECTION = 'coll',
53
53
  TX_TYPE_COLLECTION_POLICY = 'coll_policy',
54
- TX_TYPE = {
55
- TX_TYPE_MASTER: TX_TYPE_MASTER,
56
- TX_TYPE_ADDRESS: TX_TYPE_ADDRESS,
57
- TX_TYPE_ADDRESSES: TX_TYPE_ADDRESSES,
58
- TX_TYPE_ACCOUNT: TX_TYPE_ACCOUNT,
59
- TX_TYPE_ACCOUNT_INITIAL_TXS: TX_TYPE_ACCOUNT_INITIAL_TXS,
60
- TX_TYPE_MESSAGE: TX_TYPE_MESSAGE,
61
- TX_TYPE_MESSAGE_SENT: TX_TYPE_MESSAGE_SENT,
62
- TX_TYPE_MESSAGE_THREAD_DELETE: TX_TYPE_MESSAGE_THREAD_DELETE,
63
- TX_TYPE_TRANSFER: TX_TYPE_TRANSFER,
64
- TX_TYPE_TRANSFER_CANCEL: TX_TYPE_TRANSFER_CANCEL,
65
- TX_TYPE_TRANSFER_SENT: TX_TYPE_TRANSFER_SENT,
66
- TX_TYPE_TRANSFER_RECEIVE_DELETE: TX_TYPE_TRANSFER_RECEIVE_DELETE,
67
- TX_TYPE_TRANSFER_INFO: TX_TYPE_TRANSFER_INFO,
68
- TX_TYPE_STORAGE: TX_TYPE_STORAGE,
69
- TX_TYPE_STORAGE_DELETE: TX_TYPE_STORAGE_DELETE,
70
- TX_TYPE_BACKUP: TX_TYPE_BACKUP,
71
- TX_TYPE_CONTACT: TX_TYPE_CONTACT,
72
- TX_TYPE_FILE_VIRTUAL: TX_TYPE_FILE_VIRTUAL,
73
- TX_TYPE_FILE_FS: TX_TYPE_FILE_FS,
74
- TX_TYPE_RFILE_VIRTUAL: TX_TYPE_RFILE_VIRTUAL,
75
- TX_TYPE_RFILE_FS: TX_TYPE_RFILE_FS,
76
- TX_TYPE_DFILE_VIRTUAL: TX_TYPE_DFILE_VIRTUAL,
77
- TX_TYPE_DFILE_FS: TX_TYPE_DFILE_FS,
78
- TX_TYPE_PFILE_VIRTUAL: TX_TYPE_PFILE_VIRTUAL,
79
- TX_TYPE_REQUEST: TX_TYPE_REQUEST,
80
- TX_TYPE_REQUEST_IN: TX_TYPE_REQUEST_IN,
81
- TX_TYPE_REQUEST_UPLOAD: TX_TYPE_REQUEST_UPLOAD,
82
- TX_TYPE_REQUEST_CANCEL: TX_TYPE_REQUEST_CANCEL,
83
- TX_TYPE_DATA_ROOM: TX_TYPE_DATA_ROOM,
84
- TX_TYPE_DATA_ROOMF: TX_TYPE_DATA_ROOMF,
85
- TX_TYPE_DATA_ROOM_POLICY: TX_TYPE_DATA_ROOM_POLICY,
86
- TX_TYPE_DATA_ROOM_DATA: TX_TYPE_DATA_ROOM_DATA,
87
- TX_TYPE_DATA_ROOM_DATA_DELETE: TX_TYPE_DATA_ROOM_DATA_DELETE,
88
- TX_TYPE_DATA_ROOM_DATA_POLICY: TX_TYPE_DATA_ROOM_DATA_POLICY,
89
- TX_TYPE_MULTI_DATA_ROOM: TX_TYPE_MULTI_DATA_ROOM,
90
- TX_TYPE_MULTI_STORAGE: TX_TYPE_MULTI_STORAGE,
91
- TX_TYPE_MULTI_TRANSFER: TX_TYPE_MULTI_TRANSFER,
92
- TX_TYPE_MULTI_TRANSFER_SENT: TX_TYPE_MULTI_TRANSFER_SENT,
93
- TX_TYPE_MULTI_BACKUP: TX_TYPE_MULTI_BACKUP,
94
- TX_TYPE_MULTI_PASSWD: TX_TYPE_MULTI_PASSWD,
95
- TX_TYPE_PASSWD_DATA: TX_TYPE_PASSWD_DATA,
96
- TX_TYPE_PASSWD_ROOM: TX_TYPE_PASSWD_ROOM,
97
- TX_TYPE_PASSWD_ROOMF: TX_TYPE_PASSWD_ROOMF,
98
- TX_TYPE_PASSWD_ROOM_POLICY: TX_TYPE_PASSWD_ROOM_POLICY,
99
- TX_TYPE_PASSWD_ROOM_DATA: TX_TYPE_PASSWD_ROOM_DATA,
100
- TX_TYPE_PASSWD_ROOM_DATA_DELETE: TX_TYPE_PASSWD_ROOM_DATA_DELETE,
101
- TX_TYPE_PASSWD_ROOM_DATA_POLICY: TX_TYPE_PASSWD_ROOM_DATA_POLICY,
102
- TX_TYPE_PASSWD_DATAV2: TX_TYPE_PASSWD_DATAV2,
103
- TX_TYPE_PASSWD_DATAV2_POLICY: TX_TYPE_PASSWD_DATAV2_POLICY,
104
- TX_TYPE_COLLECTION: TX_TYPE_COLLECTION,
105
- TX_TYPE_COLLECTION_POLICY: TX_TYPE_COLLECTION_POLICY,
106
- },
107
- TX_TYPE_LIST = Object.keys(TX_TYPE).map((k) => TX_TYPE[k])
108
-
109
- export default class Transaction {
54
+ TX_TYPE_LIST = [
55
+ TX_TYPE_MASTER,
56
+ TX_TYPE_ADDRESS,
57
+ TX_TYPE_ADDRESSES,
58
+ TX_TYPE_ACCOUNT,
59
+ TX_TYPE_ACCOUNT_INITIAL_TXS,
60
+ TX_TYPE_MESSAGE,
61
+ TX_TYPE_MESSAGE_SENT,
62
+ TX_TYPE_MESSAGE_THREAD_DELETE,
63
+ TX_TYPE_TRANSFER,
64
+ TX_TYPE_TRANSFER_CANCEL,
65
+ TX_TYPE_TRANSFER_SENT,
66
+ TX_TYPE_TRANSFER_RECEIVE_DELETE,
67
+ TX_TYPE_TRANSFER_INFO,
68
+ TX_TYPE_STORAGE,
69
+ TX_TYPE_STORAGE_DELETE,
70
+ TX_TYPE_BACKUP,
71
+ TX_TYPE_CONTACT,
72
+ TX_TYPE_FILE_VIRTUAL,
73
+ TX_TYPE_FILE_FS,
74
+ TX_TYPE_RFILE_VIRTUAL,
75
+ TX_TYPE_RFILE_FS,
76
+ TX_TYPE_DFILE_VIRTUAL,
77
+ TX_TYPE_DFILE_FS,
78
+ TX_TYPE_PFILE_VIRTUAL,
79
+ TX_TYPE_REQUEST,
80
+ TX_TYPE_REQUEST_IN,
81
+ TX_TYPE_REQUEST_UPLOAD,
82
+ TX_TYPE_REQUEST_CANCEL,
83
+ TX_TYPE_DATA_ROOM,
84
+ TX_TYPE_DATA_ROOMF,
85
+ TX_TYPE_DATA_ROOM_POLICY,
86
+ TX_TYPE_DATA_ROOM_DATA,
87
+ TX_TYPE_DATA_ROOM_DATA_DELETE,
88
+ TX_TYPE_DATA_ROOM_DATA_POLICY,
89
+ TX_TYPE_MULTI_DATA_ROOM,
90
+ TX_TYPE_MULTI_STORAGE,
91
+ TX_TYPE_MULTI_TRANSFER,
92
+ TX_TYPE_MULTI_TRANSFER_SENT,
93
+ TX_TYPE_MULTI_BACKUP,
94
+ TX_TYPE_MULTI_PASSWD,
95
+ TX_TYPE_PASSWD_DATA,
96
+ TX_TYPE_PASSWD_ROOM,
97
+ TX_TYPE_PASSWD_ROOMF,
98
+ TX_TYPE_PASSWD_ROOM_POLICY,
99
+ TX_TYPE_PASSWD_ROOM_DATA,
100
+ TX_TYPE_PASSWD_ROOM_DATA_DELETE,
101
+ TX_TYPE_PASSWD_ROOM_DATA_POLICY,
102
+ TX_TYPE_PASSWD_DATAV2,
103
+ TX_TYPE_PASSWD_DATAV2_POLICY,
104
+ TX_TYPE_COLLECTION,
105
+ TX_TYPE_COLLECTION_POLICY,
106
+ ]
107
+
108
+ export class Transaction {
110
109
  _id
111
110
  _height
112
111
  _version
@@ -236,7 +235,8 @@ export default class Transaction {
236
235
  throw new Error(INVALID_ARGUMENT_WITH_CS('version'))
237
236
  if (typeof this._typ !== 'string')
238
237
  throw new Error(INVALID_ARGUMENT_WITH_CS('typ'))
239
- if (!TX_TYPE[this._typ]) throw new Error(INVALID_ARGUMENT_WITH_CS('typ'))
238
+ if (!TX_TYPE_LIST.includes(this._typ))
239
+ throw new Error(INVALID_ARGUMENT_WITH_CS('typ'))
240
240
  if (typeof this._sender_addr !== 'string')
241
241
  throw new Error(INVALID_ARGUMENT_WITH_CS('senderAddr'))
242
242
  if (typeof this._recipient_addr !== 'string')
package/util.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function fromJSON(data: string): Record<string, any>;
2
+ export declare function isJSON(str: string): boolean;
package/util.js CHANGED
@@ -1,11 +1,11 @@
1
- export function toJSON(data) {
1
+ export function fromJSON(data) {
2
2
  return JSON.parse(data)
3
3
  }
4
4
 
5
5
  export function isJSON(str) {
6
6
  try {
7
7
  JSON.parse(str)
8
- } catch (e) {
8
+ } catch (_e) {
9
9
  return false
10
10
  }
11
11
 
package/websocket.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { Options } from './websocketOptions'
2
+
3
+ export declare const MaxListenerSize: number
4
+
5
+ export declare class TWebSocket {
6
+ constructor(options: Options)
7
+ get ready(): boolean
8
+ get openListeners(): (() => void)[]
9
+ get messageListeners(): (() => void)[]
10
+ get errorListeners(): (() => void)[]
11
+ get closeListeners(): (() => void)[]
12
+ connect(force?: boolean): Awaited<TWebSocket>
13
+ reconnect(code: number): Awaited<TWebSocket>
14
+ disconnect(code: number): Awaited<TWebSocket>
15
+ send(message: (string|ArrayBufferLike|Blob|ArrayBufferView)): void
16
+ addOpenListener(callback: (event: Event) => void): TWebSocket
17
+ removeOpenListener(callback: (event: Event) => void): TWebSocket
18
+ addMessageListener(callback: (event: Event) => void): TWebSocket
19
+ removeMessageListener(callback: (event: Event) => void): TWebSocket
20
+ addErrorListener(callback: (event: Event) => void): TWebSocket
21
+ removeErrorListener(callback: (event: Event) => void): TWebSocket
22
+ addCloseListener(callback: (event: Event) => void): TWebSocket
23
+ removeCloseListener(callback: (event: Event) => void): TWebSocket
24
+ }
package/websocket.js CHANGED
@@ -49,28 +49,28 @@ export class TWebSocket {
49
49
  }
50
50
 
51
51
  /**
52
- * @return {Array<string>}
52
+ * @return {Array<function>}
53
53
  */
54
54
  get openListeners() {
55
55
  return this._openCallbacks
56
56
  }
57
57
 
58
58
  /**
59
- * @return {Array<string>}
59
+ * @return {Array<function>}
60
60
  */
61
61
  get messageListeners() {
62
62
  return this._messageCallbacks
63
63
  }
64
64
 
65
65
  /**
66
- * @return {Array<string>}
66
+ * @return {Array<function>}
67
67
  */
68
68
  get errorListeners() {
69
69
  return this._errorCallbacks
70
70
  }
71
71
 
72
72
  /**
73
- * @return {Array<string>}
73
+ * @return {Array<function>}
74
74
  */
75
75
  get closeListeners() {
76
76
  return this._closeCallbacks
@@ -252,8 +252,8 @@ export class TWebSocket {
252
252
 
253
253
  _make() {
254
254
  this._client = new ReconnectingWebSocket(
255
- this._options.url(),
256
- this._options.protocols(),
255
+ this._options.url,
256
+ this._options.protocols,
257
257
  this._options.make(),
258
258
  )
259
259
 
@@ -0,0 +1,50 @@
1
+ export declare type Timeout = number
2
+ export declare const DefaultTimeout: Timeout, LongTimeout: Timeout
3
+
4
+ export declare type Port = number
5
+ export declare const HTTPSPort: Port, HTTPPort: Port
6
+
7
+ export declare class Options {
8
+ constructor(
9
+ host: string,
10
+ timeout: Timeout,
11
+ secure: boolean,
12
+ port: Port,
13
+ longpoll: boolean,
14
+ )
15
+ check(): boolean
16
+ isLongPool(): boolean
17
+ setDebug(debug: boolean): Options
18
+ get debug(): boolean
19
+ setEndpoints(wsEndpoint: string, longpollEndpoint: string): Options
20
+ endpoints(): string[]
21
+ setMaxConnectionDelay(delay: number): Options
22
+ get maxConnectionDelay(): number
23
+ setMinReconnectionDelay(delay: number): Options
24
+ get minReconnectionDelay(): number
25
+ setReconnectionDelayGrowFactor(gw: number): Options
26
+ get reconnectionDelayGrowFactor(): number
27
+ setMinUptime(ut: number): Options
28
+ get minUptime(): number
29
+ setMaxRetries(retries: number): Options
30
+ get maxRetries(): number
31
+ setMaxEnqueuedMessages(em: number): Options
32
+ get maxEnqueuedMessages(): number
33
+ setProtocols(protocols: string[]): Options
34
+ get protocols(): string[]
35
+ setCustomWS(customWS: WebSocket): Options
36
+ get customWS(): WebSocket | undefined
37
+ get url(): string
38
+ make(): {
39
+ WebSocket?: any
40
+ maxReconnectionDelay: number
41
+ minReconnectionDelay: number
42
+ reconnectionDelayGrowFactor: number
43
+ minUptime: number
44
+ connectionTimeout: number
45
+ maxRetries: number
46
+ maxEnqueuedMessages: number
47
+ startClosed: boolean
48
+ debug: boolean
49
+ }
50
+ }
@@ -13,7 +13,7 @@ export class Options {
13
13
  _protocols = []
14
14
  _customWS
15
15
  _endpoints = ['ws', 'longpoll']
16
- _version = `v2.5.6`
16
+ _version = `v2.5.8`
17
17
 
18
18
  _maxConnectionDelay = 10000
19
19
  _minReconnectionDelay = 1000 + Math.random() * 4000
@@ -54,8 +54,9 @@ export class Options {
54
54
  if (this._timeout > LongTimeout)
55
55
  throw new Error(`timeout less than LongTimeout`)
56
56
 
57
+ // eslint-disable-next-line
57
58
  try {
58
- new URL(this.url())
59
+ new URL(this.url)
59
60
 
60
61
  return true
61
62
  } catch (e) {
@@ -66,7 +67,7 @@ export class Options {
66
67
  /**
67
68
  * @return {boolean}
68
69
  */
69
- isLongPool() {
70
+ get isLongPool() {
70
71
  // return this._longpoll
71
72
 
72
73
  return false
@@ -85,7 +86,7 @@ export class Options {
85
86
  /**
86
87
  * @return {boolean}
87
88
  */
88
- debug() {
89
+ get debug() {
89
90
  return this._debug
90
91
  }
91
92
 
@@ -99,12 +100,14 @@ export class Options {
99
100
  throw new TypeError('invalid endpoints')
100
101
 
101
102
  this._endpoints = [wsEndpoint, longpollEndpoint]
103
+
104
+ return this
102
105
  }
103
106
 
104
107
  /**
105
108
  * @return {Array<string>}
106
109
  */
107
- endpoints() {
110
+ get endpoints() {
108
111
  return this._endpoints
109
112
  }
110
113
 
@@ -121,7 +124,7 @@ export class Options {
121
124
  /**
122
125
  * @return {number}
123
126
  */
124
- maxConnectionDelay() {
127
+ get maxConnectionDelay() {
125
128
  return this._maxConnectionDelay
126
129
  }
127
130
 
@@ -138,7 +141,7 @@ export class Options {
138
141
  /**
139
142
  * @return {number}
140
143
  */
141
- minReconnectionDelay() {
144
+ get minReconnectionDelay() {
142
145
  return this._minReconnectionDelay
143
146
  }
144
147
 
@@ -155,7 +158,7 @@ export class Options {
155
158
  /**
156
159
  * @return {number}
157
160
  */
158
- reconnectionDelayGrowFactor() {
161
+ get reconnectionDelayGrowFactor() {
159
162
  return this._reconnectionDelayGrowFactor
160
163
  }
161
164
 
@@ -172,7 +175,7 @@ export class Options {
172
175
  /**
173
176
  * @return {number}
174
177
  */
175
- minUptime() {
178
+ get minUptime() {
176
179
  return this._minUptime
177
180
  }
178
181
 
@@ -189,7 +192,7 @@ export class Options {
189
192
  /**
190
193
  * @return {number}
191
194
  */
192
- maxRetries() {
195
+ get maxRetries() {
193
196
  return this._maxRetries
194
197
  }
195
198
 
@@ -206,7 +209,7 @@ export class Options {
206
209
  /**
207
210
  * @return {number}
208
211
  */
209
- maxEnqueuedMessages() {
212
+ get maxEnqueuedMessages() {
210
213
  return this._maxEnqueuedMessages
211
214
  }
212
215
 
@@ -226,7 +229,7 @@ export class Options {
226
229
  /**
227
230
  * @return {Array<string>}
228
231
  */
229
- protocols() {
232
+ get protocols() {
230
233
  return this._protocols
231
234
  }
232
235
 
@@ -243,14 +246,14 @@ export class Options {
243
246
  /**
244
247
  * @return {any}
245
248
  */
246
- customWS() {
249
+ get customWS() {
247
250
  return this._customWS
248
251
  }
249
252
 
250
253
  /**
251
254
  * @return {string}
252
255
  */
253
- url() {
256
+ get url() {
254
257
  if (this._host.length > 2 && this._host.slice(0, 2) === 'ws') {
255
258
  return `${this._host}${![HTTPPort, HTTPSPort].includes(this._port) ? `:${this._port}` : ''}`
256
259
  }
@@ -44,7 +44,7 @@ describe('Options', () => {
44
44
  it('isLongPoll/0', () => {
45
45
  const options = new Options('localhost')
46
46
 
47
- expect(options.isLongPool()).to.be.equal(false)
47
+ expect(options.isLongPool).to.be.equal(false)
48
48
  })
49
49
 
50
50
  it('setEndpoints/2 with valid params', () => {
@@ -81,7 +81,7 @@ describe('Options', () => {
81
81
  const options = new Options('localhost')
82
82
 
83
83
  options.setProtocols(['wamp', 'soap'])
84
- expect(options.protocols()).to.have.deep.members(['wamp', 'soap'])
84
+ expect(options.protocols).to.have.deep.members(['wamp', 'soap'])
85
85
  })
86
86
 
87
87
  it('setCustomWS/1 with valid params', () => {
@@ -94,25 +94,25 @@ describe('Options', () => {
94
94
  const options = new Options('localhost')
95
95
 
96
96
  options.setCustomWS(WebSocket)
97
- expect(options.customWS()).to.be.eq(WebSocket)
97
+ expect(options.customWS).to.be.eq(WebSocket)
98
98
  })
99
99
 
100
100
  it('url/0', () => {
101
101
  const options = new Options('localhost.localdomain')
102
102
 
103
- expect(options.url()).to.equal('wss://localhost.localdomain/ws')
103
+ expect(options.url).to.equal('wss://localhost.localdomain/ws')
104
104
  })
105
105
 
106
106
  it('url/0 with protocol', () => {
107
107
  const options = new Options('ws://localhost.localdomain')
108
108
 
109
- expect(options.url()).to.equal('ws://localhost.localdomain')
109
+ expect(options.url).to.equal('ws://localhost.localdomain')
110
110
  })
111
111
 
112
112
  it('url/0 with protocol case two', () => {
113
113
  const options = new Options('wss://localhost.localdomain/ws')
114
114
 
115
- expect(options.url()).to.equal('wss://localhost.localdomain/ws')
115
+ expect(options.url).to.equal('wss://localhost.localdomain/ws')
116
116
  })
117
117
 
118
118
  it('make/0', () => {