@thisbefine/analytics 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 (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +403 -0
  3. package/dist/core/analytics.d.ts +123 -0
  4. package/dist/core/analytics.d.ts.map +1 -0
  5. package/dist/core/analytics.js +334 -0
  6. package/dist/core/analytics.js.map +1 -0
  7. package/dist/core/errors.d.ts +94 -0
  8. package/dist/core/errors.d.ts.map +1 -0
  9. package/dist/core/errors.js +420 -0
  10. package/dist/core/errors.js.map +1 -0
  11. package/dist/core/logger.d.ts +28 -0
  12. package/dist/core/logger.d.ts.map +1 -0
  13. package/dist/core/logger.js +36 -0
  14. package/dist/core/logger.js.map +1 -0
  15. package/dist/core/logging.d.ts +12 -0
  16. package/dist/core/logging.d.ts.map +1 -0
  17. package/dist/core/logging.js +33 -0
  18. package/dist/core/logging.js.map +1 -0
  19. package/dist/core/privacy.d.ts +53 -0
  20. package/dist/core/privacy.d.ts.map +1 -0
  21. package/dist/core/privacy.js +94 -0
  22. package/dist/core/privacy.js.map +1 -0
  23. package/dist/core/queue.d.ts +59 -0
  24. package/dist/core/queue.d.ts.map +1 -0
  25. package/dist/core/queue.js +263 -0
  26. package/dist/core/queue.js.map +1 -0
  27. package/dist/core/session.d.ts +90 -0
  28. package/dist/core/session.d.ts.map +1 -0
  29. package/dist/core/session.js +246 -0
  30. package/dist/core/session.js.map +1 -0
  31. package/dist/core/storage.d.ts +64 -0
  32. package/dist/core/storage.d.ts.map +1 -0
  33. package/dist/core/storage.js +242 -0
  34. package/dist/core/storage.js.map +1 -0
  35. package/dist/core/types.d.ts +298 -0
  36. package/dist/core/types.d.ts.map +1 -0
  37. package/dist/core/types.js +34 -0
  38. package/dist/core/types.js.map +1 -0
  39. package/dist/core/validation.d.ts +11 -0
  40. package/dist/core/validation.d.ts.map +1 -0
  41. package/dist/core/validation.js +82 -0
  42. package/dist/core/validation.js.map +1 -0
  43. package/dist/core/version.d.ts +2 -0
  44. package/dist/core/version.d.ts.map +1 -0
  45. package/dist/core/version.js +4 -0
  46. package/dist/core/version.js.map +1 -0
  47. package/dist/index.d.ts +45 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +41 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/next/analytics.d.ts +59 -0
  52. package/dist/next/analytics.d.ts.map +1 -0
  53. package/dist/next/analytics.js +87 -0
  54. package/dist/next/analytics.js.map +1 -0
  55. package/dist/next.d.ts +46 -0
  56. package/dist/next.d.ts.map +1 -0
  57. package/dist/next.js +44 -0
  58. package/dist/next.js.map +1 -0
  59. package/dist/react/analytics.d.ts +51 -0
  60. package/dist/react/analytics.d.ts.map +1 -0
  61. package/dist/react/analytics.js +63 -0
  62. package/dist/react/analytics.js.map +1 -0
  63. package/dist/react/bug-report-widget.d.ts +21 -0
  64. package/dist/react/bug-report-widget.d.ts.map +1 -0
  65. package/dist/react/bug-report-widget.js +34 -0
  66. package/dist/react/bug-report-widget.js.map +1 -0
  67. package/dist/react/hooks.d.ts +141 -0
  68. package/dist/react/hooks.d.ts.map +1 -0
  69. package/dist/react/hooks.js +186 -0
  70. package/dist/react/hooks.js.map +1 -0
  71. package/dist/react.d.ts +42 -0
  72. package/dist/react.d.ts.map +1 -0
  73. package/dist/react.js +39 -0
  74. package/dist/react.js.map +1 -0
  75. package/dist/widget/bug-report.d.ts +16 -0
  76. package/dist/widget/bug-report.d.ts.map +1 -0
  77. package/dist/widget/bug-report.js +416 -0
  78. package/dist/widget/bug-report.js.map +1 -0
  79. package/package.json +107 -0
@@ -0,0 +1,334 @@
1
+ import { ErrorCapture } from "./errors";
2
+ import { createLogger } from "./logger";
3
+ import { log as sendLog } from "./logging";
4
+ import { Privacy } from "./privacy";
5
+ import { Queue } from "./queue";
6
+ import { Session } from "./session";
7
+ import { Storage } from "./storage";
8
+ import { DEFAULT_CONFIG, LIBRARY_INFO } from "./types";
9
+ import { validateAccountId, validateEventName, validateProperties, validateUserId, } from "./validation";
10
+ /**
11
+ * Main Analytics class - the primary entry point for the SDK
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * const analytics = createAnalytics({ apiKey: 'tbf_xxx' });
16
+ *
17
+ * analytics.track('button_clicked', { buttonId: 'signup' });
18
+ * analytics.identify('user_123', { email: 'user@example.com' });
19
+ * analytics.page('/dashboard');
20
+ * ```
21
+ */
22
+ export class AnalyticsImpl {
23
+ constructor(config) {
24
+ this.errorCapture = null;
25
+ this.initialized = false;
26
+ this.config = this.resolveConfig(config);
27
+ this.logger = createLogger("Analytics", this.config.debug);
28
+ this.storage = new Storage(this.config.cookieDomain);
29
+ this.session = new Session(this.storage, this.config.sessionTimeout, this.config.debug);
30
+ this.privacy = new Privacy(this.storage, this.config.respectDNT, this.config.debug);
31
+ this.queue = new Queue(this.config);
32
+ if (this.config.errors?.enabled !== false) {
33
+ this.errorCapture = new ErrorCapture(this.config, this.session, this.config.errors);
34
+ this.errorCapture.install();
35
+ }
36
+ this.initialized = true;
37
+ this.logger.log("Analytics initialized", {
38
+ host: this.config.host,
39
+ debug: this.config.debug,
40
+ storageType: this.storage.getStorageType(),
41
+ errorCapture: this.errorCapture !== null,
42
+ });
43
+ }
44
+ /**
45
+ * Resolve configuration with defaults
46
+ */
47
+ resolveConfig(config) {
48
+ return {
49
+ apiKey: config.apiKey,
50
+ host: config.host ?? DEFAULT_CONFIG.host,
51
+ flushAt: config.flushAt ?? DEFAULT_CONFIG.flushAt,
52
+ flushInterval: config.flushInterval ?? DEFAULT_CONFIG.flushInterval,
53
+ sessionTimeout: config.sessionTimeout ?? DEFAULT_CONFIG.sessionTimeout,
54
+ cookieDomain: config.cookieDomain,
55
+ debug: config.debug ?? DEFAULT_CONFIG.debug,
56
+ respectDNT: config.respectDNT ?? DEFAULT_CONFIG.respectDNT,
57
+ maxRetries: config.maxRetries ?? DEFAULT_CONFIG.maxRetries,
58
+ errors: config.errors,
59
+ };
60
+ }
61
+ /**
62
+ * Track a custom event
63
+ */
64
+ track(event, properties) {
65
+ if (!this.shouldTrack())
66
+ return;
67
+ const eventValidation = validateEventName(event);
68
+ if (!eventValidation.valid) {
69
+ this.logger.warn("Invalid event:", eventValidation.error);
70
+ return;
71
+ }
72
+ const propsValidation = validateProperties(properties);
73
+ if (!propsValidation.valid) {
74
+ this.logger.warn("Invalid properties:", propsValidation.error);
75
+ return;
76
+ }
77
+ const trackEvent = {
78
+ type: "track",
79
+ event,
80
+ properties,
81
+ timestamp: new Date().toISOString(),
82
+ anonymousId: this.session.getAnonymousId(),
83
+ userId: this.session.getUserId(),
84
+ sessionId: this.session.getSessionId(),
85
+ accountId: this.session.getAccountId(),
86
+ context: this.getContext(),
87
+ };
88
+ this.queue.push(trackEvent);
89
+ this.session.updateLastActivity();
90
+ }
91
+ /**
92
+ * Identify a user with traits
93
+ */
94
+ identify(userId, traits) {
95
+ if (!this.shouldTrack())
96
+ return;
97
+ const userIdValidation = validateUserId(userId);
98
+ if (!userIdValidation.valid) {
99
+ this.logger.warn("Invalid userId:", userIdValidation.error);
100
+ return;
101
+ }
102
+ const traitsValidation = validateProperties(traits);
103
+ if (!traitsValidation.valid) {
104
+ this.logger.warn("Invalid traits:", traitsValidation.error);
105
+ return;
106
+ }
107
+ this.session.setUserId(userId);
108
+ if (traits) {
109
+ this.session.setUserTraits(traits);
110
+ }
111
+ const identifyEvent = {
112
+ type: "identify",
113
+ userId,
114
+ traits,
115
+ timestamp: new Date().toISOString(),
116
+ anonymousId: this.session.getAnonymousId(),
117
+ sessionId: this.session.getSessionId(),
118
+ accountId: this.session.getAccountId(),
119
+ context: this.getContext(),
120
+ };
121
+ this.queue.push(identifyEvent);
122
+ this.session.updateLastActivity();
123
+ }
124
+ /**
125
+ * Track a page view
126
+ */
127
+ page(name, properties) {
128
+ if (!this.shouldTrack())
129
+ return;
130
+ const propsValidation = validateProperties(properties);
131
+ if (!propsValidation.valid) {
132
+ this.logger.warn("Invalid properties:", propsValidation.error);
133
+ return;
134
+ }
135
+ const url = typeof window !== "undefined" ? window.location.href : "";
136
+ const referrer = typeof document !== "undefined" ? document.referrer : undefined;
137
+ const pageEvent = {
138
+ type: "page",
139
+ name,
140
+ properties,
141
+ url,
142
+ referrer,
143
+ timestamp: new Date().toISOString(),
144
+ anonymousId: this.session.getAnonymousId(),
145
+ userId: this.session.getUserId(),
146
+ sessionId: this.session.getSessionId(),
147
+ accountId: this.session.getAccountId(),
148
+ context: this.getContext(),
149
+ };
150
+ this.queue.push(pageEvent);
151
+ this.session.updateLastActivity();
152
+ }
153
+ /**
154
+ * Associate the current user with an account/company
155
+ */
156
+ group(accountId, traits) {
157
+ if (!this.shouldTrack())
158
+ return;
159
+ const accountIdValidation = validateAccountId(accountId);
160
+ if (!accountIdValidation.valid) {
161
+ this.logger.warn("Invalid accountId:", accountIdValidation.error);
162
+ return;
163
+ }
164
+ const traitsValidation = validateProperties(traits);
165
+ if (!traitsValidation.valid) {
166
+ this.logger.warn("Invalid traits:", traitsValidation.error);
167
+ return;
168
+ }
169
+ this.session.setAccountId(accountId);
170
+ if (traits) {
171
+ this.session.setAccountTraits(traits);
172
+ }
173
+ const groupEvent = {
174
+ type: "group",
175
+ accountId,
176
+ traits,
177
+ timestamp: new Date().toISOString(),
178
+ anonymousId: this.session.getAnonymousId(),
179
+ userId: this.session.getUserId(),
180
+ sessionId: this.session.getSessionId(),
181
+ context: this.getContext(),
182
+ };
183
+ this.queue.push(groupEvent);
184
+ this.session.updateLastActivity();
185
+ }
186
+ /**
187
+ * Capture an exception and send to error tracking
188
+ */
189
+ captureException(error, context) {
190
+ if (!this.shouldTrack())
191
+ return;
192
+ this.errorCapture?.captureException(error, context);
193
+ }
194
+ /**
195
+ * Capture a message as an error event
196
+ */
197
+ captureMessage(message, level, context) {
198
+ if (!this.shouldTrack())
199
+ return;
200
+ this.errorCapture?.captureMessage(message, level, context);
201
+ }
202
+ /**
203
+ * Add a breadcrumb for error context
204
+ */
205
+ addBreadcrumb(breadcrumb) {
206
+ this.errorCapture?.addBreadcrumb(breadcrumb);
207
+ }
208
+ /**
209
+ * Send a structured log event
210
+ */
211
+ log(message, level, metadata) {
212
+ if (!this.shouldTrack())
213
+ return;
214
+ sendLog(this, message, level, metadata);
215
+ }
216
+ /**
217
+ * Reset the current user session (call on logout)
218
+ */
219
+ reset() {
220
+ this.queue.flush();
221
+ this.session.reset();
222
+ this.errorCapture?.clearBreadcrumbs();
223
+ this.logger.log("Session reset");
224
+ }
225
+ /**
226
+ * Manually flush the event queue
227
+ */
228
+ async flush() {
229
+ await this.queue.flush();
230
+ }
231
+ /**
232
+ * Opt out of tracking
233
+ */
234
+ optOut() {
235
+ this.privacy.optOut();
236
+ }
237
+ /**
238
+ * Opt back in to tracking
239
+ */
240
+ optIn() {
241
+ this.privacy.optIn();
242
+ }
243
+ /**
244
+ * Check if user has opted out
245
+ */
246
+ isOptedOut() {
247
+ return this.privacy.isOptedOut();
248
+ }
249
+ /**
250
+ * Get current user state
251
+ */
252
+ getUser() {
253
+ return this.session.getUserState();
254
+ }
255
+ /**
256
+ * Check if tracking should be allowed
257
+ */
258
+ shouldTrack() {
259
+ if (!this.initialized) {
260
+ this.logger.log("Analytics not initialized, skipping event");
261
+ return false;
262
+ }
263
+ if (!this.privacy.shouldTrack()) {
264
+ return false;
265
+ }
266
+ return true;
267
+ }
268
+ /**
269
+ * Build event context
270
+ */
271
+ getContext() {
272
+ const context = {
273
+ library: LIBRARY_INFO,
274
+ userAgent: typeof navigator !== "undefined" ? navigator.userAgent : "unknown",
275
+ locale: typeof navigator !== "undefined" ? navigator.language : "en",
276
+ timezone: typeof Intl !== "undefined"
277
+ ? Intl.DateTimeFormat().resolvedOptions().timeZone
278
+ : "UTC",
279
+ };
280
+ if (typeof window !== "undefined" && window.screen) {
281
+ context.screen = {
282
+ width: window.screen.width,
283
+ height: window.screen.height,
284
+ };
285
+ }
286
+ if (typeof window !== "undefined") {
287
+ context.page = {
288
+ url: window.location.href,
289
+ path: window.location.pathname,
290
+ referrer: document.referrer,
291
+ title: document.title,
292
+ };
293
+ }
294
+ return context;
295
+ }
296
+ }
297
+ /**
298
+ * Create a new Analytics instance
299
+ *
300
+ * @param config - Analytics configuration
301
+ * @returns Analytics instance
302
+ *
303
+ * @example
304
+ * ```typescript
305
+ * const analytics = createAnalytics({
306
+ * apiKey: 'tbf_xxx',
307
+ * debug: process.env.NODE_ENV === 'development',
308
+ * });
309
+ *
310
+ * analytics.track('signup_completed', { plan: 'pro' });
311
+ * ```
312
+ */
313
+ export const createAnalytics = (config) => {
314
+ return new AnalyticsImpl(config);
315
+ };
316
+ let globalInstance = null;
317
+ /**
318
+ * Get or create a global analytics instance (for script tag usage)
319
+ */
320
+ export const getAnalytics = () => {
321
+ return globalInstance;
322
+ };
323
+ /**
324
+ * Initialize the global analytics instance
325
+ */
326
+ export const initAnalytics = (config) => {
327
+ if (globalInstance) {
328
+ console.warn("[Thisbefine] Analytics already initialized");
329
+ return globalInstance;
330
+ }
331
+ globalInstance = createAnalytics(config);
332
+ return globalInstance;
333
+ };
334
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/core/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { Session } from "./session";
2
+ import type { ResolvedConfig } from "./types";
3
+ export interface Breadcrumb {
4
+ type: "click" | "navigation" | "network" | "console" | "custom";
5
+ message: string;
6
+ timestamp: string;
7
+ data?: Record<string, unknown>;
8
+ }
9
+ export interface ErrorPayload {
10
+ message: string;
11
+ stack?: string;
12
+ type?: string;
13
+ level?: "error" | "fatal" | "warning";
14
+ fingerprint: string;
15
+ url?: string;
16
+ breadcrumbs?: Breadcrumb[];
17
+ tags?: Record<string, string>;
18
+ context?: Record<string, unknown>;
19
+ timestamp?: string;
20
+ anonymousId?: string;
21
+ userId?: string;
22
+ sessionId?: string;
23
+ }
24
+ export interface ErrorCaptureConfig {
25
+ /** Enable error capture. Default: true */
26
+ enabled?: boolean;
27
+ /** Capture console.error calls as breadcrumbs. Default: false */
28
+ captureConsoleErrors?: boolean;
29
+ /** Capture fetch/XHR failures as breadcrumbs. Default: false */
30
+ captureNetworkErrors?: boolean;
31
+ /** Max breadcrumbs to retain. Default: 25 */
32
+ maxBreadcrumbs?: number;
33
+ /** Modify or filter errors before sending. Return null to discard. */
34
+ beforeSend?: (payload: ErrorPayload) => ErrorPayload | null;
35
+ }
36
+ /**
37
+ * Error capture module for the analytics SDK.
38
+ *
39
+ * Captures unhandled exceptions, unhandled promise rejections,
40
+ * and records breadcrumbs (clicks, navigation, console, network).
41
+ */
42
+ export declare class ErrorCapture {
43
+ private config;
44
+ private errorConfig;
45
+ private session;
46
+ private breadcrumbs;
47
+ private installed;
48
+ private logger;
49
+ private originalOnError;
50
+ private originalConsoleError;
51
+ private originalFetch;
52
+ private unhandledRejectionHandler;
53
+ private clickHandler;
54
+ private lastClickTarget;
55
+ private lastClickTime;
56
+ private originalPushState;
57
+ private originalReplaceState;
58
+ private popstateHandler;
59
+ constructor(config: ResolvedConfig, session: Session, errorConfig?: ErrorCaptureConfig);
60
+ /**
61
+ * Install global error handlers and breadcrumb collectors
62
+ */
63
+ install(): void;
64
+ /**
65
+ * Remove all handlers and restore originals
66
+ */
67
+ uninstall(): void;
68
+ /**
69
+ * Add a breadcrumb manually
70
+ */
71
+ addBreadcrumb(breadcrumb: Omit<Breadcrumb, "timestamp">): void;
72
+ /**
73
+ * Clear all breadcrumbs
74
+ */
75
+ clearBreadcrumbs(): void;
76
+ /**
77
+ * Capture an exception and send it to the API
78
+ */
79
+ captureException(error: Error, context?: Record<string, unknown>): void;
80
+ /**
81
+ * Capture a message as an error event
82
+ */
83
+ captureMessage(message: string, level?: "error" | "fatal" | "warning", context?: Record<string, unknown>): void;
84
+ private installErrorHandler;
85
+ private installUnhandledRejectionHandler;
86
+ private installClickBreadcrumbs;
87
+ private installNavigationBreadcrumbs;
88
+ private installConsoleBreadcrumbs;
89
+ private installNetworkBreadcrumbs;
90
+ private pushBreadcrumb;
91
+ private sendError;
92
+ private postError;
93
+ }
94
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}