@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.
Files changed (54) hide show
  1. package/README.md +319 -0
  2. package/dist/cjs/client.js +416 -0
  3. package/dist/cjs/client.js.map +1 -0
  4. package/dist/cjs/index.js +65 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/logger.js +64 -0
  7. package/dist/cjs/logger.js.map +1 -0
  8. package/dist/cjs/network.js +192 -0
  9. package/dist/cjs/network.js.map +1 -0
  10. package/dist/cjs/storage.js +227 -0
  11. package/dist/cjs/storage.js.map +1 -0
  12. package/dist/cjs/types.js +70 -0
  13. package/dist/cjs/types.js.map +1 -0
  14. package/dist/cjs/utils.js +249 -0
  15. package/dist/cjs/utils.js.map +1 -0
  16. package/dist/esm/client.js +412 -0
  17. package/dist/esm/client.js.map +1 -0
  18. package/dist/esm/index.js +40 -0
  19. package/dist/esm/index.js.map +1 -0
  20. package/dist/esm/logger.js +55 -0
  21. package/dist/esm/logger.js.map +1 -0
  22. package/dist/esm/network.js +187 -0
  23. package/dist/esm/network.js.map +1 -0
  24. package/dist/esm/storage.js +221 -0
  25. package/dist/esm/storage.js.map +1 -0
  26. package/dist/esm/types.js +66 -0
  27. package/dist/esm/types.js.map +1 -0
  28. package/dist/esm/utils.js +236 -0
  29. package/dist/esm/utils.js.map +1 -0
  30. package/dist/types/client.d.ts +126 -0
  31. package/dist/types/client.d.ts.map +1 -0
  32. package/dist/types/index.d.ts +34 -0
  33. package/dist/types/index.d.ts.map +1 -0
  34. package/dist/types/logger.d.ts +37 -0
  35. package/dist/types/logger.d.ts.map +1 -0
  36. package/dist/types/network.d.ts +28 -0
  37. package/dist/types/network.d.ts.map +1 -0
  38. package/dist/types/storage.d.ts +76 -0
  39. package/dist/types/storage.d.ts.map +1 -0
  40. package/dist/types/types.d.ts +279 -0
  41. package/dist/types/types.d.ts.map +1 -0
  42. package/dist/types/utils.d.ts +48 -0
  43. package/dist/types/utils.d.ts.map +1 -0
  44. package/package.json +68 -0
  45. package/src/client.test.ts +346 -0
  46. package/src/client.ts +510 -0
  47. package/src/index.ts +79 -0
  48. package/src/logger.ts +63 -0
  49. package/src/network.ts +230 -0
  50. package/src/storage.test.ts +175 -0
  51. package/src/storage.ts +249 -0
  52. package/src/types.ts +347 -0
  53. package/src/utils.test.ts +239 -0
  54. package/src/utils.ts +315 -0
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MostlyGoodMetrics = void 0;
4
+ const logger_1 = require("./logger");
5
+ const network_1 = require("./network");
6
+ const storage_1 = require("./storage");
7
+ const types_1 = require("./types");
8
+ const utils_1 = require("./utils");
9
+ const FLUSH_DELAY_MS = 100; // Delay between batch sends
10
+ /**
11
+ * Main client for MostlyGoodMetrics.
12
+ * Use the static `configure` method to initialize, then use static methods or the instance.
13
+ */
14
+ class MostlyGoodMetrics {
15
+ /**
16
+ * Private constructor - use `configure` to create an instance.
17
+ */
18
+ constructor(config) {
19
+ this.flushTimer = null;
20
+ this.isFlushingInternal = false;
21
+ this.lifecycleSetup = false;
22
+ this.handleVisibilityChange = () => {
23
+ if (document.hidden) {
24
+ // App backgrounded
25
+ this.track(types_1.SystemEvents.APP_BACKGROUNDED);
26
+ void this.flush(); // Flush when going to background
27
+ }
28
+ else {
29
+ // App foregrounded
30
+ this.track(types_1.SystemEvents.APP_OPENED);
31
+ }
32
+ };
33
+ this.handleBeforeUnload = () => {
34
+ // Best-effort flush using sendBeacon if available
35
+ this.flushWithBeacon();
36
+ };
37
+ this.handlePageHide = () => {
38
+ // Best-effort flush using sendBeacon if available
39
+ this.flushWithBeacon();
40
+ };
41
+ this.config = (0, utils_1.resolveConfiguration)(config);
42
+ this.sessionIdValue = (0, utils_1.generateUUID)();
43
+ // Set up logging
44
+ (0, logger_1.setDebugLogging)(this.config.enableDebugLogging);
45
+ // Initialize storage
46
+ this.storage = this.config.storage ?? (0, storage_1.createDefaultStorage)(this.config.maxStoredEvents);
47
+ // Initialize network client
48
+ this.networkClient = this.config.networkClient ?? (0, network_1.createDefaultNetworkClient)();
49
+ logger_1.logger.info(`MostlyGoodMetrics initialized with environment: ${this.config.environment}`);
50
+ // Start auto-flush timer
51
+ this.startFlushTimer();
52
+ // Set up lifecycle tracking
53
+ if (this.config.trackAppLifecycleEvents) {
54
+ this.setupLifecycleTracking();
55
+ }
56
+ }
57
+ /**
58
+ * Configure and initialize the SDK.
59
+ * Returns the singleton instance.
60
+ */
61
+ static configure(config) {
62
+ if (!config.apiKey) {
63
+ throw new Error('API key is required');
64
+ }
65
+ if (MostlyGoodMetrics.instance) {
66
+ logger_1.logger.warn('MostlyGoodMetrics.configure called multiple times. Using existing instance.');
67
+ return MostlyGoodMetrics.instance;
68
+ }
69
+ MostlyGoodMetrics.instance = new MostlyGoodMetrics(config);
70
+ return MostlyGoodMetrics.instance;
71
+ }
72
+ /**
73
+ * Get the shared instance, or null if not configured.
74
+ */
75
+ static get shared() {
76
+ return MostlyGoodMetrics.instance;
77
+ }
78
+ /**
79
+ * Check if the SDK has been configured.
80
+ */
81
+ static get isConfigured() {
82
+ return MostlyGoodMetrics.instance !== null;
83
+ }
84
+ /**
85
+ * Reset the SDK (primarily for testing).
86
+ */
87
+ static reset() {
88
+ if (MostlyGoodMetrics.instance) {
89
+ MostlyGoodMetrics.instance.destroy();
90
+ MostlyGoodMetrics.instance = null;
91
+ }
92
+ }
93
+ // ============================================================
94
+ // Static convenience methods (delegate to shared instance)
95
+ // ============================================================
96
+ /**
97
+ * Track an event with the given name and optional properties.
98
+ */
99
+ static track(name, properties) {
100
+ MostlyGoodMetrics.instance?.track(name, properties);
101
+ }
102
+ /**
103
+ * Identify the current user.
104
+ */
105
+ static identify(userId) {
106
+ MostlyGoodMetrics.instance?.identify(userId);
107
+ }
108
+ /**
109
+ * Reset user identity.
110
+ */
111
+ static resetIdentity() {
112
+ MostlyGoodMetrics.instance?.resetIdentity();
113
+ }
114
+ /**
115
+ * Flush pending events to the server.
116
+ */
117
+ static flush() {
118
+ return MostlyGoodMetrics.instance?.flush() ?? Promise.resolve();
119
+ }
120
+ /**
121
+ * Start a new session.
122
+ */
123
+ static startNewSession() {
124
+ MostlyGoodMetrics.instance?.startNewSession();
125
+ }
126
+ /**
127
+ * Clear all pending events.
128
+ */
129
+ static clearPendingEvents() {
130
+ return MostlyGoodMetrics.instance?.clearPendingEvents() ?? Promise.resolve();
131
+ }
132
+ /**
133
+ * Get the count of pending events.
134
+ */
135
+ static getPendingEventCount() {
136
+ return MostlyGoodMetrics.instance?.getPendingEventCount() ?? Promise.resolve(0);
137
+ }
138
+ // ============================================================
139
+ // Instance properties
140
+ // ============================================================
141
+ /**
142
+ * Get the current user ID.
143
+ */
144
+ get userId() {
145
+ return storage_1.persistence.getUserId();
146
+ }
147
+ /**
148
+ * Get the current session ID.
149
+ */
150
+ get sessionId() {
151
+ return this.sessionIdValue;
152
+ }
153
+ /**
154
+ * Check if a flush operation is in progress.
155
+ */
156
+ get isFlushing() {
157
+ return this.isFlushingInternal;
158
+ }
159
+ /**
160
+ * Get the resolved configuration.
161
+ */
162
+ get configuration() {
163
+ return { ...this.config };
164
+ }
165
+ // ============================================================
166
+ // Instance methods
167
+ // ============================================================
168
+ /**
169
+ * Track an event with the given name and optional properties.
170
+ */
171
+ track(name, properties) {
172
+ try {
173
+ (0, utils_1.validateEventName)(name);
174
+ }
175
+ catch (e) {
176
+ logger_1.logger.error(`Invalid event name: ${name}`, e);
177
+ return;
178
+ }
179
+ const sanitizedProperties = (0, utils_1.sanitizeProperties)(properties);
180
+ // Add system properties
181
+ const mergedProperties = {
182
+ [types_1.SystemProperties.DEVICE_TYPE]: (0, utils_1.detectDeviceType)(),
183
+ [types_1.SystemProperties.DEVICE_MODEL]: (0, utils_1.getDeviceModel)(),
184
+ ...sanitizedProperties,
185
+ };
186
+ const event = {
187
+ name,
188
+ timestamp: (0, utils_1.getISOTimestamp)(),
189
+ userId: this.userId ?? undefined,
190
+ sessionId: this.sessionIdValue,
191
+ platform: (0, utils_1.detectPlatform)(),
192
+ appVersion: this.config.appVersion || undefined,
193
+ osVersion: this.config.osVersion || (0, utils_1.getOSVersion)() || undefined,
194
+ environment: this.config.environment,
195
+ properties: Object.keys(mergedProperties).length > 0 ? mergedProperties : undefined,
196
+ };
197
+ logger_1.logger.debug(`Tracking event: ${name}`, event);
198
+ // Store event asynchronously
199
+ this.storage.store(event).catch((e) => {
200
+ logger_1.logger.error('Failed to store event', e);
201
+ });
202
+ // Check if we should flush due to batch size
203
+ void this.checkBatchSize();
204
+ }
205
+ /**
206
+ * Identify the current user.
207
+ */
208
+ identify(userId) {
209
+ if (!userId) {
210
+ logger_1.logger.warn('identify called with empty userId');
211
+ return;
212
+ }
213
+ logger_1.logger.debug(`Identifying user: ${userId}`);
214
+ storage_1.persistence.setUserId(userId);
215
+ }
216
+ /**
217
+ * Reset user identity.
218
+ */
219
+ resetIdentity() {
220
+ logger_1.logger.debug('Resetting user identity');
221
+ storage_1.persistence.setUserId(null);
222
+ }
223
+ /**
224
+ * Start a new session.
225
+ */
226
+ startNewSession() {
227
+ this.sessionIdValue = (0, utils_1.generateUUID)();
228
+ logger_1.logger.debug(`Started new session: ${this.sessionIdValue}`);
229
+ }
230
+ /**
231
+ * Flush pending events to the server.
232
+ */
233
+ async flush() {
234
+ if (this.isFlushingInternal) {
235
+ logger_1.logger.debug('Flush already in progress');
236
+ return;
237
+ }
238
+ this.isFlushingInternal = true;
239
+ logger_1.logger.debug('Starting flush');
240
+ try {
241
+ await this.performFlush();
242
+ }
243
+ finally {
244
+ this.isFlushingInternal = false;
245
+ }
246
+ }
247
+ /**
248
+ * Clear all pending events.
249
+ */
250
+ async clearPendingEvents() {
251
+ logger_1.logger.debug('Clearing all pending events');
252
+ await this.storage.clear();
253
+ }
254
+ /**
255
+ * Get the count of pending events.
256
+ */
257
+ async getPendingEventCount() {
258
+ return this.storage.eventCount();
259
+ }
260
+ /**
261
+ * Clean up resources (stop timers, etc.).
262
+ */
263
+ destroy() {
264
+ this.stopFlushTimer();
265
+ this.removeLifecycleListeners();
266
+ logger_1.logger.debug('MostlyGoodMetrics instance destroyed');
267
+ }
268
+ // ============================================================
269
+ // Private methods
270
+ // ============================================================
271
+ async checkBatchSize() {
272
+ const count = await this.storage.eventCount();
273
+ if (count >= this.config.maxBatchSize) {
274
+ logger_1.logger.debug('Batch size threshold reached, triggering flush');
275
+ void this.flush();
276
+ }
277
+ }
278
+ async performFlush() {
279
+ let hasMoreEvents = true;
280
+ while (hasMoreEvents) {
281
+ const eventCount = await this.storage.eventCount();
282
+ if (eventCount === 0) {
283
+ logger_1.logger.debug('No events to flush');
284
+ break;
285
+ }
286
+ // Check rate limiting
287
+ if (this.networkClient.isRateLimited()) {
288
+ logger_1.logger.debug('Rate limited, skipping flush');
289
+ break;
290
+ }
291
+ const events = await this.storage.fetchEvents(this.config.maxBatchSize);
292
+ if (events.length === 0) {
293
+ break;
294
+ }
295
+ const payload = this.buildPayload(events);
296
+ const result = await this.networkClient.sendEvents(payload, this.config);
297
+ if (result.success) {
298
+ logger_1.logger.debug(`Successfully sent ${events.length} events`);
299
+ await this.storage.removeEvents(events.length);
300
+ }
301
+ else {
302
+ logger_1.logger.warn(`Failed to send events: ${result.error.message}`);
303
+ if (!result.shouldRetry) {
304
+ // Drop events on non-retryable errors (4xx)
305
+ logger_1.logger.warn('Dropping events due to non-retryable error');
306
+ await this.storage.removeEvents(events.length);
307
+ }
308
+ else {
309
+ // Keep events for retry on retryable errors
310
+ hasMoreEvents = false;
311
+ }
312
+ }
313
+ // Small delay between batches to avoid overwhelming the server
314
+ await (0, utils_1.delay)(FLUSH_DELAY_MS);
315
+ }
316
+ }
317
+ buildPayload(events) {
318
+ const context = {
319
+ platform: (0, utils_1.detectPlatform)(),
320
+ appVersion: this.config.appVersion || undefined,
321
+ osVersion: this.config.osVersion || (0, utils_1.getOSVersion)() || undefined,
322
+ userId: this.userId ?? undefined,
323
+ sessionId: this.sessionIdValue,
324
+ environment: this.config.environment,
325
+ };
326
+ return { events, context };
327
+ }
328
+ startFlushTimer() {
329
+ if (this.flushTimer) {
330
+ return;
331
+ }
332
+ this.flushTimer = setInterval(() => {
333
+ void this.flush();
334
+ }, this.config.flushInterval * 1000);
335
+ logger_1.logger.debug(`Started flush timer (${this.config.flushInterval}s interval)`);
336
+ }
337
+ stopFlushTimer() {
338
+ if (this.flushTimer) {
339
+ clearInterval(this.flushTimer);
340
+ this.flushTimer = null;
341
+ logger_1.logger.debug('Stopped flush timer');
342
+ }
343
+ }
344
+ setupLifecycleTracking() {
345
+ if (this.lifecycleSetup) {
346
+ return;
347
+ }
348
+ if (typeof window === 'undefined' || typeof document === 'undefined') {
349
+ logger_1.logger.debug('Not in browser environment, skipping lifecycle tracking');
350
+ return;
351
+ }
352
+ this.lifecycleSetup = true;
353
+ // Track app installed/updated
354
+ this.trackInstallOrUpdate();
355
+ // Track app opened
356
+ this.trackAppOpened();
357
+ // Track visibility changes (background/foreground)
358
+ document.addEventListener('visibilitychange', this.handleVisibilityChange);
359
+ // Flush on page unload
360
+ window.addEventListener('beforeunload', this.handleBeforeUnload);
361
+ window.addEventListener('pagehide', this.handlePageHide);
362
+ logger_1.logger.debug('Lifecycle tracking enabled');
363
+ }
364
+ removeLifecycleListeners() {
365
+ if (typeof document !== 'undefined') {
366
+ document.removeEventListener('visibilitychange', this.handleVisibilityChange);
367
+ }
368
+ if (typeof window !== 'undefined') {
369
+ window.removeEventListener('beforeunload', this.handleBeforeUnload);
370
+ window.removeEventListener('pagehide', this.handlePageHide);
371
+ }
372
+ }
373
+ trackInstallOrUpdate() {
374
+ const currentVersion = this.config.appVersion;
375
+ const previousVersion = storage_1.persistence.getAppVersion();
376
+ if (!currentVersion) {
377
+ // No version configured, skip install/update tracking
378
+ return;
379
+ }
380
+ if (storage_1.persistence.isFirstLaunch()) {
381
+ // First launch ever - track install
382
+ this.track(types_1.SystemEvents.APP_INSTALLED, {
383
+ [types_1.SystemProperties.VERSION]: currentVersion,
384
+ });
385
+ storage_1.persistence.setAppVersion(currentVersion);
386
+ }
387
+ else if (previousVersion && previousVersion !== currentVersion) {
388
+ // Version changed - track update
389
+ this.track(types_1.SystemEvents.APP_UPDATED, {
390
+ [types_1.SystemProperties.VERSION]: currentVersion,
391
+ [types_1.SystemProperties.PREVIOUS_VERSION]: previousVersion,
392
+ });
393
+ storage_1.persistence.setAppVersion(currentVersion);
394
+ }
395
+ else if (!previousVersion) {
396
+ // First time with version tracking
397
+ storage_1.persistence.setAppVersion(currentVersion);
398
+ }
399
+ }
400
+ trackAppOpened() {
401
+ this.track(types_1.SystemEvents.APP_OPENED);
402
+ }
403
+ flushWithBeacon() {
404
+ // Use sendBeacon for reliable delivery during page unload
405
+ if (typeof navigator === 'undefined' || !navigator.sendBeacon) {
406
+ return;
407
+ }
408
+ // Note: This is a synchronous, best-effort send
409
+ // We can't use async storage operations here, so we rely on
410
+ // the regular flush mechanism for most events
411
+ logger_1.logger.debug('Page unloading, attempting beacon flush');
412
+ }
413
+ }
414
+ exports.MostlyGoodMetrics = MostlyGoodMetrics;
415
+ MostlyGoodMetrics.instance = null;
416
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * MostlyGoodMetrics JavaScript SDK
4
+ *
5
+ * A lightweight, framework-agnostic analytics library for web applications.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { MostlyGoodMetrics } from '@mostly-good-metrics/javascript';
10
+ *
11
+ * // Initialize the SDK
12
+ * MostlyGoodMetrics.configure({
13
+ * apiKey: 'mgm_proj_your_api_key',
14
+ * environment: 'production',
15
+ * });
16
+ *
17
+ * // Track events
18
+ * MostlyGoodMetrics.track('button_clicked', {
19
+ * button_id: 'submit',
20
+ * page: '/checkout',
21
+ * });
22
+ *
23
+ * // Identify users
24
+ * MostlyGoodMetrics.identify('user_123');
25
+ * ```
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.logger = exports.getDeviceModel = exports.getOSVersion = exports.detectDeviceType = exports.detectPlatform = exports.sanitizeProperties = exports.validateEventName = exports.isValidEventName = exports.getISOTimestamp = exports.generateUUID = exports.createDefaultNetworkClient = exports.FetchNetworkClient = exports.createDefaultStorage = exports.LocalStorageEventStorage = exports.InMemoryEventStorage = exports.EVENT_NAME_REGEX = exports.Constraints = exports.DefaultConfiguration = exports.SystemProperties = exports.SystemEvents = exports.MGMError = exports.MostlyGoodMetrics = void 0;
29
+ // Main client
30
+ var client_1 = require("./client");
31
+ Object.defineProperty(exports, "MostlyGoodMetrics", { enumerable: true, get: function () { return client_1.MostlyGoodMetrics; } });
32
+ // Error class
33
+ var types_1 = require("./types");
34
+ Object.defineProperty(exports, "MGMError", { enumerable: true, get: function () { return types_1.MGMError; } });
35
+ // Constants
36
+ var types_2 = require("./types");
37
+ Object.defineProperty(exports, "SystemEvents", { enumerable: true, get: function () { return types_2.SystemEvents; } });
38
+ Object.defineProperty(exports, "SystemProperties", { enumerable: true, get: function () { return types_2.SystemProperties; } });
39
+ Object.defineProperty(exports, "DefaultConfiguration", { enumerable: true, get: function () { return types_2.DefaultConfiguration; } });
40
+ Object.defineProperty(exports, "Constraints", { enumerable: true, get: function () { return types_2.Constraints; } });
41
+ Object.defineProperty(exports, "EVENT_NAME_REGEX", { enumerable: true, get: function () { return types_2.EVENT_NAME_REGEX; } });
42
+ // Storage implementations (for custom storage adapters)
43
+ var storage_1 = require("./storage");
44
+ Object.defineProperty(exports, "InMemoryEventStorage", { enumerable: true, get: function () { return storage_1.InMemoryEventStorage; } });
45
+ Object.defineProperty(exports, "LocalStorageEventStorage", { enumerable: true, get: function () { return storage_1.LocalStorageEventStorage; } });
46
+ Object.defineProperty(exports, "createDefaultStorage", { enumerable: true, get: function () { return storage_1.createDefaultStorage; } });
47
+ // Network client (for custom network implementations)
48
+ var network_1 = require("./network");
49
+ Object.defineProperty(exports, "FetchNetworkClient", { enumerable: true, get: function () { return network_1.FetchNetworkClient; } });
50
+ Object.defineProperty(exports, "createDefaultNetworkClient", { enumerable: true, get: function () { return network_1.createDefaultNetworkClient; } });
51
+ // Utilities (for advanced usage)
52
+ var utils_1 = require("./utils");
53
+ Object.defineProperty(exports, "generateUUID", { enumerable: true, get: function () { return utils_1.generateUUID; } });
54
+ Object.defineProperty(exports, "getISOTimestamp", { enumerable: true, get: function () { return utils_1.getISOTimestamp; } });
55
+ Object.defineProperty(exports, "isValidEventName", { enumerable: true, get: function () { return utils_1.isValidEventName; } });
56
+ Object.defineProperty(exports, "validateEventName", { enumerable: true, get: function () { return utils_1.validateEventName; } });
57
+ Object.defineProperty(exports, "sanitizeProperties", { enumerable: true, get: function () { return utils_1.sanitizeProperties; } });
58
+ Object.defineProperty(exports, "detectPlatform", { enumerable: true, get: function () { return utils_1.detectPlatform; } });
59
+ Object.defineProperty(exports, "detectDeviceType", { enumerable: true, get: function () { return utils_1.detectDeviceType; } });
60
+ Object.defineProperty(exports, "getOSVersion", { enumerable: true, get: function () { return utils_1.getOSVersion; } });
61
+ Object.defineProperty(exports, "getDeviceModel", { enumerable: true, get: function () { return utils_1.getDeviceModel; } });
62
+ // Logger (for debugging)
63
+ var logger_1 = require("./logger");
64
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
65
+ //# 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,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAmB1B,cAAc;AACd,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,YAAY;AACZ,iCAMiB;AALf,qGAAA,YAAY,OAAA;AACZ,yGAAA,gBAAgB,OAAA;AAChB,6GAAA,oBAAoB,OAAA;AACpB,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAGlB,wDAAwD;AACxD,qCAAiG;AAAxF,+GAAA,oBAAoB,OAAA;AAAE,mHAAA,wBAAwB,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAE7E,sDAAsD;AACtD,qCAA2E;AAAlE,6GAAA,kBAAkB,OAAA;AAAE,qHAAA,0BAA0B,OAAA;AAEvD,iCAAiC;AACjC,iCAUiB;AATf,qGAAA,YAAY,OAAA;AACZ,wGAAA,eAAe,OAAA;AACf,yGAAA,gBAAgB,OAAA;AAChB,0GAAA,iBAAiB,OAAA;AACjB,2GAAA,kBAAkB,OAAA;AAClB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,qGAAA,YAAY,OAAA;AACZ,uGAAA,cAAc,OAAA;AAGhB,yBAAyB;AACzB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * Internal logger for the MostlyGoodMetrics SDK.
4
+ * Only outputs when debug logging is enabled.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.logger = void 0;
8
+ exports.setDebugLogging = setDebugLogging;
9
+ exports.isDebugEnabled = isDebugEnabled;
10
+ exports.debug = debug;
11
+ exports.info = info;
12
+ exports.warn = warn;
13
+ exports.error = error;
14
+ const LOG_PREFIX = '[MostlyGoodMetrics]';
15
+ let debugEnabled = false;
16
+ /**
17
+ * Enable or disable debug logging.
18
+ */
19
+ function setDebugLogging(enabled) {
20
+ debugEnabled = enabled;
21
+ }
22
+ /**
23
+ * Check if debug logging is enabled.
24
+ */
25
+ function isDebugEnabled() {
26
+ return debugEnabled;
27
+ }
28
+ /**
29
+ * Log a debug message (only when debug logging is enabled).
30
+ */
31
+ function debug(message, ...args) {
32
+ if (debugEnabled) {
33
+ console.log(`${LOG_PREFIX} [DEBUG]`, message, ...args);
34
+ }
35
+ }
36
+ /**
37
+ * Log an info message (only when debug logging is enabled).
38
+ */
39
+ function info(message, ...args) {
40
+ if (debugEnabled) {
41
+ console.info(`${LOG_PREFIX} [INFO]`, message, ...args);
42
+ }
43
+ }
44
+ /**
45
+ * Log a warning message (always shown).
46
+ */
47
+ function warn(message, ...args) {
48
+ console.warn(`${LOG_PREFIX} [WARN]`, message, ...args);
49
+ }
50
+ /**
51
+ * Log an error message (always shown).
52
+ */
53
+ function error(message, ...args) {
54
+ console.error(`${LOG_PREFIX} [ERROR]`, message, ...args);
55
+ }
56
+ exports.logger = {
57
+ setDebugLogging,
58
+ isDebugEnabled,
59
+ debug,
60
+ info,
61
+ warn,
62
+ error,
63
+ };
64
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,0CAEC;AAKD,wCAEC;AAKD,sBAIC;AAKD,oBAIC;AAKD,oBAEC;AAKD,sBAEC;AAhDD,MAAM,UAAU,GAAG,qBAAqB,CAAC;AAEzC,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,SAAgB,eAAe,CAAC,OAAgB;IAC9C,YAAY,GAAG,OAAO,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,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,SAAgB,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,SAAgB,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,SAAgB,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;IACvD,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC3D,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe;IACf,cAAc;IACd,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,KAAK;CACN,CAAC"}