@cratis/chronicle.contracts 15.25.1 → 15.25.2
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 +82 -17
- package/dist/ChronicleConnection.d.ts +1 -0
- package/dist/ChronicleConnection.d.ts.map +1 -1
- package/dist/ChronicleConnection.js +64 -17
- package/dist/ChronicleConnection.js.map +1 -1
- package/dist/cjs/ChronicleConnection.d.ts +1 -0
- package/dist/cjs/ChronicleConnection.d.ts.map +1 -1
- package/dist/cjs/ChronicleConnection.js +63 -16
- package/dist/cjs/ChronicleConnection.js.map +1 -1
- package/dist/esm/ChronicleConnection.d.ts +1 -0
- package/dist/esm/ChronicleConnection.d.ts.map +1 -1
- package/dist/esm/ChronicleConnection.js +64 -17
- package/dist/esm/ChronicleConnection.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/ChronicleConnection.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
3
|
|
|
4
4
|
import * as grpc from '@grpc/grpc-js';
|
|
5
|
-
import { createClient } from 'nice-grpc';
|
|
5
|
+
import { createClient, createClientFactory } from 'nice-grpc';
|
|
6
|
+
import type { ClientMiddleware } from 'nice-grpc-common';
|
|
7
|
+
import { Metadata } from 'nice-grpc-common';
|
|
6
8
|
|
|
7
9
|
// Import service definitions from generated files
|
|
8
10
|
import { EventStoresDefinition, NamespacesDefinition } from './generated/cratis_chronicle_contracts';
|
|
@@ -293,23 +295,32 @@ export class ChronicleConnection implements ChronicleServices {
|
|
|
293
295
|
}
|
|
294
296
|
|
|
295
297
|
private createServices(): ChronicleServices {
|
|
298
|
+
console.log('[Chronicle] Creating services with middleware');
|
|
299
|
+
// Create a client factory and attach auth middleware for all calls
|
|
300
|
+
let factory = createClientFactory();
|
|
301
|
+
|
|
302
|
+
console.log('[Chronicle] Attaching auth middleware');
|
|
303
|
+
// Attach authentication middleware that works for both TLS and insecure channels
|
|
304
|
+
factory = factory.use(this.createAuthMiddleware());
|
|
305
|
+
console.log('[Chronicle] Middleware attached, creating service clients');
|
|
306
|
+
|
|
296
307
|
return {
|
|
297
|
-
eventStores:
|
|
298
|
-
namespaces:
|
|
299
|
-
recommendations:
|
|
300
|
-
identities:
|
|
301
|
-
eventSequences:
|
|
302
|
-
eventTypes:
|
|
303
|
-
constraints:
|
|
304
|
-
observers:
|
|
305
|
-
failedPartitions:
|
|
306
|
-
reactors:
|
|
307
|
-
reducers:
|
|
308
|
-
projections:
|
|
309
|
-
readModels:
|
|
310
|
-
jobs:
|
|
311
|
-
eventSeeding:
|
|
312
|
-
server:
|
|
308
|
+
eventStores: factory.create(EventStoresDefinition, this.channel),
|
|
309
|
+
namespaces: factory.create(NamespacesDefinition, this.channel),
|
|
310
|
+
recommendations: factory.create(RecommendationsDefinition, this.channel),
|
|
311
|
+
identities: factory.create(IdentitiesDefinition, this.channel),
|
|
312
|
+
eventSequences: factory.create(EventSequencesDefinition, this.channel),
|
|
313
|
+
eventTypes: factory.create(EventTypesDefinition, this.channel),
|
|
314
|
+
constraints: factory.create(ConstraintsDefinition, this.channel),
|
|
315
|
+
observers: factory.create(ObserversDefinition, this.channel),
|
|
316
|
+
failedPartitions: factory.create(FailedPartitionsDefinition, this.channel),
|
|
317
|
+
reactors: factory.create(ReactorsDefinition, this.channel),
|
|
318
|
+
reducers: factory.create(ReducersDefinition, this.channel),
|
|
319
|
+
projections: factory.create(ProjectionsDefinition, this.channel),
|
|
320
|
+
readModels: factory.create(ReadModelsDefinition, this.channel),
|
|
321
|
+
jobs: factory.create(JobsDefinition, this.channel),
|
|
322
|
+
eventSeeding: factory.create(EventSeedingDefinition, this.channel),
|
|
323
|
+
server: factory.create(ServerDefinition, this.channel),
|
|
313
324
|
};
|
|
314
325
|
}
|
|
315
326
|
|
|
@@ -412,6 +423,60 @@ export class ChronicleConnection implements ChronicleServices {
|
|
|
412
423
|
return this._isConnected;
|
|
413
424
|
}
|
|
414
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Creates a middleware that injects authentication headers for all calls.
|
|
428
|
+
* This works for both TLS and insecure channels, similar to gRPC interceptors in C#.
|
|
429
|
+
*/
|
|
430
|
+
private createAuthMiddleware(): ClientMiddleware {
|
|
431
|
+
const tokenProvider = this.tokenProvider;
|
|
432
|
+
const connectionString = this._connectionString;
|
|
433
|
+
|
|
434
|
+
return async function* authMiddleware(call, options) {
|
|
435
|
+
try {
|
|
436
|
+
const token = await tokenProvider.getAccessToken();
|
|
437
|
+
|
|
438
|
+
if (token) {
|
|
439
|
+
// Create metadata object with the Bearer token
|
|
440
|
+
// The Metadata factory function from nice-grpc-common accepts an object
|
|
441
|
+
const authMetadata = Metadata({ authorization: `Bearer ${token}` });
|
|
442
|
+
|
|
443
|
+
// Merge with existing metadata if present
|
|
444
|
+
if (options.metadata) {
|
|
445
|
+
const mergedMetadata = Metadata(options.metadata);
|
|
446
|
+
mergedMetadata.set('authorization', `Bearer ${token}`);
|
|
447
|
+
options.metadata = mergedMetadata;
|
|
448
|
+
} else {
|
|
449
|
+
options.metadata = authMetadata;
|
|
450
|
+
}
|
|
451
|
+
} else {
|
|
452
|
+
// Fallback to API key if no token
|
|
453
|
+
try {
|
|
454
|
+
const authMode = connectionString.authenticationMode;
|
|
455
|
+
if (authMode === AuthenticationMode.ApiKey && connectionString.apiKey) {
|
|
456
|
+
const apiKeyMetadata = Metadata({ 'api-key': connectionString.apiKey });
|
|
457
|
+
|
|
458
|
+
if (options.metadata) {
|
|
459
|
+
const mergedMetadata = Metadata(options.metadata);
|
|
460
|
+
mergedMetadata.set('api-key', connectionString.apiKey);
|
|
461
|
+
options.metadata = mergedMetadata;
|
|
462
|
+
} else {
|
|
463
|
+
options.metadata = apiKeyMetadata;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
} catch {
|
|
467
|
+
// No API key configured, continue without additional auth
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
} catch (error) {
|
|
471
|
+
// If token retrieval fails, continue without additional auth headers
|
|
472
|
+
// This allows the connection to proceed with channel-level credentials if available
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Pass through to next middleware/handler, properly returning the response
|
|
476
|
+
return yield* call.next(call.request, options);
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
|
|
415
480
|
/**
|
|
416
481
|
* Connects to the Chronicle Kernel
|
|
417
482
|
* @returns Promise that resolves when connected
|
|
@@ -43,6 +43,7 @@ export declare class ChronicleConnection implements ChronicleServices {
|
|
|
43
43
|
private createOAuthTokenProvider;
|
|
44
44
|
private createAuthCallCredentials;
|
|
45
45
|
get isConnected(): boolean;
|
|
46
|
+
private createAuthMiddleware;
|
|
46
47
|
connect(): Promise<void>;
|
|
47
48
|
disconnect(): void;
|
|
48
49
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAuBtC,OAAO,KAAK,EACR,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAsB,MAAM,6BAA6B,CAAC;AAM5F,MAAM,WAAW,0BAA0B;IAKvC,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAMtD,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,WAAW,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAKtC,cAAc,CAAC,EAAE,MAAM,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAK/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD,qBAAa,mBAAoB,YAAW,iBAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAS;IAK7B,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,eAAe,IAAI,qBAAqB,CAE3C;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,cAAc,IAAI,oBAAoB,CAEzC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,SAAS,IAAI,eAAe,CAE/B;IAKD,IAAI,gBAAgB,IAAI,sBAAsB,CAE7C;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,IAAI,IAAI,UAAU,CAErB;IAKD,IAAI,YAAY,IAAI,kBAAkB,CAErC;IAKD,IAAI,MAAM,IAAI,YAAY,CAEzB;IAKD,OAAO,CAAC,iBAAiB,CAA0B;IAKnD,IAAI,gBAAgB,IAAI,yBAAyB,CAEhD;gBAMW,OAAO,EAAE,0BAA0B;IAwD/C,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,yBAAyB;IAkCjC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAMD,OAAO,CAAC,oBAAoB;IAsDtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,UAAU,IAAI,IAAI;IAQlB,OAAO,IAAI,IAAI;CAGlB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as grpc from '@grpc/grpc-js';
|
|
2
|
-
import { createClient } from 'nice-grpc';
|
|
2
|
+
import { createClient, createClientFactory } from 'nice-grpc';
|
|
3
|
+
import { Metadata } from 'nice-grpc-common';
|
|
3
4
|
import { EventStoresDefinition, NamespacesDefinition } from './generated/cratis_chronicle_contracts';
|
|
4
5
|
import { RecommendationsDefinition } from './generated/recommendations';
|
|
5
6
|
import { IdentitiesDefinition } from './generated/identities';
|
|
@@ -112,23 +113,28 @@ export class ChronicleConnection {
|
|
|
112
113
|
this.services = this.createServices();
|
|
113
114
|
}
|
|
114
115
|
createServices() {
|
|
116
|
+
console.log('[Chronicle] Creating services with middleware');
|
|
117
|
+
let factory = createClientFactory();
|
|
118
|
+
console.log('[Chronicle] Attaching auth middleware');
|
|
119
|
+
factory = factory.use(this.createAuthMiddleware());
|
|
120
|
+
console.log('[Chronicle] Middleware attached, creating service clients');
|
|
115
121
|
return {
|
|
116
|
-
eventStores:
|
|
117
|
-
namespaces:
|
|
118
|
-
recommendations:
|
|
119
|
-
identities:
|
|
120
|
-
eventSequences:
|
|
121
|
-
eventTypes:
|
|
122
|
-
constraints:
|
|
123
|
-
observers:
|
|
124
|
-
failedPartitions:
|
|
125
|
-
reactors:
|
|
126
|
-
reducers:
|
|
127
|
-
projections:
|
|
128
|
-
readModels:
|
|
129
|
-
jobs:
|
|
130
|
-
eventSeeding:
|
|
131
|
-
server:
|
|
122
|
+
eventStores: factory.create(EventStoresDefinition, this.channel),
|
|
123
|
+
namespaces: factory.create(NamespacesDefinition, this.channel),
|
|
124
|
+
recommendations: factory.create(RecommendationsDefinition, this.channel),
|
|
125
|
+
identities: factory.create(IdentitiesDefinition, this.channel),
|
|
126
|
+
eventSequences: factory.create(EventSequencesDefinition, this.channel),
|
|
127
|
+
eventTypes: factory.create(EventTypesDefinition, this.channel),
|
|
128
|
+
constraints: factory.create(ConstraintsDefinition, this.channel),
|
|
129
|
+
observers: factory.create(ObserversDefinition, this.channel),
|
|
130
|
+
failedPartitions: factory.create(FailedPartitionsDefinition, this.channel),
|
|
131
|
+
reactors: factory.create(ReactorsDefinition, this.channel),
|
|
132
|
+
reducers: factory.create(ReducersDefinition, this.channel),
|
|
133
|
+
projections: factory.create(ProjectionsDefinition, this.channel),
|
|
134
|
+
readModels: factory.create(ReadModelsDefinition, this.channel),
|
|
135
|
+
jobs: factory.create(JobsDefinition, this.channel),
|
|
136
|
+
eventSeeding: factory.create(EventSeedingDefinition, this.channel),
|
|
137
|
+
server: factory.create(ServerDefinition, this.channel),
|
|
132
138
|
};
|
|
133
139
|
}
|
|
134
140
|
createTokenProvider(options) {
|
|
@@ -194,6 +200,47 @@ export class ChronicleConnection {
|
|
|
194
200
|
get isConnected() {
|
|
195
201
|
return this._isConnected;
|
|
196
202
|
}
|
|
203
|
+
createAuthMiddleware() {
|
|
204
|
+
const tokenProvider = this.tokenProvider;
|
|
205
|
+
const connectionString = this._connectionString;
|
|
206
|
+
return async function* authMiddleware(call, options) {
|
|
207
|
+
try {
|
|
208
|
+
const token = await tokenProvider.getAccessToken();
|
|
209
|
+
if (token) {
|
|
210
|
+
const authMetadata = Metadata({ authorization: `Bearer ${token}` });
|
|
211
|
+
if (options.metadata) {
|
|
212
|
+
const mergedMetadata = Metadata(options.metadata);
|
|
213
|
+
mergedMetadata.set('authorization', `Bearer ${token}`);
|
|
214
|
+
options.metadata = mergedMetadata;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
options.metadata = authMetadata;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
try {
|
|
222
|
+
const authMode = connectionString.authenticationMode;
|
|
223
|
+
if (authMode === AuthenticationMode.ApiKey && connectionString.apiKey) {
|
|
224
|
+
const apiKeyMetadata = Metadata({ 'api-key': connectionString.apiKey });
|
|
225
|
+
if (options.metadata) {
|
|
226
|
+
const mergedMetadata = Metadata(options.metadata);
|
|
227
|
+
mergedMetadata.set('api-key', connectionString.apiKey);
|
|
228
|
+
options.metadata = mergedMetadata;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
options.metadata = apiKeyMetadata;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
}
|
|
241
|
+
return yield* call.next(call.request, options);
|
|
242
|
+
};
|
|
243
|
+
}
|
|
197
244
|
async connect() {
|
|
198
245
|
if (this._isConnected) {
|
|
199
246
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChronicleConnection.js","sourceRoot":"","sources":["../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ChronicleConnection.js","sourceRoot":"","sources":["../ChronicleConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,7 @@ export declare class ChronicleConnection implements ChronicleServices {
|
|
|
43
43
|
private createOAuthTokenProvider;
|
|
44
44
|
private createAuthCallCredentials;
|
|
45
45
|
get isConnected(): boolean;
|
|
46
|
+
private createAuthMiddleware;
|
|
46
47
|
connect(): Promise<void>;
|
|
47
48
|
disconnect(): void;
|
|
48
49
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAuBtC,OAAO,KAAK,EACR,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAsB,MAAM,6BAA6B,CAAC;AAM5F,MAAM,WAAW,0BAA0B;IAKvC,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAMtD,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,WAAW,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAKtC,cAAc,CAAC,EAAE,MAAM,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAK/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD,qBAAa,mBAAoB,YAAW,iBAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAS;IAK7B,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,eAAe,IAAI,qBAAqB,CAE3C;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,cAAc,IAAI,oBAAoB,CAEzC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,SAAS,IAAI,eAAe,CAE/B;IAKD,IAAI,gBAAgB,IAAI,sBAAsB,CAE7C;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,IAAI,IAAI,UAAU,CAErB;IAKD,IAAI,YAAY,IAAI,kBAAkB,CAErC;IAKD,IAAI,MAAM,IAAI,YAAY,CAEzB;IAKD,OAAO,CAAC,iBAAiB,CAA0B;IAKnD,IAAI,gBAAgB,IAAI,yBAAyB,CAEhD;gBAMW,OAAO,EAAE,0BAA0B;IAwD/C,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,yBAAyB;IAkCjC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAMD,OAAO,CAAC,oBAAoB;IAsDtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,UAAU,IAAI,IAAI;IAQlB,OAAO,IAAI,IAAI;CAGlB"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var grpc = require('@grpc/grpc-js');
|
|
4
4
|
var niceGrpc = require('nice-grpc');
|
|
5
|
+
var niceGrpcCommon = require('nice-grpc-common');
|
|
5
6
|
var cratis_chronicle_contracts = require('./generated/cratis_chronicle_contracts.js');
|
|
6
7
|
var recommendations = require('./generated/recommendations.js');
|
|
7
8
|
var identities = require('./generated/identities.js');
|
|
@@ -134,23 +135,28 @@ class ChronicleConnection {
|
|
|
134
135
|
this.services = this.createServices();
|
|
135
136
|
}
|
|
136
137
|
createServices() {
|
|
138
|
+
console.log('[Chronicle] Creating services with middleware');
|
|
139
|
+
let factory = niceGrpc.createClientFactory();
|
|
140
|
+
console.log('[Chronicle] Attaching auth middleware');
|
|
141
|
+
factory = factory.use(this.createAuthMiddleware());
|
|
142
|
+
console.log('[Chronicle] Middleware attached, creating service clients');
|
|
137
143
|
return {
|
|
138
|
-
eventStores:
|
|
139
|
-
namespaces:
|
|
140
|
-
recommendations:
|
|
141
|
-
identities:
|
|
142
|
-
eventSequences:
|
|
143
|
-
eventTypes:
|
|
144
|
-
constraints:
|
|
145
|
-
observers:
|
|
146
|
-
failedPartitions:
|
|
147
|
-
reactors:
|
|
148
|
-
reducers:
|
|
149
|
-
projections:
|
|
150
|
-
readModels:
|
|
151
|
-
jobs:
|
|
152
|
-
eventSeeding:
|
|
153
|
-
server:
|
|
144
|
+
eventStores: factory.create(cratis_chronicle_contracts.EventStoresDefinition, this.channel),
|
|
145
|
+
namespaces: factory.create(cratis_chronicle_contracts.NamespacesDefinition, this.channel),
|
|
146
|
+
recommendations: factory.create(recommendations.RecommendationsDefinition, this.channel),
|
|
147
|
+
identities: factory.create(identities.IdentitiesDefinition, this.channel),
|
|
148
|
+
eventSequences: factory.create(eventsequences.EventSequencesDefinition, this.channel),
|
|
149
|
+
eventTypes: factory.create(events.EventTypesDefinition, this.channel),
|
|
150
|
+
constraints: factory.create(events_constraints.ConstraintsDefinition, this.channel),
|
|
151
|
+
observers: factory.create(observation.ObserversDefinition, this.channel),
|
|
152
|
+
failedPartitions: factory.create(observation.FailedPartitionsDefinition, this.channel),
|
|
153
|
+
reactors: factory.create(observation_reactors.ReactorsDefinition, this.channel),
|
|
154
|
+
reducers: factory.create(observation_reducers.ReducersDefinition, this.channel),
|
|
155
|
+
projections: factory.create(projections.ProjectionsDefinition, this.channel),
|
|
156
|
+
readModels: factory.create(readmodels.ReadModelsDefinition, this.channel),
|
|
157
|
+
jobs: factory.create(jobs.JobsDefinition, this.channel),
|
|
158
|
+
eventSeeding: factory.create(seeding.EventSeedingDefinition, this.channel),
|
|
159
|
+
server: factory.create(host.ServerDefinition, this.channel),
|
|
154
160
|
};
|
|
155
161
|
}
|
|
156
162
|
createTokenProvider(options) {
|
|
@@ -216,6 +222,47 @@ class ChronicleConnection {
|
|
|
216
222
|
get isConnected() {
|
|
217
223
|
return this._isConnected;
|
|
218
224
|
}
|
|
225
|
+
createAuthMiddleware() {
|
|
226
|
+
const tokenProvider = this.tokenProvider;
|
|
227
|
+
const connectionString = this._connectionString;
|
|
228
|
+
return async function* authMiddleware(call, options) {
|
|
229
|
+
try {
|
|
230
|
+
const token = await tokenProvider.getAccessToken();
|
|
231
|
+
if (token) {
|
|
232
|
+
const authMetadata = niceGrpcCommon.Metadata({ authorization: `Bearer ${token}` });
|
|
233
|
+
if (options.metadata) {
|
|
234
|
+
const mergedMetadata = niceGrpcCommon.Metadata(options.metadata);
|
|
235
|
+
mergedMetadata.set('authorization', `Bearer ${token}`);
|
|
236
|
+
options.metadata = mergedMetadata;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
options.metadata = authMetadata;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
try {
|
|
244
|
+
const authMode = connectionString.authenticationMode;
|
|
245
|
+
if (authMode === ChronicleConnectionString.AuthenticationMode.ApiKey && connectionString.apiKey) {
|
|
246
|
+
const apiKeyMetadata = niceGrpcCommon.Metadata({ 'api-key': connectionString.apiKey });
|
|
247
|
+
if (options.metadata) {
|
|
248
|
+
const mergedMetadata = niceGrpcCommon.Metadata(options.metadata);
|
|
249
|
+
mergedMetadata.set('api-key', connectionString.apiKey);
|
|
250
|
+
options.metadata = mergedMetadata;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
options.metadata = apiKeyMetadata;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
}
|
|
263
|
+
return yield* call.next(call.request, options);
|
|
264
|
+
};
|
|
265
|
+
}
|
|
219
266
|
async connect() {
|
|
220
267
|
if (this._isConnected) {
|
|
221
268
|
return;
|
|
@@ -1 +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 { createClient } from 'nice-grpc';\n\n// Import service definitions from generated files\nimport { EventStoresDefinition, NamespacesDefinition } from './generated/cratis_chronicle_contracts';\nimport { RecommendationsDefinition } from './generated/recommendations';\nimport { IdentitiesDefinition } from './generated/identities';\nimport { EventSequencesDefinition } from './generated/eventsequences';\nimport { EventTypesDefinition } from './generated/events';\nimport { ConstraintsDefinition } from './generated/events_constraints';\nimport { ObserversDefinition, FailedPartitionsDefinition } from './generated/observation';\nimport { ReactorsDefinition } from './generated/observation_reactors';\nimport { ReducersDefinition } from './generated/observation_reducers';\nimport { ProjectionsDefinition } from './generated/projections';\nimport { ReadModelsDefinition } from './generated/readmodels';\nimport { JobsDefinition } from './generated/jobs';\nimport { EventSeedingDefinition } from './generated/seeding';\nimport { ServerDefinition } from './generated/host';\nimport { ConnectionServiceDefinition } from './generated/clients';\n\n// Import client types\nimport type {\n EventStoresClient,\n NamespacesClient,\n RecommendationsClient,\n IdentitiesClient,\n EventSequencesClient,\n EventTypesClient,\n ConstraintsClient,\n ObserversClient,\n FailedPartitionsClient,\n ReactorsClient,\n ReducersClient,\n ProjectionsClient,\n ReadModelsClient,\n JobsClient,\n EventSeedingClient,\n ServerClient,\n ConnectionServiceClient,\n} from './generated/index';\n\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 channel options\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 // Create gRPC channel credentials\n let channelCredentials = options.credentials;\n if (!channelCredentials) {\n channelCredentials = this._connectionString.createCredentials();\n\n if (!this._connectionString.disableTls) {\n const callCredentials = this.createAuthCallCredentials();\n if (callCredentials) {\n channelCredentials = grpc.credentials.combineChannelCredentials(\n channelCredentials,\n callCredentials\n );\n }\n }\n }\n\n // Create the gRPC channel\n this.channel = new grpc.Channel(serverAddress, channelCredentials, channelOptions);\n\n // Create services using nice-grpc's createClient\n this.connectionService = createClient(ConnectionServiceDefinition, this.channel);\n this.services = this.createServices();\n }\n\n private createServices(): ChronicleServices {\n return {\n eventStores: createClient(EventStoresDefinition, this.channel),\n namespaces: createClient(NamespacesDefinition, this.channel),\n recommendations: createClient(RecommendationsDefinition, this.channel),\n identities: createClient(IdentitiesDefinition, this.channel),\n eventSequences: createClient(EventSequencesDefinition, this.channel),\n eventTypes: createClient(EventTypesDefinition, this.channel),\n constraints: createClient(ConstraintsDefinition, this.channel),\n observers: createClient(ObserversDefinition, this.channel),\n failedPartitions: createClient(FailedPartitionsDefinition, this.channel),\n reactors: createClient(ReactorsDefinition, this.channel),\n reducers: createClient(ReducersDefinition, this.channel),\n projections: createClient(ProjectionsDefinition, this.channel),\n readModels: createClient(ReadModelsDefinition, this.channel),\n jobs: createClient(JobsDefinition, this.channel),\n eventSeeding: createClient(EventSeedingDefinition, this.channel),\n server: createClient(ServerDefinition, this.channel),\n };\n }\n\n /**\n * Creates a token provider based on connection configuration\n */\n private createTokenProvider(options: ChronicleConnectionOptions): ITokenProvider {\n const hasUsername = !!this._connectionString.username;\n const hasPassword = !!this._connectionString.password;\n const hasApiKey = !!this._connectionString.apiKey;\n\n if (hasApiKey) {\n // API key authentication is handled directly through call metadata.\n return new NoOpTokenProvider();\n }\n\n if (hasUsername !== hasPassword) {\n // Incomplete client credentials cannot produce a valid OAuth token.\n return new NoOpTokenProvider();\n }\n\n if (hasUsername && hasPassword) {\n return this.createOAuthTokenProvider(\n options,\n this._connectionString.username!,\n this._connectionString.password!\n );\n }\n\n // Development support: no app credentials provided, so use default dev credentials.\n return this.createOAuthTokenProvider(\n options,\n ChronicleConnectionString.DEVELOPMENT_CLIENT,\n ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET\n );\n }\n\n private createOAuthTokenProvider(\n options: ChronicleConnectionOptions,\n username: string,\n password: string\n ): ITokenProvider {\n const managementPort = options.managementPort || 8080;\n let authorityHost: string;\n let authorityPort: number;\n\n if (options.authority) {\n const authorityUrl = new URL(options.authority);\n authorityHost = authorityUrl.hostname;\n authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;\n } else {\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 /**\n * Creates call credentials with bearer token from token provider\n */\n private createAuthCallCredentials(): grpc.CallCredentials | undefined {\n // Insecure channels cannot compose with call credentials — skip when TLS is disabled.\n if (this._connectionString.disableTls) {\n return undefined;\n }\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":["ChronicleConnectionString","grpc","createClient","ConnectionServiceDefinition","EventStoresDefinition","NamespacesDefinition","RecommendationsDefinition","IdentitiesDefinition","EventSequencesDefinition","EventTypesDefinition","ConstraintsDefinition","ObserversDefinition","FailedPartitionsDefinition","ReactorsDefinition","ReducersDefinition","ProjectionsDefinition","ReadModelsDefinition","JobsDefinition","EventSeedingDefinition","ServerDefinition","NoOpTokenProvider","OAuthTokenProvider","AuthenticationMode"],"mappings":"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"}
|
|
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 { createClient, createClientFactory } from 'nice-grpc';\nimport type { ClientMiddleware } from 'nice-grpc-common';\nimport { Metadata } from 'nice-grpc-common';\n\n// Import service definitions from generated files\nimport { EventStoresDefinition, NamespacesDefinition } from './generated/cratis_chronicle_contracts';\nimport { RecommendationsDefinition } from './generated/recommendations';\nimport { IdentitiesDefinition } from './generated/identities';\nimport { EventSequencesDefinition } from './generated/eventsequences';\nimport { EventTypesDefinition } from './generated/events';\nimport { ConstraintsDefinition } from './generated/events_constraints';\nimport { ObserversDefinition, FailedPartitionsDefinition } from './generated/observation';\nimport { ReactorsDefinition } from './generated/observation_reactors';\nimport { ReducersDefinition } from './generated/observation_reducers';\nimport { ProjectionsDefinition } from './generated/projections';\nimport { ReadModelsDefinition } from './generated/readmodels';\nimport { JobsDefinition } from './generated/jobs';\nimport { EventSeedingDefinition } from './generated/seeding';\nimport { ServerDefinition } from './generated/host';\nimport { ConnectionServiceDefinition } from './generated/clients';\n\n// Import client types\nimport type {\n EventStoresClient,\n NamespacesClient,\n RecommendationsClient,\n IdentitiesClient,\n EventSequencesClient,\n EventTypesClient,\n ConstraintsClient,\n ObserversClient,\n FailedPartitionsClient,\n ReactorsClient,\n ReducersClient,\n ProjectionsClient,\n ReadModelsClient,\n JobsClient,\n EventSeedingClient,\n ServerClient,\n ConnectionServiceClient,\n} from './generated/index';\n\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 channel options\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 // Create gRPC channel credentials\n let channelCredentials = options.credentials;\n if (!channelCredentials) {\n channelCredentials = this._connectionString.createCredentials();\n\n if (!this._connectionString.disableTls) {\n const callCredentials = this.createAuthCallCredentials();\n if (callCredentials) {\n channelCredentials = grpc.credentials.combineChannelCredentials(\n channelCredentials,\n callCredentials\n );\n }\n }\n }\n\n // Create the gRPC channel\n this.channel = new grpc.Channel(serverAddress, channelCredentials, channelOptions);\n\n // Create services using nice-grpc's createClient\n this.connectionService = createClient(ConnectionServiceDefinition, this.channel);\n this.services = this.createServices();\n }\n\n private createServices(): ChronicleServices {\n console.log('[Chronicle] Creating services with middleware');\n // Create a client factory and attach auth middleware for all calls\n let factory = createClientFactory();\n \n console.log('[Chronicle] Attaching auth middleware');\n // Attach authentication middleware that works for both TLS and insecure channels\n factory = factory.use(this.createAuthMiddleware());\n console.log('[Chronicle] Middleware attached, creating service clients');\n\n return {\n eventStores: factory.create(EventStoresDefinition, this.channel),\n namespaces: factory.create(NamespacesDefinition, this.channel),\n recommendations: factory.create(RecommendationsDefinition, this.channel),\n identities: factory.create(IdentitiesDefinition, this.channel),\n eventSequences: factory.create(EventSequencesDefinition, this.channel),\n eventTypes: factory.create(EventTypesDefinition, this.channel),\n constraints: factory.create(ConstraintsDefinition, this.channel),\n observers: factory.create(ObserversDefinition, this.channel),\n failedPartitions: factory.create(FailedPartitionsDefinition, this.channel),\n reactors: factory.create(ReactorsDefinition, this.channel),\n reducers: factory.create(ReducersDefinition, this.channel),\n projections: factory.create(ProjectionsDefinition, this.channel),\n readModels: factory.create(ReadModelsDefinition, this.channel),\n jobs: factory.create(JobsDefinition, this.channel),\n eventSeeding: factory.create(EventSeedingDefinition, this.channel),\n server: factory.create(ServerDefinition, this.channel),\n };\n }\n\n /**\n * Creates a token provider based on connection configuration\n */\n private createTokenProvider(options: ChronicleConnectionOptions): ITokenProvider {\n const hasUsername = !!this._connectionString.username;\n const hasPassword = !!this._connectionString.password;\n const hasApiKey = !!this._connectionString.apiKey;\n\n if (hasApiKey) {\n // API key authentication is handled directly through call metadata.\n return new NoOpTokenProvider();\n }\n\n if (hasUsername !== hasPassword) {\n // Incomplete client credentials cannot produce a valid OAuth token.\n return new NoOpTokenProvider();\n }\n\n if (hasUsername && hasPassword) {\n return this.createOAuthTokenProvider(\n options,\n this._connectionString.username!,\n this._connectionString.password!\n );\n }\n\n // Development support: no app credentials provided, so use default dev credentials.\n return this.createOAuthTokenProvider(\n options,\n ChronicleConnectionString.DEVELOPMENT_CLIENT,\n ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET\n );\n }\n\n private createOAuthTokenProvider(\n options: ChronicleConnectionOptions,\n username: string,\n password: string\n ): ITokenProvider {\n const managementPort = options.managementPort || 8080;\n let authorityHost: string;\n let authorityPort: number;\n\n if (options.authority) {\n const authorityUrl = new URL(options.authority);\n authorityHost = authorityUrl.hostname;\n authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;\n } else {\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 /**\n * Creates call credentials with bearer token from token provider\n */\n private createAuthCallCredentials(): grpc.CallCredentials | undefined {\n // Insecure channels cannot compose with call credentials — skip when TLS is disabled.\n if (this._connectionString.disableTls) {\n return undefined;\n }\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 * Creates a middleware that injects authentication headers for all calls.\n * This works for both TLS and insecure channels, similar to gRPC interceptors in C#.\n */\n private createAuthMiddleware(): ClientMiddleware {\n const tokenProvider = this.tokenProvider;\n const connectionString = this._connectionString;\n\n return async function* authMiddleware(call, options) {\n try {\n const token = await tokenProvider.getAccessToken();\n \n if (token) {\n // Create metadata object with the Bearer token\n // The Metadata factory function from nice-grpc-common accepts an object\n const authMetadata = Metadata({ authorization: `Bearer ${token}` });\n \n // Merge with existing metadata if present\n if (options.metadata) {\n const mergedMetadata = Metadata(options.metadata);\n mergedMetadata.set('authorization', `Bearer ${token}`);\n options.metadata = mergedMetadata;\n } else {\n options.metadata = authMetadata;\n }\n } else {\n // Fallback to API key if no token\n try {\n const authMode = connectionString.authenticationMode;\n if (authMode === AuthenticationMode.ApiKey && connectionString.apiKey) {\n const apiKeyMetadata = Metadata({ 'api-key': connectionString.apiKey });\n \n if (options.metadata) {\n const mergedMetadata = Metadata(options.metadata);\n mergedMetadata.set('api-key', connectionString.apiKey);\n options.metadata = mergedMetadata;\n } else {\n options.metadata = apiKeyMetadata;\n }\n }\n } catch {\n // No API key configured, continue without additional auth\n }\n }\n } catch (error) {\n // If token retrieval fails, continue without additional auth headers\n // This allows the connection to proceed with channel-level credentials if available\n }\n \n // Pass through to next middleware/handler, properly returning the response\n return yield* call.next(call.request, options);\n };\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":["ChronicleConnectionString","grpc","createClient","ConnectionServiceDefinition","createClientFactory","EventStoresDefinition","NamespacesDefinition","RecommendationsDefinition","IdentitiesDefinition","EventSequencesDefinition","EventTypesDefinition","ConstraintsDefinition","ObserversDefinition","FailedPartitionsDefinition","ReactorsDefinition","ReducersDefinition","ProjectionsDefinition","ReadModelsDefinition","JobsDefinition","EventSeedingDefinition","ServerDefinition","NoOpTokenProvider","OAuthTokenProvider","AuthenticationMode","Metadata"],"mappings":"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"}
|
|
@@ -43,6 +43,7 @@ export declare class ChronicleConnection implements ChronicleServices {
|
|
|
43
43
|
private createOAuthTokenProvider;
|
|
44
44
|
private createAuthCallCredentials;
|
|
45
45
|
get isConnected(): boolean;
|
|
46
|
+
private createAuthMiddleware;
|
|
46
47
|
connect(): Promise<void>;
|
|
47
48
|
disconnect(): void;
|
|
48
49
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAuBtC,OAAO,KAAK,EACR,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAsB,MAAM,6BAA6B,CAAC;AAM5F,MAAM,WAAW,0BAA0B;IAKvC,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAMtD,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,WAAW,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAKtC,cAAc,CAAC,EAAE,MAAM,CAAC;IAKxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAK/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD,qBAAa,mBAAoB,YAAW,iBAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAS;IAK7B,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,eAAe,IAAI,qBAAqB,CAE3C;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,cAAc,IAAI,oBAAoB,CAEzC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,SAAS,IAAI,eAAe,CAE/B;IAKD,IAAI,gBAAgB,IAAI,sBAAsB,CAE7C;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAKD,IAAI,WAAW,IAAI,iBAAiB,CAEnC;IAKD,IAAI,UAAU,IAAI,gBAAgB,CAEjC;IAKD,IAAI,IAAI,IAAI,UAAU,CAErB;IAKD,IAAI,YAAY,IAAI,kBAAkB,CAErC;IAKD,IAAI,MAAM,IAAI,YAAY,CAEzB;IAKD,OAAO,CAAC,iBAAiB,CAA0B;IAKnD,IAAI,gBAAgB,IAAI,yBAAyB,CAEhD;gBAMW,OAAO,EAAE,0BAA0B;IAwD/C,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,mBAAmB;IA+B3B,OAAO,CAAC,wBAAwB;IA2BhC,OAAO,CAAC,yBAAyB;IAkCjC,IAAI,WAAW,IAAI,OAAO,CAEzB;IAMD,OAAO,CAAC,oBAAoB;IAsDtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,UAAU,IAAI,IAAI;IAQlB,OAAO,IAAI,IAAI;CAGlB"}
|