@launchdarkly/js-client-sdk-common 1.8.0 → 1.9.1-beta.1

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 (146) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/DataManager.d.ts +18 -2
  3. package/dist/DataManager.d.ts.map +1 -1
  4. package/dist/HookRunner.d.ts +12 -0
  5. package/dist/HookRunner.d.ts.map +1 -0
  6. package/dist/LDClientImpl.d.ts +24 -21
  7. package/dist/LDClientImpl.d.ts.map +1 -1
  8. package/dist/LDEmitter.d.ts +17 -5
  9. package/dist/LDEmitter.d.ts.map +1 -1
  10. package/dist/api/LDClient.d.ts +13 -0
  11. package/dist/api/LDClient.d.ts.map +1 -1
  12. package/dist/api/LDInspection.d.ts +105 -0
  13. package/dist/api/LDInspection.d.ts.map +1 -0
  14. package/dist/api/LDOptions.d.ts +31 -2
  15. package/dist/api/LDOptions.d.ts.map +1 -1
  16. package/dist/api/index.d.ts +1 -0
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/api/integrations/Hooks.d.ts +133 -0
  19. package/dist/api/integrations/Hooks.d.ts.map +1 -0
  20. package/dist/api/integrations/index.d.ts +2 -0
  21. package/dist/api/integrations/index.d.ts.map +1 -0
  22. package/dist/configuration/Configuration.d.ts +10 -8
  23. package/dist/configuration/Configuration.d.ts.map +1 -1
  24. package/dist/configuration/validators.d.ts.map +1 -1
  25. package/dist/context/addAutoEnv.d.ts +2 -2
  26. package/dist/context/addAutoEnv.d.ts.map +1 -1
  27. package/dist/context/ensureKey.d.ts +1 -1
  28. package/dist/context/ensureKey.d.ts.map +1 -1
  29. package/dist/{streaming → datasource}/DataSourceConfig.d.ts +5 -0
  30. package/dist/datasource/DataSourceConfig.d.ts.map +1 -0
  31. package/dist/datasource/DataSourceEventHandler.d.ts +16 -0
  32. package/dist/datasource/DataSourceEventHandler.d.ts.map +1 -0
  33. package/dist/datasource/DataSourceStatus.d.ts +39 -0
  34. package/dist/datasource/DataSourceStatus.d.ts.map +1 -0
  35. package/dist/datasource/DataSourceStatusErrorInfo.d.ts +8 -0
  36. package/dist/datasource/DataSourceStatusErrorInfo.d.ts.map +1 -0
  37. package/dist/datasource/DataSourceStatusManager.d.ts +40 -0
  38. package/dist/datasource/DataSourceStatusManager.d.ts.map +1 -0
  39. package/dist/datasource/Requestor.d.ts +26 -0
  40. package/dist/datasource/Requestor.d.ts.map +1 -0
  41. package/dist/evaluation/evaluationDetail.d.ts.map +1 -1
  42. package/dist/flag-manager/FlagManager.d.ts +14 -5
  43. package/dist/flag-manager/FlagManager.d.ts.map +1 -1
  44. package/dist/flag-manager/FlagPersistence.d.ts +13 -13
  45. package/dist/flag-manager/FlagPersistence.d.ts.map +1 -1
  46. package/dist/flag-manager/FlagStore.d.ts +1 -1
  47. package/dist/flag-manager/FlagStore.d.ts.map +1 -1
  48. package/dist/flag-manager/FlagUpdater.d.ts +6 -5
  49. package/dist/flag-manager/FlagUpdater.d.ts.map +1 -1
  50. package/dist/index.cjs +1893 -0
  51. package/dist/index.cjs.map +1 -0
  52. package/dist/index.d.ts +10 -6
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.mjs +1865 -0
  55. package/dist/index.mjs.map +1 -0
  56. package/dist/inspection/InspectorManager.d.ts +41 -0
  57. package/dist/inspection/InspectorManager.d.ts.map +1 -0
  58. package/dist/inspection/createSafeInspector.d.ts +8 -0
  59. package/dist/inspection/createSafeInspector.d.ts.map +1 -0
  60. package/dist/inspection/getInspectorHook.d.ts +4 -0
  61. package/dist/inspection/getInspectorHook.d.ts.map +1 -0
  62. package/dist/inspection/messages.d.ts +3 -0
  63. package/dist/inspection/messages.d.ts.map +1 -0
  64. package/dist/polling/PollingProcessor.d.ts.map +1 -1
  65. package/dist/streaming/StreamingProcessor.d.ts +18 -16
  66. package/dist/streaming/StreamingProcessor.d.ts.map +1 -1
  67. package/dist/streaming/index.d.ts +1 -1
  68. package/dist/streaming/index.d.ts.map +1 -1
  69. package/dist/types/index.d.ts +4 -3
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/package.json +18 -7
  72. package/dist/DataManager.js +0 -98
  73. package/dist/DataManager.js.map +0 -1
  74. package/dist/LDClientImpl.js +0 -334
  75. package/dist/LDClientImpl.js.map +0 -1
  76. package/dist/LDEmitter.js +0 -64
  77. package/dist/LDEmitter.js.map +0 -1
  78. package/dist/api/ConnectionMode.js +0 -3
  79. package/dist/api/ConnectionMode.js.map +0 -1
  80. package/dist/api/LDClient.js +0 -3
  81. package/dist/api/LDClient.js.map +0 -1
  82. package/dist/api/LDEvaluationDetail.js +0 -3
  83. package/dist/api/LDEvaluationDetail.js.map +0 -1
  84. package/dist/api/LDIdentifyOptions.js +0 -3
  85. package/dist/api/LDIdentifyOptions.js.map +0 -1
  86. package/dist/api/LDOptions.js +0 -3
  87. package/dist/api/LDOptions.js.map +0 -1
  88. package/dist/api/index.js +0 -21
  89. package/dist/api/index.js.map +0 -1
  90. package/dist/configuration/Configuration.js +0 -79
  91. package/dist/configuration/Configuration.js.map +0 -1
  92. package/dist/configuration/index.js +0 -8
  93. package/dist/configuration/index.js.map +0 -1
  94. package/dist/configuration/validators.js +0 -29
  95. package/dist/configuration/validators.js.map +0 -1
  96. package/dist/context/addAutoEnv.js +0 -113
  97. package/dist/context/addAutoEnv.js.map +0 -1
  98. package/dist/context/ensureKey.js +0 -72
  99. package/dist/context/ensureKey.js.map +0 -1
  100. package/dist/crypto/digest.js +0 -14
  101. package/dist/crypto/digest.js.map +0 -1
  102. package/dist/diagnostics/createDiagnosticsInitConfig.js +0 -19
  103. package/dist/diagnostics/createDiagnosticsInitConfig.js.map +0 -1
  104. package/dist/diagnostics/createDiagnosticsManager.js +0 -12
  105. package/dist/diagnostics/createDiagnosticsManager.js.map +0 -1
  106. package/dist/evaluation/evaluationDetail.js +0 -20
  107. package/dist/evaluation/evaluationDetail.js.map +0 -1
  108. package/dist/events/EventFactory.js +0 -25
  109. package/dist/events/EventFactory.js.map +0 -1
  110. package/dist/events/createEventProcessor.js +0 -11
  111. package/dist/events/createEventProcessor.js.map +0 -1
  112. package/dist/flag-manager/ContextIndex.js +0 -64
  113. package/dist/flag-manager/ContextIndex.js.map +0 -1
  114. package/dist/flag-manager/FlagManager.js +0 -48
  115. package/dist/flag-manager/FlagManager.js.map +0 -1
  116. package/dist/flag-manager/FlagPersistence.js +0 -120
  117. package/dist/flag-manager/FlagPersistence.js.map +0 -1
  118. package/dist/flag-manager/FlagStore.js +0 -31
  119. package/dist/flag-manager/FlagStore.js.map +0 -1
  120. package/dist/flag-manager/FlagUpdater.js +0 -69
  121. package/dist/flag-manager/FlagUpdater.js.map +0 -1
  122. package/dist/flag-manager/ItemDescriptor.js +0 -3
  123. package/dist/flag-manager/ItemDescriptor.js.map +0 -1
  124. package/dist/flag-manager/calculateChangedKeys.js +0 -22
  125. package/dist/flag-manager/calculateChangedKeys.js.map +0 -1
  126. package/dist/index.js +0 -26
  127. package/dist/index.js.map +0 -1
  128. package/dist/polling/PollingProcessor.js +0 -96
  129. package/dist/polling/PollingProcessor.js.map +0 -1
  130. package/dist/polling/Requestor.d.ts +0 -21
  131. package/dist/polling/Requestor.d.ts.map +0 -1
  132. package/dist/polling/Requestor.js +0 -48
  133. package/dist/polling/Requestor.js.map +0 -1
  134. package/dist/storage/getOrGenerateKey.js +0 -21
  135. package/dist/storage/getOrGenerateKey.js.map +0 -1
  136. package/dist/storage/namespaceUtils.js +0 -62
  137. package/dist/storage/namespaceUtils.js.map +0 -1
  138. package/dist/streaming/DataSourceConfig.d.ts.map +0 -1
  139. package/dist/streaming/DataSourceConfig.js +0 -3
  140. package/dist/streaming/DataSourceConfig.js.map +0 -1
  141. package/dist/streaming/StreamingProcessor.js +0 -126
  142. package/dist/streaming/StreamingProcessor.js.map +0 -1
  143. package/dist/streaming/index.js +0 -6
  144. package/dist/streaming/index.js.map +0 -1
  145. package/dist/types/index.js +0 -3
  146. package/dist/types/index.js.map +0 -1
@@ -1,113 +0,0 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.addAutoEnv = exports.addDeviceInfo = exports.addApplicationInfo = exports.toMulti = void 0;
15
- /* eslint-disable @typescript-eslint/naming-convention */
16
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
17
- const digest_1 = require("../crypto/digest");
18
- const getOrGenerateKey_1 = require("../storage/getOrGenerateKey");
19
- const namespaceUtils_1 = require("../storage/namespaceUtils");
20
- const { isLegacyUser, isSingleKind, isMultiKind } = js_sdk_common_1.internal;
21
- const defaultAutoEnvSchemaVersion = '1.0';
22
- const toMulti = (c) => {
23
- const { kind } = c, contextCommon = __rest(c, ["kind"]);
24
- return {
25
- kind: 'multi',
26
- [kind]: contextCommon,
27
- };
28
- };
29
- exports.toMulti = toMulti;
30
- /**
31
- * Clones the LDApplication object and populates the key, envAttributesVersion, id and version fields.
32
- *
33
- * @param crypto
34
- * @param info
35
- * @param applicationInfo
36
- * @param config
37
- * @return An LDApplication object with populated key, envAttributesVersion, id and version.
38
- */
39
- const addApplicationInfo = async ({ crypto, info }, { applicationInfo }) => {
40
- var _a;
41
- const { ld_application } = info.platformData();
42
- let app = (_a = (0, js_sdk_common_1.deepCompact)(ld_application)) !== null && _a !== void 0 ? _a : {};
43
- const id = (applicationInfo === null || applicationInfo === void 0 ? void 0 : applicationInfo.id) || (app === null || app === void 0 ? void 0 : app.id);
44
- if (id) {
45
- const version = (applicationInfo === null || applicationInfo === void 0 ? void 0 : applicationInfo.version) || (app === null || app === void 0 ? void 0 : app.version);
46
- const name = (applicationInfo === null || applicationInfo === void 0 ? void 0 : applicationInfo.name) || (app === null || app === void 0 ? void 0 : app.name);
47
- const versionName = (applicationInfo === null || applicationInfo === void 0 ? void 0 : applicationInfo.versionName) || (app === null || app === void 0 ? void 0 : app.versionName);
48
- app = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, app), { id }), (version ? { version } : {})), (name ? { name } : {})), (versionName ? { versionName } : {}));
49
- app.key = await (0, digest_1.default)(crypto.createHash('sha256').update(id), 'base64');
50
- app.envAttributesVersion = app.envAttributesVersion || defaultAutoEnvSchemaVersion;
51
- return app;
52
- }
53
- return undefined;
54
- };
55
- exports.addApplicationInfo = addApplicationInfo;
56
- /**
57
- * Clones the LDDevice object and populates the key and envAttributesVersion field.
58
- *
59
- * @param platform
60
- * @return An LDDevice object with populated key and envAttributesVersion.
61
- */
62
- const addDeviceInfo = async (platform) => {
63
- var _a, _b, _c, _d;
64
- const { ld_device, os } = platform.info.platformData();
65
- const device = (_a = (0, js_sdk_common_1.deepCompact)(ld_device)) !== null && _a !== void 0 ? _a : {};
66
- const name = (os === null || os === void 0 ? void 0 : os.name) || ((_b = device.os) === null || _b === void 0 ? void 0 : _b.name);
67
- const version = (os === null || os === void 0 ? void 0 : os.version) || ((_c = device.os) === null || _c === void 0 ? void 0 : _c.version);
68
- const family = (_d = device.os) === null || _d === void 0 ? void 0 : _d.family;
69
- // only add device.os if there's data
70
- if (name || version || family) {
71
- device.os = Object.assign(Object.assign(Object.assign({}, (name ? { name } : {})), (version ? { version } : {})), (family ? { family } : {}));
72
- }
73
- // Check if device has any meaningful data before we return it.
74
- if (Object.keys(device).filter((k) => k !== 'key' && k !== 'envAttributesVersion').length) {
75
- const ldDeviceNamespace = await (0, namespaceUtils_1.namespaceForGeneratedContextKey)('ld_device');
76
- device.key = await (0, getOrGenerateKey_1.getOrGenerateKey)(ldDeviceNamespace, platform);
77
- device.envAttributesVersion = device.envAttributesVersion || defaultAutoEnvSchemaVersion;
78
- return device;
79
- }
80
- return undefined;
81
- };
82
- exports.addDeviceInfo = addDeviceInfo;
83
- const addAutoEnv = async (context, platform, config) => {
84
- // LDUser is not supported for auto env reporting
85
- if (isLegacyUser(context)) {
86
- return context;
87
- }
88
- let ld_application;
89
- let ld_device;
90
- // Check if customer contexts exist. Only override if they are not provided.
91
- if ((isSingleKind(context) && context.kind !== 'ld_application') ||
92
- (isMultiKind(context) && !context.ld_application)) {
93
- ld_application = await (0, exports.addApplicationInfo)(platform, config);
94
- }
95
- else {
96
- config.logger.warn('Not adding ld_application environment attributes because it already exists.');
97
- }
98
- if ((isSingleKind(context) && context.kind !== 'ld_device') ||
99
- (isMultiKind(context) && !context.ld_device)) {
100
- ld_device = await (0, exports.addDeviceInfo)(platform);
101
- }
102
- else {
103
- config.logger.warn('Not adding ld_device environment attributes because it already exists.');
104
- }
105
- // Unable to automatically add environment attributes for kind: {}. {} already exists.
106
- if (ld_application || ld_device) {
107
- const multi = isSingleKind(context) ? (0, exports.toMulti)(context) : context;
108
- return Object.assign(Object.assign(Object.assign({}, multi), (ld_application ? { ld_application } : {})), (ld_device ? { ld_device } : {}));
109
- }
110
- return context;
111
- };
112
- exports.addAutoEnv = addAutoEnv;
113
- //# sourceMappingURL=addAutoEnv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addAutoEnv.js","sourceRoot":"","sources":["../../src/context/addAutoEnv.ts"],"names":[],"mappings":"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"}
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.ensureKey = void 0;
15
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
16
- const getOrGenerateKey_1 = require("../storage/getOrGenerateKey");
17
- const namespaceUtils_1 = require("../storage/namespaceUtils");
18
- const { isLegacyUser, isMultiKind, isSingleKind } = js_sdk_common_1.internal;
19
- /**
20
- * This is the root ensureKey function. All other ensureKey functions reduce to this.
21
- *
22
- * - ensureKeyCommon // private root function
23
- * - ensureKeySingle
24
- * - ensureKeyMulti
25
- * - ensureKeyLegacy
26
- * - ensureKey // exported for external use
27
- *
28
- * @param kind The LDContext kind
29
- * @param c The LDContext object
30
- * @param platform Platform containing crypto and storage needed for storing and querying keys.
31
- */
32
- const ensureKeyCommon = async (kind, c, platform) => {
33
- const { anonymous, key } = c;
34
- if (anonymous && !key) {
35
- const storageKey = await (0, namespaceUtils_1.namespaceForAnonymousGeneratedContextKey)(kind);
36
- // This mutates a cloned copy of the original context from ensureyKey so this is safe.
37
- // eslint-disable-next-line no-param-reassign
38
- c.key = await (0, getOrGenerateKey_1.getOrGenerateKey)(storageKey, platform);
39
- }
40
- };
41
- const ensureKeySingle = async (c, platform) => {
42
- await ensureKeyCommon(c.kind, c, platform);
43
- };
44
- const ensureKeyMulti = async (multiContext, platform) => {
45
- const { kind } = multiContext, singleContexts = __rest(multiContext, ["kind"]);
46
- return Promise.all(Object.entries(singleContexts).map(([k, c]) => ensureKeyCommon(k, c, platform)));
47
- };
48
- const ensureKeyLegacy = async (c, platform) => {
49
- await ensureKeyCommon('user', c, platform);
50
- };
51
- /**
52
- * Ensure a key is always present in anonymous contexts. Non-anonymous contexts
53
- * are not processed and will just be returned as is.
54
- *
55
- * @param context
56
- * @param platform
57
- */
58
- const ensureKey = async (context, platform) => {
59
- const cloned = (0, js_sdk_common_1.clone)(context);
60
- if (isSingleKind(cloned)) {
61
- await ensureKeySingle(cloned, platform);
62
- }
63
- if (isMultiKind(cloned)) {
64
- await ensureKeyMulti(cloned, platform);
65
- }
66
- if (isLegacyUser(cloned)) {
67
- await ensureKeyLegacy(cloned, platform);
68
- }
69
- return cloned;
70
- };
71
- exports.ensureKey = ensureKey;
72
- //# sourceMappingURL=ensureKey.js.map
@@ -1 +0,0 @@
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,MAAM,IAAA,yDAAwC,EAAC,IAAI,CAAC,CAAC;QACxE,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"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- async function digest(hasher, encoding) {
4
- if (hasher.digest) {
5
- return hasher.digest(encoding);
6
- }
7
- if (hasher.asyncDigest) {
8
- return hasher.asyncDigest(encoding);
9
- }
10
- // This represents an error in platform implementation.
11
- throw new Error('Platform must implement digest or asyncDigest');
12
- }
13
- exports.default = digest;
14
- //# sourceMappingURL=digest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/crypto/digest.ts"],"names":[],"mappings":";;AAEe,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,QAAgB;IACnE,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAChC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE;QACtB,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KACrC;IACD,uDAAuD;IACvD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACnE,CAAC;AATD,yBASC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
- const configuration_1 = require("../configuration");
5
- const createDiagnosticsInitConfig = (config) => ({
6
- customBaseURI: config.baseUri !== configuration_1.DEFAULT_POLLING,
7
- customStreamURI: config.streamUri !== configuration_1.DEFAULT_STREAM,
8
- customEventsURI: config.eventsUri !== js_sdk_common_1.ServiceEndpoints.DEFAULT_EVENTS,
9
- eventsCapacity: config.capacity,
10
- eventsFlushIntervalMillis: (0, js_sdk_common_1.secondsToMillis)(config.flushInterval),
11
- reconnectTimeMillis: (0, js_sdk_common_1.secondsToMillis)(config.streamInitialReconnectDelay),
12
- diagnosticRecordingIntervalMillis: (0, js_sdk_common_1.secondsToMillis)(config.diagnosticRecordingInterval),
13
- allAttributesPrivate: config.allAttributesPrivate,
14
- // TODO: Implement when corresponding features are implemented.
15
- usingSecureMode: false,
16
- bootstrapMode: false,
17
- });
18
- exports.default = createDiagnosticsInitConfig;
19
- //# sourceMappingURL=createDiagnosticsInitConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createDiagnosticsInitConfig.js","sourceRoot":"","sources":["../../src/diagnostics/createDiagnosticsInitConfig.ts"],"names":[],"mappings":";;AAAA,+DAAgF;AAEhF,oDAAkF;AAiBlF,MAAM,2BAA2B,GAAG,CAAC,MAAqB,EAAyB,EAAE,CAAC,CAAC;IACrF,aAAa,EAAE,MAAM,CAAC,OAAO,KAAK,+BAAe;IACjD,eAAe,EAAE,MAAM,CAAC,SAAS,KAAK,8BAAc;IACpD,eAAe,EAAE,MAAM,CAAC,SAAS,KAAK,gCAAgB,CAAC,cAAc;IACrE,cAAc,EAAE,MAAM,CAAC,QAAQ;IAC/B,yBAAyB,EAAE,IAAA,+BAAe,EAAC,MAAM,CAAC,aAAa,CAAC;IAChE,mBAAmB,EAAE,IAAA,+BAAe,EAAC,MAAM,CAAC,2BAA2B,CAAC;IACxE,iCAAiC,EAAE,IAAA,+BAAe,EAAC,MAAM,CAAC,2BAA2B,CAAC;IACtF,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;IACjD,+DAA+D;IAC/D,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,KAAK;CACrB,CAAC,CAAC;AAEH,kBAAe,2BAA2B,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
- const createDiagnosticsInitConfig_1 = require("./createDiagnosticsInitConfig");
5
- const createDiagnosticsManager = (clientSideID, config, platform) => {
6
- if (config.sendEvents && !config.diagnosticOptOut) {
7
- return new js_sdk_common_1.internal.DiagnosticsManager(clientSideID, platform, (0, createDiagnosticsInitConfig_1.default)(config));
8
- }
9
- return undefined;
10
- };
11
- exports.default = createDiagnosticsManager;
12
- //# sourceMappingURL=createDiagnosticsManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createDiagnosticsManager.js","sourceRoot":"","sources":["../../src/diagnostics/createDiagnosticsManager.ts"],"names":[],"mappings":";;AAAA,+DAAiE;AAGjE,+EAAwE;AAExE,MAAM,wBAAwB,GAAG,CAC/B,YAAoB,EACpB,MAAqB,EACrB,QAAkB,EAClB,EAAE;IACF,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;QACjD,OAAO,IAAI,wBAAQ,CAAC,kBAAkB,CACpC,YAAY,EACZ,QAAQ,EACR,IAAA,qCAA2B,EAAC,MAAM,CAAC,CACpC,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,kBAAe,wBAAwB,CAAC"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSuccessEvaluationDetail = exports.createErrorEvaluationDetail = void 0;
4
- function createErrorEvaluationDetail(errorKind, def) {
5
- return {
6
- value: def !== null && def !== void 0 ? def : null,
7
- variationIndex: null,
8
- reason: { kind: 'ERROR', errorKind },
9
- };
10
- }
11
- exports.createErrorEvaluationDetail = createErrorEvaluationDetail;
12
- function createSuccessEvaluationDetail(value, variationIndex, reason) {
13
- return {
14
- value,
15
- variationIndex: variationIndex !== null && variationIndex !== void 0 ? variationIndex : null,
16
- reason: reason !== null && reason !== void 0 ? reason : null,
17
- };
18
- }
19
- exports.createSuccessEvaluationDetail = createSuccessEvaluationDetail;
20
- //# sourceMappingURL=evaluationDetail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluationDetail.js","sourceRoot":"","sources":["../../src/evaluation/evaluationDetail.ts"],"names":[],"mappings":";;;AAIA,SAAgB,2BAA2B,CACzC,SAA8B,EAC9B,GAAiB;IAEjB,OAAO;QACL,KAAK,EAAE,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;KACrC,CAAC;AACJ,CAAC;AATD,kEASC;AAED,SAAgB,6BAA6B,CAC3C,KAAkB,EAClB,cAAuB,EACvB,MAA2B;IAE3B,OAAO;QACL,KAAK;QACL,cAAc,EAAE,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,IAAI;QACtC,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI;KACvB,CAAC;AACJ,CAAC;AAVD,sEAUC"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
- /**
5
- * @internal
6
- */
7
- class EventFactory extends js_sdk_common_1.internal.EventFactoryBase {
8
- evalEventClient(flagKey, value, defaultVal, flag, context, reason) {
9
- const { trackEvents, debugEventsUntilDate, trackReason, version, variation } = flag;
10
- return super.evalEvent({
11
- addExperimentData: trackReason,
12
- context,
13
- debugEventsUntilDate,
14
- defaultVal,
15
- flagKey,
16
- reason,
17
- trackEvents,
18
- value,
19
- variation,
20
- version,
21
- });
22
- }
23
- }
24
- exports.default = EventFactory;
25
- //# sourceMappingURL=EventFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EventFactory.js","sourceRoot":"","sources":["../../src/events/EventFactory.ts"],"names":[],"mappings":";;AAAA,+DAAiG;AAIjG;;GAEG;AACH,MAAqB,YAAa,SAAQ,wBAAQ,CAAC,gBAAgB;IACjE,eAAe,CACb,OAAe,EACf,KAAkB,EAClB,UAAe,EACf,IAAU,EACV,OAAgB,EAChB,MAA2B;QAE3B,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEpF,OAAO,KAAK,CAAC,SAAS,CAAC;YACrB,iBAAiB,EAAE,WAAW;YAC9B,OAAO;YACP,oBAAoB;YACpB,UAAU;YACV,OAAO;YACP,MAAM;YACN,WAAW;YACX,KAAK;YACL,SAAS;YACT,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAxBD,+BAwBC"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
4
- const createEventProcessor = (clientSideID, config, platform, baseHeaders, diagnosticsManager) => {
5
- if (config.sendEvents) {
6
- return new js_sdk_common_1.internal.EventProcessor(Object.assign(Object.assign({}, config), { eventsCapacity: config.capacity }), new js_sdk_common_1.ClientContext(clientSideID, config, platform), baseHeaders, undefined, diagnosticsManager, false);
7
- }
8
- return undefined;
9
- };
10
- exports.default = createEventProcessor;
11
- //# sourceMappingURL=createEventProcessor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createEventProcessor.js","sourceRoot":"","sources":["../../src/events/createEventProcessor.ts"],"names":[],"mappings":";;AAAA,+DAA2F;AAI3F,MAAM,oBAAoB,GAAG,CAC3B,YAAoB,EACpB,MAAqB,EACrB,QAAkB,EAClB,WAAsB,EACtB,kBAAgD,EACX,EAAE;IACvC,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,OAAO,IAAI,wBAAQ,CAAC,cAAc,iCAC3B,MAAM,KAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,KAC5C,IAAI,6BAAa,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EACjD,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,KAAK,CACN,CAAC;KACH;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,kBAAe,oBAAoB,CAAC"}
@@ -1,64 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,48 +0,0 @@
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
- class DefaultFlagManager {
8
- /**
9
- * @param platform implementation of various platform provided functionality
10
- * @param sdkKey that will be used to distinguish different environments
11
- * @param maxCachedContexts that specifies the max number of contexts that will be cached in persistence
12
- * @param logger used for logging various messages
13
- * @param timeStamper exists for testing purposes
14
- */
15
- constructor(platform, sdkKey, maxCachedContexts, logger, timeStamper = () => Date.now()) {
16
- this.timeStamper = timeStamper;
17
- this.flagStore = new FlagStore_1.DefaultFlagStore();
18
- this.flagUpdater = new FlagUpdater_1.default(this.flagStore, logger);
19
- this.flagPersistencePromise = this.initPersistence(platform, sdkKey, maxCachedContexts, logger, timeStamper);
20
- }
21
- async initPersistence(platform, sdkKey, maxCachedContexts, logger, timeStamper = () => Date.now()) {
22
- const environmentNamespace = await (0, namespaceUtils_1.namespaceForEnvironment)(platform.crypto, sdkKey);
23
- return new FlagPersistence_1.default(platform, environmentNamespace, maxCachedContexts, this.flagStore, this.flagUpdater, logger, timeStamper);
24
- }
25
- get(key) {
26
- return this.flagStore.get(key);
27
- }
28
- getAll() {
29
- return this.flagStore.getAll();
30
- }
31
- async init(context, newFlags) {
32
- return (await this.flagPersistencePromise).init(context, newFlags);
33
- }
34
- async upsert(context, key, item) {
35
- return (await this.flagPersistencePromise).upsert(context, key, item);
36
- }
37
- async loadCached(context) {
38
- return (await this.flagPersistencePromise).loadCached(context);
39
- }
40
- on(callback) {
41
- this.flagUpdater.on(callback);
42
- }
43
- off(callback) {
44
- this.flagUpdater.off(callback);
45
- }
46
- }
47
- exports.default = DefaultFlagManager;
48
- //# sourceMappingURL=FlagManager.js.map
@@ -1 +0,0 @@
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;AAgDjE,MAAqB,kBAAkB;IAKrC;;;;;;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,IAAI,CAAC,WAAW,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAChD,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,QAAkB,EAClB,MAAc,EACd,iBAAyB,EACzB,MAAgB,EAChB,cAA4B,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAE5C,MAAM,oBAAoB,GAAG,MAAM,IAAA,wCAAuB,EAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEpF,OAAO,IAAI,yBAAe,CACxB,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,EAChB,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAgB,EAAE,QAA2C;QACtE,OAAO,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAgB,EAAE,GAAW,EAAE,IAAoB;QAC9D,OAAO,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAgB;QAC/B,OAAO,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,EAAE,CAAC,QAA6B;QAC9B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,QAA6B;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACF;AA5ED,qCA4EC"}
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const namespaceUtils_1 = require("../storage/namespaceUtils");
4
- const ContextIndex_1 = require("./ContextIndex");
5
- /**
6
- * This class handles persisting and loading flag values from a persistent
7
- * store. It intercepts updates and forwards them to the flag updater and
8
- * then persists changes after the updater has completed.
9
- */
10
- class FlagPersistence {
11
- constructor(platform, environmentNamespace, maxCachedContexts, flagStore, flagUpdater, logger, timeStamper = () => Date.now()) {
12
- this.platform = platform;
13
- this.environmentNamespace = environmentNamespace;
14
- this.maxCachedContexts = maxCachedContexts;
15
- this.flagStore = flagStore;
16
- this.flagUpdater = flagUpdater;
17
- this.logger = logger;
18
- this.timeStamper = timeStamper;
19
- this.indexKeyPromise = (0, namespaceUtils_1.namespaceForContextIndex)(this.environmentNamespace);
20
- }
21
- /**
22
- * Inits flag persistence for the provided context with the provided flags. This will result
23
- * in the underlying {@link FlagUpdater} switching its active context.
24
- */
25
- async init(context, newFlags) {
26
- this.flagUpdater.init(context, newFlags);
27
- await this.storeCache(context);
28
- }
29
- /**
30
- * Upserts a flag into the {@link FlagUpdater} and stores that to persistence if the upsert
31
- * was successful / accepted. An upsert may be rejected if the provided context is not
32
- * the active context.
33
- */
34
- async upsert(context, key, item) {
35
- if (this.flagUpdater.upsert(context, key, item)) {
36
- await this.storeCache(context);
37
- return true;
38
- }
39
- return false;
40
- }
41
- /**
42
- * Loads the flags from persistence for the provided context and gives those to the
43
- * {@link FlagUpdater} this {@link FlagPersistence} was constructed with.
44
- */
45
- async loadCached(context) {
46
- var _a, _b, _c, _d;
47
- const storageKey = await (0, namespaceUtils_1.namespaceForContextData)(this.platform.crypto, this.environmentNamespace, context);
48
- let flagsJson = await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.get(storageKey));
49
- if (flagsJson === null || flagsJson === undefined) {
50
- // Fallback: in version <10.3.1 flag data was stored under the canonical key, check
51
- // to see if data is present and migrate the data if present.
52
- flagsJson = await ((_b = this.platform.storage) === null || _b === void 0 ? void 0 : _b.get(context.canonicalKey));
53
- if (flagsJson === null || flagsJson === undefined) {
54
- // return false indicating cache did not load if flag json is still absent
55
- return false;
56
- }
57
- // migrate data from version <10.3.1 and cleanup data that was under canonical key
58
- await ((_c = this.platform.storage) === null || _c === void 0 ? void 0 : _c.set(storageKey, flagsJson));
59
- await ((_d = this.platform.storage) === null || _d === void 0 ? void 0 : _d.clear(context.canonicalKey));
60
- }
61
- try {
62
- const flags = JSON.parse(flagsJson);
63
- // mapping flags to item descriptors
64
- const descriptors = Object.entries(flags).reduce((acc, [key, flag]) => {
65
- acc[key] = { version: flag.version, flag };
66
- return acc;
67
- }, {});
68
- this.flagUpdater.initCached(context, descriptors);
69
- this.logger.debug('Loaded cached flag evaluations from persistent storage');
70
- return true;
71
- }
72
- catch (e) {
73
- this.logger.warn(`Could not load cached flag evaluations from persistent storage: ${e.message}`);
74
- return false;
75
- }
76
- }
77
- async loadIndex() {
78
- var _a;
79
- if (this.contextIndex !== undefined) {
80
- return this.contextIndex;
81
- }
82
- const json = await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.get(await this.indexKeyPromise));
83
- if (!json) {
84
- this.contextIndex = new ContextIndex_1.default();
85
- return this.contextIndex;
86
- }
87
- try {
88
- this.contextIndex = ContextIndex_1.default.fromJson(json);
89
- this.logger.debug('Loaded context index from persistent storage');
90
- }
91
- catch (e) {
92
- this.logger.warn(`Could not load index from persistent storage: ${e.message}`);
93
- this.contextIndex = new ContextIndex_1.default();
94
- }
95
- return this.contextIndex;
96
- }
97
- async storeCache(context) {
98
- var _a, _b;
99
- const index = await this.loadIndex();
100
- const storageKey = await (0, namespaceUtils_1.namespaceForContextData)(this.platform.crypto, this.environmentNamespace, context);
101
- index.notice(storageKey, this.timeStamper());
102
- const pruned = index.prune(this.maxCachedContexts);
103
- await Promise.all(pruned.map(async (it) => { var _a; return (_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.clear(it.id); }));
104
- // store index
105
- await ((_a = this.platform.storage) === null || _a === void 0 ? void 0 : _a.set(await this.indexKeyPromise, index.toJson()));
106
- const allFlags = this.flagStore.getAll();
107
- // mapping item descriptors to flags
108
- const flags = Object.entries(allFlags).reduce((acc, [key, descriptor]) => {
109
- if (descriptor.flag !== null && descriptor.flag !== undefined) {
110
- acc[key] = descriptor.flag;
111
- }
112
- return acc;
113
- }, {});
114
- const jsonAll = JSON.stringify(flags);
115
- // store flag data
116
- await ((_b = this.platform.storage) === null || _b === void 0 ? void 0 : _b.set(storageKey, jsonAll));
117
- }
118
- }
119
- exports.default = FlagPersistence;
120
- //# sourceMappingURL=FlagPersistence.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlagPersistence.js","sourceRoot":"","sources":["../../src/flag-manager/FlagPersistence.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultFlagStore = void 0;
4
- /**
5
- * In memory flag store.
6
- */
7
- class DefaultFlagStore {
8
- constructor() {
9
- this.flags = {};
10
- }
11
- init(newFlags) {
12
- this.flags = Object.entries(newFlags).reduce((acc, [key, flag]) => {
13
- acc[key] = flag;
14
- return acc;
15
- }, {});
16
- }
17
- insertOrUpdate(key, update) {
18
- this.flags[key] = update;
19
- }
20
- get(key) {
21
- if (Object.prototype.hasOwnProperty.call(this.flags, key)) {
22
- return this.flags[key];
23
- }
24
- return undefined;
25
- }
26
- getAll() {
27
- return this.flags;
28
- }
29
- }
30
- exports.DefaultFlagStore = DefaultFlagStore;
31
- //# sourceMappingURL=FlagStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlagStore.js","sourceRoot":"","sources":["../../src/flag-manager/FlagStore.ts"],"names":[],"mappings":";;;AAYA;;GAEG;AACH,MAAa,gBAAgB;IAA7B;QACU,UAAK,GAAsC,EAAE,CAAC;IA0BxD,CAAC;IAxBC,IAAI,CAAC,QAA2C;QAC9C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC1C,CAAC,GAAoC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAChB,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,MAAsB;QAChD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AA3BD,4CA2BC"}