@launchdarkly/js-client-sdk-common 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/dist/DataManager.d.ts +64 -0
- package/dist/DataManager.d.ts.map +1 -0
- package/dist/HookRunner.d.ts +12 -0
- package/dist/HookRunner.d.ts.map +1 -0
- package/dist/LDClientImpl.d.ts +14 -48
- package/dist/LDClientImpl.d.ts.map +1 -1
- package/dist/LDEmitter.d.ts +13 -1
- package/dist/LDEmitter.d.ts.map +1 -1
- package/dist/api/LDClient.d.ts +13 -14
- package/dist/api/LDClient.d.ts.map +1 -1
- package/dist/api/LDOptions.d.ts +28 -12
- package/dist/api/LDOptions.d.ts.map +1 -1
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/integrations/Hooks.d.ts +133 -0
- package/dist/api/integrations/Hooks.d.ts.map +1 -0
- package/dist/api/integrations/index.d.ts +2 -0
- package/dist/api/integrations/index.d.ts.map +1 -0
- package/dist/configuration/Configuration.d.ts +59 -19
- package/dist/configuration/Configuration.d.ts.map +1 -1
- package/dist/configuration/index.d.ts +2 -2
- package/dist/configuration/index.d.ts.map +1 -1
- package/dist/configuration/validators.d.ts.map +1 -1
- package/dist/context/addAutoEnv.d.ts +3 -3
- package/dist/context/addAutoEnv.d.ts.map +1 -1
- package/dist/crypto/digest.d.ts +3 -0
- package/dist/crypto/digest.d.ts.map +1 -0
- package/dist/datasource/DataSourceEventHandler.d.ts +16 -0
- package/dist/datasource/DataSourceEventHandler.d.ts.map +1 -0
- package/dist/datasource/DataSourceStatus.d.ts +39 -0
- package/dist/datasource/DataSourceStatus.d.ts.map +1 -0
- package/dist/datasource/DataSourceStatusErrorInfo.d.ts +8 -0
- package/dist/datasource/DataSourceStatusErrorInfo.d.ts.map +1 -0
- package/dist/datasource/DataSourceStatusManager.d.ts +40 -0
- package/dist/datasource/DataSourceStatusManager.d.ts.map +1 -0
- package/dist/diagnostics/createDiagnosticsInitConfig.d.ts +1 -1
- package/dist/diagnostics/createDiagnosticsInitConfig.d.ts.map +1 -1
- package/dist/diagnostics/createDiagnosticsManager.d.ts +1 -1
- package/dist/diagnostics/createDiagnosticsManager.d.ts.map +1 -1
- package/dist/events/createEventProcessor.d.ts +3 -3
- package/dist/events/createEventProcessor.d.ts.map +1 -1
- package/dist/flag-manager/FlagManager.d.ts +39 -15
- package/dist/flag-manager/FlagManager.d.ts.map +1 -1
- package/dist/flag-manager/FlagPersistence.d.ts +2 -1
- package/dist/flag-manager/FlagPersistence.d.ts.map +1 -1
- package/dist/flag-manager/FlagStore.d.ts.map +1 -1
- package/dist/index.cjs +1686 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +16 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1659 -0
- package/dist/index.mjs.map +1 -0
- package/dist/polling/PollingProcessor.d.ts.map +1 -1
- package/dist/polling/Requestor.d.ts +16 -1
- package/dist/polling/Requestor.d.ts.map +1 -1
- package/dist/storage/namespaceUtils.d.ts +7 -7
- package/dist/storage/namespaceUtils.d.ts.map +1 -1
- package/dist/streaming/DataSourceConfig.d.ts +24 -0
- package/dist/streaming/DataSourceConfig.d.ts.map +1 -0
- package/dist/streaming/StreamingProcessor.d.ts +33 -0
- package/dist/streaming/StreamingProcessor.d.ts.map +1 -0
- package/dist/streaming/index.d.ts +4 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +18 -7
- package/dist/LDClientImpl.js +0 -460
- package/dist/LDClientImpl.js.map +0 -1
- package/dist/LDEmitter.js +0 -64
- package/dist/LDEmitter.js.map +0 -1
- package/dist/api/ConnectionMode.js +0 -3
- package/dist/api/ConnectionMode.js.map +0 -1
- package/dist/api/LDClient.js +0 -3
- package/dist/api/LDClient.js.map +0 -1
- package/dist/api/LDEvaluationDetail.js +0 -3
- package/dist/api/LDEvaluationDetail.js.map +0 -1
- package/dist/api/LDIdentifyOptions.js +0 -3
- package/dist/api/LDIdentifyOptions.js.map +0 -1
- package/dist/api/LDOptions.js +0 -3
- package/dist/api/LDOptions.js.map +0 -1
- package/dist/api/index.js +0 -20
- package/dist/api/index.js.map +0 -1
- package/dist/configuration/Configuration.js +0 -73
- package/dist/configuration/Configuration.js.map +0 -1
- package/dist/configuration/index.js +0 -5
- package/dist/configuration/index.js.map +0 -1
- package/dist/configuration/validators.js +0 -37
- package/dist/configuration/validators.js.map +0 -1
- package/dist/context/addAutoEnv.js +0 -114
- package/dist/context/addAutoEnv.js.map +0 -1
- package/dist/context/ensureKey.js +0 -72
- package/dist/context/ensureKey.js.map +0 -1
- package/dist/diagnostics/createDiagnosticsInitConfig.js +0 -19
- package/dist/diagnostics/createDiagnosticsInitConfig.js.map +0 -1
- package/dist/diagnostics/createDiagnosticsManager.js +0 -12
- package/dist/diagnostics/createDiagnosticsManager.js.map +0 -1
- package/dist/evaluation/evaluationDetail.js +0 -20
- package/dist/evaluation/evaluationDetail.js.map +0 -1
- package/dist/events/EventFactory.js +0 -25
- package/dist/events/EventFactory.js.map +0 -1
- package/dist/events/createEventProcessor.js +0 -11
- package/dist/events/createEventProcessor.js.map +0 -1
- package/dist/flag-manager/ContextIndex.js +0 -64
- package/dist/flag-manager/ContextIndex.js.map +0 -1
- package/dist/flag-manager/FlagManager.js +0 -74
- package/dist/flag-manager/FlagManager.js.map +0 -1
- package/dist/flag-manager/FlagPersistence.js +0 -120
- package/dist/flag-manager/FlagPersistence.js.map +0 -1
- package/dist/flag-manager/FlagStore.js +0 -28
- package/dist/flag-manager/FlagStore.js.map +0 -1
- package/dist/flag-manager/FlagUpdater.js +0 -69
- package/dist/flag-manager/FlagUpdater.js.map +0 -1
- package/dist/flag-manager/ItemDescriptor.js +0 -3
- package/dist/flag-manager/ItemDescriptor.js.map +0 -1
- package/dist/flag-manager/calculateChangedKeys.js +0 -22
- package/dist/flag-manager/calculateChangedKeys.js.map +0 -1
- package/dist/index.js +0 -22
- package/dist/index.js.map +0 -1
- package/dist/polling/PollingProcessor.js +0 -79
- package/dist/polling/PollingProcessor.js.map +0 -1
- package/dist/polling/Requestor.js +0 -50
- package/dist/polling/Requestor.js.map +0 -1
- package/dist/storage/getOrGenerateKey.js +0 -21
- package/dist/storage/getOrGenerateKey.js.map +0 -1
- package/dist/storage/namespaceUtils.js +0 -61
- package/dist/storage/namespaceUtils.js.map +0 -1
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +0 -1
|
@@ -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.indexKey = (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 = (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(this.indexKey));
|
|
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 = (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(this.indexKey, 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,28 +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
|
-
return this.flags[key];
|
|
22
|
-
}
|
|
23
|
-
getAll() {
|
|
24
|
-
return this.flags;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.DefaultFlagStore = DefaultFlagStore;
|
|
28
|
-
//# 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;IAuBxD,CAAC;IArBC,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,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAxBD,4CAwBC"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const calculateChangedKeys_1 = require("./calculateChangedKeys");
|
|
4
|
-
/**
|
|
5
|
-
* The flag updater handles logic required during the flag update process.
|
|
6
|
-
* It handles versions checking to handle out of order flag updates and
|
|
7
|
-
* also handles flag comparisons for change notification.
|
|
8
|
-
*/
|
|
9
|
-
class FlagUpdater {
|
|
10
|
-
constructor(flagStore, logger) {
|
|
11
|
-
this.changeCallbacks = new Array();
|
|
12
|
-
this.flagStore = flagStore;
|
|
13
|
-
this.logger = logger;
|
|
14
|
-
}
|
|
15
|
-
init(context, newFlags) {
|
|
16
|
-
this.activeContextKey = context.canonicalKey;
|
|
17
|
-
const oldFlags = this.flagStore.getAll();
|
|
18
|
-
this.flagStore.init(newFlags);
|
|
19
|
-
const changed = (0, calculateChangedKeys_1.default)(oldFlags, newFlags);
|
|
20
|
-
if (changed.length > 0) {
|
|
21
|
-
this.changeCallbacks.forEach((callback) => {
|
|
22
|
-
try {
|
|
23
|
-
callback(context, changed);
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
/* intentionally empty */
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
initCached(context, newFlags) {
|
|
32
|
-
if (this.activeContextKey === context.canonicalKey) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
this.init(context, newFlags);
|
|
36
|
-
}
|
|
37
|
-
upsert(context, key, item) {
|
|
38
|
-
if (this.activeContextKey !== context.canonicalKey) {
|
|
39
|
-
this.logger.warn('Received an update for an inactive context.');
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
const currentValue = this.flagStore.get(key);
|
|
43
|
-
if (currentValue !== undefined && currentValue.version >= item.version) {
|
|
44
|
-
// this is an out of order update that can be ignored
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
this.flagStore.insertOrUpdate(key, item);
|
|
48
|
-
this.changeCallbacks.forEach((callback) => {
|
|
49
|
-
try {
|
|
50
|
-
callback(context, [key]);
|
|
51
|
-
}
|
|
52
|
-
catch (err) {
|
|
53
|
-
/* intentionally empty */
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
on(callback) {
|
|
59
|
-
this.changeCallbacks.push(callback);
|
|
60
|
-
}
|
|
61
|
-
off(callback) {
|
|
62
|
-
const index = this.changeCallbacks.indexOf(callback);
|
|
63
|
-
if (index > -1) {
|
|
64
|
-
this.changeCallbacks.splice(index, 1);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
exports.default = FlagUpdater;
|
|
69
|
-
//# sourceMappingURL=FlagUpdater.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlagUpdater.js","sourceRoot":"","sources":["../../src/flag-manager/FlagUpdater.ts"],"names":[],"mappings":";;AAEA,iEAA0D;AAmB1D;;;;GAIG;AACH,MAAqB,WAAW;IAM9B,YAAY,SAAoB,EAAE,MAAgB;QAF1C,oBAAe,GAAG,IAAI,KAAK,EAAuB,CAAC;QAGzD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,OAAgB,EAAE,QAA2C;QAChE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAA,8BAAoB,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACxC,IAAI;oBACF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;iBAC5B;gBAAC,OAAO,GAAG,EAAE;oBACZ,yBAAyB;iBAC1B;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,UAAU,CAAC,OAAgB,EAAE,QAA2C;QACtE,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,CAAC,YAAY,EAAE;YAClD,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,OAAgB,EAAE,GAAW,EAAE,IAAoB;QACxD,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,CAAC,YAAY,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;SACd;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;YACtE,qDAAqD;YACrD,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxC,IAAI;gBACF,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aAC1B;YAAC,OAAO,GAAG,EAAE;gBACZ,yBAAyB;aAC1B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,QAA6B;QAC9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,QAA6B;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACvC;IACH,CAAC;CACF;AApED,8BAoEC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ItemDescriptor.js","sourceRoot":"","sources":["../../src/flag-manager/ItemDescriptor.ts"],"names":[],"mappings":""}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
|
|
4
|
-
function calculateChangedKeys(existingObject, newObject) {
|
|
5
|
-
const changedKeys = [];
|
|
6
|
-
// property deleted or updated
|
|
7
|
-
Object.entries(existingObject).forEach(([k, f]) => {
|
|
8
|
-
const subObject = newObject[k];
|
|
9
|
-
if (!subObject || !(0, js_sdk_common_1.fastDeepEqual)(f, subObject)) {
|
|
10
|
-
changedKeys.push(k);
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
// property added
|
|
14
|
-
Object.keys(newObject).forEach((k) => {
|
|
15
|
-
if (!existingObject[k]) {
|
|
16
|
-
changedKeys.push(k);
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
return changedKeys;
|
|
20
|
-
}
|
|
21
|
-
exports.default = calculateChangedKeys;
|
|
22
|
-
//# sourceMappingURL=calculateChangedKeys.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calculateChangedKeys.js","sourceRoot":"","sources":["../../src/flag-manager/calculateChangedKeys.ts"],"names":[],"mappings":";;AAAA,+DAA4D;AAE5D,SAAwB,oBAAoB,CAC1C,cAAoC,EACpC,SAA+B;IAE/B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,8BAA8B;IAC9B,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,IAAI,CAAC,IAAA,6BAAa,EAAC,CAAC,EAAE,SAAS,CAAC,EAAE;YAC9C,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACnC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAtBD,uCAsBC"}
|
package/dist/index.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.LDClientImpl = exports.platform = void 0;
|
|
18
|
-
const LDClientImpl_1 = require("./LDClientImpl");
|
|
19
|
-
exports.LDClientImpl = LDClientImpl_1.default;
|
|
20
|
-
__exportStar(require("@launchdarkly/js-sdk-common"), exports);
|
|
21
|
-
exports.platform = require("@launchdarkly/js-sdk-common");
|
|
22
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iDAA0C;AAkBjC,uBAlBF,sBAAY,CAkBE;AAhBrB,8DAA4C;AAE5C,0DAAwD"}
|
|
@@ -1,79 +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 Requestor_1 = require("./Requestor");
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
class PollingProcessor {
|
|
9
|
-
constructor(sdkKey, requests, info, uriPath, parameters, config, dataHandler, errorHandler) {
|
|
10
|
-
this.dataHandler = dataHandler;
|
|
11
|
-
this.errorHandler = errorHandler;
|
|
12
|
-
this.stopped = false;
|
|
13
|
-
const uri = (0, js_sdk_common_1.getPollingUri)(config.serviceEndpoints, uriPath, parameters);
|
|
14
|
-
this.logger = config.logger;
|
|
15
|
-
this.pollInterval = config.pollInterval;
|
|
16
|
-
this.requestor = new Requestor_1.default(sdkKey, requests, info, uri, config.useReport, config.tags);
|
|
17
|
-
}
|
|
18
|
-
async poll() {
|
|
19
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
20
|
-
if (this.stopped) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const reportJsonError = (data) => {
|
|
24
|
-
var _a, _b, _c;
|
|
25
|
-
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Polling received invalid data');
|
|
26
|
-
(_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug(`Invalid JSON follows: ${data}`);
|
|
27
|
-
(_c = this.errorHandler) === null || _c === void 0 ? void 0 : _c.call(this, new js_sdk_common_1.LDPollingError('Malformed JSON data in polling response'));
|
|
28
|
-
};
|
|
29
|
-
(_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('Polling LaunchDarkly for feature flag updates');
|
|
30
|
-
const startTime = Date.now();
|
|
31
|
-
try {
|
|
32
|
-
const res = await this.requestor.requestPayload();
|
|
33
|
-
try {
|
|
34
|
-
const flags = JSON.parse(res);
|
|
35
|
-
try {
|
|
36
|
-
(_b = this.dataHandler) === null || _b === void 0 ? void 0 : _b.call(this, flags);
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
(_c = this.logger) === null || _c === void 0 ? void 0 : _c.error(`Exception from data handler: ${err}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (_h) {
|
|
43
|
-
reportJsonError(res);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
const requestError = err;
|
|
48
|
-
if (requestError.status !== undefined) {
|
|
49
|
-
if (!(0, js_sdk_common_1.isHttpRecoverable)(requestError.status)) {
|
|
50
|
-
(_d = this.logger) === null || _d === void 0 ? void 0 : _d.error((0, js_sdk_common_1.httpErrorMessage)(err, 'polling request'));
|
|
51
|
-
(_e = this.errorHandler) === null || _e === void 0 ? void 0 : _e.call(this, new js_sdk_common_1.LDPollingError(requestError.message, requestError.status));
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
(_f = this.logger) === null || _f === void 0 ? void 0 : _f.error((0, js_sdk_common_1.httpErrorMessage)(err, 'polling request', 'will retry'));
|
|
56
|
-
}
|
|
57
|
-
const elapsed = Date.now() - startTime;
|
|
58
|
-
const sleepFor = Math.max(this.pollInterval * 1000 - elapsed, 0);
|
|
59
|
-
(_g = this.logger) === null || _g === void 0 ? void 0 : _g.debug('Elapsed: %d ms, sleeping for %d ms', elapsed, sleepFor);
|
|
60
|
-
this.timeoutHandle = setTimeout(() => {
|
|
61
|
-
this.poll();
|
|
62
|
-
}, sleepFor);
|
|
63
|
-
}
|
|
64
|
-
start() {
|
|
65
|
-
this.poll();
|
|
66
|
-
}
|
|
67
|
-
stop() {
|
|
68
|
-
if (this.timeoutHandle) {
|
|
69
|
-
clearTimeout(this.timeoutHandle);
|
|
70
|
-
this.timeoutHandle = undefined;
|
|
71
|
-
}
|
|
72
|
-
this.stopped = true;
|
|
73
|
-
}
|
|
74
|
-
close() {
|
|
75
|
-
this.stop();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
exports.default = PollingProcessor;
|
|
79
|
-
//# sourceMappingURL=PollingProcessor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PollingProcessor.js","sourceRoot":"","sources":["../../src/polling/PollingProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LDRequestError = void 0;
|
|
4
|
-
// eslint-disable-next-line max-classes-per-file
|
|
5
|
-
const js_sdk_common_1 = require("@launchdarkly/js-sdk-common");
|
|
6
|
-
function isOk(status) {
|
|
7
|
-
return status >= 200 && status <= 299;
|
|
8
|
-
}
|
|
9
|
-
class LDRequestError extends Error {
|
|
10
|
-
constructor(message, status) {
|
|
11
|
-
super(message);
|
|
12
|
-
this.status = status;
|
|
13
|
-
this.name = 'LaunchDarklyRequestError';
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.LDRequestError = LDRequestError;
|
|
17
|
-
/**
|
|
18
|
-
* Note: The requestor is implemented independently from polling such that it can be used to
|
|
19
|
-
* make a one-off request.
|
|
20
|
-
*
|
|
21
|
-
* @internal
|
|
22
|
-
*/
|
|
23
|
-
class Requestor {
|
|
24
|
-
constructor(sdkKey, requests, info, uri, useReport, tags) {
|
|
25
|
-
this.requests = requests;
|
|
26
|
-
this.uri = uri;
|
|
27
|
-
this.headers = (0, js_sdk_common_1.defaultHeaders)(sdkKey, info, tags);
|
|
28
|
-
this.verb = useReport ? 'REPORT' : 'GET';
|
|
29
|
-
}
|
|
30
|
-
async requestPayload() {
|
|
31
|
-
let status;
|
|
32
|
-
try {
|
|
33
|
-
const res = await this.requests.fetch(this.uri, {
|
|
34
|
-
method: this.verb,
|
|
35
|
-
headers: this.headers,
|
|
36
|
-
});
|
|
37
|
-
if (isOk(res.status)) {
|
|
38
|
-
return await res.text();
|
|
39
|
-
}
|
|
40
|
-
// Assigning so it can be thrown after the try/catch.
|
|
41
|
-
status = res.status;
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
throw new LDRequestError(err === null || err === void 0 ? void 0 : err.message);
|
|
45
|
-
}
|
|
46
|
-
throw new LDRequestError(`Unexpected status code: ${status}`, status);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
exports.default = Requestor;
|
|
50
|
-
//# sourceMappingURL=Requestor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Requestor.js","sourceRoot":"","sources":["../../src/polling/Requestor.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,+DAMqC;AAErC,SAAS,IAAI,CAAC,MAAc;IAC1B,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC;AACxC,CAAC;AAED,MAAa,cAAe,SAAQ,KAAK;IAGvC,YAAY,OAAe,EAAE,MAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AARD,wCAQC;AAED;;;;;GAKG;AACH,MAAqB,SAAS;IAI5B,YACE,MAAc,EACN,QAAkB,EAC1B,IAAU,EACO,GAAW,EAC5B,SAAkB,EAClB,IAAqB;QAJb,aAAQ,GAAR,QAAQ,CAAU;QAET,QAAG,GAAH,GAAG,CAAQ;QAI5B,IAAI,CAAC,OAAO,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,MAA0B,CAAC;QAC/B,IAAI;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9C,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBACpB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;aACzB;YACD,qDAAqD;YACrD,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;SACrB;QAAC,OAAO,GAAQ,EAAE;YACjB,MAAM,IAAI,cAAc,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAC,CAAC;SACxC;QACD,MAAM,IAAI,cAAc,CAAC,2BAA2B,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;CACF;AAjCD,4BAiCC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getOrGenerateKey = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* This function will retrieve a previously generated key for the given {@link storageKey} if it
|
|
6
|
-
* exists or generate and store one on the fly if it does not already exist.
|
|
7
|
-
* @param storageKey keyed storage location where the generated key should live. See {@link namespaceForGeneratedContextKey}
|
|
8
|
-
* for related exmaples of generating a storage key and usage.
|
|
9
|
-
* @param platform crypto and storage implementations for necessary operations
|
|
10
|
-
* @returns the generated key
|
|
11
|
-
*/
|
|
12
|
-
const getOrGenerateKey = async (storageKey, { crypto, storage }) => {
|
|
13
|
-
let generatedKey = await (storage === null || storage === void 0 ? void 0 : storage.get(storageKey));
|
|
14
|
-
if (!generatedKey) {
|
|
15
|
-
generatedKey = crypto.randomUUID();
|
|
16
|
-
await (storage === null || storage === void 0 ? void 0 : storage.set(storageKey, generatedKey));
|
|
17
|
-
}
|
|
18
|
-
return generatedKey;
|
|
19
|
-
};
|
|
20
|
-
exports.getOrGenerateKey = getOrGenerateKey;
|
|
21
|
-
//# sourceMappingURL=getOrGenerateKey.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOrGenerateKey.js","sourceRoot":"","sources":["../../src/storage/getOrGenerateKey.ts"],"names":[],"mappings":";;;AAKA;;;;;;;GAOG;AACI,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAY,EAAE,EAAE;IAC1F,IAAI,YAAY,GAAG,MAAM,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,UAAU,CAAC,CAAA,CAAC;IAElD,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA,CAAC;KAC9C;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.namespaceForContextData = exports.namespaceForContextIndex = exports.namespaceForGeneratedContextKey = exports.namespaceForAnonymousGeneratedContextKey = exports.namespaceForEnvironment = exports.concatNamespacesAndValues = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Hashes the input and encodes it as base64
|
|
6
|
-
*/
|
|
7
|
-
function hashAndBase64Encode(crypto) {
|
|
8
|
-
return (input) => crypto.createHash('sha256').update(input).digest('base64');
|
|
9
|
-
}
|
|
10
|
-
const noop = (input) => input; // no-op transform
|
|
11
|
-
function concatNamespacesAndValues(parts) {
|
|
12
|
-
const processedParts = parts.map((part) => part.transform(part.value)); // use the transform from each part to transform the value
|
|
13
|
-
return processedParts.join('_');
|
|
14
|
-
}
|
|
15
|
-
exports.concatNamespacesAndValues = concatNamespacesAndValues;
|
|
16
|
-
function namespaceForEnvironment(crypto, sdkKey) {
|
|
17
|
-
return concatNamespacesAndValues([
|
|
18
|
-
{ value: 'LaunchDarkly', transform: noop },
|
|
19
|
-
{ value: sdkKey, transform: hashAndBase64Encode(crypto) }, // hash sdk key and encode it
|
|
20
|
-
]);
|
|
21
|
-
}
|
|
22
|
-
exports.namespaceForEnvironment = namespaceForEnvironment;
|
|
23
|
-
/**
|
|
24
|
-
* @deprecated prefer {@link namespaceForGeneratedContextKey}. At one time we only generated keys for
|
|
25
|
-
* anonymous contexts and they were namespaced in LaunchDarkly_AnonymousKeys. Eventually we started
|
|
26
|
-
* generating context keys for non-anonymous contexts such as for the Auto Environment Attributes
|
|
27
|
-
* feature and those were namespaced in LaunchDarkly_ContextKeys. This function can be removed
|
|
28
|
-
* when the data under the LaunchDarkly_AnonymousKeys namespace is merged with data under the
|
|
29
|
-
* LaunchDarkly_ContextKeys namespace.
|
|
30
|
-
*/
|
|
31
|
-
function namespaceForAnonymousGeneratedContextKey(kind) {
|
|
32
|
-
return concatNamespacesAndValues([
|
|
33
|
-
{ value: 'LaunchDarkly', transform: noop },
|
|
34
|
-
{ value: 'AnonymousKeys', transform: noop },
|
|
35
|
-
{ value: kind, transform: noop }, // existing SDKs are not hashing or encoding this kind, though they should have
|
|
36
|
-
]);
|
|
37
|
-
}
|
|
38
|
-
exports.namespaceForAnonymousGeneratedContextKey = namespaceForAnonymousGeneratedContextKey;
|
|
39
|
-
function namespaceForGeneratedContextKey(kind) {
|
|
40
|
-
return concatNamespacesAndValues([
|
|
41
|
-
{ value: 'LaunchDarkly', transform: noop },
|
|
42
|
-
{ value: 'ContextKeys', transform: noop },
|
|
43
|
-
{ value: kind, transform: noop }, // existing SDKs are not hashing or encoding this kind, though they should have
|
|
44
|
-
]);
|
|
45
|
-
}
|
|
46
|
-
exports.namespaceForGeneratedContextKey = namespaceForGeneratedContextKey;
|
|
47
|
-
function namespaceForContextIndex(environmentNamespace) {
|
|
48
|
-
return concatNamespacesAndValues([
|
|
49
|
-
{ value: environmentNamespace, transform: noop },
|
|
50
|
-
{ value: 'ContextIndex', transform: noop },
|
|
51
|
-
]);
|
|
52
|
-
}
|
|
53
|
-
exports.namespaceForContextIndex = namespaceForContextIndex;
|
|
54
|
-
function namespaceForContextData(crypto, environmentNamespace, context) {
|
|
55
|
-
return concatNamespacesAndValues([
|
|
56
|
-
{ value: environmentNamespace, transform: noop },
|
|
57
|
-
{ value: context.canonicalKey, transform: hashAndBase64Encode(crypto) }, // hash and encode canonical key
|
|
58
|
-
]);
|
|
59
|
-
}
|
|
60
|
-
exports.namespaceForContextData = namespaceForContextData;
|
|
61
|
-
//# sourceMappingURL=namespaceUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"namespaceUtils.js","sourceRoot":"","sources":["../../src/storage/namespaceUtils.ts"],"names":[],"mappings":";;;AAIA;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,kBAAkB;AAEzD,SAAgB,yBAAyB,CACvC,KAA4E;IAE5E,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,0DAA0D;IAClI,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AALD,8DAKC;AAED,SAAgB,uBAAuB,CAAC,MAAc,EAAE,MAAc;IACpE,OAAO,yBAAyB,CAAC;QAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE;QAC1C,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,6BAA6B;KACzF,CAAC,CAAC;AACL,CAAC;AALD,0DAKC;AAED;;;;;;;GAOG;AACH,SAAgB,wCAAwC,CAAC,IAAY;IACnE,OAAO,yBAAyB,CAAC;QAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE;QAC1C,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE;QAC3C,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,+EAA+E;KAClH,CAAC,CAAC;AACL,CAAC;AAND,4FAMC;AAED,SAAgB,+BAA+B,CAAC,IAAY;IAC1D,OAAO,yBAAyB,CAAC;QAC/B,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE;QAC1C,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;QACzC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,+EAA+E;KAClH,CAAC,CAAC;AACL,CAAC;AAND,0EAMC;AAED,SAAgB,wBAAwB,CAAC,oBAA4B;IACnE,OAAO,yBAAyB,CAAC;QAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE;QAChD,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE;KAC3C,CAAC,CAAC;AACL,CAAC;AALD,4DAKC;AAED,SAAgB,uBAAuB,CACrC,MAAc,EACd,oBAA4B,EAC5B,OAAgB;IAEhB,OAAO,yBAAyB,CAAC;QAC/B,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE;QAChD,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,gCAAgC;KAC1G,CAAC,CAAC;AACL,CAAC;AATD,0DASC"}
|
package/dist/types/index.js
DELETED
package/dist/types/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|