@ultipa-graph/ultipa-driver 5.1.5-s5.2 → 6.0.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 (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/client.d.ts +194 -0
  4. package/dist/client.js +390 -0
  5. package/dist/config.d.ts +65 -0
  6. package/dist/config.js +135 -0
  7. package/dist/connection.d.ts +30 -0
  8. package/dist/connection.js +190 -0
  9. package/dist/errors.d.ts +99 -0
  10. package/dist/errors.js +237 -0
  11. package/dist/index.d.ts +14 -5
  12. package/dist/index.js +88 -39
  13. package/dist/printers.d.ts +33 -0
  14. package/dist/printers.js +312 -0
  15. package/dist/proto/gqldb.proto +632 -0
  16. package/dist/response.d.ts +256 -0
  17. package/dist/response.js +723 -0
  18. package/dist/services/admin-service.d.ts +40 -0
  19. package/dist/services/admin-service.js +115 -0
  20. package/dist/services/bulk-import-service.d.ts +35 -0
  21. package/dist/services/bulk-import-service.js +108 -0
  22. package/dist/services/converters.d.ts +57 -0
  23. package/dist/services/converters.js +254 -0
  24. package/dist/services/data-service.d.ts +44 -0
  25. package/dist/services/data-service.js +206 -0
  26. package/dist/services/graph-service.d.ts +32 -0
  27. package/dist/services/graph-service.js +127 -0
  28. package/dist/services/health-service.d.ts +50 -0
  29. package/dist/services/health-service.js +78 -0
  30. package/dist/services/index.d.ts +13 -0
  31. package/dist/services/index.js +30 -0
  32. package/dist/services/query-service.d.ts +39 -0
  33. package/dist/services/query-service.js +112 -0
  34. package/dist/services/service-context.d.ts +39 -0
  35. package/dist/services/service-context.js +73 -0
  36. package/dist/services/session-service.d.ts +24 -0
  37. package/dist/services/session-service.js +66 -0
  38. package/dist/services/transaction-service.d.ts +33 -0
  39. package/dist/services/transaction-service.js +100 -0
  40. package/dist/services.d.ts +28 -0
  41. package/dist/services.js +122 -0
  42. package/dist/session.d.ts +45 -0
  43. package/dist/session.js +75 -0
  44. package/dist/transaction.d.ts +42 -0
  45. package/dist/transaction.js +89 -0
  46. package/dist/types/bulk_import.d.ts +53 -0
  47. package/dist/types/bulk_import.js +6 -0
  48. package/dist/types/data_types.d.ts +116 -0
  49. package/dist/types/data_types.js +122 -0
  50. package/dist/types/enums.d.ts +59 -0
  51. package/dist/types/enums.js +67 -0
  52. package/dist/types/graph_models.d.ts +54 -0
  53. package/dist/types/graph_models.js +6 -0
  54. package/dist/types/index.d.ts +11 -5
  55. package/dist/types/index.js +36 -37
  56. package/dist/types/metadata.d.ts +60 -0
  57. package/dist/types/metadata.js +6 -0
  58. package/dist/types/schema.d.ts +31 -0
  59. package/dist/types/schema.js +6 -0
  60. package/dist/types/typed_value.d.ts +25 -0
  61. package/dist/types/typed_value.js +1176 -0
  62. package/dist/types/wrappers.d.ts +23 -0
  63. package/dist/types/wrappers.js +39 -0
  64. package/dist/types.d.ts +7 -0
  65. package/dist/types.js +24 -0
  66. package/package.json +49 -62
  67. package/dist/connection/connection.final.d.ts +0 -14
  68. package/dist/connection/connection.final.js +0 -94
  69. package/dist/connection/connection.final.js.map +0 -1
  70. package/dist/connection/connection.pool.d.ts +0 -21
  71. package/dist/connection/connection.pool.js +0 -103
  72. package/dist/connection/connection.pool.js.map +0 -1
  73. package/dist/connection/extra/algos/algo.extra.d.ts +0 -34
  74. package/dist/connection/extra/algos/algo.extra.js +0 -69
  75. package/dist/connection/extra/algos/algo.extra.js.map +0 -1
  76. package/dist/connection/extra/algos/algo.utils.d.ts +0 -3
  77. package/dist/connection/extra/algos/algo.utils.js +0 -54
  78. package/dist/connection/extra/algos/algo.utils.js.map +0 -1
  79. package/dist/connection/extra/algos/community.d.ts +0 -27
  80. package/dist/connection/extra/algos/community.js +0 -76
  81. package/dist/connection/extra/algos/community.js.map +0 -1
  82. package/dist/connection/extra/algos/degrees.d.ts +0 -10
  83. package/dist/connection/extra/algos/degrees.js +0 -24
  84. package/dist/connection/extra/algos/degrees.js.map +0 -1
  85. package/dist/connection/extra/algos/embedding.d.ts +0 -13
  86. package/dist/connection/extra/algos/embedding.js +0 -33
  87. package/dist/connection/extra/algos/embedding.js.map +0 -1
  88. package/dist/connection/extra/algos/index.d.ts +0 -5
  89. package/dist/connection/extra/algos/index.js +0 -14
  90. package/dist/connection/extra/algos/index.js.map +0 -1
  91. package/dist/connection/extra/base.extra.d.ts +0 -18
  92. package/dist/connection/extra/base.extra.js +0 -111
  93. package/dist/connection/extra/base.extra.js.map +0 -1
  94. package/dist/connection/extra/batch.insert.extra.d.ts +0 -58
  95. package/dist/connection/extra/batch.insert.extra.js +0 -354
  96. package/dist/connection/extra/batch.insert.extra.js.map +0 -1
  97. package/dist/connection/extra/connection.base.d.ts +0 -112
  98. package/dist/connection/extra/connection.base.js +0 -530
  99. package/dist/connection/extra/connection.base.js.map +0 -1
  100. package/dist/connection/extra/connection.d.ts +0 -17
  101. package/dist/connection/extra/connection.js +0 -44
  102. package/dist/connection/extra/connection.js.map +0 -1
  103. package/dist/connection/extra/graph.extra.d.ts +0 -54
  104. package/dist/connection/extra/graph.extra.js +0 -151
  105. package/dist/connection/extra/graph.extra.js.map +0 -1
  106. package/dist/connection/extra/hdc.extra.d.ts +0 -89
  107. package/dist/connection/extra/hdc.extra.js +0 -322
  108. package/dist/connection/extra/hdc.extra.js.map +0 -1
  109. package/dist/connection/extra/index.extra.d.ts +0 -102
  110. package/dist/connection/extra/index.extra.js +0 -210
  111. package/dist/connection/extra/index.extra.js.map +0 -1
  112. package/dist/connection/extra/job.extra.d.ts +0 -32
  113. package/dist/connection/extra/job.extra.js +0 -122
  114. package/dist/connection/extra/job.extra.js.map +0 -1
  115. package/dist/connection/extra/meta.extra.d.ts +0 -36
  116. package/dist/connection/extra/meta.extra.js +0 -123
  117. package/dist/connection/extra/meta.extra.js.map +0 -1
  118. package/dist/connection/extra/policy.extra.d.ts +0 -32
  119. package/dist/connection/extra/policy.extra.js +0 -114
  120. package/dist/connection/extra/policy.extra.js.map +0 -1
  121. package/dist/connection/extra/privilege.extra.d.ts +0 -8
  122. package/dist/connection/extra/privilege.extra.js +0 -20
  123. package/dist/connection/extra/privilege.extra.js.map +0 -1
  124. package/dist/connection/extra/property.extra.d.ts +0 -66
  125. package/dist/connection/extra/property.extra.js +0 -190
  126. package/dist/connection/extra/property.extra.js.map +0 -1
  127. package/dist/connection/extra/schema.extra.d.ts +0 -108
  128. package/dist/connection/extra/schema.extra.js +0 -253
  129. package/dist/connection/extra/schema.extra.js.map +0 -1
  130. package/dist/connection/extra/search.extra.d.ts +0 -12
  131. package/dist/connection/extra/search.extra.js +0 -117
  132. package/dist/connection/extra/search.extra.js.map +0 -1
  133. package/dist/connection/extra/task.extra.d.ts +0 -24
  134. package/dist/connection/extra/task.extra.js +0 -107
  135. package/dist/connection/extra/task.extra.js.map +0 -1
  136. package/dist/connection/extra/user.extra.d.ts +0 -28
  137. package/dist/connection/extra/user.extra.js +0 -91
  138. package/dist/connection/extra/user.extra.js.map +0 -1
  139. package/dist/connection/extra/user.privilege.extra.d.ts +0 -64
  140. package/dist/connection/extra/user.privilege.extra.js +0 -273
  141. package/dist/connection/extra/user.privilege.extra.js.map +0 -1
  142. package/dist/connection/index.d.ts +0 -5
  143. package/dist/connection/index.js +0 -13
  144. package/dist/connection/index.js.map +0 -1
  145. package/dist/connection/network.manager.d.ts +0 -28
  146. package/dist/connection/network.manager.js +0 -179
  147. package/dist/connection/network.manager.js.map +0 -1
  148. package/dist/index.js.map +0 -1
  149. package/dist/printers/alias.d.ts +0 -2
  150. package/dist/printers/alias.js +0 -39
  151. package/dist/printers/alias.js.map +0 -1
  152. package/dist/printers/any.d.ts +0 -2
  153. package/dist/printers/any.js +0 -63
  154. package/dist/printers/any.js.map +0 -1
  155. package/dist/printers/array.aio.d.ts +0 -3
  156. package/dist/printers/array.aio.js +0 -259
  157. package/dist/printers/array.aio.js.map +0 -1
  158. package/dist/printers/common.d.ts +0 -0
  159. package/dist/printers/common.js +0 -1
  160. package/dist/printers/common.js.map +0 -1
  161. package/dist/printers/edge.d.ts +0 -5
  162. package/dist/printers/edge.js +0 -78
  163. package/dist/printers/edge.js.map +0 -1
  164. package/dist/printers/explain.plan.d.ts +0 -2
  165. package/dist/printers/explain.plan.js +0 -46
  166. package/dist/printers/explain.plan.js.map +0 -1
  167. package/dist/printers/index.d.ts +0 -24
  168. package/dist/printers/index.js +0 -43
  169. package/dist/printers/index.js.map +0 -1
  170. package/dist/printers/node.d.ts +0 -5
  171. package/dist/printers/node.js +0 -77
  172. package/dist/printers/node.js.map +0 -1
  173. package/dist/printers/path.d.ts +0 -3
  174. package/dist/printers/path.js +0 -62
  175. package/dist/printers/path.js.map +0 -1
  176. package/dist/printers/status.d.ts +0 -3
  177. package/dist/printers/status.js +0 -68
  178. package/dist/printers/status.js.map +0 -1
  179. package/dist/printers/table.d.ts +0 -2
  180. package/dist/printers/table.js +0 -56
  181. package/dist/printers/table.js.map +0 -1
  182. package/dist/proto/tmp.js +0 -366
  183. package/dist/proto/ultipa_grpc_pb.d.ts +0 -258
  184. package/dist/proto/ultipa_grpc_pb.js +0 -366
  185. package/dist/proto/ultipa_grpc_pb.js.map +0 -1
  186. package/dist/proto/ultipa_pb.d.ts +0 -1
  187. package/dist/proto/ultipa_pb.js +0 -12119
  188. package/dist/proto/ultipa_pb.js.map +0 -1
  189. package/dist/types/index.js.map +0 -1
  190. package/dist/types/types.algos.params.d.ts +0 -545
  191. package/dist/types/types.algos.params.js +0 -16
  192. package/dist/types/types.algos.params.js.map +0 -1
  193. package/dist/types/types.d.ts +0 -1214
  194. package/dist/types/types.extra.d.ts +0 -146
  195. package/dist/types/types.extra.js +0 -27
  196. package/dist/types/types.extra.js.map +0 -1
  197. package/dist/types/types.js +0 -1606
  198. package/dist/types/types.js.map +0 -1
  199. package/dist/types/util.d.ts +0 -15
  200. package/dist/types/util.js +0 -136
  201. package/dist/types/util.js.map +0 -1
  202. package/dist/utils/common.d.ts +0 -3
  203. package/dist/utils/common.js +0 -22
  204. package/dist/utils/common.js.map +0 -1
  205. package/dist/utils/config.d.ts +0 -3
  206. package/dist/utils/config.js +0 -7
  207. package/dist/utils/config.js.map +0 -1
  208. package/dist/utils/format.d.ts +0 -45
  209. package/dist/utils/format.js +0 -879
  210. package/dist/utils/format.js.map +0 -1
  211. package/dist/utils/index.d.ts +0 -10
  212. package/dist/utils/index.js +0 -30
  213. package/dist/utils/index.js.map +0 -1
  214. package/dist/utils/params.validate.d.ts +0 -4
  215. package/dist/utils/params.validate.js +0 -14
  216. package/dist/utils/params.validate.js.map +0 -1
  217. package/dist/utils/property.d.ts +0 -24
  218. package/dist/utils/property.js +0 -203
  219. package/dist/utils/property.js.map +0 -1
  220. package/dist/utils/raft.retry.d.ts +0 -0
  221. package/dist/utils/raft.retry.js +0 -1
  222. package/dist/utils/raft.retry.js.map +0 -1
  223. package/dist/utils/serialize/commont.d.ts +0 -12
  224. package/dist/utils/serialize/commont.js +0 -46
  225. package/dist/utils/serialize/commont.js.map +0 -1
  226. package/dist/utils/serialize/deserialize.d.ts +0 -10
  227. package/dist/utils/serialize/deserialize.js +0 -288
  228. package/dist/utils/serialize/deserialize.js.map +0 -1
  229. package/dist/utils/serialize/null.d.ts +0 -32
  230. package/dist/utils/serialize/null.js +0 -178
  231. package/dist/utils/serialize/null.js.map +0 -1
  232. package/dist/utils/serialize/serialize.d.ts +0 -10
  233. package/dist/utils/serialize/serialize.js +0 -146
  234. package/dist/utils/serialize/serialize.js.map +0 -1
  235. package/dist/utils/stream.helper.d.ts +0 -10
  236. package/dist/utils/stream.helper.js +0 -71
  237. package/dist/utils/stream.helper.js.map +0 -1
  238. package/dist/utils/time.record.d.ts +0 -15
  239. package/dist/utils/time.record.js +0 -52
  240. package/dist/utils/time.record.js.map +0 -1
  241. package/dist/utils/timezone.d.ts +0 -7
  242. package/dist/utils/timezone.js +0 -21
  243. package/dist/utils/timezone.js.map +0 -1
  244. package/dist/utils/ultipa.datetime.d.ts +0 -14
  245. package/dist/utils/ultipa.datetime.js +0 -160
  246. package/dist/utils/ultipa.datetime.js.map +0 -1
  247. package/dist/utils/uql-maker.d.ts +0 -165
  248. package/dist/utils/uql-maker.js +0 -402
  249. package/dist/utils/uql-maker.js.map +0 -1
  250. package/dist/utils/uql.parse.d.ts +0 -27
  251. package/dist/utils/uql.parse.js +0 -205
  252. package/dist/utils/uql.parse.js.map +0 -1
  253. package/readme.md +0 -65
  254. package/src/proto/build.sh +0 -41
  255. package/src/proto/build_windows.sh +0 -40
  256. package/src/proto/ultipa.proto +0 -531
  257. package/src/proto/ultipa_grpc_pb.d.ts +0 -92
  258. package/src/proto/ultipa_grpc_pb.js +0 -414
  259. package/src/proto/ultipa_pb.d.ts +0 -1983
  260. package/src/proto/ultipa_pb.js +0 -14852
package/dist/config.js ADDED
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration for GQLDB Node.js driver.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfigBuilder = exports.DEFAULT_CONFIG = void 0;
7
+ exports.validateConfig = validateConfig;
8
+ exports.createConfig = createConfig;
9
+ /** Default configuration values */
10
+ exports.DEFAULT_CONFIG = {
11
+ hosts: ['localhost:9000'],
12
+ timeout: 30000, // 30 seconds (in milliseconds)
13
+ maxRecvSize: 64 * 1024 * 1024, // 64MB
14
+ poolSize: 10,
15
+ healthCheckInterval: 30000, // 30 seconds (in milliseconds)
16
+ retryCount: 3,
17
+ retryDelay: 100, // 100ms
18
+ };
19
+ /** Builder for creating GqldbConfig */
20
+ class ConfigBuilder {
21
+ config = {};
22
+ /** Set the server hosts */
23
+ hosts(...hosts) {
24
+ this.config.hosts = hosts;
25
+ return this;
26
+ }
27
+ /** Set the username for authentication */
28
+ username(username) {
29
+ this.config.username = username;
30
+ return this;
31
+ }
32
+ /** Set the password for authentication */
33
+ password(password) {
34
+ this.config.password = password;
35
+ return this;
36
+ }
37
+ /** Set the default graph */
38
+ defaultGraph(graph) {
39
+ this.config.defaultGraph = graph;
40
+ return this;
41
+ }
42
+ /** Set the query timeout in milliseconds */
43
+ timeout(ms) {
44
+ this.config.timeout = ms;
45
+ return this;
46
+ }
47
+ /** Set the query timeout in seconds (convenience method) */
48
+ timeoutSeconds(seconds) {
49
+ this.config.timeout = seconds * 1000;
50
+ return this;
51
+ }
52
+ /** Set the maximum receive message size */
53
+ maxRecvSize(bytes) {
54
+ this.config.maxRecvSize = bytes;
55
+ return this;
56
+ }
57
+ /** Set TLS options */
58
+ tls(options) {
59
+ this.config.tlsOptions = options;
60
+ return this;
61
+ }
62
+ /** Set the connection pool size per host */
63
+ poolSize(size) {
64
+ this.config.poolSize = size;
65
+ return this;
66
+ }
67
+ /** Set the health check interval in milliseconds */
68
+ healthCheckInterval(ms) {
69
+ this.config.healthCheckInterval = ms;
70
+ return this;
71
+ }
72
+ /** Set the number of retries */
73
+ retryCount(count) {
74
+ this.config.retryCount = count;
75
+ return this;
76
+ }
77
+ /** Set the delay between retries in milliseconds */
78
+ retryDelay(ms) {
79
+ this.config.retryDelay = ms;
80
+ return this;
81
+ }
82
+ /** Build and return the configuration */
83
+ build() {
84
+ const config = {
85
+ hosts: this.config.hosts ?? exports.DEFAULT_CONFIG.hosts,
86
+ username: this.config.username,
87
+ password: this.config.password,
88
+ defaultGraph: this.config.defaultGraph,
89
+ timeout: this.config.timeout ?? exports.DEFAULT_CONFIG.timeout,
90
+ maxRecvSize: this.config.maxRecvSize ?? exports.DEFAULT_CONFIG.maxRecvSize,
91
+ tlsOptions: this.config.tlsOptions,
92
+ poolSize: this.config.poolSize ?? exports.DEFAULT_CONFIG.poolSize,
93
+ healthCheckInterval: this.config.healthCheckInterval ?? exports.DEFAULT_CONFIG.healthCheckInterval,
94
+ retryCount: this.config.retryCount ?? exports.DEFAULT_CONFIG.retryCount,
95
+ retryDelay: this.config.retryDelay ?? exports.DEFAULT_CONFIG.retryDelay,
96
+ };
97
+ validateConfig(config);
98
+ return config;
99
+ }
100
+ }
101
+ exports.ConfigBuilder = ConfigBuilder;
102
+ /** Validate the configuration */
103
+ function validateConfig(config) {
104
+ if (!config.hosts || config.hosts.length === 0) {
105
+ throw new Error('No hosts configured');
106
+ }
107
+ if (config.timeout !== undefined && config.timeout < 0) {
108
+ throw new Error('Invalid timeout value');
109
+ }
110
+ if (config.maxRecvSize !== undefined && config.maxRecvSize <= 0) {
111
+ config.maxRecvSize = exports.DEFAULT_CONFIG.maxRecvSize;
112
+ }
113
+ if (config.poolSize !== undefined && config.poolSize <= 0) {
114
+ config.poolSize = exports.DEFAULT_CONFIG.poolSize;
115
+ }
116
+ }
117
+ /** Create a configuration with defaults */
118
+ function createConfig(options = {}) {
119
+ const config = {
120
+ hosts: options.hosts ?? exports.DEFAULT_CONFIG.hosts,
121
+ username: options.username,
122
+ password: options.password,
123
+ defaultGraph: options.defaultGraph,
124
+ timeout: options.timeout ?? exports.DEFAULT_CONFIG.timeout,
125
+ maxRecvSize: options.maxRecvSize ?? exports.DEFAULT_CONFIG.maxRecvSize,
126
+ tlsOptions: options.tlsOptions,
127
+ poolSize: options.poolSize ?? exports.DEFAULT_CONFIG.poolSize,
128
+ healthCheckInterval: options.healthCheckInterval ?? exports.DEFAULT_CONFIG.healthCheckInterval,
129
+ retryCount: options.retryCount ?? exports.DEFAULT_CONFIG.retryCount,
130
+ retryDelay: options.retryDelay ?? exports.DEFAULT_CONFIG.retryDelay,
131
+ };
132
+ validateConfig(config);
133
+ return config;
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQTJJSCx3Q0FnQkM7QUFHRCxvQ0FpQkM7QUFqSkQsbUNBQW1DO0FBQ3RCLFFBQUEsY0FBYyxHQUF5RjtJQUNsSCxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN6QixPQUFPLEVBQUUsS0FBSyxFQUFFLCtCQUErQjtJQUMvQyxXQUFXLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsT0FBTztJQUN0QyxRQUFRLEVBQUUsRUFBRTtJQUNaLG1CQUFtQixFQUFFLEtBQUssRUFBRSwrQkFBK0I7SUFDM0QsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVE7Q0FDMUIsQ0FBQztBQUVGLHVDQUF1QztBQUN2QyxNQUFhLGFBQWE7SUFDaEIsTUFBTSxHQUF5QixFQUFFLENBQUM7SUFFMUMsMkJBQTJCO0lBQzNCLEtBQUssQ0FBQyxHQUFHLEtBQWU7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDakMsT0FBTyxJQUFJLENB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T0FBTyxDQUFDLFVBQVUsSUFBSSxzQkFBYyxDQUFDLFVBQVU7UUFDM0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksc0JBQWMsQ0FBQyxVQUFVO0tBQzVELENBQUM7SUFFRixjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGZvciBHUUxEQiBOb2RlLmpzIGRyaXZlci5cclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyB0bHMgZnJvbSAndGxzJztcclxuXHJcbi8qKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEdxbGRiQ2xpZW50ICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3FsZGJDb25maWcge1xyXG4gIC8qKiBTZXJ2ZXIgaG9zdHMgaW4gZm9ybWF0IFwiaG9zdDpwb3J0XCIgKi9cclxuICBob3N0czogc3RyaW5nW107XHJcbiAgLyoqIFVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbiAqL1xyXG4gIHVzZXJuYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBQYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24gKi9cclxuICBwYXNzd29yZD86IHN0cmluZztcclxuICAvKiogRGVmYXVsdCBncmFwaCB0byB1c2UgKi9cclxuICBkZWZhdWx0R3JhcGg/OiBzdHJpbmc7XHJcbiAgLyoqIFF1ZXJ5IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0IDMwMDAwbXMgPSAzMHMpICovXHJcbiAgdGltZW91dD86IG51bWJlcjtcclxuICAvKiogTWF4aW11bSByZWNlaXZlIG1lc3NhZ2Ugc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCA2NE1CKSAqL1xyXG4gIG1heFJlY3ZTaXplPzogbnVtYmVyO1xyXG4gIC8qKiBUTFMgb3B0aW9ucyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zICovXHJcbiAgdGxzT3B0aW9ucz86IHRscy5Db25uZWN0aW9uT3B0aW9ucztcclxuICAvKiogQ29ubmVjdGlvbiBwb29sIHNpemUgcGVyIGhvc3QgKi9cclxuICBwb29sU2l6ZT86IG51bWJlcjtcclxuICAvKiogSGVhbHRoIGNoZWNrIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAzMDAwMG1zID0gMzBzKSAqL1xyXG4gIGhlYWx0aENoZWNrSW50ZXJ2YWw/OiBudW1iZXI7XHJcbiAgLyoqIE51bWJlciBvZiByZXRyaWVzIGZvciBmYWlsZWQgcmVxdWVzdHMgKi9cclxuICByZXRyeUNvdW50PzogbnVtYmVyO1xyXG4gIC8qKiBEZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbWlsbGlzZWNvbmRzIChkZWZhdWx0IDEwMG1zKSAqL1xyXG4gIHJldHJ5RGVsYXk/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPTkZJRzogUmVxdWlyZWQ8T21pdDxHcWxkYkNvbmZpZywgJ3VzZXJuYW1lJyB8ICdwYXNzd29yZCcgfCAnZGVmYXVsdEdyYXBoJyB8ICd0bHNPcHRpb25zJz4+ID0ge1xyXG4gIGhvc3RzOiBbJ2xvY2FsaG9zdDo5MDAwJ10sXHJcbiAgdGltZW91dDogMzAwMDAsIC8vIDMwIHNlY29uZHMgKGluIG1pbGxpc2Vjb25kcylcclxuICBtYXhSZWN2U2l6ZTogNjQgKiAxMDI0ICogMTAyNCwgLy8gNjRNQlxyXG4gIHBvb2xTaXplOiAxMCxcclxuICBoZWFsdGhDaGVja0ludGVydmFsOiAzMDAwMCwgLy8gMzAgc2Vjb25kcyAoaW4gbWlsbGlzZWNvbmRzKVxyXG4gIHJldHJ5Q291bnQ6IDMsXHJcbiAgcmV0cnlEZWxheTogMTAwLCAvLyAxMDBtc1xyXG59O1xyXG5cclxuLyoqIEJ1aWxkZXIgZm9yIGNyZWF0aW5nIEdxbGRiQ29uZmlnICovXHJcbmV4cG9ydCBjbGFzcyBDb25maWdCdWlsZGVyIHtcclxuICBwcml2YXRlIGNvbmZpZzogUGFydGlhbDxHcWxkYkNvbmZpZz4gPSB7fTtcclxuXHJcbiAgLyoqIFNldCB0aGUgc2VydmVyIGhvc3RzICovXHJcbiAgaG9zdHMoLi4uaG9zdHM6IHN0cmluZ1tdKTogdGhpcyB7XHJcbiAgICB0aGlzLmNvbmZpZy5ob3N0cyA9IGhvc3RzO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSB1c2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24gKi9cclxuICB1c2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICB0aGlzLmNvbmZpZy51c2VybmFtZSA9IHVzZXJuYW1lO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpb24gKi9cclxuICBwYXNzd29yZChwYXNzd29yZDogc3RyaW5nKTogdGhpcyB7XHJcbiAgICB0aGlzLmNvbmZpZy5wYXNzd29yZCA9IHBhc3N3b3JkO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBkZWZhdWx0IGdyYXBoICovXHJcbiAgZGVmYXVsdEdyYXBoKGdyYXBoOiBzdHJpbmcpOiB0aGlzIHtcclxuICAgIHRoaXMuY29uZmlnLmRlZmF1bHRHcmFwaCA9IGdyYXBoO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBxdWVyeSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xyXG4gIHRpbWVvdXQobXM6IG51bWJlcik6IHRoaXMge1xyXG4gICAgdGhpcy5jb25maWcudGltZW91dCA9IG1zO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBxdWVyeSB0aW1lb3V0IGluIHNlY29uZHMgKGNvbnZlbmllbmNlIG1ldGhvZCkgKi9cclxuICB0aW1lb3V0U2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiB0aGlzIHtcclxuICAgIHRoaXMuY29uZmlnLnRpbWVvdXQgPSBzZWNvbmRzICogMTAwMDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldCB0aGUgbWF4aW11bSByZWNlaXZlIG1lc3NhZ2Ugc2l6ZSAqL1xyXG4gIG1heFJlY3ZTaXplKGJ5dGVzOiBudW1iZXIpOiB0aGlzIHtcclxuICAgIHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID0gYnl0ZXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKiBTZXQgVExTIG9wdGlvbnMgKi9cclxuICB0bHMob3B0aW9uczogdGxzLkNvbm5lY3Rpb25PcHRpb25zKTogdGhpcyB7XHJcbiAgICB0aGlzLmNvbmZpZy50bHNPcHRpb25zID0gb3B0aW9ucztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldCB0aGUgY29ubmVjdGlvbiBwb29sIHNpemUgcGVyIGhvc3QgKi9cclxuICBwb29sU2l6ZShzaXplOiBudW1iZXIpOiB0aGlzIHtcclxuICAgIHRoaXMuY29uZmlnLnBvb2xTaXplID0gc2l6ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldCB0aGUgaGVhbHRoIGNoZWNrIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAqL1xyXG4gIGhlYWx0aENoZWNrSW50ZXJ2YWwobXM6IG51bWJlcik6IHRoaXMge1xyXG4gICAgdGhpcy5jb25maWcuaGVhbHRoQ2hlY2tJbnRlcnZhbCA9IG1zO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBudW1iZXIgb2YgcmV0cmllcyAqL1xyXG4gIHJldHJ5Q291bnQoY291bnQ6IG51bWJlcik6IHRoaXMge1xyXG4gICAgdGhpcy5jb25maWcucmV0cnlDb3VudCA9IGNvdW50O1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogU2V0IHRoZSBkZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbWlsbGlzZWNvbmRzICovXHJcbiAgcmV0cnlEZWxheShtczogbnVtYmVyKTogdGhpcyB7XHJcbiAgICB0aGlzLmNvbmZpZy5yZXRyeURlbGF5ID0gbXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKiBCdWlsZCBhbmQgcmV0dXJuIHRoZSBjb25maWd1cmF0aW9uICovXHJcbiAgYnVpbGQoKTogR3FsZGJDb25maWcge1xyXG4gICAgY29uc3QgY29uZmlnOiBHcWxkYkNvbmZpZyA9IHtcclxuICAgICAgaG9zdHM6IHRoaXMuY29uZmlnLmhvc3RzID8/IERFRkFVTFRfQ09ORklHLmhvc3RzLFxyXG4gICAgICB1c2VybmFtZTogdGhpcy5jb25maWcudXNlcm5hbWUsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmNvbmZpZy5wYXNzd29yZCxcclxuICAgICAgZGVmYXVsdEdyYXBoOiB0aGlzLmNvbmZpZy5kZWZhdWx0R3JhcGgsXHJcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlnLnRpbWVvdXQgPz8gREVGQVVMVF9DT05GSUcudGltZW91dCxcclxuICAgICAgbWF4UmVjdlNpemU6IHRoaXMuY29uZmlnLm1heFJlY3ZTaXplID8/IERFRkFVTFRfQ09ORklHLm1heFJlY3ZTaXplLFxyXG4gICAgICB0bHNPcHRpb25zOiB0aGlzLmNvbmZpZy50bHNPcHRpb25zLFxyXG4gICAgICBwb29sU2l6ZTogdGhpcy5jb25maWcucG9vbFNpemUgPz8gREVGQVVMVF9DT05GSUcucG9vbFNpemUsXHJcbiAgICAgIGhlYWx0aENoZWNrSW50ZXJ2YWw6IHRoaXMuY29uZmlnLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gREVGQVVMVF9DT05GSUcuaGVhbHRoQ2hlY2tJbnRlcnZhbCxcclxuICAgICAgcmV0cnlDb3VudDogdGhpcy5jb25maWcucmV0cnlDb3VudCA/PyBERUZBVUxUX0NPTkZJRy5yZXRyeUNvdW50LFxyXG4gICAgICByZXRyeURlbGF5OiB0aGlzLmNvbmZpZy5yZXRyeURlbGF5ID8/IERFRkFVTFRfQ09ORklHLnJldHJ5RGVsYXksXHJcbiAgICB9O1xyXG5cclxuICAgIHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxufVxyXG5cclxuLyoqIFZhbGlkYXRlIHRoZSBjb25maWd1cmF0aW9uICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZyhjb25maWc6IEdxbGRiQ29uZmlnKTogdm9pZCB7XHJcbiAgaWYgKCFjb25maWcuaG9zdHMgfHwgY29uZmlnLmhvc3RzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBob3N0cyBjb25maWd1cmVkJyk7XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLnRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiBjb25maWcudGltZW91dCA8IDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aW1lb3V0IHZhbHVlJyk7XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLm1heFJlY3ZTaXplICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLm1heFJlY3ZTaXplIDw9IDApIHtcclxuICAgIGNvbmZpZy5tYXhSZWN2U2l6ZSA9IERFRkFVTFRfQ09ORklHLm1heFJlY3ZTaXplO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbmZpZy5wb29sU2l6ZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5wb29sU2l6ZSA8PSAwKSB7XHJcbiAgICBjb25maWcucG9vbFNpemUgPSBERUZBVUxUX0NPTkZJRy5wb29sU2l6ZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKiBDcmVhdGUgYSBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdHMgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZyhvcHRpb25zOiBQYXJ0aWFsPEdxbGRiQ29uZmlnPiA9IHt9KTogR3FsZGJDb25maWcge1xyXG4gIGNvbnN0IGNvbmZpZzogR3FsZGJDb25maWcgPSB7XHJcbiAgICBob3N0czogb3B0aW9ucy5ob3N0cyA/PyBERUZBVUxUX0NPTkZJRy5ob3N0cyxcclxuICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lLFxyXG4gICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXHJcbiAgICBkZWZhdWx0R3JhcGg6IG9wdGlvbnMuZGVmYXVsdEdyYXBoLFxyXG4gICAgdGltZW91dDogb3B0aW9ucy50aW1lb3V0ID8/IERFRkFVTFRfQ09ORklHLnRpbWVvdXQsXHJcbiAgICBtYXhSZWN2U2l6ZTogb3B0aW9ucy5tYXhSZWN2U2l6ZSA/PyBERUZBVUxUX0NPTkZJRy5tYXhSZWN2U2l6ZSxcclxuICAgIHRsc09wdGlvbnM6IG9wdGlvbnMudGxzT3B0aW9ucyxcclxuICAgIHBvb2xTaXplOiBvcHRpb25zLnBvb2xTaXplID8/IERFRkFVTFRfQ09ORklHLnBvb2xTaXplLFxyXG4gICAgaGVhbHRoQ2hlY2tJbnRlcnZhbDogb3B0aW9ucy5oZWFsdGhDaGVja0ludGVydmFsID8/IERFRkFVTFRfQ09ORklHLmhlYWx0aENoZWNrSW50ZXJ2YWwsXHJcbiAgICByZXRyeUNvdW50OiBvcHRpb25zLnJldHJ5Q291bnQgPz8gREVGQVVMVF9DT05GSUcucmV0cnlDb3VudCxcclxuICAgIHJldHJ5RGVsYXk6IG9wdGlvbnMucmV0cnlEZWxheSA/PyBERUZBVUxUX0NPTkZJRy5yZXRyeURlbGF5LFxyXG4gIH07XHJcblxyXG4gIHZhbGlkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgcmV0dXJuIGNvbmZpZztcclxufVxyXG4iXX0=
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Connection management for GQLDB Node.js driver.
3
+ */
4
+ import * as grpc from '@grpc/grpc-js';
5
+ import { GqldbConfig } from './config';
6
+ /** Manages a pool of connections to GQLDB servers */
7
+ export declare class ConnectionPool {
8
+ private config;
9
+ private connections;
10
+ private closed;
11
+ private healthCheckTimer?;
12
+ constructor(config: GqldbConfig);
13
+ private initConnections;
14
+ private createConnection;
15
+ /** Get a healthy connection from the pool */
16
+ getConnection(): grpc.Client;
17
+ /** Get a connection for a specific host */
18
+ getConnectionForHost(host: string): grpc.Client;
19
+ private startHealthCheck;
20
+ private checkHealth;
21
+ private reconnect;
22
+ /** Close all connections in the pool */
23
+ close(): void;
24
+ /** Get the number of healthy hosts */
25
+ healthyHostCount(): number;
26
+ /** Get the list of configured hosts */
27
+ hosts(): string[];
28
+ /** Check if the pool is closed */
29
+ isClosed(): boolean;
30
+ }
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Connection management for GQLDB Node.js driver.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ConnectionPool = void 0;
40
+ const grpc = __importStar(require("@grpc/grpc-js"));
41
+ const errors_1 = require("./errors");
42
+ /** Manages a pool of connections to GQLDB servers */
43
+ class ConnectionPool {
44
+ config;
45
+ connections = new Map();
46
+ closed = false;
47
+ healthCheckTimer;
48
+ constructor(config) {
49
+ this.config = config;
50
+ this.initConnections();
51
+ this.startHealthCheck();
52
+ }
53
+ initConnections() {
54
+ for (const host of this.config.hosts) {
55
+ try {
56
+ const conn = this.createConnection(host);
57
+ this.connections.set(host, conn);
58
+ }
59
+ catch (e) {
60
+ // Continue with other hosts
61
+ console.error(`Failed to connect to ${host}:`, e);
62
+ }
63
+ }
64
+ if (this.connections.size === 0) {
65
+ throw new errors_1.AllHostsFailedError();
66
+ }
67
+ }
68
+ createConnection(host) {
69
+ let credentials;
70
+ if (this.config.tlsOptions) {
71
+ credentials = grpc.credentials.createSsl();
72
+ }
73
+ else {
74
+ credentials = grpc.credentials.createInsecure();
75
+ }
76
+ const options = {
77
+ 'grpc.max_receive_message_length': this.config.maxRecvSize ?? 4 * 1024 * 1024,
78
+ 'grpc.keepalive_time_ms': 30000,
79
+ 'grpc.keepalive_timeout_ms': 10000,
80
+ 'grpc.keepalive_permit_without_calls': 1,
81
+ };
82
+ // Create a generic client for the channel
83
+ const client = new grpc.Client(host, credentials, options);
84
+ return {
85
+ host,
86
+ client,
87
+ healthy: true,
88
+ lastPing: Date.now(),
89
+ };
90
+ }
91
+ /** Get a healthy connection from the pool */
92
+ getConnection() {
93
+ if (this.closed) {
94
+ throw new errors_1.ConnectionClosedError();
95
+ }
96
+ for (const conn of this.connections.values()) {
97
+ if (conn.healthy) {
98
+ return conn.client;
99
+ }
100
+ }
101
+ throw new errors_1.NoConnectionError();
102
+ }
103
+ /** Get a connection for a specific host */
104
+ getConnectionForHost(host) {
105
+ const conn = this.connections.get(host);
106
+ if (!conn || !conn.healthy) {
107
+ throw new errors_1.NoConnectionError();
108
+ }
109
+ return conn.client;
110
+ }
111
+ startHealthCheck() {
112
+ const interval = this.config.healthCheckInterval ?? 30000;
113
+ if (interval > 0) {
114
+ this.healthCheckTimer = setInterval(() => this.checkHealth(), interval);
115
+ }
116
+ }
117
+ checkHealth() {
118
+ for (const [host, conn] of this.connections) {
119
+ const state = conn.client.getChannel().getConnectivityState(false);
120
+ const healthy = state === grpc.connectivityState.READY ||
121
+ state === grpc.connectivityState.IDLE;
122
+ conn.healthy = healthy;
123
+ if (healthy) {
124
+ conn.lastPing = Date.now();
125
+ }
126
+ else {
127
+ this.reconnect(host);
128
+ }
129
+ }
130
+ }
131
+ async reconnect(host) {
132
+ if (this.closed)
133
+ return;
134
+ const oldConn = this.connections.get(host);
135
+ if (oldConn) {
136
+ try {
137
+ oldConn.client.close();
138
+ }
139
+ catch (e) {
140
+ // Ignore
141
+ }
142
+ this.connections.delete(host);
143
+ }
144
+ try {
145
+ const newConn = this.createConnection(host);
146
+ this.connections.set(host, newConn);
147
+ }
148
+ catch (e) {
149
+ // Log and continue
150
+ console.error(`Failed to reconnect to ${host}:`, e);
151
+ }
152
+ }
153
+ /** Close all connections in the pool */
154
+ close() {
155
+ if (this.closed)
156
+ return;
157
+ this.closed = true;
158
+ if (this.healthCheckTimer) {
159
+ clearInterval(this.healthCheckTimer);
160
+ }
161
+ for (const conn of this.connections.values()) {
162
+ try {
163
+ conn.client.close();
164
+ }
165
+ catch (e) {
166
+ // Ignore
167
+ }
168
+ }
169
+ this.connections.clear();
170
+ }
171
+ /** Get the number of healthy hosts */
172
+ healthyHostCount() {
173
+ let count = 0;
174
+ for (const conn of this.connections.values()) {
175
+ if (conn.healthy)
176
+ count++;
177
+ }
178
+ return count;
179
+ }
180
+ /** Get the list of configured hosts */
181
+ hosts() {
182
+ return Array.from(this.connections.keys());
183
+ }
184
+ /** Check if the pool is closed */
185
+ isClosed() {
186
+ return this.closed;
187
+ }
188
+ }
189
+ exports.ConnectionPool = ConnectionPool;
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLHFDQUF5RjtBQVV6RixxREFBcUQ7QUFDckQsTUFBYSxjQUFjO0lBQ2pCLE1BQU0sQ0FBYztJQUNwQixXQUFXLEdBQTRCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakQsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLGdCQUFnQixDQUFrQjtJQUUxQyxZQUFZLE1BQW1CO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZTtRQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLDRCQUE0QjtnQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSw0QkFBbUIsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENB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SSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsZ0JBQWdCO1FBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxLQUFLLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFsS0Qsd0NBa0tDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvbm5lY3Rpb24gbWFuYWdlbWVudCBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgZ3JwYyBmcm9tICdAZ3JwYy9ncnBjLWpzJztcclxuaW1wb3J0IHsgR3FsZGJDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEFsbEhvc3RzRmFpbGVkRXJyb3IsIENvbm5lY3Rpb25DbG9zZWRFcnJvciwgTm9Db25uZWN0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XHJcblxyXG4vKiogUmVwcmVzZW50cyBhIHNpbmdsZSBnUlBDIGNvbm5lY3Rpb24gKi9cclxuaW50ZXJmYWNlIENvbm5lY3Rpb24ge1xyXG4gIGhvc3Q6IHN0cmluZztcclxuICBjbGllbnQ6IGdycGMuQ2xpZW50O1xyXG4gIGhlYWx0aHk6IGJvb2xlYW47XHJcbiAgbGFzdFBpbmc6IG51bWJlcjtcclxufVxyXG5cclxuLyoqIE1hbmFnZXMgYSBwb29sIG9mIGNvbm5lY3Rpb25zIHRvIEdRTERCIHNlcnZlcnMgKi9cclxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25Qb29sIHtcclxuICBwcml2YXRlIGNvbmZpZzogR3FsZGJDb25maWc7XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uczogTWFwPHN0cmluZywgQ29ubmVjdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGhlYWx0aENoZWNrVGltZXI/OiBOb2RlSlMuVGltZW91dDtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBHcWxkYkNvbmZpZykge1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICB0aGlzLmluaXRDb25uZWN0aW9ucygpO1xyXG4gICAgdGhpcy5zdGFydEhlYWx0aENoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25uZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgaG9zdCBvZiB0aGlzLmNvbmZpZy5ob3N0cykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGNvbm4gPSB0aGlzLmNyZWF0ZUNvbm5lY3Rpb24oaG9zdCk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaG9zdCwgY29ubik7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBDb250aW51ZSB3aXRoIG90aGVyIGhvc3RzXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNvbm5lY3QgdG8gJHtob3N0fTpgLCBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcclxuICAgICAgdGhyb3cgbmV3IEFsbEhvc3RzRmFpbGVkRXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29ubmVjdGlvbihob3N0OiBzdHJpbmcpOiBDb25uZWN0aW9uIHtcclxuICAgIGxldCBjcmVkZW50aWFsczogZ3JwYy5DaGFubmVsQ3JlZGVudGlhbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnRsc09wdGlvbnMpIHtcclxuICAgICAgY3JlZGVudGlhbHMgPSBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZVNzbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3JlZGVudGlhbHMgPSBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZUluc2VjdXJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3B0aW9uczogZ3JwYy5DaGFubmVsT3B0aW9ucyA9IHtcclxuICAgICAgJ2dycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGgnOiB0aGlzLmNvbmZpZy5tYXhSZWN2U2l6ZSA/PyA0ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lX21zJzogMzAwMDAsXHJcbiAgICAgICdncnBjLmtlZXBhbGl2ZV90aW1lb3V0X21zJzogMTAwMDAsXHJcbiAgICAgICdncnBjLmtlZXBhbGl2ZV9wZXJtaXRfd2l0aG91dF9jYWxscyc6IDEsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIGdlbmVyaWMgY2xpZW50IGZvciB0aGUgY2hhbm5lbFxyXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IGdycGMuQ2xpZW50KGhvc3QsIGNyZWRlbnRpYWxzLCBvcHRpb25zKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBob3N0LFxyXG4gICAgICBjbGllbnQsXHJcbiAgICAgIGhlYWx0aHk6IHRydWUsXHJcbiAgICAgIGxhc3RQaW5nOiBEYXRlLm5vdygpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBHZXQgYSBoZWFsdGh5IGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbCAqL1xyXG4gIGdldENvbm5lY3Rpb24oKTogZ3JwYy5DbGllbnQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VkKSB7XHJcbiAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uQ2xvc2VkRXJyb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvbm4gb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xyXG4gICAgICBpZiAoY29ubi5oZWFsdGh5KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbm4uY2xpZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhyb3cgbmV3IE5vQ29ubmVjdGlvbkVycm9yKCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IGEgY29ubmVjdGlvbiBmb3IgYSBzcGVjaWZpYyBob3N0ICovXHJcbiAgZ2V0Q29ubmVjdGlvbkZvckhvc3QoaG9zdDogc3RyaW5nKTogZ3JwYy5DbGllbnQge1xyXG4gICAgY29uc3QgY29ubiA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KGhvc3QpO1xyXG4gICAgaWYgKCFjb25uIHx8ICFjb25uLmhlYWx0aHkpIHtcclxuICAgICAgdGhyb3cgbmV3IE5vQ29ubmVjdGlvbkVycm9yKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29ubi5jbGllbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0SGVhbHRoQ2hlY2soKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuY29uZmlnLmhlYWx0aENoZWNrSW50ZXJ2YWwgPz8gMzAwMDA7XHJcbiAgICBpZiAoaW50ZXJ2YWwgPiAwKSB7XHJcbiAgICAgIHRoaXMuaGVhbHRoQ2hlY2tUaW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2hlY2tIZWFsdGgoKSwgaW50ZXJ2YWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0hlYWx0aCgpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgW2hvc3QsIGNvbm5dIG9mIHRoaXMuY29ubmVjdGlvbnMpIHtcclxuICAgICAgY29uc3Qgc3RhdGUgPSBjb25uLmNsaWVudC5nZXRDaGFubmVsKCkuZ2V0Q29ubmVjdGl2aXR5U3RhdGUoZmFsc2UpO1xyXG4gICAgICBjb25zdCBoZWFsdGh5ID0gc3RhdGUgPT09IGdycGMuY29ubmVjdGl2aXR5U3RhdGUuUkVBRFkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPT09IGdycGMuY29ubmVjdGl2aXR5U3RhdGUuSURMRTtcclxuXHJcbiAgICAgIGNvbm4uaGVhbHRoeSA9IGhlYWx0aHk7XHJcbiAgICAgIGlmIChoZWFsdGh5KSB7XHJcbiAgICAgICAgY29ubi5sYXN0UGluZyA9IERhdGUubm93KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWNvbm5lY3QoaG9zdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVjb25uZWN0KGhvc3Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb2xkQ29ubiA9IHRoaXMuY29ubmVjdGlvbnMuZ2V0KGhvc3QpO1xyXG4gICAgaWYgKG9sZENvbm4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBvbGRDb25uLmNsaWVudC5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gSWdub3JlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25uZWN0aW9ucy5kZWxldGUoaG9zdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbmV3Q29ubiA9IHRoaXMuY3JlYXRlQ29ubmVjdGlvbihob3N0KTtcclxuICAgICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoaG9zdCwgbmV3Q29ubik7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIExvZyBhbmQgY29udGludWVcclxuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlY29ubmVjdCB0byAke2hvc3R9OmAsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIENsb3NlIGFsbCBjb25uZWN0aW9ucyBpbiB0aGUgcG9vbCAqL1xyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmhlYWx0aENoZWNrVGltZXIpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYWx0aENoZWNrVGltZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgY29ubiBvZiB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29ubi5jbGllbnQuY2xvc2UoKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIElnbm9yZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25uZWN0aW9ucy5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIGhlYWx0aHkgaG9zdHMgKi9cclxuICBoZWFsdGh5SG9zdENvdW50KCk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgZm9yIChjb25zdCBjb25uIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcclxuICAgICAgaWYgKGNvbm4uaGVhbHRoeSkgY291bnQrKztcclxuICAgIH1cclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcblxyXG4gIC8qKiBHZXQgdGhlIGxpc3Qgb2YgY29uZmlndXJlZCBob3N0cyAqL1xyXG4gIGhvc3RzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29ubmVjdGlvbnMua2V5cygpKTtcclxuICB9XHJcblxyXG4gIC8qKiBDaGVjayBpZiB0aGUgcG9vbCBpcyBjbG9zZWQgKi9cclxuICBpc0Nsb3NlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNsb3NlZDtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Error definitions for GQLDB Node.js driver.
3
+ */
4
+ /** Base error class for GQLDB errors */
5
+ export declare class GqldbError extends Error {
6
+ readonly code: number;
7
+ readonly cause?: Error | undefined;
8
+ constructor(message: string, code?: number, cause?: Error | undefined);
9
+ }
10
+ export declare class NoHostsError extends GqldbError {
11
+ constructor();
12
+ }
13
+ export declare class InvalidTimeoutError extends GqldbError {
14
+ constructor();
15
+ }
16
+ export declare class NoConnectionError extends GqldbError {
17
+ constructor();
18
+ }
19
+ export declare class ConnectionClosedError extends GqldbError {
20
+ constructor();
21
+ }
22
+ export declare class ConnectionFailedError extends GqldbError {
23
+ constructor(message?: string, cause?: Error);
24
+ }
25
+ export declare class AllHostsFailedError extends GqldbError {
26
+ constructor();
27
+ }
28
+ export declare class HealthCheckFailedError extends GqldbError {
29
+ constructor();
30
+ }
31
+ export declare class NotLoggedInError extends GqldbError {
32
+ constructor();
33
+ }
34
+ export declare class LoginFailedError extends GqldbError {
35
+ constructor(message?: string, cause?: Error);
36
+ }
37
+ export declare class LogoutFailedError extends GqldbError {
38
+ constructor(message?: string, cause?: Error);
39
+ }
40
+ export declare class SessionExpiredError extends GqldbError {
41
+ constructor();
42
+ }
43
+ export declare class InvalidSessionError extends GqldbError {
44
+ constructor();
45
+ }
46
+ export declare class NoTransactionError extends GqldbError {
47
+ constructor();
48
+ }
49
+ export declare class TransactionFailedError extends GqldbError {
50
+ constructor(message?: string, cause?: Error);
51
+ }
52
+ export declare class TransactionNotFoundError extends GqldbError {
53
+ constructor();
54
+ }
55
+ export declare class TransactionAlreadyOpenError extends GqldbError {
56
+ constructor();
57
+ }
58
+ export declare class QueryFailedError extends GqldbError {
59
+ constructor(message?: string, cause?: Error);
60
+ }
61
+ export declare class QueryTimeoutError extends GqldbError {
62
+ constructor();
63
+ }
64
+ export declare class InvalidQueryError extends GqldbError {
65
+ constructor(message?: string);
66
+ }
67
+ export declare class EmptyQueryError extends GqldbError {
68
+ constructor();
69
+ }
70
+ export declare class GraphNotFoundError extends GqldbError {
71
+ constructor(graphName?: string);
72
+ }
73
+ export declare class GraphExistsError extends GqldbError {
74
+ constructor(graphName?: string);
75
+ }
76
+ export declare class CreateGraphFailedError extends GqldbError {
77
+ constructor(message?: string, cause?: Error);
78
+ }
79
+ export declare class DropGraphFailedError extends GqldbError {
80
+ constructor(message?: string, cause?: Error);
81
+ }
82
+ export declare class InsertFailedError extends GqldbError {
83
+ constructor(message?: string, cause?: Error);
84
+ }
85
+ export declare class DeleteFailedError extends GqldbError {
86
+ constructor(message?: string, cause?: Error);
87
+ }
88
+ export declare class ExportFailedError extends GqldbError {
89
+ constructor(message?: string, cause?: Error);
90
+ }
91
+ export declare class InvalidTypeError extends GqldbError {
92
+ constructor(message?: string);
93
+ }
94
+ export declare class TypeConversionError extends GqldbError {
95
+ constructor(message?: string);
96
+ }
97
+ export declare class UnsupportedTypeError extends GqldbError {
98
+ constructor(typeName?: string);
99
+ }