@cratis/chronicle.contracts 0.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 (333) hide show
  1. package/ChronicleConnection.ts +419 -0
  2. package/ChronicleConnectionString.ts +462 -0
  3. package/ChronicleServices.ts +104 -0
  4. package/DateTimeOffset.ts +27 -0
  5. package/README.md +221 -0
  6. package/TokenProvider.ts +167 -0
  7. package/dist/ChronicleConnection.d.ts +63 -0
  8. package/dist/ChronicleConnection.d.ts.map +1 -0
  9. package/dist/ChronicleConnection.js +223 -0
  10. package/dist/ChronicleConnection.js.map +1 -0
  11. package/dist/ChronicleConnectionString.d.ts +67 -0
  12. package/dist/ChronicleConnectionString.d.ts.map +1 -0
  13. package/dist/ChronicleConnectionString.js +255 -0
  14. package/dist/ChronicleConnectionString.js.map +1 -0
  15. package/dist/ChronicleServices.d.ts +35 -0
  16. package/dist/ChronicleServices.d.ts.map +1 -0
  17. package/dist/ChronicleServices.js +2 -0
  18. package/dist/ChronicleServices.js.map +1 -0
  19. package/dist/DateTimeOffset.d.ts +4 -0
  20. package/dist/DateTimeOffset.d.ts.map +1 -0
  21. package/dist/DateTimeOffset.js +11 -0
  22. package/dist/DateTimeOffset.js.map +1 -0
  23. package/dist/TokenProvider.d.ts +21 -0
  24. package/dist/TokenProvider.d.ts.map +1 -0
  25. package/dist/TokenProvider.js +92 -0
  26. package/dist/TokenProvider.js.map +1 -0
  27. package/dist/cjs/ChronicleConnection.d.ts +63 -0
  28. package/dist/cjs/ChronicleConnection.d.ts.map +1 -0
  29. package/dist/cjs/ChronicleConnection.js +245 -0
  30. package/dist/cjs/ChronicleConnection.js.map +1 -0
  31. package/dist/cjs/ChronicleConnectionString.d.ts +67 -0
  32. package/dist/cjs/ChronicleConnectionString.d.ts.map +1 -0
  33. package/dist/cjs/ChronicleConnectionString.js +280 -0
  34. package/dist/cjs/ChronicleConnectionString.js.map +1 -0
  35. package/dist/cjs/ChronicleServices.d.ts +35 -0
  36. package/dist/cjs/ChronicleServices.d.ts.map +1 -0
  37. package/dist/cjs/DateTimeOffset.d.ts +4 -0
  38. package/dist/cjs/DateTimeOffset.d.ts.map +1 -0
  39. package/dist/cjs/DateTimeOffset.js +16 -0
  40. package/dist/cjs/DateTimeOffset.js.map +1 -0
  41. package/dist/cjs/TokenProvider.d.ts +21 -0
  42. package/dist/cjs/TokenProvider.d.ts.map +1 -0
  43. package/dist/cjs/TokenProvider.js +118 -0
  44. package/dist/cjs/TokenProvider.js.map +1 -0
  45. package/dist/cjs/generated/clients.d.ts +82 -0
  46. package/dist/cjs/generated/clients.d.ts.map +1 -0
  47. package/dist/cjs/generated/clients.js +235 -0
  48. package/dist/cjs/generated/clients.js.map +1 -0
  49. package/dist/cjs/generated/cratis_chronicle_contracts.d.ts +135 -0
  50. package/dist/cjs/generated/cratis_chronicle_contracts.d.ts.map +1 -0
  51. package/dist/cjs/generated/cratis_chronicle_contracts.js +300 -0
  52. package/dist/cjs/generated/cratis_chronicle_contracts.js.map +1 -0
  53. package/dist/cjs/generated/events.d.ts +166 -0
  54. package/dist/cjs/generated/events.d.ts.map +1 -0
  55. package/dist/cjs/generated/events.js +899 -0
  56. package/dist/cjs/generated/events.js.map +1 -0
  57. package/dist/cjs/generated/events_constraints.d.ts +83 -0
  58. package/dist/cjs/generated/events_constraints.d.ts.map +1 -0
  59. package/dist/cjs/generated/events_constraints.js +512 -0
  60. package/dist/cjs/generated/events_constraints.js.map +1 -0
  61. package/dist/cjs/generated/eventsequences.d.ts +400 -0
  62. package/dist/cjs/generated/eventsequences.d.ts.map +1 -0
  63. package/dist/cjs/generated/eventsequences.js +3866 -0
  64. package/dist/cjs/generated/eventsequences.js.map +1 -0
  65. package/dist/cjs/generated/google/protobuf/empty.d.ts +19 -0
  66. package/dist/cjs/generated/google/protobuf/empty.d.ts.map +1 -0
  67. package/dist/cjs/generated/google/protobuf/empty.js +42 -0
  68. package/dist/cjs/generated/google/protobuf/empty.js.map +1 -0
  69. package/dist/cjs/generated/host.d.ts +61 -0
  70. package/dist/cjs/generated/host.d.ts.map +1 -0
  71. package/dist/cjs/generated/host.js +103 -0
  72. package/dist/cjs/generated/host.js.map +1 -0
  73. package/dist/cjs/generated/identities.d.ts +70 -0
  74. package/dist/cjs/generated/identities.d.ts.map +1 -0
  75. package/dist/cjs/generated/identities.js +255 -0
  76. package/dist/cjs/generated/identities.js.map +1 -0
  77. package/dist/cjs/generated/jobs.d.ts +258 -0
  78. package/dist/cjs/generated/jobs.d.ts.map +1 -0
  79. package/dist/cjs/generated/jobs.js +1709 -0
  80. package/dist/cjs/generated/jobs.js.map +1 -0
  81. package/dist/cjs/generated/observation.d.ts +278 -0
  82. package/dist/cjs/generated/observation.d.ts.map +1 -0
  83. package/dist/cjs/generated/observation.js +1573 -0
  84. package/dist/cjs/generated/observation.js.map +1 -0
  85. package/dist/cjs/generated/observation_eventstoresubscriptions.d.ts +99 -0
  86. package/dist/cjs/generated/observation_eventstoresubscriptions.d.ts.map +1 -0
  87. package/dist/cjs/generated/observation_reactors.d.ts +198 -0
  88. package/dist/cjs/generated/observation_reactors.d.ts.map +1 -0
  89. package/dist/cjs/generated/observation_reactors.js +1918 -0
  90. package/dist/cjs/generated/observation_reactors.js.map +1 -0
  91. package/dist/cjs/generated/observation_reducers.d.ts +183 -0
  92. package/dist/cjs/generated/observation_reducers.d.ts.map +1 -0
  93. package/dist/cjs/generated/observation_reducers.js +1906 -0
  94. package/dist/cjs/generated/observation_reducers.js.map +1 -0
  95. package/dist/cjs/generated/observation_webhooks.d.ts +203 -0
  96. package/dist/cjs/generated/observation_webhooks.d.ts.map +1 -0
  97. package/dist/cjs/generated/observation_webhooks.js +1344 -0
  98. package/dist/cjs/generated/observation_webhooks.js.map +1 -0
  99. package/dist/cjs/generated/projections.d.ts +421 -0
  100. package/dist/cjs/generated/projections.d.ts.map +1 -0
  101. package/dist/cjs/generated/projections.js +3985 -0
  102. package/dist/cjs/generated/projections.js.map +1 -0
  103. package/dist/cjs/generated/protobuf-net/bcl.d.ts +55 -0
  104. package/dist/cjs/generated/protobuf-net/bcl.d.ts.map +1 -0
  105. package/dist/cjs/generated/protobuf-net/bcl.js +457 -0
  106. package/dist/cjs/generated/protobuf-net/bcl.js.map +1 -0
  107. package/dist/cjs/generated/readmodels.d.ts +436 -0
  108. package/dist/cjs/generated/readmodels.d.ts.map +1 -0
  109. package/dist/cjs/generated/readmodels.js +3608 -0
  110. package/dist/cjs/generated/readmodels.js.map +1 -0
  111. package/dist/cjs/generated/recommendations.d.ts +109 -0
  112. package/dist/cjs/generated/recommendations.d.ts.map +1 -0
  113. package/dist/cjs/generated/recommendations.js +430 -0
  114. package/dist/cjs/generated/recommendations.js.map +1 -0
  115. package/dist/cjs/generated/security.d.ts +288 -0
  116. package/dist/cjs/generated/security.d.ts.map +1 -0
  117. package/dist/cjs/generated/security.js +1247 -0
  118. package/dist/cjs/generated/security.js.map +1 -0
  119. package/dist/cjs/generated/seeding.d.ts +109 -0
  120. package/dist/cjs/generated/seeding.d.ts.map +1 -0
  121. package/dist/cjs/generated/seeding.js +619 -0
  122. package/dist/cjs/generated/seeding.js.map +1 -0
  123. package/dist/cjs/index.d.ts +33 -0
  124. package/dist/cjs/index.d.ts.map +1 -0
  125. package/dist/cjs/index.js +372 -0
  126. package/dist/cjs/index.js.map +1 -0
  127. package/dist/esm/ChronicleConnection.d.ts +63 -0
  128. package/dist/esm/ChronicleConnection.d.ts.map +1 -0
  129. package/dist/esm/ChronicleConnection.js +224 -0
  130. package/dist/esm/ChronicleConnection.js.map +1 -0
  131. package/dist/esm/ChronicleConnectionString.d.ts +67 -0
  132. package/dist/esm/ChronicleConnectionString.d.ts.map +1 -0
  133. package/dist/esm/ChronicleConnectionString.js +258 -0
  134. package/dist/esm/ChronicleConnectionString.js.map +1 -0
  135. package/dist/esm/ChronicleServices.d.ts +35 -0
  136. package/dist/esm/ChronicleServices.d.ts.map +1 -0
  137. package/dist/esm/DateTimeOffset.d.ts +4 -0
  138. package/dist/esm/DateTimeOffset.d.ts.map +1 -0
  139. package/dist/esm/DateTimeOffset.js +13 -0
  140. package/dist/esm/DateTimeOffset.js.map +1 -0
  141. package/dist/esm/TokenProvider.d.ts +21 -0
  142. package/dist/esm/TokenProvider.d.ts.map +1 -0
  143. package/dist/esm/TokenProvider.js +95 -0
  144. package/dist/esm/TokenProvider.js.map +1 -0
  145. package/dist/esm/generated/clients.d.ts +82 -0
  146. package/dist/esm/generated/clients.d.ts.map +1 -0
  147. package/dist/esm/generated/clients.js +228 -0
  148. package/dist/esm/generated/clients.js.map +1 -0
  149. package/dist/esm/generated/cratis_chronicle_contracts.d.ts +135 -0
  150. package/dist/esm/generated/cratis_chronicle_contracts.d.ts.map +1 -0
  151. package/dist/esm/generated/cratis_chronicle_contracts.js +291 -0
  152. package/dist/esm/generated/cratis_chronicle_contracts.js.map +1 -0
  153. package/dist/esm/generated/events.d.ts +166 -0
  154. package/dist/esm/generated/events.d.ts.map +1 -0
  155. package/dist/esm/generated/events.js +885 -0
  156. package/dist/esm/generated/events.js.map +1 -0
  157. package/dist/esm/generated/events_constraints.d.ts +83 -0
  158. package/dist/esm/generated/events_constraints.d.ts.map +1 -0
  159. package/dist/esm/generated/events_constraints.js +501 -0
  160. package/dist/esm/generated/events_constraints.js.map +1 -0
  161. package/dist/esm/generated/eventsequences.d.ts +400 -0
  162. package/dist/esm/generated/eventsequences.d.ts.map +1 -0
  163. package/dist/esm/generated/eventsequences.js +3829 -0
  164. package/dist/esm/generated/eventsequences.js.map +1 -0
  165. package/dist/esm/generated/google/protobuf/empty.d.ts +19 -0
  166. package/dist/esm/generated/google/protobuf/empty.d.ts.map +1 -0
  167. package/dist/esm/generated/google/protobuf/empty.js +40 -0
  168. package/dist/esm/generated/google/protobuf/empty.js.map +1 -0
  169. package/dist/esm/generated/host.d.ts +61 -0
  170. package/dist/esm/generated/host.d.ts.map +1 -0
  171. package/dist/esm/generated/host.js +99 -0
  172. package/dist/esm/generated/host.js.map +1 -0
  173. package/dist/esm/generated/identities.d.ts +70 -0
  174. package/dist/esm/generated/identities.d.ts.map +1 -0
  175. package/dist/esm/generated/identities.js +249 -0
  176. package/dist/esm/generated/identities.js.map +1 -0
  177. package/dist/esm/generated/jobs.d.ts +258 -0
  178. package/dist/esm/generated/jobs.d.ts.map +1 -0
  179. package/dist/esm/generated/jobs.js +1684 -0
  180. package/dist/esm/generated/jobs.js.map +1 -0
  181. package/dist/esm/generated/observation.d.ts +278 -0
  182. package/dist/esm/generated/observation.d.ts.map +1 -0
  183. package/dist/esm/generated/observation.js +1548 -0
  184. package/dist/esm/generated/observation.js.map +1 -0
  185. package/dist/esm/generated/observation_eventstoresubscriptions.d.ts +99 -0
  186. package/dist/esm/generated/observation_eventstoresubscriptions.d.ts.map +1 -0
  187. package/dist/esm/generated/observation_reactors.d.ts +198 -0
  188. package/dist/esm/generated/observation_reactors.d.ts.map +1 -0
  189. package/dist/esm/generated/observation_reactors.js +1893 -0
  190. package/dist/esm/generated/observation_reactors.js.map +1 -0
  191. package/dist/esm/generated/observation_reducers.d.ts +183 -0
  192. package/dist/esm/generated/observation_reducers.d.ts.map +1 -0
  193. package/dist/esm/generated/observation_reducers.js +1882 -0
  194. package/dist/esm/generated/observation_reducers.js.map +1 -0
  195. package/dist/esm/generated/observation_webhooks.d.ts +203 -0
  196. package/dist/esm/generated/observation_webhooks.d.ts.map +1 -0
  197. package/dist/esm/generated/observation_webhooks.js +1323 -0
  198. package/dist/esm/generated/observation_webhooks.js.map +1 -0
  199. package/dist/esm/generated/projections.d.ts +421 -0
  200. package/dist/esm/generated/projections.d.ts.map +1 -0
  201. package/dist/esm/generated/projections.js +3930 -0
  202. package/dist/esm/generated/projections.js.map +1 -0
  203. package/dist/esm/generated/protobuf-net/bcl.d.ts +55 -0
  204. package/dist/esm/generated/protobuf-net/bcl.d.ts.map +1 -0
  205. package/dist/esm/generated/protobuf-net/bcl.js +449 -0
  206. package/dist/esm/generated/protobuf-net/bcl.js.map +1 -0
  207. package/dist/esm/generated/readmodels.d.ts +436 -0
  208. package/dist/esm/generated/readmodels.d.ts.map +1 -0
  209. package/dist/esm/generated/readmodels.js +3564 -0
  210. package/dist/esm/generated/readmodels.js.map +1 -0
  211. package/dist/esm/generated/recommendations.d.ts +109 -0
  212. package/dist/esm/generated/recommendations.d.ts.map +1 -0
  213. package/dist/esm/generated/recommendations.js +422 -0
  214. package/dist/esm/generated/recommendations.js.map +1 -0
  215. package/dist/esm/generated/security.d.ts +288 -0
  216. package/dist/esm/generated/security.d.ts.map +1 -0
  217. package/dist/esm/generated/security.js +1228 -0
  218. package/dist/esm/generated/security.js.map +1 -0
  219. package/dist/esm/generated/seeding.d.ts +109 -0
  220. package/dist/esm/generated/seeding.d.ts.map +1 -0
  221. package/dist/esm/generated/seeding.js +609 -0
  222. package/dist/esm/generated/seeding.js.map +1 -0
  223. package/dist/esm/index.d.ts +33 -0
  224. package/dist/esm/index.d.ts.map +1 -0
  225. package/dist/esm/index.js +23 -0
  226. package/dist/esm/index.js.map +1 -0
  227. package/dist/generated/clients.d.ts +82 -0
  228. package/dist/generated/clients.d.ts.map +1 -0
  229. package/dist/generated/clients.js +225 -0
  230. package/dist/generated/clients.js.map +1 -0
  231. package/dist/generated/cratis_chronicle_contracts.d.ts +135 -0
  232. package/dist/generated/cratis_chronicle_contracts.d.ts.map +1 -0
  233. package/dist/generated/cratis_chronicle_contracts.js +289 -0
  234. package/dist/generated/cratis_chronicle_contracts.js.map +1 -0
  235. package/dist/generated/events.d.ts +166 -0
  236. package/dist/generated/events.d.ts.map +1 -0
  237. package/dist/generated/events.js +883 -0
  238. package/dist/generated/events.js.map +1 -0
  239. package/dist/generated/events_constraints.d.ts +83 -0
  240. package/dist/generated/events_constraints.d.ts.map +1 -0
  241. package/dist/generated/events_constraints.js +499 -0
  242. package/dist/generated/events_constraints.js.map +1 -0
  243. package/dist/generated/eventsequences.d.ts +400 -0
  244. package/dist/generated/eventsequences.d.ts.map +1 -0
  245. package/dist/generated/eventsequences.js +3829 -0
  246. package/dist/generated/eventsequences.js.map +1 -0
  247. package/dist/generated/google/protobuf/empty.d.ts +19 -0
  248. package/dist/generated/google/protobuf/empty.d.ts.map +1 -0
  249. package/dist/generated/google/protobuf/empty.js +40 -0
  250. package/dist/generated/google/protobuf/empty.js.map +1 -0
  251. package/dist/generated/host.d.ts +61 -0
  252. package/dist/generated/host.d.ts.map +1 -0
  253. package/dist/generated/host.js +97 -0
  254. package/dist/generated/host.js.map +1 -0
  255. package/dist/generated/identities.d.ts +70 -0
  256. package/dist/generated/identities.d.ts.map +1 -0
  257. package/dist/generated/identities.js +247 -0
  258. package/dist/generated/identities.js.map +1 -0
  259. package/dist/generated/jobs.d.ts +258 -0
  260. package/dist/generated/jobs.d.ts.map +1 -0
  261. package/dist/generated/jobs.js +1682 -0
  262. package/dist/generated/jobs.js.map +1 -0
  263. package/dist/generated/observation.d.ts +278 -0
  264. package/dist/generated/observation.d.ts.map +1 -0
  265. package/dist/generated/observation.js +1546 -0
  266. package/dist/generated/observation.js.map +1 -0
  267. package/dist/generated/observation_eventstoresubscriptions.d.ts +99 -0
  268. package/dist/generated/observation_eventstoresubscriptions.d.ts.map +1 -0
  269. package/dist/generated/observation_eventstoresubscriptions.js +452 -0
  270. package/dist/generated/observation_eventstoresubscriptions.js.map +1 -0
  271. package/dist/generated/observation_reactors.d.ts +198 -0
  272. package/dist/generated/observation_reactors.d.ts.map +1 -0
  273. package/dist/generated/observation_reactors.js +1891 -0
  274. package/dist/generated/observation_reactors.js.map +1 -0
  275. package/dist/generated/observation_reducers.d.ts +183 -0
  276. package/dist/generated/observation_reducers.d.ts.map +1 -0
  277. package/dist/generated/observation_reducers.js +1880 -0
  278. package/dist/generated/observation_reducers.js.map +1 -0
  279. package/dist/generated/observation_webhooks.d.ts +203 -0
  280. package/dist/generated/observation_webhooks.d.ts.map +1 -0
  281. package/dist/generated/observation_webhooks.js +1321 -0
  282. package/dist/generated/observation_webhooks.js.map +1 -0
  283. package/dist/generated/projections.d.ts +421 -0
  284. package/dist/generated/projections.d.ts.map +1 -0
  285. package/dist/generated/projections.js +3928 -0
  286. package/dist/generated/projections.js.map +1 -0
  287. package/dist/generated/protobuf-net/bcl.d.ts +55 -0
  288. package/dist/generated/protobuf-net/bcl.d.ts.map +1 -0
  289. package/dist/generated/protobuf-net/bcl.js +447 -0
  290. package/dist/generated/protobuf-net/bcl.js.map +1 -0
  291. package/dist/generated/readmodels.d.ts +436 -0
  292. package/dist/generated/readmodels.d.ts.map +1 -0
  293. package/dist/generated/readmodels.js +3562 -0
  294. package/dist/generated/readmodels.js.map +1 -0
  295. package/dist/generated/recommendations.d.ts +109 -0
  296. package/dist/generated/recommendations.d.ts.map +1 -0
  297. package/dist/generated/recommendations.js +420 -0
  298. package/dist/generated/recommendations.js.map +1 -0
  299. package/dist/generated/security.d.ts +288 -0
  300. package/dist/generated/security.d.ts.map +1 -0
  301. package/dist/generated/security.js +1226 -0
  302. package/dist/generated/security.js.map +1 -0
  303. package/dist/generated/seeding.d.ts +109 -0
  304. package/dist/generated/seeding.d.ts.map +1 -0
  305. package/dist/generated/seeding.js +607 -0
  306. package/dist/generated/seeding.js.map +1 -0
  307. package/dist/index.d.ts +33 -0
  308. package/dist/index.d.ts.map +1 -0
  309. package/dist/index.js +32 -0
  310. package/dist/index.js.map +1 -0
  311. package/dist/tsconfig.tsbuildinfo +1 -0
  312. package/generated/clients.ts +356 -0
  313. package/generated/cratis_chronicle_contracts.ts +480 -0
  314. package/generated/events.ts +1191 -0
  315. package/generated/events_constraints.ts +668 -0
  316. package/generated/eventsequences.ts +4629 -0
  317. package/generated/google/protobuf/empty.ts +82 -0
  318. package/generated/host.ts +191 -0
  319. package/generated/identities.ts +368 -0
  320. package/generated/jobs.ts +2093 -0
  321. package/generated/observation.ts +1999 -0
  322. package/generated/observation_eventstoresubscriptions.ts +646 -0
  323. package/generated/observation_reactors.ts +2278 -0
  324. package/generated/observation_reducers.ts +2248 -0
  325. package/generated/observation_webhooks.ts +1717 -0
  326. package/generated/projections.ts +4817 -0
  327. package/generated/protobuf-net/bcl.ts +562 -0
  328. package/generated/readmodels.ts +4378 -0
  329. package/generated/recommendations.ts +602 -0
  330. package/generated/security.ts +1668 -0
  331. package/generated/seeding.ts +805 -0
  332. package/index.ts +46 -0
  333. package/package.json +49 -0
@@ -0,0 +1,462 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import * as grpc from '@grpc/grpc-js';
5
+
6
+ /**
7
+ * Authentication mode for Chronicle connection
8
+ */
9
+ export enum AuthenticationMode {
10
+ /**
11
+ * Client credentials authentication (username:password)
12
+ */
13
+ ClientCredentials = 'ClientCredentials',
14
+
15
+ /**
16
+ * API key authentication
17
+ */
18
+ ApiKey = 'ApiKey',
19
+ }
20
+
21
+ /**
22
+ * Represents a server address with host and port
23
+ */
24
+ export interface ChronicleServerAddress {
25
+ /**
26
+ * The host name or IP address
27
+ */
28
+ host: string;
29
+
30
+ /**
31
+ * The port number
32
+ */
33
+ port: number;
34
+ }
35
+
36
+ /**
37
+ * Builder for constructing Chronicle connection strings
38
+ */
39
+ export class ChronicleConnectionStringBuilder {
40
+ private static readonly DEFAULT_PORT = 35000;
41
+ private static readonly HOST_KEY = 'Host';
42
+ private static readonly PORT_KEY = 'Port';
43
+ private static readonly USERNAME_KEY = 'Username';
44
+ private static readonly PASSWORD_KEY = 'Password';
45
+ private static readonly SCHEME_KEY = 'Scheme';
46
+ private static readonly API_KEY_KEY = 'apiKey';
47
+ private static readonly DISABLE_TLS_KEY = 'disableTls';
48
+ private static readonly CERTIFICATE_PATH_KEY = 'certificatePath';
49
+ private static readonly CERTIFICATE_PASSWORD_KEY = 'certificatePassword';
50
+
51
+ private properties: Map<string, string> = new Map();
52
+
53
+ /**
54
+ * Creates a new connection string builder
55
+ * @param connectionString Optional connection string to parse
56
+ */
57
+ constructor(connectionString?: string) {
58
+ if (connectionString) {
59
+ this.parseConnectionString(connectionString);
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Gets or sets the host
65
+ */
66
+ get host(): string {
67
+ return this.properties.get(ChronicleConnectionStringBuilder.HOST_KEY) || 'localhost';
68
+ }
69
+
70
+ set host(value: string) {
71
+ this.properties.set(ChronicleConnectionStringBuilder.HOST_KEY, value);
72
+ }
73
+
74
+ /**
75
+ * Gets or sets the port
76
+ */
77
+ get port(): number {
78
+ const portStr = this.properties.get(ChronicleConnectionStringBuilder.PORT_KEY);
79
+ return portStr ? parseInt(portStr, 10) : ChronicleConnectionStringBuilder.DEFAULT_PORT;
80
+ }
81
+
82
+ set port(value: number) {
83
+ this.properties.set(ChronicleConnectionStringBuilder.PORT_KEY, value.toString());
84
+ }
85
+
86
+ /**
87
+ * Gets or sets the username for authentication
88
+ */
89
+ get username(): string | undefined {
90
+ return this.properties.get(ChronicleConnectionStringBuilder.USERNAME_KEY);
91
+ }
92
+
93
+ set username(value: string | undefined) {
94
+ if (value) {
95
+ this.properties.set(ChronicleConnectionStringBuilder.USERNAME_KEY, value);
96
+ } else {
97
+ this.properties.delete(ChronicleConnectionStringBuilder.USERNAME_KEY);
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Gets or sets the password for authentication
103
+ */
104
+ get password(): string | undefined {
105
+ return this.properties.get(ChronicleConnectionStringBuilder.PASSWORD_KEY);
106
+ }
107
+
108
+ set password(value: string | undefined) {
109
+ if (value) {
110
+ this.properties.set(ChronicleConnectionStringBuilder.PASSWORD_KEY, value);
111
+ } else {
112
+ this.properties.delete(ChronicleConnectionStringBuilder.PASSWORD_KEY);
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Gets or sets the scheme
118
+ */
119
+ get scheme(): string {
120
+ return this.properties.get(ChronicleConnectionStringBuilder.SCHEME_KEY) || 'chronicle';
121
+ }
122
+
123
+ set scheme(value: string) {
124
+ this.properties.set(ChronicleConnectionStringBuilder.SCHEME_KEY, value);
125
+ }
126
+
127
+ /**
128
+ * Gets the authentication mode based on configured credentials
129
+ */
130
+ get authenticationMode(): AuthenticationMode {
131
+ const hasClientCredentials = !!this.username && !!this.password;
132
+ const hasApiKey = !!this.apiKey;
133
+
134
+ if (hasClientCredentials && hasApiKey) {
135
+ throw new Error('Cannot specify both client credentials and API key authentication');
136
+ }
137
+
138
+ if (hasClientCredentials) {
139
+ return AuthenticationMode.ClientCredentials;
140
+ }
141
+
142
+ if (hasApiKey) {
143
+ return AuthenticationMode.ApiKey;
144
+ }
145
+
146
+ throw new Error('No authentication method specified. Please provide either client credentials or API key');
147
+ }
148
+
149
+ /**
150
+ * Gets or sets the API key for authentication
151
+ */
152
+ get apiKey(): string | undefined {
153
+ return this.properties.get(ChronicleConnectionStringBuilder.API_KEY_KEY);
154
+ }
155
+
156
+ set apiKey(value: string | undefined) {
157
+ if (value) {
158
+ this.properties.set(ChronicleConnectionStringBuilder.API_KEY_KEY, value);
159
+ } else {
160
+ this.properties.delete(ChronicleConnectionStringBuilder.API_KEY_KEY);
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Gets or sets whether TLS is disabled
166
+ */
167
+ get disableTls(): boolean {
168
+ const value = this.properties.get(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY);
169
+ return value === 'true';
170
+ }
171
+
172
+ set disableTls(value: boolean) {
173
+ this.properties.set(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY, value.toString());
174
+ }
175
+
176
+ /**
177
+ * Gets or sets the certificate path
178
+ */
179
+ get certificatePath(): string | undefined {
180
+ return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);
181
+ }
182
+
183
+ set certificatePath(value: string | undefined) {
184
+ if (value) {
185
+ this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY, value);
186
+ } else {
187
+ this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Gets or sets the certificate password
193
+ */
194
+ get certificatePassword(): string | undefined {
195
+ return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);
196
+ }
197
+
198
+ set certificatePassword(value: string | undefined) {
199
+ if (value) {
200
+ this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY, value);
201
+ } else {
202
+ this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Builds the connection string
208
+ */
209
+ build(): string {
210
+ let url = `${this.scheme}://`;
211
+
212
+ if (this.username) {
213
+ url += this.username;
214
+ if (this.password) {
215
+ url += `:${this.password}`;
216
+ }
217
+ url += '@';
218
+ }
219
+
220
+ url += this.host;
221
+ url += `:${this.port}`;
222
+
223
+ const queryParams: string[] = [];
224
+
225
+ if (this.apiKey) {
226
+ queryParams.push(`apiKey=${encodeURIComponent(this.apiKey)}`);
227
+ }
228
+
229
+ if (this.disableTls) {
230
+ queryParams.push('disableTls=true');
231
+ }
232
+
233
+ if (this.certificatePath) {
234
+ queryParams.push(`certificatePath=${encodeURIComponent(this.certificatePath)}`);
235
+ }
236
+
237
+ if (this.certificatePassword) {
238
+ queryParams.push(`certificatePassword=${encodeURIComponent(this.certificatePassword)}`);
239
+ }
240
+
241
+ // Add any other custom query parameters
242
+ for (const [key, value] of this.properties) {
243
+ if (
244
+ key !== ChronicleConnectionStringBuilder.HOST_KEY &&
245
+ key !== ChronicleConnectionStringBuilder.PORT_KEY &&
246
+ key !== ChronicleConnectionStringBuilder.USERNAME_KEY &&
247
+ key !== ChronicleConnectionStringBuilder.PASSWORD_KEY &&
248
+ key !== ChronicleConnectionStringBuilder.SCHEME_KEY &&
249
+ key !== ChronicleConnectionStringBuilder.API_KEY_KEY &&
250
+ key !== ChronicleConnectionStringBuilder.DISABLE_TLS_KEY &&
251
+ key !== ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY &&
252
+ key !== ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY
253
+ ) {
254
+ queryParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
255
+ }
256
+ }
257
+
258
+ if (queryParams.length > 0) {
259
+ url += `?${queryParams.join('&')}`;
260
+ }
261
+
262
+ return url;
263
+ }
264
+
265
+ private parseConnectionString(connectionString: string): void {
266
+ if (!connectionString) {
267
+ return;
268
+ }
269
+
270
+ // Check if it's a Chronicle URL format
271
+ if (
272
+ connectionString.startsWith('chronicle://') ||
273
+ connectionString.startsWith('chronicle+srv://')
274
+ ) {
275
+ this.parseUrl(connectionString);
276
+ }
277
+ }
278
+
279
+ private parseUrl(url: string): void {
280
+ try {
281
+ const parsed = new URL(url);
282
+
283
+ // Extract scheme
284
+ this.scheme = parsed.protocol.replace(':', '');
285
+
286
+ // Extract host
287
+ this.host = parsed.hostname;
288
+
289
+ // Extract port
290
+ if (parsed.port) {
291
+ this.port = parseInt(parsed.port, 10);
292
+ }
293
+
294
+ // Extract username and password from userInfo
295
+ if (parsed.username) {
296
+ this.username = decodeURIComponent(parsed.username);
297
+ if (parsed.password) {
298
+ this.password = decodeURIComponent(parsed.password);
299
+ }
300
+ }
301
+
302
+ // Parse query string parameters
303
+ if (parsed.search) {
304
+ const searchParams = new URLSearchParams(parsed.search);
305
+ for (const [key, value] of searchParams) {
306
+ this.properties.set(key, decodeURIComponent(value));
307
+ }
308
+ }
309
+ } catch (error) {
310
+ throw new Error(`Invalid Chronicle connection string: ${error}`);
311
+ }
312
+ }
313
+ }
314
+
315
+ /**
316
+ * Represents a Chronicle connection string
317
+ *
318
+ * Supported formats:
319
+ * - chronicle://<host>[:<port>]/?<options>
320
+ * - chronicle://username:password@<host>[:<port>]/?<options>
321
+ * - chronicle+srv://<host>[:<port>]/?<options>
322
+ * - chronicle://<host>[:<port>],<host>[:<port>],<host>[:<port>]/?<options>
323
+ */
324
+ export class ChronicleConnectionString {
325
+ /**
326
+ * The default client ID for development purposes
327
+ */
328
+ static readonly DEVELOPMENT_CLIENT = 'chronicle-dev-client';
329
+
330
+ /**
331
+ * The default client secret for development purposes
332
+ */
333
+ static readonly DEVELOPMENT_CLIENT_SECRET = 'chronicle-dev-secret';
334
+
335
+ /**
336
+ * The default connection string pointing to localhost
337
+ */
338
+ static readonly Default = new ChronicleConnectionString('chronicle://localhost:35000');
339
+
340
+ /**
341
+ * The development connection string pointing to localhost configured with the default dev credentials
342
+ */
343
+ static readonly Development = new ChronicleConnectionString(
344
+ `chronicle://${ChronicleConnectionString.DEVELOPMENT_CLIENT}:${ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET}@localhost:35000`
345
+ );
346
+
347
+ private readonly builder: ChronicleConnectionStringBuilder;
348
+ private readonly _serverAddress: ChronicleServerAddress;
349
+
350
+ /**
351
+ * Creates a new Chronicle connection string
352
+ * @param connectionString The connection string to parse
353
+ */
354
+ constructor(connectionString: string) {
355
+ this.builder = new ChronicleConnectionStringBuilder(connectionString);
356
+ this._serverAddress = {
357
+ host: this.builder.host,
358
+ port: this.builder.port,
359
+ };
360
+ }
361
+
362
+ /**
363
+ * Gets the server address
364
+ */
365
+ get serverAddress(): ChronicleServerAddress {
366
+ return this._serverAddress;
367
+ }
368
+
369
+ /**
370
+ * Gets the username for authentication (client id for client_credentials flow)
371
+ */
372
+ get username(): string | undefined {
373
+ return this.builder.username;
374
+ }
375
+
376
+ /**
377
+ * Gets the password for authentication (client secret for client_credentials flow)
378
+ */
379
+ get password(): string | undefined {
380
+ return this.builder.password;
381
+ }
382
+
383
+ /**
384
+ * Gets the authentication mode
385
+ */
386
+ get authenticationMode(): AuthenticationMode {
387
+ return this.builder.authenticationMode;
388
+ }
389
+
390
+ /**
391
+ * Gets the API key for ApiKey authentication
392
+ */
393
+ get apiKey(): string | undefined {
394
+ return this.builder.apiKey;
395
+ }
396
+
397
+ /**
398
+ * Gets whether TLS is disabled
399
+ */
400
+ get disableTls(): boolean {
401
+ return this.builder.disableTls;
402
+ }
403
+
404
+ /**
405
+ * Gets the certificate path
406
+ */
407
+ get certificatePath(): string | undefined {
408
+ return this.builder.certificatePath;
409
+ }
410
+
411
+ /**
412
+ * Gets the certificate password
413
+ */
414
+ get certificatePassword(): string | undefined {
415
+ return this.builder.certificatePassword;
416
+ }
417
+
418
+ /**
419
+ * Creates a new connection string with the specified username and password (Client Credentials)
420
+ * @param username The username to set
421
+ * @param password The password to set
422
+ * @returns A new connection string with the credentials set
423
+ */
424
+ withCredentials(username: string, password: string): ChronicleConnectionString {
425
+ const newBuilder = new ChronicleConnectionStringBuilder(this.toString());
426
+ newBuilder.username = username;
427
+ newBuilder.password = password;
428
+ return new ChronicleConnectionString(newBuilder.build());
429
+ }
430
+
431
+ /**
432
+ * Creates a new connection string with API key authentication
433
+ * @param apiKey The API key to use
434
+ * @returns A new connection string with API key authentication configured
435
+ */
436
+ withApiKey(apiKey: string): ChronicleConnectionString {
437
+ const newBuilder = new ChronicleConnectionStringBuilder(this.toString());
438
+ newBuilder.apiKey = apiKey;
439
+ return new ChronicleConnectionString(newBuilder.build());
440
+ }
441
+
442
+ /**
443
+ * Creates gRPC channel credentials based on the connection string configuration
444
+ * @returns gRPC channel credentials
445
+ */
446
+ createCredentials(): grpc.ChannelCredentials {
447
+ if (this.disableTls) {
448
+ return grpc.credentials.createInsecure();
449
+ }
450
+
451
+ // TODO: Add support for certificate-based TLS
452
+ // For now, use createSsl() with no parameters for default TLS
453
+ return grpc.credentials.createSsl();
454
+ }
455
+
456
+ /**
457
+ * Returns the connection string representation
458
+ */
459
+ toString(): string {
460
+ return this.builder.build();
461
+ }
462
+ }
@@ -0,0 +1,104 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import type { EventStoresClient } from './generated/cratis_chronicle_contracts';
5
+ import type { NamespacesClient } from './generated/cratis_chronicle_contracts';
6
+ import type { RecommendationsClient } from './generated/recommendations';
7
+ import type { IdentitiesClient } from './generated/identities';
8
+ import type { EventSequencesClient } from './generated/eventsequences';
9
+ import type { EventTypesClient } from './generated/events';
10
+ import type { ConstraintsClient } from './generated/events_constraints';
11
+ import type { ObserversClient } from './generated/observation';
12
+ import type { FailedPartitionsClient } from './generated/observation';
13
+ import type { ReactorsClient } from './generated/observation_reactors';
14
+ import type { ReducersClient } from './generated/observation_reducers';
15
+ import type { ProjectionsClient } from './generated/projections';
16
+ import type { ReadModelsClient } from './generated/readmodels';
17
+ import type { JobsClient } from './generated/jobs';
18
+ import type { EventSeedingClient } from './generated/seeding';
19
+ import type { ServerClient } from './generated/host';
20
+
21
+ /**
22
+ * Represents all Chronicle gRPC services
23
+ */
24
+ export interface ChronicleServices {
25
+ /**
26
+ * Event stores service
27
+ */
28
+ eventStores: EventStoresClient;
29
+
30
+ /**
31
+ * Namespaces service
32
+ */
33
+ namespaces: NamespacesClient;
34
+
35
+ /**
36
+ * Recommendations service
37
+ */
38
+ recommendations: RecommendationsClient;
39
+
40
+ /**
41
+ * Identities service
42
+ */
43
+ identities: IdentitiesClient;
44
+
45
+ /**
46
+ * Event sequences service
47
+ */
48
+ eventSequences: EventSequencesClient;
49
+
50
+ /**
51
+ * Event types service
52
+ */
53
+ eventTypes: EventTypesClient;
54
+
55
+ /**
56
+ * Constraints service
57
+ */
58
+ constraints: ConstraintsClient;
59
+
60
+ /**
61
+ * Observers service
62
+ */
63
+ observers: ObserversClient;
64
+
65
+ /**
66
+ * Failed partitions service
67
+ */
68
+ failedPartitions: FailedPartitionsClient;
69
+
70
+ /**
71
+ * Reactors service
72
+ */
73
+ reactors: ReactorsClient;
74
+
75
+ /**
76
+ * Reducers service
77
+ */
78
+ reducers: ReducersClient;
79
+
80
+ /**
81
+ * Projections service
82
+ */
83
+ projections: ProjectionsClient;
84
+
85
+ /**
86
+ * Read models service
87
+ */
88
+ readModels: ReadModelsClient;
89
+
90
+ /**
91
+ * Jobs service
92
+ */
93
+ jobs: JobsClient;
94
+
95
+ /**
96
+ * Event seeding service
97
+ */
98
+ eventSeeding: EventSeedingClient;
99
+
100
+ /**
101
+ * Server service
102
+ */
103
+ server: ServerClient;
104
+ }
@@ -0,0 +1,27 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ // SerializableDateTimeOffset is duplicated across all generated proto files that reference it.
5
+ // The canonical source is eventsequences, matching the explicit re-export in index.ts.
6
+ import type { SerializableDateTimeOffset } from './generated/eventsequences';
7
+
8
+ /**
9
+ * Converts a {@link SerializableDateTimeOffset} from its ISO 8601 wire format to a JavaScript {@link Date}.
10
+ * @param value The {@link SerializableDateTimeOffset} from the gRPC message.
11
+ * @returns A {@link Date}, or undefined if the value is not set.
12
+ */
13
+ export function toDate(value: SerializableDateTimeOffset | undefined): Date | undefined {
14
+ if (!value?.Value) return undefined;
15
+ return new Date(value.Value);
16
+ }
17
+
18
+ /**
19
+ * Converts a JavaScript {@link Date} to a {@link SerializableDateTimeOffset} for use in gRPC messages.
20
+ * The Date is serialized as an ISO 8601 string (e.g., "2024-01-15T12:30:00.000Z").
21
+ * @param date The {@link Date} to convert.
22
+ * @returns A {@link SerializableDateTimeOffset} with the ISO 8601 value, or undefined if the date is not set.
23
+ */
24
+ export function fromDate(date: Date | undefined): SerializableDateTimeOffset | undefined {
25
+ if (!date) return undefined;
26
+ return { Value: date.toISOString() };
27
+ }