@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.
- package/README.md +5 -0
- package/package.json +8 -0
- package/src/$_StatsigGlobal.d.ts +10 -0
- package/src/$_StatsigGlobal.js +14 -0
- package/src/ClientInterfaces.d.ts +28 -0
- package/src/ClientInterfaces.js +2 -0
- package/src/Diagnostics.d.ts +5 -0
- package/src/Diagnostics.js +54 -0
- package/src/ErrorBoundary.d.ts +9 -0
- package/src/ErrorBoundary.js +131 -0
- package/src/EventLogger.d.ts +31 -0
- package/src/EventLogger.js +285 -0
- package/src/Hashing.d.ts +1 -0
- package/src/Hashing.js +13 -0
- package/src/Log.d.ts +14 -0
- package/src/Log.js +59 -0
- package/src/Monitoring.d.ts +3 -0
- package/src/Monitoring.js +33 -0
- package/src/NetworkCore.d.ts +22 -0
- package/src/NetworkCore.js +197 -0
- package/src/SessionID.d.ts +3 -0
- package/src/SessionID.js +13 -0
- package/src/StableID.d.ts +4 -0
- package/src/StableID.js +78 -0
- package/src/StatsigClientBase.d.ts +37 -0
- package/src/StatsigClientBase.js +272 -0
- package/src/StatsigClientEventEmitter.d.ts +33 -0
- package/src/StatsigClientEventEmitter.js +2 -0
- package/src/StatsigDataProvider.d.ts +9 -0
- package/src/StatsigDataProvider.js +2 -0
- package/src/StatsigEvent.d.ts +31 -0
- package/src/StatsigEvent.js +57 -0
- package/src/StatsigMetadata.d.ts +18 -0
- package/src/StatsigMetadata.js +25 -0
- package/src/StatsigOptionsCommon.d.ts +48 -0
- package/src/StatsigOptionsCommon.js +2 -0
- package/src/StatsigTypes.d.ts +22 -0
- package/src/StatsigTypes.js +31 -0
- package/src/StatsigUser.d.ts +24 -0
- package/src/StatsigUser.js +37 -0
- package/src/StorageProvider.d.ts +11 -0
- package/src/StorageProvider.js +110 -0
- package/src/UUID.d.ts +1 -0
- package/src/UUID.js +24 -0
- package/src/VisibilityChangeObserver.d.ts +13 -0
- package/src/VisibilityChangeObserver.js +45 -0
- package/src/__tests__/MockLocalStorage.d.ts +9 -0
- package/src/__tests__/MockLocalStorage.js +37 -0
- package/src/index.d.ts +23 -0
- package/src/index.js +52 -0
|
@@ -0,0 +1,110 @@
|
|
|
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.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
|
+
},
|
|
55
|
+
};
|
|
56
|
+
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
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
Log_1.Log.warn('Failed to get storage provider. Failling back to in memory store.');
|
|
75
|
+
}
|
|
76
|
+
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;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
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
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
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
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
exports.setObjectInStorage = setObjectInStorage;
|
package/src/UUID.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getUUID(): string;
|
package/src/UUID.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUUID = void 0;
|
|
4
|
+
function getUUID() {
|
|
5
|
+
var d = new Date().getTime();
|
|
6
|
+
var d2 = (typeof performance !== 'undefined' &&
|
|
7
|
+
performance.now &&
|
|
8
|
+
performance.now() * 1000) ||
|
|
9
|
+
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;
|
|
13
|
+
if (d > 0) {
|
|
14
|
+
r = (d + r) % 16 | 0;
|
|
15
|
+
d = Math.floor(d / 16);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
r = (d2 + r) % 16 | 0;
|
|
19
|
+
d2 = Math.floor(d2 / 16);
|
|
20
|
+
}
|
|
21
|
+
return (c === 'x' ? r : (r & 0x7) | 0x8).toString(16);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
exports.getUUID = getUUID;
|
|
@@ -0,0 +1,13 @@
|
|
|
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 {};
|
|
@@ -0,0 +1,45 @@
|
|
|
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 = null;
|
|
28
|
+
return VisibilityChangeObserver;
|
|
29
|
+
}());
|
|
30
|
+
exports.VisibilityChangeObserver = VisibilityChangeObserver;
|
|
31
|
+
if (typeof window !== 'undefined' &&
|
|
32
|
+
typeof window.addEventListener === 'function') {
|
|
33
|
+
window.addEventListener('blur', function () {
|
|
34
|
+
return VisibilityChangeObserver.notify('background');
|
|
35
|
+
});
|
|
36
|
+
window.addEventListener('beforeunload', function () {
|
|
37
|
+
return VisibilityChangeObserver.notify('background');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (typeof document !== 'undefined' &&
|
|
41
|
+
typeof document.addEventListener === 'function') {
|
|
42
|
+
document.addEventListener('visibilitychange', function () {
|
|
43
|
+
VisibilityChangeObserver.notify(document.visibilityState === 'visible' ? 'foreground' : 'background');
|
|
44
|
+
});
|
|
45
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockLocalStorage = void 0;
|
|
4
|
+
var actualLocalStorage = window.localStorage;
|
|
5
|
+
// todo: move to test-helpers (break circular dep)
|
|
6
|
+
var MockLocalStorage = /** @class */ (function () {
|
|
7
|
+
function MockLocalStorage() {
|
|
8
|
+
this.data = {};
|
|
9
|
+
}
|
|
10
|
+
MockLocalStorage.enabledMockStorage = function () {
|
|
11
|
+
var value = new MockLocalStorage();
|
|
12
|
+
Object.defineProperty(window, 'localStorage', {
|
|
13
|
+
value: value,
|
|
14
|
+
});
|
|
15
|
+
return value;
|
|
16
|
+
};
|
|
17
|
+
MockLocalStorage.disableMockStorage = function () {
|
|
18
|
+
Object.defineProperty(window, 'localStorage', {
|
|
19
|
+
value: actualLocalStorage,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
// LocalStorage Functions
|
|
23
|
+
MockLocalStorage.prototype.clear = function () {
|
|
24
|
+
this.data = {};
|
|
25
|
+
};
|
|
26
|
+
MockLocalStorage.prototype.getItem = function (key) {
|
|
27
|
+
return this.data[key] ? this.data[key] : null;
|
|
28
|
+
};
|
|
29
|
+
MockLocalStorage.prototype.setItem = function (key, value) {
|
|
30
|
+
this.data[key] = String(value);
|
|
31
|
+
};
|
|
32
|
+
MockLocalStorage.prototype.removeItem = function (key) {
|
|
33
|
+
delete this.data[key];
|
|
34
|
+
};
|
|
35
|
+
return MockLocalStorage;
|
|
36
|
+
}());
|
|
37
|
+
exports.MockLocalStorage = MockLocalStorage;
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Statsig Global should go first */
|
|
2
|
+
import './$_StatsigGlobal';
|
|
3
|
+
import { EventLogger } from './EventLogger';
|
|
4
|
+
export * from './$_StatsigGlobal';
|
|
5
|
+
export * from './ClientInterfaces';
|
|
6
|
+
export * from './ErrorBoundary';
|
|
7
|
+
export * from './Hashing';
|
|
8
|
+
export * from './StorageProvider';
|
|
9
|
+
export * from './Log';
|
|
10
|
+
export * from './Monitoring';
|
|
11
|
+
export * from './NetworkCore';
|
|
12
|
+
export * from './StableID';
|
|
13
|
+
export * from './StatsigClientBase';
|
|
14
|
+
export * from './StatsigClientEventEmitter';
|
|
15
|
+
export * from './StatsigDataProvider';
|
|
16
|
+
export * from './StatsigEvent';
|
|
17
|
+
export * from './StatsigMetadata';
|
|
18
|
+
export * from './StatsigOptionsCommon';
|
|
19
|
+
export * from './StatsigTypes';
|
|
20
|
+
export * from './StatsigUser';
|
|
21
|
+
export * from './UUID';
|
|
22
|
+
export * from './VisibilityChangeObserver';
|
|
23
|
+
export { EventLogger };
|
package/src/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
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
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
25
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.EventLogger = void 0;
|
|
29
|
+
/** Statsig Global should go first */
|
|
30
|
+
require("./$_StatsigGlobal");
|
|
31
|
+
var EventLogger_1 = require("./EventLogger");
|
|
32
|
+
Object.defineProperty(exports, "EventLogger", { enumerable: true, get: function () { return EventLogger_1.EventLogger; } });
|
|
33
|
+
__exportStar(require("./$_StatsigGlobal"), exports);
|
|
34
|
+
__exportStar(require("./ClientInterfaces"), exports);
|
|
35
|
+
__exportStar(require("./ErrorBoundary"), exports);
|
|
36
|
+
__exportStar(require("./Hashing"), exports);
|
|
37
|
+
__exportStar(require("./StorageProvider"), exports);
|
|
38
|
+
__exportStar(require("./Log"), exports);
|
|
39
|
+
__exportStar(require("./Monitoring"), exports);
|
|
40
|
+
__exportStar(require("./NetworkCore"), exports);
|
|
41
|
+
__exportStar(require("./StableID"), exports);
|
|
42
|
+
__exportStar(require("./StatsigClientBase"), exports);
|
|
43
|
+
__exportStar(require("./StatsigClientEventEmitter"), exports);
|
|
44
|
+
__exportStar(require("./StatsigDataProvider"), exports);
|
|
45
|
+
__exportStar(require("./StatsigEvent"), exports);
|
|
46
|
+
__exportStar(require("./StatsigMetadata"), exports);
|
|
47
|
+
__exportStar(require("./StatsigOptionsCommon"), exports);
|
|
48
|
+
__exportStar(require("./StatsigTypes"), exports);
|
|
49
|
+
__exportStar(require("./StatsigUser"), exports);
|
|
50
|
+
__exportStar(require("./UUID"), exports);
|
|
51
|
+
__exportStar(require("./VisibilityChangeObserver"), exports);
|
|
52
|
+
__STATSIG__ = __assign(__assign({}, (__STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {})), { EventLogger: EventLogger_1.EventLogger });
|