@tdengine/websocket 3.2.3 → 3.3.0

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.
Files changed (224) hide show
  1. package/lib/package.json +1 -1
  2. package/lib/src/client/wsClient.d.ts +23 -7
  3. package/lib/src/client/wsClient.d.ts.map +1 -1
  4. package/lib/src/client/wsClient.js +154 -139
  5. package/lib/src/client/wsConnector.d.ts +55 -9
  6. package/lib/src/client/wsConnector.d.ts.map +1 -1
  7. package/lib/src/client/wsConnector.js +519 -100
  8. package/lib/src/client/wsConnectorPool.d.ts +5 -1
  9. package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
  10. package/lib/src/client/wsConnectorPool.js +61 -43
  11. package/lib/src/client/wsEventCallback.d.ts +3 -0
  12. package/lib/src/client/wsEventCallback.d.ts.map +1 -1
  13. package/lib/src/client/wsEventCallback.js +67 -8
  14. package/lib/src/common/addressConnectionTracker.d.ts +11 -0
  15. package/lib/src/common/addressConnectionTracker.d.ts.map +1 -0
  16. package/lib/src/common/addressConnectionTracker.js +53 -0
  17. package/lib/src/common/dsn.d.ts +14 -2
  18. package/lib/src/common/dsn.d.ts.map +1 -1
  19. package/lib/src/common/dsn.js +91 -22
  20. package/lib/src/common/taosResult.d.ts.map +1 -1
  21. package/lib/src/common/taosResult.js +0 -5
  22. package/lib/src/common/urlParser.d.ts +32 -0
  23. package/lib/src/common/urlParser.d.ts.map +1 -0
  24. package/lib/src/common/urlParser.js +201 -0
  25. package/lib/src/common/utils.d.ts +2 -1
  26. package/lib/src/common/utils.d.ts.map +1 -1
  27. package/lib/src/common/utils.js +35 -34
  28. package/lib/src/sql/wsSql.js +2 -2
  29. package/lib/src/stmt/FieldBindParams.d.ts.map +1 -1
  30. package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -1
  31. package/lib/src/stmt/wsParams1.d.ts.map +1 -1
  32. package/lib/src/stmt/wsParams1.js +26 -26
  33. package/lib/src/stmt/wsParams2.d.ts.map +1 -1
  34. package/lib/src/stmt/wsParams2.js +0 -3
  35. package/lib/src/stmt/wsParamsBase.d.ts.map +1 -1
  36. package/lib/src/stmt/wsProto.d.ts.map +1 -1
  37. package/lib/src/stmt/wsProto.js +16 -16
  38. package/lib/src/stmt/wsStmt1.d.ts.map +1 -1
  39. package/lib/src/stmt/wsStmt2.d.ts +12 -4
  40. package/lib/src/stmt/wsStmt2.d.ts.map +1 -1
  41. package/lib/src/stmt/wsStmt2.js +182 -64
  42. package/lib/src/stmt/wsTableInfo.d.ts.map +1 -1
  43. package/lib/src/tmq/config.d.ts +3 -2
  44. package/lib/src/tmq/config.d.ts.map +1 -1
  45. package/lib/src/tmq/config.js +15 -15
  46. package/lib/src/tmq/wsTmq.d.ts +4 -1
  47. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  48. package/lib/src/tmq/wsTmq.js +50 -27
  49. package/lib/test/bulkPulling/a.test.d.ts +2 -0
  50. package/lib/test/bulkPulling/a.test.d.ts.map +1 -0
  51. package/lib/test/bulkPulling/a.test.js +166 -0
  52. package/lib/test/bulkPulling/dsn.test.js +19 -0
  53. package/lib/test/bulkPulling/retryConfig.test.js +11 -11
  54. package/lib/test/bulkPulling/sql.failover.test.d.ts +2 -0
  55. package/lib/test/bulkPulling/sql.failover.test.d.ts.map +1 -0
  56. package/lib/test/bulkPulling/sql.failover.test.js +338 -0
  57. package/lib/test/bulkPulling/stmt2.failover.test.d.ts +2 -0
  58. package/lib/test/bulkPulling/stmt2.failover.test.d.ts.map +1 -0
  59. package/lib/test/bulkPulling/stmt2.failover.test.js +313 -0
  60. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts +2 -0
  61. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts.map +1 -0
  62. package/lib/test/bulkPulling/stmt2.init.failover.test.js +50 -0
  63. package/lib/test/bulkPulling/tmq.failover.test.d.ts +2 -0
  64. package/lib/test/bulkPulling/tmq.failover.test.d.ts.map +1 -0
  65. package/lib/test/bulkPulling/tmq.failover.test.js +404 -0
  66. package/lib/test/bulkPulling/urlParser.test.d.ts +2 -0
  67. package/lib/test/bulkPulling/urlParser.test.d.ts.map +1 -0
  68. package/lib/test/bulkPulling/urlParser.test.js +452 -0
  69. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +2 -2
  70. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts +2 -0
  71. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts.map +1 -0
  72. package/lib/test/bulkPulling/wsClient.recovery.test.js +104 -0
  73. package/lib/test/bulkPulling/wsConfig.dsn.test.js +2 -0
  74. package/lib/test/bulkPulling/wsConnector.failover.test.js +396 -27
  75. package/lib/test/bulkPulling/wsConnectorPool.key.test.js +12 -10
  76. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts +2 -0
  77. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts.map +1 -0
  78. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.js +28 -0
  79. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts +2 -0
  80. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts.map +1 -0
  81. package/lib/test/bulkPulling/wsProxy.failover.integration.test.js +120 -0
  82. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts +2 -0
  83. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts.map +1 -0
  84. package/lib/test/bulkPulling/wsProxy.failover.test.js +465 -0
  85. package/lib/test/client/wsClient.recovery.test.d.ts +2 -0
  86. package/lib/test/client/wsClient.recovery.test.d.ts.map +1 -0
  87. package/lib/test/client/wsClient.recovery.test.js +122 -0
  88. package/lib/test/client/wsConnectPool.test.d.ts +2 -0
  89. package/lib/test/client/wsConnectPool.test.d.ts.map +1 -0
  90. package/lib/test/client/wsConnectPool.test.js +147 -0
  91. package/lib/test/client/wsConnector.failover.test.d.ts +2 -0
  92. package/lib/test/client/wsConnector.failover.test.d.ts.map +1 -0
  93. package/lib/test/client/wsConnector.failover.test.js +681 -0
  94. package/lib/test/client/wsConnector.leastConnections.test.d.ts +2 -0
  95. package/lib/test/client/wsConnector.leastConnections.test.d.ts.map +1 -0
  96. package/lib/test/client/wsConnector.leastConnections.test.js +71 -0
  97. package/lib/test/client/wsConnectorPool.key.test.d.ts +2 -0
  98. package/lib/test/client/wsConnectorPool.key.test.d.ts.map +1 -0
  99. package/lib/test/client/wsConnectorPool.key.test.js +127 -0
  100. package/lib/test/client/wsEventCallback.test.d.ts +2 -0
  101. package/lib/test/client/wsEventCallback.test.d.ts.map +1 -0
  102. package/lib/test/client/wsEventCallback.test.js +98 -0
  103. package/lib/test/common/addressConnectionTracker.test.d.ts +2 -0
  104. package/lib/test/common/addressConnectionTracker.test.d.ts.map +1 -0
  105. package/lib/test/common/addressConnectionTracker.test.js +74 -0
  106. package/lib/test/common/dsn.test.d.ts +2 -0
  107. package/lib/test/common/dsn.test.d.ts.map +1 -0
  108. package/lib/test/common/dsn.test.js +406 -0
  109. package/lib/test/common/log.test.d.ts +2 -0
  110. package/lib/test/common/log.test.d.ts.map +1 -0
  111. package/lib/test/common/log.test.js +54 -0
  112. package/lib/test/common/utils.test.d.ts +2 -0
  113. package/lib/test/common/utils.test.d.ts.map +1 -0
  114. package/lib/test/common/utils.test.js +13 -0
  115. package/lib/test/common/wsConfig.dsn.test.d.ts +2 -0
  116. package/lib/test/common/wsConfig.dsn.test.d.ts.map +1 -0
  117. package/lib/test/common/wsConfig.dsn.test.js +39 -0
  118. package/lib/test/helpers/utils.d.ts +27 -0
  119. package/lib/test/helpers/utils.d.ts.map +1 -0
  120. package/lib/test/helpers/utils.js +341 -0
  121. package/lib/test/helpers/wsFailoverProxy.d.ts +109 -0
  122. package/lib/test/helpers/wsFailoverProxy.d.ts.map +1 -0
  123. package/lib/test/helpers/wsFailoverProxy.js +420 -0
  124. package/lib/test/helpers/wsProxy.d.ts +110 -0
  125. package/lib/test/helpers/wsProxy.d.ts.map +1 -0
  126. package/lib/test/helpers/wsProxy.js +429 -0
  127. package/lib/test/sql/core/decimal.test.d.ts +2 -0
  128. package/lib/test/sql/core/decimal.test.d.ts.map +1 -0
  129. package/lib/test/sql/core/decimal.test.js +153 -0
  130. package/lib/test/sql/core/queryTables.test.d.ts +2 -0
  131. package/lib/test/sql/core/queryTables.test.d.ts.map +1 -0
  132. package/lib/test/sql/core/queryTables.test.js +506 -0
  133. package/lib/test/sql/core/schemaless.test.d.ts +2 -0
  134. package/lib/test/sql/core/schemaless.test.d.ts.map +1 -0
  135. package/lib/test/sql/core/schemaless.test.js +102 -0
  136. package/lib/test/sql/core/sql.test.d.ts +2 -0
  137. package/lib/test/sql/core/sql.test.d.ts.map +1 -0
  138. package/lib/test/sql/core/sql.test.js +324 -0
  139. package/lib/test/sql/decimal.test.d.ts +2 -0
  140. package/lib/test/sql/decimal.test.d.ts.map +1 -0
  141. package/lib/test/sql/decimal.test.js +153 -0
  142. package/lib/test/sql/failover/sql.failover.test.d.ts +2 -0
  143. package/lib/test/sql/failover/sql.failover.test.d.ts.map +1 -0
  144. package/lib/test/sql/failover/sql.failover.test.js +341 -0
  145. package/lib/test/sql/queryTables.test.d.ts +2 -0
  146. package/lib/test/sql/queryTables.test.d.ts.map +1 -0
  147. package/lib/test/sql/queryTables.test.js +506 -0
  148. package/lib/test/sql/schemaless.test.d.ts +2 -0
  149. package/lib/test/sql/schemaless.test.d.ts.map +1 -0
  150. package/lib/test/sql/schemaless.test.js +102 -0
  151. package/lib/test/sql/sql.failover.test.d.ts +2 -0
  152. package/lib/test/sql/sql.failover.test.d.ts.map +1 -0
  153. package/lib/test/sql/sql.failover.test.js +341 -0
  154. package/lib/test/sql/sql.test.d.ts +2 -0
  155. package/lib/test/sql/sql.test.d.ts.map +1 -0
  156. package/lib/test/sql/sql.test.js +324 -0
  157. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts +2 -0
  158. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts.map +1 -0
  159. package/lib/test/stmt/failover/stmt2.failover.mock.test.js +341 -0
  160. package/lib/test/stmt/failover/stmt2.failover.test.d.ts +2 -0
  161. package/lib/test/stmt/failover/stmt2.failover.test.d.ts.map +1 -0
  162. package/lib/test/stmt/failover/stmt2.failover.test.js +384 -0
  163. package/lib/test/stmt/stmt1.func.test.d.ts +2 -0
  164. package/lib/test/stmt/stmt1.func.test.d.ts.map +1 -0
  165. package/lib/test/stmt/stmt1.func.test.js +418 -0
  166. package/lib/test/stmt/stmt1.type.test.d.ts +2 -0
  167. package/lib/test/stmt/stmt1.type.test.d.ts.map +1 -0
  168. package/lib/test/stmt/stmt1.type.test.js +399 -0
  169. package/lib/test/stmt/stmt2.failover.mock.test.d.ts +2 -0
  170. package/lib/test/stmt/stmt2.failover.mock.test.d.ts.map +1 -0
  171. package/lib/test/stmt/stmt2.failover.mock.test.js +341 -0
  172. package/lib/test/stmt/stmt2.failover.test.d.ts +2 -0
  173. package/lib/test/stmt/stmt2.failover.test.d.ts.map +1 -0
  174. package/lib/test/stmt/stmt2.failover.test.js +384 -0
  175. package/lib/test/stmt/stmt2.func.test.d.ts +2 -0
  176. package/lib/test/stmt/stmt2.func.test.d.ts.map +1 -0
  177. package/lib/test/stmt/stmt2.func.test.js +537 -0
  178. package/lib/test/stmt/stmt2.type.test.d.ts +2 -0
  179. package/lib/test/stmt/stmt2.type.test.d.ts.map +1 -0
  180. package/lib/test/stmt/stmt2.type.test.js +401 -0
  181. package/lib/test/stmt/v1/stmt1.func.test.d.ts +2 -0
  182. package/lib/test/stmt/v1/stmt1.func.test.d.ts.map +1 -0
  183. package/lib/test/stmt/v1/stmt1.func.test.js +418 -0
  184. package/lib/test/stmt/v1/stmt1.type.test.d.ts +2 -0
  185. package/lib/test/stmt/v1/stmt1.type.test.d.ts.map +1 -0
  186. package/lib/test/stmt/v1/stmt1.type.test.js +399 -0
  187. package/lib/test/stmt/v2/stmt2.func.test.d.ts +2 -0
  188. package/lib/test/stmt/v2/stmt2.func.test.d.ts.map +1 -0
  189. package/lib/test/stmt/v2/stmt2.func.test.js +537 -0
  190. package/lib/test/stmt/v2/stmt2.type.test.d.ts +2 -0
  191. package/lib/test/stmt/v2/stmt2.type.test.d.ts.map +1 -0
  192. package/lib/test/stmt/v2/stmt2.type.test.js +401 -0
  193. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts +2 -0
  194. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts.map +1 -0
  195. package/lib/test/tmq/cloud/cloud.tmq.test.js +84 -0
  196. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts +2 -0
  197. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts.map +1 -0
  198. package/lib/test/tmq/cloud/tmq.cloud.test.js +82 -0
  199. package/lib/test/tmq/core/tmq.config.test.d.ts +2 -0
  200. package/lib/test/tmq/core/tmq.config.test.d.ts.map +1 -0
  201. package/lib/test/tmq/core/tmq.config.test.js +83 -0
  202. package/lib/test/tmq/core/tmq.test.d.ts +2 -0
  203. package/lib/test/tmq/core/tmq.test.d.ts.map +1 -0
  204. package/lib/test/tmq/core/tmq.test.js +513 -0
  205. package/lib/test/tmq/failover/tmq.failover.test.d.ts +2 -0
  206. package/lib/test/tmq/failover/tmq.failover.test.d.ts.map +1 -0
  207. package/lib/test/tmq/failover/tmq.failover.test.js +404 -0
  208. package/lib/test/tmq/tmq.cloud.test.d.ts +2 -0
  209. package/lib/test/tmq/tmq.cloud.test.d.ts.map +1 -0
  210. package/lib/test/tmq/tmq.cloud.test.js +82 -0
  211. package/lib/test/tmq/tmq.config.test.d.ts +2 -0
  212. package/lib/test/tmq/tmq.config.test.d.ts.map +1 -0
  213. package/lib/test/tmq/tmq.config.test.js +94 -0
  214. package/lib/test/tmq/tmq.failover.test.d.ts +2 -0
  215. package/lib/test/tmq/tmq.failover.test.d.ts.map +1 -0
  216. package/lib/test/tmq/tmq.failover.test.js +404 -0
  217. package/lib/test/tmq/tmq.test.d.ts +2 -0
  218. package/lib/test/tmq/tmq.test.d.ts.map +1 -0
  219. package/lib/test/tmq/tmq.test.js +513 -0
  220. package/lib/test/unit/connectionManager.test.d.ts +2 -0
  221. package/lib/test/unit/connectionManager.test.d.ts.map +1 -0
  222. package/lib/test/unit/connectionManager.test.js +91 -0
  223. package/package.json +1 -1
  224. package/readme.md +2 -2
@@ -17,27 +17,28 @@ const utils_1 = require("../common/utils");
17
17
  const constant_2 = require("../common/constant");
18
18
  class WsConsumer {
19
19
  constructor(wsConfig) {
20
- this._wsConfig = new config_1.TmqConfig(wsConfig);
20
+ this._config = new config_1.TmqConfig(wsConfig);
21
21
  if (log_1.default.isDebugEnabled()) {
22
- log_1.default.debug("WsConsumer config: " + (0, utils_1.maskTmqConfigForLog)(this._wsConfig));
22
+ log_1.default.debug("WsConsumer config: " + (0, utils_1.maskTmqConfigForLog)(this._config));
23
23
  }
24
- if (wsConfig.size == 0 || !this._wsConfig.url) {
24
+ if (wsConfig.size == 0 || !this._config.dsn) {
25
25
  throw new wsError_1.WebSocketInterfaceError(wsError_1.ErrorCode.ERR_INVALID_URL, "invalid url, password or username needed.");
26
26
  }
27
- this._wsClient = new wsClient_1.WsClient(this._wsConfig.url, this._wsConfig.timeout);
27
+ this._wsClient = new wsClient_1.WsClient(this._config.dsn, this._config.timeout);
28
+ this.bindSessionRecoveryHook();
28
29
  this._lastMessageID = BigInt(0);
29
30
  }
30
31
  async init() {
31
32
  let wsSql = null;
32
33
  try {
33
- if (this._wsConfig.sql_url) {
34
- wsSql = new wsClient_1.WsClient(this._wsConfig.sql_url, this._wsConfig.timeout);
34
+ if (this._config.sqlDsn) {
35
+ wsSql = new wsClient_1.WsClient(this._config.sqlDsn, this._config.timeout);
35
36
  await wsSql.connect();
36
37
  await wsSql.checkVersion();
37
38
  await this._wsClient.ready();
38
39
  }
39
40
  else {
40
- throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WEBSOCKET_CONNECTION_FAIL, `connection creation failed, url: ${(0, utils_1.maskUrlForLog)(this._wsConfig.url)}`);
41
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WEBSOCKET_CONNECTION_FAIL, `connection creation failed, dsn: ${this._config.dsn}`);
41
42
  }
42
43
  }
43
44
  catch (e) {
@@ -53,33 +54,54 @@ class WsConsumer {
53
54
  }
54
55
  static async newConsumer(wsConfig) {
55
56
  if (wsConfig.size == 0 || !wsConfig.get(constant_1.TMQConstants.WS_URL)) {
56
- throw new wsError_1.WebSocketInterfaceError(wsError_1.ErrorCode.ERR_INVALID_URL, "invalid url, password or username needed.");
57
+ throw new wsError_1.WebSocketInterfaceError(wsError_1.ErrorCode.ERR_INVALID_URL, "Invalid DSN");
57
58
  }
58
- let wsConsumer = new WsConsumer(wsConfig);
59
+ const wsConsumer = new WsConsumer(wsConfig);
59
60
  return await wsConsumer.init();
60
61
  }
61
- async subscribe(topics, reqId) {
62
- if (!topics || topics.length == 0) {
63
- throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "WsTmq Subscribe params is error!");
64
- }
65
- let queryMsg = {
62
+ bindSessionRecoveryHook() {
63
+ this._wsClient.setSessionRecoveryHook(async () => {
64
+ await this.recoverSessionContext();
65
+ });
66
+ }
67
+ buildSubscribeMessage(topics, reqId) {
68
+ const user = this._config.user === null
69
+ ? null
70
+ : (0, utils_1.safeDecodeURIComponent)(this._config.user);
71
+ const password = this._config.password === null
72
+ ? null
73
+ : (0, utils_1.safeDecodeURIComponent)(this._config.password);
74
+ return {
66
75
  action: constant_1.TMQMessageType.Subscribe,
67
76
  args: {
68
77
  req_id: reqid_1.ReqId.getReqID(reqId),
69
- user: this._wsConfig.user,
70
- password: this._wsConfig.password,
71
- group_id: this._wsConfig.group_id,
72
- client_id: this._wsConfig.client_id,
78
+ user,
79
+ password,
80
+ group_id: this._config.group_id,
81
+ client_id: this._config.client_id,
73
82
  topics: topics,
74
- offset_rest: this._wsConfig.offset_rest,
75
- auto_commit: String(this._wsConfig.auto_commit),
76
- auto_commit_interval_ms: String(this._wsConfig.auto_commit_interval_ms),
77
- config: Object.fromEntries(this._wsConfig.otherConfigs),
83
+ offset_rest: this._config.offset_rest,
84
+ auto_commit: String(this._config.auto_commit),
85
+ auto_commit_interval_ms: String(this._config.auto_commit_interval_ms),
86
+ config: Object.fromEntries(this._config.otherConfigs),
78
87
  connector: constant_2.ConnectorInfo,
79
88
  },
80
89
  };
81
- this._topics = topics;
82
- return await this._wsClient.exec(JSON.stringify(queryMsg));
90
+ }
91
+ async recoverSessionContext() {
92
+ if (!this._topics || this._topics.length === 0) {
93
+ return;
94
+ }
95
+ log_1.default.info(`Recovering TMQ session context, re-subscribing ${this._topics.length} topic(s).`);
96
+ await this._wsClient.sendMsgDirect(JSON.stringify(this.buildSubscribeMessage(this._topics)), false);
97
+ }
98
+ async subscribe(topics, reqId) {
99
+ if (!topics || topics.length == 0) {
100
+ throw new wsError_1.TaosResultError(wsError_1.ErrorCode.ERR_INVALID_PARAMS, "WsTmq Subscribe params is error!");
101
+ }
102
+ let queryMsg = this.buildSubscribeMessage(topics, reqId);
103
+ await this._wsClient.exec(JSON.stringify(queryMsg));
104
+ this._topics = [...topics];
83
105
  }
84
106
  async unsubscribe(reqId) {
85
107
  let queryMsg = {
@@ -88,14 +110,15 @@ class WsConsumer {
88
110
  req_id: reqid_1.ReqId.getReqID(reqId),
89
111
  },
90
112
  };
91
- return await this._wsClient.exec(JSON.stringify(queryMsg));
113
+ await this._wsClient.exec(JSON.stringify(queryMsg));
114
+ this._topics = undefined;
92
115
  }
93
116
  async poll(timeoutMs, reqId) {
94
- if (this._wsConfig.auto_commit) {
117
+ if (this._config.auto_commit) {
95
118
  if (this._commitTime) {
96
119
  let currTime = new Date().getTime();
97
120
  let diff = Math.abs(currTime - this._commitTime);
98
- if (diff >= this._wsConfig.auto_commit_interval_ms) {
121
+ if (diff >= this._config.auto_commit_interval_ms) {
99
122
  await this.doCommit();
100
123
  this._commitTime = new Date().getTime();
101
124
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=a.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a.test.d.ts","sourceRoot":"","sources":["../../../test/bulkPulling/a.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ // import { w3cwebsocket } from "websocket";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ // test("test ws", async () => {
38
+ // const conn = new w3cwebsocket(
39
+ // "ws://localhost:6041/ws",
40
+ // undefined,
41
+ // undefined,
42
+ // undefined,
43
+ // undefined,
44
+ // {
45
+ // maxReceivedFrameSize: 0x60000000,
46
+ // maxReceivedMessageSize: 0x60000000,
47
+ // }
48
+ // );
49
+ // conn.onopen = function () {
50
+ // console.log("websocket connection opened");
51
+ // };
52
+ // conn.onmessage = function (message) {
53
+ // console.log("Received message:", message.data);
54
+ // };
55
+ // conn.onerror = function (err: Error) {
56
+ // console.error(`webSocket connection failed, url: ${this.url}, error: ${err.message}`);
57
+ // };
58
+ // conn.onclose = function () {
59
+ // console.log("websocket connection closed");
60
+ // };
61
+ // // cannot call send() while not connected
62
+ // conn.send("hello world");
63
+ // conn.close();
64
+ // });
65
+ const websocket_1 = require("websocket");
66
+ const utils_1 = require("../helpers/utils");
67
+ const log_1 = __importStar(require("../../src/common/log"));
68
+ (0, log_1.setLevel)("debug");
69
+ function waitForOpen(conn, timeoutMs = 5000) {
70
+ if (conn.readyState === websocket_1.w3cwebsocket.OPEN) {
71
+ return Promise.resolve();
72
+ }
73
+ return new Promise((resolve, reject) => {
74
+ const timer = setTimeout(() => {
75
+ cleanup();
76
+ reject(new Error(`waitForOpen timeout after ${timeoutMs}ms`));
77
+ }, timeoutMs);
78
+ const cleanup = () => {
79
+ clearTimeout(timer);
80
+ conn.onopen = prevOpen;
81
+ conn.onerror = prevError;
82
+ conn.onclose = prevClose;
83
+ };
84
+ const prevOpen = conn.onopen;
85
+ const prevError = conn.onerror;
86
+ const prevClose = conn.onclose;
87
+ conn.onopen = function () {
88
+ prevOpen?.call(this);
89
+ cleanup();
90
+ resolve();
91
+ };
92
+ conn.onerror = function (err) {
93
+ prevError?.call(this, err);
94
+ cleanup();
95
+ reject(err);
96
+ };
97
+ conn.onclose = function (e) {
98
+ prevClose?.call(this, e);
99
+ cleanup();
100
+ reject(new Error(`socket closed before open: ${e.code} ${e.reason || ""}`.trim()));
101
+ };
102
+ });
103
+ }
104
+ function waitForClose(conn, timeoutMs = 5000) {
105
+ if (conn.readyState === websocket_1.w3cwebsocket.CLOSED) {
106
+ return Promise.resolve();
107
+ }
108
+ return new Promise((resolve, reject) => {
109
+ const timer = setTimeout(() => {
110
+ cleanup();
111
+ reject(new Error(`waitForClose timeout after ${timeoutMs}ms`));
112
+ }, timeoutMs);
113
+ const cleanup = () => {
114
+ clearTimeout(timer);
115
+ conn.onclose = prevClose;
116
+ conn.onerror = prevError;
117
+ };
118
+ const prevClose = conn.onclose;
119
+ const prevError = conn.onerror;
120
+ conn.onclose = function (e) {
121
+ prevClose?.call(this, e);
122
+ cleanup();
123
+ resolve();
124
+ };
125
+ conn.onerror = function (err) {
126
+ prevError?.call(this, err);
127
+ cleanup();
128
+ reject(err);
129
+ };
130
+ });
131
+ }
132
+ test("test ws", async () => {
133
+ const conn = new websocket_1.w3cwebsocket("ws://localhost:6041/ws", undefined, undefined, undefined, undefined, {
134
+ maxReceivedFrameSize: 0x60000000,
135
+ maxReceivedMessageSize: 0x60000000,
136
+ });
137
+ conn.onopen = function () {
138
+ console.log("websocket connection opened");
139
+ };
140
+ conn.onmessage = function (message) {
141
+ console.log("Received message:", message.data);
142
+ };
143
+ conn.onerror = function (err) {
144
+ console.error(`webSocket connection failed, url: ${this.url}, error: ${err.message}`);
145
+ };
146
+ conn.onclose = function (e) {
147
+ console.log("websocket connection closed, event", e);
148
+ };
149
+ await waitForOpen(conn);
150
+ // cannot call send() while not connected
151
+ conn.send("hello world");
152
+ // conn.close();
153
+ // await waitForClose(conn);
154
+ // restart taosadapter
155
+ console.log("Please restart taosadapter now...");
156
+ log_1.default.info("Please restart taosadapter now...");
157
+ await (0, utils_1.Sleep)(5000);
158
+ // cannot call send() while not connected
159
+ conn.send("hello world after close"); // should not throw, but will be ignored
160
+ await (0, utils_1.Sleep)(5000);
161
+ }, 15000);
162
+ test("test url", async () => {
163
+ const url = new URL("ws://user:pass@localhost:6041/dbname?param1=value1&param2=value2");
164
+ console.log("url", url);
165
+ console.log(url.port);
166
+ });
@@ -11,6 +11,7 @@ describe("dsn", () => {
11
11
  expect(result.addresses).toEqual([{ host: "localhost", port: 6041 }]);
12
12
  expect(result.database).toBe("");
13
13
  expect(result.params.size).toBe(0);
14
+ expect(result.endpoint).toBe(dsn_1.WS_SQL_ENDPOINT);
14
15
  });
15
16
  test("single host with database", () => {
16
17
  const result = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041/power");
@@ -375,4 +376,22 @@ describe("dsn", () => {
375
376
  expect(() => (0, dsn_1.parse)("ws://root:taosdata@host1:6041,[::1:6042,host2:6043")).toThrow("Unclosed bracket");
376
377
  });
377
378
  });
379
+ describe("toString", () => {
380
+ test("masks password and sensitive params", () => {
381
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041/mydb?token=t1&bearer_token=b1&td.connect.token=c1&timezone=UTC");
382
+ const masked = JSON.parse(dsn.toString());
383
+ expect(masked.password).toBe("[REDACTED]");
384
+ expect(masked.params.token).toBe("[REDACTED]");
385
+ expect(masked.params.bearer_token).toBe("[REDACTED]");
386
+ expect(masked.params["td.connect.token"]).toBe("[REDACTED]");
387
+ expect(masked.params.timezone).toBe("UTC");
388
+ });
389
+ test("treats sensitive param keys as case-insensitive", () => {
390
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041?Token=t1&Bearer_Token=b1&TD.CONNECT.TOKEN=c1");
391
+ const masked = JSON.parse(dsn.toString());
392
+ expect(masked.params.Token).toBe("[REDACTED]");
393
+ expect(masked.params.Bearer_Token).toBe("[REDACTED]");
394
+ expect(masked.params["TD.CONNECT.TOKEN"]).toBe("[REDACTED]");
395
+ });
396
+ });
378
397
  });
@@ -1,31 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const dsn_1 = require("../../src/common/dsn");
4
- const retryConfig_1 = require("../../src/client/retryConfig");
4
+ const wsConnector_1 = require("../../src/client/wsConnector");
5
5
  describe("RetryConfig", () => {
6
6
  test("uses defaults when retry params are not provided", () => {
7
7
  const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
8
- const config = retryConfig_1.RetryConfig.fromDsn(dsn);
9
- expect(config.retries).toBe(3);
10
- expect(config.retryBackoffMs).toBe(100);
11
- expect(config.retryBackoffMaxMs).toBe(10000);
8
+ const config = wsConnector_1.RetryConfig.fromDsn(dsn);
9
+ expect(config.retries).toBe(5);
10
+ expect(config.retryBackoffMs).toBe(200);
11
+ expect(config.retryBackoffMaxMs).toBe(2000);
12
12
  });
13
13
  test("reads retry params from dsn", () => {
14
14
  const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041?retries=5&retry_backoff_ms=200&retry_backoff_max_ms=3200");
15
- const config = retryConfig_1.RetryConfig.fromDsn(dsn);
15
+ const config = wsConnector_1.RetryConfig.fromDsn(dsn);
16
16
  expect(config.retries).toBe(5);
17
17
  expect(config.retryBackoffMs).toBe(200);
18
18
  expect(config.retryBackoffMaxMs).toBe(3200);
19
19
  });
20
20
  test("normalizes invalid params to safe defaults", () => {
21
21
  const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041?retries=-1&retry_backoff_ms=abc&retry_backoff_max_ms=0");
22
- const config = retryConfig_1.RetryConfig.fromDsn(dsn);
23
- expect(config.retries).toBe(3);
24
- expect(config.retryBackoffMs).toBe(100);
25
- expect(config.retryBackoffMaxMs).toBe(10000);
22
+ const config = wsConnector_1.RetryConfig.fromDsn(dsn);
23
+ expect(config.retries).toBe(5);
24
+ expect(config.retryBackoffMs).toBe(200);
25
+ expect(config.retryBackoffMaxMs).toBe(2000);
26
26
  });
27
27
  test("computes exponential backoff and caps at max", () => {
28
- const config = new retryConfig_1.RetryConfig(3, 100, 350);
28
+ const config = new wsConnector_1.RetryConfig(3, 100, 350);
29
29
  expect(config.getBackoffDelay(0)).toBe(100);
30
30
  expect(config.getBackoffDelay(1)).toBe(200);
31
31
  expect(config.getBackoffDelay(2)).toBe(350);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sql.failover.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.failover.test.d.ts","sourceRoot":"","sources":["../../../test/bulkPulling/sql.failover.test.ts"],"names":[],"mappings":""}