@openfeature/server-sdk 1.14.0 → 1.15.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/README.md +2 -2
- package/dist/cjs/index.js +228 -162
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +231 -162
- package/dist/esm/index.js.map +1 -1
- package/package.json +5 -5
package/dist/esm/index.js
CHANGED
|
@@ -1,12 +1,54 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __async = (__this, __arguments, generator) => {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
var fulfilled = (value) => {
|
|
23
|
+
try {
|
|
24
|
+
step(generator.next(value));
|
|
25
|
+
} catch (e) {
|
|
26
|
+
reject(e);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var rejected = (value) => {
|
|
30
|
+
try {
|
|
31
|
+
step(generator.throw(value));
|
|
32
|
+
} catch (e) {
|
|
33
|
+
reject(e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
37
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
1
41
|
// src/provider/provider.ts
|
|
2
42
|
import { ServerProviderStatus } from "@openfeature/core";
|
|
3
43
|
|
|
4
44
|
// src/provider/no-op-provider.ts
|
|
5
45
|
var REASON_NO_OP = "No-op";
|
|
6
46
|
var NoopFeatureProvider = class {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
47
|
+
constructor() {
|
|
48
|
+
this.metadata = {
|
|
49
|
+
name: "No-op Provider"
|
|
50
|
+
};
|
|
51
|
+
}
|
|
10
52
|
resolveBooleanEvaluation(_, defaultValue) {
|
|
11
53
|
return this.noOp(defaultValue);
|
|
12
54
|
}
|
|
@@ -40,7 +82,6 @@ import {
|
|
|
40
82
|
// src/provider/in-memory-provider/variant-not-found-error.ts
|
|
41
83
|
import { ErrorCode, OpenFeatureError } from "@openfeature/core";
|
|
42
84
|
var VariantFoundError = class _VariantFoundError extends OpenFeatureError {
|
|
43
|
-
code;
|
|
44
85
|
constructor(message) {
|
|
45
86
|
super(message);
|
|
46
87
|
Object.setPrototypeOf(this, _VariantFoundError.prototype);
|
|
@@ -51,14 +92,13 @@ var VariantFoundError = class _VariantFoundError extends OpenFeatureError {
|
|
|
51
92
|
|
|
52
93
|
// src/provider/in-memory-provider/in-memory-provider.ts
|
|
53
94
|
var InMemoryProvider = class {
|
|
54
|
-
events = new OpenFeatureEventEmitter();
|
|
55
|
-
runsOn = "server";
|
|
56
|
-
metadata = {
|
|
57
|
-
name: "in-memory"
|
|
58
|
-
};
|
|
59
|
-
_flagConfiguration;
|
|
60
95
|
constructor(flagConfiguration = {}) {
|
|
61
|
-
this.
|
|
96
|
+
this.events = new OpenFeatureEventEmitter();
|
|
97
|
+
this.runsOn = "server";
|
|
98
|
+
this.metadata = {
|
|
99
|
+
name: "in-memory"
|
|
100
|
+
};
|
|
101
|
+
this._flagConfiguration = __spreadValues({}, flagConfiguration);
|
|
62
102
|
}
|
|
63
103
|
/**
|
|
64
104
|
* Overwrites the configured flags.
|
|
@@ -66,7 +106,7 @@ var InMemoryProvider = class {
|
|
|
66
106
|
*/
|
|
67
107
|
putConfiguration(flagConfiguration) {
|
|
68
108
|
const flagsChanged = Object.entries(flagConfiguration).filter(([key, value]) => this._flagConfiguration[key] !== value).map(([key]) => key);
|
|
69
|
-
this._flagConfiguration = {
|
|
109
|
+
this._flagConfiguration = __spreadValues({}, flagConfiguration);
|
|
70
110
|
this.events.emit(ServerProviderEvents.ConfigurationChanged, { flagsChanged });
|
|
71
111
|
}
|
|
72
112
|
resolveBooleanEvaluation(flagKey, defaultValue, context, logger) {
|
|
@@ -75,49 +115,56 @@ var InMemoryProvider = class {
|
|
|
75
115
|
resolveNumberEvaluation(flagKey, defaultValue, context, logger) {
|
|
76
116
|
return this.resolveFlagWithReason(flagKey, defaultValue, context, logger);
|
|
77
117
|
}
|
|
78
|
-
|
|
79
|
-
return this
|
|
118
|
+
resolveStringEvaluation(flagKey, defaultValue, context, logger) {
|
|
119
|
+
return __async(this, null, function* () {
|
|
120
|
+
return this.resolveFlagWithReason(flagKey, defaultValue, context, logger);
|
|
121
|
+
});
|
|
80
122
|
}
|
|
81
|
-
|
|
82
|
-
return this
|
|
123
|
+
resolveObjectEvaluation(flagKey, defaultValue, context, logger) {
|
|
124
|
+
return __async(this, null, function* () {
|
|
125
|
+
return this.resolveFlagWithReason(flagKey, defaultValue, context, logger);
|
|
126
|
+
});
|
|
83
127
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
128
|
+
resolveFlagWithReason(flagKey, defaultValue, ctx, logger) {
|
|
129
|
+
return __async(this, null, function* () {
|
|
130
|
+
try {
|
|
131
|
+
const resolutionResult = this.lookupFlagValue(flagKey, defaultValue, ctx, logger);
|
|
132
|
+
if (typeof (resolutionResult == null ? void 0 : resolutionResult.value) != typeof defaultValue) {
|
|
133
|
+
throw new TypeMismatchError();
|
|
134
|
+
}
|
|
135
|
+
return resolutionResult;
|
|
136
|
+
} catch (error) {
|
|
137
|
+
if (!(error instanceof OpenFeatureError2)) {
|
|
138
|
+
throw new GeneralError((error == null ? void 0 : error.message) || "unknown error");
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
94
141
|
}
|
|
95
|
-
|
|
96
|
-
}
|
|
142
|
+
});
|
|
97
143
|
}
|
|
98
144
|
lookupFlagValue(flagKey, defaultValue, ctx, logger) {
|
|
145
|
+
var _a;
|
|
99
146
|
if (!(flagKey in this._flagConfiguration)) {
|
|
100
147
|
const message = `no flag found with key ${flagKey}`;
|
|
101
|
-
logger
|
|
148
|
+
logger == null ? void 0 : logger.debug(message);
|
|
102
149
|
throw new FlagNotFoundError(message);
|
|
103
150
|
}
|
|
104
151
|
const flagSpec = this._flagConfiguration[flagKey];
|
|
105
152
|
if (flagSpec.disabled) {
|
|
106
153
|
return { value: defaultValue, reason: StandardResolutionReasons.DISABLED };
|
|
107
154
|
}
|
|
108
|
-
const isContextEval = ctx && flagSpec
|
|
109
|
-
const variant = isContextEval ? flagSpec.contextEvaluator
|
|
110
|
-
const value = variant && flagSpec
|
|
155
|
+
const isContextEval = ctx && (flagSpec == null ? void 0 : flagSpec.contextEvaluator);
|
|
156
|
+
const variant = isContextEval ? (_a = flagSpec.contextEvaluator) == null ? void 0 : _a.call(flagSpec, ctx) : flagSpec.defaultVariant;
|
|
157
|
+
const value = variant && (flagSpec == null ? void 0 : flagSpec.variants[variant]);
|
|
111
158
|
if (value === void 0) {
|
|
112
159
|
const message = `no value associated with variant ${variant}`;
|
|
113
|
-
logger
|
|
160
|
+
logger == null ? void 0 : logger.error(message);
|
|
114
161
|
throw new VariantFoundError(message);
|
|
115
162
|
}
|
|
116
|
-
return {
|
|
117
|
-
value
|
|
118
|
-
|
|
163
|
+
return __spreadProps(__spreadValues({
|
|
164
|
+
value
|
|
165
|
+
}, variant && { variant }), {
|
|
119
166
|
reason: isContextEval ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.STATIC
|
|
120
|
-
};
|
|
167
|
+
});
|
|
121
168
|
}
|
|
122
169
|
};
|
|
123
170
|
|
|
@@ -146,16 +193,15 @@ var OpenFeatureClient = class {
|
|
|
146
193
|
this.emitterAccessor = emitterAccessor;
|
|
147
194
|
this.globalLogger = globalLogger;
|
|
148
195
|
this.options = options;
|
|
196
|
+
this._hooks = [];
|
|
149
197
|
this._context = context;
|
|
150
198
|
}
|
|
151
|
-
_context;
|
|
152
|
-
_hooks = [];
|
|
153
|
-
_clientLogger;
|
|
154
199
|
get metadata() {
|
|
200
|
+
var _a, _b;
|
|
155
201
|
return {
|
|
156
202
|
// Use domain if name is not provided
|
|
157
|
-
name: this.options.domain
|
|
158
|
-
domain: this.options.domain
|
|
203
|
+
name: (_a = this.options.domain) != null ? _a : this.options.name,
|
|
204
|
+
domain: (_b = this.options.domain) != null ? _b : this.options.name,
|
|
159
205
|
version: this.options.version,
|
|
160
206
|
providerMetadata: this.providerAccessor().metadata
|
|
161
207
|
};
|
|
@@ -164,6 +210,7 @@ var OpenFeatureClient = class {
|
|
|
164
210
|
return this.providerStatusAccessor();
|
|
165
211
|
}
|
|
166
212
|
addHandler(eventType, handler) {
|
|
213
|
+
var _a;
|
|
167
214
|
this.emitterAccessor().addHandler(eventType, handler);
|
|
168
215
|
const shouldRunNow = statusMatchesEvent(eventType, this._providerStatus);
|
|
169
216
|
if (shouldRunNow) {
|
|
@@ -174,7 +221,7 @@ var OpenFeatureClient = class {
|
|
|
174
221
|
providerName: this._provider.metadata.name
|
|
175
222
|
});
|
|
176
223
|
} catch (err) {
|
|
177
|
-
this._logger
|
|
224
|
+
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
|
|
178
225
|
}
|
|
179
226
|
}
|
|
180
227
|
}
|
|
@@ -206,8 +253,10 @@ var OpenFeatureClient = class {
|
|
|
206
253
|
this._hooks = [];
|
|
207
254
|
return this;
|
|
208
255
|
}
|
|
209
|
-
|
|
210
|
-
return (
|
|
256
|
+
getBooleanValue(flagKey, defaultValue, context, options) {
|
|
257
|
+
return __async(this, null, function* () {
|
|
258
|
+
return (yield this.getBooleanDetails(flagKey, defaultValue, context, options)).value;
|
|
259
|
+
});
|
|
211
260
|
}
|
|
212
261
|
getBooleanDetails(flagKey, defaultValue, context, options) {
|
|
213
262
|
return this.evaluate(
|
|
@@ -219,8 +268,10 @@ var OpenFeatureClient = class {
|
|
|
219
268
|
options
|
|
220
269
|
);
|
|
221
270
|
}
|
|
222
|
-
|
|
223
|
-
return (
|
|
271
|
+
getStringValue(flagKey, defaultValue, context, options) {
|
|
272
|
+
return __async(this, null, function* () {
|
|
273
|
+
return (yield this.getStringDetails(flagKey, defaultValue, context, options)).value;
|
|
274
|
+
});
|
|
224
275
|
}
|
|
225
276
|
getStringDetails(flagKey, defaultValue, context, options) {
|
|
226
277
|
return this.evaluate(
|
|
@@ -233,8 +284,10 @@ var OpenFeatureClient = class {
|
|
|
233
284
|
options
|
|
234
285
|
);
|
|
235
286
|
}
|
|
236
|
-
|
|
237
|
-
return (
|
|
287
|
+
getNumberValue(flagKey, defaultValue, context, options) {
|
|
288
|
+
return __async(this, null, function* () {
|
|
289
|
+
return (yield this.getNumberDetails(flagKey, defaultValue, context, options)).value;
|
|
290
|
+
});
|
|
238
291
|
}
|
|
239
292
|
getNumberDetails(flagKey, defaultValue, context, options) {
|
|
240
293
|
return this.evaluate(
|
|
@@ -247,109 +300,117 @@ var OpenFeatureClient = class {
|
|
|
247
300
|
options
|
|
248
301
|
);
|
|
249
302
|
}
|
|
250
|
-
|
|
251
|
-
return (
|
|
303
|
+
getObjectValue(flagKey, defaultValue, context, options) {
|
|
304
|
+
return __async(this, null, function* () {
|
|
305
|
+
return (yield this.getObjectDetails(flagKey, defaultValue, context, options)).value;
|
|
306
|
+
});
|
|
252
307
|
}
|
|
253
308
|
getObjectDetails(flagKey, defaultValue, context, options) {
|
|
254
309
|
return this.evaluate(flagKey, this._provider.resolveObjectEvaluation, defaultValue, "object", context, options);
|
|
255
310
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
...
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
providerMetadata: this._provider.metadata,
|
|
276
|
-
context: mergedContext,
|
|
277
|
-
logger: this._logger
|
|
278
|
-
};
|
|
279
|
-
try {
|
|
280
|
-
const frozenContext = await this.beforeHooks(allHooks, hookContext, options);
|
|
281
|
-
if (this.providerStatus === ServerProviderStatus.NOT_READY) {
|
|
282
|
-
throw new ProviderNotReadyError("provider has not yet initialized");
|
|
283
|
-
} else if (this.providerStatus === ServerProviderStatus.FATAL) {
|
|
284
|
-
throw new ProviderFatalError("provider is in an irrecoverable error state");
|
|
285
|
-
}
|
|
286
|
-
const resolution = await resolver.call(this._provider, flagKey, defaultValue, frozenContext, this._logger);
|
|
287
|
-
const evaluationDetails = {
|
|
288
|
-
...resolution,
|
|
289
|
-
flagMetadata: Object.freeze(resolution.flagMetadata ?? {}),
|
|
290
|
-
flagKey
|
|
311
|
+
evaluate(_0, _1, _2, _3) {
|
|
312
|
+
return __async(this, arguments, function* (flagKey, resolver, defaultValue, flagType, invocationContext = {}, options = {}) {
|
|
313
|
+
var _a;
|
|
314
|
+
const allHooks = [
|
|
315
|
+
...OpenFeature.getHooks(),
|
|
316
|
+
...this.getHooks(),
|
|
317
|
+
...options.hooks || [],
|
|
318
|
+
...this._provider.hooks || []
|
|
319
|
+
];
|
|
320
|
+
const allHooksReversed = [...allHooks].reverse();
|
|
321
|
+
const mergedContext = __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, OpenFeature.getContext()), OpenFeature.getTransactionContext()), this._context), invocationContext);
|
|
322
|
+
const hookContext = {
|
|
323
|
+
flagKey,
|
|
324
|
+
defaultValue,
|
|
325
|
+
flagValueType: flagType,
|
|
326
|
+
clientMetadata: this.metadata,
|
|
327
|
+
providerMetadata: this._provider.metadata,
|
|
328
|
+
context: mergedContext,
|
|
329
|
+
logger: this._logger
|
|
291
330
|
};
|
|
292
|
-
|
|
293
|
-
|
|
331
|
+
try {
|
|
332
|
+
const frozenContext = yield this.beforeHooks(allHooks, hookContext, options);
|
|
333
|
+
if (this.providerStatus === ServerProviderStatus.NOT_READY) {
|
|
334
|
+
throw new ProviderNotReadyError("provider has not yet initialized");
|
|
335
|
+
} else if (this.providerStatus === ServerProviderStatus.FATAL) {
|
|
336
|
+
throw new ProviderFatalError("provider is in an irrecoverable error state");
|
|
337
|
+
}
|
|
338
|
+
const resolution = yield resolver.call(this._provider, flagKey, defaultValue, frozenContext, this._logger);
|
|
339
|
+
const evaluationDetails = __spreadProps(__spreadValues({}, resolution), {
|
|
340
|
+
flagMetadata: Object.freeze((_a = resolution.flagMetadata) != null ? _a : {}),
|
|
341
|
+
flagKey
|
|
342
|
+
});
|
|
343
|
+
if (evaluationDetails.errorCode) {
|
|
344
|
+
throw instantiateErrorByErrorCode(evaluationDetails.errorCode);
|
|
345
|
+
}
|
|
346
|
+
yield this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);
|
|
347
|
+
return evaluationDetails;
|
|
348
|
+
} catch (err) {
|
|
349
|
+
const errorMessage = err == null ? void 0 : err.message;
|
|
350
|
+
const errorCode = (err == null ? void 0 : err.code) || ErrorCode2.GENERAL;
|
|
351
|
+
yield this.errorHooks(allHooksReversed, hookContext, err, options);
|
|
352
|
+
return {
|
|
353
|
+
errorCode,
|
|
354
|
+
errorMessage,
|
|
355
|
+
value: defaultValue,
|
|
356
|
+
reason: StandardResolutionReasons2.ERROR,
|
|
357
|
+
flagMetadata: Object.freeze({}),
|
|
358
|
+
flagKey
|
|
359
|
+
};
|
|
360
|
+
} finally {
|
|
361
|
+
yield this.finallyHooks(allHooksReversed, hookContext, options);
|
|
294
362
|
}
|
|
295
|
-
|
|
296
|
-
return evaluationDetails;
|
|
297
|
-
} catch (err) {
|
|
298
|
-
const errorMessage = err?.message;
|
|
299
|
-
const errorCode = err?.code || ErrorCode2.GENERAL;
|
|
300
|
-
await this.errorHooks(allHooksReversed, hookContext, err, options);
|
|
301
|
-
return {
|
|
302
|
-
errorCode,
|
|
303
|
-
errorMessage,
|
|
304
|
-
value: defaultValue,
|
|
305
|
-
reason: StandardResolutionReasons2.ERROR,
|
|
306
|
-
flagMetadata: Object.freeze({}),
|
|
307
|
-
flagKey
|
|
308
|
-
};
|
|
309
|
-
} finally {
|
|
310
|
-
await this.finallyHooks(allHooksReversed, hookContext, options);
|
|
311
|
-
}
|
|
363
|
+
});
|
|
312
364
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
|
|
365
|
+
beforeHooks(hooks, hookContext, options) {
|
|
366
|
+
return __async(this, null, function* () {
|
|
367
|
+
var _a;
|
|
368
|
+
for (const hook of hooks) {
|
|
369
|
+
Object.freeze(hookContext);
|
|
370
|
+
Object.assign(hookContext.context, __spreadValues(__spreadValues({}, hookContext.context), yield (_a = hook == null ? void 0 : hook.before) == null ? void 0 : _a.call(hook, hookContext, Object.freeze(options.hookHints))));
|
|
371
|
+
}
|
|
372
|
+
return Object.freeze(hookContext.context);
|
|
373
|
+
});
|
|
322
374
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
375
|
+
afterHooks(hooks, hookContext, evaluationDetails, options) {
|
|
376
|
+
return __async(this, null, function* () {
|
|
377
|
+
var _a;
|
|
378
|
+
for (const hook of hooks) {
|
|
379
|
+
yield (_a = hook == null ? void 0 : hook.after) == null ? void 0 : _a.call(hook, hookContext, evaluationDetails, options.hookHints);
|
|
380
|
+
}
|
|
381
|
+
});
|
|
327
382
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
this._logger.error(err2
|
|
383
|
+
errorHooks(hooks, hookContext, err, options) {
|
|
384
|
+
return __async(this, null, function* () {
|
|
385
|
+
var _a;
|
|
386
|
+
for (const hook of hooks) {
|
|
387
|
+
try {
|
|
388
|
+
yield (_a = hook == null ? void 0 : hook.error) == null ? void 0 : _a.call(hook, hookContext, err, options.hookHints);
|
|
389
|
+
} catch (err2) {
|
|
390
|
+
this._logger.error(`Unhandled error during 'error' hook: ${err2}`);
|
|
391
|
+
if (err2 instanceof Error) {
|
|
392
|
+
this._logger.error(err2.stack);
|
|
393
|
+
}
|
|
394
|
+
this._logger.error(err2 == null ? void 0 : err2.stack);
|
|
336
395
|
}
|
|
337
|
-
this._logger.error(err2?.stack);
|
|
338
396
|
}
|
|
339
|
-
}
|
|
397
|
+
});
|
|
340
398
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
this._logger.error(err
|
|
399
|
+
finallyHooks(hooks, hookContext, options) {
|
|
400
|
+
return __async(this, null, function* () {
|
|
401
|
+
var _a;
|
|
402
|
+
for (const hook of hooks) {
|
|
403
|
+
try {
|
|
404
|
+
yield (_a = hook == null ? void 0 : hook.finally) == null ? void 0 : _a.call(hook, hookContext, options.hookHints);
|
|
405
|
+
} catch (err) {
|
|
406
|
+
this._logger.error(`Unhandled error during 'finally' hook: ${err}`);
|
|
407
|
+
if (err instanceof Error) {
|
|
408
|
+
this._logger.error(err.stack);
|
|
409
|
+
}
|
|
410
|
+
this._logger.error(err == null ? void 0 : err.stack);
|
|
349
411
|
}
|
|
350
|
-
this._logger.error(err?.stack);
|
|
351
412
|
}
|
|
352
|
-
}
|
|
413
|
+
});
|
|
353
414
|
}
|
|
354
415
|
get _provider() {
|
|
355
416
|
return this.providerAccessor();
|
|
@@ -366,11 +427,12 @@ var OpenFeatureClient = class {
|
|
|
366
427
|
import { GenericEventEmitter } from "@openfeature/core";
|
|
367
428
|
import { EventEmitter } from "events";
|
|
368
429
|
var OpenFeatureEventEmitter = class extends GenericEventEmitter {
|
|
369
|
-
eventEmitter = new EventEmitter({ captureRejections: true });
|
|
370
430
|
constructor() {
|
|
371
431
|
super();
|
|
432
|
+
this.eventEmitter = new EventEmitter({ captureRejections: true });
|
|
372
433
|
this.eventEmitter.on("error", (err) => {
|
|
373
|
-
|
|
434
|
+
var _a;
|
|
435
|
+
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
|
|
374
436
|
});
|
|
375
437
|
}
|
|
376
438
|
};
|
|
@@ -392,9 +454,12 @@ var NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator()
|
|
|
392
454
|
// src/transaction-context/async-local-storage-transaction-context-propagator.ts
|
|
393
455
|
import { AsyncLocalStorage } from "async_hooks";
|
|
394
456
|
var AsyncLocalStorageTransactionContextPropagator = class {
|
|
395
|
-
|
|
457
|
+
constructor() {
|
|
458
|
+
this.asyncLocalStorage = new AsyncLocalStorage();
|
|
459
|
+
}
|
|
396
460
|
getTransactionContext() {
|
|
397
|
-
|
|
461
|
+
var _a;
|
|
462
|
+
return (_a = this.asyncLocalStorage.getStore()) != null ? _a : {};
|
|
398
463
|
}
|
|
399
464
|
setTransactionContext(transactionContext, callback, ...args) {
|
|
400
465
|
this.asyncLocalStorage.run(transactionContext, callback, ...args);
|
|
@@ -405,18 +470,18 @@ var AsyncLocalStorageTransactionContextPropagator = class {
|
|
|
405
470
|
var GLOBAL_OPENFEATURE_API_KEY = Symbol.for("@openfeature/js-sdk/api");
|
|
406
471
|
var _globalThis = globalThis;
|
|
407
472
|
var OpenFeatureAPI = class _OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
408
|
-
_statusEnumType = ServerProviderStatus;
|
|
409
|
-
_apiEmitter = new OpenFeatureEventEmitter();
|
|
410
|
-
_defaultProvider = new ProviderWrapper(
|
|
411
|
-
NOOP_PROVIDER,
|
|
412
|
-
ServerProviderStatus.NOT_READY,
|
|
413
|
-
this._statusEnumType
|
|
414
|
-
);
|
|
415
|
-
_domainScopedProviders = /* @__PURE__ */ new Map();
|
|
416
|
-
_createEventEmitter = () => new OpenFeatureEventEmitter();
|
|
417
|
-
_transactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;
|
|
418
473
|
constructor() {
|
|
419
474
|
super("server");
|
|
475
|
+
this._statusEnumType = ServerProviderStatus;
|
|
476
|
+
this._apiEmitter = new OpenFeatureEventEmitter();
|
|
477
|
+
this._defaultProvider = new ProviderWrapper(
|
|
478
|
+
NOOP_PROVIDER,
|
|
479
|
+
ServerProviderStatus.NOT_READY,
|
|
480
|
+
this._statusEnumType
|
|
481
|
+
);
|
|
482
|
+
this._domainScopedProviders = /* @__PURE__ */ new Map();
|
|
483
|
+
this._createEventEmitter = () => new OpenFeatureEventEmitter();
|
|
484
|
+
this._transactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;
|
|
420
485
|
}
|
|
421
486
|
/**
|
|
422
487
|
* Gets a singleton instance of the OpenFeature API.
|
|
@@ -433,15 +498,18 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
433
498
|
return instance;
|
|
434
499
|
}
|
|
435
500
|
getProviderStatus(domain) {
|
|
501
|
+
var _a, _b;
|
|
436
502
|
if (!domain) {
|
|
437
503
|
return this._defaultProvider.status;
|
|
438
504
|
}
|
|
439
|
-
return this._domainScopedProviders.get(domain)
|
|
505
|
+
return (_b = (_a = this._domainScopedProviders.get(domain)) == null ? void 0 : _a.status) != null ? _b : this._defaultProvider.status;
|
|
440
506
|
}
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
507
|
+
setProviderAndWait(domainOrProvider, providerOrUndefined) {
|
|
508
|
+
return __async(this, null, function* () {
|
|
509
|
+
const domain = stringOrUndefined(domainOrProvider);
|
|
510
|
+
const provider = domain ? objectOrUndefined(providerOrUndefined) : objectOrUndefined(domainOrProvider);
|
|
511
|
+
yield this.setAwaitableProvider(domain, provider);
|
|
512
|
+
});
|
|
445
513
|
}
|
|
446
514
|
setProvider(clientOrProvider, providerOrUndefined) {
|
|
447
515
|
const domain = stringOrUndefined(clientOrProvider);
|
|
@@ -460,9 +528,10 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
460
528
|
return this._context;
|
|
461
529
|
}
|
|
462
530
|
getClient(domainOrContext, versionOrContext, contextOrUndefined) {
|
|
531
|
+
var _a, _b;
|
|
463
532
|
const domain = stringOrUndefined(domainOrContext);
|
|
464
533
|
const version = stringOrUndefined(versionOrContext);
|
|
465
|
-
const context = objectOrUndefined(domainOrContext)
|
|
534
|
+
const context = (_b = (_a = objectOrUndefined(domainOrContext)) != null ? _a : objectOrUndefined(versionOrContext)) != null ? _b : objectOrUndefined(contextOrUndefined);
|
|
466
535
|
return new OpenFeatureClient(
|
|
467
536
|
() => this.getProviderForClient(domain),
|
|
468
537
|
() => this.getProviderStatus(domain),
|
|
@@ -481,9 +550,9 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
481
550
|
}
|
|
482
551
|
setTransactionContextPropagator(transactionContextPropagator) {
|
|
483
552
|
const baseMessage = "Invalid TransactionContextPropagator, will not be set: ";
|
|
484
|
-
if (typeof transactionContextPropagator
|
|
553
|
+
if (typeof (transactionContextPropagator == null ? void 0 : transactionContextPropagator.getTransactionContext) !== "function") {
|
|
485
554
|
this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);
|
|
486
|
-
} else if (typeof transactionContextPropagator
|
|
555
|
+
} else if (typeof (transactionContextPropagator == null ? void 0 : transactionContextPropagator.setTransactionContext) !== "function") {
|
|
487
556
|
this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);
|
|
488
557
|
} else {
|
|
489
558
|
this._transactionContextPropagator = transactionContextPropagator;
|
|
@@ -498,8 +567,8 @@ var OpenFeatureAPI = class _OpenFeatureAPI extends OpenFeatureCommonAPI {
|
|
|
498
567
|
return this._transactionContextPropagator.getTransactionContext();
|
|
499
568
|
} catch (err) {
|
|
500
569
|
const error = err;
|
|
501
|
-
this._logger.error(`Error getting transaction context: ${error
|
|
502
|
-
this._logger.error(error
|
|
570
|
+
this._logger.error(`Error getting transaction context: ${error == null ? void 0 : error.message}, returning empty context.`);
|
|
571
|
+
this._logger.error(error == null ? void 0 : error.stack);
|
|
503
572
|
return {};
|
|
504
573
|
}
|
|
505
574
|
}
|