@statsig/client-core 0.0.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +5 -0
  2. package/package.json +8 -0
  3. package/src/$_StatsigGlobal.d.ts +10 -0
  4. package/src/$_StatsigGlobal.js +14 -0
  5. package/src/ClientInterfaces.d.ts +28 -0
  6. package/src/ClientInterfaces.js +2 -0
  7. package/src/Diagnostics.d.ts +5 -0
  8. package/src/Diagnostics.js +54 -0
  9. package/src/ErrorBoundary.d.ts +9 -0
  10. package/src/ErrorBoundary.js +131 -0
  11. package/src/EventLogger.d.ts +31 -0
  12. package/src/EventLogger.js +285 -0
  13. package/src/Hashing.d.ts +1 -0
  14. package/src/Hashing.js +13 -0
  15. package/src/Log.d.ts +14 -0
  16. package/src/Log.js +59 -0
  17. package/src/Monitoring.d.ts +3 -0
  18. package/src/Monitoring.js +33 -0
  19. package/src/NetworkCore.d.ts +22 -0
  20. package/src/NetworkCore.js +197 -0
  21. package/src/SessionID.d.ts +3 -0
  22. package/src/SessionID.js +13 -0
  23. package/src/StableID.d.ts +4 -0
  24. package/src/StableID.js +78 -0
  25. package/src/StatsigClientBase.d.ts +37 -0
  26. package/src/StatsigClientBase.js +272 -0
  27. package/src/StatsigClientEventEmitter.d.ts +33 -0
  28. package/src/StatsigClientEventEmitter.js +2 -0
  29. package/src/StatsigDataProvider.d.ts +9 -0
  30. package/src/StatsigDataProvider.js +2 -0
  31. package/src/StatsigEvent.d.ts +31 -0
  32. package/src/StatsigEvent.js +57 -0
  33. package/src/StatsigMetadata.d.ts +18 -0
  34. package/src/StatsigMetadata.js +25 -0
  35. package/src/StatsigOptionsCommon.d.ts +48 -0
  36. package/src/StatsigOptionsCommon.js +2 -0
  37. package/src/StatsigTypes.d.ts +22 -0
  38. package/src/StatsigTypes.js +31 -0
  39. package/src/StatsigUser.d.ts +24 -0
  40. package/src/StatsigUser.js +37 -0
  41. package/src/StorageProvider.d.ts +11 -0
  42. package/src/StorageProvider.js +110 -0
  43. package/src/UUID.d.ts +1 -0
  44. package/src/UUID.js +24 -0
  45. package/src/VisibilityChangeObserver.d.ts +13 -0
  46. package/src/VisibilityChangeObserver.js +45 -0
  47. package/src/__tests__/MockLocalStorage.d.ts +9 -0
  48. package/src/__tests__/MockLocalStorage.js +37 -0
  49. package/src/index.d.ts +23 -0
  50. package/src/index.js +52 -0
package/src/Log.js ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Log = exports.LogLevel = void 0;
5
+ function addTag(args) {
6
+ args.unshift('[Statsig]');
7
+ return args; // ['[Statsig]', ...args];
8
+ }
9
+ var LogLevel;
10
+ (function (LogLevel) {
11
+ LogLevel[LogLevel["None"] = 0] = "None";
12
+ LogLevel[LogLevel["Error"] = 1] = "Error";
13
+ LogLevel[LogLevel["Warn"] = 2] = "Warn";
14
+ LogLevel[LogLevel["Info"] = 3] = "Info";
15
+ LogLevel[LogLevel["Debug"] = 4] = "Debug";
16
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
17
+ var Log = /** @class */ (function () {
18
+ function Log() {
19
+ }
20
+ Log.info = function () {
21
+ var args = [];
22
+ for (var _i = 0; _i < arguments.length; _i++) {
23
+ args[_i] = arguments[_i];
24
+ }
25
+ if (this.level >= LogLevel.Info) {
26
+ console.info.apply(console, addTag(args));
27
+ }
28
+ };
29
+ Log.debug = function () {
30
+ var args = [];
31
+ for (var _i = 0; _i < arguments.length; _i++) {
32
+ args[_i] = arguments[_i];
33
+ }
34
+ if (this.level >= LogLevel.Debug) {
35
+ console.debug.apply(console, addTag(args));
36
+ }
37
+ };
38
+ Log.warn = function () {
39
+ var args = [];
40
+ for (var _i = 0; _i < arguments.length; _i++) {
41
+ args[_i] = arguments[_i];
42
+ }
43
+ if (this.level >= LogLevel.Warn) {
44
+ console.warn.apply(console, addTag(args));
45
+ }
46
+ };
47
+ Log.error = function () {
48
+ var args = [];
49
+ for (var _i = 0; _i < arguments.length; _i++) {
50
+ args[_i] = arguments[_i];
51
+ }
52
+ if (this.level >= LogLevel.Error) {
53
+ console.error.apply(console, addTag(args));
54
+ }
55
+ };
56
+ Log.level = LogLevel.Error;
57
+ return Log;
58
+ }());
59
+ exports.Log = Log;
@@ -0,0 +1,3 @@
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;
@@ -0,0 +1,33 @@
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;
@@ -0,0 +1,22 @@
1
+ import { StatsigOptionsCommon } from './StatsigOptionsCommon';
2
+ type RequestArgs = {
3
+ sdkKey: string;
4
+ url: string;
5
+ timeoutMs?: number;
6
+ retries?: number;
7
+ headers?: Record<string, string>;
8
+ };
9
+ type RequestArgsWithData = RequestArgs & {
10
+ data: Record<string, unknown>;
11
+ };
12
+ export declare class NetworkCore {
13
+ private _options;
14
+ private readonly _timeout;
15
+ constructor(_options: StatsigOptionsCommon | null);
16
+ post(args: RequestArgsWithData): Promise<string | null>;
17
+ get(args: RequestArgs): Promise<string | null>;
18
+ beacon(args: RequestArgsWithData): boolean;
19
+ private _sendRequest;
20
+ private _getPopulatedURL;
21
+ }
22
+ export {};
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
44
+ 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;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.NetworkCore = void 0;
66
+ var Diagnostics_1 = require("./Diagnostics");
67
+ var Log_1 = require("./Log");
68
+ var SessionID_1 = require("./SessionID");
69
+ var StableID_1 = require("./StableID");
70
+ var StatsigMetadata_1 = require("./StatsigMetadata");
71
+ var DEFAULT_TIMEOUT_MS = 10000;
72
+ var NetworkError = /** @class */ (function (_super) {
73
+ __extends(NetworkError, _super);
74
+ function NetworkError(message, errorDescription) {
75
+ var _this = _super.call(this, message) || this;
76
+ _this.errorDescription = errorDescription;
77
+ return _this;
78
+ }
79
+ return NetworkError;
80
+ }(Error));
81
+ var NetworkCore = /** @class */ (function () {
82
+ function NetworkCore(_options) {
83
+ var _a;
84
+ this._options = _options;
85
+ this._timeout = (_a = _options === null || _options === void 0 ? void 0 : _options.networkTimeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS;
86
+ }
87
+ NetworkCore.prototype.post = function (args) {
88
+ return __awaiter(this, void 0, void 0, function () {
89
+ var data, stableID, sessionID, body;
90
+ return __generator(this, function (_a) {
91
+ switch (_a.label) {
92
+ case 0:
93
+ data = args.data;
94
+ return [4 /*yield*/, StableID_1.StableID.get(args.sdkKey)];
95
+ case 1:
96
+ stableID = _a.sent();
97
+ sessionID = SessionID_1.SessionID.get(args.sdkKey);
98
+ body = JSON.stringify(__assign(__assign({}, data), { statsigMetadata: __assign(__assign({}, StatsigMetadata_1.StatsigMetadataProvider.get()), { stableID: stableID, sessionID: sessionID }) }));
99
+ return [2 /*return*/, this._sendRequest(__assign({ method: 'POST', body: body }, args))];
100
+ }
101
+ });
102
+ });
103
+ };
104
+ NetworkCore.prototype.get = function (args) {
105
+ return __awaiter(this, void 0, void 0, function () {
106
+ return __generator(this, function (_a) {
107
+ return [2 /*return*/, this._sendRequest(__assign({ method: 'GET' }, args))];
108
+ });
109
+ });
110
+ };
111
+ NetworkCore.prototype.beacon = function (args) {
112
+ var url = new URL(args.url);
113
+ url.searchParams.append('k', args.sdkKey);
114
+ return navigator.sendBeacon(url, JSON.stringify(args.data));
115
+ };
116
+ NetworkCore.prototype._sendRequest = function (args) {
117
+ return __awaiter(this, void 0, void 0, function () {
118
+ var method, body, retries, controller, handle, response, fullUrl, text, error_1, errorMessage;
119
+ var _this = this;
120
+ return __generator(this, function (_a) {
121
+ switch (_a.label) {
122
+ case 0:
123
+ method = args.method, body = args.body, retries = args.retries;
124
+ controller = new AbortController();
125
+ handle = setTimeout(function () { return controller.abort("Timeout of ".concat(_this._timeout, "ms expired.")); }, this._timeout);
126
+ response = null;
127
+ _a.label = 1;
128
+ case 1:
129
+ _a.trys.push([1, 4, , 5]);
130
+ fullUrl = this._getPopulatedURL(args);
131
+ return [4 /*yield*/, fetch(fullUrl, {
132
+ method: method,
133
+ body: body,
134
+ headers: __assign({
135
+ // Must set this content type to bypass cors
136
+ // can override via headers if necessary (recommended for logevent)
137
+ 'Content-Type': 'text/plain' }, args.headers),
138
+ signal: controller.signal,
139
+ })];
140
+ case 2:
141
+ response = _a.sent();
142
+ clearTimeout(handle);
143
+ return [4 /*yield*/, response.text()];
144
+ case 3:
145
+ text = _a.sent();
146
+ if (!response.ok) {
147
+ throw new NetworkError('Fetch Failure', text);
148
+ }
149
+ Diagnostics_1.Diagnostics.mark('_sendRequest:response-received', {
150
+ status: response.status,
151
+ contentLength: response.headers.get('content-length'),
152
+ });
153
+ return [2 /*return*/, text];
154
+ case 4:
155
+ error_1 = _a.sent();
156
+ errorMessage = _getErrorMessage(controller, error_1);
157
+ Diagnostics_1.Diagnostics.mark('_sendRequest:error', {
158
+ error: errorMessage,
159
+ status: response === null || response === void 0 ? void 0 : response.status,
160
+ contentLength: response === null || response === void 0 ? void 0 : response.headers.get('content-length'),
161
+ });
162
+ if (!retries || retries <= 0) {
163
+ Log_1.Log.error('A networking error occured.', errorMessage);
164
+ return [2 /*return*/, null];
165
+ }
166
+ return [2 /*return*/, this._sendRequest(__assign(__assign({}, args), { retries: retries - 1 }))];
167
+ case 5: return [2 /*return*/];
168
+ }
169
+ });
170
+ });
171
+ };
172
+ NetworkCore.prototype._getPopulatedURL = function (args) {
173
+ var statsigMetadata = StatsigMetadata_1.StatsigMetadataProvider.get();
174
+ var fullUrl = new URL(args.url);
175
+ fullUrl.searchParams.append('k', args.sdkKey);
176
+ fullUrl.searchParams.append('st', statsigMetadata.sdkType);
177
+ fullUrl.searchParams.append('sv', statsigMetadata.sdkVersion);
178
+ fullUrl.searchParams.append('t', String(Date.now()));
179
+ fullUrl.searchParams.append('sid', SessionID_1.SessionID.get(args.sdkKey));
180
+ return fullUrl.toString();
181
+ };
182
+ return NetworkCore;
183
+ }());
184
+ exports.NetworkCore = NetworkCore;
185
+ function _getErrorMessage(controller, error) {
186
+ if (controller.signal.aborted &&
187
+ typeof controller.signal.reason === 'string') {
188
+ return controller.signal.reason;
189
+ }
190
+ if (typeof error === 'string') {
191
+ return error;
192
+ }
193
+ if (error instanceof Error) {
194
+ return "".concat(error.name, ": ").concat(error.message);
195
+ }
196
+ return null;
197
+ }
@@ -0,0 +1,3 @@
1
+ export declare const SessionID: {
2
+ get: (sdkKey: string) => string;
3
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionID = void 0;
4
+ var UUID_1 = require("./UUID");
5
+ var SESSION_ID_MAP = {};
6
+ exports.SessionID = {
7
+ get: function (sdkKey) {
8
+ if (SESSION_ID_MAP[sdkKey] == null) {
9
+ SESSION_ID_MAP[sdkKey] = (0, UUID_1.getUUID)();
10
+ }
11
+ return SESSION_ID_MAP[sdkKey];
12
+ },
13
+ };
@@ -0,0 +1,4 @@
1
+ export declare const StableID: {
2
+ get: (sdkKey: string) => Promise<string>;
3
+ setOverride: (override: string, sdkKey: string) => void;
4
+ };
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StableID = void 0;
40
+ var Hashing_1 = require("./Hashing");
41
+ var Log_1 = require("./Log");
42
+ var StorageProvider_1 = require("./StorageProvider");
43
+ var UUID_1 = require("./UUID");
44
+ var PROMISE_MAP = {};
45
+ exports.StableID = {
46
+ get: function (sdkKey) { return __awaiter(void 0, void 0, void 0, function () {
47
+ return __generator(this, function (_a) {
48
+ if (PROMISE_MAP[sdkKey] == null) {
49
+ PROMISE_MAP[sdkKey] = _loadFromStorage(sdkKey).then(function (stableID) {
50
+ if (stableID != null) {
51
+ return stableID;
52
+ }
53
+ var newStableID = (0, UUID_1.getUUID)();
54
+ _persistToStorage(newStableID, sdkKey);
55
+ return newStableID;
56
+ });
57
+ }
58
+ return [2 /*return*/, PROMISE_MAP[sdkKey]];
59
+ });
60
+ }); },
61
+ setOverride: function (override, sdkKey) {
62
+ PROMISE_MAP[sdkKey] = Promise.resolve(override);
63
+ _persistToStorage(override, sdkKey);
64
+ },
65
+ };
66
+ function _getStableIDStorageKey(sdkKey) {
67
+ return "STATSIG_STABLE_ID:".concat((0, Hashing_1.DJB2)(sdkKey));
68
+ }
69
+ function _persistToStorage(stableID, sdkKey) {
70
+ var storageKey = _getStableIDStorageKey(sdkKey);
71
+ (0, StorageProvider_1.setObjectInStorage)(storageKey, stableID).catch(function () {
72
+ Log_1.Log.warn('Failed to save StableID');
73
+ });
74
+ }
75
+ function _loadFromStorage(sdkKey) {
76
+ var storageKey = _getStableIDStorageKey(sdkKey);
77
+ return (0, StorageProvider_1.getObjectFromStorage)(storageKey);
78
+ }
@@ -0,0 +1,37 @@
1
+ import './$_StatsigGlobal';
2
+ import { ErrorBoundary } from './ErrorBoundary';
3
+ import { EventLogger } from './EventLogger';
4
+ import { NetworkCore } from './NetworkCore';
5
+ import { StatsigClientEvent, StatsigClientEventCallback, StatsigClientEventData, StatsigClientEventEmitterInterface, StatsigLoadingStatus } from './StatsigClientEventEmitter';
6
+ import { DataSource, StatsigDataProvider } from './StatsigDataProvider';
7
+ import { StatsigEventInternal } from './StatsigEvent';
8
+ import { StatsigOptionsCommon } from './StatsigOptionsCommon';
9
+ import { StatsigUser } from './StatsigUser';
10
+ type DataProviderResult = {
11
+ data: string | null;
12
+ source: DataSource;
13
+ };
14
+ export type EvaluationOptions = {
15
+ disableExposureLog?: boolean;
16
+ };
17
+ export declare const DEFAULT_EVAL_OPTIONS: EvaluationOptions;
18
+ export type StatsigClientEmitEventFunc = (data: StatsigClientEventData) => void;
19
+ export declare class StatsigClientBase implements StatsigClientEventEmitterInterface {
20
+ loadingStatus: StatsigLoadingStatus;
21
+ protected _errorBoundary: ErrorBoundary;
22
+ protected _logger: EventLogger;
23
+ protected _sdkKey: string;
24
+ protected _dataProviders: StatsigDataProvider[];
25
+ private _listeners;
26
+ constructor(sdkKey: string, network: NetworkCore, options: StatsigOptionsCommon | null, dataProviders: StatsigDataProvider[]);
27
+ on(event: StatsigClientEvent | '*', listener: StatsigClientEventCallback): void;
28
+ off(event: StatsigClientEvent | '*', listener: StatsigClientEventCallback): void;
29
+ protected emit(data: StatsigClientEventData): void;
30
+ protected _setStatus(newStatus: StatsigLoadingStatus): void;
31
+ protected _getDataFromProviders(user?: StatsigUser): DataProviderResult;
32
+ protected _getDataFromProvidersAsync(user?: StatsigUser): Promise<DataProviderResult>;
33
+ protected _getDataPostInitFromProviders(user?: StatsigUser): Promise<DataProviderResult>;
34
+ protected _saveToDataProviders(data: string | null, user?: StatsigUser): void;
35
+ protected _enqueueExposure(options: EvaluationOptions, exposure: StatsigEventInternal): void;
36
+ }
37
+ export {};