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