@mostly-good-metrics/javascript 0.1.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 +319 -0
- package/dist/cjs/client.js +416 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/index.js +65 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logger.js +64 -0
- package/dist/cjs/logger.js.map +1 -0
- package/dist/cjs/network.js +192 -0
- package/dist/cjs/network.js.map +1 -0
- package/dist/cjs/storage.js +227 -0
- package/dist/cjs/storage.js.map +1 -0
- package/dist/cjs/types.js +70 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils.js +249 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/client.js +412 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/logger.js +55 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/network.js +187 -0
- package/dist/esm/network.js.map +1 -0
- package/dist/esm/storage.js +221 -0
- package/dist/esm/storage.js.map +1 -0
- package/dist/esm/types.js +66 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils.js +236 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/client.d.ts +126 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.d.ts +37 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/network.d.ts +28 -0
- package/dist/types/network.d.ts.map +1 -0
- package/dist/types/storage.d.ts +76 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/types.d.ts +279 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +48 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +68 -0
- package/src/client.test.ts +346 -0
- package/src/client.ts +510 -0
- package/src/index.ts +79 -0
- package/src/logger.ts +63 -0
- package/src/network.ts +230 -0
- package/src/storage.test.ts +175 -0
- package/src/storage.ts +249 -0
- package/src/types.ts +347 -0
- package/src/utils.test.ts +239 -0
- package/src/utils.ts +315 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MostlyGoodMetrics JavaScript SDK
|
|
3
|
+
*
|
|
4
|
+
* A lightweight, framework-agnostic analytics library for web applications.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { MostlyGoodMetrics } from '@mostly-good-metrics/javascript';
|
|
9
|
+
*
|
|
10
|
+
* // Initialize the SDK
|
|
11
|
+
* MostlyGoodMetrics.configure({
|
|
12
|
+
* apiKey: 'mgm_proj_your_api_key',
|
|
13
|
+
* environment: 'production',
|
|
14
|
+
* });
|
|
15
|
+
*
|
|
16
|
+
* // Track events
|
|
17
|
+
* MostlyGoodMetrics.track('button_clicked', {
|
|
18
|
+
* button_id: 'submit',
|
|
19
|
+
* page: '/checkout',
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Identify users
|
|
23
|
+
* MostlyGoodMetrics.identify('user_123');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
// Main client
|
|
27
|
+
export { MostlyGoodMetrics } from './client';
|
|
28
|
+
// Error class
|
|
29
|
+
export { MGMError } from './types';
|
|
30
|
+
// Constants
|
|
31
|
+
export { SystemEvents, SystemProperties, DefaultConfiguration, Constraints, EVENT_NAME_REGEX, } from './types';
|
|
32
|
+
// Storage implementations (for custom storage adapters)
|
|
33
|
+
export { InMemoryEventStorage, LocalStorageEventStorage, createDefaultStorage } from './storage';
|
|
34
|
+
// Network client (for custom network implementations)
|
|
35
|
+
export { FetchNetworkClient, createDefaultNetworkClient } from './network';
|
|
36
|
+
// Utilities (for advanced usage)
|
|
37
|
+
export { generateUUID, getISOTimestamp, isValidEventName, validateEventName, sanitizeProperties, detectPlatform, detectDeviceType, getOSVersion, getDeviceModel, } from './utils';
|
|
38
|
+
// Logger (for debugging)
|
|
39
|
+
export { logger } from './logger';
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmB7C,cAAc;AACd,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,YAAY;AACZ,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,wDAAwD;AACxD,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjG,sDAAsD;AACtD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAE3E,iCAAiC;AACjC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,yBAAyB;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal logger for the MostlyGoodMetrics SDK.
|
|
3
|
+
* Only outputs when debug logging is enabled.
|
|
4
|
+
*/
|
|
5
|
+
const LOG_PREFIX = '[MostlyGoodMetrics]';
|
|
6
|
+
let debugEnabled = false;
|
|
7
|
+
/**
|
|
8
|
+
* Enable or disable debug logging.
|
|
9
|
+
*/
|
|
10
|
+
export function setDebugLogging(enabled) {
|
|
11
|
+
debugEnabled = enabled;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if debug logging is enabled.
|
|
15
|
+
*/
|
|
16
|
+
export function isDebugEnabled() {
|
|
17
|
+
return debugEnabled;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Log a debug message (only when debug logging is enabled).
|
|
21
|
+
*/
|
|
22
|
+
export function debug(message, ...args) {
|
|
23
|
+
if (debugEnabled) {
|
|
24
|
+
console.log(`${LOG_PREFIX} [DEBUG]`, message, ...args);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Log an info message (only when debug logging is enabled).
|
|
29
|
+
*/
|
|
30
|
+
export function info(message, ...args) {
|
|
31
|
+
if (debugEnabled) {
|
|
32
|
+
console.info(`${LOG_PREFIX} [INFO]`, message, ...args);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Log a warning message (always shown).
|
|
37
|
+
*/
|
|
38
|
+
export function warn(message, ...args) {
|
|
39
|
+
console.warn(`${LOG_PREFIX} [WARN]`, message, ...args);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Log an error message (always shown).
|
|
43
|
+
*/
|
|
44
|
+
export function error(message, ...args) {
|
|
45
|
+
console.error(`${LOG_PREFIX} [ERROR]`, message, ...args);
|
|
46
|
+
}
|
|
47
|
+
export const logger = {
|
|
48
|
+
setDebugLogging,
|
|
49
|
+
isDebugEnabled,
|
|
50
|
+
debug,
|
|
51
|
+
info,
|
|
52
|
+
warn,
|
|
53
|
+
error,
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;IACvD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;IACtD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;IACvD,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe;IACf,cAAc;IACd,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,KAAK;CACN,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { logger } from './logger';
|
|
2
|
+
import { Constraints, MGMError, } from './types';
|
|
3
|
+
const EVENTS_ENDPOINT = '/v1/events';
|
|
4
|
+
const REQUEST_TIMEOUT_MS = 60000; // 60 seconds
|
|
5
|
+
/**
|
|
6
|
+
* Compress data using gzip if available (browser CompressionStream API).
|
|
7
|
+
* Falls back to uncompressed data if compression is not available.
|
|
8
|
+
*/
|
|
9
|
+
async function compressIfNeeded(data) {
|
|
10
|
+
const bytes = new TextEncoder().encode(data);
|
|
11
|
+
// Only compress if payload exceeds threshold
|
|
12
|
+
if (bytes.length < Constraints.COMPRESSION_THRESHOLD_BYTES) {
|
|
13
|
+
return { data, compressed: false };
|
|
14
|
+
}
|
|
15
|
+
// Check if CompressionStream is available (modern browsers)
|
|
16
|
+
if (typeof CompressionStream === 'undefined') {
|
|
17
|
+
logger.debug('CompressionStream not available, sending uncompressed');
|
|
18
|
+
return { data, compressed: false };
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const stream = new Blob([bytes]).stream();
|
|
22
|
+
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
|
|
23
|
+
const compressedBlob = await new Response(compressedStream).blob();
|
|
24
|
+
logger.debug(`Compressed payload from ${bytes.length} to ${compressedBlob.size} bytes`);
|
|
25
|
+
return { data: compressedBlob, compressed: true };
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
logger.warn('Failed to compress payload, sending uncompressed', e);
|
|
29
|
+
return { data, compressed: false };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Default network client using the Fetch API.
|
|
34
|
+
*/
|
|
35
|
+
export class FetchNetworkClient {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.retryAfterTime = null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Send events to the MostlyGoodMetrics API.
|
|
41
|
+
*/
|
|
42
|
+
async sendEvents(payload, config) {
|
|
43
|
+
// Check rate limiting
|
|
44
|
+
if (this.isRateLimited()) {
|
|
45
|
+
const retryAfter = this.getRetryAfterTime();
|
|
46
|
+
const waitMs = retryAfter ? retryAfter.getTime() - Date.now() : 0;
|
|
47
|
+
logger.debug(`Rate limited, retry after ${Math.ceil(waitMs / 1000)}s`);
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
error: new MGMError('RATE_LIMITED', 'Rate limited, please retry later', {
|
|
51
|
+
retryAfter: Math.ceil(waitMs / 1000),
|
|
52
|
+
}),
|
|
53
|
+
shouldRetry: true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const url = `${config.baseURL}${EVENTS_ENDPOINT}`;
|
|
57
|
+
const jsonBody = JSON.stringify(payload);
|
|
58
|
+
const { data, compressed } = await compressIfNeeded(jsonBody);
|
|
59
|
+
const headers = {
|
|
60
|
+
'Content-Type': 'application/json',
|
|
61
|
+
'X-MGM-Key': config.apiKey,
|
|
62
|
+
};
|
|
63
|
+
if (config.bundleId) {
|
|
64
|
+
headers['X-MGM-Bundle-Id'] = config.bundleId;
|
|
65
|
+
}
|
|
66
|
+
if (compressed) {
|
|
67
|
+
headers['Content-Encoding'] = 'gzip';
|
|
68
|
+
}
|
|
69
|
+
logger.debug(`Sending ${payload.events.length} events to ${url}`);
|
|
70
|
+
try {
|
|
71
|
+
const controller = new AbortController();
|
|
72
|
+
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
73
|
+
const response = await fetch(url, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers,
|
|
76
|
+
body: data,
|
|
77
|
+
signal: controller.signal,
|
|
78
|
+
});
|
|
79
|
+
clearTimeout(timeoutId);
|
|
80
|
+
return this.handleResponse(response);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
84
|
+
logger.warn('Request timed out');
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: new MGMError('NETWORK_ERROR', 'Request timed out'),
|
|
88
|
+
shouldRetry: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
logger.error('Network error', e);
|
|
92
|
+
return {
|
|
93
|
+
success: false,
|
|
94
|
+
error: new MGMError('NETWORK_ERROR', e instanceof Error ? e.message : 'Unknown network error'),
|
|
95
|
+
shouldRetry: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Handle the API response and return appropriate result.
|
|
101
|
+
*/
|
|
102
|
+
handleResponse(response) {
|
|
103
|
+
const statusCode = response.status;
|
|
104
|
+
// Success
|
|
105
|
+
if (statusCode === 204 || statusCode === 200) {
|
|
106
|
+
logger.debug('Events sent successfully');
|
|
107
|
+
return { success: true };
|
|
108
|
+
}
|
|
109
|
+
// Rate limited
|
|
110
|
+
if (statusCode === 429) {
|
|
111
|
+
const retryAfterHeader = response.headers.get('Retry-After');
|
|
112
|
+
const retryAfterSeconds = retryAfterHeader ? parseInt(retryAfterHeader, 10) : 60;
|
|
113
|
+
this.retryAfterTime = new Date(Date.now() + retryAfterSeconds * 1000);
|
|
114
|
+
logger.warn(`Rate limited, retry after ${retryAfterSeconds}s`);
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: new MGMError('RATE_LIMITED', 'Rate limited by server', {
|
|
118
|
+
retryAfter: retryAfterSeconds,
|
|
119
|
+
statusCode,
|
|
120
|
+
}),
|
|
121
|
+
shouldRetry: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Client errors (4xx) - don't retry, drop events
|
|
125
|
+
if (statusCode >= 400 && statusCode < 500) {
|
|
126
|
+
const errorType = statusCode === 400
|
|
127
|
+
? 'BAD_REQUEST'
|
|
128
|
+
: statusCode === 401
|
|
129
|
+
? 'UNAUTHORIZED'
|
|
130
|
+
: statusCode === 403
|
|
131
|
+
? 'FORBIDDEN'
|
|
132
|
+
: 'BAD_REQUEST';
|
|
133
|
+
const errorMessage = `Server returned ${statusCode}`;
|
|
134
|
+
logger.error(errorMessage);
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: new MGMError(errorType, errorMessage, { statusCode }),
|
|
138
|
+
shouldRetry: false, // Drop events on client errors
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Server errors (5xx) - retry later
|
|
142
|
+
if (statusCode >= 500) {
|
|
143
|
+
const errorMessage = `Server error: ${statusCode}`;
|
|
144
|
+
logger.warn(errorMessage);
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
error: new MGMError('SERVER_ERROR', errorMessage, { statusCode }),
|
|
148
|
+
shouldRetry: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
// Unexpected status code
|
|
152
|
+
logger.warn(`Unexpected status code: ${statusCode}`);
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
error: new MGMError('UNKNOWN_ERROR', `Unexpected status code: ${statusCode}`, {
|
|
156
|
+
statusCode,
|
|
157
|
+
}),
|
|
158
|
+
shouldRetry: true,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if currently rate limited.
|
|
163
|
+
*/
|
|
164
|
+
isRateLimited() {
|
|
165
|
+
if (!this.retryAfterTime) {
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
if (Date.now() >= this.retryAfterTime.getTime()) {
|
|
169
|
+
this.retryAfterTime = null;
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get the time when rate limiting expires.
|
|
176
|
+
*/
|
|
177
|
+
getRetryAfterTime() {
|
|
178
|
+
return this.retryAfterTime;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create the default network client.
|
|
183
|
+
*/
|
|
184
|
+
export function createDefaultNetworkClient() {
|
|
185
|
+
return new FetchNetworkClient();
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { logger } from './logger';
|
|
2
|
+
import { Constraints, MGMError } from './types';
|
|
3
|
+
const STORAGE_KEY = 'mostlygoodmetrics_events';
|
|
4
|
+
const USER_ID_KEY = 'mostlygoodmetrics_user_id';
|
|
5
|
+
const APP_VERSION_KEY = 'mostlygoodmetrics_app_version';
|
|
6
|
+
/**
|
|
7
|
+
* Check if we're running in a browser environment with localStorage available.
|
|
8
|
+
*/
|
|
9
|
+
function isLocalStorageAvailable() {
|
|
10
|
+
try {
|
|
11
|
+
if (typeof window === 'undefined' || typeof localStorage === 'undefined') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const testKey = '__mgm_test__';
|
|
15
|
+
localStorage.setItem(testKey, 'test');
|
|
16
|
+
localStorage.removeItem(testKey);
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* In-memory event storage implementation.
|
|
25
|
+
* Used as a fallback when localStorage is not available,
|
|
26
|
+
* or for testing purposes.
|
|
27
|
+
*/
|
|
28
|
+
export class InMemoryEventStorage {
|
|
29
|
+
constructor(maxEvents = Constraints.MIN_STORED_EVENTS) {
|
|
30
|
+
this.events = [];
|
|
31
|
+
this.maxEvents = Math.max(maxEvents, Constraints.MIN_STORED_EVENTS);
|
|
32
|
+
}
|
|
33
|
+
async store(event) {
|
|
34
|
+
this.events.push(event);
|
|
35
|
+
// Trim oldest events if we exceed the limit
|
|
36
|
+
if (this.events.length > this.maxEvents) {
|
|
37
|
+
const excess = this.events.length - this.maxEvents;
|
|
38
|
+
this.events.splice(0, excess);
|
|
39
|
+
logger.debug(`Dropped ${excess} oldest events due to storage limit`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async fetchEvents(limit) {
|
|
43
|
+
return this.events.slice(0, limit);
|
|
44
|
+
}
|
|
45
|
+
async removeEvents(count) {
|
|
46
|
+
this.events.splice(0, count);
|
|
47
|
+
}
|
|
48
|
+
async eventCount() {
|
|
49
|
+
return this.events.length;
|
|
50
|
+
}
|
|
51
|
+
async clear() {
|
|
52
|
+
this.events = [];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Update the maximum number of stored events.
|
|
56
|
+
*/
|
|
57
|
+
setMaxEvents(maxEvents) {
|
|
58
|
+
this.maxEvents = Math.max(maxEvents, Constraints.MIN_STORED_EVENTS);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* LocalStorage-based event storage implementation.
|
|
63
|
+
* Persists events across page reloads and browser restarts.
|
|
64
|
+
*/
|
|
65
|
+
export class LocalStorageEventStorage {
|
|
66
|
+
constructor(maxEvents = Constraints.MIN_STORED_EVENTS) {
|
|
67
|
+
this.events = null;
|
|
68
|
+
this.maxEvents = Math.max(maxEvents, Constraints.MIN_STORED_EVENTS);
|
|
69
|
+
}
|
|
70
|
+
loadEvents() {
|
|
71
|
+
if (this.events !== null) {
|
|
72
|
+
return this.events;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const stored = localStorage.getItem(STORAGE_KEY);
|
|
76
|
+
if (stored) {
|
|
77
|
+
this.events = JSON.parse(stored);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.events = [];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
logger.warn('Failed to load events from localStorage', e);
|
|
85
|
+
this.events = [];
|
|
86
|
+
}
|
|
87
|
+
return this.events;
|
|
88
|
+
}
|
|
89
|
+
saveEvents() {
|
|
90
|
+
try {
|
|
91
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(this.events ?? []));
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
logger.error('Failed to save events to localStorage', e);
|
|
95
|
+
throw new MGMError('STORAGE_ERROR', 'Failed to save events to localStorage');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async store(event) {
|
|
99
|
+
const events = this.loadEvents();
|
|
100
|
+
events.push(event);
|
|
101
|
+
// Trim oldest events if we exceed the limit
|
|
102
|
+
if (events.length > this.maxEvents) {
|
|
103
|
+
const excess = events.length - this.maxEvents;
|
|
104
|
+
events.splice(0, excess);
|
|
105
|
+
logger.debug(`Dropped ${excess} oldest events due to storage limit`);
|
|
106
|
+
}
|
|
107
|
+
this.saveEvents();
|
|
108
|
+
}
|
|
109
|
+
async fetchEvents(limit) {
|
|
110
|
+
const events = this.loadEvents();
|
|
111
|
+
return events.slice(0, limit);
|
|
112
|
+
}
|
|
113
|
+
async removeEvents(count) {
|
|
114
|
+
const events = this.loadEvents();
|
|
115
|
+
events.splice(0, count);
|
|
116
|
+
this.saveEvents();
|
|
117
|
+
}
|
|
118
|
+
async eventCount() {
|
|
119
|
+
return this.loadEvents().length;
|
|
120
|
+
}
|
|
121
|
+
async clear() {
|
|
122
|
+
this.events = [];
|
|
123
|
+
try {
|
|
124
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
logger.warn('Failed to clear events from localStorage', e);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Update the maximum number of stored events.
|
|
132
|
+
*/
|
|
133
|
+
setMaxEvents(maxEvents) {
|
|
134
|
+
this.maxEvents = Math.max(maxEvents, Constraints.MIN_STORED_EVENTS);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Create the appropriate storage implementation based on the environment.
|
|
139
|
+
*/
|
|
140
|
+
export function createDefaultStorage(maxEvents) {
|
|
141
|
+
if (isLocalStorageAvailable()) {
|
|
142
|
+
logger.debug('Using LocalStorage for event persistence');
|
|
143
|
+
return new LocalStorageEventStorage(maxEvents);
|
|
144
|
+
}
|
|
145
|
+
logger.debug('LocalStorage not available, using in-memory storage');
|
|
146
|
+
return new InMemoryEventStorage(maxEvents);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Persistence helpers for user ID and app version.
|
|
150
|
+
* These use localStorage when available, otherwise fall back to in-memory.
|
|
151
|
+
*/
|
|
152
|
+
class PersistenceManager {
|
|
153
|
+
constructor() {
|
|
154
|
+
this.inMemoryUserId = null;
|
|
155
|
+
this.inMemoryAppVersion = null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get the persisted user ID.
|
|
159
|
+
*/
|
|
160
|
+
getUserId() {
|
|
161
|
+
if (isLocalStorageAvailable()) {
|
|
162
|
+
return localStorage.getItem(USER_ID_KEY);
|
|
163
|
+
}
|
|
164
|
+
return this.inMemoryUserId;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Set the user ID (persists across sessions).
|
|
168
|
+
*/
|
|
169
|
+
setUserId(userId) {
|
|
170
|
+
if (isLocalStorageAvailable()) {
|
|
171
|
+
if (userId) {
|
|
172
|
+
localStorage.setItem(USER_ID_KEY, userId);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
localStorage.removeItem(USER_ID_KEY);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
this.inMemoryUserId = userId;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get the persisted app version (for detecting updates).
|
|
182
|
+
*/
|
|
183
|
+
getAppVersion() {
|
|
184
|
+
if (isLocalStorageAvailable()) {
|
|
185
|
+
return localStorage.getItem(APP_VERSION_KEY);
|
|
186
|
+
}
|
|
187
|
+
return this.inMemoryAppVersion;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Set the app version.
|
|
191
|
+
*/
|
|
192
|
+
setAppVersion(version) {
|
|
193
|
+
if (isLocalStorageAvailable()) {
|
|
194
|
+
if (version) {
|
|
195
|
+
localStorage.setItem(APP_VERSION_KEY, version);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
localStorage.removeItem(APP_VERSION_KEY);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
this.inMemoryAppVersion = version;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Check if this is the first time the app has been opened.
|
|
205
|
+
* Uses localStorage to detect first-ever installation.
|
|
206
|
+
*/
|
|
207
|
+
isFirstLaunch() {
|
|
208
|
+
const FIRST_LAUNCH_KEY = 'mostlygoodmetrics_installed';
|
|
209
|
+
if (!isLocalStorageAvailable()) {
|
|
210
|
+
return false; // Can't reliably detect without persistence
|
|
211
|
+
}
|
|
212
|
+
const hasLaunched = localStorage.getItem(FIRST_LAUNCH_KEY);
|
|
213
|
+
if (!hasLaunched) {
|
|
214
|
+
localStorage.setItem(FIRST_LAUNCH_KEY, 'true');
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export const persistence = new PersistenceManager();
|
|
221
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for SDK errors.
|
|
3
|
+
*/
|
|
4
|
+
export class MGMError extends Error {
|
|
5
|
+
constructor(type, message, options) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'MGMError';
|
|
8
|
+
this.type = type;
|
|
9
|
+
this.retryAfter = options?.retryAfter;
|
|
10
|
+
this.statusCode = options?.statusCode;
|
|
11
|
+
// Maintains proper stack trace for where error was thrown (V8 engines)
|
|
12
|
+
if (Error.captureStackTrace) {
|
|
13
|
+
Error.captureStackTrace(this, MGMError);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* System event names (prefixed with $).
|
|
19
|
+
*/
|
|
20
|
+
export const SystemEvents = {
|
|
21
|
+
APP_INSTALLED: '$app_installed',
|
|
22
|
+
APP_UPDATED: '$app_updated',
|
|
23
|
+
APP_OPENED: '$app_opened',
|
|
24
|
+
APP_BACKGROUNDED: '$app_backgrounded',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* System property keys (prefixed with $).
|
|
28
|
+
*/
|
|
29
|
+
export const SystemProperties = {
|
|
30
|
+
DEVICE_TYPE: '$device_type',
|
|
31
|
+
DEVICE_MODEL: '$device_model',
|
|
32
|
+
VERSION: '$version',
|
|
33
|
+
PREVIOUS_VERSION: '$previous_version',
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Default configuration values.
|
|
37
|
+
*/
|
|
38
|
+
export const DefaultConfiguration = {
|
|
39
|
+
baseURL: 'https://mostlygoodmetrics.com',
|
|
40
|
+
environment: 'production',
|
|
41
|
+
maxBatchSize: 100,
|
|
42
|
+
flushInterval: 30,
|
|
43
|
+
maxStoredEvents: 10000,
|
|
44
|
+
enableDebugLogging: false,
|
|
45
|
+
trackAppLifecycleEvents: true,
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Validation constraints.
|
|
49
|
+
*/
|
|
50
|
+
export const Constraints = {
|
|
51
|
+
MAX_EVENT_NAME_LENGTH: 255,
|
|
52
|
+
MAX_BATCH_SIZE: 1000,
|
|
53
|
+
MIN_BATCH_SIZE: 1,
|
|
54
|
+
MIN_FLUSH_INTERVAL: 1,
|
|
55
|
+
MIN_STORED_EVENTS: 100,
|
|
56
|
+
MAX_STRING_PROPERTY_LENGTH: 1000,
|
|
57
|
+
MAX_PROPERTY_DEPTH: 3,
|
|
58
|
+
MAX_PROPERTY_SIZE_BYTES: 10 * 1024, // 10KB
|
|
59
|
+
COMPRESSION_THRESHOLD_BYTES: 1024, // 1KB
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Regular expression for validating event names.
|
|
63
|
+
* Must start with a letter (or $ for system events) followed by alphanumeric and underscores.
|
|
64
|
+
*/
|
|
65
|
+
export const EVENT_NAME_REGEX = /^\$?[a-zA-Z][a-zA-Z0-9_]*$/;
|
|
66
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AA4QA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAKjC,YACE,IAAkB,EAClB,OAAe,EACf,OAAsD;QAEtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QAEtC,uEAAuE;QACvE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa,EAAE,gBAAgB;IAC/B,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,aAAa;IACzB,gBAAgB,EAAE,mBAAmB;CAC7B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,eAAe;IAC7B,OAAO,EAAE,UAAU;IACnB,gBAAgB,EAAE,mBAAmB;CAC7B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,+BAA+B;IACxC,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,GAAG;IACjB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,uBAAuB,EAAE,IAAI;CACrB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,qBAAqB,EAAE,GAAG;IAC1B,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,CAAC;IACjB,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,GAAG;IACtB,0BAA0B,EAAE,IAAI;IAChC,kBAAkB,EAAE,CAAC;IACrB,uBAAuB,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;IAC3C,2BAA2B,EAAE,IAAI,EAAE,MAAM;CACjC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC"}
|