@featbit/js-client-sdk 2.0.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/LICENSE +201 -0
- package/README.md +289 -0
- package/esm/constants.d.ts +7 -0
- package/esm/constants.js +8 -0
- package/esm/constants.js.map +1 -0
- package/esm/events.d.ts +14 -0
- package/esm/events.js +27 -0
- package/esm/events.js.map +1 -0
- package/esm/featbit.d.ts +34 -0
- package/esm/featbit.js +382 -0
- package/esm/featbit.js.map +1 -0
- package/esm/index.d.ts +4 -0
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -0
- package/esm/logger.d.ts +4 -0
- package/esm/logger.js +24 -0
- package/esm/logger.js.map +1 -0
- package/esm/network.service.d.ts +27 -0
- package/esm/network.service.js +288 -0
- package/esm/network.service.js.map +1 -0
- package/esm/optionMessages.d.ts +5 -0
- package/esm/optionMessages.js +16 -0
- package/esm/optionMessages.js.map +1 -0
- package/esm/queue.d.ts +8 -0
- package/esm/queue.js +35 -0
- package/esm/queue.js.map +1 -0
- package/esm/store.d.ts +20 -0
- package/esm/store.js +143 -0
- package/esm/store.js.map +1 -0
- package/esm/throttleutil.d.ts +9 -0
- package/esm/throttleutil.js +133 -0
- package/esm/throttleutil.js.map +1 -0
- package/esm/types.d.ts +94 -0
- package/esm/types.js +24 -0
- package/esm/types.js.map +1 -0
- package/esm/umd.d.ts +2 -0
- package/esm/utils.d.ts +11 -0
- package/esm/utils.js +142 -0
- package/esm/utils.js.map +1 -0
- package/package.json +48 -0
- package/src/constants.ts +7 -0
- package/src/events.ts +29 -0
- package/src/featbit.ts +343 -0
- package/src/index.ts +6 -0
- package/src/logger.ts +18 -0
- package/src/network.service.ts +223 -0
- package/src/optionMessages.ts +13 -0
- package/src/queue.ts +23 -0
- package/src/store.ts +169 -0
- package/src/throttleutil.ts +72 -0
- package/src/types.ts +113 -0
- package/src/umd.ts +15 -0
- package/src/utils.ts +173 -0
- package/umd/featbit-js-client-sdk-2.0.0.js +2 -0
- package/umd/featbit-js-client-sdk-2.0.0.js.map +1 -0
- package/umd/featbit-js-client-sdk.js +2 -0
- package/umd/featbit-js-client-sdk.js.map +1 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { websocketReconnectTopic } from "./constants";
|
|
49
|
+
import { eventHub } from "./events";
|
|
50
|
+
import { logger } from "./logger";
|
|
51
|
+
import { InsightType } from "./types";
|
|
52
|
+
import { generateConnectionToken } from "./utils";
|
|
53
|
+
import throttleUtil from "./throttleutil";
|
|
54
|
+
var socketConnectionIntervals = [250, 500, 1000, 2000, 4000, 8000];
|
|
55
|
+
var NetworkService = /** @class */ (function () {
|
|
56
|
+
function NetworkService() {
|
|
57
|
+
var _this = this;
|
|
58
|
+
this.retryCounter = 0;
|
|
59
|
+
this.sendInsights = throttleUtil.throttleAsync(function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
60
|
+
var payload, err_1;
|
|
61
|
+
var _this = this;
|
|
62
|
+
return __generator(this, function (_a) {
|
|
63
|
+
switch (_a.label) {
|
|
64
|
+
case 0:
|
|
65
|
+
if (!this.secret || !this.user || !data || data.length === 0) {
|
|
66
|
+
return [2 /*return*/];
|
|
67
|
+
}
|
|
68
|
+
_a.label = 1;
|
|
69
|
+
case 1:
|
|
70
|
+
_a.trys.push([1, 3, , 4]);
|
|
71
|
+
payload = [{
|
|
72
|
+
user: this.__getUserInfo(),
|
|
73
|
+
variations: data.filter(function (d) { return d.insightType === InsightType.featureFlagUsage; }).map(function (v) { return ({
|
|
74
|
+
featureFlagKey: v.id,
|
|
75
|
+
sendToExperiment: v.sendToExperiment,
|
|
76
|
+
timestamp: v.timestamp,
|
|
77
|
+
variation: {
|
|
78
|
+
id: v.variation.id,
|
|
79
|
+
value: v.variation.value
|
|
80
|
+
}
|
|
81
|
+
}); }),
|
|
82
|
+
metrics: data.filter(function (d) { return d.insightType !== InsightType.featureFlagUsage; }).map(function (d) { return ({
|
|
83
|
+
route: location.pathname,
|
|
84
|
+
timestamp: d.timestamp,
|
|
85
|
+
numericValue: d.numericValue === null || d.numericValue === undefined ? 1 : d.numericValue,
|
|
86
|
+
appType: _this.appType,
|
|
87
|
+
eventName: d.eventName,
|
|
88
|
+
type: d.type
|
|
89
|
+
}); })
|
|
90
|
+
}];
|
|
91
|
+
return [4 /*yield*/, post("".concat(this.eventsUri, "/api/public/insight/track"), payload, { Authorization: this.secret })];
|
|
92
|
+
case 2:
|
|
93
|
+
_a.sent();
|
|
94
|
+
return [3 /*break*/, 4];
|
|
95
|
+
case 3:
|
|
96
|
+
err_1 = _a.sent();
|
|
97
|
+
logger.logDebug(err_1);
|
|
98
|
+
return [3 /*break*/, 4];
|
|
99
|
+
case 4: return [2 /*return*/];
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}); });
|
|
103
|
+
}
|
|
104
|
+
NetworkService.prototype.init = function (streamingUri, eventsUri, secret, appType) {
|
|
105
|
+
this.streamingUri = streamingUri;
|
|
106
|
+
this.eventsUri = eventsUri;
|
|
107
|
+
this.secret = secret;
|
|
108
|
+
this.appType = appType;
|
|
109
|
+
};
|
|
110
|
+
NetworkService.prototype.identify = function (user, sendIdentifyMessage) {
|
|
111
|
+
var _a;
|
|
112
|
+
this.user = __assign({}, user);
|
|
113
|
+
throttleUtil.setKey((_a = this.user) === null || _a === void 0 ? void 0 : _a.keyId);
|
|
114
|
+
if (sendIdentifyMessage && this.socket) {
|
|
115
|
+
this.sendUserIdentifyMessage(0);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
NetworkService.prototype.sendUserIdentifyMessage = function (timestamp) {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
var _c = this.user, name = _c.name, keyId = _c.keyId, customizedProperties = _c.customizedProperties;
|
|
121
|
+
var payload = {
|
|
122
|
+
messageType: 'data-sync',
|
|
123
|
+
data: {
|
|
124
|
+
user: {
|
|
125
|
+
name: name,
|
|
126
|
+
keyId: keyId,
|
|
127
|
+
customizedProperties: customizedProperties,
|
|
128
|
+
},
|
|
129
|
+
timestamp: timestamp
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
try {
|
|
133
|
+
if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
|
|
134
|
+
logger.logDebug('sending user identify message');
|
|
135
|
+
(_b = this.socket) === null || _b === void 0 ? void 0 : _b.send(JSON.stringify(payload));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
logger.logDebug("didn't send user identify message because socket not open");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
logger.logDebug(err);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
NetworkService.prototype.reconnect = function () {
|
|
146
|
+
this.socket = null;
|
|
147
|
+
var waitTime = socketConnectionIntervals[Math.min(this.retryCounter++, socketConnectionIntervals.length - 1)];
|
|
148
|
+
setTimeout(function () {
|
|
149
|
+
logger.logDebug('emit reconnect event');
|
|
150
|
+
eventHub.emit(websocketReconnectTopic, {});
|
|
151
|
+
}, waitTime);
|
|
152
|
+
logger.logDebug(waitTime);
|
|
153
|
+
};
|
|
154
|
+
NetworkService.prototype.sendPingMessage = function () {
|
|
155
|
+
var _this = this;
|
|
156
|
+
var payload = {
|
|
157
|
+
messageType: 'ping',
|
|
158
|
+
data: null
|
|
159
|
+
};
|
|
160
|
+
setTimeout(function () {
|
|
161
|
+
var _a;
|
|
162
|
+
try {
|
|
163
|
+
if (((_a = _this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {
|
|
164
|
+
logger.logDebug('sending ping');
|
|
165
|
+
_this.socket.send(JSON.stringify(payload));
|
|
166
|
+
_this.sendPingMessage();
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
logger.logDebug("socket closed at ".concat(new Date()));
|
|
170
|
+
_this.reconnect();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
logger.logDebug(err);
|
|
175
|
+
}
|
|
176
|
+
}, 18000);
|
|
177
|
+
};
|
|
178
|
+
NetworkService.prototype.createConnection = function (timestamp, onMessage) {
|
|
179
|
+
var that = this;
|
|
180
|
+
if (that.socket) {
|
|
181
|
+
onMessage({});
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
var startTime = Date.now();
|
|
185
|
+
// Create WebSocket connection.
|
|
186
|
+
var url = "".concat(this.streamingUri, "/streaming?type=client&token=").concat(generateConnectionToken(this.secret));
|
|
187
|
+
that.socket = new WebSocket(url);
|
|
188
|
+
// Connection opened
|
|
189
|
+
that.socket.addEventListener('open', function (event) {
|
|
190
|
+
that.retryCounter = 0;
|
|
191
|
+
// this is the websocket instance to which the current listener is binded to, it's different from that.socket
|
|
192
|
+
logger.logDebug("Connection time: ".concat(Date.now() - startTime, " ms"));
|
|
193
|
+
that.sendUserIdentifyMessage(timestamp);
|
|
194
|
+
that.sendPingMessage();
|
|
195
|
+
});
|
|
196
|
+
// Connection closed
|
|
197
|
+
that.socket.addEventListener('close', function (event) {
|
|
198
|
+
logger.logDebug('close');
|
|
199
|
+
if (event.code === 4003) { // do not reconnect when 4003
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
that.reconnect();
|
|
203
|
+
});
|
|
204
|
+
// Connection error
|
|
205
|
+
that.socket.addEventListener('error', function (event) {
|
|
206
|
+
// reconnect
|
|
207
|
+
logger.logDebug('error');
|
|
208
|
+
});
|
|
209
|
+
// Listen for messages
|
|
210
|
+
that.socket.addEventListener('message', function (event) {
|
|
211
|
+
var message = JSON.parse(event.data);
|
|
212
|
+
if (message.messageType === 'data-sync') {
|
|
213
|
+
onMessage(message.data);
|
|
214
|
+
if (message.data.featureFlags.length > 0) {
|
|
215
|
+
logger.logDebug('socket push update time(ms): ', Date.now() - message.data.featureFlags[0].timestamp);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
};
|
|
220
|
+
NetworkService.prototype.__getUserInfo = function () {
|
|
221
|
+
var _a = this.user, name = _a.name, keyId = _a.keyId, customizedProperties = _a.customizedProperties;
|
|
222
|
+
return {
|
|
223
|
+
name: name,
|
|
224
|
+
keyId: keyId,
|
|
225
|
+
customizedProperties: customizedProperties,
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
return NetworkService;
|
|
229
|
+
}());
|
|
230
|
+
export var networkService = new NetworkService();
|
|
231
|
+
export function post(url, data, headers) {
|
|
232
|
+
if (url === void 0) { url = ''; }
|
|
233
|
+
if (data === void 0) { data = {}; }
|
|
234
|
+
if (headers === void 0) { headers = {}; }
|
|
235
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
236
|
+
var response, err_2;
|
|
237
|
+
return __generator(this, function (_a) {
|
|
238
|
+
switch (_a.label) {
|
|
239
|
+
case 0:
|
|
240
|
+
_a.trys.push([0, 2, , 3]);
|
|
241
|
+
return [4 /*yield*/, fetch(url, {
|
|
242
|
+
method: 'POST',
|
|
243
|
+
headers: Object.assign({
|
|
244
|
+
'Content-Type': 'application/json'
|
|
245
|
+
}, headers),
|
|
246
|
+
body: JSON.stringify(data) // body data type must match "Content-Type" header
|
|
247
|
+
})];
|
|
248
|
+
case 1:
|
|
249
|
+
response = _a.sent();
|
|
250
|
+
return [2 /*return*/, response.status === 200 ? response.json() : {}];
|
|
251
|
+
case 2:
|
|
252
|
+
err_2 = _a.sent();
|
|
253
|
+
logger.logDebug(err_2);
|
|
254
|
+
return [2 /*return*/, {}];
|
|
255
|
+
case 3: return [2 /*return*/];
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
export function get(url, headers) {
|
|
261
|
+
if (url === void 0) { url = ''; }
|
|
262
|
+
if (headers === void 0) { headers = {}; }
|
|
263
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
264
|
+
var response, err_3;
|
|
265
|
+
return __generator(this, function (_a) {
|
|
266
|
+
switch (_a.label) {
|
|
267
|
+
case 0:
|
|
268
|
+
_a.trys.push([0, 2, , 3]);
|
|
269
|
+
return [4 /*yield*/, fetch(url, {
|
|
270
|
+
method: 'GET',
|
|
271
|
+
headers: Object.assign({
|
|
272
|
+
'Accept': 'application/json',
|
|
273
|
+
'Content-Type': 'application/json'
|
|
274
|
+
}, headers)
|
|
275
|
+
})];
|
|
276
|
+
case 1:
|
|
277
|
+
response = _a.sent();
|
|
278
|
+
return [2 /*return*/, response.status === 200 ? response.json() : {}];
|
|
279
|
+
case 2:
|
|
280
|
+
err_3 = _a.sent();
|
|
281
|
+
logger.logDebug(err_3);
|
|
282
|
+
return [2 /*return*/, null];
|
|
283
|
+
case 3: return [2 /*return*/];
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=network.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.service.js","sourceRoot":"","sources":["../src/network.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var OptionMessages = /** @class */ (function () {
|
|
2
|
+
function OptionMessages() {
|
|
3
|
+
}
|
|
4
|
+
OptionMessages.partialEndpoint = function (name) {
|
|
5
|
+
return "You have set custom uris without specifying the ".concat(name, " URI; connections may not work properly");
|
|
6
|
+
};
|
|
7
|
+
OptionMessages.invalidParam = function (name) {
|
|
8
|
+
return "The ".concat(name, " option is not passed in or its value is invalid");
|
|
9
|
+
};
|
|
10
|
+
OptionMessages.mandatory = function (name) {
|
|
11
|
+
return "".concat(name, " is mandatory");
|
|
12
|
+
};
|
|
13
|
+
return OptionMessages;
|
|
14
|
+
}());
|
|
15
|
+
export default OptionMessages;
|
|
16
|
+
//# sourceMappingURL=optionMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optionMessages.js","sourceRoot":"","sources":["../src/optionMessages.ts"],"names":[],"mappings":"AAAA;IAAA;IAYA,CAAC;IAXQ,8BAAe,GAAtB,UAAuB,IAAY;QACjC,OAAO,0DAAoD,IAAI,4CAA0C,CAAC;IAC5G,CAAC;IAEM,2BAAY,GAAnB,UAAoB,IAAY;QAC9B,OAAO,cAAQ,IAAI,qDAAmD,CAAC;IACzE,CAAC;IAEM,wBAAS,GAAhB,UAAiB,IAAY;QAC3B,OAAO,UAAI,IAAI,kBAAgB,CAAC;IAClC,CAAC;IACH,qBAAC;AAAD,CAAC,AAZD,IAYC"}
|
package/esm/queue.d.ts
ADDED
package/esm/queue.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
+
};
|
|
10
|
+
import { eventHub } from "./events";
|
|
11
|
+
var Queue = /** @class */ (function () {
|
|
12
|
+
// flushLimit === 0 means no limit
|
|
13
|
+
// and
|
|
14
|
+
function Queue(flushLimit, arriveflushLimitTopic) {
|
|
15
|
+
if (flushLimit === void 0) { flushLimit = 0; }
|
|
16
|
+
if (arriveflushLimitTopic === void 0) { arriveflushLimitTopic = ''; }
|
|
17
|
+
this.flushLimit = flushLimit;
|
|
18
|
+
this.arriveflushLimitTopic = arriveflushLimitTopic;
|
|
19
|
+
this.queue = [];
|
|
20
|
+
}
|
|
21
|
+
Queue.prototype.add = function (element) {
|
|
22
|
+
this.queue.push(element);
|
|
23
|
+
if (this.flushLimit > 0 && this.queue.length >= this.flushLimit) {
|
|
24
|
+
eventHub.emit(this.arriveflushLimitTopic, {});
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
Queue.prototype.flush = function () {
|
|
28
|
+
var allElements = __spreadArray([], this.queue, true);
|
|
29
|
+
this.queue = [];
|
|
30
|
+
return allElements;
|
|
31
|
+
};
|
|
32
|
+
return Queue;
|
|
33
|
+
}());
|
|
34
|
+
export { Queue };
|
|
35
|
+
//# sourceMappingURL=queue.js.map
|
package/esm/queue.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;IAEI,kCAAkC;IAClC,OAAO;IACP,eAAoB,UAAsB,EAAU,qBAAkC;QAAlE,2BAAA,EAAA,cAAsB;QAAU,sCAAA,EAAA,0BAAkC;QAAlE,eAAU,GAAV,UAAU,CAAY;QAAU,0BAAqB,GAArB,qBAAqB,CAAa;QAClF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,mBAAG,GAAH,UAAI,OAAU;QACV,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,qBAAK,GAAL;QACI,IAAM,WAAW,qBAAO,IAAI,CAAC,KAAK,OAAC,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACvB,CAAC;IACL,YAAC;AAAD,CAAC,AApBD,IAoBC"}
|
package/esm/store.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FeatureFlagValue, IDataStore, IFeatureFlag } from "./types";
|
|
2
|
+
declare class Store {
|
|
3
|
+
private _userId;
|
|
4
|
+
private _store;
|
|
5
|
+
constructor();
|
|
6
|
+
set userId(id: string);
|
|
7
|
+
getFeatureFlag(key: string): IFeatureFlag;
|
|
8
|
+
getVariation(key: string): FeatureFlagValue;
|
|
9
|
+
setFullData(data: IDataStore): void;
|
|
10
|
+
getFeatureFlags(): {
|
|
11
|
+
[key: string]: IFeatureFlag;
|
|
12
|
+
};
|
|
13
|
+
updateStorageBulk(data: IDataStore, storageKey: string, onlyInsertNewElement: boolean): void;
|
|
14
|
+
updateBulkFromRemote(data: IDataStore): void;
|
|
15
|
+
private _emitUpdateEvents;
|
|
16
|
+
private _dumpToStorage;
|
|
17
|
+
private _loadFromStorage;
|
|
18
|
+
}
|
|
19
|
+
declare const _default: Store;
|
|
20
|
+
export default _default;
|
package/esm/store.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { featureFlagEvaluatedTopic } from "./constants";
|
|
2
|
+
import { eventHub } from "./events";
|
|
3
|
+
import { logger } from "./logger";
|
|
4
|
+
import { FeatureFlagUpdateOperation, InsightType } from "./types";
|
|
5
|
+
import { parseVariation } from "./utils";
|
|
6
|
+
var DataStoreStorageKey = 'fb-datastore';
|
|
7
|
+
var Store = /** @class */ (function () {
|
|
8
|
+
function Store() {
|
|
9
|
+
this._userId = null;
|
|
10
|
+
this._store = {
|
|
11
|
+
featureFlags: {}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(Store.prototype, "userId", {
|
|
15
|
+
set: function (id) {
|
|
16
|
+
this._userId = id;
|
|
17
|
+
this._loadFromStorage();
|
|
18
|
+
},
|
|
19
|
+
enumerable: false,
|
|
20
|
+
configurable: true
|
|
21
|
+
});
|
|
22
|
+
Store.prototype.getFeatureFlag = function (key) {
|
|
23
|
+
return this._store.featureFlags[key];
|
|
24
|
+
};
|
|
25
|
+
Store.prototype.getVariation = function (key) {
|
|
26
|
+
var featureFlag = this._store.featureFlags[key];
|
|
27
|
+
if (!featureFlag) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
eventHub.emit(featureFlagEvaluatedTopic, {
|
|
31
|
+
insightType: InsightType.featureFlagUsage,
|
|
32
|
+
id: featureFlag.id,
|
|
33
|
+
timestamp: Date.now(),
|
|
34
|
+
sendToExperiment: featureFlag.sendToExperiment,
|
|
35
|
+
variation: featureFlag.variationOptions.find(function (o) { return o.value === featureFlag.variation; })
|
|
36
|
+
});
|
|
37
|
+
var variationType = featureFlag.variationType, variation = featureFlag.variation;
|
|
38
|
+
return parseVariation(variationType, variation);
|
|
39
|
+
};
|
|
40
|
+
Store.prototype.setFullData = function (data) {
|
|
41
|
+
this._store = {
|
|
42
|
+
featureFlags: {}
|
|
43
|
+
};
|
|
44
|
+
this._dumpToStorage(this._store);
|
|
45
|
+
this.updateBulkFromRemote(data);
|
|
46
|
+
};
|
|
47
|
+
Store.prototype.getFeatureFlags = function () {
|
|
48
|
+
return this._store.featureFlags;
|
|
49
|
+
};
|
|
50
|
+
Store.prototype.updateStorageBulk = function (data, storageKey, onlyInsertNewElement) {
|
|
51
|
+
var dataStoreStr = localStorage.getItem(storageKey);
|
|
52
|
+
var store = null;
|
|
53
|
+
try {
|
|
54
|
+
if (dataStoreStr && dataStoreStr.trim().length > 0) {
|
|
55
|
+
store = JSON.parse(dataStoreStr);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
logger.logDebug("error while loading local data store: ".concat(storageKey) + err);
|
|
60
|
+
}
|
|
61
|
+
if (!!store) {
|
|
62
|
+
var featureFlags_1 = data.featureFlags;
|
|
63
|
+
Object.keys(featureFlags_1).forEach(function (id) {
|
|
64
|
+
var remoteFf = featureFlags_1[id];
|
|
65
|
+
var localFf = store.featureFlags[id];
|
|
66
|
+
var predicate = !localFf || !onlyInsertNewElement;
|
|
67
|
+
if (predicate) {
|
|
68
|
+
store.featureFlags[remoteFf.id] = Object.assign({}, remoteFf);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
this._dumpToStorage(store, storageKey);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
Store.prototype.updateBulkFromRemote = function (data) {
|
|
75
|
+
var storageKey = "".concat(DataStoreStorageKey, "-").concat(this._userId);
|
|
76
|
+
this.updateStorageBulk(data, storageKey, false);
|
|
77
|
+
this._loadFromStorage();
|
|
78
|
+
};
|
|
79
|
+
Store.prototype._emitUpdateEvents = function (updatedFeatureFlags) {
|
|
80
|
+
if (updatedFeatureFlags.length > 0) {
|
|
81
|
+
updatedFeatureFlags.forEach(function (_a) {
|
|
82
|
+
var id = _a.id, operation = _a.operation, data = _a.data;
|
|
83
|
+
return eventHub.emit("ff_".concat(operation, ":").concat(data.id), data);
|
|
84
|
+
});
|
|
85
|
+
eventHub.emit("ff_".concat(FeatureFlagUpdateOperation.update), updatedFeatureFlags.map(function (item) { return item.data; }));
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
Store.prototype._dumpToStorage = function (store, localStorageKey) {
|
|
89
|
+
if (store) {
|
|
90
|
+
var storageKey_1 = localStorageKey || "".concat(DataStoreStorageKey, "-").concat(this._userId);
|
|
91
|
+
localStorage.setItem(storageKey_1, JSON.stringify(store));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
var storageKey = "".concat(DataStoreStorageKey, "-").concat(this._userId);
|
|
95
|
+
localStorage.setItem(storageKey, JSON.stringify(this._store));
|
|
96
|
+
};
|
|
97
|
+
Store.prototype._loadFromStorage = function () {
|
|
98
|
+
var _this = this;
|
|
99
|
+
try {
|
|
100
|
+
var storageKey = "".concat(DataStoreStorageKey, "-").concat(this._userId);
|
|
101
|
+
var dataStoreStr = localStorage.getItem(storageKey);
|
|
102
|
+
var shouldDumpToStorage = false;
|
|
103
|
+
if (dataStoreStr && dataStoreStr.trim().length > 0) {
|
|
104
|
+
// compare _store and dataStoreStr data and send notification if different
|
|
105
|
+
var storageData_1 = JSON.parse(dataStoreStr);
|
|
106
|
+
var updatedFeatureFlags = Object.keys(storageData_1.featureFlags).filter(function (key) {
|
|
107
|
+
var storageFf = storageData_1.featureFlags[key];
|
|
108
|
+
var ff = _this._store.featureFlags[key];
|
|
109
|
+
return !ff || storageFf.variation !== ff.variation || storageFf.variationType !== ff.variationType;
|
|
110
|
+
}).map(function (key) {
|
|
111
|
+
var storageFf = storageData_1.featureFlags[key];
|
|
112
|
+
var ff = _this._store.featureFlags[key];
|
|
113
|
+
return {
|
|
114
|
+
id: key,
|
|
115
|
+
operation: FeatureFlagUpdateOperation.update,
|
|
116
|
+
sendToExperiment: storageFf.sendToExperiment,
|
|
117
|
+
data: {
|
|
118
|
+
id: key,
|
|
119
|
+
oldValue: ff ? parseVariation(ff.variationType, ff.variation) : undefined,
|
|
120
|
+
newValue: parseVariation(storageFf.variationType, storageFf.variation)
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
this._store = storageData_1;
|
|
125
|
+
this._emitUpdateEvents(updatedFeatureFlags);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this._store = {
|
|
129
|
+
featureFlags: {}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (shouldDumpToStorage) {
|
|
133
|
+
this._dumpToStorage();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
logger.logDebug('error while loading local data store: ' + err);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
return Store;
|
|
141
|
+
}());
|
|
142
|
+
export default new Store();
|
|
143
|
+
//# sourceMappingURL=store.js.map
|
package/esm/store.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|