@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,224 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import { NamespacesClient, EventStoresClient } from './generated/cratis_chronicle_contracts.js';
3
+ import { RecommendationsClient } from './generated/recommendations.js';
4
+ import { IdentitiesClient } from './generated/identities.js';
5
+ import { EventSequencesClient } from './generated/eventsequences.js';
6
+ import { EventTypesClient } from './generated/events.js';
7
+ import { ConstraintsClient } from './generated/events_constraints.js';
8
+ import { FailedPartitionsClient, ObserversClient } from './generated/observation.js';
9
+ import { ReactorsClient } from './generated/observation_reactors.js';
10
+ import { ReducersClient } from './generated/observation_reducers.js';
11
+ import { ProjectionsClient } from './generated/projections.js';
12
+ import { ReadModelsClient } from './generated/readmodels.js';
13
+ import { JobsClient } from './generated/jobs.js';
14
+ import { EventSeedingClient } from './generated/seeding.js';
15
+ import { ServerClient } from './generated/host.js';
16
+ import { ConnectionServiceClient } from './generated/clients.js';
17
+ import { ChronicleConnectionString, AuthenticationMode } from './ChronicleConnectionString.js';
18
+ import { NoOpTokenProvider, OAuthTokenProvider } from './TokenProvider.js';
19
+
20
+ class ChronicleConnection {
21
+ channel;
22
+ services;
23
+ _connectionString;
24
+ tokenProvider;
25
+ _isConnected = false;
26
+ get eventStores() {
27
+ return this.services.eventStores;
28
+ }
29
+ get namespaces() {
30
+ return this.services.namespaces;
31
+ }
32
+ get recommendations() {
33
+ return this.services.recommendations;
34
+ }
35
+ get identities() {
36
+ return this.services.identities;
37
+ }
38
+ get eventSequences() {
39
+ return this.services.eventSequences;
40
+ }
41
+ get eventTypes() {
42
+ return this.services.eventTypes;
43
+ }
44
+ get constraints() {
45
+ return this.services.constraints;
46
+ }
47
+ get observers() {
48
+ return this.services.observers;
49
+ }
50
+ get failedPartitions() {
51
+ return this.services.failedPartitions;
52
+ }
53
+ get reactors() {
54
+ return this.services.reactors;
55
+ }
56
+ get reducers() {
57
+ return this.services.reducers;
58
+ }
59
+ get projections() {
60
+ return this.services.projections;
61
+ }
62
+ get readModels() {
63
+ return this.services.readModels;
64
+ }
65
+ get jobs() {
66
+ return this.services.jobs;
67
+ }
68
+ get eventSeeding() {
69
+ return this.services.eventSeeding;
70
+ }
71
+ get server() {
72
+ return this.services.server;
73
+ }
74
+ connectionService;
75
+ get connectionString() {
76
+ return this._connectionString;
77
+ }
78
+ constructor(options) {
79
+ if (options.connectionString) {
80
+ this._connectionString =
81
+ typeof options.connectionString === 'string'
82
+ ? new ChronicleConnectionString(options.connectionString)
83
+ : options.connectionString;
84
+ }
85
+ else if (options.serverAddress) {
86
+ this._connectionString = new ChronicleConnectionString(`chronicle://${options.serverAddress}`);
87
+ }
88
+ else {
89
+ this._connectionString = ChronicleConnectionString.Default;
90
+ }
91
+ const serverAddress = `${this._connectionString.serverAddress.host}:${this._connectionString.serverAddress.port}`;
92
+ this.tokenProvider = this.createTokenProvider(options);
93
+ let channelCredentials = options.credentials;
94
+ if (!channelCredentials) {
95
+ channelCredentials = this._connectionString.createCredentials();
96
+ const callCredentials = this.createAuthCallCredentials();
97
+ if (callCredentials) {
98
+ channelCredentials = grpc.credentials.combineChannelCredentials(channelCredentials, callCredentials);
99
+ }
100
+ }
101
+ const channelOptions = {};
102
+ if (options.maxReceiveMessageSize) {
103
+ channelOptions['grpc.max_receive_message_length'] = options.maxReceiveMessageSize;
104
+ }
105
+ if (options.maxSendMessageSize) {
106
+ channelOptions['grpc.max_send_message_length'] = options.maxSendMessageSize;
107
+ }
108
+ this.channel = new grpc.Channel(serverAddress, channelCredentials, channelOptions);
109
+ this.connectionService = new ConnectionServiceClient(serverAddress, channelCredentials);
110
+ this.services = {
111
+ eventStores: new EventStoresClient(serverAddress, channelCredentials),
112
+ namespaces: new NamespacesClient(serverAddress, channelCredentials),
113
+ recommendations: new RecommendationsClient(serverAddress, channelCredentials),
114
+ identities: new IdentitiesClient(serverAddress, channelCredentials),
115
+ eventSequences: new EventSequencesClient(serverAddress, channelCredentials),
116
+ eventTypes: new EventTypesClient(serverAddress, channelCredentials),
117
+ constraints: new ConstraintsClient(serverAddress, channelCredentials),
118
+ observers: new ObserversClient(serverAddress, channelCredentials),
119
+ failedPartitions: new FailedPartitionsClient(serverAddress, channelCredentials),
120
+ reactors: new ReactorsClient(serverAddress, channelCredentials),
121
+ reducers: new ReducersClient(serverAddress, channelCredentials),
122
+ projections: new ProjectionsClient(serverAddress, channelCredentials),
123
+ readModels: new ReadModelsClient(serverAddress, channelCredentials),
124
+ jobs: new JobsClient(serverAddress, channelCredentials),
125
+ eventSeeding: new EventSeedingClient(serverAddress, channelCredentials),
126
+ server: new ServerClient(serverAddress, channelCredentials),
127
+ };
128
+ }
129
+ createTokenProvider(options) {
130
+ try {
131
+ const authMode = this._connectionString.authenticationMode;
132
+ if (authMode === AuthenticationMode.ClientCredentials) {
133
+ const username = this._connectionString.username;
134
+ const password = this._connectionString.password;
135
+ if (!username || !password) {
136
+ return new NoOpTokenProvider();
137
+ }
138
+ const managementPort = options.managementPort || 8080;
139
+ let authorityHost;
140
+ let authorityPort;
141
+ if (options.authority) {
142
+ const authorityUrl = new URL(options.authority);
143
+ authorityHost = authorityUrl.hostname;
144
+ authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
145
+ }
146
+ else {
147
+ authorityHost = this._connectionString.serverAddress.host;
148
+ authorityPort = managementPort;
149
+ }
150
+ const scheme = this._connectionString.disableTls ? 'http' : 'https';
151
+ const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
152
+ return new OAuthTokenProvider(tokenEndpoint, username, password);
153
+ }
154
+ return new NoOpTokenProvider();
155
+ }
156
+ catch {
157
+ return new NoOpTokenProvider();
158
+ }
159
+ }
160
+ createAuthCallCredentials() {
161
+ return grpc.credentials.createFromMetadataGenerator(async (params, callback) => {
162
+ try {
163
+ const token = await this.tokenProvider.getAccessToken();
164
+ const metadata = new grpc.Metadata();
165
+ if (token) {
166
+ metadata.add('authorization', `Bearer ${token}`);
167
+ }
168
+ else {
169
+ try {
170
+ const authMode = this._connectionString.authenticationMode;
171
+ if (authMode === AuthenticationMode.ApiKey && this._connectionString.apiKey) {
172
+ metadata.add('api-key', this._connectionString.apiKey);
173
+ }
174
+ }
175
+ catch {
176
+ }
177
+ }
178
+ callback(null, metadata);
179
+ }
180
+ catch (error) {
181
+ callback(error, new grpc.Metadata());
182
+ }
183
+ });
184
+ }
185
+ get isConnected() {
186
+ return this._isConnected;
187
+ }
188
+ async connect() {
189
+ if (this._isConnected) {
190
+ return;
191
+ }
192
+ return new Promise((resolve, reject) => {
193
+ const deadline = new Date();
194
+ deadline.setSeconds(deadline.getSeconds() + 10);
195
+ this.channel.watchConnectivityState(this.channel.getConnectivityState(true), deadline, (error) => {
196
+ if (error) {
197
+ this._isConnected = false;
198
+ reject(error);
199
+ }
200
+ else {
201
+ const state = this.channel.getConnectivityState(false);
202
+ if (state === grpc.connectivityState.READY) {
203
+ this._isConnected = true;
204
+ resolve();
205
+ }
206
+ else {
207
+ this._isConnected = false;
208
+ reject(new Error(`Connection failed with state: ${state}`));
209
+ }
210
+ }
211
+ });
212
+ });
213
+ }
214
+ disconnect() {
215
+ this._isConnected = false;
216
+ this.channel.close();
217
+ }
218
+ dispose() {
219
+ this.disconnect();
220
+ }
221
+ }
222
+
223
+ export { ChronicleConnection };
224
+ //# sourceMappingURL=ChronicleConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChronicleConnection.js","sources":["../../ChronicleConnection.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport * as grpc from '@grpc/grpc-js';\nimport { EventStoresClient } from './generated/cratis_chronicle_contracts';\nimport { NamespacesClient } from './generated/cratis_chronicle_contracts';\nimport { RecommendationsClient } from './generated/recommendations';\nimport { IdentitiesClient } from './generated/identities';\nimport { EventSequencesClient } from './generated/eventsequences';\nimport { EventTypesClient } from './generated/events';\nimport { ConstraintsClient } from './generated/events_constraints';\nimport { ObserversClient } from './generated/observation';\nimport { FailedPartitionsClient } from './generated/observation';\nimport { ReactorsClient } from './generated/observation_reactors';\nimport { ReducersClient } from './generated/observation_reducers';\nimport { ProjectionsClient } from './generated/projections';\nimport { ReadModelsClient } from './generated/readmodels';\nimport { JobsClient } from './generated/jobs';\nimport { EventSeedingClient } from './generated/seeding';\nimport { ServerClient } from './generated/host';\nimport { ConnectionServiceClient } from './generated/clients';\nimport type { ChronicleServices } from './ChronicleServices';\nimport { ChronicleConnectionString, AuthenticationMode } from './ChronicleConnectionString';\nimport { ITokenProvider, OAuthTokenProvider, NoOpTokenProvider } from './TokenProvider';\n\n/**\n * Configuration options for Chronicle connection\n */\nexport interface ChronicleConnectionOptions {\n /**\n * The connection string (e.g., 'chronicle://localhost:35000' or 'chronicle://user:pass@localhost:35000')\n * Can also be a ChronicleConnectionString instance\n */\n connectionString?: string | ChronicleConnectionString;\n\n /**\n * The host and port of the Chronicle server (e.g., 'localhost:35000')\n * This is used if connectionString is not provided\n */\n serverAddress?: string;\n\n /**\n * Optional gRPC credentials (defaults to credentials based on connection string)\n */\n credentials?: grpc.ChannelCredentials;\n\n /**\n * Optional connection timeout in milliseconds (defaults to 10000)\n */\n connectTimeout?: number;\n\n /**\n * Optional maximum receive message size in bytes\n */\n maxReceiveMessageSize?: number;\n\n /**\n * Optional maximum send message size in bytes\n */\n maxSendMessageSize?: number;\n\n /**\n * Optional correlation ID for tracking requests\n */\n correlationId?: string;\n\n /**\n * Optional authentication authority URL. If not set, uses the Chronicle server itself as the authority\n */\n authority?: string;\n\n /**\n * Optional management port for authentication endpoint (defaults to 8080)\n */\n managementPort?: number;\n}\n\n/**\n * Manages the connection to Chronicle Kernel and provides access to all gRPC services\n */\nexport class ChronicleConnection implements ChronicleServices {\n private readonly channel: grpc.Channel;\n private readonly services: ChronicleServices;\n private readonly _connectionString: ChronicleConnectionString;\n private readonly tokenProvider: ITokenProvider;\n private _isConnected = false;\n\n /**\n * Event stores service\n */\n get eventStores(): EventStoresClient {\n return this.services.eventStores;\n }\n\n /**\n * Namespaces service\n */\n get namespaces(): NamespacesClient {\n return this.services.namespaces;\n }\n\n /**\n * Recommendations service\n */\n get recommendations(): RecommendationsClient {\n return this.services.recommendations;\n }\n\n /**\n * Identities service\n */\n get identities(): IdentitiesClient {\n return this.services.identities;\n }\n\n /**\n * Event sequences service\n */\n get eventSequences(): EventSequencesClient {\n return this.services.eventSequences;\n }\n\n /**\n * Event types service\n */\n get eventTypes(): EventTypesClient {\n return this.services.eventTypes;\n }\n\n /**\n * Constraints service\n */\n get constraints(): ConstraintsClient {\n return this.services.constraints;\n }\n\n /**\n * Observers service\n */\n get observers(): ObserversClient {\n return this.services.observers;\n }\n\n /**\n * Failed partitions service\n */\n get failedPartitions(): FailedPartitionsClient {\n return this.services.failedPartitions;\n }\n\n /**\n * Reactors service\n */\n get reactors(): ReactorsClient {\n return this.services.reactors;\n }\n\n /**\n * Reducers service\n */\n get reducers(): ReducersClient {\n return this.services.reducers;\n }\n\n /**\n * Projections service\n */\n get projections(): ProjectionsClient {\n return this.services.projections;\n }\n\n /**\n * Read models service\n */\n get readModels(): ReadModelsClient {\n return this.services.readModels;\n }\n\n /**\n * Jobs service\n */\n get jobs(): JobsClient {\n return this.services.jobs;\n }\n\n /**\n * Event seeding service\n */\n get eventSeeding(): EventSeedingClient {\n return this.services.eventSeeding;\n }\n\n /**\n * Server service\n */\n get server(): ServerClient {\n return this.services.server;\n }\n\n /**\n * Connection service for managing the connection\n */\n private connectionService: ConnectionServiceClient;\n\n /**\n * Gets the connection string used for this connection\n */\n get connectionString(): ChronicleConnectionString {\n return this._connectionString;\n }\n\n /**\n * Creates a new Chronicle connection\n * @param options Connection configuration options\n */\n constructor(options: ChronicleConnectionOptions) {\n // Parse connection string or create from serverAddress\n if (options.connectionString) {\n this._connectionString =\n typeof options.connectionString === 'string'\n ? new ChronicleConnectionString(options.connectionString)\n : options.connectionString;\n } else if (options.serverAddress) {\n this._connectionString = new ChronicleConnectionString(\n `chronicle://${options.serverAddress}`\n );\n } else {\n this._connectionString = ChronicleConnectionString.Default;\n }\n\n // Create server address string\n const serverAddress = `${this._connectionString.serverAddress.host}:${this._connectionString.serverAddress.port}`;\n\n // Create token provider for authentication\n this.tokenProvider = this.createTokenProvider(options);\n\n // Create credentials\n let channelCredentials = options.credentials;\n if (!channelCredentials) {\n channelCredentials = this._connectionString.createCredentials();\n \n // Add call credentials with token provider\n const callCredentials = this.createAuthCallCredentials();\n if (callCredentials) {\n channelCredentials = grpc.credentials.combineChannelCredentials(\n channelCredentials,\n callCredentials\n );\n }\n }\n\n const channelOptions: grpc.ChannelOptions = {};\n\n if (options.maxReceiveMessageSize) {\n channelOptions['grpc.max_receive_message_length'] = options.maxReceiveMessageSize;\n }\n\n if (options.maxSendMessageSize) {\n channelOptions['grpc.max_send_message_length'] = options.maxSendMessageSize;\n }\n\n this.channel = new grpc.Channel(serverAddress, channelCredentials, channelOptions);\n\n // Initialize all service clients\n this.connectionService = new ConnectionServiceClient(serverAddress, channelCredentials);\n\n this.services = {\n eventStores: new EventStoresClient(serverAddress, channelCredentials),\n namespaces: new NamespacesClient(serverAddress, channelCredentials),\n recommendations: new RecommendationsClient(serverAddress, channelCredentials),\n identities: new IdentitiesClient(serverAddress, channelCredentials),\n eventSequences: new EventSequencesClient(serverAddress, channelCredentials),\n eventTypes: new EventTypesClient(serverAddress, channelCredentials),\n constraints: new ConstraintsClient(serverAddress, channelCredentials),\n observers: new ObserversClient(serverAddress, channelCredentials),\n failedPartitions: new FailedPartitionsClient(serverAddress, channelCredentials),\n reactors: new ReactorsClient(serverAddress, channelCredentials),\n reducers: new ReducersClient(serverAddress, channelCredentials),\n projections: new ProjectionsClient(serverAddress, channelCredentials),\n readModels: new ReadModelsClient(serverAddress, channelCredentials),\n jobs: new JobsClient(serverAddress, channelCredentials),\n eventSeeding: new EventSeedingClient(serverAddress, channelCredentials),\n server: new ServerClient(serverAddress, channelCredentials),\n };\n }\n\n /**\n * Creates a token provider based on connection configuration\n */\n private createTokenProvider(options: ChronicleConnectionOptions): ITokenProvider {\n try {\n const authMode = this._connectionString.authenticationMode;\n\n if (authMode === AuthenticationMode.ClientCredentials) {\n const username = this._connectionString.username;\n const password = this._connectionString.password;\n\n if (!username || !password) {\n return new NoOpTokenProvider();\n }\n\n // Determine the authority URL\n const managementPort = options.managementPort || 8080;\n let authorityHost: string;\n let authorityPort: number;\n\n if (options.authority) {\n // Parse custom authority URL\n const authorityUrl = new URL(options.authority);\n authorityHost = authorityUrl.hostname;\n authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;\n } else {\n // Use Chronicle server as authority\n authorityHost = this._connectionString.serverAddress.host;\n authorityPort = managementPort;\n }\n\n const scheme = this._connectionString.disableTls ? 'http' : 'https';\n const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;\n\n return new OAuthTokenProvider(tokenEndpoint, username, password);\n }\n\n // For API key or other modes, no token provider needed (handled by connection string)\n return new NoOpTokenProvider();\n } catch {\n // If authentication mode check fails (no auth configured), use no-op provider\n return new NoOpTokenProvider();\n }\n }\n\n /**\n * Creates call credentials with bearer token from token provider\n */\n private createAuthCallCredentials(): grpc.CallCredentials | undefined {\n return grpc.credentials.createFromMetadataGenerator(async (params, callback) => {\n try {\n const token = await this.tokenProvider.getAccessToken();\n const metadata = new grpc.Metadata();\n\n if (token) {\n metadata.add('authorization', `Bearer ${token}`);\n } else {\n // Check for API key authentication\n try {\n const authMode = this._connectionString.authenticationMode;\n if (authMode === AuthenticationMode.ApiKey && this._connectionString.apiKey) {\n metadata.add('api-key', this._connectionString.apiKey);\n }\n } catch {\n // No API key configured\n }\n }\n\n callback(null, metadata);\n } catch (error) {\n callback(error as Error, new grpc.Metadata());\n }\n });\n }\n\n /**\n * Gets whether the connection is established\n */\n get isConnected(): boolean {\n return this._isConnected;\n }\n\n /**\n * Connects to the Chronicle Kernel\n * @returns Promise that resolves when connected\n */\n async connect(): Promise<void> {\n if (this._isConnected) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n const deadline = new Date();\n deadline.setSeconds(deadline.getSeconds() + 10);\n\n this.channel.watchConnectivityState(\n this.channel.getConnectivityState(true),\n deadline,\n (error) => {\n if (error) {\n this._isConnected = false;\n reject(error);\n } else {\n const state = this.channel.getConnectivityState(false);\n if (state === grpc.connectivityState.READY) {\n this._isConnected = true;\n resolve();\n } else {\n this._isConnected = false;\n reject(new Error(`Connection failed with state: ${state}`));\n }\n }\n }\n );\n });\n }\n\n /**\n * Disconnects from the Chronicle Kernel\n */\n disconnect(): void {\n this._isConnected = false;\n this.channel.close();\n }\n\n /**\n * Disposes the connection and cleans up resources\n */\n dispose(): void {\n this.disconnect();\n }\n}\n\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ export declare enum AuthenticationMode {
3
+ ClientCredentials = "ClientCredentials",
4
+ ApiKey = "ApiKey"
5
+ }
6
+ export interface ChronicleServerAddress {
7
+ host: string;
8
+ port: number;
9
+ }
10
+ export declare class ChronicleConnectionStringBuilder {
11
+ private static readonly DEFAULT_PORT;
12
+ private static readonly HOST_KEY;
13
+ private static readonly PORT_KEY;
14
+ private static readonly USERNAME_KEY;
15
+ private static readonly PASSWORD_KEY;
16
+ private static readonly SCHEME_KEY;
17
+ private static readonly API_KEY_KEY;
18
+ private static readonly DISABLE_TLS_KEY;
19
+ private static readonly CERTIFICATE_PATH_KEY;
20
+ private static readonly CERTIFICATE_PASSWORD_KEY;
21
+ private properties;
22
+ constructor(connectionString?: string);
23
+ get host(): string;
24
+ set host(value: string);
25
+ get port(): number;
26
+ set port(value: number);
27
+ get username(): string | undefined;
28
+ set username(value: string | undefined);
29
+ get password(): string | undefined;
30
+ set password(value: string | undefined);
31
+ get scheme(): string;
32
+ set scheme(value: string);
33
+ get authenticationMode(): AuthenticationMode;
34
+ get apiKey(): string | undefined;
35
+ set apiKey(value: string | undefined);
36
+ get disableTls(): boolean;
37
+ set disableTls(value: boolean);
38
+ get certificatePath(): string | undefined;
39
+ set certificatePath(value: string | undefined);
40
+ get certificatePassword(): string | undefined;
41
+ set certificatePassword(value: string | undefined);
42
+ build(): string;
43
+ private parseConnectionString;
44
+ private parseUrl;
45
+ }
46
+ export declare class ChronicleConnectionString {
47
+ static readonly DEVELOPMENT_CLIENT = "chronicle-dev-client";
48
+ static readonly DEVELOPMENT_CLIENT_SECRET = "chronicle-dev-secret";
49
+ static readonly Default: ChronicleConnectionString;
50
+ static readonly Development: ChronicleConnectionString;
51
+ private readonly builder;
52
+ private readonly _serverAddress;
53
+ constructor(connectionString: string);
54
+ get serverAddress(): ChronicleServerAddress;
55
+ get username(): string | undefined;
56
+ get password(): string | undefined;
57
+ get authenticationMode(): AuthenticationMode;
58
+ get apiKey(): string | undefined;
59
+ get disableTls(): boolean;
60
+ get certificatePath(): string | undefined;
61
+ get certificatePassword(): string | undefined;
62
+ withCredentials(username: string, password: string): ChronicleConnectionString;
63
+ withApiKey(apiKey: string): ChronicleConnectionString;
64
+ createCredentials(): grpc.ChannelCredentials;
65
+ toString(): string;
66
+ }
67
+ //# sourceMappingURL=ChronicleConnectionString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChronicleConnectionString.d.ts","sourceRoot":"","sources":["../../ChronicleConnectionString.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAKtC,oBAAY,kBAAkB;IAI1B,iBAAiB,sBAAsB;IAKvC,MAAM,WAAW;CACpB;AAKD,MAAM,WAAW,sBAAsB;IAInC,IAAI,EAAE,MAAM,CAAC;IAKb,IAAI,EAAE,MAAM,CAAC;CAChB;AAKD,qBAAa,gCAAgC;IACzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAS;IAC7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAc;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAc;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAY;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAY;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAgB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAyB;IAEzE,OAAO,CAAC,UAAU,CAAkC;gBAMxC,gBAAgB,CAAC,EAAE,MAAM;IASrC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAKD,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAKD,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAMrC;IAKD,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAMrC;IAKD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAEvB;IAKD,IAAI,kBAAkB,IAAI,kBAAkB,CAiB3C;IAKD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAMnC;IAKD,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAE5B;IAKD,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAM5C;IAKD,IAAI,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAE5C;IAED,IAAI,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAMhD;IAKD,KAAK,IAAI,MAAM;IAwDf,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,QAAQ;CAkCnB;AAWD,qBAAa,yBAAyB;IAIlC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,0BAA0B;IAK5D,MAAM,CAAC,QAAQ,CAAC,yBAAyB,0BAA0B;IAKnE,MAAM,CAAC,QAAQ,CAAC,OAAO,4BAAgE;IAKvF,MAAM,CAAC,QAAQ,CAAC,WAAW,4BAEzB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAM5C,gBAAgB,EAAE,MAAM;IAWpC,IAAI,aAAa,IAAI,sBAAsB,CAE1C;IAKD,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAKD,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAKD,IAAI,kBAAkB,IAAI,kBAAkB,CAE3C;IAKD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAKD,IAAI,UAAU,IAAI,OAAO,CAExB;IAKD,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAExC;IAKD,IAAI,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAE5C;IAQD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,yBAAyB;IAY9E,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,yBAAyB;IAUrD,iBAAiB,IAAI,IAAI,CAAC,kBAAkB;IAa5C,QAAQ,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,258 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+
3
+ var AuthenticationMode;
4
+ (function (AuthenticationMode) {
5
+ AuthenticationMode["ClientCredentials"] = "ClientCredentials";
6
+ AuthenticationMode["ApiKey"] = "ApiKey";
7
+ })(AuthenticationMode || (AuthenticationMode = {}));
8
+ class ChronicleConnectionStringBuilder {
9
+ static DEFAULT_PORT = 35000;
10
+ static HOST_KEY = 'Host';
11
+ static PORT_KEY = 'Port';
12
+ static USERNAME_KEY = 'Username';
13
+ static PASSWORD_KEY = 'Password';
14
+ static SCHEME_KEY = 'Scheme';
15
+ static API_KEY_KEY = 'apiKey';
16
+ static DISABLE_TLS_KEY = 'disableTls';
17
+ static CERTIFICATE_PATH_KEY = 'certificatePath';
18
+ static CERTIFICATE_PASSWORD_KEY = 'certificatePassword';
19
+ properties = new Map();
20
+ constructor(connectionString) {
21
+ if (connectionString) {
22
+ this.parseConnectionString(connectionString);
23
+ }
24
+ }
25
+ get host() {
26
+ return this.properties.get(ChronicleConnectionStringBuilder.HOST_KEY) || 'localhost';
27
+ }
28
+ set host(value) {
29
+ this.properties.set(ChronicleConnectionStringBuilder.HOST_KEY, value);
30
+ }
31
+ get port() {
32
+ const portStr = this.properties.get(ChronicleConnectionStringBuilder.PORT_KEY);
33
+ return portStr ? parseInt(portStr, 10) : ChronicleConnectionStringBuilder.DEFAULT_PORT;
34
+ }
35
+ set port(value) {
36
+ this.properties.set(ChronicleConnectionStringBuilder.PORT_KEY, value.toString());
37
+ }
38
+ get username() {
39
+ return this.properties.get(ChronicleConnectionStringBuilder.USERNAME_KEY);
40
+ }
41
+ set username(value) {
42
+ if (value) {
43
+ this.properties.set(ChronicleConnectionStringBuilder.USERNAME_KEY, value);
44
+ }
45
+ else {
46
+ this.properties.delete(ChronicleConnectionStringBuilder.USERNAME_KEY);
47
+ }
48
+ }
49
+ get password() {
50
+ return this.properties.get(ChronicleConnectionStringBuilder.PASSWORD_KEY);
51
+ }
52
+ set password(value) {
53
+ if (value) {
54
+ this.properties.set(ChronicleConnectionStringBuilder.PASSWORD_KEY, value);
55
+ }
56
+ else {
57
+ this.properties.delete(ChronicleConnectionStringBuilder.PASSWORD_KEY);
58
+ }
59
+ }
60
+ get scheme() {
61
+ return this.properties.get(ChronicleConnectionStringBuilder.SCHEME_KEY) || 'chronicle';
62
+ }
63
+ set scheme(value) {
64
+ this.properties.set(ChronicleConnectionStringBuilder.SCHEME_KEY, value);
65
+ }
66
+ get authenticationMode() {
67
+ const hasClientCredentials = !!this.username && !!this.password;
68
+ const hasApiKey = !!this.apiKey;
69
+ if (hasClientCredentials && hasApiKey) {
70
+ throw new Error('Cannot specify both client credentials and API key authentication');
71
+ }
72
+ if (hasClientCredentials) {
73
+ return AuthenticationMode.ClientCredentials;
74
+ }
75
+ if (hasApiKey) {
76
+ return AuthenticationMode.ApiKey;
77
+ }
78
+ throw new Error('No authentication method specified. Please provide either client credentials or API key');
79
+ }
80
+ get apiKey() {
81
+ return this.properties.get(ChronicleConnectionStringBuilder.API_KEY_KEY);
82
+ }
83
+ set apiKey(value) {
84
+ if (value) {
85
+ this.properties.set(ChronicleConnectionStringBuilder.API_KEY_KEY, value);
86
+ }
87
+ else {
88
+ this.properties.delete(ChronicleConnectionStringBuilder.API_KEY_KEY);
89
+ }
90
+ }
91
+ get disableTls() {
92
+ const value = this.properties.get(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY);
93
+ return value === 'true';
94
+ }
95
+ set disableTls(value) {
96
+ this.properties.set(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY, value.toString());
97
+ }
98
+ get certificatePath() {
99
+ return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);
100
+ }
101
+ set certificatePath(value) {
102
+ if (value) {
103
+ this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY, value);
104
+ }
105
+ else {
106
+ this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);
107
+ }
108
+ }
109
+ get certificatePassword() {
110
+ return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);
111
+ }
112
+ set certificatePassword(value) {
113
+ if (value) {
114
+ this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY, value);
115
+ }
116
+ else {
117
+ this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);
118
+ }
119
+ }
120
+ build() {
121
+ let url = `${this.scheme}://`;
122
+ if (this.username) {
123
+ url += this.username;
124
+ if (this.password) {
125
+ url += `:${this.password}`;
126
+ }
127
+ url += '@';
128
+ }
129
+ url += this.host;
130
+ url += `:${this.port}`;
131
+ const queryParams = [];
132
+ if (this.apiKey) {
133
+ queryParams.push(`apiKey=${encodeURIComponent(this.apiKey)}`);
134
+ }
135
+ if (this.disableTls) {
136
+ queryParams.push('disableTls=true');
137
+ }
138
+ if (this.certificatePath) {
139
+ queryParams.push(`certificatePath=${encodeURIComponent(this.certificatePath)}`);
140
+ }
141
+ if (this.certificatePassword) {
142
+ queryParams.push(`certificatePassword=${encodeURIComponent(this.certificatePassword)}`);
143
+ }
144
+ for (const [key, value] of this.properties) {
145
+ if (key !== ChronicleConnectionStringBuilder.HOST_KEY &&
146
+ key !== ChronicleConnectionStringBuilder.PORT_KEY &&
147
+ key !== ChronicleConnectionStringBuilder.USERNAME_KEY &&
148
+ key !== ChronicleConnectionStringBuilder.PASSWORD_KEY &&
149
+ key !== ChronicleConnectionStringBuilder.SCHEME_KEY &&
150
+ key !== ChronicleConnectionStringBuilder.API_KEY_KEY &&
151
+ key !== ChronicleConnectionStringBuilder.DISABLE_TLS_KEY &&
152
+ key !== ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY &&
153
+ key !== ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY) {
154
+ queryParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
155
+ }
156
+ }
157
+ if (queryParams.length > 0) {
158
+ url += `?${queryParams.join('&')}`;
159
+ }
160
+ return url;
161
+ }
162
+ parseConnectionString(connectionString) {
163
+ if (!connectionString) {
164
+ return;
165
+ }
166
+ if (connectionString.startsWith('chronicle://') ||
167
+ connectionString.startsWith('chronicle+srv://')) {
168
+ this.parseUrl(connectionString);
169
+ }
170
+ }
171
+ parseUrl(url) {
172
+ try {
173
+ const parsed = new URL(url);
174
+ this.scheme = parsed.protocol.replace(':', '');
175
+ this.host = parsed.hostname;
176
+ if (parsed.port) {
177
+ this.port = parseInt(parsed.port, 10);
178
+ }
179
+ if (parsed.username) {
180
+ this.username = decodeURIComponent(parsed.username);
181
+ if (parsed.password) {
182
+ this.password = decodeURIComponent(parsed.password);
183
+ }
184
+ }
185
+ if (parsed.search) {
186
+ const searchParams = new URLSearchParams(parsed.search);
187
+ for (const [key, value] of searchParams) {
188
+ this.properties.set(key, decodeURIComponent(value));
189
+ }
190
+ }
191
+ }
192
+ catch (error) {
193
+ throw new Error(`Invalid Chronicle connection string: ${error}`);
194
+ }
195
+ }
196
+ }
197
+ class ChronicleConnectionString {
198
+ static DEVELOPMENT_CLIENT = 'chronicle-dev-client';
199
+ static DEVELOPMENT_CLIENT_SECRET = 'chronicle-dev-secret';
200
+ static Default = new ChronicleConnectionString('chronicle://localhost:35000');
201
+ static Development = new ChronicleConnectionString(`chronicle://${ChronicleConnectionString.DEVELOPMENT_CLIENT}:${ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET}@localhost:35000`);
202
+ builder;
203
+ _serverAddress;
204
+ constructor(connectionString) {
205
+ this.builder = new ChronicleConnectionStringBuilder(connectionString);
206
+ this._serverAddress = {
207
+ host: this.builder.host,
208
+ port: this.builder.port,
209
+ };
210
+ }
211
+ get serverAddress() {
212
+ return this._serverAddress;
213
+ }
214
+ get username() {
215
+ return this.builder.username;
216
+ }
217
+ get password() {
218
+ return this.builder.password;
219
+ }
220
+ get authenticationMode() {
221
+ return this.builder.authenticationMode;
222
+ }
223
+ get apiKey() {
224
+ return this.builder.apiKey;
225
+ }
226
+ get disableTls() {
227
+ return this.builder.disableTls;
228
+ }
229
+ get certificatePath() {
230
+ return this.builder.certificatePath;
231
+ }
232
+ get certificatePassword() {
233
+ return this.builder.certificatePassword;
234
+ }
235
+ withCredentials(username, password) {
236
+ const newBuilder = new ChronicleConnectionStringBuilder(this.toString());
237
+ newBuilder.username = username;
238
+ newBuilder.password = password;
239
+ return new ChronicleConnectionString(newBuilder.build());
240
+ }
241
+ withApiKey(apiKey) {
242
+ const newBuilder = new ChronicleConnectionStringBuilder(this.toString());
243
+ newBuilder.apiKey = apiKey;
244
+ return new ChronicleConnectionString(newBuilder.build());
245
+ }
246
+ createCredentials() {
247
+ if (this.disableTls) {
248
+ return grpc.credentials.createInsecure();
249
+ }
250
+ return grpc.credentials.createSsl();
251
+ }
252
+ toString() {
253
+ return this.builder.build();
254
+ }
255
+ }
256
+
257
+ export { AuthenticationMode, ChronicleConnectionString, ChronicleConnectionStringBuilder };
258
+ //# sourceMappingURL=ChronicleConnectionString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChronicleConnectionString.js","sources":["../../ChronicleConnectionString.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport * as grpc from '@grpc/grpc-js';\n\n/**\n * Authentication mode for Chronicle connection\n */\nexport enum AuthenticationMode {\n /**\n * Client credentials authentication (username:password)\n */\n ClientCredentials = 'ClientCredentials',\n\n /**\n * API key authentication\n */\n ApiKey = 'ApiKey',\n}\n\n/**\n * Represents a server address with host and port\n */\nexport interface ChronicleServerAddress {\n /**\n * The host name or IP address\n */\n host: string;\n\n /**\n * The port number\n */\n port: number;\n}\n\n/**\n * Builder for constructing Chronicle connection strings\n */\nexport class ChronicleConnectionStringBuilder {\n private static readonly DEFAULT_PORT = 35000;\n private static readonly HOST_KEY = 'Host';\n private static readonly PORT_KEY = 'Port';\n private static readonly USERNAME_KEY = 'Username';\n private static readonly PASSWORD_KEY = 'Password';\n private static readonly SCHEME_KEY = 'Scheme';\n private static readonly API_KEY_KEY = 'apiKey';\n private static readonly DISABLE_TLS_KEY = 'disableTls';\n private static readonly CERTIFICATE_PATH_KEY = 'certificatePath';\n private static readonly CERTIFICATE_PASSWORD_KEY = 'certificatePassword';\n\n private properties: Map<string, string> = new Map();\n\n /**\n * Creates a new connection string builder\n * @param connectionString Optional connection string to parse\n */\n constructor(connectionString?: string) {\n if (connectionString) {\n this.parseConnectionString(connectionString);\n }\n }\n\n /**\n * Gets or sets the host\n */\n get host(): string {\n return this.properties.get(ChronicleConnectionStringBuilder.HOST_KEY) || 'localhost';\n }\n\n set host(value: string) {\n this.properties.set(ChronicleConnectionStringBuilder.HOST_KEY, value);\n }\n\n /**\n * Gets or sets the port\n */\n get port(): number {\n const portStr = this.properties.get(ChronicleConnectionStringBuilder.PORT_KEY);\n return portStr ? parseInt(portStr, 10) : ChronicleConnectionStringBuilder.DEFAULT_PORT;\n }\n\n set port(value: number) {\n this.properties.set(ChronicleConnectionStringBuilder.PORT_KEY, value.toString());\n }\n\n /**\n * Gets or sets the username for authentication\n */\n get username(): string | undefined {\n return this.properties.get(ChronicleConnectionStringBuilder.USERNAME_KEY);\n }\n\n set username(value: string | undefined) {\n if (value) {\n this.properties.set(ChronicleConnectionStringBuilder.USERNAME_KEY, value);\n } else {\n this.properties.delete(ChronicleConnectionStringBuilder.USERNAME_KEY);\n }\n }\n\n /**\n * Gets or sets the password for authentication\n */\n get password(): string | undefined {\n return this.properties.get(ChronicleConnectionStringBuilder.PASSWORD_KEY);\n }\n\n set password(value: string | undefined) {\n if (value) {\n this.properties.set(ChronicleConnectionStringBuilder.PASSWORD_KEY, value);\n } else {\n this.properties.delete(ChronicleConnectionStringBuilder.PASSWORD_KEY);\n }\n }\n\n /**\n * Gets or sets the scheme\n */\n get scheme(): string {\n return this.properties.get(ChronicleConnectionStringBuilder.SCHEME_KEY) || 'chronicle';\n }\n\n set scheme(value: string) {\n this.properties.set(ChronicleConnectionStringBuilder.SCHEME_KEY, value);\n }\n\n /**\n * Gets the authentication mode based on configured credentials\n */\n get authenticationMode(): AuthenticationMode {\n const hasClientCredentials = !!this.username && !!this.password;\n const hasApiKey = !!this.apiKey;\n\n if (hasClientCredentials && hasApiKey) {\n throw new Error('Cannot specify both client credentials and API key authentication');\n }\n\n if (hasClientCredentials) {\n return AuthenticationMode.ClientCredentials;\n }\n\n if (hasApiKey) {\n return AuthenticationMode.ApiKey;\n }\n\n throw new Error('No authentication method specified. Please provide either client credentials or API key');\n }\n\n /**\n * Gets or sets the API key for authentication\n */\n get apiKey(): string | undefined {\n return this.properties.get(ChronicleConnectionStringBuilder.API_KEY_KEY);\n }\n\n set apiKey(value: string | undefined) {\n if (value) {\n this.properties.set(ChronicleConnectionStringBuilder.API_KEY_KEY, value);\n } else {\n this.properties.delete(ChronicleConnectionStringBuilder.API_KEY_KEY);\n }\n }\n\n /**\n * Gets or sets whether TLS is disabled\n */\n get disableTls(): boolean {\n const value = this.properties.get(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY);\n return value === 'true';\n }\n\n set disableTls(value: boolean) {\n this.properties.set(ChronicleConnectionStringBuilder.DISABLE_TLS_KEY, value.toString());\n }\n\n /**\n * Gets or sets the certificate path\n */\n get certificatePath(): string | undefined {\n return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);\n }\n\n set certificatePath(value: string | undefined) {\n if (value) {\n this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY, value);\n } else {\n this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY);\n }\n }\n\n /**\n * Gets or sets the certificate password\n */\n get certificatePassword(): string | undefined {\n return this.properties.get(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);\n }\n\n set certificatePassword(value: string | undefined) {\n if (value) {\n this.properties.set(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY, value);\n } else {\n this.properties.delete(ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY);\n }\n }\n\n /**\n * Builds the connection string\n */\n build(): string {\n let url = `${this.scheme}://`;\n\n if (this.username) {\n url += this.username;\n if (this.password) {\n url += `:${this.password}`;\n }\n url += '@';\n }\n\n url += this.host;\n url += `:${this.port}`;\n\n const queryParams: string[] = [];\n\n if (this.apiKey) {\n queryParams.push(`apiKey=${encodeURIComponent(this.apiKey)}`);\n }\n\n if (this.disableTls) {\n queryParams.push('disableTls=true');\n }\n\n if (this.certificatePath) {\n queryParams.push(`certificatePath=${encodeURIComponent(this.certificatePath)}`);\n }\n\n if (this.certificatePassword) {\n queryParams.push(`certificatePassword=${encodeURIComponent(this.certificatePassword)}`);\n }\n\n // Add any other custom query parameters\n for (const [key, value] of this.properties) {\n if (\n key !== ChronicleConnectionStringBuilder.HOST_KEY &&\n key !== ChronicleConnectionStringBuilder.PORT_KEY &&\n key !== ChronicleConnectionStringBuilder.USERNAME_KEY &&\n key !== ChronicleConnectionStringBuilder.PASSWORD_KEY &&\n key !== ChronicleConnectionStringBuilder.SCHEME_KEY &&\n key !== ChronicleConnectionStringBuilder.API_KEY_KEY &&\n key !== ChronicleConnectionStringBuilder.DISABLE_TLS_KEY &&\n key !== ChronicleConnectionStringBuilder.CERTIFICATE_PATH_KEY &&\n key !== ChronicleConnectionStringBuilder.CERTIFICATE_PASSWORD_KEY\n ) {\n queryParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n }\n }\n\n if (queryParams.length > 0) {\n url += `?${queryParams.join('&')}`;\n }\n\n return url;\n }\n\n private parseConnectionString(connectionString: string): void {\n if (!connectionString) {\n return;\n }\n\n // Check if it's a Chronicle URL format\n if (\n connectionString.startsWith('chronicle://') ||\n connectionString.startsWith('chronicle+srv://')\n ) {\n this.parseUrl(connectionString);\n }\n }\n\n private parseUrl(url: string): void {\n try {\n const parsed = new URL(url);\n\n // Extract scheme\n this.scheme = parsed.protocol.replace(':', '');\n\n // Extract host\n this.host = parsed.hostname;\n\n // Extract port\n if (parsed.port) {\n this.port = parseInt(parsed.port, 10);\n }\n\n // Extract username and password from userInfo\n if (parsed.username) {\n this.username = decodeURIComponent(parsed.username);\n if (parsed.password) {\n this.password = decodeURIComponent(parsed.password);\n }\n }\n\n // Parse query string parameters\n if (parsed.search) {\n const searchParams = new URLSearchParams(parsed.search);\n for (const [key, value] of searchParams) {\n this.properties.set(key, decodeURIComponent(value));\n }\n }\n } catch (error) {\n throw new Error(`Invalid Chronicle connection string: ${error}`);\n }\n }\n}\n\n/**\n * Represents a Chronicle connection string\n *\n * Supported formats:\n * - chronicle://<host>[:<port>]/?<options>\n * - chronicle://username:password@<host>[:<port>]/?<options>\n * - chronicle+srv://<host>[:<port>]/?<options>\n * - chronicle://<host>[:<port>],<host>[:<port>],<host>[:<port>]/?<options>\n */\nexport class ChronicleConnectionString {\n /**\n * The default client ID for development purposes\n */\n static readonly DEVELOPMENT_CLIENT = 'chronicle-dev-client';\n\n /**\n * The default client secret for development purposes\n */\n static readonly DEVELOPMENT_CLIENT_SECRET = 'chronicle-dev-secret';\n\n /**\n * The default connection string pointing to localhost\n */\n static readonly Default = new ChronicleConnectionString('chronicle://localhost:35000');\n\n /**\n * The development connection string pointing to localhost configured with the default dev credentials\n */\n static readonly Development = new ChronicleConnectionString(\n `chronicle://${ChronicleConnectionString.DEVELOPMENT_CLIENT}:${ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET}@localhost:35000`\n );\n\n private readonly builder: ChronicleConnectionStringBuilder;\n private readonly _serverAddress: ChronicleServerAddress;\n\n /**\n * Creates a new Chronicle connection string\n * @param connectionString The connection string to parse\n */\n constructor(connectionString: string) {\n this.builder = new ChronicleConnectionStringBuilder(connectionString);\n this._serverAddress = {\n host: this.builder.host,\n port: this.builder.port,\n };\n }\n\n /**\n * Gets the server address\n */\n get serverAddress(): ChronicleServerAddress {\n return this._serverAddress;\n }\n\n /**\n * Gets the username for authentication (client id for client_credentials flow)\n */\n get username(): string | undefined {\n return this.builder.username;\n }\n\n /**\n * Gets the password for authentication (client secret for client_credentials flow)\n */\n get password(): string | undefined {\n return this.builder.password;\n }\n\n /**\n * Gets the authentication mode\n */\n get authenticationMode(): AuthenticationMode {\n return this.builder.authenticationMode;\n }\n\n /**\n * Gets the API key for ApiKey authentication\n */\n get apiKey(): string | undefined {\n return this.builder.apiKey;\n }\n\n /**\n * Gets whether TLS is disabled\n */\n get disableTls(): boolean {\n return this.builder.disableTls;\n }\n\n /**\n * Gets the certificate path\n */\n get certificatePath(): string | undefined {\n return this.builder.certificatePath;\n }\n\n /**\n * Gets the certificate password\n */\n get certificatePassword(): string | undefined {\n return this.builder.certificatePassword;\n }\n\n /**\n * Creates a new connection string with the specified username and password (Client Credentials)\n * @param username The username to set\n * @param password The password to set\n * @returns A new connection string with the credentials set\n */\n withCredentials(username: string, password: string): ChronicleConnectionString {\n const newBuilder = new ChronicleConnectionStringBuilder(this.toString());\n newBuilder.username = username;\n newBuilder.password = password;\n return new ChronicleConnectionString(newBuilder.build());\n }\n\n /**\n * Creates a new connection string with API key authentication\n * @param apiKey The API key to use\n * @returns A new connection string with API key authentication configured\n */\n withApiKey(apiKey: string): ChronicleConnectionString {\n const newBuilder = new ChronicleConnectionStringBuilder(this.toString());\n newBuilder.apiKey = apiKey;\n return new ChronicleConnectionString(newBuilder.build());\n }\n\n /**\n * Creates gRPC channel credentials based on the connection string configuration\n * @returns gRPC channel credentials\n */\n createCredentials(): grpc.ChannelCredentials {\n if (this.disableTls) {\n return grpc.credentials.createInsecure();\n }\n\n // TODO: Add support for certificate-based TLS\n // For now, use createSsl() with no parameters for default TLS\n return grpc.credentials.createSsl();\n }\n\n /**\n * Returns the connection string representation\n */\n toString(): string {\n return this.builder.build();\n }\n}\n"],"names":[],"mappings":"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"}