@kurrent/kurrentdb-client 1.0.0-alpha.1

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 (281) hide show
  1. package/README.md +201 -0
  2. package/dist/Client/ServerFeatures.d.ts +17 -0
  3. package/dist/Client/ServerFeatures.js +56 -0
  4. package/dist/Client/ServerFeatures.js.map +1 -0
  5. package/dist/Client/discovery.d.ts +15 -0
  6. package/dist/Client/discovery.js +135 -0
  7. package/dist/Client/discovery.js.map +1 -0
  8. package/dist/Client/http.d.ts +19 -0
  9. package/dist/Client/http.js +97 -0
  10. package/dist/Client/http.js.map +1 -0
  11. package/dist/Client/index.d.ts +119 -0
  12. package/dist/Client/index.js +390 -0
  13. package/dist/Client/index.js.map +1 -0
  14. package/dist/Client/parseConnectionString.d.ts +23 -0
  15. package/dist/Client/parseConnectionString.js +238 -0
  16. package/dist/Client/parseConnectionString.js.map +1 -0
  17. package/dist/bridge/index.d.ts +66 -0
  18. package/dist/bridge/index.js +83 -0
  19. package/dist/bridge/index.js.map +1 -0
  20. package/dist/bridge/load.d.ts +1 -0
  21. package/dist/bridge/load.js +20 -0
  22. package/dist/bridge/load.js.map +1 -0
  23. package/dist/constants.d.ts +58 -0
  24. package/dist/constants.js +75 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/events/binaryEvent.d.ts +16 -0
  27. package/dist/events/binaryEvent.js +14 -0
  28. package/dist/events/binaryEvent.js.map +1 -0
  29. package/dist/events/convertMetadata.d.ts +1 -0
  30. package/dist/events/convertMetadata.js +11 -0
  31. package/dist/events/convertMetadata.js.map +1 -0
  32. package/dist/events/index.d.ts +2 -0
  33. package/dist/events/index.js +19 -0
  34. package/dist/events/index.js.map +1 -0
  35. package/dist/events/jsonEvent.d.ts +8 -0
  36. package/dist/events/jsonEvent.js +14 -0
  37. package/dist/events/jsonEvent.js.map +1 -0
  38. package/dist/index.d.ts +13 -0
  39. package/dist/index.js +32 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/persistentSubscription/createPersistentSubscriptionToAll.d.ts +23 -0
  42. package/dist/persistentSubscription/createPersistentSubscriptionToAll.js +90 -0
  43. package/dist/persistentSubscription/createPersistentSubscriptionToAll.js.map +1 -0
  44. package/dist/persistentSubscription/createPersistentSubscriptionToStream.d.ts +17 -0
  45. package/dist/persistentSubscription/createPersistentSubscriptionToStream.js +49 -0
  46. package/dist/persistentSubscription/createPersistentSubscriptionToStream.js.map +1 -0
  47. package/dist/persistentSubscription/deletePersistentSubscriptionToAll.d.ts +13 -0
  48. package/dist/persistentSubscription/deletePersistentSubscriptionToAll.js +30 -0
  49. package/dist/persistentSubscription/deletePersistentSubscriptionToAll.js.map +1 -0
  50. package/dist/persistentSubscription/deletePersistentSubscriptionToStream.d.ts +13 -0
  51. package/dist/persistentSubscription/deletePersistentSubscriptionToStream.js +28 -0
  52. package/dist/persistentSubscription/deletePersistentSubscriptionToStream.js.map +1 -0
  53. package/dist/persistentSubscription/getPersistentSubscriptionToAllInfo.d.ts +13 -0
  54. package/dist/persistentSubscription/getPersistentSubscriptionToAllInfo.js +31 -0
  55. package/dist/persistentSubscription/getPersistentSubscriptionToAllInfo.js.map +1 -0
  56. package/dist/persistentSubscription/getPersistentSubscriptionToStreamInfo.d.ts +14 -0
  57. package/dist/persistentSubscription/getPersistentSubscriptionToStreamInfo.js +49 -0
  58. package/dist/persistentSubscription/getPersistentSubscriptionToStreamInfo.js.map +1 -0
  59. package/dist/persistentSubscription/index.d.ts +16 -0
  60. package/dist/persistentSubscription/index.js +33 -0
  61. package/dist/persistentSubscription/index.js.map +1 -0
  62. package/dist/persistentSubscription/listAllPersistentSubscriptions.d.ts +13 -0
  63. package/dist/persistentSubscription/listAllPersistentSubscriptions.js +42 -0
  64. package/dist/persistentSubscription/listAllPersistentSubscriptions.js.map +1 -0
  65. package/dist/persistentSubscription/listPersistentSubscriptionsToAll.d.ts +13 -0
  66. package/dist/persistentSubscription/listPersistentSubscriptionsToAll.js +33 -0
  67. package/dist/persistentSubscription/listPersistentSubscriptionsToAll.js.map +1 -0
  68. package/dist/persistentSubscription/listPersistentSubscriptionsToStream.d.ts +14 -0
  69. package/dist/persistentSubscription/listPersistentSubscriptionsToStream.js +51 -0
  70. package/dist/persistentSubscription/listPersistentSubscriptionsToStream.js.map +1 -0
  71. package/dist/persistentSubscription/replayParkedMessagesToAll.d.ts +18 -0
  72. package/dist/persistentSubscription/replayParkedMessagesToAll.js +36 -0
  73. package/dist/persistentSubscription/replayParkedMessagesToAll.js.map +1 -0
  74. package/dist/persistentSubscription/replayParkedMessagesToStream.d.ts +19 -0
  75. package/dist/persistentSubscription/replayParkedMessagesToStream.js +57 -0
  76. package/dist/persistentSubscription/replayParkedMessagesToStream.js.map +1 -0
  77. package/dist/persistentSubscription/restartPersistentSubscriptionSubsystem.d.ts +11 -0
  78. package/dist/persistentSubscription/restartPersistentSubscriptionSubsystem.js +30 -0
  79. package/dist/persistentSubscription/restartPersistentSubscriptionSubsystem.js.map +1 -0
  80. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToAll.d.ts +20 -0
  81. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToAll.js +38 -0
  82. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToAll.js.map +1 -0
  83. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToStream.d.ts +20 -0
  84. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToStream.js +37 -0
  85. package/dist/persistentSubscription/subscribeToPersistentSubscriptionToStream.js.map +1 -0
  86. package/dist/persistentSubscription/updatePersistentSubscriptionToAll.d.ts +15 -0
  87. package/dist/persistentSubscription/updatePersistentSubscriptionToAll.js +53 -0
  88. package/dist/persistentSubscription/updatePersistentSubscriptionToAll.js.map +1 -0
  89. package/dist/persistentSubscription/updatePersistentSubscriptionToStream.d.ts +15 -0
  90. package/dist/persistentSubscription/updatePersistentSubscriptionToStream.js +49 -0
  91. package/dist/persistentSubscription/updatePersistentSubscriptionToStream.js.map +1 -0
  92. package/dist/persistentSubscription/utils/PersistentSubscriptionImpl.d.ts +18 -0
  93. package/dist/persistentSubscription/utils/PersistentSubscriptionImpl.js +112 -0
  94. package/dist/persistentSubscription/utils/PersistentSubscriptionImpl.js.map +1 -0
  95. package/dist/persistentSubscription/utils/mapPersistentSubscriptionInfo.d.ts +146 -0
  96. package/dist/persistentSubscription/utils/mapPersistentSubscriptionInfo.js +204 -0
  97. package/dist/persistentSubscription/utils/mapPersistentSubscriptionInfo.js.map +1 -0
  98. package/dist/persistentSubscription/utils/persistentSubscriptionSettings.d.ts +90 -0
  99. package/dist/persistentSubscription/utils/persistentSubscriptionSettings.js +39 -0
  100. package/dist/persistentSubscription/utils/persistentSubscriptionSettings.js.map +1 -0
  101. package/dist/persistentSubscription/utils/settingsToGRPC.d.ts +5 -0
  102. package/dist/persistentSubscription/utils/settingsToGRPC.js +49 -0
  103. package/dist/persistentSubscription/utils/settingsToGRPC.js.map +1 -0
  104. package/dist/projections/createProjection.d.ts +24 -0
  105. package/dist/projections/createProjection.js +48 -0
  106. package/dist/projections/createProjection.js.map +1 -0
  107. package/dist/projections/deleteProjection.d.ts +28 -0
  108. package/dist/projections/deleteProjection.js +33 -0
  109. package/dist/projections/deleteProjection.js.map +1 -0
  110. package/dist/projections/disableProjection.d.ts +19 -0
  111. package/dist/projections/disableProjection.js +34 -0
  112. package/dist/projections/disableProjection.js.map +1 -0
  113. package/dist/projections/enableProjection.d.ts +12 -0
  114. package/dist/projections/enableProjection.js +25 -0
  115. package/dist/projections/enableProjection.js.map +1 -0
  116. package/dist/projections/getProjectionResult.d.ts +17 -0
  117. package/dist/projections/getProjectionResult.js +29 -0
  118. package/dist/projections/getProjectionResult.js.map +1 -0
  119. package/dist/projections/getProjectionState.d.ts +17 -0
  120. package/dist/projections/getProjectionState.js +29 -0
  121. package/dist/projections/getProjectionState.js.map +1 -0
  122. package/dist/projections/getProjectionStatus.d.ts +12 -0
  123. package/dist/projections/getProjectionStatus.js +36 -0
  124. package/dist/projections/getProjectionStatus.js.map +1 -0
  125. package/dist/projections/index.d.ts +11 -0
  126. package/dist/projections/index.js +28 -0
  127. package/dist/projections/index.js.map +1 -0
  128. package/dist/projections/listProjections.d.ts +12 -0
  129. package/dist/projections/listProjections.js +36 -0
  130. package/dist/projections/listProjections.js.map +1 -0
  131. package/dist/projections/resetProjection.d.ts +13 -0
  132. package/dist/projections/resetProjection.js +25 -0
  133. package/dist/projections/resetProjection.js.map +1 -0
  134. package/dist/projections/restartSubsystem.d.ts +11 -0
  135. package/dist/projections/restartSubsystem.js +21 -0
  136. package/dist/projections/restartSubsystem.js.map +1 -0
  137. package/dist/projections/updateProjection.d.ts +20 -0
  138. package/dist/projections/updateProjection.js +34 -0
  139. package/dist/projections/updateProjection.js.map +1 -0
  140. package/dist/projections/utils/mapGrpcProjectionDetails.d.ts +3 -0
  141. package/dist/projections/utils/mapGrpcProjectionDetails.js +31 -0
  142. package/dist/projections/utils/mapGrpcProjectionDetails.js.map +1 -0
  143. package/dist/streams/appendToStream/append.d.ts +5 -0
  144. package/dist/streams/appendToStream/append.js +131 -0
  145. package/dist/streams/appendToStream/append.js.map +1 -0
  146. package/dist/streams/appendToStream/batchAppend.d.ts +5 -0
  147. package/dist/streams/appendToStream/batchAppend.js +145 -0
  148. package/dist/streams/appendToStream/batchAppend.js.map +1 -0
  149. package/dist/streams/appendToStream/index.d.ts +24 -0
  150. package/dist/streams/appendToStream/index.js +24 -0
  151. package/dist/streams/appendToStream/index.js.map +1 -0
  152. package/dist/streams/appendToStream/unpackError.d.ts +5 -0
  153. package/dist/streams/appendToStream/unpackError.js +54 -0
  154. package/dist/streams/appendToStream/unpackError.js.map +1 -0
  155. package/dist/streams/deleteStream.d.ts +18 -0
  156. package/dist/streams/deleteStream.js +51 -0
  157. package/dist/streams/deleteStream.js.map +1 -0
  158. package/dist/streams/getStreamMetadata.d.ts +27 -0
  159. package/dist/streams/getStreamMetadata.js +40 -0
  160. package/dist/streams/getStreamMetadata.js.map +1 -0
  161. package/dist/streams/index.d.ts +9 -0
  162. package/dist/streams/index.js +27 -0
  163. package/dist/streams/index.js.map +1 -0
  164. package/dist/streams/readAll.d.ts +35 -0
  165. package/dist/streams/readAll.js +37 -0
  166. package/dist/streams/readAll.js.map +1 -0
  167. package/dist/streams/readStream.d.ts +35 -0
  168. package/dist/streams/readStream.js +58 -0
  169. package/dist/streams/readStream.js.map +1 -0
  170. package/dist/streams/setStreamMetadata.d.ts +20 -0
  171. package/dist/streams/setStreamMetadata.js +20 -0
  172. package/dist/streams/setStreamMetadata.js.map +1 -0
  173. package/dist/streams/subscribeToAll.d.ts +30 -0
  174. package/dist/streams/subscribeToAll.js +89 -0
  175. package/dist/streams/subscribeToAll.js.map +1 -0
  176. package/dist/streams/subscribeToStream.d.ts +27 -0
  177. package/dist/streams/subscribeToStream.js +52 -0
  178. package/dist/streams/subscribeToStream.js.map +1 -0
  179. package/dist/streams/tombstoneStream.d.ts +18 -0
  180. package/dist/streams/tombstoneStream.js +51 -0
  181. package/dist/streams/tombstoneStream.js.map +1 -0
  182. package/dist/streams/utils/ReadStream.d.ts +14 -0
  183. package/dist/streams/utils/ReadStream.js +61 -0
  184. package/dist/streams/utils/ReadStream.js.map +1 -0
  185. package/dist/streams/utils/Subscription.d.ts +16 -0
  186. package/dist/streams/utils/Subscription.js +71 -0
  187. package/dist/streams/utils/Subscription.js.map +1 -0
  188. package/dist/streams/utils/streamMetadata.d.ts +53 -0
  189. package/dist/streams/utils/streamMetadata.js +77 -0
  190. package/dist/streams/utils/streamMetadata.js.map +1 -0
  191. package/dist/streams/utils/systemStreams.d.ts +20 -0
  192. package/dist/streams/utils/systemStreams.js +28 -0
  193. package/dist/streams/utils/systemStreams.js.map +1 -0
  194. package/dist/types/events.d.ts +157 -0
  195. package/dist/types/events.js +3 -0
  196. package/dist/types/events.js.map +1 -0
  197. package/dist/types/index.d.ts +348 -0
  198. package/dist/types/index.js +22 -0
  199. package/dist/types/index.js.map +1 -0
  200. package/dist/utils/CommandError.d.ts +174 -0
  201. package/dist/utils/CommandError.js +403 -0
  202. package/dist/utils/CommandError.js.map +1 -0
  203. package/dist/utils/backpressuredWrite.d.ts +2 -0
  204. package/dist/utils/backpressuredWrite.js +50 -0
  205. package/dist/utils/backpressuredWrite.js.map +1 -0
  206. package/dist/utils/convertBridgeError.d.ts +1 -0
  207. package/dist/utils/convertBridgeError.js +41 -0
  208. package/dist/utils/convertBridgeError.js.map +1 -0
  209. package/dist/utils/convertGrpcEvent.d.ts +10 -0
  210. package/dist/utils/convertGrpcEvent.js +135 -0
  211. package/dist/utils/convertGrpcEvent.js.map +1 -0
  212. package/dist/utils/convertRustEvent.d.ts +4 -0
  213. package/dist/utils/convertRustEvent.js +85 -0
  214. package/dist/utils/convertRustEvent.js.map +1 -0
  215. package/dist/utils/debug.d.ts +7 -0
  216. package/dist/utils/debug.js +30 -0
  217. package/dist/utils/debug.js.map +1 -0
  218. package/dist/utils/filter.d.ts +44 -0
  219. package/dist/utils/filter.js +29 -0
  220. package/dist/utils/filter.js.map +1 -0
  221. package/dist/utils/grpcStreamIdentifier.d.ts +2 -0
  222. package/dist/utils/grpcStreamIdentifier.js +11 -0
  223. package/dist/utils/grpcStreamIdentifier.js.map +1 -0
  224. package/dist/utils/grpcUUID.d.ts +4 -0
  225. package/dist/utils/grpcUUID.js +29 -0
  226. package/dist/utils/grpcUUID.js.map +1 -0
  227. package/dist/utils/index.d.ts +9 -0
  228. package/dist/utils/index.js +26 -0
  229. package/dist/utils/index.js.map +1 -0
  230. package/dist/utils/isClientCancellationError.d.ts +1 -0
  231. package/dist/utils/isClientCancellationError.js +13 -0
  232. package/dist/utils/isClientCancellationError.js.map +1 -0
  233. package/dist/utils/utilityTypes.d.ts +2 -0
  234. package/dist/utils/utilityTypes.js +3 -0
  235. package/dist/utils/utilityTypes.js.map +1 -0
  236. package/generated/cluster_grpc_pb.d.ts +211 -0
  237. package/generated/cluster_grpc_pb.js +247 -0
  238. package/generated/cluster_pb.d.ts +546 -0
  239. package/generated/cluster_pb.js +4357 -0
  240. package/generated/code_grpc_pb.js +1 -0
  241. package/generated/code_pb.d.ts +27 -0
  242. package/generated/code_pb.js +48 -0
  243. package/generated/gossip_grpc_pb.d.ts +42 -0
  244. package/generated/gossip_grpc_pb.js +45 -0
  245. package/generated/gossip_pb.d.ts +111 -0
  246. package/generated/gossip_pb.js +727 -0
  247. package/generated/monitoring_grpc_pb.d.ts +39 -0
  248. package/generated/monitoring_grpc_pb.js +44 -0
  249. package/generated/monitoring_pb.d.ts +52 -0
  250. package/generated/monitoring_pb.js +361 -0
  251. package/generated/operations_grpc_pb.d.ts +144 -0
  252. package/generated/operations_grpc_pb.js +144 -0
  253. package/generated/operations_pb.d.ts +151 -0
  254. package/generated/operations_pb.js +1050 -0
  255. package/generated/persistent_grpc_pb.d.ts +160 -0
  256. package/generated/persistent_grpc_pb.js +265 -0
  257. package/generated/persistent_pb.d.ts +1702 -0
  258. package/generated/persistent_pb.js +12340 -0
  259. package/generated/projections_grpc_pb.d.ts +194 -0
  260. package/generated/projections_grpc_pb.js +332 -0
  261. package/generated/projections_pb.d.ts +821 -0
  262. package/generated/projections_pb.js +6065 -0
  263. package/generated/serverfeatures_grpc_pb.d.ts +42 -0
  264. package/generated/serverfeatures_grpc_pb.js +45 -0
  265. package/generated/serverfeatures_pb.d.ts +61 -0
  266. package/generated/serverfeatures_pb.js +476 -0
  267. package/generated/shared_grpc_pb.js +1 -0
  268. package/generated/shared_pb.d.ts +335 -0
  269. package/generated/shared_pb.js +2374 -0
  270. package/generated/status_grpc_pb.js +1 -0
  271. package/generated/status_pb.d.ts +38 -0
  272. package/generated/status_pb.js +261 -0
  273. package/generated/streams_grpc_pb.d.ts +112 -0
  274. package/generated/streams_grpc_pb.js +180 -0
  275. package/generated/streams_pb.d.ts +1660 -0
  276. package/generated/streams_pb.js +11556 -0
  277. package/generated/users_grpc_pb.d.ts +158 -0
  278. package/generated/users_grpc_pb.js +275 -0
  279. package/generated/users_pb.d.ts +601 -0
  280. package/generated/users_pb.js +4451 -0
  281. package/package.json +65 -0
@@ -0,0 +1,119 @@
1
+ import { Readable, Writable, Duplex } from "stream";
2
+ import * as bridge from "@kurrent/db-client-bridge";
3
+ import { CallOptions, Channel, ChannelCredentials, Client as GRPCClient, Metadata, MethodDefinition } from "@grpc/grpc-js";
4
+ import type { NodePreference, GRPCClientConstructor, EndPoint, Credentials, BaseOptions } from "../types";
5
+ import { ServerFeatures } from "./ServerFeatures";
6
+ interface ClientOptions {
7
+ /**
8
+ * The amount of time (in milliseconds) to wait after which a keepalive ping is sent on the transport.
9
+ * Use -1 to disable.
10
+ * @defaultValue 10_000
11
+ */
12
+ keepAliveInterval?: number;
13
+ /**
14
+ * The amount of time (in milliseconds) the sender of the keepalive ping waits for an acknowledgement.
15
+ * If it does not receive an acknowledgement within this time, it will close the connection.
16
+ * @defaultValue 10_000
17
+ */
18
+ keepAliveTimeout?: number;
19
+ /**
20
+ * Whether to immediately throw an exception when an append fails.
21
+ * @defaultValue true
22
+ */
23
+ throwOnAppendFailure?: boolean;
24
+ /**
25
+ * An optional length of time (in milliseconds) to use for gRPC deadlines.
26
+ * @defaultValue 10_000
27
+ */
28
+ defaultDeadline?: number;
29
+ /**
30
+ * The name of the connection to use in logs.
31
+ * @defaultValue uuid
32
+ */
33
+ connectionName?: string;
34
+ }
35
+ interface DiscoveryOptions {
36
+ /**
37
+ * How many times to attempt connection before throwing.
38
+ */
39
+ maxDiscoverAttempts?: number;
40
+ /**
41
+ * How long to wait before retrying (in milliseconds).
42
+ */
43
+ discoveryInterval?: number;
44
+ /**
45
+ * How long to wait for the request to time out (in seconds).
46
+ */
47
+ gossipTimeout?: number;
48
+ /**
49
+ * Preferred node type.
50
+ */
51
+ nodePreference?: NodePreference;
52
+ }
53
+ export interface DNSClusterOptions extends DiscoveryOptions, ClientOptions {
54
+ discover: EndPoint;
55
+ }
56
+ export interface GossipClusterOptions extends DiscoveryOptions, ClientOptions {
57
+ endpoints: EndPoint[];
58
+ }
59
+ export interface SingleNodeOptions extends ClientOptions {
60
+ endpoint: EndPoint | string;
61
+ }
62
+ export interface ChannelCredentialOptions {
63
+ /**
64
+ * Whether to use an insecure connection.
65
+ */
66
+ insecure?: boolean;
67
+ /**
68
+ * The root certificate data.
69
+ */
70
+ rootCertificate?: Buffer;
71
+ /**
72
+ * The file containing the user certificate’s matching private key in PEM format.
73
+ */
74
+ userKeyFile?: Buffer;
75
+ /**
76
+ * The file containing the X.509 user certificate in PEM format.
77
+ */
78
+ userCertFile?: Buffer;
79
+ /**
80
+ * Additional options to modify certificate verification.
81
+ */
82
+ verifyOptions?: Parameters<typeof ChannelCredentials.createSsl>[3];
83
+ }
84
+ export declare class Client {
85
+ #private;
86
+ /**
87
+ * Returns a connection from a connection string.
88
+ * @param connectionString - The connection string for your database.
89
+ */
90
+ static connectionString(connectionString: TemplateStringsArray | string, ...parts: Array<string | number | boolean>): Client;
91
+ protected constructor(rustClient: bridge.RustClient, connectionSettings: DNSClusterOptions, channelCredentials?: ChannelCredentialOptions, defaultUserCredentials?: Credentials);
92
+ protected constructor(rustClient: bridge.RustClient, connectionSettings: GossipClusterOptions, channelCredentials?: ChannelCredentialOptions, defaultUserCredentials?: Credentials);
93
+ protected constructor(rustClient: bridge.RustClient, connectionSettings: SingleNodeOptions, channelCredentials?: ChannelCredentialOptions, defaultUserCredentials?: Credentials);
94
+ /**
95
+ * The name of the connection to use in logs.
96
+ * Can be set via {@link ClientOptions.connectionName} or `connectionName` in the connection string.
97
+ */
98
+ get connectionName(): string;
99
+ private getGRPCClient;
100
+ private disposableStreams;
101
+ protected GRPCStreamCreator: <Client extends GRPCClient, T extends Writable | Readable | Duplex>(Client: GRPCClientConstructor<Client>, debugName: string, creator: (client: Client) => T | Promise<T>, cache?: WeakMap<Client, T | Promise<T>>) => () => Promise<T>;
102
+ dispose: () => Promise<void>;
103
+ protected execute: <Client extends GRPCClient, T>(Client: GRPCClientConstructor<Client>, debugName: string, action: (client: Client) => Promise<T>) => Promise<T>;
104
+ protected get HTTPRequest(): <T = unknown>(method: "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "CONNECT" | "OPTIONS" | "TRACE" | "PATCH", path: string, { searchParams, ...options }: import("./http").HTTPRequestOptions, body?: string) => Promise<T>;
105
+ protected getChannel: () => Promise<Channel>;
106
+ private createGRPCClient;
107
+ private shouldReconnect;
108
+ protected handleError: (client: GRPCClient, error: Error) => Promise<void>;
109
+ private createChannel;
110
+ protected resolveUri: () => Promise<string>;
111
+ private createCredentialsMetadataGenerator;
112
+ protected callArguments: ({ credentials, requiresLeader, deadline, }: BaseOptions, callOptions?: CallOptions) => [Metadata, CallOptions];
113
+ protected createDeadline(deadline?: number): Date;
114
+ protected get capabilities(): Promise<ServerFeatures>;
115
+ protected supports: (method: MethodDefinition<any, any>, feature?: string) => Promise<boolean>;
116
+ protected get throwOnAppendFailure(): boolean;
117
+ get rustClient(): bridge.RustClient;
118
+ }
119
+ export {};
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Client = void 0;
37
+ const fs_1 = require("fs");
38
+ const path_1 = require("path");
39
+ const stream_1 = require("stream");
40
+ const bridge = __importStar(require("@kurrent/db-client-bridge"));
41
+ const uuid_1 = require("uuid");
42
+ const grpc_js_1 = require("@grpc/grpc-js");
43
+ const call_1 = require("@grpc/grpc-js/build/src/call");
44
+ const utils_1 = require("../utils");
45
+ const discovery_1 = require("./discovery");
46
+ const parseConnectionString_1 = require("./parseConnectionString");
47
+ const ServerFeatures_1 = require("./ServerFeatures");
48
+ const http_1 = require("./http");
49
+ class Client {
50
+ #rustClient;
51
+ #throwOnAppendFailure;
52
+ #connectionSettings;
53
+ #channelCredentials;
54
+ #insecure;
55
+ #keepAliveInterval;
56
+ #keepAliveTimeout;
57
+ #defaultDeadline;
58
+ #defaultCredentials;
59
+ #nextChannelSettings;
60
+ #channel;
61
+ #serverFeatures;
62
+ #grpcClients = new Map();
63
+ #http;
64
+ #connectionName;
65
+ /**
66
+ * Returns a connection from a connection string.
67
+ * @param connectionString - The connection string for your database.
68
+ */
69
+ static connectionString(connectionString, ...parts) {
70
+ const string = Array.isArray(connectionString)
71
+ ? connectionString.reduce((acc, chunk, i) => `${acc}${chunk}${parts[i] ?? ""}`, "")
72
+ : connectionString;
73
+ utils_1.debug.connection(`Using connection string: ${string}`);
74
+ const options = (0, parseConnectionString_1.parseConnectionString)(string);
75
+ const channelCredentials = {
76
+ insecure: options.tls === false,
77
+ };
78
+ if (options.tlsCAFile) {
79
+ if (channelCredentials.insecure) {
80
+ utils_1.debug.connection("tslCAFile passed to insecure connection. Will be ignored.");
81
+ }
82
+ else {
83
+ const resolvedPath = (0, path_1.isAbsolute)(options.tlsCAFile)
84
+ ? options.tlsCAFile
85
+ : (0, path_1.resolve)(process.cwd(), options.tlsCAFile);
86
+ utils_1.debug.connection(`Resolved tslCAFile option as ${resolvedPath}`);
87
+ if (!(0, fs_1.existsSync)(resolvedPath)) {
88
+ throw new Error("Failed to load certificate file. File was not found.");
89
+ }
90
+ channelCredentials.rootCertificate = (0, fs_1.readFileSync)(resolvedPath);
91
+ }
92
+ }
93
+ if (options.userCertFile || options.userKeyFile) {
94
+ if (!options.userCertFile || !options.userKeyFile) {
95
+ throw new Error("userCertFile must be given with accompanying userKeyFile");
96
+ }
97
+ const certPathResolved = (0, path_1.isAbsolute)(options.userCertFile)
98
+ ? options.userCertFile
99
+ : (0, path_1.resolve)(process.cwd(), options.userCertFile);
100
+ const certKeyPathResolved = (0, path_1.isAbsolute)(options.userKeyFile)
101
+ ? options.userKeyFile
102
+ : (0, path_1.resolve)(process.cwd(), options.userKeyFile);
103
+ if (!(0, fs_1.existsSync)(certPathResolved)) {
104
+ throw new Error("Failed to load certificate file. File was not found.");
105
+ }
106
+ if (!(0, fs_1.existsSync)(certKeyPathResolved)) {
107
+ throw new Error("Failed to load certificate key file. File was not found.");
108
+ }
109
+ channelCredentials.userKeyFile = (0, fs_1.readFileSync)(certKeyPathResolved);
110
+ channelCredentials.userCertFile = (0, fs_1.readFileSync)(certPathResolved);
111
+ }
112
+ const rustClient = bridge.createClient(string);
113
+ if (options.dnsDiscover) {
114
+ const [discover] = options.hosts;
115
+ if (options.hosts.length > 1) {
116
+ utils_1.debug.connection(`More than one address provided for discovery. Using first: ${discover.address}:${discover.port}.`);
117
+ }
118
+ return new Client(rustClient, {
119
+ discover,
120
+ nodePreference: options.nodePreference,
121
+ discoveryInterval: options.discoveryInterval,
122
+ gossipTimeout: options.gossipTimeout,
123
+ maxDiscoverAttempts: options.maxDiscoverAttempts,
124
+ throwOnAppendFailure: options.throwOnAppendFailure,
125
+ keepAliveInterval: options.keepAliveInterval,
126
+ keepAliveTimeout: options.keepAliveTimeout,
127
+ defaultDeadline: options.defaultDeadline,
128
+ connectionName: options.connectionName,
129
+ }, channelCredentials, options.defaultCredentials);
130
+ }
131
+ if (options.hosts.length > 1) {
132
+ return new Client(rustClient, {
133
+ endpoints: options.hosts,
134
+ nodePreference: options.nodePreference,
135
+ discoveryInterval: options.discoveryInterval,
136
+ gossipTimeout: options.gossipTimeout,
137
+ maxDiscoverAttempts: options.maxDiscoverAttempts,
138
+ throwOnAppendFailure: options.throwOnAppendFailure,
139
+ keepAliveInterval: options.keepAliveInterval,
140
+ keepAliveTimeout: options.keepAliveTimeout,
141
+ defaultDeadline: options.defaultDeadline,
142
+ connectionName: options.connectionName,
143
+ }, channelCredentials, options.defaultCredentials);
144
+ }
145
+ return new Client(rustClient, {
146
+ endpoint: options.hosts[0],
147
+ throwOnAppendFailure: options.throwOnAppendFailure,
148
+ keepAliveInterval: options.keepAliveInterval,
149
+ keepAliveTimeout: options.keepAliveTimeout,
150
+ defaultDeadline: options.defaultDeadline,
151
+ connectionName: options.connectionName,
152
+ }, channelCredentials, options.defaultCredentials);
153
+ }
154
+ constructor(rustClient, { throwOnAppendFailure = true, keepAliveInterval = 10_000, keepAliveTimeout = 10_000, defaultDeadline = 10_000, connectionName = (0, uuid_1.v4)(), ...connectionSettings }, channelCredentials = { insecure: false }, defaultUserCredentials) {
155
+ if (keepAliveInterval < -1) {
156
+ throw new Error(`Invalid keepAliveInterval "${keepAliveInterval}". Please provide a positive integer, or -1 to disable.`);
157
+ }
158
+ if (keepAliveTimeout < -1) {
159
+ throw new Error(`Invalid keepAliveTimeout "${keepAliveTimeout}". Please provide a positive integer, or -1 to disable.`);
160
+ }
161
+ if (keepAliveInterval > -1 && keepAliveInterval < 10_000) {
162
+ console.warn(`Specified KeepAliveInterval of ${keepAliveInterval} is less than recommended 10_000 ms.`);
163
+ }
164
+ if (defaultDeadline <= 0) {
165
+ throw new Error(`Invalid defaultDeadline "${defaultDeadline}". Please provide a positive integer.`);
166
+ }
167
+ this.#rustClient = rustClient;
168
+ this.#throwOnAppendFailure = throwOnAppendFailure;
169
+ this.#keepAliveInterval = keepAliveInterval;
170
+ this.#keepAliveTimeout = keepAliveTimeout;
171
+ this.#defaultDeadline = defaultDeadline;
172
+ this.#connectionSettings = connectionSettings;
173
+ this.#insecure = !!channelCredentials.insecure;
174
+ this.#defaultCredentials = defaultUserCredentials;
175
+ this.#connectionName = connectionName;
176
+ this.#http = new http_1.HTTP(this, channelCredentials, defaultUserCredentials);
177
+ if (this.#insecure) {
178
+ utils_1.debug.connection("Using insecure channel");
179
+ this.#channelCredentials = grpc_js_1.credentials.createInsecure();
180
+ }
181
+ else {
182
+ utils_1.debug.connection("Using secure channel with credentials %O", channelCredentials);
183
+ this.#channelCredentials = grpc_js_1.credentials.createSsl(channelCredentials.rootCertificate, channelCredentials.userKeyFile, channelCredentials.userCertFile, channelCredentials.verifyOptions);
184
+ }
185
+ }
186
+ /**
187
+ * The name of the connection to use in logs.
188
+ * Can be set via {@link ClientOptions.connectionName} or `connectionName` in the connection string.
189
+ */
190
+ get connectionName() {
191
+ return this.#connectionName;
192
+ }
193
+ // Internal access to grpc client.
194
+ getGRPCClient = async (Client, debugName) => {
195
+ if (this.#grpcClients.has(Client)) {
196
+ utils_1.debug.connection("Using existing grpc client for %s", debugName);
197
+ }
198
+ else {
199
+ utils_1.debug.connection("Creating client for %s", debugName);
200
+ this.#grpcClients.set(Client, this.createGRPCClient(Client));
201
+ }
202
+ return this.#grpcClients.get(Client);
203
+ };
204
+ disposableStreams = new Set();
205
+ // Internal handled execution
206
+ GRPCStreamCreator = (Client, debugName, creator, cache) => async () => {
207
+ const client = await this.getGRPCClient(Client, debugName);
208
+ if (cache && cache.has(client))
209
+ return cache.get(client);
210
+ const streamPromise = creator(client);
211
+ cache?.set(client, streamPromise);
212
+ const stream = await streamPromise;
213
+ this.disposableStreams.add(stream);
214
+ (0, stream_1.finished)(stream, (err) => {
215
+ cache?.delete(client);
216
+ this.disposableStreams.delete(stream);
217
+ if (err)
218
+ this.handleError(client, err);
219
+ });
220
+ return stream;
221
+ };
222
+ dispose = async () => {
223
+ utils_1.debug.command(`Disposing ${this.disposableStreams.size} streams.`);
224
+ const promises = [];
225
+ for (const stream of this.disposableStreams) {
226
+ promises.push(new Promise((resolve) => {
227
+ (0, stream_1.finished)(stream, resolve);
228
+ }));
229
+ if (stream instanceof call_1.ClientWritableStreamImpl ||
230
+ stream instanceof call_1.ClientDuplexStreamImpl ||
231
+ stream instanceof call_1.ClientUnaryCallImpl ||
232
+ stream instanceof call_1.ClientReadableStreamImpl) {
233
+ stream.cancel();
234
+ }
235
+ else {
236
+ stream.destroy();
237
+ }
238
+ }
239
+ await Promise.allSettled(promises);
240
+ utils_1.debug.command(`Disposed ${promises.length} streams.`);
241
+ };
242
+ // Internal handled execution
243
+ execute = async (Client, debugName, action) => {
244
+ const client = await this.getGRPCClient(Client, debugName);
245
+ try {
246
+ return await action(client);
247
+ }
248
+ catch (error) {
249
+ this.handleError(client, error);
250
+ throw error;
251
+ }
252
+ };
253
+ get HTTPRequest() {
254
+ return this.#http.request;
255
+ }
256
+ getChannel = async () => {
257
+ if (this.#channel) {
258
+ utils_1.debug.connection("Using existing connection");
259
+ return this.#channel;
260
+ }
261
+ this.#channel = this.createChannel();
262
+ return this.#channel;
263
+ };
264
+ createGRPCClient = async (Client) => {
265
+ const channelOverride = await this.getChannel();
266
+ const client = new Client(null, null, {
267
+ channelOverride,
268
+ });
269
+ return client;
270
+ };
271
+ shouldReconnect = (err) => {
272
+ const error = (0, utils_1.convertToCommandError)(err);
273
+ if (error instanceof utils_1.NotLeaderError) {
274
+ return [true, error.leader];
275
+ }
276
+ return [
277
+ // Server is unavailable to take request
278
+ error instanceof utils_1.UnavailableError ||
279
+ // Server has cancelled a long-running request
280
+ error instanceof utils_1.CancelledError,
281
+ ];
282
+ };
283
+ handleError = async (client, error) => {
284
+ const [shouldReconnect, nextEndpoint] = this.shouldReconnect(error);
285
+ if (!shouldReconnect)
286
+ return;
287
+ utils_1.debug.connection("Got reconnection error", error.message);
288
+ const failedChannel = client.getChannel();
289
+ const currentChannel = await this.#channel;
290
+ if (failedChannel !== currentChannel) {
291
+ utils_1.debug.connection("Channel already reconnected");
292
+ return;
293
+ }
294
+ utils_1.debug.connection(`Reconnection required${nextEndpoint ? ` to: ${nextEndpoint}` : ""}`);
295
+ const [_protocol, address, port] = failedChannel.getTarget().split(":");
296
+ failedChannel.close();
297
+ this.#grpcClients.clear();
298
+ this.#channel = undefined;
299
+ this.#serverFeatures = undefined;
300
+ this.#nextChannelSettings = {
301
+ failedEndpoint: {
302
+ address,
303
+ port: Number.parseInt(port),
304
+ },
305
+ nextEndpoint,
306
+ };
307
+ };
308
+ createChannel = async () => {
309
+ const uri = await this.resolveUri();
310
+ utils_1.debug.connection(`Connecting to http${this.#channelCredentials._isSecure() ? "s" : ""}://%s`, uri);
311
+ this.#nextChannelSettings = undefined;
312
+ return new grpc_js_1.Channel(uri, this.#channelCredentials, {
313
+ "grpc.keepalive_time_ms": this.#keepAliveInterval < 0
314
+ ? Number.MAX_VALUE
315
+ : this.#keepAliveInterval,
316
+ "grpc.keepalive_timeout_ms": this.#keepAliveTimeout < 0 ? Number.MAX_VALUE : this.#keepAliveTimeout,
317
+ // EventStore allows events of up to 16mb to be written internally.
318
+ // While you can't write events this large through gRPC, you could do so through the TCP client, or through projections.
319
+ // To allow the client to read any event that KurrentDB was able to write, we want to hardcode the max receive message length to 17mb.
320
+ "grpc.max_receive_message_length": 17 * 1024 * 1024,
321
+ });
322
+ };
323
+ resolveUri = async () => {
324
+ if (this.#nextChannelSettings?.nextEndpoint) {
325
+ const { address, port } = this.#nextChannelSettings.nextEndpoint;
326
+ return `${address}:${port}`;
327
+ }
328
+ if ("endpoint" in this.#connectionSettings) {
329
+ const { endpoint } = this.#connectionSettings;
330
+ return typeof endpoint === "string"
331
+ ? endpoint
332
+ : `${endpoint.address}:${endpoint.port}`;
333
+ }
334
+ try {
335
+ const { address, port } = await (0, discovery_1.discoverEndpoint)(this.#connectionSettings, this.#channelCredentials, this.#nextChannelSettings?.failedEndpoint);
336
+ return `${address}:${port}`;
337
+ }
338
+ catch (error) {
339
+ this.#grpcClients.clear();
340
+ this.#channel = undefined;
341
+ throw error;
342
+ }
343
+ };
344
+ createCredentialsMetadataGenerator = ({ username, password, }) => (_, cb) => {
345
+ const metadata = new grpc_js_1.Metadata();
346
+ if (this.#insecure) {
347
+ utils_1.debug.connection("Credentials are unsupported in insecure mode, and will be ignored.");
348
+ }
349
+ else {
350
+ const auth = Buffer.from(`${username}:${password}`).toString("base64");
351
+ metadata.add("authorization", `Basic ${auth}`);
352
+ }
353
+ return cb(null, metadata);
354
+ };
355
+ callArguments = ({ credentials = this.#defaultCredentials, requiresLeader, deadline, }, callOptions) => {
356
+ const metadata = new grpc_js_1.Metadata();
357
+ const options = callOptions ? { ...callOptions } : {};
358
+ metadata.add("connection-name", this.#connectionName);
359
+ if (requiresLeader) {
360
+ metadata.add("requires-leader", "true");
361
+ }
362
+ if (credentials) {
363
+ options.credentials = grpc_js_1.CallCredentials.createFromMetadataGenerator(this.createCredentialsMetadataGenerator(credentials));
364
+ }
365
+ options.deadline = options.deadline ?? this.createDeadline(deadline);
366
+ return [metadata, options];
367
+ };
368
+ createDeadline(deadline = this.#defaultDeadline) {
369
+ // grpcJS chokes on an invalid date, so we cap the deadline to max 1 year.
370
+ return new Date(Date.now() + Math.min(deadline, 0x757b12c00));
371
+ }
372
+ get capabilities() {
373
+ if (!this.#serverFeatures) {
374
+ utils_1.debug.command("Fetching server capabilities");
375
+ this.#serverFeatures = this.execute(...ServerFeatures_1.ServerFeatures.createServerFeatures);
376
+ }
377
+ return this.#serverFeatures;
378
+ }
379
+ supports = async (
380
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
381
+ method, feature) => (await this.capabilities).supports(method, feature);
382
+ get throwOnAppendFailure() {
383
+ return this.#throwOnAppendFailure;
384
+ }
385
+ get rustClient() {
386
+ return this.#rustClient;
387
+ }
388
+ }
389
+ exports.Client = Client;
390
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Credentials, EndPoint, NodePreference } from "../types";
2
+ export interface QueryOptions {
3
+ userCertFile?: string;
4
+ userKeyFile?: string;
5
+ maxDiscoverAttempts?: number;
6
+ connectionName?: string;
7
+ defaultDeadline?: number;
8
+ discoveryInterval?: number;
9
+ gossipTimeout?: number;
10
+ nodePreference?: NodePreference;
11
+ tls?: boolean;
12
+ tlsVerifyCert?: boolean;
13
+ tlsCAFile?: string;
14
+ throwOnAppendFailure?: boolean;
15
+ keepAliveInterval?: number;
16
+ keepAliveTimeout?: number;
17
+ }
18
+ export interface ConnectionOptions extends QueryOptions {
19
+ dnsDiscover: boolean;
20
+ defaultCredentials?: Credentials;
21
+ hosts: EndPoint[];
22
+ }
23
+ export declare const parseConnectionString: (connectionString: string) => ConnectionOptions;