@launchdarkly/js-client-sdk-common 0.1.0-alpha

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.
Files changed (75) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +1 -0
  3. package/dist/LDClientImpl.d.ts +65 -0
  4. package/dist/LDClientImpl.d.ts.map +1 -0
  5. package/dist/LDClientImpl.js +304 -0
  6. package/dist/LDClientImpl.js.map +1 -0
  7. package/dist/api/LDClient.d.ts +285 -0
  8. package/dist/api/LDClient.d.ts.map +1 -0
  9. package/dist/api/LDClient.js +3 -0
  10. package/dist/api/LDClient.js.map +1 -0
  11. package/dist/api/LDEmitter.d.ts +37 -0
  12. package/dist/api/LDEmitter.d.ts.map +1 -0
  13. package/dist/api/LDEmitter.js +88 -0
  14. package/dist/api/LDEmitter.js.map +1 -0
  15. package/dist/api/LDInspection.d.ts +88 -0
  16. package/dist/api/LDInspection.d.ts.map +1 -0
  17. package/dist/api/LDInspection.js +3 -0
  18. package/dist/api/LDInspection.js.map +1 -0
  19. package/dist/api/LDOptions.d.ts +172 -0
  20. package/dist/api/LDOptions.d.ts.map +1 -0
  21. package/dist/api/LDOptions.js +3 -0
  22. package/dist/api/LDOptions.js.map +1 -0
  23. package/dist/api/index.d.ts +3 -0
  24. package/dist/api/index.d.ts.map +1 -0
  25. package/dist/api/index.js +19 -0
  26. package/dist/api/index.js.map +1 -0
  27. package/dist/configuration/Configuration.d.ts +39 -0
  28. package/dist/configuration/Configuration.d.ts.map +1 -0
  29. package/dist/configuration/Configuration.js +69 -0
  30. package/dist/configuration/Configuration.js.map +1 -0
  31. package/dist/configuration/index.d.ts +3 -0
  32. package/dist/configuration/index.d.ts.map +1 -0
  33. package/dist/configuration/index.js +5 -0
  34. package/dist/configuration/index.js.map +1 -0
  35. package/dist/configuration/validators.d.ts +5 -0
  36. package/dist/configuration/validators.d.ts.map +1 -0
  37. package/dist/configuration/validators.js +38 -0
  38. package/dist/configuration/validators.js.map +1 -0
  39. package/dist/diagnostics/createDiagnosticsInitConfig.d.ts +16 -0
  40. package/dist/diagnostics/createDiagnosticsInitConfig.d.ts.map +1 -0
  41. package/dist/diagnostics/createDiagnosticsInitConfig.js +18 -0
  42. package/dist/diagnostics/createDiagnosticsInitConfig.js.map +1 -0
  43. package/dist/diagnostics/createDiagnosticsManager.d.ts +5 -0
  44. package/dist/diagnostics/createDiagnosticsManager.d.ts.map +1 -0
  45. package/dist/diagnostics/createDiagnosticsManager.js +12 -0
  46. package/dist/diagnostics/createDiagnosticsManager.js.map +1 -0
  47. package/dist/evaluation/fetchFlags.d.ts +6 -0
  48. package/dist/evaluation/fetchFlags.d.ts.map +1 -0
  49. package/dist/evaluation/fetchFlags.js +12 -0
  50. package/dist/evaluation/fetchFlags.js.map +1 -0
  51. package/dist/evaluation/fetchUtils.d.ts +7 -0
  52. package/dist/evaluation/fetchUtils.d.ts.map +1 -0
  53. package/dist/evaluation/fetchUtils.js +46 -0
  54. package/dist/evaluation/fetchUtils.js.map +1 -0
  55. package/dist/events/EventFactory.d.ts +2 -0
  56. package/dist/events/EventFactory.d.ts.map +1 -0
  57. package/dist/events/EventFactory.js +25 -0
  58. package/dist/events/EventFactory.js.map +1 -0
  59. package/dist/events/createEventProcessor.d.ts +5 -0
  60. package/dist/events/createEventProcessor.d.ts.map +1 -0
  61. package/dist/events/createEventProcessor.js +8 -0
  62. package/dist/events/createEventProcessor.js.map +1 -0
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +23 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/types/index.d.ts +20 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +3 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/dist/utils/index.d.ts +3 -0
  72. package/dist/utils/index.d.ts.map +1 -0
  73. package/dist/utils/index.js +24 -0
  74. package/dist/utils/index.js.map +1 -0
  75. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2022 Catamorphic, Co.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # sdk-client
@@ -0,0 +1,65 @@
1
+ import { internal, LDContext, LDEvaluationDetail, LDEvaluationDetailTyped, LDFlagSet, LDFlagValue, LDLogger, Platform, subsystem } from '@launchdarkly/js-sdk-common';
2
+ import { LDClient, type LDOptions } from './api';
3
+ import { EventName } from './api/LDEmitter';
4
+ import Configuration from './configuration';
5
+ export default class LDClientImpl implements LDClient {
6
+ readonly sdkKey: string;
7
+ readonly platform: Platform;
8
+ config: Configuration;
9
+ context?: LDContext;
10
+ diagnosticsManager?: internal.DiagnosticsManager;
11
+ eventProcessor: subsystem.LDEventProcessor;
12
+ streamer?: internal.StreamingProcessor;
13
+ logger: LDLogger;
14
+ private eventFactoryDefault;
15
+ private eventFactoryWithReasons;
16
+ private emitter;
17
+ private flags;
18
+ private identifyChangeListener?;
19
+ private identifyErrorListener?;
20
+ private readonly clientContext;
21
+ /**
22
+ * Creates the client object synchronously. No async, no network calls.
23
+ */
24
+ constructor(sdkKey: string, platform: Platform, options: LDOptions, internalOptions?: internal.LDInternalOptions);
25
+ allFlags(): LDFlagSet;
26
+ close(): Promise<void>;
27
+ flush(): Promise<{
28
+ error?: Error;
29
+ result: boolean;
30
+ }>;
31
+ getContext(): LDContext | undefined;
32
+ private createStreamListeners;
33
+ /**
34
+ * Generates the url path for streamer.
35
+ *
36
+ * For mobile key: /meval/${base64-encoded-context}
37
+ * For clientSideId: /eval/${envId}/${base64-encoded-context}
38
+ *
39
+ * the path.
40
+ *
41
+ * @protected This function must be overridden in subclasses for streamer
42
+ * to work.
43
+ * @param _context The LDContext object
44
+ */
45
+ protected createStreamUriPath(_context: LDContext): string;
46
+ private createPromiseWithListeners;
47
+ private getFlagsFromStorage;
48
+ identify(context: LDContext, _hash?: string): Promise<void>;
49
+ off(eventName: EventName, listener: Function): void;
50
+ on(eventName: EventName, listener: Function): void;
51
+ track(key: string, data?: any, metricValue?: number): void;
52
+ private variationInternal;
53
+ variation(flagKey: string, defaultValue?: LDFlagValue): LDFlagValue;
54
+ variationDetail(flagKey: string, defaultValue?: LDFlagValue): LDEvaluationDetail;
55
+ private typedEval;
56
+ boolVariation(key: string, defaultValue: boolean): boolean;
57
+ jsonVariation(key: string, defaultValue: unknown): unknown;
58
+ numberVariation(key: string, defaultValue: number): number;
59
+ stringVariation(key: string, defaultValue: string): string;
60
+ boolVariationDetail(key: string, defaultValue: boolean): LDEvaluationDetailTyped<boolean>;
61
+ numberVariationDetail(key: string, defaultValue: number): LDEvaluationDetailTyped<number>;
62
+ stringVariationDetail(key: string, defaultValue: string): LDEvaluationDetailTyped<string>;
63
+ jsonVariationDetail(key: string, defaultValue: unknown): LDEvaluationDetailTyped<unknown>;
64
+ }
65
+ //# sourceMappingURL=LDClientImpl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDClientImpl.d.ts","sourceRoot":"","sources":["../src/LDClientImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
+ const LDEmitter_1 = require("./api/LDEmitter");
5
+ const configuration_1 = require("./configuration");
6
+ const createDiagnosticsManager_1 = require("./diagnostics/createDiagnosticsManager");
7
+ const createEventProcessor_1 = require("./events/createEventProcessor");
8
+ const EventFactory_1 = require("./events/EventFactory");
9
+ const utils_1 = require("./utils");
10
+ const { createErrorEvaluationDetail, createSuccessEvaluationDetail, ClientMessages, ErrorKinds } = js_sdk_common_1.internal;
11
+ class LDClientImpl {
12
+ /**
13
+ * Creates the client object synchronously. No async, no network calls.
14
+ */
15
+ constructor(sdkKey, platform, options, internalOptions) {
16
+ this.sdkKey = sdkKey;
17
+ this.platform = platform;
18
+ this.eventFactoryDefault = new EventFactory_1.default(false);
19
+ this.eventFactoryWithReasons = new EventFactory_1.default(true);
20
+ this.flags = {};
21
+ if (!sdkKey) {
22
+ throw new Error('You must configure the client with a client-side SDK key');
23
+ }
24
+ if (!platform.encoding) {
25
+ throw new Error('Platform must implement Encoding because btoa is required.');
26
+ }
27
+ this.config = new configuration_1.default(options, internalOptions);
28
+ this.clientContext = new js_sdk_common_1.ClientContext(sdkKey, this.config, platform);
29
+ this.logger = this.config.logger;
30
+ this.diagnosticsManager = (0, createDiagnosticsManager_1.default)(sdkKey, this.config, platform);
31
+ this.eventProcessor = (0, createEventProcessor_1.default)(sdkKey, this.config, platform, this.diagnosticsManager);
32
+ this.emitter = new LDEmitter_1.default();
33
+ }
34
+ allFlags() {
35
+ const result = {};
36
+ Object.entries(this.flags).forEach(([k, r]) => {
37
+ if (!r.deleted) {
38
+ result[k] = r.value;
39
+ }
40
+ });
41
+ return result;
42
+ }
43
+ async close() {
44
+ var _a;
45
+ await this.flush();
46
+ this.eventProcessor.close();
47
+ (_a = this.streamer) === null || _a === void 0 ? void 0 : _a.close();
48
+ }
49
+ async flush() {
50
+ try {
51
+ await this.eventProcessor.flush();
52
+ }
53
+ catch (e) {
54
+ return { error: e, result: false };
55
+ }
56
+ return { result: true };
57
+ }
58
+ getContext() {
59
+ return this.context ? (0, js_sdk_common_1.clone)(this.context) : undefined;
60
+ }
61
+ createStreamListeners(context, canonicalKey, identifyResolve) {
62
+ const listeners = new Map();
63
+ listeners.set('put', {
64
+ deserializeData: JSON.parse,
65
+ processJson: async (dataJson) => {
66
+ var _a;
67
+ this.logger.debug(`Streamer PUT: ${Object.keys(dataJson)}`);
68
+ const changedKeys = (0, utils_1.calculateFlagChanges)(this.flags, dataJson);
69
+ this.context = context;
70
+ this.flags = dataJson;
71
+ await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.set(canonicalKey, JSON.stringify(this.flags)));
72
+ if (changedKeys.length > 0) {
73
+ this.logger.debug(`Emitting changes from PUT: ${changedKeys}`);
74
+ // emitting change resolves identify
75
+ this.emitter.emit('change', context, changedKeys);
76
+ }
77
+ else {
78
+ // manually resolve identify
79
+ this.logger.debug('Not emitting changes from PUT');
80
+ identifyResolve();
81
+ }
82
+ },
83
+ });
84
+ listeners.set('patch', {
85
+ deserializeData: JSON.parse,
86
+ processJson: async (dataJson) => {
87
+ var _a;
88
+ this.logger.debug(`Streamer PATCH ${JSON.stringify(dataJson, null, 2)}`);
89
+ const existing = this.flags[dataJson.key];
90
+ // add flag if it doesn't exist or update it if version is newer
91
+ if (!existing || (existing && dataJson.version > existing.version)) {
92
+ this.flags[dataJson.key] = dataJson;
93
+ await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.set(canonicalKey, JSON.stringify(this.flags)));
94
+ const changedKeys = [dataJson.key];
95
+ this.logger.debug(`Emitting changes from PATCH: ${changedKeys}`);
96
+ this.emitter.emit('change', context, changedKeys);
97
+ }
98
+ },
99
+ });
100
+ listeners.set('delete', {
101
+ deserializeData: JSON.parse,
102
+ processJson: async (dataJson) => {
103
+ var _a;
104
+ this.logger.debug(`Streamer DELETE ${JSON.stringify(dataJson, null, 2)}`);
105
+ const existing = this.flags[dataJson.key];
106
+ // the deleted flag is saved as tombstoned
107
+ if (!existing || existing.version < dataJson.version) {
108
+ this.flags[dataJson.key] = Object.assign(Object.assign({}, dataJson), { deleted: true,
109
+ // props below are set to sensible defaults. they are irrelevant
110
+ // because this flag has been deleted.
111
+ flagVersion: 0, value: undefined, variation: 0, trackEvents: false });
112
+ await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.set(canonicalKey, JSON.stringify(this.flags)));
113
+ const changedKeys = [dataJson.key];
114
+ this.logger.debug(`Emitting changes from DELETE: ${changedKeys}`);
115
+ this.emitter.emit('change', context, changedKeys);
116
+ }
117
+ },
118
+ });
119
+ return listeners;
120
+ }
121
+ /**
122
+ * Generates the url path for streamer.
123
+ *
124
+ * For mobile key: /meval/${base64-encoded-context}
125
+ * For clientSideId: /eval/${envId}/${base64-encoded-context}
126
+ *
127
+ * the path.
128
+ *
129
+ * @protected This function must be overridden in subclasses for streamer
130
+ * to work.
131
+ * @param _context The LDContext object
132
+ */
133
+ createStreamUriPath(_context) {
134
+ throw new Error('createStreamUriPath not implemented. client sdks must implement createStreamUriPath for streamer to work');
135
+ }
136
+ createPromiseWithListeners() {
137
+ let res;
138
+ const p = new Promise((resolve, reject) => {
139
+ res = resolve;
140
+ if (this.identifyChangeListener) {
141
+ this.emitter.off('change', this.identifyChangeListener);
142
+ }
143
+ if (this.identifyErrorListener) {
144
+ this.emitter.off('error', this.identifyErrorListener);
145
+ }
146
+ this.identifyChangeListener = (c, changedKeys) => {
147
+ this.logger.debug(`change: context: ${JSON.stringify(c)}, flags: ${changedKeys}`);
148
+ resolve();
149
+ };
150
+ this.identifyErrorListener = (c, err) => {
151
+ this.logger.debug(`error: ${err}, context: ${JSON.stringify(c)}`);
152
+ reject(err);
153
+ };
154
+ this.emitter.on('change', this.identifyChangeListener);
155
+ this.emitter.on('error', this.identifyErrorListener);
156
+ });
157
+ return { identifyPromise: p, identifyResolve: res };
158
+ }
159
+ async getFlagsFromStorage(canonicalKey) {
160
+ var _a;
161
+ const f = await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.get(canonicalKey));
162
+ return f ? JSON.parse(f) : undefined;
163
+ }
164
+ // TODO: implement secure mode
165
+ async identify(context, _hash) {
166
+ var _a;
167
+ const checkedContext = js_sdk_common_1.Context.fromLDContext(context);
168
+ if (!checkedContext.valid) {
169
+ const error = new Error('Context was unspecified or had no key');
170
+ this.logger.error(error);
171
+ this.emitter.emit('error', context, error);
172
+ return Promise.reject(error);
173
+ }
174
+ const { identifyPromise, identifyResolve } = this.createPromiseWithListeners();
175
+ this.logger.debug(`Identifying ${JSON.stringify(context)}`);
176
+ this.emitter.emit('identifying', context);
177
+ const flagsStorage = await this.getFlagsFromStorage(checkedContext.canonicalKey);
178
+ if (flagsStorage) {
179
+ this.logger.debug('Using storage');
180
+ const changedKeys = (0, utils_1.calculateFlagChanges)(this.flags, flagsStorage);
181
+ this.context = context;
182
+ this.flags = flagsStorage;
183
+ this.emitter.emit('change', context, changedKeys);
184
+ }
185
+ (_a = this.streamer) === null || _a === void 0 ? void 0 : _a.close();
186
+ this.streamer = new js_sdk_common_1.internal.StreamingProcessor(this.sdkKey, this.clientContext, this.createStreamUriPath(context), this.createStreamListeners(context, checkedContext.canonicalKey, identifyResolve), this.diagnosticsManager, (e) => {
187
+ this.logger.error(e);
188
+ this.emitter.emit('error', context, e);
189
+ });
190
+ this.streamer.start();
191
+ return identifyPromise;
192
+ }
193
+ off(eventName, listener) {
194
+ this.emitter.off(eventName, listener);
195
+ }
196
+ on(eventName, listener) {
197
+ this.emitter.on(eventName, listener);
198
+ }
199
+ track(key, data, metricValue) {
200
+ var _a, _b;
201
+ if (!this.context) {
202
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(ClientMessages.missingContextKeyNoEvent);
203
+ return;
204
+ }
205
+ const checkedContext = js_sdk_common_1.Context.fromLDContext(this.context);
206
+ if (!checkedContext.valid) {
207
+ (_b = this.logger) === null || _b === void 0 ? void 0 : _b.warn(ClientMessages.missingContextKeyNoEvent);
208
+ return;
209
+ }
210
+ this.eventProcessor.sendEvent(this.eventFactoryDefault.customEvent(key, checkedContext, data, metricValue));
211
+ }
212
+ // TODO: move variation functions to a separate file to make this file size
213
+ // more manageable.
214
+ variationInternal(flagKey, defaultValue, eventFactory, typeChecker) {
215
+ var _a;
216
+ if (!this.context) {
217
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug(ClientMessages.missingContextKeyNoEvent);
218
+ return createErrorEvaluationDetail(ErrorKinds.UserNotSpecified, defaultValue);
219
+ }
220
+ const evalContext = js_sdk_common_1.Context.fromLDContext(this.context);
221
+ const found = this.flags[flagKey];
222
+ if (!found || found.deleted) {
223
+ const defVal = defaultValue !== null && defaultValue !== void 0 ? defaultValue : null;
224
+ const error = new js_sdk_common_1.LDClientError(`Unknown feature flag "${flagKey}"; returning default value ${defVal}`);
225
+ this.logger.error(error);
226
+ this.emitter.emit('error', this.context, error);
227
+ this.eventProcessor.sendEvent(this.eventFactoryDefault.unknownFlagEvent(flagKey, defVal, evalContext));
228
+ return createErrorEvaluationDetail(ErrorKinds.FlagNotFound, defaultValue);
229
+ }
230
+ const { reason, value, variation } = found;
231
+ if (typeChecker) {
232
+ const [matched, type] = typeChecker(value);
233
+ if (!matched) {
234
+ this.eventProcessor.sendEvent(eventFactory.evalEventClient(flagKey, defaultValue, // track default value on type errors
235
+ defaultValue, found, evalContext, reason));
236
+ const error = new js_sdk_common_1.LDClientError(`Wrong type "${type}" for feature flag "${flagKey}"; returning default value`);
237
+ this.logger.error(error);
238
+ this.emitter.emit('error', this.context, error);
239
+ return createErrorEvaluationDetail(ErrorKinds.WrongType, defaultValue);
240
+ }
241
+ }
242
+ const successDetail = createSuccessEvaluationDetail(value, variation, reason);
243
+ if (variation === undefined || variation === null) {
244
+ this.logger.debug('Result value is null in variation');
245
+ successDetail.value = defaultValue;
246
+ }
247
+ this.eventProcessor.sendEvent(eventFactory.evalEventClient(flagKey, value, defaultValue, found, evalContext, reason));
248
+ return successDetail;
249
+ }
250
+ variation(flagKey, defaultValue) {
251
+ const { value } = this.variationInternal(flagKey, defaultValue, this.eventFactoryDefault);
252
+ return value;
253
+ }
254
+ variationDetail(flagKey, defaultValue) {
255
+ return this.variationInternal(flagKey, defaultValue, this.eventFactoryWithReasons);
256
+ }
257
+ typedEval(key, defaultValue, eventFactory, typeChecker) {
258
+ return this.variationInternal(key, defaultValue, eventFactory, typeChecker);
259
+ }
260
+ boolVariation(key, defaultValue) {
261
+ return this.typedEval(key, defaultValue, this.eventFactoryDefault, (value) => [
262
+ js_sdk_common_1.TypeValidators.Boolean.is(value),
263
+ js_sdk_common_1.TypeValidators.Boolean.getType(),
264
+ ]).value;
265
+ }
266
+ jsonVariation(key, defaultValue) {
267
+ return this.variation(key, defaultValue);
268
+ }
269
+ numberVariation(key, defaultValue) {
270
+ return this.typedEval(key, defaultValue, this.eventFactoryDefault, (value) => [
271
+ js_sdk_common_1.TypeValidators.Number.is(value),
272
+ js_sdk_common_1.TypeValidators.Number.getType(),
273
+ ]).value;
274
+ }
275
+ stringVariation(key, defaultValue) {
276
+ return this.typedEval(key, defaultValue, this.eventFactoryDefault, (value) => [
277
+ js_sdk_common_1.TypeValidators.String.is(value),
278
+ js_sdk_common_1.TypeValidators.String.getType(),
279
+ ]).value;
280
+ }
281
+ boolVariationDetail(key, defaultValue) {
282
+ return this.typedEval(key, defaultValue, this.eventFactoryWithReasons, (value) => [
283
+ js_sdk_common_1.TypeValidators.Boolean.is(value),
284
+ js_sdk_common_1.TypeValidators.Boolean.getType(),
285
+ ]);
286
+ }
287
+ numberVariationDetail(key, defaultValue) {
288
+ return this.typedEval(key, defaultValue, this.eventFactoryWithReasons, (value) => [
289
+ js_sdk_common_1.TypeValidators.Number.is(value),
290
+ js_sdk_common_1.TypeValidators.Number.getType(),
291
+ ]);
292
+ }
293
+ stringVariationDetail(key, defaultValue) {
294
+ return this.typedEval(key, defaultValue, this.eventFactoryWithReasons, (value) => [
295
+ js_sdk_common_1.TypeValidators.String.is(value),
296
+ js_sdk_common_1.TypeValidators.String.getType(),
297
+ ]);
298
+ }
299
+ jsonVariationDetail(key, defaultValue) {
300
+ return this.variationDetail(key, defaultValue);
301
+ }
302
+ }
303
+ exports.default = LDClientImpl;
304
+ //# sourceMappingURL=LDClientImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LDClientImpl.js","sourceRoot":"","sources":["../src/LDClientImpl.ts"],"names":[],"mappings":"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"}