@datadog/openfeature-node-server 0.1.0-preview.6 → 0.1.0-preview.7
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/cjs/configuration/evaluateForSubject.d.ts +1 -1
- package/cjs/configuration/evaluateForSubject.d.ts.map +1 -1
- package/cjs/provider.d.ts +28 -10
- package/cjs/provider.d.ts.map +1 -1
- package/cjs/provider.js +47 -10
- package/cjs/provider.js.map +1 -1
- package/esm/configuration/evaluateForSubject.d.ts +1 -1
- package/esm/configuration/evaluateForSubject.d.ts.map +1 -1
- package/esm/provider.d.ts +28 -10
- package/esm/provider.d.ts.map +1 -1
- package/esm/provider.js +47 -10
- package/esm/provider.js.map +1 -1
- package/package.json +5 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Rule } from '../rules/rules';
|
|
2
2
|
import { Flag } from './ufc-v1';
|
|
3
3
|
import { EvaluationContext, FlagValueType, Logger, ResolutionDetails } from '@openfeature/server-sdk';
|
|
4
|
-
import { FlagTypeToValue } from '@datadog/flagging-core
|
|
4
|
+
import { FlagTypeToValue } from '@datadog/flagging-core';
|
|
5
5
|
export declare function evaluateForSubject<T extends FlagValueType>(flag: Flag | undefined, type: T, subjectKey: string, subjectAttributes: EvaluationContext, defaultValue: FlagTypeToValue<T>, logger: Logger): ResolutionDetails<FlagTypeToValue<T>>;
|
|
6
6
|
export declare function containsMatchingRule(rules: Rule[] | undefined, subjectAttributes: EvaluationContext, logger: Logger): boolean;
|
|
7
7
|
//# sourceMappingURL=evaluateForSubject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateForSubject.d.ts","sourceRoot":"","sources":["../../src/configuration/evaluateForSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,IAAI,EAAkD,MAAM,UAAU,CAAA;AAC/E,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAA2B,MAAM,
|
|
1
|
+
{"version":3,"file":"evaluateForSubject.d.ts","sourceRoot":"","sources":["../../src/configuration/evaluateForSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,IAAI,EAAkD,MAAM,UAAU,CAAA;AAC/E,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAA2B,MAAM,wBAAwB,CAAA;AAEjF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,aAAa,EACxD,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,EAChC,MAAM,EAAE,MAAM,GACb,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA8FvC;AAkBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAST"}
|
package/cjs/provider.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import type { JsonValue, Logger, Provider, ProviderMetadata, ResolutionDetails, Paradigm, Hook } from '@openfeature/server-sdk';
|
|
1
|
+
import type { JsonValue, Logger, Provider, ProviderMetadata, ResolutionDetails, Paradigm, Hook, ProviderEventEmitter } from '@openfeature/server-sdk';
|
|
2
|
+
import { ProviderEvents } from '@openfeature/server-sdk';
|
|
2
3
|
import { EvaluationContext } from '@openfeature/core';
|
|
3
|
-
import { ProviderStatus } from '@openfeature/server-sdk';
|
|
4
4
|
import { UniversalFlagConfigurationV1 } from './configuration/ufc-v1';
|
|
5
|
-
import { ExposureEvent } from '@datadog/flagging-core
|
|
5
|
+
import { ExposureEvent } from '@datadog/flagging-core';
|
|
6
6
|
import type { Channel } from 'node:diagnostics_channel';
|
|
7
7
|
export interface DatadogNodeServerProviderOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Remote config agent
|
|
10
|
-
*/
|
|
11
|
-
configuration?: UniversalFlagConfigurationV1 | undefined;
|
|
12
8
|
/**
|
|
13
9
|
* Log experiment exposures
|
|
14
10
|
*/
|
|
@@ -18,12 +14,34 @@ export declare class DatadogNodeServerProvider implements Provider {
|
|
|
18
14
|
private readonly options;
|
|
19
15
|
readonly metadata: ProviderMetadata;
|
|
20
16
|
readonly runsOn: Paradigm;
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
readonly hooks?: Hook[];
|
|
18
|
+
private resolveInitialization?;
|
|
19
|
+
private rejectInitialization?;
|
|
20
|
+
readonly events: ProviderEventEmitter<ProviderEvents>;
|
|
23
21
|
private configuration?;
|
|
24
22
|
constructor(options: DatadogNodeServerProviderOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Used by dd-source-js
|
|
25
|
+
*/
|
|
25
26
|
getConfiguration(): UniversalFlagConfigurationV1 | undefined;
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Used by dd-source-js
|
|
29
|
+
*/
|
|
30
|
+
setConfiguration(configuration: UniversalFlagConfigurationV1): void;
|
|
31
|
+
/**
|
|
32
|
+
* Used by dd-source-js
|
|
33
|
+
*/
|
|
34
|
+
setError(error: unknown): void;
|
|
35
|
+
/**
|
|
36
|
+
* Used by the OpenFeature SDK to set the status based on initialization.
|
|
37
|
+
* Status of 'PROVIDER_READY' is emitted with a resolved promise.
|
|
38
|
+
* Status of 'PROVIDER_ERROR' is emitted with a rejected promise.
|
|
39
|
+
*
|
|
40
|
+
* Since we aren't loading the configuration in this Provider, we will simulate
|
|
41
|
+
* loading functionality via resolveInitialization and rejectInitialization.
|
|
42
|
+
* See setConfiguration and setError for more details.
|
|
43
|
+
*/
|
|
44
|
+
initialize(): Promise<void>;
|
|
27
45
|
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<boolean>>;
|
|
28
46
|
resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<string>>;
|
|
29
47
|
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<number>>;
|
package/cjs/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,IAAI,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,IAAI,EAEJ,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAA2B,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CACxC;AAED,qBAAa,yBAA0B,YAAW,QAAQ;IAa5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAElC;IACD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAW;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAEvB,OAAO,CAAC,qBAAqB,CAAC,CAA4C;IAC1E,OAAO,CAAC,oBAAoB,CAAC,CAA4B;IACzD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAA;IAErD,OAAO,CAAC,aAAa,CAAC,CAA0C;gBAEnC,OAAO,EAAE,gCAAgC;IAKtE;;OAEG;IACH,gBAAgB;IAIhB;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,4BAA4B;IAa5D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO;IAUvB;;;;;;;;OAQG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,wBAAwB,CAC5B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAMhC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAM/B,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAM/B,uBAAuB,CAAC,CAAC,SAAS,SAAS,EAC/C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAmBhC,OAAO,CAAC,cAAc;CAevB"}
|
package/cjs/provider.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DatadogNodeServerProvider = void 0;
|
|
4
4
|
const server_sdk_1 = require("@openfeature/server-sdk");
|
|
5
5
|
const evaluation_1 = require("./configuration/evaluation");
|
|
6
|
-
const
|
|
6
|
+
const flagging_core_1 = require("@datadog/flagging-core");
|
|
7
7
|
class DatadogNodeServerProvider {
|
|
8
8
|
constructor(options) {
|
|
9
9
|
this.options = options;
|
|
@@ -11,23 +11,60 @@ class DatadogNodeServerProvider {
|
|
|
11
11
|
name: 'datadog-node-server',
|
|
12
12
|
};
|
|
13
13
|
this.runsOn = 'server';
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
if (this.configuration) {
|
|
17
|
-
this.status = server_sdk_1.ProviderStatus.READY;
|
|
18
|
-
}
|
|
14
|
+
this.hooks = [];
|
|
15
|
+
this.events = new server_sdk_1.OpenFeatureEventEmitter();
|
|
19
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Used by dd-source-js
|
|
19
|
+
*/
|
|
20
20
|
getConfiguration() {
|
|
21
21
|
return this.configuration;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Used by dd-source-js
|
|
25
|
+
*/
|
|
23
26
|
setConfiguration(configuration) {
|
|
27
|
+
if (this.configuration && this.configuration !== configuration) {
|
|
28
|
+
this.events.emit(server_sdk_1.ProviderEvents.ConfigurationChanged);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
24
31
|
this.configuration = configuration;
|
|
25
|
-
if (this.
|
|
26
|
-
this.
|
|
32
|
+
if (this.resolveInitialization) {
|
|
33
|
+
this.resolveInitialization();
|
|
34
|
+
this.resolveInitialization = undefined;
|
|
35
|
+
this.rejectInitialization = undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Used by dd-source-js
|
|
40
|
+
*/
|
|
41
|
+
setError(error) {
|
|
42
|
+
if (this.rejectInitialization) {
|
|
43
|
+
this.rejectInitialization(error);
|
|
44
|
+
this.resolveInitialization = undefined;
|
|
45
|
+
this.rejectInitialization = undefined;
|
|
27
46
|
}
|
|
28
47
|
else {
|
|
29
|
-
this.
|
|
48
|
+
this.events.emit(server_sdk_1.ProviderEvents.Error, { error });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Used by the OpenFeature SDK to set the status based on initialization.
|
|
53
|
+
* Status of 'PROVIDER_READY' is emitted with a resolved promise.
|
|
54
|
+
* Status of 'PROVIDER_ERROR' is emitted with a rejected promise.
|
|
55
|
+
*
|
|
56
|
+
* Since we aren't loading the configuration in this Provider, we will simulate
|
|
57
|
+
* loading functionality via resolveInitialization and rejectInitialization.
|
|
58
|
+
* See setConfiguration and setError for more details.
|
|
59
|
+
*/
|
|
60
|
+
initialize() {
|
|
61
|
+
if (this.configuration) {
|
|
62
|
+
return Promise.resolve();
|
|
30
63
|
}
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
this.resolveInitialization = resolve;
|
|
66
|
+
this.rejectInitialization = reject;
|
|
67
|
+
});
|
|
31
68
|
}
|
|
32
69
|
async resolveBooleanEvaluation(flagKey, defaultValue, context, _logger) {
|
|
33
70
|
const resolutionDetails = (0, evaluation_1.evaluate)(this.configuration, 'boolean', flagKey, defaultValue, context, _logger);
|
|
@@ -62,7 +99,7 @@ class DatadogNodeServerProvider {
|
|
|
62
99
|
flagKey: flagKey,
|
|
63
100
|
flagMetadata: (_a = resolutionDetails.flagMetadata) !== null && _a !== void 0 ? _a : {},
|
|
64
101
|
};
|
|
65
|
-
const exposureEvent = (0,
|
|
102
|
+
const exposureEvent = (0, flagging_core_1.createExposureEvent)(context, evalutationDetails);
|
|
66
103
|
if (exposureEvent && this.options.exposureChannel.hasSubscribers) {
|
|
67
104
|
this.options.exposureChannel.publish(exposureEvent);
|
|
68
105
|
}
|
package/cjs/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;AAaA,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Rule } from '../rules/rules';
|
|
2
2
|
import { Flag } from './ufc-v1';
|
|
3
3
|
import { EvaluationContext, FlagValueType, Logger, ResolutionDetails } from '@openfeature/server-sdk';
|
|
4
|
-
import { FlagTypeToValue } from '@datadog/flagging-core
|
|
4
|
+
import { FlagTypeToValue } from '@datadog/flagging-core';
|
|
5
5
|
export declare function evaluateForSubject<T extends FlagValueType>(flag: Flag | undefined, type: T, subjectKey: string, subjectAttributes: EvaluationContext, defaultValue: FlagTypeToValue<T>, logger: Logger): ResolutionDetails<FlagTypeToValue<T>>;
|
|
6
6
|
export declare function containsMatchingRule(rules: Rule[] | undefined, subjectAttributes: EvaluationContext, logger: Logger): boolean;
|
|
7
7
|
//# sourceMappingURL=evaluateForSubject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluateForSubject.d.ts","sourceRoot":"","sources":["../../src/configuration/evaluateForSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,IAAI,EAAkD,MAAM,UAAU,CAAA;AAC/E,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAA2B,MAAM,
|
|
1
|
+
{"version":3,"file":"evaluateForSubject.d.ts","sourceRoot":"","sources":["../../src/configuration/evaluateForSubject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,EAAE,IAAI,EAAkD,MAAM,UAAU,CAAA;AAC/E,OAAO,EAEL,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,iBAAiB,EAElB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,eAAe,EAA2B,MAAM,wBAAwB,CAAA;AAEjF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,aAAa,EACxD,IAAI,EAAE,IAAI,GAAG,SAAS,EACtB,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,EAChC,MAAM,EAAE,MAAM,GACb,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA8FvC;AAkBD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAST"}
|
package/esm/provider.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import type { JsonValue, Logger, Provider, ProviderMetadata, ResolutionDetails, Paradigm, Hook } from '@openfeature/server-sdk';
|
|
1
|
+
import type { JsonValue, Logger, Provider, ProviderMetadata, ResolutionDetails, Paradigm, Hook, ProviderEventEmitter } from '@openfeature/server-sdk';
|
|
2
|
+
import { ProviderEvents } from '@openfeature/server-sdk';
|
|
2
3
|
import { EvaluationContext } from '@openfeature/core';
|
|
3
|
-
import { ProviderStatus } from '@openfeature/server-sdk';
|
|
4
4
|
import { UniversalFlagConfigurationV1 } from './configuration/ufc-v1';
|
|
5
|
-
import { ExposureEvent } from '@datadog/flagging-core
|
|
5
|
+
import { ExposureEvent } from '@datadog/flagging-core';
|
|
6
6
|
import type { Channel } from 'node:diagnostics_channel';
|
|
7
7
|
export interface DatadogNodeServerProviderOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Remote config agent
|
|
10
|
-
*/
|
|
11
|
-
configuration?: UniversalFlagConfigurationV1 | undefined;
|
|
12
8
|
/**
|
|
13
9
|
* Log experiment exposures
|
|
14
10
|
*/
|
|
@@ -18,12 +14,34 @@ export declare class DatadogNodeServerProvider implements Provider {
|
|
|
18
14
|
private readonly options;
|
|
19
15
|
readonly metadata: ProviderMetadata;
|
|
20
16
|
readonly runsOn: Paradigm;
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
readonly hooks?: Hook[];
|
|
18
|
+
private resolveInitialization?;
|
|
19
|
+
private rejectInitialization?;
|
|
20
|
+
readonly events: ProviderEventEmitter<ProviderEvents>;
|
|
23
21
|
private configuration?;
|
|
24
22
|
constructor(options: DatadogNodeServerProviderOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Used by dd-source-js
|
|
25
|
+
*/
|
|
25
26
|
getConfiguration(): UniversalFlagConfigurationV1 | undefined;
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Used by dd-source-js
|
|
29
|
+
*/
|
|
30
|
+
setConfiguration(configuration: UniversalFlagConfigurationV1): void;
|
|
31
|
+
/**
|
|
32
|
+
* Used by dd-source-js
|
|
33
|
+
*/
|
|
34
|
+
setError(error: unknown): void;
|
|
35
|
+
/**
|
|
36
|
+
* Used by the OpenFeature SDK to set the status based on initialization.
|
|
37
|
+
* Status of 'PROVIDER_READY' is emitted with a resolved promise.
|
|
38
|
+
* Status of 'PROVIDER_ERROR' is emitted with a rejected promise.
|
|
39
|
+
*
|
|
40
|
+
* Since we aren't loading the configuration in this Provider, we will simulate
|
|
41
|
+
* loading functionality via resolveInitialization and rejectInitialization.
|
|
42
|
+
* See setConfiguration and setError for more details.
|
|
43
|
+
*/
|
|
44
|
+
initialize(): Promise<void>;
|
|
27
45
|
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<boolean>>;
|
|
28
46
|
resolveStringEvaluation(flagKey: string, defaultValue: string, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<string>>;
|
|
29
47
|
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: EvaluationContext, _logger: Logger): Promise<ResolutionDetails<number>>;
|
package/esm/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,IAAI,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,IAAI,EAEJ,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAA2B,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;CACxC;AAED,qBAAa,yBAA0B,YAAW,QAAQ;IAa5C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAElC;IACD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAW;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IAEvB,OAAO,CAAC,qBAAqB,CAAC,CAA4C;IAC1E,OAAO,CAAC,oBAAoB,CAAC,CAA4B;IACzD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAA;IAErD,OAAO,CAAC,aAAa,CAAC,CAA0C;gBAEnC,OAAO,EAAE,gCAAgC;IAKtE;;OAEG;IACH,gBAAgB;IAIhB;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,4BAA4B;IAa5D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO;IAUvB;;;;;;;;OAQG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,wBAAwB,CAC5B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAMhC,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAM/B,uBAAuB,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAM/B,uBAAuB,CAAC,CAAC,SAAS,SAAS,EAC/C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAmBhC,OAAO,CAAC,cAAc;CAevB"}
|
package/esm/provider.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OpenFeatureEventEmitter, ProviderEvents } from '@openfeature/server-sdk';
|
|
2
2
|
import { evaluate } from './configuration/evaluation';
|
|
3
|
-
import { createExposureEvent } from '@datadog/flagging-core
|
|
3
|
+
import { createExposureEvent } from '@datadog/flagging-core';
|
|
4
4
|
export class DatadogNodeServerProvider {
|
|
5
5
|
constructor(options) {
|
|
6
6
|
this.options = options;
|
|
@@ -8,23 +8,60 @@ export class DatadogNodeServerProvider {
|
|
|
8
8
|
name: 'datadog-node-server',
|
|
9
9
|
};
|
|
10
10
|
this.runsOn = 'server';
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
if (this.configuration) {
|
|
14
|
-
this.status = ProviderStatus.READY;
|
|
15
|
-
}
|
|
11
|
+
this.hooks = [];
|
|
12
|
+
this.events = new OpenFeatureEventEmitter();
|
|
16
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Used by dd-source-js
|
|
16
|
+
*/
|
|
17
17
|
getConfiguration() {
|
|
18
18
|
return this.configuration;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Used by dd-source-js
|
|
22
|
+
*/
|
|
20
23
|
setConfiguration(configuration) {
|
|
24
|
+
if (this.configuration && this.configuration !== configuration) {
|
|
25
|
+
this.events.emit(ProviderEvents.ConfigurationChanged);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
21
28
|
this.configuration = configuration;
|
|
22
|
-
if (this.
|
|
23
|
-
this.
|
|
29
|
+
if (this.resolveInitialization) {
|
|
30
|
+
this.resolveInitialization();
|
|
31
|
+
this.resolveInitialization = undefined;
|
|
32
|
+
this.rejectInitialization = undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Used by dd-source-js
|
|
37
|
+
*/
|
|
38
|
+
setError(error) {
|
|
39
|
+
if (this.rejectInitialization) {
|
|
40
|
+
this.rejectInitialization(error);
|
|
41
|
+
this.resolveInitialization = undefined;
|
|
42
|
+
this.rejectInitialization = undefined;
|
|
24
43
|
}
|
|
25
44
|
else {
|
|
26
|
-
this.
|
|
45
|
+
this.events.emit(ProviderEvents.Error, { error });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Used by the OpenFeature SDK to set the status based on initialization.
|
|
50
|
+
* Status of 'PROVIDER_READY' is emitted with a resolved promise.
|
|
51
|
+
* Status of 'PROVIDER_ERROR' is emitted with a rejected promise.
|
|
52
|
+
*
|
|
53
|
+
* Since we aren't loading the configuration in this Provider, we will simulate
|
|
54
|
+
* loading functionality via resolveInitialization and rejectInitialization.
|
|
55
|
+
* See setConfiguration and setError for more details.
|
|
56
|
+
*/
|
|
57
|
+
initialize() {
|
|
58
|
+
if (this.configuration) {
|
|
59
|
+
return Promise.resolve();
|
|
27
60
|
}
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
this.resolveInitialization = resolve;
|
|
63
|
+
this.rejectInitialization = reject;
|
|
64
|
+
});
|
|
28
65
|
}
|
|
29
66
|
async resolveBooleanEvaluation(flagKey, defaultValue, context, _logger) {
|
|
30
67
|
const resolutionDetails = evaluate(this.configuration, 'boolean', flagKey, defaultValue, context, _logger);
|
package/esm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGjF,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAU5D,MAAM,OAAO,yBAAyB;IAapC,YAA6B,OAAyC;QAAzC,YAAO,GAAP,OAAO,CAAkC;QAZ7D,aAAQ,GAAqB;YACpC,IAAI,EAAE,qBAAqB;SAC5B,CAAA;QACQ,WAAM,GAAa,QAAQ,CAAA;QAUlC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,uBAAuB,EAAE,CAAA;IAC7C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,aAA2C;QAC1D,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAA;YACrD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAA;YACtC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAc;QACrB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAA;YACtC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAA;YACpC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,OAAe,EACf,YAAqB,EACrB,OAA0B,EAC1B,OAAe;QAEf,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAC1G,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;QACxD,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,OAAe,EACf,YAAoB,EACpB,OAA0B,EAC1B,OAAe;QAEf,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACzG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;QACxD,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,OAAe,EACf,YAAoB,EACpB,OAA0B,EAC1B,OAAe;QAEf,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QACzG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;QACxD,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,OAAe,EACf,YAAe,EACf,OAA0B,EAC1B,OAAe;QAEf,6DAA6D;QAC7D,iEAAiE;QACjE,4DAA4D;QAC5D,kEAAkE;QAClE,8DAA8D;QAC9D,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,QAAQ,CAChC,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,OAAO,EACP,OAAO,CACgB,CAAA;QACzB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAA;QACxD,OAAO,iBAAiB,CAAA;IAC1B,CAAC;IAEO,cAAc,CACpB,OAAe,EACf,OAA0B,EAC1B,iBAAuC;;QAEvC,MAAM,kBAAkB,GAAyB;YAC/C,GAAG,iBAAiB;YACpB,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE,MAAA,iBAAiB,CAAC,YAAY,mCAAI,EAAE;SACnD,CAAA;QACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;QACtE,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;YACjE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@datadog/openfeature-node-server",
|
|
3
|
-
"version": "0.1.0-preview.
|
|
3
|
+
"version": "0.1.0-preview.7",
|
|
4
4
|
"description": "React Native bindings for OpenFeature (wraps @datadog/flagging-core)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/DataDog/openfeature-js-client#readme",
|
|
@@ -33,8 +33,9 @@
|
|
|
33
33
|
"typecheck": "tsc --noEmit"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@datadog/flagging-core": "0.1.0-preview.
|
|
37
|
-
"@openfeature/server-sdk": "^1.19.0"
|
|
36
|
+
"@datadog/flagging-core": "0.1.0-preview.7",
|
|
37
|
+
"@openfeature/server-sdk": "^1.19.0",
|
|
38
|
+
"spark-md5": "^3.0.2"
|
|
38
39
|
},
|
|
39
40
|
"peerDependencies": {
|
|
40
41
|
"@openfeature/server-sdk": "^1.19.0"
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
"@openfeature/core": "^1.9.0",
|
|
44
45
|
"@types/jest": "^30.0.0",
|
|
45
46
|
"@types/node": "^20.0.0",
|
|
47
|
+
"@types/spark-md5": "^3",
|
|
46
48
|
"jest": "^30.0.4",
|
|
47
49
|
"npm-run-all": "^4.1.5",
|
|
48
50
|
"ts-jest": "^29.4.0",
|