@launchdarkly/js-client-sdk-common 1.2.0 → 1.4.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.
Files changed (91) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/LDClientImpl.d.ts +40 -32
  3. package/dist/LDClientImpl.d.ts.map +1 -1
  4. package/dist/LDClientImpl.js +179 -127
  5. package/dist/LDClientImpl.js.map +1 -1
  6. package/dist/api/ConnectionMode.d.ts +3 -1
  7. package/dist/api/ConnectionMode.d.ts.map +1 -1
  8. package/dist/api/LDClient.d.ts +1 -1
  9. package/dist/api/LDClient.d.ts.map +1 -1
  10. package/dist/api/LDEmitter.d.ts +4 -21
  11. package/dist/api/LDEmitter.d.ts.map +1 -1
  12. package/dist/api/LDEmitter.js +16 -40
  13. package/dist/api/LDEmitter.js.map +1 -1
  14. package/dist/api/LDOptions.d.ts +13 -0
  15. package/dist/api/LDOptions.d.ts.map +1 -1
  16. package/dist/configuration/Configuration.d.ts +2 -1
  17. package/dist/configuration/Configuration.d.ts.map +1 -1
  18. package/dist/configuration/Configuration.js +3 -1
  19. package/dist/configuration/Configuration.js.map +1 -1
  20. package/dist/configuration/validators.d.ts.map +1 -1
  21. package/dist/configuration/validators.js +4 -2
  22. package/dist/configuration/validators.js.map +1 -1
  23. package/dist/context/addAutoEnv.d.ts.map +1 -0
  24. package/dist/{utils → context}/addAutoEnv.js +4 -2
  25. package/dist/context/addAutoEnv.js.map +1 -0
  26. package/dist/{utils → context}/ensureKey.d.ts +1 -2
  27. package/dist/context/ensureKey.d.ts.map +1 -0
  28. package/dist/{utils → context}/ensureKey.js +6 -3
  29. package/dist/context/ensureKey.js.map +1 -0
  30. package/dist/flag-manager/ContextIndex.d.ts +39 -0
  31. package/dist/flag-manager/ContextIndex.d.ts.map +1 -0
  32. package/dist/flag-manager/ContextIndex.js +64 -0
  33. package/dist/flag-manager/ContextIndex.js.map +1 -0
  34. package/dist/flag-manager/FlagManager.d.ts +58 -0
  35. package/dist/flag-manager/FlagManager.d.ts.map +1 -0
  36. package/dist/flag-manager/FlagManager.js +74 -0
  37. package/dist/flag-manager/FlagManager.js.map +1 -0
  38. package/dist/flag-manager/FlagPersistence.d.ts +42 -0
  39. package/dist/flag-manager/FlagPersistence.d.ts.map +1 -0
  40. package/dist/flag-manager/FlagPersistence.js +120 -0
  41. package/dist/flag-manager/FlagPersistence.js.map +1 -0
  42. package/dist/flag-manager/FlagStore.d.ts +29 -0
  43. package/dist/flag-manager/FlagStore.d.ts.map +1 -0
  44. package/dist/flag-manager/FlagStore.js +28 -0
  45. package/dist/flag-manager/FlagStore.js.map +1 -0
  46. package/dist/flag-manager/FlagUpdater.d.ts +39 -0
  47. package/dist/flag-manager/FlagUpdater.d.ts.map +1 -0
  48. package/dist/flag-manager/FlagUpdater.js +69 -0
  49. package/dist/flag-manager/FlagUpdater.js.map +1 -0
  50. package/dist/flag-manager/ItemDescriptor.d.ts +10 -0
  51. package/dist/flag-manager/ItemDescriptor.d.ts.map +1 -0
  52. package/dist/flag-manager/ItemDescriptor.js +3 -0
  53. package/dist/flag-manager/ItemDescriptor.js.map +1 -0
  54. package/dist/flag-manager/calculateChangedKeys.d.ts +6 -0
  55. package/dist/flag-manager/calculateChangedKeys.d.ts.map +1 -0
  56. package/dist/flag-manager/calculateChangedKeys.js +22 -0
  57. package/dist/flag-manager/calculateChangedKeys.js.map +1 -0
  58. package/dist/polling/PollingProcessor.d.ts +3 -0
  59. package/dist/polling/PollingProcessor.d.ts.map +1 -0
  60. package/dist/polling/PollingProcessor.js +79 -0
  61. package/dist/polling/PollingProcessor.js.map +1 -0
  62. package/dist/polling/Requestor.d.ts +6 -0
  63. package/dist/polling/Requestor.d.ts.map +1 -0
  64. package/dist/polling/Requestor.js +50 -0
  65. package/dist/polling/Requestor.js.map +1 -0
  66. package/dist/storage/getOrGenerateKey.d.ts +11 -0
  67. package/dist/storage/getOrGenerateKey.d.ts.map +1 -0
  68. package/dist/storage/getOrGenerateKey.js +21 -0
  69. package/dist/storage/getOrGenerateKey.js.map +1 -0
  70. package/dist/storage/namespaceUtils.d.ts +20 -0
  71. package/dist/storage/namespaceUtils.d.ts.map +1 -0
  72. package/dist/storage/namespaceUtils.js +61 -0
  73. package/dist/storage/namespaceUtils.js.map +1 -0
  74. package/package.json +2 -2
  75. package/dist/utils/addAutoEnv.d.ts.map +0 -1
  76. package/dist/utils/addAutoEnv.js.map +0 -1
  77. package/dist/utils/calculateFlagChanges.d.ts +0 -3
  78. package/dist/utils/calculateFlagChanges.d.ts.map +0 -1
  79. package/dist/utils/calculateFlagChanges.js +0 -23
  80. package/dist/utils/calculateFlagChanges.js.map +0 -1
  81. package/dist/utils/ensureKey.d.ts.map +0 -1
  82. package/dist/utils/ensureKey.js.map +0 -1
  83. package/dist/utils/getOrGenerateKey.d.ts +0 -5
  84. package/dist/utils/getOrGenerateKey.d.ts.map +0 -1
  85. package/dist/utils/getOrGenerateKey.js +0 -29
  86. package/dist/utils/getOrGenerateKey.js.map +0 -1
  87. package/dist/utils/index.d.ts +0 -5
  88. package/dist/utils/index.d.ts.map +0 -1
  89. package/dist/utils/index.js +0 -10
  90. package/dist/utils/index.js.map +0 -1
  91. /package/dist/{utils → context}/addAutoEnv.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"LDEmitter.d.ts","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAM3C;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,OAAO,CAAC,EAAE,CAAkC;IAE5C,OAAO,CAAC,SAAS,CAAqD;IAEtE;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IASpB,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAWtC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA2BxC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAItC,UAAU,IAAI,MAAM,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAGvC"}
1
+ {"version":3,"file":"LDEmitter.d.ts","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,SAAS;IAGhB,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,SAAS,CAAyC;gBAEtC,MAAM,CAAC,sBAAU;IAErC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IAQtC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAqBxC,OAAO,CAAC,cAAc;IAQtB,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAKtC,UAAU,IAAI,MAAM,EAAE;IAItB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAGvC"}
@@ -1,32 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * Native api usage: EventTarget.
5
- *
6
- * This is an event emitter using the standard built-in EventTarget web api.
7
- * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
8
- *
9
- * In react-native use event-target-shim to polyfill EventTarget. This is safe
10
- * because the react-native repo uses it too.
11
- * https://github.com/mysticatea/event-target-shim
12
- */
13
3
  class LDEmitter {
14
- constructor() {
15
- this.et = new EventTarget();
4
+ constructor(logger) {
5
+ this.logger = logger;
16
6
  this.listeners = new Map();
17
7
  }
18
- /**
19
- * Cache all listeners in a Map so we can remove them later
20
- * @param name string event name
21
- * @param originalListener pointer to the original function as specified by
22
- * the consumer
23
- * @param customListener pointer to the custom function based on original
24
- * listener. This is needed to allow for CustomEvents.
25
- * @private
26
- */
27
- saveListener(name, originalListener, customListener) {
8
+ on(name, listener) {
28
9
  var _a;
29
- const listener = { original: originalListener, custom: customListener };
30
10
  if (!this.listeners.has(name)) {
31
11
  this.listeners.set(name, [listener]);
32
12
  }
@@ -34,15 +14,6 @@ class LDEmitter {
34
14
  (_a = this.listeners.get(name)) === null || _a === void 0 ? void 0 : _a.push(listener);
35
15
  }
36
16
  }
37
- on(name, listener) {
38
- const customListener = (e) => {
39
- const { detail } = e;
40
- // invoke listener with args from CustomEvent
41
- listener(...detail);
42
- };
43
- this.saveListener(name, listener, customListener);
44
- this.et.addEventListener(name, customListener);
45
- }
46
17
  /**
47
18
  * Unsubscribe one or all events.
48
19
  *
@@ -55,10 +26,8 @@ class LDEmitter {
55
26
  return;
56
27
  }
57
28
  if (listener) {
58
- const toBeRemoved = existingListeners.find((c) => c.original === listener);
59
- this.et.removeEventListener(name, toBeRemoved === null || toBeRemoved === void 0 ? void 0 : toBeRemoved.custom);
60
29
  // remove from internal cache
61
- const updated = existingListeners.filter((l) => l.original !== listener);
30
+ const updated = existingListeners.filter((fn) => fn !== listener);
62
31
  if (updated.length === 0) {
63
32
  this.listeners.delete(name);
64
33
  }
@@ -67,14 +36,21 @@ class LDEmitter {
67
36
  }
68
37
  return;
69
38
  }
70
- // remove all listeners
71
- existingListeners.forEach((l) => {
72
- this.et.removeEventListener(name, l.custom);
73
- });
39
+ // listener was not specified, so remove them all for that event
74
40
  this.listeners.delete(name);
75
41
  }
42
+ invokeListener(listener, name, ...detail) {
43
+ var _a;
44
+ try {
45
+ listener(...detail);
46
+ }
47
+ catch (err) {
48
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Encountered error invoking handler for "${name}", detail: "${err}"`);
49
+ }
50
+ }
76
51
  emit(name, ...detail) {
77
- this.et.dispatchEvent(new CustomEvent(name, { detail }));
52
+ const listeners = this.listeners.get(name);
53
+ listeners === null || listeners === void 0 ? void 0 : listeners.forEach((listener) => this.invokeListener(listener, name, ...detail));
78
54
  }
79
55
  eventNames() {
80
56
  return [...this.listeners.keys()];
@@ -1 +1 @@
1
- {"version":3,"file":"LDEmitter.js","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LDEmitter.js","sourceRoot":"","sources":["../../src/api/LDEmitter.ts"],"names":[],"mappings":";;AAIA,MAAqB,SAAS;IAG5B,YAAoB,MAAiB;QAAjB,WAAM,GAAN,MAAM,CAAW;QAF7B,cAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;IAElB,CAAC;IAEzC,EAAE,CAAC,IAAe,EAAE,QAAkB;;QACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;SACtC;aAAM;YACL,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAe,EAAE,QAAmB;QACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,EAAE;YACtB,OAAO;SACR;QAED,IAAI,QAAQ,EAAE;YACZ,6BAA6B;YAC7B,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC7B;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aACnC;YACD,OAAO;SACR;QAED,gEAAgE;QAChE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAC,QAAkB,EAAE,IAAe,EAAE,GAAG,MAAa;;QAC1E,IAAI;YACF,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;SACrB;QAAC,OAAO,GAAG,EAAE;YACZ,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,CAAC,2CAA2C,IAAI,eAAe,GAAG,GAAG,CAAC,CAAC;SAC1F;IACH,CAAC;IAED,IAAI,CAAC,IAAe,EAAE,GAAG,MAAa;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,IAAe;;QAC3B,OAAO,MAAA,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,MAAM,mCAAI,CAAC,CAAC;IAC/C,CAAC;CACF;AA5DD,4BA4DC"}
@@ -124,6 +124,13 @@ export interface LDOptions {
124
124
  * @defaultValue A {@link BasicLogger} which outputs to the console at `info` level.
125
125
  */
126
126
  logger?: LDLogger;
127
+ /**
128
+ * The maximum number of locally cached contexts. The cache is used to decrease initialization
129
+ * latency and to provide fallback when the SDK cannot reach LaunchDarkly services.
130
+ *
131
+ * @defaultValue 5
132
+ */
133
+ maxCachedContexts?: number;
127
134
  /**
128
135
  * Specifies a list of attribute names (either built-in or custom) which should be marked as
129
136
  * private, and not sent to LaunchDarkly in analytics events. You can also specify this on a
@@ -164,6 +171,12 @@ export interface LDOptions {
164
171
  * @defaultValue https://clientstream.launchdarkly.com.
165
172
  */
166
173
  streamUri?: string;
174
+ /**
175
+ * The time between polling requests, in seconds. Ignored in streaming mode.
176
+ *
177
+ * The minimum polling interval is 30 seconds.
178
+ */
179
+ pollInterval?: number;
167
180
  /**
168
181
  * Whether LaunchDarkly should provide additional information about how flag values were
169
182
  * calculated.
@@ -1 +1 @@
1
- {"version":3,"file":"LDOptions.d.ts","sourceRoot":"","sources":["../../src/api/LDOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;OAKG;IACH,eAAe,CAAC,EAAE;QAChB;;;;;;;WAOG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;;OAOG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,cAAc,CAAC;IAEvC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAElB;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;OAQG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
1
+ {"version":3,"file":"LDOptions.d.ts","sourceRoot":"","sources":["../../src/api/LDOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,SAAS;IACxB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;OAKG;IACH,eAAe,CAAC,EAAE;QAChB;;;;;;;WAOG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;;OAOG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,cAAc,CAAC;IAEvC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;IAElB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAElC;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;OAQG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -8,6 +8,7 @@ export default class Configuration {
8
8
  readonly baseUri: string;
9
9
  readonly eventsUri: string;
10
10
  readonly streamUri: string;
11
+ readonly maxCachedContexts = 5;
11
12
  readonly capacity = 100;
12
13
  readonly diagnosticRecordingInterval = 900;
13
14
  readonly flushInterval = 30;
@@ -22,7 +23,6 @@ export default class Configuration {
22
23
  readonly inspectors: LDInspection[];
23
24
  readonly privateAttributes: string[];
24
25
  readonly initialConnectionMode: ConnectionMode;
25
- connectionMode: ConnectionMode;
26
26
  readonly tags: ApplicationTags;
27
27
  readonly applicationInfo?: {
28
28
  id?: string;
@@ -37,6 +37,7 @@ export default class Configuration {
37
37
  readonly wrapperName?: string;
38
38
  readonly wrapperVersion?: string;
39
39
  readonly serviceEndpoints: ServiceEndpoints;
40
+ readonly pollInterval: number;
40
41
  [index: string]: any;
41
42
  constructor(pristineOptions?: LDOptions, internalOptions?: internal.LDInternalOptions);
42
43
  validateTypesAndNames(pristineOptions: LDOptions): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"Configuration.d.ts","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,QAAQ,EACR,SAAS,EAGT,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAc,eAAe,SAAwC;IACrE,OAAc,cAAc,SAA2C;IAEvE,SAAgB,MAAM,uGAAsB;IAE5C,SAAgB,OAAO,SAAiC;IACxD,SAAgB,SAAS,SAAmC;IAC5D,SAAgB,SAAS,SAAgC;IAEzD,SAAgB,QAAQ,OAAO;IAC/B,SAAgB,2BAA2B,OAAO;IAClD,SAAgB,aAAa,MAAM;IACnC,SAAgB,2BAA2B,KAAK;IAEhD,SAAgB,oBAAoB,SAAS;IAC7C,SAAgB,KAAK,SAAS;IAC9B,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,UAAU,QAAQ;IAClC,SAAgB,aAAa,QAAQ;IAErC,SAAgB,SAAS,SAAS;IAClC,SAAgB,WAAW,SAAS;IAEpC,SAAgB,UAAU,EAAE,YAAY,EAAE,CAAM;IAChD,SAAgB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAEjD,SAAgB,qBAAqB,EAAE,cAAc,CAAe;IAC7D,cAAc,EAAE,cAAc,CAAC;IAEtC,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,SAAgB,eAAe,CAAC,EAAE;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAgB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtC,SAAgB,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/F,SAAgB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExC,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IAGnD,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;gBAET,eAAe,GAAE,SAAc,EAAE,eAAe,GAAE,QAAQ,CAAC,iBAAsB;IAgB7F,qBAAqB,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,EAAE;CAqC5D"}
1
+ {"version":3,"file":"Configuration.d.ts","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,QAAQ,EACR,SAAS,EAGT,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAc,eAAe,SAAwC;IACrE,OAAc,cAAc,SAA2C;IAEvE,SAAgB,MAAM,uGAAsB;IAE5C,SAAgB,OAAO,SAAiC;IACxD,SAAgB,SAAS,SAAmC;IAC5D,SAAgB,SAAS,SAAgC;IAEzD,SAAgB,iBAAiB,KAAK;IAEtC,SAAgB,QAAQ,OAAO;IAC/B,SAAgB,2BAA2B,OAAO;IAClD,SAAgB,aAAa,MAAM;IACnC,SAAgB,2BAA2B,KAAK;IAEhD,SAAgB,oBAAoB,SAAS;IAC7C,SAAgB,KAAK,SAAS;IAC9B,SAAgB,gBAAgB,SAAS;IACzC,SAAgB,UAAU,QAAQ;IAClC,SAAgB,aAAa,QAAQ;IAErC,SAAgB,SAAS,SAAS;IAClC,SAAgB,WAAW,SAAS;IAEpC,SAAgB,UAAU,EAAE,YAAY,EAAE,CAAM;IAChD,SAAgB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAEjD,SAAgB,qBAAqB,EAAE,cAAc,CAAe;IAEpE,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,SAAgB,eAAe,CAAC,EAAE;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAgB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtC,SAAgB,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/F,SAAgB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExC,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IAEnD,SAAgB,YAAY,EAAE,MAAM,CAA4B;IAGhE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;gBAET,eAAe,GAAE,SAAc,EAAE,eAAe,GAAE,QAAQ,CAAC,iBAAsB;IAe7F,qBAAqB,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,EAAE;CAqC5D"}
@@ -2,12 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
4
  const validators_1 = require("./validators");
5
+ const DEFAULT_POLLING_INTERVAL = 60 * 5;
5
6
  class Configuration {
6
7
  constructor(pristineOptions = {}, internalOptions = {}) {
7
8
  this.logger = (0, js_sdk_common_1.createSafeLogger)();
8
9
  this.baseUri = Configuration.DEFAULT_POLLING;
9
10
  this.eventsUri = js_sdk_common_1.ServiceEndpoints.DEFAULT_EVENTS;
10
11
  this.streamUri = Configuration.DEFAULT_STREAM;
12
+ this.maxCachedContexts = 5;
11
13
  this.capacity = 100;
12
14
  this.diagnosticRecordingInterval = 900;
13
15
  this.flushInterval = 30;
@@ -22,11 +24,11 @@ class Configuration {
22
24
  this.inspectors = [];
23
25
  this.privateAttributes = [];
24
26
  this.initialConnectionMode = 'streaming';
27
+ this.pollInterval = DEFAULT_POLLING_INTERVAL;
25
28
  const errors = this.validateTypesAndNames(pristineOptions);
26
29
  errors.forEach((e) => this.logger.warn(e));
27
30
  this.serviceEndpoints = new js_sdk_common_1.ServiceEndpoints(this.streamUri, this.baseUri, this.eventsUri, internalOptions.analyticsEventPath, internalOptions.diagnosticEventPath, internalOptions.includeAuthorizationHeader);
28
31
  this.tags = new js_sdk_common_1.ApplicationTags({ application: this.applicationInfo, logger: this.logger });
29
- this.connectionMode = this.initialConnectionMode;
30
32
  }
31
33
  validateTypesAndNames(pristineOptions) {
32
34
  const errors = [];
@@ -1 +1 @@
1
- {"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Configuration.js","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/configuration/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,aAAa,EAAkB,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAuBxC,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,aAAa,CAmCtD,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/configuration/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,aAAa,EAAkB,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAuBxC,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,SAAS,EAAE,aAAa,CAsCtD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -12,15 +12,16 @@ class BootStrapValidator {
12
12
  }
13
13
  class ConnectionModeValidator {
14
14
  is(u) {
15
- return u === 'offline' || u === 'streaming';
15
+ return u === 'offline' || u === 'streaming' || u === 'polling';
16
16
  }
17
17
  getType() {
18
- return `'offline' | streaming`;
18
+ return `offline | streaming | polling`;
19
19
  }
20
20
  }
21
21
  const validators = {
22
22
  initialConnectionMode: new ConnectionModeValidator(),
23
23
  logger: js_sdk_common_1.TypeValidators.Object,
24
+ maxCachedContexts: js_sdk_common_1.TypeValidators.numberWithMin(0),
24
25
  baseUri: js_sdk_common_1.TypeValidators.String,
25
26
  streamUri: js_sdk_common_1.TypeValidators.String,
26
27
  eventsUri: js_sdk_common_1.TypeValidators.String,
@@ -33,6 +34,7 @@ const validators = {
33
34
  diagnosticOptOut: js_sdk_common_1.TypeValidators.Boolean,
34
35
  withReasons: js_sdk_common_1.TypeValidators.Boolean,
35
36
  sendEvents: js_sdk_common_1.TypeValidators.Boolean,
37
+ pollInterval: js_sdk_common_1.TypeValidators.numberWithMin(30),
36
38
  // TODO: inspectors
37
39
  // @ts-ignore
38
40
  inspectors: js_sdk_common_1.TypeValidators.createTypeArray('LDInspection[]', {
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/configuration/validators.ts"],"names":[],"mappings":";;AAAA,gDAAgD;AAChD,+DAAkF;AAKlF,MAAM,kBAAkB;IACtB,EAAE,CAAC,CAAU;QACX,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC;IACzE,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,MAAM,uBAAuB;IAC3B,EAAE,CAAC,CAAU;QACX,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,WAAW,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,uBAAuB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,UAAU,GAA2C;IACzD,qBAAqB,EAAE,IAAI,uBAAuB,EAAE;IACpD,MAAM,EAAE,8BAAc,CAAC,MAAM;IAE7B,OAAO,EAAE,8BAAc,CAAC,MAAM;IAC9B,SAAS,EAAE,8BAAc,CAAC,MAAM;IAChC,SAAS,EAAE,8BAAc,CAAC,MAAM;IAEhC,QAAQ,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACzC,2BAA2B,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5D,aAAa,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9C,2BAA2B,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAE5D,oBAAoB,EAAE,8BAAc,CAAC,OAAO;IAC5C,KAAK,EAAE,8BAAc,CAAC,OAAO;IAC7B,gBAAgB,EAAE,8BAAc,CAAC,OAAO;IACxC,WAAW,EAAE,8BAAc,CAAC,OAAO;IACnC,UAAU,EAAE,8BAAc,CAAC,OAAO;IAElC,mBAAmB;IACnB,aAAa;IACb,UAAU,EAAE,8BAAc,CAAC,eAAe,CAAe,gBAAgB,EAAE;QACzE,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,oBAAI;QACZ,IAAI,EAAE,EAAE;KACT,CAAC;IACF,iBAAiB,EAAE,8BAAc,CAAC,WAAW;IAE7C,eAAe,EAAE,8BAAc,CAAC,MAAM;IACtC,kBAAkB;IAClB,SAAS,EAAE,IAAI,kBAAkB,EAAE;IACnC,WAAW,EAAE,8BAAc,CAAC,MAAM;IAClC,cAAc,EAAE,8BAAc,CAAC,MAAM;IACrC,aAAa;IACb,IAAI,EAAE,8BAAc,CAAC,MAAM;CAC5B,CAAC;AAEF,kBAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/configuration/validators.ts"],"names":[],"mappings":";;AAAA,gDAAgD;AAChD,+DAAkF;AAKlF,MAAM,kBAAkB;IACtB,EAAE,CAAC,CAAU;QACX,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC;IACzE,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED,MAAM,uBAAuB;IAC3B,EAAE,CAAC,CAAU;QACX,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,SAAS,CAAC;IACjE,CAAC;IAED,OAAO;QACL,OAAO,+BAA+B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,UAAU,GAA2C;IACzD,qBAAqB,EAAE,IAAI,uBAAuB,EAAE;IACpD,MAAM,EAAE,8BAAc,CAAC,MAAM;IAC7B,iBAAiB,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAElD,OAAO,EAAE,8BAAc,CAAC,MAAM;IAC9B,SAAS,EAAE,8BAAc,CAAC,MAAM;IAChC,SAAS,EAAE,8BAAc,CAAC,MAAM;IAEhC,QAAQ,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACzC,2BAA2B,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5D,aAAa,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9C,2BAA2B,EAAE,8BAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAE5D,oBAAoB,EAAE,8BAAc,CAAC,OAAO;IAC5C,KAAK,EAAE,8BAAc,CAAC,OAAO;IAC7B,gBAAgB,EAAE,8BAAc,CAAC,OAAO;IACxC,WAAW,EAAE,8BAAc,CAAC,OAAO;IACnC,UAAU,EAAE,8BAAc,CAAC,OAAO;IAElC,YAAY,EAAE,8BAAc,CAAC,aAAa,CAAC,EAAE,CAAC;IAE9C,mBAAmB;IACnB,aAAa;IACb,UAAU,EAAE,8BAAc,CAAC,eAAe,CAAe,gBAAgB,EAAE;QACzE,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,oBAAI;QACZ,IAAI,EAAE,EAAE;KACT,CAAC;IACF,iBAAiB,EAAE,8BAAc,CAAC,WAAW;IAE7C,eAAe,EAAE,8BAAc,CAAC,MAAM;IACtC,kBAAkB;IAClB,SAAS,EAAE,IAAI,kBAAkB,EAAE;IACnC,WAAW,EAAE,8BAAc,CAAC,MAAM;IAClC,cAAc,EAAE,8BAAc,CAAC,MAAM;IACrC,aAAa;IACb,IAAI,EAAE,8BAAc,CAAC,MAAM;CAC5B,CAAC;AAEF,kBAAe,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAutoEnv.d.ts","sourceRoot":"","sources":["../../src/context/addAutoEnv.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,EACb,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACT,MAAM,6BAA6B,CAAC;AAErC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAO7C,eAAO,MAAM,OAAO,MAAO,mBAAmB;;;;;;;;;CAO7C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,qBACX,QAAQ,uBACL,aAAa,KACjC,aAAa,GAAG,SA4BlB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,aAAoB,QAAQ,kCA2BrD,CAAC;AAEF,eAAO,MAAM,UAAU,YAAmB,SAAS,YAAY,QAAQ,UAAU,aAAa,+DA2C7F,CAAC"}
@@ -14,7 +14,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.addAutoEnv = exports.addDeviceInfo = exports.addApplicationInfo = exports.toMulti = void 0;
15
15
  /* eslint-disable @typescript-eslint/naming-convention */
16
16
  const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
17
- const getOrGenerateKey_1 = require("./getOrGenerateKey");
17
+ const getOrGenerateKey_1 = require("../storage/getOrGenerateKey");
18
+ const namespaceUtils_1 = require("../storage/namespaceUtils");
18
19
  const { isLegacyUser, isSingleKind, isMultiKind } = js_sdk_common_1.internal;
19
20
  const defaultAutoEnvSchemaVersion = '1.0';
20
21
  const toMulti = (c) => {
@@ -72,7 +73,8 @@ const addDeviceInfo = async (platform) => {
72
73
  }
73
74
  // Check if device has any meaningful data before we return it.
74
75
  if (Object.keys(device).filter((k) => k !== 'key' && k !== 'envAttributesVersion').length) {
75
- device.key = await (0, getOrGenerateKey_1.getOrGenerateKey)('context', 'ld_device', platform);
76
+ const ldDeviceNamespace = (0, namespaceUtils_1.namespaceForGeneratedContextKey)('ld_device');
77
+ device.key = await (0, getOrGenerateKey_1.getOrGenerateKey)(ldDeviceNamespace, platform);
76
78
  device.envAttributesVersion = device.envAttributesVersion || defaultAutoEnvSchemaVersion;
77
79
  return device;
78
80
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAutoEnv.js","sourceRoot":"","sources":["../../src/context/addAutoEnv.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,5 @@ import { LDContext, Platform } from '@launchdarkly/js-sdk-common';
6
6
  * @param context
7
7
  * @param platform
8
8
  */
9
- declare const ensureKey: (context: LDContext, platform: Platform) => Promise<any>;
10
- export default ensureKey;
9
+ export declare const ensureKey: (context: LDContext, platform: Platform) => Promise<any>;
11
10
  //# sourceMappingURL=ensureKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureKey.d.ts","sourceRoot":"","sources":["../../src/context/ensureKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAKT,QAAQ,EACT,MAAM,6BAA6B,CAAC;AAiDrC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,YAAmB,SAAS,YAAY,QAAQ,iBAgBrE,CAAC"}
@@ -11,8 +11,10 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  return t;
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ensureKey = void 0;
14
15
  const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
15
- const getOrGenerateKey_1 = require("./getOrGenerateKey");
16
+ const getOrGenerateKey_1 = require("../storage/getOrGenerateKey");
17
+ const namespaceUtils_1 = require("../storage/namespaceUtils");
16
18
  const { isLegacyUser, isMultiKind, isSingleKind } = js_sdk_common_1.internal;
17
19
  /**
18
20
  * This is the root ensureKey function. All other ensureKey functions reduce to this.
@@ -30,9 +32,10 @@ const { isLegacyUser, isMultiKind, isSingleKind } = js_sdk_common_1.internal;
30
32
  const ensureKeyCommon = async (kind, c, platform) => {
31
33
  const { anonymous, key } = c;
32
34
  if (anonymous && !key) {
35
+ const storageKey = (0, namespaceUtils_1.namespaceForAnonymousGeneratedContextKey)(kind);
33
36
  // This mutates a cloned copy of the original context from ensureyKey so this is safe.
34
37
  // eslint-disable-next-line no-param-reassign
35
- c.key = await (0, getOrGenerateKey_1.getOrGenerateKey)('anonymous', kind, platform);
38
+ c.key = await (0, getOrGenerateKey_1.getOrGenerateKey)(storageKey, platform);
36
39
  }
37
40
  };
38
41
  const ensureKeySingle = async (c, platform) => {
@@ -65,5 +68,5 @@ const ensureKey = async (context, platform) => {
65
68
  }
66
69
  return cloned;
67
70
  };
68
- exports.default = ensureKey;
71
+ exports.ensureKey = ensureKey;
69
72
  //# sourceMappingURL=ensureKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensureKey.js","sourceRoot":"","sources":["../../src/context/ensureKey.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,+DASqC;AAErC,kEAA+D;AAC/D,8DAAqF;AAErF,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,wBAAQ,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,MAAM,eAAe,GAAG,KAAK,EAAE,IAAY,EAAE,CAAkB,EAAE,QAAkB,EAAE,EAAE;IACrF,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE7B,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE;QACrB,MAAM,UAAU,GAAG,IAAA,yDAAwC,EAAC,IAAI,CAAC,CAAC;QAClE,sFAAsF;QACtF,6CAA6C;QAC7C,CAAC,CAAC,GAAG,GAAG,MAAM,IAAA,mCAAgB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;KACtD;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,CAAsB,EAAE,QAAkB,EAAE,EAAE;IAC3E,MAAM,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,YAAgC,EAAE,QAAkB,EAAE,EAAE;IACpF,MAAM,EAAE,IAAI,KAAwB,YAAY,EAA/B,cAAc,UAAK,YAAY,EAA1C,QAA2B,CAAe,CAAC;IAEjD,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5C,eAAe,CAAC,CAAC,EAAE,CAAoB,EAAE,QAAQ,CAAC,CACnD,CACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,CAAS,EAAE,QAAkB,EAAE,EAAE;IAC9D,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,KAAK,EAAE,OAAkB,EAAE,QAAkB,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,IAAA,qBAAK,EAAY,OAAO,CAAC,CAAC;IAEzC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;QACxB,MAAM,eAAe,CAAC,MAA6B,EAAE,QAAQ,CAAC,CAAC;KAChE;IAED,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;QACvB,MAAM,cAAc,CAAC,MAA4B,EAAE,QAAQ,CAAC,CAAC;KAC9D;IAED,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;QACxB,MAAM,eAAe,CAAC,MAAgB,EAAE,QAAQ,CAAC,CAAC;KACnD;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAhBW,QAAA,SAAS,aAgBpB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * An index for tracking the most recently used contexts by timestamp with the ability to
3
+ * update entry timestamps and prune out least used contexts above a max capacity provided.
4
+ */
5
+ export default class ContextIndex {
6
+ container: IndexContainer;
7
+ /**
8
+ * Creates a {@link ContextIndex} from its JSON representation (likely retrieved from persistence).
9
+ * @param json representation of the {@link ContextIndex}
10
+ * @returns the {@link ContextIndex}
11
+ */
12
+ static fromJson(json: string): ContextIndex;
13
+ /**
14
+ * @returns the JSON representation of the {@link ContextIndex} (like for saving to persistence)
15
+ */
16
+ toJson(): string;
17
+ /**
18
+ * Notice that a context has been used and when it was used. This will update an existing record
19
+ * with the given timestamp, or create a new record if one doesn't exist.
20
+ * @param id of the corresponding context
21
+ * @param timestamp in millis since epoch
22
+ */
23
+ notice(id: string, timestamp: number): void;
24
+ /**
25
+ * Prune the index to the specified max size and then return the IDs
26
+ * @param maxContexts the maximum number of contexts to retain after this prune
27
+ * @returns an array of removed entries
28
+ */
29
+ prune(maxContexts: number): Array<IndexEntry>;
30
+ }
31
+ export interface IndexContainer {
32
+ index: Array<IndexEntry>;
33
+ }
34
+ interface IndexEntry {
35
+ id: string;
36
+ timestamp: number;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=ContextIndex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextIndex.d.ts","sourceRoot":"","sources":["../../src/flag-manager/ContextIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,SAAS,EAAE,cAAc,CAAsC;IAE/D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAW3C;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IASpC;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;CAU9C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;CAC1B;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * An index for tracking the most recently used contexts by timestamp with the ability to
5
+ * update entry timestamps and prune out least used contexts above a max capacity provided.
6
+ */
7
+ class ContextIndex {
8
+ constructor() {
9
+ this.container = { index: new Array() };
10
+ }
11
+ /**
12
+ * Creates a {@link ContextIndex} from its JSON representation (likely retrieved from persistence).
13
+ * @param json representation of the {@link ContextIndex}
14
+ * @returns the {@link ContextIndex}
15
+ */
16
+ static fromJson(json) {
17
+ const contextIndex = new ContextIndex();
18
+ try {
19
+ contextIndex.container = JSON.parse(json);
20
+ }
21
+ catch (e) {
22
+ /* ignoring error and returning empty index */
23
+ }
24
+ return contextIndex;
25
+ }
26
+ /**
27
+ * @returns the JSON representation of the {@link ContextIndex} (like for saving to persistence)
28
+ */
29
+ toJson() {
30
+ return JSON.stringify(this.container);
31
+ }
32
+ /**
33
+ * Notice that a context has been used and when it was used. This will update an existing record
34
+ * with the given timestamp, or create a new record if one doesn't exist.
35
+ * @param id of the corresponding context
36
+ * @param timestamp in millis since epoch
37
+ */
38
+ notice(id, timestamp) {
39
+ const entry = this.container.index.find((it) => it.id === id);
40
+ if (entry === undefined) {
41
+ this.container.index.push({ id, timestamp });
42
+ }
43
+ else {
44
+ entry.timestamp = timestamp;
45
+ }
46
+ }
47
+ /**
48
+ * Prune the index to the specified max size and then return the IDs
49
+ * @param maxContexts the maximum number of contexts to retain after this prune
50
+ * @returns an array of removed entries
51
+ */
52
+ prune(maxContexts) {
53
+ const clampedMax = Math.max(maxContexts, 0); // clamp to [0, infinity)
54
+ if (this.container.index.length > clampedMax) {
55
+ // sort by timestamp so that older timestamps appear first in the array
56
+ this.container.index.sort((a, b) => a.timestamp - b.timestamp);
57
+ // delete the first N many elements above capacity. splice returns removed elements
58
+ return this.container.index.splice(0, this.container.index.length - clampedMax);
59
+ }
60
+ return [];
61
+ }
62
+ }
63
+ exports.default = ContextIndex;
64
+ //# sourceMappingURL=ContextIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextIndex.js","sourceRoot":"","sources":["../../src/flag-manager/ContextIndex.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,MAAqB,YAAY;IAAjC;QACE,cAAS,GAAmB,EAAE,KAAK,EAAE,IAAI,KAAK,EAAc,EAAE,CAAC;IAuDjE,CAAC;IArDC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI;YACF,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACV,8CAA8C;SAC/C;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,EAAU,EAAE,SAAiB;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;SAC9C;aAAM;YACL,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;SAC7B;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAmB;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB;QACtE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE;YAC5C,uEAAuE;YACvE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/D,oFAAoF;YACpF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;SACjF;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAxDD,+BAwDC"}
@@ -0,0 +1,58 @@
1
+ import { Context, LDLogger, Platform } from '@launchdarkly/js-sdk-common';
2
+ import { FlagsChangeCallback } from './FlagUpdater';
3
+ import { ItemDescriptor } from './ItemDescriptor';
4
+ /**
5
+ * Top level manager of flags for the client. LDClient should be using this
6
+ * class and not any of the specific instances managed by it. Updates from
7
+ * data sources should be directed to the [init] and [upsert] methods of this
8
+ * class.
9
+ */
10
+ export default class FlagManager {
11
+ private readonly timeStamper;
12
+ private flagStore;
13
+ private flagUpdater;
14
+ private flagPersistence;
15
+ /**
16
+ * @param platform implementation of various platform provided functionality
17
+ * @param sdkKey that will be used to distinguish different environments
18
+ * @param maxCachedContexts that specifies the max number of contexts that will be cached in persistence
19
+ * @param logger used for logging various messages
20
+ * @param timeStamper exists for testing purposes
21
+ */
22
+ constructor(platform: Platform, sdkKey: string, maxCachedContexts: number, logger: LDLogger, timeStamper?: () => number);
23
+ /**
24
+ * Attempts to get a flag by key from the current flags.
25
+ */
26
+ get(key: string): ItemDescriptor | undefined;
27
+ /**
28
+ * Gets all the current flags.
29
+ */
30
+ getAll(): {
31
+ [key: string]: ItemDescriptor;
32
+ };
33
+ /**
34
+ * Initializes the flag manager with data from a data source.
35
+ * Persistence initialization is handled by {@link FlagPersistence}
36
+ */
37
+ init(context: Context, newFlags: {
38
+ [key: string]: ItemDescriptor;
39
+ }): Promise<void>;
40
+ /**
41
+ * Attempt to update a flag. If the flag is for the wrong context, or
42
+ * it is of an older version, then an update will not be performed.
43
+ */
44
+ upsert(context: Context, key: string, item: ItemDescriptor): Promise<boolean>;
45
+ /**
46
+ * Asynchronously load cached values from persistence.
47
+ */
48
+ loadCached(context: Context): Promise<boolean>;
49
+ /**
50
+ * Register a flag change callback.
51
+ */
52
+ on(callback: FlagsChangeCallback): void;
53
+ /**
54
+ * Unregister a flag change callback.
55
+ */
56
+ off(callback: FlagsChangeCallback): void;
57
+ }
58
+ //# sourceMappingURL=FlagManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlagManager.d.ts","sourceRoot":"","sources":["../../src/flag-manager/FlagManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAK1E,OAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAiB5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAhB9B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkB;IAEzC;;;;;;OAMG;gBAED,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,QAAQ,EACC,WAAW,GAAE,MAAM,MAAyB;IAgB/D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5C;;OAEG;IACH,MAAM,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE;IAI3C;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAIvC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;CAGzC"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const namespaceUtils_1 = require("../storage/namespaceUtils");
4
+ const FlagPersistence_1 = require("./FlagPersistence");
5
+ const FlagStore_1 = require("./FlagStore");
6
+ const FlagUpdater_1 = require("./FlagUpdater");
7
+ /**
8
+ * Top level manager of flags for the client. LDClient should be using this
9
+ * class and not any of the specific instances managed by it. Updates from
10
+ * data sources should be directed to the [init] and [upsert] methods of this
11
+ * class.
12
+ */
13
+ class FlagManager {
14
+ /**
15
+ * @param platform implementation of various platform provided functionality
16
+ * @param sdkKey that will be used to distinguish different environments
17
+ * @param maxCachedContexts that specifies the max number of contexts that will be cached in persistence
18
+ * @param logger used for logging various messages
19
+ * @param timeStamper exists for testing purposes
20
+ */
21
+ constructor(platform, sdkKey, maxCachedContexts, logger, timeStamper = () => Date.now()) {
22
+ this.timeStamper = timeStamper;
23
+ this.flagStore = new FlagStore_1.DefaultFlagStore();
24
+ const environmentNamespace = (0, namespaceUtils_1.namespaceForEnvironment)(platform.crypto, sdkKey);
25
+ this.flagUpdater = new FlagUpdater_1.default(this.flagStore, logger);
26
+ this.flagPersistence = new FlagPersistence_1.default(platform, environmentNamespace, maxCachedContexts, this.flagStore, this.flagUpdater, logger, timeStamper);
27
+ }
28
+ /**
29
+ * Attempts to get a flag by key from the current flags.
30
+ */
31
+ get(key) {
32
+ return this.flagStore.get(key);
33
+ }
34
+ /**
35
+ * Gets all the current flags.
36
+ */
37
+ getAll() {
38
+ return this.flagStore.getAll();
39
+ }
40
+ /**
41
+ * Initializes the flag manager with data from a data source.
42
+ * Persistence initialization is handled by {@link FlagPersistence}
43
+ */
44
+ async init(context, newFlags) {
45
+ return this.flagPersistence.init(context, newFlags);
46
+ }
47
+ /**
48
+ * Attempt to update a flag. If the flag is for the wrong context, or
49
+ * it is of an older version, then an update will not be performed.
50
+ */
51
+ async upsert(context, key, item) {
52
+ return this.flagPersistence.upsert(context, key, item);
53
+ }
54
+ /**
55
+ * Asynchronously load cached values from persistence.
56
+ */
57
+ async loadCached(context) {
58
+ return this.flagPersistence.loadCached(context);
59
+ }
60
+ /**
61
+ * Register a flag change callback.
62
+ */
63
+ on(callback) {
64
+ this.flagUpdater.on(callback);
65
+ }
66
+ /**
67
+ * Unregister a flag change callback.
68
+ */
69
+ off(callback) {
70
+ this.flagUpdater.off(callback);
71
+ }
72
+ }
73
+ exports.default = FlagManager;
74
+ //# sourceMappingURL=FlagManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlagManager.js","sourceRoot":"","sources":["../../src/flag-manager/FlagManager.ts"],"names":[],"mappings":";;AAEA,8DAAoE;AACpE,uDAAgD;AAChD,2CAA+C;AAC/C,+CAAiE;AAGjE;;;;;GAKG;AACH,MAAqB,WAAW;IAK9B;;;;;;OAMG;IACH,YACE,QAAkB,EAClB,MAAc,EACd,iBAAyB,EACzB,MAAgB,EACC,cAA4B,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAA5C,gBAAW,GAAX,WAAW,CAAiC;QAhBvD,cAAS,GAAG,IAAI,4BAAgB,EAAE,CAAC;QAkBzC,MAAM,oBAAoB,GAAG,IAAA,wCAAuB,EAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE9E,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,yBAAe,CACxC,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,EAChB,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,OAAgB,EAAE,QAA2C;QACtE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,GAAW,EAAE,IAAoB;QAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAAgB;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,EAAE,CAAC,QAA6B;QAC9B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAA6B;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACF;AAnFD,8BAmFC"}