@statsig/client-core 0.0.1-beta.9 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/package.json +1 -1
  2. package/src/$_StatsigGlobal.d.ts +9 -1
  3. package/src/$_StatsigGlobal.js +29 -12
  4. package/src/CacheKey.d.ts +4 -0
  5. package/src/CacheKey.js +28 -0
  6. package/src/ClientInterfaces.d.ts +46 -12
  7. package/src/DataAdapterCore.d.ts +31 -0
  8. package/src/DataAdapterCore.js +196 -0
  9. package/src/Diagnostics.d.ts +1 -3
  10. package/src/Diagnostics.js +4 -49
  11. package/src/DownloadConfigSpecsResponse.d.ts +41 -0
  12. package/src/DownloadConfigSpecsResponse.js +2 -0
  13. package/src/ErrorBoundary.d.ts +7 -2
  14. package/src/ErrorBoundary.js +81 -88
  15. package/src/EvaluationOptions.d.ts +20 -0
  16. package/src/EvaluationOptions.js +2 -0
  17. package/src/EvaluationTypes.d.ts +39 -0
  18. package/src/EvaluationTypes.js +2 -0
  19. package/src/EventLogger.d.ts +15 -10
  20. package/src/EventLogger.js +216 -256
  21. package/src/Hashing.d.ts +2 -1
  22. package/src/Hashing.js +26 -7
  23. package/src/InitializeResponse.d.ts +20 -0
  24. package/src/InitializeResponse.js +2 -0
  25. package/src/Log.js +15 -34
  26. package/src/NetworkConfig.d.ts +19 -0
  27. package/src/NetworkConfig.js +19 -0
  28. package/src/NetworkCore.d.ts +17 -7
  29. package/src/NetworkCore.js +173 -196
  30. package/src/OverrideAdapter.d.ts +9 -0
  31. package/src/OverrideAdapter.js +2 -0
  32. package/src/SDKType.d.ts +8 -0
  33. package/src/SDKType.js +19 -0
  34. package/src/SafeJs.d.ts +6 -0
  35. package/src/SafeJs.js +41 -0
  36. package/src/SessionID.d.ts +17 -1
  37. package/src/SessionID.js +89 -8
  38. package/src/StableID.js +24 -53
  39. package/src/StatsigClientBase.d.ts +56 -19
  40. package/src/StatsigClientBase.js +126 -48
  41. package/src/StatsigClientEventEmitter.d.ts +54 -33
  42. package/src/StatsigDataAdapter.d.ts +103 -17
  43. package/src/StatsigDataAdapter.js +2 -0
  44. package/src/StatsigEvent.d.ts +10 -18
  45. package/src/StatsigEvent.js +41 -39
  46. package/src/StatsigMetadata.d.ts +1 -1
  47. package/src/StatsigMetadata.js +7 -18
  48. package/src/StatsigOptionsCommon.d.ts +84 -20
  49. package/src/StatsigTypeFactories.d.ts +6 -0
  50. package/src/StatsigTypeFactories.js +50 -0
  51. package/src/StatsigTypes.d.ts +28 -22
  52. package/src/StatsigTypes.js +0 -29
  53. package/src/StatsigUser.d.ts +7 -8
  54. package/src/StatsigUser.js +11 -24
  55. package/src/StorageProvider.d.ts +13 -8
  56. package/src/StorageProvider.js +66 -85
  57. package/src/TypedJsonParse.d.ts +8 -0
  58. package/src/TypedJsonParse.js +27 -0
  59. package/src/UUID.js +9 -5
  60. package/src/UrlOverrides.d.ts +1 -0
  61. package/src/UrlOverrides.js +15 -0
  62. package/src/UtitlityTypes.d.ts +3 -0
  63. package/src/UtitlityTypes.js +2 -0
  64. package/src/VisibilityObserving.d.ts +9 -0
  65. package/src/VisibilityObserving.js +39 -0
  66. package/src/index.d.ts +20 -4
  67. package/src/index.js +26 -18
  68. package/README.md +0 -8
  69. package/src/Monitoring.d.ts +0 -3
  70. package/src/Monitoring.js +0 -33
  71. package/src/VisibilityChangeObserver.d.ts +0 -13
  72. package/src/VisibilityChangeObserver.js +0 -48
  73. package/src/__tests__/MockLocalStorage.d.ts +0 -9
  74. package/src/__tests__/MockLocalStorage.js +0 -37
@@ -1,36 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUserStorageKey = exports.normalizeUser = void 0;
4
- var Hashing_1 = require("./Hashing");
5
- function normalizeUser(original, environment) {
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
- var copy = JSON.parse(JSON.stringify(original));
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
- throw new Error('User object must be convertable to JSON string.');
15
+ Log_1.Log.error('Failed to JSON.stringify user');
16
+ return {};
15
17
  }
16
18
  }
17
- exports.normalizeUser = normalizeUser;
18
- function getUserStorageKey(sdkKey, user) {
19
- return (0, Hashing_1.DJB2)(JSON.stringify(_getSortedObject({ sdkKey: sdkKey, user: user })));
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;
@@ -1,11 +1,16 @@
1
- type StorageProvider = {
2
- getItem: (key: string) => Promise<string | null>;
3
- setItem: (key: string, value: string) => Promise<void>;
4
- removeItem: (key: string) => Promise<void>;
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
- export declare const Storage: StorageProvider & {
7
- setProvider: (n: StorageProvider) => void;
9
+ type StorageProviderManagment = {
10
+ _setProvider: (newProvider: StorageProvider) => void;
11
+ _setDisabled: (isDisabled: boolean) => void;
8
12
  };
9
- export declare function getObjectFromStorage<T>(key: string): Promise<T | null>;
10
- export declare function setObjectInStorage(key: string, obj: unknown): Promise<void>;
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 {};
@@ -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.setObjectInStorage = exports.getObjectFromStorage = exports.Storage = void 0;
40
- var Log_1 = require("./Log");
41
- var inMemoryStore = {};
42
- var provider = {
43
- getItem: function (key) {
44
- var _a;
45
- return Promise.resolve((_a = inMemoryStore[key]) !== null && _a !== void 0 ? _a : null);
46
- },
47
- setItem: function (key, value) {
48
- inMemoryStore[key] = value;
49
- return Promise.resolve();
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
- if (typeof window !== 'undefined' && 'localStorage' in window) {
58
- provider = {
59
- getItem: function (key) {
60
- return Promise.resolve(localStorage.getItem(key));
61
- },
62
- setItem: function (key, value) {
63
- localStorage.setItem(key, value);
64
- return Promise.resolve();
65
- },
66
- removeItem: function (key) {
67
- localStorage.removeItem(key);
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 get storage provider. Failling back to in memory store.');
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
- getItem: function (key) { return provider.getItem(key); },
78
- setItem: function (key, value) { return provider.setItem(key, value); },
79
- removeItem: function (key) { return provider.removeItem(key); },
80
- setProvider: function (newProvider) {
81
- provider = newProvider;
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 getObjectFromStorage(key) {
85
- return __awaiter(this, void 0, void 0, function () {
86
- var value;
87
- return __generator(this, function (_a) {
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.getObjectFromStorage = getObjectFromStorage;
98
- function setObjectInStorage(key, obj) {
99
- return __awaiter(this, void 0, void 0, function () {
100
- return __generator(this, function (_a) {
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.setObjectInStorage = setObjectInStorage;
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
- var d = new Date().getTime();
6
- var d2 = (typeof performance !== 'undefined' &&
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
- var y = '89ab'[Math.floor(Math.random() * 4)];
11
- return "xxxxxxxx-xxxx-4xxx-".concat(y, "xxx-xxxxxxxxxxxx").replace(/[xy]/g, function (c) {
12
- var r = Math.random() * 16;
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,3 @@
1
+ export type Flatten<T> = {
2
+ [K in keyof T]: T[K];
3
+ } & {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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 './StorageProvider';
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 './VisibilityChangeObserver';
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
- var EventLogger_1 = require("./EventLogger");
20
+ const EventLogger_1 = require("./EventLogger");
32
21
  Object.defineProperty(exports, "EventLogger", { enumerable: true, get: function () { return EventLogger_1.EventLogger; } });
33
- var Log_1 = require("./Log");
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("./StorageProvider"), exports);
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("./VisibilityChangeObserver"), exports);
53
- __STATSIG__ = __assign(__assign({}, (__STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {})), { EventLogger: EventLogger_1.EventLogger, Log: Log_1.Log });
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/README.md DELETED
@@ -1,8 +0,0 @@
1
- # Statsig - Core
2
-
3
- > [!IMPORTANT]
4
- > This version of the SDK is still in beta. The non-beta version can be found [here](https://github.com/statsig-io/js-client).
5
-
6
- The package that contains all the common logic shared by the various Statsig Javascript packages.
7
-
8
- Learn more by visiting: https://docs.statsig.com/client/javascript-sdk
@@ -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
- }