@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
package/README.md ADDED
@@ -0,0 +1,221 @@
1
+ # @cratis/chronicle.contracts
2
+
3
+ TypeScript gRPC contracts for Chronicle with full type safety and IDE support.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @cratis/chronicle.contracts
9
+ # or
10
+ yarn add @cratis/chronicle.contracts
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ This package provides strongly-typed Chronicle gRPC service clients generated from proto definitions using ts-proto.
16
+
17
+ ### Quick Start
18
+
19
+ ```typescript
20
+ import { ChronicleConnection, ChronicleConnectionString } from '@cratis/chronicle.contracts';
21
+
22
+ // Create a connection using a connection string
23
+ const connection = new ChronicleConnection({
24
+ connectionString: 'chronicle://localhost:35000'
25
+ });
26
+
27
+ // Connect to Chronicle
28
+ await connection.connect();
29
+
30
+ // Use the services with full type safety and IDE completion
31
+ const eventStores = await connection.eventStores.GetEventStores({});
32
+ console.log('Event stores:', eventStores.items);
33
+
34
+ // Clean up
35
+ connection.dispose();
36
+ ```
37
+
38
+ ### Connection Strings
39
+
40
+ Chronicle supports connection strings similar to database connection strings, providing a consistent way to configure connections:
41
+
42
+ ```typescript
43
+ // Basic connection
44
+ const connection = new ChronicleConnection({
45
+ connectionString: 'chronicle://localhost:35000'
46
+ });
47
+
48
+ // With client credentials (username:password)
49
+ const connection = new ChronicleConnection({
50
+ connectionString: 'chronicle://myuser:mypassword@localhost:35000'
51
+ });
52
+
53
+ // With API key authentication
54
+ const connection = new ChronicleConnection({
55
+ connectionString: 'chronicle://localhost:35000?apiKey=your-api-key-here'
56
+ });
57
+
58
+ // With TLS disabled (for development)
59
+ const connection = new ChronicleConnection({
60
+ connectionString: 'chronicle://localhost:35000?disableTls=true'
61
+ });
62
+ ```
63
+
64
+ ### Development Connection
65
+
66
+ For local development, use the built-in development connection with default credentials:
67
+
68
+ ```typescript
69
+ import { ChronicleConnectionString } from '@cratis/chronicle.contracts';
70
+
71
+ const connection = new ChronicleConnection({
72
+ connectionString: ChronicleConnectionString.Development
73
+ });
74
+ ```
75
+
76
+ The development connection string uses:
77
+ - **Client ID**: `chronicle-dev-client`
78
+ - **Client Secret**: `chronicle-dev-secret`
79
+ - **Host**: `localhost:35000`
80
+
81
+ These are the default development credentials that Chronicle Kernel accepts when running in development mode.
82
+
83
+ ### Working with Connection Strings
84
+
85
+ ```typescript
86
+ import { ChronicleConnectionString } from '@cratis/chronicle.contracts';
87
+
88
+ // Parse a connection string
89
+ const connStr = new ChronicleConnectionString('chronicle://localhost:35000');
90
+
91
+ // Access connection details
92
+ console.log(connStr.serverAddress.host); // 'localhost'
93
+ console.log(connStr.serverAddress.port); // 35000
94
+
95
+ // Create new connection strings with modifications
96
+ const withCreds = connStr.withCredentials('myuser', 'mypassword');
97
+ const withApiKey = connStr.withApiKey('my-api-key');
98
+
99
+ // Convert to string
100
+ console.log(withCreds.toString()); // chronicle://myuser:mypassword@localhost:35000
101
+ ```
102
+
103
+ ### Authentication
104
+
105
+ Chronicle supports two authentication modes. When using Client Credentials, the TypeScript client automatically obtains a bearer token from the authentication authority using OAuth 2.0 client_credentials flow.
106
+
107
+ #### Client Credentials (OAuth2 client_credentials flow)
108
+
109
+ The client automatically obtains and refreshes bearer tokens from the Chronicle server (or a custom authority):
110
+
111
+ ```typescript
112
+ const connection = new ChronicleConnection({
113
+ connectionString: 'chronicle://client-id:client-secret@localhost:35000'
114
+ });
115
+
116
+ // With custom authority
117
+ const connection = new ChronicleConnection({
118
+ connectionString: 'chronicle://client-id:client-secret@localhost:35000',
119
+ authority: 'https://my-auth-server.com',
120
+ managementPort: 8080 // Optional, defaults to 8080
121
+ });
122
+ ```
123
+
124
+ The token is automatically included as a Bearer token in the authorization header for all gRPC calls.
125
+
126
+ #### API Key
127
+
128
+ ```typescript
129
+ const connection = new ChronicleConnection({
130
+ connectionString: 'chronicle://localhost:35000?apiKey=your-api-key'
131
+ });
132
+ ```
133
+
134
+ ### Using Individual Services
135
+
136
+ You can also import and use services directly:
137
+
138
+ ```typescript
139
+ import { EventStoresClient } from '@cratis/chronicle.contracts';
140
+ import * as grpc from '@grpc/grpc-js';
141
+
142
+ const client = new EventStoresClient(
143
+ 'localhost:35000',
144
+ grpc.credentials.createInsecure()
145
+ );
146
+
147
+ const response = await client.GetEventStores({});
148
+ console.log('Event stores:', response.items);
149
+ ```
150
+
151
+ ### Configuration Options
152
+
153
+ ```typescript
154
+ const connection = new ChronicleConnection({
155
+ connectionString: 'chronicle://localhost:35000',
156
+
157
+ // Optional: Override credentials from connection string
158
+ credentials: grpc.credentials.createSsl(),
159
+
160
+ // Optional: connection timeout in ms
161
+ connectTimeout: 10000,
162
+
163
+ // Optional: message size limits
164
+ maxReceiveMessageSize: 1024 * 1024 * 10, // 10MB
165
+ maxSendMessageSize: 1024 * 1024 * 10, // 10MB
166
+
167
+ // Optional: for request tracking
168
+ correlationId: 'my-correlation-id',
169
+
170
+ // Optional: Custom authentication authority URL
171
+ // If not set, uses Chronicle server as the authority
172
+ authority: 'https://my-auth-server.com',
173
+
174
+ // Optional: Management port for authentication endpoint (defaults to 8080)
175
+ managementPort: 8080
176
+ });
177
+ ```
178
+
179
+ ### Legacy Server Address
180
+
181
+ For backward compatibility, you can still use `serverAddress`:
182
+
183
+ ```typescript
184
+ const connection = new ChronicleConnection({
185
+ serverAddress: 'localhost:35000'
186
+ });
187
+ ```
188
+
189
+ ### Available Services
190
+
191
+ The `ChronicleConnection` provides access to all Chronicle services:
192
+
193
+ - `eventStores` - Event store management
194
+ - `namespaces` - Namespace management
195
+ - `recommendations` - Recommendations
196
+ - `identities` - Identity management
197
+ - `eventSequences` - Event sequence operations
198
+ - `eventTypes` - Event type management
199
+ - `constraints` - Event constraints
200
+ - `observers` - Observer management
201
+ - `failedPartitions` - Failed partition handling
202
+ - `reactors` - Reactor management
203
+ - `reducers` - Reducer management
204
+ - `projections` - Projection management
205
+ - `readModels` - Read model operations
206
+ - `jobs` - Job management
207
+ - `eventSeeding` - Event seeding
208
+ - `server` - Server information
209
+
210
+ ### Type Safety
211
+
212
+ All services are fully typed with TypeScript interfaces generated from proto definitions, providing:
213
+
214
+ - **IntelliSense** in your IDE
215
+ - **Compile-time type checking**
216
+ - **Auto-completion** for all methods and parameters
217
+ - **Type inference** for request and response objects
218
+
219
+ ## License
220
+
221
+ MIT
@@ -0,0 +1,167 @@
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 https from 'https';
5
+ import * as http from 'http';
6
+
7
+ /**
8
+ * Interface for providing authentication tokens
9
+ */
10
+ export interface ITokenProvider {
11
+ /**
12
+ * Gets the current access token
13
+ * @returns Promise resolving to the access token or undefined if not available
14
+ */
15
+ getAccessToken(): Promise<string | undefined>;
16
+
17
+ /**
18
+ * Refreshes the access token by clearing cached tokens and obtaining a new one
19
+ * @returns Promise resolving to the new access token or undefined if not available
20
+ */
21
+ refresh(): Promise<string | undefined>;
22
+ }
23
+
24
+ /**
25
+ * No-op token provider for when authentication is not required
26
+ */
27
+ export class NoOpTokenProvider implements ITokenProvider {
28
+ async getAccessToken(): Promise<string | undefined> {
29
+ return undefined;
30
+ }
31
+
32
+ async refresh(): Promise<string | undefined> {
33
+ return undefined;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * OAuth token response from the token endpoint
39
+ */
40
+ interface OAuthTokenResponse {
41
+ access_token: string;
42
+ expires_in: number;
43
+ token_type: string;
44
+ }
45
+
46
+ /**
47
+ * OAuth token provider using client credentials flow
48
+ */
49
+ export class OAuthTokenProvider implements ITokenProvider {
50
+ private accessToken?: string;
51
+ private tokenExpiry: Date = new Date(0);
52
+ private refreshPromise?: Promise<string | undefined>;
53
+
54
+ /**
55
+ * Creates a new OAuth token provider
56
+ * @param tokenEndpoint The token endpoint URL
57
+ * @param clientId The OAuth client ID
58
+ * @param clientSecret The OAuth client secret
59
+ */
60
+ constructor(
61
+ private readonly tokenEndpoint: string,
62
+ private readonly clientId: string,
63
+ private readonly clientSecret: string
64
+ ) {}
65
+
66
+ /**
67
+ * Gets the current access token, fetching a new one if needed
68
+ */
69
+ async getAccessToken(): Promise<string | undefined> {
70
+ if (this.accessToken && new Date() < this.tokenExpiry) {
71
+ return this.accessToken;
72
+ }
73
+
74
+ // If we're already refreshing, wait for that promise
75
+ if (this.refreshPromise) {
76
+ return this.refreshPromise;
77
+ }
78
+
79
+ this.refreshPromise = this.fetchAccessToken();
80
+ try {
81
+ return await this.refreshPromise;
82
+ } finally {
83
+ this.refreshPromise = undefined;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Refreshes the access token by clearing the cache and fetching a new one
89
+ */
90
+ async refresh(): Promise<string | undefined> {
91
+ this.accessToken = undefined;
92
+ this.tokenExpiry = new Date(0);
93
+ return this.getAccessToken();
94
+ }
95
+
96
+ /**
97
+ * Fetches a new access token from the token endpoint
98
+ */
99
+ private async fetchAccessToken(): Promise<string | undefined> {
100
+ const params = new URLSearchParams();
101
+ params.append('grant_type', 'client_credentials');
102
+ params.append('client_id', this.clientId);
103
+ params.append('client_secret', this.clientSecret);
104
+
105
+ const body = params.toString();
106
+
107
+ return new Promise((resolve, reject) => {
108
+ const url = new URL(this.tokenEndpoint);
109
+ const isHttps = url.protocol === 'https:';
110
+ const httpModule = isHttps ? https : http;
111
+
112
+ const options = {
113
+ method: 'POST',
114
+ headers: {
115
+ 'Content-Type': 'application/x-www-form-urlencoded',
116
+ 'Content-Length': Buffer.byteLength(body),
117
+ },
118
+ // Accept self-signed certificates in development
119
+ rejectUnauthorized: false,
120
+ };
121
+
122
+ const req = httpModule.request(url, options, (res) => {
123
+ let data = '';
124
+
125
+ res.on('data', (chunk) => {
126
+ data += chunk;
127
+ });
128
+
129
+ res.on('end', () => {
130
+ if (res.statusCode === 200) {
131
+ try {
132
+ const tokenResponse: OAuthTokenResponse = JSON.parse(data);
133
+ this.accessToken = tokenResponse.access_token;
134
+
135
+ // Set expiry with 60 second buffer
136
+ const expiresInSeconds = tokenResponse.expires_in || 3600;
137
+ this.tokenExpiry = new Date(
138
+ Date.now() + (expiresInSeconds - 60) * 1000
139
+ );
140
+
141
+ resolve(this.accessToken);
142
+ } catch (error) {
143
+ reject(
144
+ new Error(
145
+ `Failed to parse token response: ${error instanceof Error ? error.message : String(error)}`
146
+ )
147
+ );
148
+ }
149
+ } else {
150
+ reject(
151
+ new Error(
152
+ `Token request failed with status ${res.statusCode}: ${data}`
153
+ )
154
+ );
155
+ }
156
+ });
157
+ });
158
+
159
+ req.on('error', (error) => {
160
+ reject(new Error(`Token request failed: ${error.message}`));
161
+ });
162
+
163
+ req.write(body);
164
+ req.end();
165
+ });
166
+ }
167
+ }
@@ -0,0 +1,63 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import { EventStoresClient } from './generated/cratis_chronicle_contracts';
3
+ import { NamespacesClient } from './generated/cratis_chronicle_contracts';
4
+ import { RecommendationsClient } from './generated/recommendations';
5
+ import { IdentitiesClient } from './generated/identities';
6
+ import { EventSequencesClient } from './generated/eventsequences';
7
+ import { EventTypesClient } from './generated/events';
8
+ import { ConstraintsClient } from './generated/events_constraints';
9
+ import { ObserversClient } from './generated/observation';
10
+ import { FailedPartitionsClient } from './generated/observation';
11
+ import { ReactorsClient } from './generated/observation_reactors';
12
+ import { ReducersClient } from './generated/observation_reducers';
13
+ import { ProjectionsClient } from './generated/projections';
14
+ import { ReadModelsClient } from './generated/readmodels';
15
+ import { JobsClient } from './generated/jobs';
16
+ import { EventSeedingClient } from './generated/seeding';
17
+ import { ServerClient } from './generated/host';
18
+ import type { ChronicleServices } from './ChronicleServices';
19
+ import { ChronicleConnectionString } from './ChronicleConnectionString';
20
+ export interface ChronicleConnectionOptions {
21
+ connectionString?: string | ChronicleConnectionString;
22
+ serverAddress?: string;
23
+ credentials?: grpc.ChannelCredentials;
24
+ connectTimeout?: number;
25
+ maxReceiveMessageSize?: number;
26
+ maxSendMessageSize?: number;
27
+ correlationId?: string;
28
+ authority?: string;
29
+ managementPort?: number;
30
+ }
31
+ export declare class ChronicleConnection implements ChronicleServices {
32
+ private readonly channel;
33
+ private readonly services;
34
+ private readonly _connectionString;
35
+ private readonly tokenProvider;
36
+ private _isConnected;
37
+ get eventStores(): EventStoresClient;
38
+ get namespaces(): NamespacesClient;
39
+ get recommendations(): RecommendationsClient;
40
+ get identities(): IdentitiesClient;
41
+ get eventSequences(): EventSequencesClient;
42
+ get eventTypes(): EventTypesClient;
43
+ get constraints(): ConstraintsClient;
44
+ get observers(): ObserversClient;
45
+ get failedPartitions(): FailedPartitionsClient;
46
+ get reactors(): ReactorsClient;
47
+ get reducers(): ReducersClient;
48
+ get projections(): ProjectionsClient;
49
+ get readModels(): ReadModelsClient;
50
+ get jobs(): JobsClient;
51
+ get eventSeeding(): EventSeedingClient;
52
+ get server(): ServerClient;
53
+ private connectionService;
54
+ get connectionString(): ChronicleConnectionString;
55
+ constructor(options: ChronicleConnectionOptions);
56
+ private createTokenProvider;
57
+ private createAuthCallCredentials;
58
+ get isConnected(): boolean;
59
+ connect(): Promise<void>;
60
+ disconnect(): void;
61
+ dispose(): void;
62
+ }
63
+ //# sourceMappingURL=ChronicleConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../ChronicleConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import { EventStoresClient } from './generated/cratis_chronicle_contracts';
3
+ import { NamespacesClient } from './generated/cratis_chronicle_contracts';
4
+ import { RecommendationsClient } from './generated/recommendations';
5
+ import { IdentitiesClient } from './generated/identities';
6
+ import { EventSequencesClient } from './generated/eventsequences';
7
+ import { EventTypesClient } from './generated/events';
8
+ import { ConstraintsClient } from './generated/events_constraints';
9
+ import { ObserversClient } from './generated/observation';
10
+ import { FailedPartitionsClient } from './generated/observation';
11
+ import { ReactorsClient } from './generated/observation_reactors';
12
+ import { ReducersClient } from './generated/observation_reducers';
13
+ import { ProjectionsClient } from './generated/projections';
14
+ import { ReadModelsClient } from './generated/readmodels';
15
+ import { JobsClient } from './generated/jobs';
16
+ import { EventSeedingClient } from './generated/seeding';
17
+ import { ServerClient } from './generated/host';
18
+ import { ConnectionServiceClient } from './generated/clients';
19
+ import { ChronicleConnectionString, AuthenticationMode } from './ChronicleConnectionString';
20
+ import { OAuthTokenProvider, NoOpTokenProvider } from './TokenProvider';
21
+ export class ChronicleConnection {
22
+ channel;
23
+ services;
24
+ _connectionString;
25
+ tokenProvider;
26
+ _isConnected = false;
27
+ get eventStores() {
28
+ return this.services.eventStores;
29
+ }
30
+ get namespaces() {
31
+ return this.services.namespaces;
32
+ }
33
+ get recommendations() {
34
+ return this.services.recommendations;
35
+ }
36
+ get identities() {
37
+ return this.services.identities;
38
+ }
39
+ get eventSequences() {
40
+ return this.services.eventSequences;
41
+ }
42
+ get eventTypes() {
43
+ return this.services.eventTypes;
44
+ }
45
+ get constraints() {
46
+ return this.services.constraints;
47
+ }
48
+ get observers() {
49
+ return this.services.observers;
50
+ }
51
+ get failedPartitions() {
52
+ return this.services.failedPartitions;
53
+ }
54
+ get reactors() {
55
+ return this.services.reactors;
56
+ }
57
+ get reducers() {
58
+ return this.services.reducers;
59
+ }
60
+ get projections() {
61
+ return this.services.projections;
62
+ }
63
+ get readModels() {
64
+ return this.services.readModels;
65
+ }
66
+ get jobs() {
67
+ return this.services.jobs;
68
+ }
69
+ get eventSeeding() {
70
+ return this.services.eventSeeding;
71
+ }
72
+ get server() {
73
+ return this.services.server;
74
+ }
75
+ connectionService;
76
+ get connectionString() {
77
+ return this._connectionString;
78
+ }
79
+ constructor(options) {
80
+ if (options.connectionString) {
81
+ this._connectionString =
82
+ typeof options.connectionString === 'string'
83
+ ? new ChronicleConnectionString(options.connectionString)
84
+ : options.connectionString;
85
+ }
86
+ else if (options.serverAddress) {
87
+ this._connectionString = new ChronicleConnectionString(`chronicle://${options.serverAddress}`);
88
+ }
89
+ else {
90
+ this._connectionString = ChronicleConnectionString.Default;
91
+ }
92
+ const serverAddress = `${this._connectionString.serverAddress.host}:${this._connectionString.serverAddress.port}`;
93
+ this.tokenProvider = this.createTokenProvider(options);
94
+ let channelCredentials = options.credentials;
95
+ if (!channelCredentials) {
96
+ channelCredentials = this._connectionString.createCredentials();
97
+ const callCredentials = this.createAuthCallCredentials();
98
+ if (callCredentials) {
99
+ channelCredentials = grpc.credentials.combineChannelCredentials(channelCredentials, callCredentials);
100
+ }
101
+ }
102
+ const channelOptions = {};
103
+ if (options.maxReceiveMessageSize) {
104
+ channelOptions['grpc.max_receive_message_length'] = options.maxReceiveMessageSize;
105
+ }
106
+ if (options.maxSendMessageSize) {
107
+ channelOptions['grpc.max_send_message_length'] = options.maxSendMessageSize;
108
+ }
109
+ this.channel = new grpc.Channel(serverAddress, channelCredentials, channelOptions);
110
+ this.connectionService = new ConnectionServiceClient(serverAddress, channelCredentials);
111
+ this.services = {
112
+ eventStores: new EventStoresClient(serverAddress, channelCredentials),
113
+ namespaces: new NamespacesClient(serverAddress, channelCredentials),
114
+ recommendations: new RecommendationsClient(serverAddress, channelCredentials),
115
+ identities: new IdentitiesClient(serverAddress, channelCredentials),
116
+ eventSequences: new EventSequencesClient(serverAddress, channelCredentials),
117
+ eventTypes: new EventTypesClient(serverAddress, channelCredentials),
118
+ constraints: new ConstraintsClient(serverAddress, channelCredentials),
119
+ observers: new ObserversClient(serverAddress, channelCredentials),
120
+ failedPartitions: new FailedPartitionsClient(serverAddress, channelCredentials),
121
+ reactors: new ReactorsClient(serverAddress, channelCredentials),
122
+ reducers: new ReducersClient(serverAddress, channelCredentials),
123
+ projections: new ProjectionsClient(serverAddress, channelCredentials),
124
+ readModels: new ReadModelsClient(serverAddress, channelCredentials),
125
+ jobs: new JobsClient(serverAddress, channelCredentials),
126
+ eventSeeding: new EventSeedingClient(serverAddress, channelCredentials),
127
+ server: new ServerClient(serverAddress, channelCredentials),
128
+ };
129
+ }
130
+ createTokenProvider(options) {
131
+ try {
132
+ const authMode = this._connectionString.authenticationMode;
133
+ if (authMode === AuthenticationMode.ClientCredentials) {
134
+ const username = this._connectionString.username;
135
+ const password = this._connectionString.password;
136
+ if (!username || !password) {
137
+ return new NoOpTokenProvider();
138
+ }
139
+ const managementPort = options.managementPort || 8080;
140
+ let authorityHost;
141
+ let authorityPort;
142
+ if (options.authority) {
143
+ const authorityUrl = new URL(options.authority);
144
+ authorityHost = authorityUrl.hostname;
145
+ authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
146
+ }
147
+ else {
148
+ authorityHost = this._connectionString.serverAddress.host;
149
+ authorityPort = managementPort;
150
+ }
151
+ const scheme = this._connectionString.disableTls ? 'http' : 'https';
152
+ const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
153
+ return new OAuthTokenProvider(tokenEndpoint, username, password);
154
+ }
155
+ return new NoOpTokenProvider();
156
+ }
157
+ catch {
158
+ return new NoOpTokenProvider();
159
+ }
160
+ }
161
+ createAuthCallCredentials() {
162
+ return grpc.credentials.createFromMetadataGenerator(async (params, callback) => {
163
+ try {
164
+ const token = await this.tokenProvider.getAccessToken();
165
+ const metadata = new grpc.Metadata();
166
+ if (token) {
167
+ metadata.add('authorization', `Bearer ${token}`);
168
+ }
169
+ else {
170
+ try {
171
+ const authMode = this._connectionString.authenticationMode;
172
+ if (authMode === AuthenticationMode.ApiKey && this._connectionString.apiKey) {
173
+ metadata.add('api-key', this._connectionString.apiKey);
174
+ }
175
+ }
176
+ catch {
177
+ }
178
+ }
179
+ callback(null, metadata);
180
+ }
181
+ catch (error) {
182
+ callback(error, new grpc.Metadata());
183
+ }
184
+ });
185
+ }
186
+ get isConnected() {
187
+ return this._isConnected;
188
+ }
189
+ async connect() {
190
+ if (this._isConnected) {
191
+ return;
192
+ }
193
+ return new Promise((resolve, reject) => {
194
+ const deadline = new Date();
195
+ deadline.setSeconds(deadline.getSeconds() + 10);
196
+ this.channel.watchConnectivityState(this.channel.getConnectivityState(true), deadline, (error) => {
197
+ if (error) {
198
+ this._isConnected = false;
199
+ reject(error);
200
+ }
201
+ else {
202
+ const state = this.channel.getConnectivityState(false);
203
+ if (state === grpc.connectivityState.READY) {
204
+ this._isConnected = true;
205
+ resolve();
206
+ }
207
+ else {
208
+ this._isConnected = false;
209
+ reject(new Error(`Connection failed with state: ${state}`));
210
+ }
211
+ }
212
+ });
213
+ });
214
+ }
215
+ disconnect() {
216
+ this._isConnected = false;
217
+ this.channel.close();
218
+ }
219
+ dispose() {
220
+ this.disconnect();
221
+ }
222
+ }
223
+ //# sourceMappingURL=ChronicleConnection.js.map