@openfeature/flagd-provider 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,12 +1,18 @@
1
1
  {
2
2
  "name": "@openfeature/flagd-provider",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
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
+ "dependencies": {
9
+ "@openfeature/flagd-core": ">=0.1.1",
10
+ "@protobuf-ts/runtime-rpc": "2.9.0",
11
+ "lru-cache": "10.0.1",
12
+ "util": "0.12.5"
13
+ },
8
14
  "peerDependencies": {
9
- "@grpc/grpc-js": "^1.6.0",
15
+ "@grpc/grpc-js": "~1.8.0 || ~1.9.0",
10
16
  "@openfeature/server-sdk": ">=1.6.0"
11
17
  },
12
18
  "exports": {
@@ -18,10 +24,5 @@
18
24
  }
19
25
  },
20
26
  "module": "./index.esm.js",
21
- "main": "./index.cjs.js",
22
- "dependencies": {
23
- "@protobuf-ts/runtime-rpc": "2.9.0",
24
- "lru-cache": "10.0.1",
25
- "util": "0.12.5"
26
- }
27
+ "main": "./index.cjs.js"
27
28
  }
@@ -1,9 +1,12 @@
1
1
  declare const _default: {
2
2
  displayName: string;
3
3
  clearMocks: boolean;
4
- setupFiles: string[];
5
4
  preset: string;
6
5
  verbose: boolean;
7
6
  silent: boolean;
7
+ moduleNameMapper: {
8
+ '@openfeature/flagd-core': string[];
9
+ };
10
+ globalTeardown: string;
8
11
  };
9
12
  export default _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ declare const tearDownTests: () => Promise<void>;
2
+ export default tearDownTests;
@@ -1,4 +1,5 @@
1
1
  export type CacheOption = 'lru' | 'disabled';
2
+ export type ResolverType = 'rpc' | 'in-process';
2
3
  export interface Config {
3
4
  /**
4
5
  * The domain name or IP address of flagd.
@@ -24,6 +25,21 @@ export interface Config {
24
25
  * @example "/tmp/flagd.socks"
25
26
  */
26
27
  socketPath?: string;
28
+ /**
29
+ * Resolver type to use by the provider.
30
+ *
31
+ * Options include rpc & in-process.
32
+ *
33
+ * rpc - flag resolving happens remotely over gRPC
34
+ * in-process - flag resolving happens in-process, fetching flag definitions using the {@link https://github.com/open-feature/flagd-schemas/blob/main/protobuf/sync/v1/sync_service.proto|sync.proto}
35
+ *
36
+ * @default 'rpc'
37
+ */
38
+ resolverType?: ResolverType;
39
+ /**
40
+ * Selector to be used with flag sync gRPC contract.
41
+ */
42
+ selector?: string;
27
43
  /**
28
44
  * Cache implementation to use (or disabled).
29
45
  *
@@ -36,12 +52,6 @@ export interface Config {
36
52
  * @default 1000
37
53
  */
38
54
  maxCacheSize?: number;
39
- /**
40
- * Amount of times to attempt to reconnect to the event stream.
41
- *
42
- * @default 5
43
- */
44
- maxEventStreamRetries?: number;
45
55
  }
46
56
  export type FlagdProviderOptions = Partial<Config>;
47
57
  export declare function getConfig(options?: FlagdProviderOptions): {
@@ -49,7 +59,8 @@ export declare function getConfig(options?: FlagdProviderOptions): {
49
59
  port: number;
50
60
  tls: boolean;
51
61
  socketPath?: string | undefined;
62
+ resolverType?: ResolverType | undefined;
63
+ selector?: string | undefined;
52
64
  cache?: CacheOption | undefined;
53
65
  maxCacheSize?: number | undefined;
54
- maxEventStreamRetries?: number | undefined;
55
66
  };
@@ -1,5 +1,5 @@
1
1
  export declare const BASE_EVENT_STREAM_RETRY_BACKOFF_MS = 1000;
2
- export declare const DEFAULT_MAX_EVENT_STREAM_RETRIES = 5;
2
+ export declare const DEFAULT_MAX_EVENT_STREAM_RETRIES: number;
3
3
  export declare const EVENT_CONFIGURATION_CHANGE = "configuration_change";
4
4
  export declare const EVENT_PROVIDER_READY = "provider_ready";
5
5
  export declare const DEFAULT_MAX_CACHE_SIZE = 1000;
@@ -22,12 +22,12 @@ export declare class FlagdProvider implements Provider {
22
22
  constructor(options?: FlagdProviderOptions, logger?: Logger | undefined, service?: Service);
23
23
  initialize(): Promise<void>;
24
24
  onClose(): Promise<void>;
25
- resolveBooleanEvaluation(flagKey: string, _: boolean, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
26
- resolveStringEvaluation(flagKey: string, _: string, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
27
- resolveNumberEvaluation(flagKey: string, _: number, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
28
- resolveObjectEvaluation<T extends JsonValue>(flagKey: string, _: T, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
25
+ resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
26
+ resolveStringEvaluation(flagKey: string, defaultValue: string, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
27
+ resolveNumberEvaluation(flagKey: string, defaultValue: number, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
28
+ resolveObjectEvaluation<T extends JsonValue>(flagKey: string, defaultValue: T, transformedContext: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
29
29
  logRejected: (err: Error, flagKey: string, logger: Logger) => never;
30
- private setReady;
31
- private setError;
32
- private emitChanged;
30
+ private handleReconnect;
31
+ private handleError;
32
+ private handleChanged;
33
33
  }
@@ -23,24 +23,19 @@ export declare class GRPCService implements Service {
23
23
  private _client;
24
24
  private _cache;
25
25
  private _cacheEnabled;
26
- private _streamAlive;
27
- private _streamConnectAttempt;
28
- private _stream;
29
- private _streamConnectBackoff;
30
- private _maxEventStreamRetries;
26
+ private _eventStream;
31
27
  private get _cacheActive();
32
28
  constructor(config: Config, client?: ServiceClient, logger?: Logger | undefined);
33
- connect(connectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
29
+ connect(reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
34
30
  disconnect(): Promise<void>;
35
- resolveBoolean(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
36
- resolveString(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
37
- resolveNumber(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
38
- resolveObject<T extends JsonValue>(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
39
- private connectStream;
40
- private handleProviderReady;
31
+ resolveBoolean(flagKey: string, _: boolean, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
32
+ resolveString(flagKey: string, _: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
33
+ resolveNumber(flagKey: string, _: number, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
34
+ resolveObject<T extends JsonValue>(flagKey: string, _: T, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
35
+ private listen;
41
36
  private handleFlagsChanged;
37
+ private reconnect;
42
38
  private handleError;
43
- private handleClose;
44
39
  private resolve;
45
40
  private onRejected;
46
41
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Contract of in-process resolver's data fetcher
3
+ */
4
+ export interface DataFetch {
5
+ connect(dataFillCallback: (flags: string) => void, reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
6
+ disconnect(): void;
7
+ }
@@ -0,0 +1,18 @@
1
+ import { Logger } from '@openfeature/core';
2
+ import { FlagSyncServiceClient } from '../../../../proto/ts/sync/v1/sync_service';
3
+ import { Config } from '../../../configuration';
4
+ import { DataFetch } from '../data-fetch';
5
+ /**
6
+ * Implements the gRPC sync contract to fetch flag data.
7
+ */
8
+ export declare class GrpcFetch implements DataFetch {
9
+ private _syncClient;
10
+ private _syncStream;
11
+ private readonly _request;
12
+ private _logger;
13
+ constructor(config: Config, syncServiceClient?: FlagSyncServiceClient, logger?: Logger);
14
+ connect(dataFillCallback: (flags: string) => void, reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
15
+ disconnect(): void;
16
+ private listen;
17
+ private reconnect;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { Service } from '../service';
2
+ import { EvaluationContext, JsonValue, Logger, ResolutionDetails } from '@openfeature/core';
3
+ import { Config } from '../../configuration';
4
+ import { DataFetch } from './data-fetch';
5
+ export declare class InProcessService implements Service {
6
+ private _flagdCore;
7
+ private _dataFetcher;
8
+ constructor(config: Config, dataFetcher?: DataFetch, logger?: Logger);
9
+ connect(reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
10
+ disconnect(): Promise<void>;
11
+ resolveBoolean(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
12
+ resolveNumber(flagKey: string, defaultValue: number, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
13
+ resolveString(flagKey: string, defaultValue: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
14
+ resolveObject<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
15
+ private fill;
16
+ }
@@ -2,8 +2,8 @@ import { EvaluationContext, JsonValue, Logger, ResolutionDetails } from '@openfe
2
2
  export interface Service {
3
3
  connect(reconnectCallback: () => void, changedCallback: (flagsChanged: string[]) => void, disconnectCallback: () => void): Promise<void>;
4
4
  disconnect(): Promise<void>;
5
- resolveBoolean(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
6
- resolveString(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
7
- resolveNumber(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
8
- resolveObject<T extends JsonValue>(flagKey: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
5
+ resolveBoolean(flagKey: string, defaultValue: boolean, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<boolean>>;
6
+ resolveString(flagKey: string, defaultValue: string, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<string>>;
7
+ resolveNumber(flagKey: string, defaultValue: number, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<number>>;
8
+ resolveObject<T extends JsonValue>(flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger): Promise<ResolutionDetails<T>>;
9
9
  }