@tdengine/websocket 3.2.2 → 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 (275) hide show
  1. package/lib/package.json +64 -0
  2. package/lib/src/client/retryConfig.d.ts +10 -0
  3. package/lib/src/client/retryConfig.d.ts.map +1 -0
  4. package/lib/src/client/retryConfig.js +46 -0
  5. package/lib/src/client/wsClient.d.ts +24 -7
  6. package/lib/src/client/wsClient.d.ts.map +1 -1
  7. package/lib/src/client/wsClient.js +164 -137
  8. package/lib/src/client/wsConnector.d.ts +55 -9
  9. package/lib/src/client/wsConnector.d.ts.map +1 -1
  10. package/lib/src/client/wsConnector.js +522 -102
  11. package/lib/src/client/wsConnectorPool.d.ts +5 -1
  12. package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
  13. package/lib/src/client/wsConnectorPool.js +67 -52
  14. package/lib/src/client/wsEventCallback.d.ts +3 -0
  15. package/lib/src/client/wsEventCallback.d.ts.map +1 -1
  16. package/lib/src/client/wsEventCallback.js +67 -8
  17. package/lib/src/client/wsResponse.d.ts +0 -3
  18. package/lib/src/client/wsResponse.d.ts.map +1 -1
  19. package/lib/src/client/wsResponse.js +0 -3
  20. package/lib/src/common/addressConnectionTracker.d.ts +11 -0
  21. package/lib/src/common/addressConnectionTracker.d.ts.map +1 -0
  22. package/lib/src/common/addressConnectionTracker.js +53 -0
  23. package/lib/src/common/config.d.ts +3 -0
  24. package/lib/src/common/config.d.ts.map +1 -1
  25. package/lib/src/common/config.js +6 -0
  26. package/lib/src/common/constant.d.ts +1 -0
  27. package/lib/src/common/constant.d.ts.map +1 -1
  28. package/lib/src/common/constant.js +6 -1
  29. package/lib/src/common/dsn.d.ts +30 -0
  30. package/lib/src/common/dsn.d.ts.map +1 -0
  31. package/lib/src/common/dsn.js +221 -0
  32. package/lib/src/common/taosResult.d.ts.map +1 -1
  33. package/lib/src/common/taosResult.js +0 -5
  34. package/lib/src/common/urlParser.d.ts +32 -0
  35. package/lib/src/common/urlParser.d.ts.map +1 -0
  36. package/lib/src/common/urlParser.js +201 -0
  37. package/lib/src/common/utils.d.ts +6 -1
  38. package/lib/src/common/utils.d.ts.map +1 -1
  39. package/lib/src/common/utils.js +74 -22
  40. package/lib/src/index.d.ts.map +1 -1
  41. package/lib/src/sql/wsSql.d.ts.map +1 -1
  42. package/lib/src/sql/wsSql.js +2 -2
  43. package/lib/src/stmt/FieldBindParams.d.ts.map +1 -1
  44. package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -1
  45. package/lib/src/stmt/wsParams1.d.ts.map +1 -1
  46. package/lib/src/stmt/wsParams1.js +26 -26
  47. package/lib/src/stmt/wsParams2.d.ts.map +1 -1
  48. package/lib/src/stmt/wsParams2.js +0 -3
  49. package/lib/src/stmt/wsParamsBase.d.ts.map +1 -1
  50. package/lib/src/stmt/wsProto.d.ts.map +1 -1
  51. package/lib/src/stmt/wsProto.js +16 -16
  52. package/lib/src/stmt/wsStmt1.d.ts.map +1 -1
  53. package/lib/src/stmt/wsStmt2.d.ts +12 -4
  54. package/lib/src/stmt/wsStmt2.d.ts.map +1 -1
  55. package/lib/src/stmt/wsStmt2.js +182 -64
  56. package/lib/src/stmt/wsTableInfo.d.ts.map +1 -1
  57. package/lib/src/tmq/config.d.ts +4 -2
  58. package/lib/src/tmq/config.d.ts.map +1 -1
  59. package/lib/src/tmq/config.js +30 -13
  60. package/lib/src/tmq/constant.d.ts +4 -0
  61. package/lib/src/tmq/constant.d.ts.map +1 -1
  62. package/lib/src/tmq/constant.js +4 -0
  63. package/lib/src/tmq/tmqResponse.d.ts.map +1 -1
  64. package/lib/src/tmq/tmqResponse.js +1 -4
  65. package/lib/src/tmq/wsTmq.d.ts +4 -1
  66. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  67. package/lib/src/tmq/wsTmq.js +55 -27
  68. package/lib/test/bulkPulling/a.test.d.ts +2 -0
  69. package/lib/test/bulkPulling/a.test.d.ts.map +1 -0
  70. package/lib/test/bulkPulling/a.test.js +166 -0
  71. package/lib/test/bulkPulling/cloud.tmq.test.js +3 -2
  72. package/lib/test/bulkPulling/decimal.test.js +8 -8
  73. package/lib/test/bulkPulling/dsn.test.d.ts +2 -0
  74. package/lib/test/bulkPulling/dsn.test.d.ts.map +1 -0
  75. package/lib/test/bulkPulling/dsn.test.js +397 -0
  76. package/lib/test/bulkPulling/queryTables.test.js +1 -1
  77. package/lib/test/bulkPulling/retryConfig.test.d.ts +2 -0
  78. package/lib/test/bulkPulling/retryConfig.test.d.ts.map +1 -0
  79. package/lib/test/bulkPulling/retryConfig.test.js +34 -0
  80. package/lib/test/bulkPulling/schemaless.test.js +15 -14
  81. package/lib/test/bulkPulling/sql.failover.test.d.ts +2 -0
  82. package/lib/test/bulkPulling/sql.failover.test.d.ts.map +1 -0
  83. package/lib/test/bulkPulling/sql.failover.test.js +338 -0
  84. package/lib/test/bulkPulling/sql.test.js +116 -44
  85. package/lib/test/bulkPulling/stmt1.func.test.js +31 -30
  86. package/lib/test/bulkPulling/stmt1.type.test.js +1 -1
  87. package/lib/test/bulkPulling/stmt2.failover.test.d.ts +2 -0
  88. package/lib/test/bulkPulling/stmt2.failover.test.d.ts.map +1 -0
  89. package/lib/test/bulkPulling/stmt2.failover.test.js +313 -0
  90. package/lib/test/bulkPulling/stmt2.func.test.js +37 -36
  91. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts +2 -0
  92. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts.map +1 -0
  93. package/lib/test/bulkPulling/stmt2.init.failover.test.js +50 -0
  94. package/lib/test/bulkPulling/stmt2.type.test.js +1 -1
  95. package/lib/test/bulkPulling/tmq.config.test.d.ts +2 -0
  96. package/lib/test/bulkPulling/tmq.config.test.d.ts.map +1 -0
  97. package/lib/test/bulkPulling/tmq.config.test.js +77 -0
  98. package/lib/test/bulkPulling/tmq.failover.test.d.ts +2 -0
  99. package/lib/test/bulkPulling/tmq.failover.test.d.ts.map +1 -0
  100. package/lib/test/bulkPulling/tmq.failover.test.js +404 -0
  101. package/lib/test/bulkPulling/tmq.test.js +135 -14
  102. package/lib/test/bulkPulling/urlParser.test.d.ts +2 -0
  103. package/lib/test/bulkPulling/urlParser.test.d.ts.map +1 -0
  104. package/lib/test/bulkPulling/urlParser.test.js +452 -0
  105. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.d.ts +2 -0
  106. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.d.ts.map +1 -0
  107. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +184 -0
  108. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts +2 -0
  109. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts.map +1 -0
  110. package/lib/test/bulkPulling/wsClient.recovery.test.js +104 -0
  111. package/lib/test/bulkPulling/wsConfig.dsn.test.d.ts +2 -0
  112. package/lib/test/bulkPulling/wsConfig.dsn.test.d.ts.map +1 -0
  113. package/lib/test/bulkPulling/wsConfig.dsn.test.js +39 -0
  114. package/lib/test/bulkPulling/wsConnectPool.test.js +7 -7
  115. package/lib/test/bulkPulling/wsConnector.failover.test.d.ts +2 -0
  116. package/lib/test/bulkPulling/wsConnector.failover.test.d.ts.map +1 -0
  117. package/lib/test/bulkPulling/wsConnector.failover.test.js +497 -0
  118. package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts +2 -0
  119. package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts.map +1 -0
  120. package/lib/test/bulkPulling/wsConnectorPool.key.test.js +52 -0
  121. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts +2 -0
  122. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts.map +1 -0
  123. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.js +28 -0
  124. package/lib/test/bulkPulling/wsEventCallback.test.d.ts +2 -0
  125. package/lib/test/bulkPulling/wsEventCallback.test.d.ts.map +1 -0
  126. package/lib/test/bulkPulling/wsEventCallback.test.js +54 -0
  127. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts +2 -0
  128. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts.map +1 -0
  129. package/lib/test/bulkPulling/wsProxy.failover.integration.test.js +120 -0
  130. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts +2 -0
  131. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts.map +1 -0
  132. package/lib/test/bulkPulling/wsProxy.failover.test.js +465 -0
  133. package/lib/test/client/wsClient.recovery.test.d.ts +2 -0
  134. package/lib/test/client/wsClient.recovery.test.d.ts.map +1 -0
  135. package/lib/test/client/wsClient.recovery.test.js +122 -0
  136. package/lib/test/client/wsConnectPool.test.d.ts +2 -0
  137. package/lib/test/client/wsConnectPool.test.d.ts.map +1 -0
  138. package/lib/test/client/wsConnectPool.test.js +147 -0
  139. package/lib/test/client/wsConnector.failover.test.d.ts +2 -0
  140. package/lib/test/client/wsConnector.failover.test.d.ts.map +1 -0
  141. package/lib/test/client/wsConnector.failover.test.js +681 -0
  142. package/lib/test/client/wsConnector.leastConnections.test.d.ts +2 -0
  143. package/lib/test/client/wsConnector.leastConnections.test.d.ts.map +1 -0
  144. package/lib/test/client/wsConnector.leastConnections.test.js +71 -0
  145. package/lib/test/client/wsConnectorPool.key.test.d.ts +2 -0
  146. package/lib/test/client/wsConnectorPool.key.test.d.ts.map +1 -0
  147. package/lib/test/client/wsConnectorPool.key.test.js +127 -0
  148. package/lib/test/client/wsEventCallback.test.d.ts +2 -0
  149. package/lib/test/client/wsEventCallback.test.d.ts.map +1 -0
  150. package/lib/test/client/wsEventCallback.test.js +98 -0
  151. package/lib/test/common/addressConnectionTracker.test.d.ts +2 -0
  152. package/lib/test/common/addressConnectionTracker.test.d.ts.map +1 -0
  153. package/lib/test/common/addressConnectionTracker.test.js +74 -0
  154. package/lib/test/common/dsn.test.d.ts +2 -0
  155. package/lib/test/common/dsn.test.d.ts.map +1 -0
  156. package/lib/test/common/dsn.test.js +406 -0
  157. package/lib/test/common/log.test.d.ts +2 -0
  158. package/lib/test/common/log.test.d.ts.map +1 -0
  159. package/lib/test/common/log.test.js +54 -0
  160. package/lib/test/common/utils.test.d.ts +2 -0
  161. package/lib/test/common/utils.test.d.ts.map +1 -0
  162. package/lib/test/common/utils.test.js +13 -0
  163. package/lib/test/common/wsConfig.dsn.test.d.ts +2 -0
  164. package/lib/test/common/wsConfig.dsn.test.d.ts.map +1 -0
  165. package/lib/test/common/wsConfig.dsn.test.js +39 -0
  166. package/lib/test/helpers/utils.d.ts +27 -0
  167. package/lib/test/helpers/utils.d.ts.map +1 -0
  168. package/lib/test/helpers/utils.js +341 -0
  169. package/lib/test/helpers/wsFailoverProxy.d.ts +109 -0
  170. package/lib/test/helpers/wsFailoverProxy.d.ts.map +1 -0
  171. package/lib/test/helpers/wsFailoverProxy.js +420 -0
  172. package/lib/test/helpers/wsProxy.d.ts +110 -0
  173. package/lib/test/helpers/wsProxy.d.ts.map +1 -0
  174. package/lib/test/helpers/wsProxy.js +429 -0
  175. package/lib/test/sql/core/decimal.test.d.ts +2 -0
  176. package/lib/test/sql/core/decimal.test.d.ts.map +1 -0
  177. package/lib/test/sql/core/decimal.test.js +153 -0
  178. package/lib/test/sql/core/queryTables.test.d.ts +2 -0
  179. package/lib/test/sql/core/queryTables.test.d.ts.map +1 -0
  180. package/lib/test/sql/core/queryTables.test.js +506 -0
  181. package/lib/test/sql/core/schemaless.test.d.ts +2 -0
  182. package/lib/test/sql/core/schemaless.test.d.ts.map +1 -0
  183. package/lib/test/sql/core/schemaless.test.js +102 -0
  184. package/lib/test/sql/core/sql.test.d.ts +2 -0
  185. package/lib/test/sql/core/sql.test.d.ts.map +1 -0
  186. package/lib/test/sql/core/sql.test.js +324 -0
  187. package/lib/test/sql/decimal.test.d.ts +2 -0
  188. package/lib/test/sql/decimal.test.d.ts.map +1 -0
  189. package/lib/test/sql/decimal.test.js +153 -0
  190. package/lib/test/sql/failover/sql.failover.test.d.ts +2 -0
  191. package/lib/test/sql/failover/sql.failover.test.d.ts.map +1 -0
  192. package/lib/test/sql/failover/sql.failover.test.js +341 -0
  193. package/lib/test/sql/queryTables.test.d.ts +2 -0
  194. package/lib/test/sql/queryTables.test.d.ts.map +1 -0
  195. package/lib/test/sql/queryTables.test.js +506 -0
  196. package/lib/test/sql/schemaless.test.d.ts +2 -0
  197. package/lib/test/sql/schemaless.test.d.ts.map +1 -0
  198. package/lib/test/sql/schemaless.test.js +102 -0
  199. package/lib/test/sql/sql.failover.test.d.ts +2 -0
  200. package/lib/test/sql/sql.failover.test.d.ts.map +1 -0
  201. package/lib/test/sql/sql.failover.test.js +341 -0
  202. package/lib/test/sql/sql.test.d.ts +2 -0
  203. package/lib/test/sql/sql.test.d.ts.map +1 -0
  204. package/lib/test/sql/sql.test.js +324 -0
  205. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts +2 -0
  206. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts.map +1 -0
  207. package/lib/test/stmt/failover/stmt2.failover.mock.test.js +341 -0
  208. package/lib/test/stmt/failover/stmt2.failover.test.d.ts +2 -0
  209. package/lib/test/stmt/failover/stmt2.failover.test.d.ts.map +1 -0
  210. package/lib/test/stmt/failover/stmt2.failover.test.js +384 -0
  211. package/lib/test/stmt/stmt1.func.test.d.ts +2 -0
  212. package/lib/test/stmt/stmt1.func.test.d.ts.map +1 -0
  213. package/lib/test/stmt/stmt1.func.test.js +418 -0
  214. package/lib/test/stmt/stmt1.type.test.d.ts +2 -0
  215. package/lib/test/stmt/stmt1.type.test.d.ts.map +1 -0
  216. package/lib/test/stmt/stmt1.type.test.js +399 -0
  217. package/lib/test/stmt/stmt2.failover.mock.test.d.ts +2 -0
  218. package/lib/test/stmt/stmt2.failover.mock.test.d.ts.map +1 -0
  219. package/lib/test/stmt/stmt2.failover.mock.test.js +341 -0
  220. package/lib/test/stmt/stmt2.failover.test.d.ts +2 -0
  221. package/lib/test/stmt/stmt2.failover.test.d.ts.map +1 -0
  222. package/lib/test/stmt/stmt2.failover.test.js +384 -0
  223. package/lib/test/stmt/stmt2.func.test.d.ts +2 -0
  224. package/lib/test/stmt/stmt2.func.test.d.ts.map +1 -0
  225. package/lib/test/stmt/stmt2.func.test.js +537 -0
  226. package/lib/test/stmt/stmt2.type.test.d.ts +2 -0
  227. package/lib/test/stmt/stmt2.type.test.d.ts.map +1 -0
  228. package/lib/test/stmt/stmt2.type.test.js +401 -0
  229. package/lib/test/stmt/v1/stmt1.func.test.d.ts +2 -0
  230. package/lib/test/stmt/v1/stmt1.func.test.d.ts.map +1 -0
  231. package/lib/test/stmt/v1/stmt1.func.test.js +418 -0
  232. package/lib/test/stmt/v1/stmt1.type.test.d.ts +2 -0
  233. package/lib/test/stmt/v1/stmt1.type.test.d.ts.map +1 -0
  234. package/lib/test/stmt/v1/stmt1.type.test.js +399 -0
  235. package/lib/test/stmt/v2/stmt2.func.test.d.ts +2 -0
  236. package/lib/test/stmt/v2/stmt2.func.test.d.ts.map +1 -0
  237. package/lib/test/stmt/v2/stmt2.func.test.js +537 -0
  238. package/lib/test/stmt/v2/stmt2.type.test.d.ts +2 -0
  239. package/lib/test/stmt/v2/stmt2.type.test.d.ts.map +1 -0
  240. package/lib/test/stmt/v2/stmt2.type.test.js +401 -0
  241. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts +2 -0
  242. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts.map +1 -0
  243. package/lib/test/tmq/cloud/cloud.tmq.test.js +84 -0
  244. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts +2 -0
  245. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts.map +1 -0
  246. package/lib/test/tmq/cloud/tmq.cloud.test.js +82 -0
  247. package/lib/test/tmq/core/tmq.config.test.d.ts +2 -0
  248. package/lib/test/tmq/core/tmq.config.test.d.ts.map +1 -0
  249. package/lib/test/tmq/core/tmq.config.test.js +83 -0
  250. package/lib/test/tmq/core/tmq.test.d.ts +2 -0
  251. package/lib/test/tmq/core/tmq.test.d.ts.map +1 -0
  252. package/lib/test/tmq/core/tmq.test.js +513 -0
  253. package/lib/test/tmq/failover/tmq.failover.test.d.ts +2 -0
  254. package/lib/test/tmq/failover/tmq.failover.test.d.ts.map +1 -0
  255. package/lib/test/tmq/failover/tmq.failover.test.js +404 -0
  256. package/lib/test/tmq/tmq.cloud.test.d.ts +2 -0
  257. package/lib/test/tmq/tmq.cloud.test.d.ts.map +1 -0
  258. package/lib/test/tmq/tmq.cloud.test.js +82 -0
  259. package/lib/test/tmq/tmq.config.test.d.ts +2 -0
  260. package/lib/test/tmq/tmq.config.test.d.ts.map +1 -0
  261. package/lib/test/tmq/tmq.config.test.js +94 -0
  262. package/lib/test/tmq/tmq.failover.test.d.ts +2 -0
  263. package/lib/test/tmq/tmq.failover.test.d.ts.map +1 -0
  264. package/lib/test/tmq/tmq.failover.test.js +404 -0
  265. package/lib/test/tmq/tmq.test.d.ts +2 -0
  266. package/lib/test/tmq/tmq.test.d.ts.map +1 -0
  267. package/lib/test/tmq/tmq.test.js +513 -0
  268. package/lib/test/unit/connectionManager.test.d.ts +2 -0
  269. package/lib/test/unit/connectionManager.test.d.ts.map +1 -0
  270. package/lib/test/unit/connectionManager.test.js +91 -0
  271. package/lib/test/utils.d.ts +4 -0
  272. package/lib/test/utils.d.ts.map +1 -1
  273. package/lib/test/utils.js +11 -17
  274. package/package.json +1 -1
  275. package/readme.md +2 -2
@@ -1,3 +1,4 @@
1
+ import { Dsn } from "../common/dsn";
1
2
  import { WebSocketConnector } from "./wsConnector";
2
3
  export declare class WebSocketConnectionPool {
3
4
  private static _instance?;
@@ -7,7 +8,10 @@ export declare class WebSocketConnectionPool {
7
8
  private static sharedArray;
8
9
  private constructor();
9
10
  static instance(maxConnections?: number): WebSocketConnectionPool;
10
- getConnection(url: URL, timeout: number | undefined | null): Promise<WebSocketConnector>;
11
+ private maskPoolKeyForLog;
12
+ private buildAuthScope;
13
+ private getPoolKey;
14
+ getConnection(dsn: Dsn, timeout: number | undefined | null): Promise<WebSocketConnector>;
11
15
  releaseConnection(connector: WebSocketConnector): Promise<void>;
12
16
  destroyed(): void;
13
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wsConnectorPool.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnectorPool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOnD,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAA0B;IACnD,OAAO,CAAC,IAAI,CAAgD;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoB;IAC/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAa;IAEvC,OAAO;WASO,QAAQ,CAClB,cAAc,GAAE,MAAW,GAC5B,uBAAuB;IASpB,aAAa,CACf,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GACnC,OAAO,CAAC,kBAAkB,CAAC;IA4DxB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrE,SAAS;CAmBZ"}
1
+ {"version":3,"file":"wsConnectorPool.d.ts","sourceRoot":"","sources":["../../../src/client/wsConnectorPool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,qBAAa,uBAAuB;IAChC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAA0B;IACnD,OAAO,CAAC,IAAI,CAAgD;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoB;IAC/C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAa;IAEvC,OAAO;WAOO,QAAQ,CAAC,cAAc,GAAE,MAAW,GAAG,uBAAuB;IAO5E,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,UAAU;IAUZ,aAAa,CACf,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GACnC,OAAO,CAAC,kBAAkB,CAAC;IA0DxB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrE,SAAS;CAiBZ"}
@@ -4,11 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.WebSocketConnectionPool = void 0;
7
+ const crypto_1 = require("crypto");
7
8
  const async_mutex_1 = require("async-mutex");
8
- const wsConnector_1 = require("./wsConnector");
9
9
  const wsError_1 = require("../common/wsError");
10
10
  const log_1 = __importDefault(require("../common/log"));
11
11
  const websocket_1 = require("websocket");
12
+ const wsConnector_1 = require("./wsConnector");
12
13
  const mutex = new async_mutex_1.Mutex();
13
14
  class WebSocketConnectionPool {
14
15
  constructor(maxConnections = -1) {
@@ -24,28 +25,50 @@ class WebSocketConnectionPool {
24
25
  }
25
26
  return WebSocketConnectionPool._instance;
26
27
  }
27
- async getConnection(url, timeout) {
28
- let connectAddr = url.origin.concat(url.pathname).concat(url.search);
28
+ maskPoolKeyForLog(poolKey) {
29
+ return poolKey.replace(/#auth=[^#]*/, "#auth=[REDACTED]");
30
+ }
31
+ buildAuthScope(dsn) {
32
+ const token = dsn.params.get("token") || "";
33
+ const bearerToken = dsn.params.get("bearer_token") || "";
34
+ const raw = JSON.stringify({
35
+ username: dsn.username,
36
+ password: dsn.password,
37
+ token,
38
+ bearerToken,
39
+ });
40
+ return (0, crypto_1.createHash)("sha256").update(raw).digest("hex");
41
+ }
42
+ getPoolKey(dsn) {
43
+ const addrs = [...dsn.addresses]
44
+ .sort((a, b) => `${a.host}:${a.port}`.localeCompare(`${b.host}:${b.port}`))
45
+ .map((addr) => `${addr.host}:${addr.port}`)
46
+ .join(",");
47
+ const auth = this.buildAuthScope(dsn);
48
+ const path = dsn.path();
49
+ return `${dsn.scheme}://${addrs}/${path}#auth=${auth}`;
50
+ }
51
+ async getConnection(dsn, timeout) {
52
+ const poolKey = this.getPoolKey(dsn);
53
+ const poolKeyForLog = this.maskPoolKeyForLog(poolKey);
29
54
  let connector;
30
55
  const unlock = await mutex.acquire();
31
56
  try {
32
- if (this.pool.has(connectAddr)) {
33
- const connectors = this.pool.get(connectAddr);
57
+ if (this.pool.has(poolKey)) {
58
+ const connectors = this.pool.get(poolKey);
34
59
  while (connectors && connectors.length > 0) {
35
60
  const candidate = connectors.pop();
36
61
  if (!candidate) {
37
62
  continue;
38
63
  }
39
- if (candidate &&
40
- candidate.readyState() === websocket_1.w3cwebsocket.OPEN) {
64
+ if (candidate.readyState() === websocket_1.w3cwebsocket.OPEN) {
65
+ candidate.refreshRetryConfig(dsn);
41
66
  connector = candidate;
42
67
  break;
43
68
  }
44
- else if (candidate) {
45
- Atomics.add(WebSocketConnectionPool.sharedArray, 0, -1);
46
- candidate.close();
47
- log_1.default.error(`getConnection, current connection status fail, url: ${connectAddr}`);
48
- }
69
+ Atomics.add(WebSocketConnectionPool.sharedArray, 0, -1);
70
+ candidate.close();
71
+ log_1.default.error("getConnection, current connection status fail, poolKey: " + poolKeyForLog);
49
72
  }
50
73
  }
51
74
  if (connector) {
@@ -54,54 +77,49 @@ class WebSocketConnectionPool {
54
77
  return connector;
55
78
  }
56
79
  if (this._maxConnections != -1 &&
57
- Atomics.load(WebSocketConnectionPool.sharedArray, 0) >
58
- this._maxConnections) {
80
+ Atomics.load(WebSocketConnectionPool.sharedArray, 0) > this._maxConnections) {
59
81
  throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WEBSOCKET_CONNECTION_ARRIVED_LIMIT, "websocket connect arrived limited:" +
60
82
  Atomics.load(WebSocketConnectionPool.sharedArray, 0));
61
83
  }
62
84
  Atomics.add(WebSocketConnectionPool.sharedArray, 0, 1);
63
- log_1.default.info("getConnection, new connection count:" +
64
- Atomics.load(WebSocketConnectionPool.sharedArray, 0) +
65
- ", connectAddr:" +
66
- connectAddr);
67
- return new wsConnector_1.WebSocketConnector(url, timeout);
85
+ if (log_1.default.isInfoEnabled()) {
86
+ log_1.default.info("getConnection, new connection count:" +
87
+ Atomics.load(WebSocketConnectionPool.sharedArray, 0) +
88
+ ", poolKey:" +
89
+ poolKeyForLog);
90
+ }
91
+ return new wsConnector_1.WebSocketConnector(dsn, poolKey, timeout);
68
92
  }
69
93
  finally {
70
94
  unlock();
71
95
  }
72
96
  }
73
97
  async releaseConnection(connector) {
74
- if (connector) {
75
- const unlock = await mutex.acquire();
76
- try {
77
- if (connector.readyState() === websocket_1.w3cwebsocket.OPEN) {
78
- let url = connector.getWsURL();
79
- let connectAddr = url.origin
80
- .concat(url.pathname)
81
- .concat(url.search);
82
- let connectors = this.pool.get(connectAddr);
83
- if (!connectors) {
84
- connectors = new Array();
85
- connectors.push(connector);
86
- this.pool.set(connectAddr, connectors);
87
- }
88
- else {
89
- connectors.push(connector);
90
- }
91
- log_1.default.info("releaseConnection, current connection count:" +
92
- connectors.length);
93
- }
94
- else {
95
- Atomics.add(WebSocketConnectionPool.sharedArray, 0, -1);
96
- connector.close();
97
- log_1.default.info("releaseConnection, current connection status fail:" +
98
- Atomics.load(WebSocketConnectionPool.sharedArray, 0));
98
+ if (!connector) {
99
+ return;
100
+ }
101
+ const unlock = await mutex.acquire();
102
+ try {
103
+ if (connector.readyState() === websocket_1.w3cwebsocket.OPEN) {
104
+ const poolKey = connector.getPoolKey();
105
+ let connectors = this.pool.get(poolKey);
106
+ if (!connectors) {
107
+ connectors = [];
108
+ this.pool.set(poolKey, connectors);
99
109
  }
110
+ connectors.push(connector);
111
+ log_1.default.info("releaseConnection, current connection count:" + connectors.length);
100
112
  }
101
- finally {
102
- unlock();
113
+ else {
114
+ Atomics.add(WebSocketConnectionPool.sharedArray, 0, -1);
115
+ connector.close();
116
+ log_1.default.info("releaseConnection, current connection status fail:" +
117
+ Atomics.load(WebSocketConnectionPool.sharedArray, 0));
103
118
  }
104
119
  }
120
+ finally {
121
+ unlock();
122
+ }
105
123
  }
106
124
  destroyed() {
107
125
  let num = 0;
@@ -113,10 +131,8 @@ class WebSocketConnectionPool {
113
131
  }
114
132
  }
115
133
  }
116
- log_1.default.info("destroyed connect:" +
117
- Atomics.load(WebSocketConnectionPool.sharedArray, 0) +
118
- " current count:" +
119
- num);
134
+ log_1.default.info("destroyed connect: " + Atomics.load(WebSocketConnectionPool.sharedArray, 0) +
135
+ ", current count:" + num);
120
136
  Atomics.store(WebSocketConnectionPool.sharedArray, 0, 0);
121
137
  this.pool = new Map();
122
138
  }
@@ -133,8 +149,7 @@ process.on("SIGINT", () => {
133
149
  process.exit();
134
150
  });
135
151
  process.on("SIGTERM", () => {
136
- log_1.default.info("Received SIGINT. Press Control-D to exit, begin destroy connect");
152
+ log_1.default.info("Received SIGTERM. Press Control-D to exit, begin destroy connect...");
137
153
  WebSocketConnectionPool.instance().destroyed();
138
154
  process.exit();
139
155
  });
140
- // process.kill(process.pid, 'SIGINT');
@@ -3,6 +3,7 @@ interface MessageId {
3
3
  req_id: bigint;
4
4
  id?: bigint;
5
5
  timeout?: number;
6
+ poolKey?: string;
6
7
  }
7
8
  export declare enum OnMessageType {
8
9
  MESSAGE_TYPE_ARRAYBUFFER = 1,
@@ -17,6 +18,8 @@ export declare class WsEventCallback {
17
18
  static instance(): WsEventCallback;
18
19
  registerCallback(id: MessageId, res: (args: unknown) => void, rej: (reason: any) => void): Promise<void>;
19
20
  handleEventCallback(msg: MessageId, messageType: OnMessageType, data: any): Promise<void>;
21
+ unregisterCallback(reqId: bigint): Promise<void>;
22
+ rejectCallbacksExceptReqIds(keepReqIds: Set<bigint>, error: Error, poolKey?: string): Promise<void>;
20
23
  }
21
24
  export {};
22
25
  //# sourceMappingURL=wsEventCallback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wsEventCallback.d.ts","sourceRoot":"","sources":["../../../src/client/wsEventCallback.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,oBAAY,aAAa;IACrB,wBAAwB,IAAI;IAC5B,iBAAiB,IAAI;IACrB,mBAAmB,IAAI;IACvB,uBAAuB,IAAI;CAC9B;AAGD,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CACnB;IACd,OAAO;WAEO,QAAQ,IAAI,eAAe;IAOnC,gBAAgB,CAClB,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAC5B,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI;IAwBxB,mBAAmB,CACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,aAAa,EAC1B,IAAI,EAAE,GAAG;CA0DhB"}
1
+ {"version":3,"file":"wsEventCallback.d.ts","sourceRoot":"","sources":["../../../src/client/wsEventCallback.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,oBAAY,aAAa;IACrB,wBAAwB,IAAI;IAC5B,iBAAiB,IAAI;IACrB,mBAAmB,IAAI;IACvB,uBAAuB,IAAI;CAC9B;AAID,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4C;IAE7E,OAAO;WAEO,QAAQ,IAAI,eAAe;IAOnC,gBAAgB,CAClB,EAAE,EAAE,SAAS,EACb,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,EAC5B,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI;IAkCxB,mBAAmB,CACrB,GAAG,EAAE,SAAS,EACd,WAAW,EAAE,aAAa,EAC1B,IAAI,EAAE,GAAG;IA+DP,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAehD,2BAA2B,CAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;CAyBnB"}
@@ -26,11 +26,25 @@ class WsEventCallback {
26
26
  async registerCallback(id, res, rej) {
27
27
  let release = await eventMutex.acquire();
28
28
  try {
29
+ const timer = setTimeout(async () => {
30
+ let removed = false;
31
+ const timeoutRelease = await eventMutex.acquire();
32
+ try {
33
+ removed = WsEventCallback._msgActionRegister.delete(id);
34
+ }
35
+ finally {
36
+ timeoutRelease();
37
+ }
38
+ if (!removed) {
39
+ return;
40
+ }
41
+ rej(new wsError_1.WebSocketQueryError(wsError_1.ErrorCode.ERR_WEBSOCKET_QUERY_TIMEOUT, `action:${id.action},req_id:${id.req_id} timeout with ${id.timeout} milliseconds`));
42
+ }, id.timeout);
29
43
  WsEventCallback._msgActionRegister.set(id, {
30
44
  sendTime: new Date().getTime(),
31
45
  reject: rej,
32
46
  resolve: res,
33
- timer: setTimeout(() => rej(new wsError_1.WebSocketQueryError(wsError_1.ErrorCode.ERR_WEBSOCKET_QUERY_TIMEOUT, `action:${id.action},req_id:${id.req_id} timeout with ${id.timeout} milliseconds`)), id.timeout),
47
+ timer,
34
48
  });
35
49
  }
36
50
  finally {
@@ -39,6 +53,7 @@ class WsEventCallback {
39
53
  }
40
54
  async handleEventCallback(msg, messageType, data) {
41
55
  let action = undefined;
56
+ let keyToDelete = undefined;
42
57
  let release = await eventMutex.acquire();
43
58
  log_1.default.debug(`HandleEventCallback get lock msg=${msg}, ${messageType}`);
44
59
  log_1.default.debug(WsEventCallback._msgActionRegister);
@@ -47,32 +62,36 @@ class WsEventCallback {
47
62
  if (messageType == OnMessageType.MESSAGE_TYPE_ARRAYBUFFER) {
48
63
  if (k.id == msg.id || k.req_id == msg.id) {
49
64
  action = v;
50
- WsEventCallback._msgActionRegister.delete(k);
65
+ keyToDelete = k;
51
66
  break;
52
67
  }
53
68
  }
54
69
  else if (messageType == OnMessageType.MESSAGE_TYPE_BLOB) {
55
70
  if (k.id == msg.id || k.req_id == msg.id) {
56
71
  action = v;
57
- WsEventCallback._msgActionRegister.delete(k);
72
+ keyToDelete = k;
58
73
  break;
59
74
  }
60
75
  }
61
76
  else if (messageType == OnMessageType.MESSAGE_TYPE_STRING) {
62
77
  if (k.req_id == msg.req_id && k.action == msg.action) {
63
78
  action = v;
64
- WsEventCallback._msgActionRegister.delete(k);
79
+ keyToDelete = k;
65
80
  break;
66
81
  }
67
82
  }
68
83
  else if (messageType == OnMessageType.MESSAGE_TYPE_CONNECTION) {
69
84
  if (k.req_id == msg.req_id && k.action == msg.action) {
70
85
  action = v;
71
- WsEventCallback._msgActionRegister.delete(k);
86
+ keyToDelete = k;
72
87
  break;
73
88
  }
74
89
  }
75
90
  }
91
+ if (action && keyToDelete) {
92
+ clearTimeout(action.timer);
93
+ WsEventCallback._msgActionRegister.delete(keyToDelete);
94
+ }
76
95
  }
77
96
  finally {
78
97
  release();
@@ -86,13 +105,53 @@ class WsEventCallback {
86
105
  action.resolve(resp);
87
106
  }
88
107
  else {
89
- log_1.default.error("no find callback msg:=", msg);
90
- throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WS_NO_CALLBACK, "no callback registered for fetch_block with req_id=" +
108
+ log_1.default.error("no find callback msg: ", msg);
109
+ throw new wsError_1.TDWebSocketClientError(wsError_1.ErrorCode.ERR_WS_NO_CALLBACK, "no callback registered with req_id: " +
91
110
  msg.req_id +
92
- " action" +
111
+ ", action: " +
93
112
  msg.action);
94
113
  }
95
114
  }
115
+ async unregisterCallback(reqId) {
116
+ const release = await eventMutex.acquire();
117
+ try {
118
+ for (let [k, v] of WsEventCallback._msgActionRegister) {
119
+ if (k.req_id === reqId || k.id === reqId) {
120
+ clearTimeout(v.timer);
121
+ WsEventCallback._msgActionRegister.delete(k);
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ finally {
127
+ release();
128
+ }
129
+ }
130
+ async rejectCallbacksExceptReqIds(keepReqIds, error, poolKey) {
131
+ const toReject = [];
132
+ const release = await eventMutex.acquire();
133
+ try {
134
+ for (const [k, v] of WsEventCallback._msgActionRegister) {
135
+ if (poolKey !== undefined && k.poolKey !== poolKey) {
136
+ continue;
137
+ }
138
+ const keepByReqId = keepReqIds.has(k.req_id);
139
+ const keepByCallbackId = k.id !== undefined && keepReqIds.has(k.id);
140
+ if (keepByReqId || keepByCallbackId) {
141
+ continue;
142
+ }
143
+ clearTimeout(v.timer);
144
+ WsEventCallback._msgActionRegister.delete(k);
145
+ toReject.push(v.reject);
146
+ }
147
+ }
148
+ finally {
149
+ release();
150
+ }
151
+ for (const reject of toReject) {
152
+ reject(error);
153
+ }
154
+ }
96
155
  }
97
156
  exports.WsEventCallback = WsEventCallback;
98
157
  WsEventCallback._msgActionRegister = new Map();
@@ -1,6 +1,3 @@
1
- /**
2
- * define ws Response type|class, for query?
3
- */
4
1
  import { MessageResp } from "../common/taosResult";
5
2
  export declare class WSVersionResponse {
6
3
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"wsResponse.d.ts","sourceRoot":"","sources":["../../../src/client/wsResponse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;gBACN,IAAI,EAAE,WAAW;CAOhC;AAED,qBAAa,eAAe;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEP,IAAI,EAAE,WAAW;IAI7B,OAAO,CAAC,OAAO;CA0BlB;AAED,qBAAa,oBAAoB;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;gBACb,GAAG,EAAE,WAAW;CA+B/B"}
1
+ {"version":3,"file":"wsResponse.d.ts","sourceRoot":"","sources":["../../../src/client/wsResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAEhE,qBAAa,iBAAiB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;gBAEN,IAAI,EAAE,WAAW;CAOhC;AAED,qBAAa,eAAe;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEP,IAAI,EAAE,WAAW;IAK7B,OAAO,CAAC,OAAO;CA0BlB;AAED,qBAAa,oBAAoB;IAC7B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;gBAEb,GAAG,EAAE,WAAW;CA+B/B"}
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- /**
3
- * define ws Response type|class, for query?
4
- */
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.WSFetchBlockResponse = exports.WSQueryResponse = exports.WSVersionResponse = void 0;
7
4
  const taosResult_1 = require("../common/taosResult");
@@ -0,0 +1,11 @@
1
+ import { Address } from "./dsn";
2
+ export declare class AddressConnectionTracker {
3
+ private static _instance;
4
+ private _counts;
5
+ static instance(): AddressConnectionTracker;
6
+ increment(address: string): void;
7
+ decrement(address: string): void;
8
+ selectLeastConnected(addresses: Address[]): number;
9
+ getCount(address: string): number;
10
+ }
11
+ //# sourceMappingURL=addressConnectionTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressConnectionTracker.d.ts","sourceRoot":"","sources":["../../../src/common/addressConnectionTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,qBAAa,wBAAwB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS,CAA2B;IACnD,OAAO,CAAC,OAAO,CAAkC;IAEjD,MAAM,CAAC,QAAQ,IAAI,wBAAwB;IAO3C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKhC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAShC,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM;IA6BlD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGpC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddressConnectionTracker = void 0;
4
+ class AddressConnectionTracker {
5
+ constructor() {
6
+ this._counts = new Map();
7
+ }
8
+ static instance() {
9
+ if (!AddressConnectionTracker._instance) {
10
+ AddressConnectionTracker._instance = new AddressConnectionTracker();
11
+ }
12
+ return AddressConnectionTracker._instance;
13
+ }
14
+ increment(address) {
15
+ const current = this.getCount(address);
16
+ this._counts.set(address, current + 1);
17
+ }
18
+ decrement(address) {
19
+ const current = this.getCount(address);
20
+ if (current <= 1) {
21
+ this._counts.delete(address);
22
+ return;
23
+ }
24
+ this._counts.set(address, current - 1);
25
+ }
26
+ selectLeastConnected(addresses) {
27
+ if (addresses.length === 0) {
28
+ return 0;
29
+ }
30
+ let minCount = Number.MAX_SAFE_INTEGER;
31
+ const candidateIndexes = [];
32
+ for (let i = 0; i < addresses.length; i++) {
33
+ const addr = addresses[i];
34
+ const key = `${addr.host}:${addr.port}`;
35
+ const count = this.getCount(key);
36
+ if (count < minCount) {
37
+ minCount = count;
38
+ candidateIndexes.length = 0;
39
+ candidateIndexes.push(i);
40
+ continue;
41
+ }
42
+ if (count === minCount) {
43
+ candidateIndexes.push(i);
44
+ }
45
+ }
46
+ const selected = Math.floor(Math.random() * candidateIndexes.length);
47
+ return candidateIndexes[selected];
48
+ }
49
+ getCount(address) {
50
+ return this._counts.get(address) ?? 0;
51
+ }
52
+ }
53
+ exports.AddressConnectionTracker = AddressConnectionTracker;
@@ -7,6 +7,7 @@ export declare class WSConfig {
7
7
  private _token;
8
8
  private _timezone;
9
9
  private _minStmt2Version;
10
+ private _bearerToken;
10
11
  constructor(url: string, minStmt2Version?: string);
11
12
  getToken(): string | undefined | null;
12
13
  setToken(token: string): void;
@@ -22,6 +23,8 @@ export declare class WSConfig {
22
23
  setTimeOut(ms: number): void;
23
24
  getTimezone(): string | undefined | null;
24
25
  setTimezone(timezone: string): void;
26
+ getBearerToken(): string | undefined | null;
27
+ setBearerToken(token: string): void;
25
28
  getMinStmt2Version(): string;
26
29
  }
27
30
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;IACjB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,gBAAgB,CAAS;gBAErB,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM;IAS1C,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIpC,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,MAAM,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAInC,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlC,KAAK,CAAC,EAAE,EAAE,MAAM;IAIhB,MAAM,IAAI,MAAM;IAIhB,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIvC,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,WAAW,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIxC,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,kBAAkB;CAG5B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/common/config.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;IACjB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM;IAS1C,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIrC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,OAAO,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIpC,OAAO,CAAC,IAAI,EAAE,MAAM;IAIpB,MAAM,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAInC,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIlC,KAAK,CAAC,EAAE,EAAE,MAAM;IAIhB,MAAM,IAAI,MAAM;IAIhB,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,UAAU,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIvC,UAAU,CAAC,EAAE,EAAE,MAAM;IAIrB,WAAW,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAIxC,WAAW,CAAC,QAAQ,EAAE,MAAM;IAI5B,cAAc,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI;IAI3C,cAAc,CAAC,KAAK,EAAE,MAAM;IAI5B,kBAAkB;CAG5B"}
@@ -54,6 +54,12 @@ class WSConfig {
54
54
  setTimezone(timezone) {
55
55
  this._timezone = timezone;
56
56
  }
57
+ getBearerToken() {
58
+ return this._bearerToken;
59
+ }
60
+ setBearerToken(token) {
61
+ this._bearerToken = token;
62
+ }
57
63
  getMinStmt2Version() {
58
64
  return this._minStmt2Version;
59
65
  }
@@ -7,6 +7,7 @@ export interface StringIndexable {
7
7
  export interface NumberIndexable {
8
8
  [index: number]: number;
9
9
  }
10
+ export declare const ConnectorInfo: string;
10
11
  export declare const BinaryQueryMessage: bigint;
11
12
  export declare const FetchRawBlockMessage: bigint;
12
13
  export declare const MinStmt2Version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/common/constant.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,EAAE,MAAkB,CAAC;AACtD,eAAO,MAAM,eAAe,EAAE,MAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,EAAE,eAmB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAM9B,CAAC;AAEF,oBAAY,gBAAgB;IACxB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;IACV,KAAK,IAAI;IACT,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,KAAK,KAAK;IACV,gBAAgB,KAAK;IACrB,iBAAiB,KAAK;IACtB,YAAY,KAAK;IACjB,eAAe,KAAK;IACpB,IAAI,KAAK;IACT,SAAS,KAAK;IACd,OAAO,KAAK;IACZ,QAAQ,KAAK;IACb,SAAS,KAAK;CACjB;AAED,oBAAY,sBAAsB;IAC9B,8BAA8B,IAAA,CAAG,qDAAqD;IACtF,+BAA+B,IAAA,CAAE,sDAAsD;IACvF,8BAA8B,IAAA,CAAG,UAAU;IAC3C,+BAA+B,IAAA;CAClC;AAED,oBAAY,aAAa;IACrB,cAAc,IAAI;IAClB,cAAc,IAAI;IAClB,gBAAgB,IAAI;IACpB,iBAAiB,IAAI;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAahC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAI7B,CAAC"}
1
+ {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../../src/common/constant.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,aAAa,QAAsC,CAAC;AACjE,eAAO,MAAM,kBAAkB,EAAE,MAAkB,CAAC;AACpD,eAAO,MAAM,oBAAoB,EAAE,MAAkB,CAAC;AACtD,eAAO,MAAM,eAAe,EAAE,MAAkB,CAAC;AACjD,eAAO,MAAM,gBAAgB,EAAE,eAmB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAM9B,CAAC;AAEF,oBAAY,gBAAgB;IACxB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,GAAG,IAAI;IACP,MAAM,IAAI;IACV,KAAK,IAAI;IACT,MAAM,IAAI;IACV,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,KAAK,KAAK;IACV,gBAAgB,KAAK;IACrB,iBAAiB,KAAK;IACtB,YAAY,KAAK;IACjB,eAAe,KAAK;IACpB,IAAI,KAAK;IACT,SAAS,KAAK;IACd,OAAO,KAAK;IACZ,QAAQ,KAAK;IACb,SAAS,KAAK;CACjB;AAED,oBAAY,sBAAsB;IAC9B,8BAA8B,IAAA,CAAG,qDAAqD;IACtF,+BAA+B,IAAA,CAAE,sDAAsD;IACvF,8BAA8B,IAAA,CAAG,UAAU;IAC3C,+BAA+B,IAAA;CAClC;AAED,oBAAY,aAAa;IACrB,cAAc,IAAI;IAClB,cAAc,IAAI;IAClB,gBAAgB,IAAI;IACpB,iBAAiB,IAAI;CACxB;AAED,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAahC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAI7B,CAAC"}
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrecisionLength = exports.TDengineTypeLength = exports.TDenginePrecision = exports.FieldBindType = exports.TSDB_OPTION_CONNECTION = exports.TDengineTypeCode = exports.ColumnsBlockType = exports.TDengineTypeName = exports.MinStmt2Version = exports.FetchRawBlockMessage = exports.BinaryQueryMessage = void 0;
6
+ exports.PrecisionLength = exports.TDengineTypeLength = exports.TDenginePrecision = exports.FieldBindType = exports.TSDB_OPTION_CONNECTION = exports.TDengineTypeCode = exports.ColumnsBlockType = exports.TDengineTypeName = exports.MinStmt2Version = exports.FetchRawBlockMessage = exports.BinaryQueryMessage = exports.ConnectorInfo = void 0;
7
+ const package_json_1 = __importDefault(require("../../package.json"));
8
+ exports.ConnectorInfo = `nodejs-ws-v${package_json_1.default.version}-ncid000`;
4
9
  exports.BinaryQueryMessage = BigInt(6);
5
10
  exports.FetchRawBlockMessage = BigInt(7);
6
11
  exports.MinStmt2Version = "3.3.6.0";
@@ -0,0 +1,30 @@
1
+ export type WebSocketEndpoint = "sql" | "tmq";
2
+ export declare const WS_SQL_ENDPOINT: WebSocketEndpoint;
3
+ export declare const WS_TMQ_ENDPOINT: WebSocketEndpoint;
4
+ export declare class Address {
5
+ host: string;
6
+ port: number;
7
+ constructor(host: string, port: number);
8
+ }
9
+ export declare class Dsn {
10
+ scheme: string;
11
+ username: string;
12
+ password: string;
13
+ addresses: Address[];
14
+ database: string;
15
+ params: Map<string, string>;
16
+ endpoint: WebSocketEndpoint;
17
+ constructor(scheme: string, username: string, password: string, addresses: Address[], database: string, params: Map<string, string>, endpoint?: WebSocketEndpoint);
18
+ toString(): string;
19
+ path(): string;
20
+ }
21
+ /**
22
+ * Parse a multi-host TDengine WebSocket URL.
23
+ * Format: ws://username:password@host1:port1,host2:port2,[::1]:port3/db?key=value
24
+ */
25
+ export declare function parse(url: string): Dsn;
26
+ export declare const DEFAULT_PORT = 6041;
27
+ export declare const CLOUD_DEFAULT_PORT = 443;
28
+ export declare function isCloudServiceHost(host: string): boolean;
29
+ export declare function getDefaultPortForHost(host: string): number;
30
+ //# sourceMappingURL=dsn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsn.d.ts","sourceRoot":"","sources":["../../../src/common/dsn.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9C,eAAO,MAAM,eAAe,EAAE,iBAAyB,CAAC;AACxD,eAAO,MAAM,eAAe,EAAE,iBAAyB,CAAC;AAKxD,qBAAa,OAAO;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAIzC;AAaD,qBAAa,GAAG;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;gBAGxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,GAAE,iBAAmC;IAajD,QAAQ,IAAI,MAAM;IAiBlB,IAAI,IAAI,MAAM;CAGjB;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAoGtC;AAED,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D"}