@statsig/client-core 0.0.1-beta.9 → 1.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/README.md +0 -3
- package/package.json +1 -1
- package/src/$_StatsigGlobal.d.ts +9 -1
- package/src/$_StatsigGlobal.js +29 -12
- package/src/CacheKey.d.ts +4 -0
- package/src/CacheKey.js +27 -0
- package/src/ClientInterfaces.d.ts +46 -12
- package/src/DataAdapterCore.d.ts +31 -0
- package/src/DataAdapterCore.js +192 -0
- package/src/Diagnostics.d.ts +1 -3
- package/src/Diagnostics.js +4 -49
- package/src/DownloadConfigSpecsResponse.d.ts +41 -0
- package/src/DownloadConfigSpecsResponse.js +2 -0
- package/src/ErrorBoundary.d.ts +7 -2
- package/src/ErrorBoundary.js +81 -88
- package/src/EvaluationOptions.d.ts +20 -0
- package/src/EvaluationOptions.js +2 -0
- package/src/EvaluationTypes.d.ts +39 -0
- package/src/EvaluationTypes.js +2 -0
- package/src/EventLogger.d.ts +15 -10
- package/src/EventLogger.js +216 -256
- package/src/Hashing.d.ts +2 -1
- package/src/Hashing.js +26 -7
- package/src/InitializeResponse.d.ts +20 -0
- package/src/InitializeResponse.js +2 -0
- package/src/Log.js +15 -34
- package/src/NetworkConfig.d.ts +19 -0
- package/src/NetworkConfig.js +19 -0
- package/src/NetworkCore.d.ts +17 -7
- package/src/NetworkCore.js +173 -196
- package/src/OverrideAdapter.d.ts +9 -0
- package/src/OverrideAdapter.js +2 -0
- package/src/SDKType.d.ts +8 -0
- package/src/SDKType.js +19 -0
- package/src/SafeJs.d.ts +6 -0
- package/src/SafeJs.js +41 -0
- package/src/SessionID.d.ts +17 -1
- package/src/SessionID.js +89 -8
- package/src/StableID.js +24 -53
- package/src/StatsigClientBase.d.ts +56 -19
- package/src/StatsigClientBase.js +126 -48
- package/src/StatsigClientEventEmitter.d.ts +54 -33
- package/src/StatsigDataAdapter.d.ts +103 -17
- package/src/StatsigDataAdapter.js +2 -0
- package/src/StatsigEvent.d.ts +10 -18
- package/src/StatsigEvent.js +41 -39
- package/src/StatsigMetadata.d.ts +1 -1
- package/src/StatsigMetadata.js +7 -18
- package/src/StatsigOptionsCommon.d.ts +84 -20
- package/src/StatsigTypeFactories.d.ts +6 -0
- package/src/StatsigTypeFactories.js +50 -0
- package/src/StatsigTypes.d.ts +28 -22
- package/src/StatsigTypes.js +0 -29
- package/src/StatsigUser.d.ts +7 -8
- package/src/StatsigUser.js +11 -24
- package/src/StorageProvider.d.ts +13 -8
- package/src/StorageProvider.js +66 -85
- package/src/TypedJsonParse.d.ts +8 -0
- package/src/TypedJsonParse.js +27 -0
- package/src/UUID.js +9 -5
- package/src/UrlOverrides.d.ts +1 -0
- package/src/UrlOverrides.js +15 -0
- package/src/UtitlityTypes.d.ts +3 -0
- package/src/UtitlityTypes.js +2 -0
- package/src/VisibilityObserving.d.ts +9 -0
- package/src/VisibilityObserving.js +39 -0
- package/src/index.d.ts +20 -4
- package/src/index.js +26 -18
- package/src/Monitoring.d.ts +0 -3
- package/src/Monitoring.js +0 -33
- package/src/VisibilityChangeObserver.d.ts +0 -13
- package/src/VisibilityChangeObserver.js +0 -48
- package/src/__tests__/MockLocalStorage.d.ts +0 -9
- package/src/__tests__/MockLocalStorage.js +0 -37
package/src/StatsigUser.js
CHANGED
|
@@ -1,36 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
exports._getFullUserHash = exports._normalizeUser = void 0;
|
|
4
|
+
const Hashing_1 = require("./Hashing");
|
|
5
|
+
const Log_1 = require("./Log");
|
|
6
|
+
function _normalizeUser(original, environment) {
|
|
6
7
|
try {
|
|
7
|
-
|
|
8
|
+
const copy = JSON.parse(JSON.stringify(original));
|
|
8
9
|
if (environment != null) {
|
|
9
10
|
copy.statsigEnvironment = environment;
|
|
10
11
|
}
|
|
11
12
|
return copy;
|
|
12
13
|
}
|
|
13
14
|
catch (error) {
|
|
14
|
-
|
|
15
|
+
Log_1.Log.error('Failed to JSON.stringify user');
|
|
16
|
+
return {};
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
|
-
exports.
|
|
18
|
-
function
|
|
19
|
-
return (0, Hashing_1.
|
|
20
|
-
}
|
|
21
|
-
exports.getUserStorageKey = getUserStorageKey;
|
|
22
|
-
function _getSortedObject(object) {
|
|
23
|
-
if (object == null) {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
var keys = Object.keys(object).sort();
|
|
27
|
-
var sortedObject = {};
|
|
28
|
-
keys.forEach(function (key) {
|
|
29
|
-
var value = object[key];
|
|
30
|
-
if (value instanceof Object) {
|
|
31
|
-
value = _getSortedObject(value);
|
|
32
|
-
}
|
|
33
|
-
sortedObject[key] = value;
|
|
34
|
-
});
|
|
35
|
-
return sortedObject;
|
|
19
|
+
exports._normalizeUser = _normalizeUser;
|
|
20
|
+
function _getFullUserHash(user) {
|
|
21
|
+
return user ? (0, Hashing_1._DJB2Object)(user) : null;
|
|
36
22
|
}
|
|
23
|
+
exports._getFullUserHash = _getFullUserHash;
|
package/src/StorageProvider.d.ts
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
type StorageProvider = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export type StorageProvider = {
|
|
2
|
+
_getProviderName: () => string;
|
|
3
|
+
_getItem: (key: string) => Promise<string | null>;
|
|
4
|
+
_setItem: (key: string, value: string) => Promise<void>;
|
|
5
|
+
_removeItem: (key: string) => Promise<void>;
|
|
6
|
+
_getAllKeys: () => Promise<readonly string[]>;
|
|
7
|
+
_getItemSync?: (key: string) => string | null;
|
|
5
8
|
};
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
type StorageProviderManagment = {
|
|
10
|
+
_setProvider: (newProvider: StorageProvider) => void;
|
|
11
|
+
_setDisabled: (isDisabled: boolean) => void;
|
|
8
12
|
};
|
|
9
|
-
export declare
|
|
10
|
-
export declare function
|
|
13
|
+
export declare const Storage: StorageProvider & StorageProviderManagment;
|
|
14
|
+
export declare function _getObjectFromStorage<T>(key: string): Promise<T | null>;
|
|
15
|
+
export declare function _setObjectInStorage(key: string, obj: unknown): Promise<void>;
|
|
11
16
|
export {};
|
package/src/StorageProvider.js
CHANGED
|
@@ -8,103 +8,84 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
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;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
removeItem: function (key) {
|
|
52
|
-
delete inMemoryStore[key];
|
|
53
|
-
return Promise.resolve();
|
|
54
|
-
},
|
|
12
|
+
exports._setObjectInStorage = exports._getObjectFromStorage = exports.Storage = void 0;
|
|
13
|
+
const Log_1 = require("./Log");
|
|
14
|
+
const SafeJs_1 = require("./SafeJs");
|
|
15
|
+
const inMemoryStore = {};
|
|
16
|
+
const _resolve = (input) => Promise.resolve(input);
|
|
17
|
+
const _inMemoryProvider = {
|
|
18
|
+
_getProviderName: () => 'InMemory',
|
|
19
|
+
_getItemSync: (key) => inMemoryStore[key] ? inMemoryStore[key] : null,
|
|
20
|
+
_getItem: (key) => _resolve(inMemoryStore[key] ? inMemoryStore[key] : null),
|
|
21
|
+
_setItem: (key, value) => ((inMemoryStore[key] = value), _resolve()),
|
|
22
|
+
_removeItem: (key) => (delete inMemoryStore[key], _resolve()),
|
|
23
|
+
_getAllKeys: () => _resolve(Object.keys(inMemoryStore)),
|
|
55
24
|
};
|
|
25
|
+
let _localStorageProvider = null;
|
|
56
26
|
try {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return Promise.resolve();
|
|
69
|
-
},
|
|
27
|
+
const win = (0, SafeJs_1._getWindowSafe)();
|
|
28
|
+
if (win &&
|
|
29
|
+
win.localStorage &&
|
|
30
|
+
typeof win.localStorage.getItem === 'function') {
|
|
31
|
+
_localStorageProvider = {
|
|
32
|
+
_getProviderName: () => 'LocalStorage',
|
|
33
|
+
_getItemSync: (key) => win.localStorage.getItem(key),
|
|
34
|
+
_getItem: (key) => _resolve(win.localStorage.getItem(key)),
|
|
35
|
+
_setItem: (key, value) => (win.localStorage.setItem(key, value), _resolve()),
|
|
36
|
+
_removeItem: (key) => (win.localStorage.removeItem(key), _resolve()),
|
|
37
|
+
_getAllKeys: () => _resolve(Object.keys(win.localStorage)),
|
|
70
38
|
};
|
|
71
39
|
}
|
|
72
40
|
}
|
|
73
41
|
catch (error) {
|
|
74
|
-
Log_1.Log.warn('Failed to
|
|
42
|
+
Log_1.Log.warn('Failed to setup localStorageProvider.');
|
|
43
|
+
}
|
|
44
|
+
let _main = _localStorageProvider !== null && _localStorageProvider !== void 0 ? _localStorageProvider : _inMemoryProvider;
|
|
45
|
+
let _current = _main;
|
|
46
|
+
function _inMemoryBreaker(get) {
|
|
47
|
+
try {
|
|
48
|
+
return get();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error instanceof Error && error.name === 'SecurityError') {
|
|
52
|
+
exports.Storage._setProvider(_inMemoryProvider);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
75
57
|
}
|
|
76
58
|
exports.Storage = {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
59
|
+
_getProviderName: () => _current._getProviderName(),
|
|
60
|
+
_getItem: (key) => __awaiter(void 0, void 0, void 0, function* () { return _inMemoryBreaker(() => _current._getItem(key)); }),
|
|
61
|
+
_getItemSync: (key) => _inMemoryBreaker(() => _current._getItemSync ? _current._getItemSync(key) : null),
|
|
62
|
+
_setItem: (key, value) => _current._setItem(key, value),
|
|
63
|
+
_removeItem: (key) => _current._removeItem(key),
|
|
64
|
+
_getAllKeys: () => _current._getAllKeys(),
|
|
65
|
+
// StorageProviderManagment
|
|
66
|
+
_setProvider: (newProvider) => {
|
|
67
|
+
_main = newProvider;
|
|
68
|
+
_current = newProvider;
|
|
69
|
+
},
|
|
70
|
+
_setDisabled: (isDisabled) => {
|
|
71
|
+
if (isDisabled) {
|
|
72
|
+
_current = _inMemoryProvider;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
_current = _main;
|
|
76
|
+
}
|
|
82
77
|
},
|
|
83
78
|
};
|
|
84
|
-
function
|
|
85
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
86
|
-
|
|
87
|
-
return
|
|
88
|
-
switch (_a.label) {
|
|
89
|
-
case 0: return [4 /*yield*/, provider.getItem(key)];
|
|
90
|
-
case 1:
|
|
91
|
-
value = _a.sent();
|
|
92
|
-
return [2 /*return*/, JSON.parse(value !== null && value !== void 0 ? value : 'null')];
|
|
93
|
-
}
|
|
94
|
-
});
|
|
79
|
+
function _getObjectFromStorage(key) {
|
|
80
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
const value = yield exports.Storage._getItem(key);
|
|
82
|
+
return JSON.parse(value !== null && value !== void 0 ? value : 'null');
|
|
95
83
|
});
|
|
96
84
|
}
|
|
97
|
-
exports.
|
|
98
|
-
function
|
|
99
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
100
|
-
|
|
101
|
-
switch (_a.label) {
|
|
102
|
-
case 0: return [4 /*yield*/, provider.setItem(key, JSON.stringify(obj))];
|
|
103
|
-
case 1:
|
|
104
|
-
_a.sent();
|
|
105
|
-
return [2 /*return*/];
|
|
106
|
-
}
|
|
107
|
-
});
|
|
85
|
+
exports._getObjectFromStorage = _getObjectFromStorage;
|
|
86
|
+
function _setObjectInStorage(key, obj) {
|
|
87
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
yield exports.Storage._setItem(key, JSON.stringify(obj));
|
|
108
89
|
});
|
|
109
90
|
}
|
|
110
|
-
exports.
|
|
91
|
+
exports._setObjectInStorage = _setObjectInStorage;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {string} data The values to parse into T
|
|
4
|
+
* @param {string} guard A field that must exists on the parsed object for the parse to be valid
|
|
5
|
+
* @param {string} error An error to print via Log.error() when parsing fails
|
|
6
|
+
* @returns {T | null} The parse object T or null if it failed
|
|
7
|
+
*/
|
|
8
|
+
export declare function _typedJsonParse<T>(data: string, guard: string, typeName: string): T | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._typedJsonParse = void 0;
|
|
4
|
+
const Log_1 = require("./Log");
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @param {string} data The values to parse into T
|
|
8
|
+
* @param {string} guard A field that must exists on the parsed object for the parse to be valid
|
|
9
|
+
* @param {string} error An error to print via Log.error() when parsing fails
|
|
10
|
+
* @returns {T | null} The parse object T or null if it failed
|
|
11
|
+
*/
|
|
12
|
+
function _typedJsonParse(data, guard, typeName) {
|
|
13
|
+
try {
|
|
14
|
+
const result = JSON.parse(data);
|
|
15
|
+
if (typeof result === 'object' &&
|
|
16
|
+
guard in result) {
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
catch (_a) {
|
|
22
|
+
// noop
|
|
23
|
+
}
|
|
24
|
+
Log_1.Log.error(`Failed to parse ${typeName}`);
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
exports._typedJsonParse = _typedJsonParse;
|
package/src/UUID.js
CHANGED
|
@@ -2,14 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getUUID = void 0;
|
|
4
4
|
function getUUID() {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
if (typeof crypto !== 'undefined' &&
|
|
6
|
+
typeof crypto.randomUUID === 'function') {
|
|
7
|
+
return crypto.randomUUID();
|
|
8
|
+
}
|
|
9
|
+
let d = new Date().getTime();
|
|
10
|
+
let d2 = (typeof performance !== 'undefined' &&
|
|
7
11
|
performance.now &&
|
|
8
12
|
performance.now() * 1000) ||
|
|
9
13
|
0;
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
14
|
+
const y = '89ab'[Math.floor(Math.random() * 4)];
|
|
15
|
+
return `xxxxxxxx-xxxx-4xxx-${y}xxx-xxxxxxxxxxxx`.replace(/[xy]/g, (c) => {
|
|
16
|
+
let r = Math.random() * 16;
|
|
13
17
|
if (d > 0) {
|
|
14
18
|
r = (d + r) % 16 | 0;
|
|
15
19
|
d = Math.floor(d / 16);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function _getOverridableUrl(overrideUrl: string | undefined, overrideApi: string | undefined, defaultEndpoint: string, defaultApi: string): string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._getOverridableUrl = void 0;
|
|
4
|
+
function _getOverridableUrl(overrideUrl, overrideApi, defaultEndpoint, defaultApi) {
|
|
5
|
+
if (overrideUrl) {
|
|
6
|
+
return overrideUrl;
|
|
7
|
+
}
|
|
8
|
+
else if (overrideApi) {
|
|
9
|
+
return `${overrideApi}${defaultEndpoint}`;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return `${defaultApi}${defaultEndpoint}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports._getOverridableUrl = _getOverridableUrl;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const FOREGROUND = "foreground";
|
|
2
|
+
declare const BACKGROUND = "background";
|
|
3
|
+
export type Visibility = typeof FOREGROUND | typeof BACKGROUND;
|
|
4
|
+
type VisibilityChangedCallback = (visibility: Visibility) => void;
|
|
5
|
+
export declare const _isCurrentlyVisible: () => boolean;
|
|
6
|
+
export declare const _isUnloading: () => boolean;
|
|
7
|
+
export declare const _subscribeToVisiblityChanged: (listener: VisibilityChangedCallback) => void;
|
|
8
|
+
export declare const _notifyVisibilityChanged: (visibility: Visibility) => void;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._notifyVisibilityChanged = exports._subscribeToVisiblityChanged = exports._isUnloading = exports._isCurrentlyVisible = void 0;
|
|
4
|
+
const SafeJs_1 = require("./SafeJs");
|
|
5
|
+
const FOREGROUND = 'foreground';
|
|
6
|
+
const BACKGROUND = 'background';
|
|
7
|
+
const LISTENERS = [];
|
|
8
|
+
let current = FOREGROUND;
|
|
9
|
+
let isUnloading = false;
|
|
10
|
+
const _isCurrentlyVisible = () => {
|
|
11
|
+
return current === FOREGROUND;
|
|
12
|
+
};
|
|
13
|
+
exports._isCurrentlyVisible = _isCurrentlyVisible;
|
|
14
|
+
const _isUnloading = () => isUnloading;
|
|
15
|
+
exports._isUnloading = _isUnloading;
|
|
16
|
+
const _subscribeToVisiblityChanged = (listener) => {
|
|
17
|
+
LISTENERS.unshift(listener);
|
|
18
|
+
};
|
|
19
|
+
exports._subscribeToVisiblityChanged = _subscribeToVisiblityChanged;
|
|
20
|
+
const _notifyVisibilityChanged = (visibility) => {
|
|
21
|
+
if (visibility === current) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
current = visibility;
|
|
25
|
+
LISTENERS.forEach((l) => l(visibility));
|
|
26
|
+
};
|
|
27
|
+
exports._notifyVisibilityChanged = _notifyVisibilityChanged;
|
|
28
|
+
(0, SafeJs_1._addWindowEventListenerSafe)('focus', () => {
|
|
29
|
+
isUnloading = false;
|
|
30
|
+
(0, exports._notifyVisibilityChanged)(FOREGROUND);
|
|
31
|
+
});
|
|
32
|
+
(0, SafeJs_1._addWindowEventListenerSafe)('blur', () => (0, exports._notifyVisibilityChanged)(BACKGROUND));
|
|
33
|
+
(0, SafeJs_1._addWindowEventListenerSafe)('beforeunload', () => {
|
|
34
|
+
isUnloading = true;
|
|
35
|
+
(0, exports._notifyVisibilityChanged)(BACKGROUND);
|
|
36
|
+
});
|
|
37
|
+
(0, SafeJs_1._addDocumentEventListenerSafe)('visibilitychange', () => {
|
|
38
|
+
(0, exports._notifyVisibilityChanged)(document.visibilityState === 'visible' ? FOREGROUND : BACKGROUND);
|
|
39
|
+
});
|
package/src/index.d.ts
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
/** Statsig Global should go first */
|
|
2
2
|
import './$_StatsigGlobal';
|
|
3
3
|
import { EventLogger } from './EventLogger';
|
|
4
|
+
import { Log } from './Log';
|
|
5
|
+
import { Storage } from './StorageProvider';
|
|
4
6
|
export * from './$_StatsigGlobal';
|
|
7
|
+
export * from './CacheKey';
|
|
5
8
|
export * from './ClientInterfaces';
|
|
9
|
+
export * from './DataAdapterCore';
|
|
10
|
+
export * from './DownloadConfigSpecsResponse';
|
|
6
11
|
export * from './ErrorBoundary';
|
|
12
|
+
export * from './EvaluationOptions';
|
|
13
|
+
export * from './EvaluationTypes';
|
|
7
14
|
export * from './Hashing';
|
|
8
|
-
export * from './
|
|
15
|
+
export * from './InitializeResponse';
|
|
9
16
|
export * from './Log';
|
|
10
|
-
export * from './Monitoring';
|
|
11
17
|
export * from './NetworkCore';
|
|
18
|
+
export * from './NetworkConfig';
|
|
19
|
+
export * from './OverrideAdapter';
|
|
20
|
+
export * from './SafeJs';
|
|
21
|
+
export * from './SDKType';
|
|
22
|
+
export * from './SessionID';
|
|
12
23
|
export * from './StableID';
|
|
13
24
|
export * from './StatsigClientBase';
|
|
14
25
|
export * from './StatsigClientEventEmitter';
|
|
@@ -16,8 +27,13 @@ export * from './StatsigDataAdapter';
|
|
|
16
27
|
export * from './StatsigEvent';
|
|
17
28
|
export * from './StatsigMetadata';
|
|
18
29
|
export * from './StatsigOptionsCommon';
|
|
30
|
+
export * from './StatsigTypeFactories';
|
|
19
31
|
export * from './StatsigTypes';
|
|
20
32
|
export * from './StatsigUser';
|
|
33
|
+
export * from './StorageProvider';
|
|
34
|
+
export * from './TypedJsonParse';
|
|
35
|
+
export * from './UrlOverrides';
|
|
36
|
+
export * from './UtitlityTypes';
|
|
21
37
|
export * from './UUID';
|
|
22
|
-
export * from './
|
|
23
|
-
export { EventLogger };
|
|
38
|
+
export * from './VisibilityObserving';
|
|
39
|
+
export { EventLogger, Storage, Log };
|
package/src/index.js
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
3
|
if (k2 === undefined) k2 = k;
|
|
15
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -25,20 +14,33 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
25
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
26
15
|
};
|
|
27
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.EventLogger = void 0;
|
|
17
|
+
exports.Log = exports.Storage = exports.EventLogger = void 0;
|
|
29
18
|
/** Statsig Global should go first */
|
|
30
19
|
require("./$_StatsigGlobal");
|
|
31
|
-
|
|
20
|
+
const EventLogger_1 = require("./EventLogger");
|
|
32
21
|
Object.defineProperty(exports, "EventLogger", { enumerable: true, get: function () { return EventLogger_1.EventLogger; } });
|
|
33
|
-
|
|
22
|
+
const Log_1 = require("./Log");
|
|
23
|
+
Object.defineProperty(exports, "Log", { enumerable: true, get: function () { return Log_1.Log; } });
|
|
24
|
+
const StatsigMetadata_1 = require("./StatsigMetadata");
|
|
25
|
+
const StorageProvider_1 = require("./StorageProvider");
|
|
26
|
+
Object.defineProperty(exports, "Storage", { enumerable: true, get: function () { return StorageProvider_1.Storage; } });
|
|
34
27
|
__exportStar(require("./$_StatsigGlobal"), exports);
|
|
28
|
+
__exportStar(require("./CacheKey"), exports);
|
|
35
29
|
__exportStar(require("./ClientInterfaces"), exports);
|
|
30
|
+
__exportStar(require("./DataAdapterCore"), exports);
|
|
31
|
+
__exportStar(require("./DownloadConfigSpecsResponse"), exports);
|
|
36
32
|
__exportStar(require("./ErrorBoundary"), exports);
|
|
33
|
+
__exportStar(require("./EvaluationOptions"), exports);
|
|
34
|
+
__exportStar(require("./EvaluationTypes"), exports);
|
|
37
35
|
__exportStar(require("./Hashing"), exports);
|
|
38
|
-
__exportStar(require("./
|
|
36
|
+
__exportStar(require("./InitializeResponse"), exports);
|
|
39
37
|
__exportStar(require("./Log"), exports);
|
|
40
|
-
__exportStar(require("./Monitoring"), exports);
|
|
41
38
|
__exportStar(require("./NetworkCore"), exports);
|
|
39
|
+
__exportStar(require("./NetworkConfig"), exports);
|
|
40
|
+
__exportStar(require("./OverrideAdapter"), exports);
|
|
41
|
+
__exportStar(require("./SafeJs"), exports);
|
|
42
|
+
__exportStar(require("./SDKType"), exports);
|
|
43
|
+
__exportStar(require("./SessionID"), exports);
|
|
42
44
|
__exportStar(require("./StableID"), exports);
|
|
43
45
|
__exportStar(require("./StatsigClientBase"), exports);
|
|
44
46
|
__exportStar(require("./StatsigClientEventEmitter"), exports);
|
|
@@ -46,8 +48,14 @@ __exportStar(require("./StatsigDataAdapter"), exports);
|
|
|
46
48
|
__exportStar(require("./StatsigEvent"), exports);
|
|
47
49
|
__exportStar(require("./StatsigMetadata"), exports);
|
|
48
50
|
__exportStar(require("./StatsigOptionsCommon"), exports);
|
|
51
|
+
__exportStar(require("./StatsigTypeFactories"), exports);
|
|
49
52
|
__exportStar(require("./StatsigTypes"), exports);
|
|
50
53
|
__exportStar(require("./StatsigUser"), exports);
|
|
54
|
+
__exportStar(require("./StorageProvider"), exports);
|
|
55
|
+
__exportStar(require("./TypedJsonParse"), exports);
|
|
56
|
+
__exportStar(require("./UrlOverrides"), exports);
|
|
57
|
+
__exportStar(require("./UtitlityTypes"), exports);
|
|
51
58
|
__exportStar(require("./UUID"), exports);
|
|
52
|
-
__exportStar(require("./
|
|
53
|
-
__STATSIG__ =
|
|
59
|
+
__exportStar(require("./VisibilityObserving"), exports);
|
|
60
|
+
__STATSIG__ = Object.assign(Object.assign({}, (__STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {})), { Log: Log_1.Log,
|
|
61
|
+
SDK_VERSION: StatsigMetadata_1.SDK_VERSION });
|
package/src/Monitoring.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { ErrorBoundary } from './ErrorBoundary';
|
|
2
|
-
export declare function monitorClass<T extends new (...args: any[]) => any>(errorBoundary: ErrorBoundary, target: T, instance: unknown): void;
|
|
3
|
-
export declare function monitorFunction<T>(errorBoundary: ErrorBoundary, tag: string, func: () => T, instance: unknown): T;
|
package/src/Monitoring.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.monitorFunction = exports.monitorClass = void 0;
|
|
4
|
-
var Diagnostics_1 = require("./Diagnostics");
|
|
5
|
-
var StatsigClientBase_1 = require("./StatsigClientBase");
|
|
6
|
-
function monitorClass(errorBoundary, target, instance) {
|
|
7
|
-
var methods = Object.getOwnPropertyNames(target.prototype);
|
|
8
|
-
var obj = instance;
|
|
9
|
-
var _loop_1 = function (method) {
|
|
10
|
-
if (method === 'constructor' || typeof obj[method] !== 'function') {
|
|
11
|
-
return "continue";
|
|
12
|
-
}
|
|
13
|
-
var original = obj[method];
|
|
14
|
-
obj[method] = function () {
|
|
15
|
-
var _this = this;
|
|
16
|
-
var args = [];
|
|
17
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
18
|
-
args[_i] = arguments[_i];
|
|
19
|
-
}
|
|
20
|
-
return monitorFunction(errorBoundary, method, function () { return original.apply(_this, args); }, instance);
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {
|
|
24
|
-
var method = methods_1[_i];
|
|
25
|
-
_loop_1(method);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.monitorClass = monitorClass;
|
|
29
|
-
function monitorFunction(errorBoundary, tag, func, instance) {
|
|
30
|
-
var client = instance instanceof StatsigClientBase_1.StatsigClientBase ? instance['emit'] : undefined;
|
|
31
|
-
return errorBoundary.capture(tag, function () { return (0, Diagnostics_1.captureDiagnostics)(tag, function () { return func.apply(instance); }); }, client);
|
|
32
|
-
}
|
|
33
|
-
exports.monitorFunction = monitorFunction;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export type Visibility = 'foreground' | 'background';
|
|
2
|
-
type VisibilityChangeListener = {
|
|
3
|
-
onVisibilityChanged: (visibility: Visibility) => void;
|
|
4
|
-
};
|
|
5
|
-
export declare class VisibilityChangeObserver {
|
|
6
|
-
private static _listeners;
|
|
7
|
-
private static _current;
|
|
8
|
-
static isCurrentlyVisible(): boolean;
|
|
9
|
-
static add(listener: VisibilityChangeListener): void;
|
|
10
|
-
static remove(listener: VisibilityChangeListener): void;
|
|
11
|
-
static notify(visibility: Visibility): void;
|
|
12
|
-
}
|
|
13
|
-
export {};
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VisibilityChangeObserver = void 0;
|
|
4
|
-
var VisibilityChangeObserver = /** @class */ (function () {
|
|
5
|
-
function VisibilityChangeObserver() {
|
|
6
|
-
}
|
|
7
|
-
VisibilityChangeObserver.isCurrentlyVisible = function () {
|
|
8
|
-
return this._current === 'foreground';
|
|
9
|
-
};
|
|
10
|
-
VisibilityChangeObserver.add = function (listener) {
|
|
11
|
-
this._listeners.push(listener);
|
|
12
|
-
};
|
|
13
|
-
VisibilityChangeObserver.remove = function (listener) {
|
|
14
|
-
var index = this._listeners.indexOf(listener);
|
|
15
|
-
if (index !== -1) {
|
|
16
|
-
this._listeners.splice(index, 1);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
VisibilityChangeObserver.notify = function (visibility) {
|
|
20
|
-
if (visibility === this._current) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
this._current = visibility;
|
|
24
|
-
this._listeners.forEach(function (l) { return l.onVisibilityChanged(visibility); });
|
|
25
|
-
};
|
|
26
|
-
VisibilityChangeObserver._listeners = [];
|
|
27
|
-
VisibilityChangeObserver._current = 'foreground';
|
|
28
|
-
return VisibilityChangeObserver;
|
|
29
|
-
}());
|
|
30
|
-
exports.VisibilityChangeObserver = VisibilityChangeObserver;
|
|
31
|
-
if (typeof window !== 'undefined' &&
|
|
32
|
-
typeof window.addEventListener === 'function') {
|
|
33
|
-
window.addEventListener('focus', function () {
|
|
34
|
-
return VisibilityChangeObserver.notify('foreground');
|
|
35
|
-
});
|
|
36
|
-
window.addEventListener('blur', function () {
|
|
37
|
-
return VisibilityChangeObserver.notify('background');
|
|
38
|
-
});
|
|
39
|
-
window.addEventListener('beforeunload', function () {
|
|
40
|
-
return VisibilityChangeObserver.notify('background');
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
if (typeof document !== 'undefined' &&
|
|
44
|
-
typeof document.addEventListener === 'function') {
|
|
45
|
-
document.addEventListener('visibilitychange', function () {
|
|
46
|
-
VisibilityChangeObserver.notify(document.visibilityState === 'visible' ? 'foreground' : 'background');
|
|
47
|
-
});
|
|
48
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare class MockLocalStorage {
|
|
2
|
-
data: Record<string, string>;
|
|
3
|
-
static enabledMockStorage(): MockLocalStorage;
|
|
4
|
-
static disableMockStorage(): void;
|
|
5
|
-
clear(): void;
|
|
6
|
-
getItem(key: string): string | null;
|
|
7
|
-
setItem(key: string, value: string): void;
|
|
8
|
-
removeItem(key: string): void;
|
|
9
|
-
}
|