@openfeature/flagd-provider 0.10.1 → 0.10.3
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/index.cjs.js +30 -8
- package/index.esm.js +30 -8
- package/package.json +2 -2
- package/src/e2e/jest.config.d.ts +0 -1
- package/src/lib/service/common/grpc-util.d.ts +2 -0
- package/src/lib/service/common/index.d.ts +1 -0
- package/src/lib/service/in-process/in-process-service.d.ts +2 -1
- package/src/e2e/tear-down.d.ts +0 -2
package/index.cjs.js
CHANGED
|
@@ -5829,6 +5829,21 @@ function isSet$1(value) {
|
|
|
5829
5829
|
return value !== null && value !== undefined;
|
|
5830
5830
|
}
|
|
5831
5831
|
|
|
5832
|
+
const closeStreamIfDefined = (stream) => {
|
|
5833
|
+
/**
|
|
5834
|
+
* cancel() is necessary to prevent calls from hanging the process, so we need to we need to remove all the
|
|
5835
|
+
* handlers, and add a no-op for 'error' so we can cancel without bubbling up an exception
|
|
5836
|
+
*/
|
|
5837
|
+
if (stream) {
|
|
5838
|
+
stream.removeAllListeners();
|
|
5839
|
+
stream.on('error', () => {
|
|
5840
|
+
// swallow errors after closed
|
|
5841
|
+
});
|
|
5842
|
+
stream.cancel();
|
|
5843
|
+
stream.destroy();
|
|
5844
|
+
}
|
|
5845
|
+
};
|
|
5846
|
+
|
|
5832
5847
|
class GRPCService {
|
|
5833
5848
|
get _cacheActive() {
|
|
5834
5849
|
// the cache is "active" (able to be used) if the config enabled it, AND the gRPC stream is live
|
|
@@ -5866,10 +5881,8 @@ class GRPCService {
|
|
|
5866
5881
|
return new Promise((resolve, reject) => this.listen(reconnectCallback, changedCallback, disconnectCallback, resolve, reject));
|
|
5867
5882
|
}
|
|
5868
5883
|
disconnect() {
|
|
5869
|
-
var _a;
|
|
5870
5884
|
return __awaiter(this, void 0, void 0, function* () {
|
|
5871
|
-
|
|
5872
|
-
(_a = this._eventStream) === null || _a === void 0 ? void 0 : _a.cancel();
|
|
5885
|
+
closeStreamIfDefined(this._eventStream);
|
|
5873
5886
|
this._client.close();
|
|
5874
5887
|
});
|
|
5875
5888
|
}
|
|
@@ -5896,6 +5909,8 @@ class GRPCService {
|
|
|
5896
5909
|
listen(reconnectCallback, changedCallback, disconnectCallback, resolveConnect, rejectConnect) {
|
|
5897
5910
|
var _a;
|
|
5898
5911
|
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`${FlagdProvider.name}: connecting stream...`);
|
|
5912
|
+
// close the previous stream if we're reconnecting
|
|
5913
|
+
closeStreamIfDefined(this._eventStream);
|
|
5899
5914
|
const stream = this._client.eventStream({}, {});
|
|
5900
5915
|
stream.on('error', (err) => {
|
|
5901
5916
|
rejectConnect === null || rejectConnect === void 0 ? void 0 : rejectConnect(err);
|
|
@@ -6349,16 +6364,16 @@ class GrpcFetch {
|
|
|
6349
6364
|
this._request = { providerId: '', selector: selector ? selector : '' };
|
|
6350
6365
|
}
|
|
6351
6366
|
connect(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback) {
|
|
6352
|
-
// note that we never reject the promise as sync is a long-running operation
|
|
6353
6367
|
return new Promise((resolve, reject) => this.listen(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback, resolve, reject));
|
|
6354
6368
|
}
|
|
6355
6369
|
disconnect() {
|
|
6356
|
-
var _a
|
|
6370
|
+
var _a;
|
|
6357
6371
|
(_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('Disconnecting gRPC sync connection');
|
|
6358
|
-
(
|
|
6372
|
+
closeStreamIfDefined(this._syncStream);
|
|
6359
6373
|
this._syncClient.close();
|
|
6360
6374
|
}
|
|
6361
6375
|
listen(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback, resolveConnect, rejectConnect) {
|
|
6376
|
+
closeStreamIfDefined(this._syncStream);
|
|
6362
6377
|
this._syncStream = this._syncClient.syncFlags(this._request);
|
|
6363
6378
|
this._syncStream.on('data', (data) => {
|
|
6364
6379
|
var _a;
|
|
@@ -6391,7 +6406,8 @@ class GrpcFetch {
|
|
|
6391
6406
|
|
|
6392
6407
|
class InProcessService {
|
|
6393
6408
|
constructor(config, dataFetcher, logger) {
|
|
6394
|
-
this.
|
|
6409
|
+
this.logger = logger;
|
|
6410
|
+
this._flagdCore = new flagdCore.FlagdCore(undefined, logger);
|
|
6395
6411
|
this._dataFetcher = dataFetcher ? dataFetcher : new GrpcFetch(config, undefined, logger);
|
|
6396
6412
|
}
|
|
6397
6413
|
connect(reconnectCallback, changedCallback, disconnectCallback) {
|
|
@@ -6415,7 +6431,13 @@ class InProcessService {
|
|
|
6415
6431
|
return Promise.resolve(this._flagdCore.resolveObjectEvaluation(flagKey, defaultValue, context, logger));
|
|
6416
6432
|
}
|
|
6417
6433
|
fill(flags) {
|
|
6418
|
-
|
|
6434
|
+
var _a;
|
|
6435
|
+
try {
|
|
6436
|
+
this._flagdCore.setConfigurations(flags);
|
|
6437
|
+
}
|
|
6438
|
+
catch (err) {
|
|
6439
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(err);
|
|
6440
|
+
}
|
|
6419
6441
|
}
|
|
6420
6442
|
}
|
|
6421
6443
|
|
package/index.esm.js
CHANGED
|
@@ -5825,6 +5825,21 @@ function isSet$1(value) {
|
|
|
5825
5825
|
return value !== null && value !== undefined;
|
|
5826
5826
|
}
|
|
5827
5827
|
|
|
5828
|
+
const closeStreamIfDefined = (stream) => {
|
|
5829
|
+
/**
|
|
5830
|
+
* cancel() is necessary to prevent calls from hanging the process, so we need to we need to remove all the
|
|
5831
|
+
* handlers, and add a no-op for 'error' so we can cancel without bubbling up an exception
|
|
5832
|
+
*/
|
|
5833
|
+
if (stream) {
|
|
5834
|
+
stream.removeAllListeners();
|
|
5835
|
+
stream.on('error', () => {
|
|
5836
|
+
// swallow errors after closed
|
|
5837
|
+
});
|
|
5838
|
+
stream.cancel();
|
|
5839
|
+
stream.destroy();
|
|
5840
|
+
}
|
|
5841
|
+
};
|
|
5842
|
+
|
|
5828
5843
|
class GRPCService {
|
|
5829
5844
|
get _cacheActive() {
|
|
5830
5845
|
// the cache is "active" (able to be used) if the config enabled it, AND the gRPC stream is live
|
|
@@ -5862,10 +5877,8 @@ class GRPCService {
|
|
|
5862
5877
|
return new Promise((resolve, reject) => this.listen(reconnectCallback, changedCallback, disconnectCallback, resolve, reject));
|
|
5863
5878
|
}
|
|
5864
5879
|
disconnect() {
|
|
5865
|
-
var _a;
|
|
5866
5880
|
return __awaiter(this, void 0, void 0, function* () {
|
|
5867
|
-
|
|
5868
|
-
(_a = this._eventStream) === null || _a === void 0 ? void 0 : _a.cancel();
|
|
5881
|
+
closeStreamIfDefined(this._eventStream);
|
|
5869
5882
|
this._client.close();
|
|
5870
5883
|
});
|
|
5871
5884
|
}
|
|
@@ -5892,6 +5905,8 @@ class GRPCService {
|
|
|
5892
5905
|
listen(reconnectCallback, changedCallback, disconnectCallback, resolveConnect, rejectConnect) {
|
|
5893
5906
|
var _a;
|
|
5894
5907
|
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(`${FlagdProvider.name}: connecting stream...`);
|
|
5908
|
+
// close the previous stream if we're reconnecting
|
|
5909
|
+
closeStreamIfDefined(this._eventStream);
|
|
5895
5910
|
const stream = this._client.eventStream({}, {});
|
|
5896
5911
|
stream.on('error', (err) => {
|
|
5897
5912
|
rejectConnect === null || rejectConnect === void 0 ? void 0 : rejectConnect(err);
|
|
@@ -6345,16 +6360,16 @@ class GrpcFetch {
|
|
|
6345
6360
|
this._request = { providerId: '', selector: selector ? selector : '' };
|
|
6346
6361
|
}
|
|
6347
6362
|
connect(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback) {
|
|
6348
|
-
// note that we never reject the promise as sync is a long-running operation
|
|
6349
6363
|
return new Promise((resolve, reject) => this.listen(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback, resolve, reject));
|
|
6350
6364
|
}
|
|
6351
6365
|
disconnect() {
|
|
6352
|
-
var _a
|
|
6366
|
+
var _a;
|
|
6353
6367
|
(_a = this._logger) === null || _a === void 0 ? void 0 : _a.debug('Disconnecting gRPC sync connection');
|
|
6354
|
-
(
|
|
6368
|
+
closeStreamIfDefined(this._syncStream);
|
|
6355
6369
|
this._syncClient.close();
|
|
6356
6370
|
}
|
|
6357
6371
|
listen(dataFillCallback, reconnectCallback, changedCallback, disconnectCallback, resolveConnect, rejectConnect) {
|
|
6372
|
+
closeStreamIfDefined(this._syncStream);
|
|
6358
6373
|
this._syncStream = this._syncClient.syncFlags(this._request);
|
|
6359
6374
|
this._syncStream.on('data', (data) => {
|
|
6360
6375
|
var _a;
|
|
@@ -6387,7 +6402,8 @@ class GrpcFetch {
|
|
|
6387
6402
|
|
|
6388
6403
|
class InProcessService {
|
|
6389
6404
|
constructor(config, dataFetcher, logger) {
|
|
6390
|
-
this.
|
|
6405
|
+
this.logger = logger;
|
|
6406
|
+
this._flagdCore = new FlagdCore(undefined, logger);
|
|
6391
6407
|
this._dataFetcher = dataFetcher ? dataFetcher : new GrpcFetch(config, undefined, logger);
|
|
6392
6408
|
}
|
|
6393
6409
|
connect(reconnectCallback, changedCallback, disconnectCallback) {
|
|
@@ -6411,7 +6427,13 @@ class InProcessService {
|
|
|
6411
6427
|
return Promise.resolve(this._flagdCore.resolveObjectEvaluation(flagKey, defaultValue, context, logger));
|
|
6412
6428
|
}
|
|
6413
6429
|
fill(flags) {
|
|
6414
|
-
|
|
6430
|
+
var _a;
|
|
6431
|
+
try {
|
|
6432
|
+
this._flagdCore.setConfigurations(flags);
|
|
6433
|
+
}
|
|
6434
|
+
catch (err) {
|
|
6435
|
+
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(err);
|
|
6436
|
+
}
|
|
6415
6437
|
}
|
|
6416
6438
|
}
|
|
6417
6439
|
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openfeature/flagd-provider",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"publish-if-not-exists": "cp $NPM_CONFIG_USERCONFIG .npmrc && if [ \"$(npm show $npm_package_name@$npm_package_version version)\" = \"$(npm run current-version -s)\" ]; then echo 'already published, skipping'; else npm publish --access public; fi",
|
|
6
6
|
"current-version": "echo $npm_package_version"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@openfeature/flagd-core": "
|
|
9
|
+
"@openfeature/flagd-core": "~0.1.4",
|
|
10
10
|
"@protobuf-ts/runtime-rpc": "2.9.0",
|
|
11
11
|
"lru-cache": "10.0.1",
|
|
12
12
|
"util": "0.12.5"
|
package/src/e2e/jest.config.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './grpc-util';
|
|
@@ -3,9 +3,10 @@ import { EvaluationContext, JsonValue, Logger, ResolutionDetails } from '@openfe
|
|
|
3
3
|
import { Config } from '../../configuration';
|
|
4
4
|
import { DataFetch } from './data-fetch';
|
|
5
5
|
export declare class InProcessService implements Service {
|
|
6
|
+
private logger?;
|
|
6
7
|
private _flagdCore;
|
|
7
8
|
private _dataFetcher;
|
|
8
|
-
constructor(config: Config, dataFetcher?: DataFetch, logger?: Logger);
|
|
9
|
+
constructor(config: Config, dataFetcher?: DataFetch, logger?: Logger | undefined);
|
|
9
10
|
connect(reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
|
|
10
11
|
disconnect(): Promise<void>;
|
|
11
12
|
resolveBoolean(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
|
package/src/e2e/tear-down.d.ts
DELETED