@cratis/chronicle.contracts 15.25.0 → 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 +127 -49
- package/dist/ChronicleConnection.d.ts +2 -0
- package/dist/ChronicleConnection.d.ts.map +1 -1
- package/dist/ChronicleConnection.js +90 -42
- package/dist/ChronicleConnection.js.map +1 -1
- package/dist/cjs/ChronicleConnection.d.ts +2 -0
- package/dist/cjs/ChronicleConnection.d.ts.map +1 -1
- package/dist/cjs/ChronicleConnection.js +89 -41
- package/dist/cjs/ChronicleConnection.js.map +1 -1
- package/dist/esm/ChronicleConnection.d.ts +2 -0
- package/dist/esm/ChronicleConnection.d.ts.map +1 -1
- package/dist/esm/ChronicleConnection.js +90 -42
- 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
|
|
|
@@ -317,45 +328,58 @@ export class ChronicleConnection implements ChronicleServices {
|
|
|
317
328
|
* Creates a token provider based on connection configuration
|
|
318
329
|
*/
|
|
319
330
|
private createTokenProvider(options: ChronicleConnectionOptions): ITokenProvider {
|
|
320
|
-
|
|
321
|
-
|
|
331
|
+
const hasUsername = !!this._connectionString.username;
|
|
332
|
+
const hasPassword = !!this._connectionString.password;
|
|
333
|
+
const hasApiKey = !!this._connectionString.apiKey;
|
|
322
334
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
335
|
+
if (hasApiKey) {
|
|
336
|
+
// API key authentication is handled directly through call metadata.
|
|
337
|
+
return new NoOpTokenProvider();
|
|
338
|
+
}
|
|
326
339
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
340
|
+
if (hasUsername !== hasPassword) {
|
|
341
|
+
// Incomplete client credentials cannot produce a valid OAuth token.
|
|
342
|
+
return new NoOpTokenProvider();
|
|
343
|
+
}
|
|
330
344
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
345
|
+
if (hasUsername && hasPassword) {
|
|
346
|
+
return this.createOAuthTokenProvider(
|
|
347
|
+
options,
|
|
348
|
+
this._connectionString.username!,
|
|
349
|
+
this._connectionString.password!
|
|
350
|
+
);
|
|
351
|
+
}
|
|
335
352
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
authorityHost = this._connectionString.serverAddress.host;
|
|
344
|
-
authorityPort = managementPort;
|
|
345
|
-
}
|
|
353
|
+
// Development support: no app credentials provided, so use default dev credentials.
|
|
354
|
+
return this.createOAuthTokenProvider(
|
|
355
|
+
options,
|
|
356
|
+
ChronicleConnectionString.DEVELOPMENT_CLIENT,
|
|
357
|
+
ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET
|
|
358
|
+
);
|
|
359
|
+
}
|
|
346
360
|
|
|
347
|
-
|
|
348
|
-
|
|
361
|
+
private createOAuthTokenProvider(
|
|
362
|
+
options: ChronicleConnectionOptions,
|
|
363
|
+
username: string,
|
|
364
|
+
password: string
|
|
365
|
+
): ITokenProvider {
|
|
366
|
+
const managementPort = options.managementPort || 8080;
|
|
367
|
+
let authorityHost: string;
|
|
368
|
+
let authorityPort: number;
|
|
369
|
+
|
|
370
|
+
if (options.authority) {
|
|
371
|
+
const authorityUrl = new URL(options.authority);
|
|
372
|
+
authorityHost = authorityUrl.hostname;
|
|
373
|
+
authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
|
|
374
|
+
} else {
|
|
375
|
+
authorityHost = this._connectionString.serverAddress.host;
|
|
376
|
+
authorityPort = managementPort;
|
|
377
|
+
}
|
|
349
378
|
|
|
350
|
-
|
|
351
|
-
|
|
379
|
+
const scheme = this._connectionString.disableTls ? 'http' : 'https';
|
|
380
|
+
const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
|
|
352
381
|
|
|
353
|
-
|
|
354
|
-
return new NoOpTokenProvider();
|
|
355
|
-
} catch {
|
|
356
|
-
// If authentication mode check fails (no auth configured), use no-op provider
|
|
357
|
-
return new NoOpTokenProvider();
|
|
358
|
-
}
|
|
382
|
+
return new OAuthTokenProvider(tokenEndpoint, username, password);
|
|
359
383
|
}
|
|
360
384
|
|
|
361
385
|
/**
|
|
@@ -399,6 +423,60 @@ export class ChronicleConnection implements ChronicleServices {
|
|
|
399
423
|
return this._isConnected;
|
|
400
424
|
}
|
|
401
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
|
+
|
|
402
480
|
/**
|
|
403
481
|
* Connects to the Chronicle Kernel
|
|
404
482
|
* @returns Promise that resolves when connected
|
|
@@ -40,8 +40,10 @@ export declare class ChronicleConnection implements ChronicleServices {
|
|
|
40
40
|
constructor(options: ChronicleConnectionOptions);
|
|
41
41
|
private createServices;
|
|
42
42
|
private createTokenProvider;
|
|
43
|
+
private createOAuthTokenProvider;
|
|
43
44
|
private createAuthCallCredentials;
|
|
44
45
|
get isConnected(): boolean;
|
|
46
|
+
private createAuthMiddleware;
|
|
45
47
|
connect(): Promise<void>;
|
|
46
48
|
disconnect(): void;
|
|
47
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,55 +113,61 @@ 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) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const password = this._connectionString.password;
|
|
140
|
-
if (!username || !password) {
|
|
141
|
-
return new NoOpTokenProvider();
|
|
142
|
-
}
|
|
143
|
-
const managementPort = options.managementPort || 8080;
|
|
144
|
-
let authorityHost;
|
|
145
|
-
let authorityPort;
|
|
146
|
-
if (options.authority) {
|
|
147
|
-
const authorityUrl = new URL(options.authority);
|
|
148
|
-
authorityHost = authorityUrl.hostname;
|
|
149
|
-
authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
authorityHost = this._connectionString.serverAddress.host;
|
|
153
|
-
authorityPort = managementPort;
|
|
154
|
-
}
|
|
155
|
-
const scheme = this._connectionString.disableTls ? 'http' : 'https';
|
|
156
|
-
const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
|
|
157
|
-
return new OAuthTokenProvider(tokenEndpoint, username, password);
|
|
158
|
-
}
|
|
141
|
+
const hasUsername = !!this._connectionString.username;
|
|
142
|
+
const hasPassword = !!this._connectionString.password;
|
|
143
|
+
const hasApiKey = !!this._connectionString.apiKey;
|
|
144
|
+
if (hasApiKey) {
|
|
159
145
|
return new NoOpTokenProvider();
|
|
160
146
|
}
|
|
161
|
-
|
|
147
|
+
if (hasUsername !== hasPassword) {
|
|
162
148
|
return new NoOpTokenProvider();
|
|
163
149
|
}
|
|
150
|
+
if (hasUsername && hasPassword) {
|
|
151
|
+
return this.createOAuthTokenProvider(options, this._connectionString.username, this._connectionString.password);
|
|
152
|
+
}
|
|
153
|
+
return this.createOAuthTokenProvider(options, ChronicleConnectionString.DEVELOPMENT_CLIENT, ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET);
|
|
154
|
+
}
|
|
155
|
+
createOAuthTokenProvider(options, username, password) {
|
|
156
|
+
const managementPort = options.managementPort || 8080;
|
|
157
|
+
let authorityHost;
|
|
158
|
+
let authorityPort;
|
|
159
|
+
if (options.authority) {
|
|
160
|
+
const authorityUrl = new URL(options.authority);
|
|
161
|
+
authorityHost = authorityUrl.hostname;
|
|
162
|
+
authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
authorityHost = this._connectionString.serverAddress.host;
|
|
166
|
+
authorityPort = managementPort;
|
|
167
|
+
}
|
|
168
|
+
const scheme = this._connectionString.disableTls ? 'http' : 'https';
|
|
169
|
+
const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
|
|
170
|
+
return new OAuthTokenProvider(tokenEndpoint, username, password);
|
|
164
171
|
}
|
|
165
172
|
createAuthCallCredentials() {
|
|
166
173
|
if (this._connectionString.disableTls) {
|
|
@@ -193,6 +200,47 @@ export class ChronicleConnection {
|
|
|
193
200
|
get isConnected() {
|
|
194
201
|
return this._isConnected;
|
|
195
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
|
+
}
|
|
196
244
|
async connect() {
|
|
197
245
|
if (this._isConnected) {
|
|
198
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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"}
|
|
@@ -40,8 +40,10 @@ export declare class ChronicleConnection implements ChronicleServices {
|
|
|
40
40
|
constructor(options: ChronicleConnectionOptions);
|
|
41
41
|
private createServices;
|
|
42
42
|
private createTokenProvider;
|
|
43
|
+
private createOAuthTokenProvider;
|
|
43
44
|
private createAuthCallCredentials;
|
|
44
45
|
get isConnected(): boolean;
|
|
46
|
+
private createAuthMiddleware;
|
|
45
47
|
connect(): Promise<void>;
|
|
46
48
|
disconnect(): void;
|
|
47
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,55 +135,61 @@ 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) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const password = this._connectionString.password;
|
|
162
|
-
if (!username || !password) {
|
|
163
|
-
return new TokenProvider.NoOpTokenProvider();
|
|
164
|
-
}
|
|
165
|
-
const managementPort = options.managementPort || 8080;
|
|
166
|
-
let authorityHost;
|
|
167
|
-
let authorityPort;
|
|
168
|
-
if (options.authority) {
|
|
169
|
-
const authorityUrl = new URL(options.authority);
|
|
170
|
-
authorityHost = authorityUrl.hostname;
|
|
171
|
-
authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
authorityHost = this._connectionString.serverAddress.host;
|
|
175
|
-
authorityPort = managementPort;
|
|
176
|
-
}
|
|
177
|
-
const scheme = this._connectionString.disableTls ? 'http' : 'https';
|
|
178
|
-
const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
|
|
179
|
-
return new TokenProvider.OAuthTokenProvider(tokenEndpoint, username, password);
|
|
180
|
-
}
|
|
163
|
+
const hasUsername = !!this._connectionString.username;
|
|
164
|
+
const hasPassword = !!this._connectionString.password;
|
|
165
|
+
const hasApiKey = !!this._connectionString.apiKey;
|
|
166
|
+
if (hasApiKey) {
|
|
181
167
|
return new TokenProvider.NoOpTokenProvider();
|
|
182
168
|
}
|
|
183
|
-
|
|
169
|
+
if (hasUsername !== hasPassword) {
|
|
184
170
|
return new TokenProvider.NoOpTokenProvider();
|
|
185
171
|
}
|
|
172
|
+
if (hasUsername && hasPassword) {
|
|
173
|
+
return this.createOAuthTokenProvider(options, this._connectionString.username, this._connectionString.password);
|
|
174
|
+
}
|
|
175
|
+
return this.createOAuthTokenProvider(options, ChronicleConnectionString.ChronicleConnectionString.DEVELOPMENT_CLIENT, ChronicleConnectionString.ChronicleConnectionString.DEVELOPMENT_CLIENT_SECRET);
|
|
176
|
+
}
|
|
177
|
+
createOAuthTokenProvider(options, username, password) {
|
|
178
|
+
const managementPort = options.managementPort || 8080;
|
|
179
|
+
let authorityHost;
|
|
180
|
+
let authorityPort;
|
|
181
|
+
if (options.authority) {
|
|
182
|
+
const authorityUrl = new URL(options.authority);
|
|
183
|
+
authorityHost = authorityUrl.hostname;
|
|
184
|
+
authorityPort = authorityUrl.port ? parseInt(authorityUrl.port, 10) : managementPort;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
authorityHost = this._connectionString.serverAddress.host;
|
|
188
|
+
authorityPort = managementPort;
|
|
189
|
+
}
|
|
190
|
+
const scheme = this._connectionString.disableTls ? 'http' : 'https';
|
|
191
|
+
const tokenEndpoint = `${scheme}://${authorityHost}:${authorityPort}/connect/token`;
|
|
192
|
+
return new TokenProvider.OAuthTokenProvider(tokenEndpoint, username, password);
|
|
186
193
|
}
|
|
187
194
|
createAuthCallCredentials() {
|
|
188
195
|
if (this._connectionString.disableTls) {
|
|
@@ -215,6 +222,47 @@ class ChronicleConnection {
|
|
|
215
222
|
get isConnected() {
|
|
216
223
|
return this._isConnected;
|
|
217
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
|
+
}
|
|
218
266
|
async connect() {
|
|
219
267
|
if (this._isConnected) {
|
|
220
268
|
return;
|