@glideidentity/web-client-sdk 5.1.3 → 6.0.0-beta.2

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 (203) hide show
  1. package/README.md +337 -526
  2. package/dist/browser/web-client-sdk.min.js +1 -1
  3. package/dist/cjs/adapters/index.js +15 -0
  4. package/dist/cjs/adapters/react.js +192 -0
  5. package/dist/cjs/adapters/vanilla.js +38 -0
  6. package/dist/cjs/adapters/vue.js +187 -0
  7. package/dist/cjs/browser.js +58 -0
  8. package/dist/cjs/client/http.js +159 -0
  9. package/dist/cjs/client/index.js +19 -0
  10. package/dist/cjs/client/logger.js +135 -0
  11. package/dist/cjs/client/phone-auth-client.js +428 -0
  12. package/dist/cjs/client/strategies/polling.js +177 -0
  13. package/dist/cjs/core/errors.js +204 -0
  14. package/dist/cjs/core/index.js +83 -0
  15. package/dist/cjs/core/type-guards.js +196 -0
  16. package/dist/cjs/core/types.js +25 -0
  17. package/dist/{core/phone-auth/validation-utils.js → cjs/core/validators.js} +70 -23
  18. package/dist/cjs/index.js +81 -0
  19. package/dist/cjs/ui/index.js +11 -0
  20. package/dist/{core/phone-auth → cjs}/ui/mobile-debug-console.js +149 -78
  21. package/dist/cjs/ui/modal.js +1122 -0
  22. package/dist/esm/adapters/index.js +11 -0
  23. package/dist/esm/adapters/react.js +182 -0
  24. package/dist/esm/adapters/vanilla.js +29 -0
  25. package/dist/esm/adapters/vue.js +177 -0
  26. package/dist/esm/browser.js +30 -11
  27. package/dist/esm/client/http.js +156 -0
  28. package/dist/esm/client/index.js +11 -0
  29. package/dist/esm/client/logger.js +131 -0
  30. package/dist/esm/client/phone-auth-client.js +424 -0
  31. package/dist/esm/client/strategies/polling.js +174 -0
  32. package/dist/esm/core/errors.js +193 -0
  33. package/dist/esm/core/index.js +60 -0
  34. package/dist/esm/core/type-guards.js +181 -0
  35. package/dist/esm/core/types.js +22 -1
  36. package/dist/esm/core/{phone-auth/validation-utils.js → validators.js} +66 -21
  37. package/dist/esm/index.js +45 -17
  38. package/dist/esm/ui/index.js +5 -0
  39. package/dist/esm/{core/phone-auth/ui → ui}/mobile-debug-console.js +149 -78
  40. package/dist/esm/ui/modal.js +1117 -0
  41. package/dist/types/adapters/index.d.ts +10 -0
  42. package/dist/types/adapters/index.d.ts.map +1 -0
  43. package/dist/types/adapters/react.d.ts +70 -0
  44. package/dist/types/adapters/react.d.ts.map +1 -0
  45. package/dist/types/adapters/vanilla.d.ts +29 -0
  46. package/dist/types/adapters/vanilla.d.ts.map +1 -0
  47. package/dist/types/adapters/vue.d.ts +71 -0
  48. package/dist/types/adapters/vue.d.ts.map +1 -0
  49. package/dist/types/browser.d.ts +27 -0
  50. package/dist/types/browser.d.ts.map +1 -0
  51. package/dist/types/client/http.d.ts +41 -0
  52. package/dist/types/client/http.d.ts.map +1 -0
  53. package/dist/types/client/index.d.ts +10 -0
  54. package/dist/types/client/index.d.ts.map +1 -0
  55. package/dist/types/client/logger.d.ts +36 -0
  56. package/dist/types/client/logger.d.ts.map +1 -0
  57. package/dist/types/client/phone-auth-client.d.ts +91 -0
  58. package/dist/types/client/phone-auth-client.d.ts.map +1 -0
  59. package/dist/types/client/strategies/polling.d.ts +36 -0
  60. package/dist/types/client/strategies/polling.d.ts.map +1 -0
  61. package/dist/types/core/errors.d.ts +71 -0
  62. package/dist/types/core/errors.d.ts.map +1 -0
  63. package/dist/types/core/index.d.ts +38 -0
  64. package/dist/types/core/index.d.ts.map +1 -0
  65. package/dist/types/core/type-guards.d.ts +118 -0
  66. package/dist/types/core/type-guards.d.ts.map +1 -0
  67. package/dist/types/core/types.d.ts +535 -0
  68. package/dist/types/core/types.d.ts.map +1 -0
  69. package/dist/types/core/validators.d.ts +63 -0
  70. package/dist/types/core/validators.d.ts.map +1 -0
  71. package/dist/types/index.d.ts +40 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/ui/index.d.ts +6 -0
  74. package/dist/types/ui/index.d.ts.map +1 -0
  75. package/dist/{esm/core/phone-auth → types}/ui/mobile-debug-console.d.ts +1 -0
  76. package/dist/types/ui/mobile-debug-console.d.ts.map +1 -0
  77. package/dist/types/ui/modal.d.ts +87 -0
  78. package/dist/types/ui/modal.d.ts.map +1 -0
  79. package/package.json +48 -34
  80. package/dist/adapters/angular/client.service.d.ts +0 -7
  81. package/dist/adapters/angular/client.service.js +0 -30
  82. package/dist/adapters/angular/index.d.ts +0 -3
  83. package/dist/adapters/angular/index.js +0 -18
  84. package/dist/adapters/angular/phone-auth.service.d.ts +0 -38
  85. package/dist/adapters/angular/phone-auth.service.js +0 -130
  86. package/dist/adapters/react/index.d.ts +0 -9
  87. package/dist/adapters/react/index.js +0 -28
  88. package/dist/adapters/react/useClient.d.ts +0 -26
  89. package/dist/adapters/react/useClient.js +0 -121
  90. package/dist/adapters/react/usePhoneAuth.d.ts +0 -23
  91. package/dist/adapters/react/usePhoneAuth.js +0 -95
  92. package/dist/adapters/vanilla/client.d.ts +0 -8
  93. package/dist/adapters/vanilla/client.js +0 -33
  94. package/dist/adapters/vanilla/index.d.ts +0 -3
  95. package/dist/adapters/vanilla/index.js +0 -18
  96. package/dist/adapters/vanilla/phone-auth.d.ts +0 -46
  97. package/dist/adapters/vanilla/phone-auth.js +0 -138
  98. package/dist/adapters/vue/index.d.ts +0 -10
  99. package/dist/adapters/vue/index.js +0 -36
  100. package/dist/adapters/vue/useClient.d.ts +0 -115
  101. package/dist/adapters/vue/useClient.js +0 -131
  102. package/dist/adapters/vue/usePhoneAuth.d.ts +0 -94
  103. package/dist/adapters/vue/usePhoneAuth.js +0 -103
  104. package/dist/browser.d.ts +0 -7
  105. package/dist/browser.js +0 -31
  106. package/dist/core/client.d.ts +0 -22
  107. package/dist/core/client.js +0 -77
  108. package/dist/core/logger.d.ts +0 -130
  109. package/dist/core/logger.js +0 -370
  110. package/dist/core/phone-auth/api-types.d.ts +0 -593
  111. package/dist/core/phone-auth/api-types.js +0 -215
  112. package/dist/core/phone-auth/client.d.ts +0 -189
  113. package/dist/core/phone-auth/client.js +0 -1441
  114. package/dist/core/phone-auth/error-utils.d.ts +0 -110
  115. package/dist/core/phone-auth/error-utils.js +0 -350
  116. package/dist/core/phone-auth/index.d.ts +0 -7
  117. package/dist/core/phone-auth/index.js +0 -50
  118. package/dist/core/phone-auth/status-types.d.ts +0 -107
  119. package/dist/core/phone-auth/status-types.js +0 -31
  120. package/dist/core/phone-auth/strategies/desktop.d.ts +0 -122
  121. package/dist/core/phone-auth/strategies/desktop.js +0 -596
  122. package/dist/core/phone-auth/strategies/index.d.ts +0 -11
  123. package/dist/core/phone-auth/strategies/index.js +0 -15
  124. package/dist/core/phone-auth/strategies/link.d.ts +0 -89
  125. package/dist/core/phone-auth/strategies/link.js +0 -384
  126. package/dist/core/phone-auth/strategies/ts43.d.ts +0 -32
  127. package/dist/core/phone-auth/strategies/ts43.js +0 -161
  128. package/dist/core/phone-auth/strategies/types.d.ts +0 -18
  129. package/dist/core/phone-auth/strategies/types.js +0 -6
  130. package/dist/core/phone-auth/type-guards.d.ts +0 -143
  131. package/dist/core/phone-auth/type-guards.js +0 -198
  132. package/dist/core/phone-auth/types.d.ts +0 -237
  133. package/dist/core/phone-auth/types.js +0 -93
  134. package/dist/core/phone-auth/ui/mobile-debug-console.d.ts +0 -25
  135. package/dist/core/phone-auth/ui/modal.d.ts +0 -88
  136. package/dist/core/phone-auth/ui/modal.js +0 -598
  137. package/dist/core/phone-auth/validation-utils.d.ts +0 -44
  138. package/dist/core/types.d.ts +0 -62
  139. package/dist/core/types.js +0 -2
  140. package/dist/core/version.d.ts +0 -1
  141. package/dist/core/version.js +0 -5
  142. package/dist/esm/adapters/angular/client.service.d.ts +0 -7
  143. package/dist/esm/adapters/angular/client.service.js +0 -27
  144. package/dist/esm/adapters/angular/index.d.ts +0 -3
  145. package/dist/esm/adapters/angular/index.js +0 -4
  146. package/dist/esm/adapters/angular/phone-auth.service.d.ts +0 -38
  147. package/dist/esm/adapters/angular/phone-auth.service.js +0 -127
  148. package/dist/esm/adapters/react/index.d.ts +0 -9
  149. package/dist/esm/adapters/react/index.js +0 -8
  150. package/dist/esm/adapters/react/useClient.d.ts +0 -26
  151. package/dist/esm/adapters/react/useClient.js +0 -116
  152. package/dist/esm/adapters/react/usePhoneAuth.d.ts +0 -23
  153. package/dist/esm/adapters/react/usePhoneAuth.js +0 -92
  154. package/dist/esm/adapters/vanilla/client.d.ts +0 -8
  155. package/dist/esm/adapters/vanilla/client.js +0 -29
  156. package/dist/esm/adapters/vanilla/index.d.ts +0 -3
  157. package/dist/esm/adapters/vanilla/index.js +0 -4
  158. package/dist/esm/adapters/vanilla/phone-auth.d.ts +0 -46
  159. package/dist/esm/adapters/vanilla/phone-auth.js +0 -134
  160. package/dist/esm/adapters/vue/index.d.ts +0 -10
  161. package/dist/esm/adapters/vue/index.js +0 -11
  162. package/dist/esm/adapters/vue/useClient.d.ts +0 -115
  163. package/dist/esm/adapters/vue/useClient.js +0 -127
  164. package/dist/esm/adapters/vue/usePhoneAuth.d.ts +0 -94
  165. package/dist/esm/adapters/vue/usePhoneAuth.js +0 -100
  166. package/dist/esm/browser.d.ts +0 -7
  167. package/dist/esm/core/client.d.ts +0 -22
  168. package/dist/esm/core/client.js +0 -70
  169. package/dist/esm/core/logger.d.ts +0 -130
  170. package/dist/esm/core/logger.js +0 -359
  171. package/dist/esm/core/phone-auth/api-types.d.ts +0 -593
  172. package/dist/esm/core/phone-auth/api-types.js +0 -203
  173. package/dist/esm/core/phone-auth/client.d.ts +0 -189
  174. package/dist/esm/core/phone-auth/client.js +0 -1404
  175. package/dist/esm/core/phone-auth/error-utils.d.ts +0 -110
  176. package/dist/esm/core/phone-auth/error-utils.js +0 -338
  177. package/dist/esm/core/phone-auth/index.d.ts +0 -7
  178. package/dist/esm/core/phone-auth/index.js +0 -8
  179. package/dist/esm/core/phone-auth/status-types.d.ts +0 -107
  180. package/dist/esm/core/phone-auth/status-types.js +0 -26
  181. package/dist/esm/core/phone-auth/strategies/desktop.d.ts +0 -122
  182. package/dist/esm/core/phone-auth/strategies/desktop.js +0 -590
  183. package/dist/esm/core/phone-auth/strategies/index.d.ts +0 -11
  184. package/dist/esm/core/phone-auth/strategies/index.js +0 -7
  185. package/dist/esm/core/phone-auth/strategies/link.d.ts +0 -89
  186. package/dist/esm/core/phone-auth/strategies/link.js +0 -380
  187. package/dist/esm/core/phone-auth/strategies/ts43.d.ts +0 -32
  188. package/dist/esm/core/phone-auth/strategies/ts43.js +0 -157
  189. package/dist/esm/core/phone-auth/strategies/types.d.ts +0 -18
  190. package/dist/esm/core/phone-auth/strategies/types.js +0 -5
  191. package/dist/esm/core/phone-auth/type-guards.d.ts +0 -143
  192. package/dist/esm/core/phone-auth/type-guards.js +0 -185
  193. package/dist/esm/core/phone-auth/types.d.ts +0 -237
  194. package/dist/esm/core/phone-auth/types.js +0 -76
  195. package/dist/esm/core/phone-auth/ui/modal.d.ts +0 -88
  196. package/dist/esm/core/phone-auth/ui/modal.js +0 -594
  197. package/dist/esm/core/phone-auth/validation-utils.d.ts +0 -44
  198. package/dist/esm/core/types.d.ts +0 -62
  199. package/dist/esm/core/version.d.ts +0 -1
  200. package/dist/esm/core/version.js +0 -2
  201. package/dist/esm/index.d.ts +0 -12
  202. package/dist/index.d.ts +0 -12
  203. package/dist/index.js +0 -55
@@ -1,130 +0,0 @@
1
- /**
2
- * Industry-grade logging for Glide Web SDK
3
- * Following best practices from Stripe, Auth0, Twilio, and AWS Amplify
4
- */
5
- export declare enum LogLevel {
6
- SILENT = 0,
7
- ERROR = 1,
8
- WARN = 2,
9
- INFO = 3,
10
- DEBUG = 4
11
- }
12
- export interface LogFields {
13
- [key: string]: any;
14
- }
15
- export interface Logger {
16
- debug(message: string, fields?: LogFields): void;
17
- info(message: string, fields?: LogFields): void;
18
- warn(message: string, fields?: LogFields): void;
19
- error(message: string, fields?: LogFields): void;
20
- }
21
- /**
22
- * Default browser console logger with automatic data sanitization
23
- */
24
- export declare class ConsoleLogger implements Logger {
25
- private level;
26
- private prefix;
27
- private enableGrouping;
28
- constructor(level?: LogLevel, prefix?: string, enableGrouping?: boolean);
29
- debug(message: string, fields?: LogFields): void;
30
- info(message: string, fields?: LogFields): void;
31
- warn(message: string, fields?: LogFields): void;
32
- error(message: string, fields?: LogFields): void;
33
- private log;
34
- /**
35
- * Sanitize sensitive data from log fields
36
- */
37
- private sanitizeFields;
38
- /**
39
- * Redact sensitive information based on field name and value patterns
40
- */
41
- private sanitizeValue;
42
- }
43
- /**
44
- * No-op logger for when logging is disabled
45
- */
46
- export declare class NoopLogger implements Logger {
47
- debug(message: string, fields?: LogFields): void;
48
- info(message: string, fields?: LogFields): void;
49
- warn(message: string, fields?: LogFields): void;
50
- error(message: string, fields?: LogFields): void;
51
- }
52
- /**
53
- * Remote logger for sending logs to a backend service
54
- * Useful for debugging production issues
55
- */
56
- export declare class RemoteLogger implements Logger {
57
- private endpoint;
58
- private apiKey;
59
- private localLogger;
60
- private buffer;
61
- private flushInterval;
62
- private maxBufferSize;
63
- constructor(endpoint: string, apiKey: string, fallbackLogger?: Logger);
64
- debug(message: string, fields?: LogFields): void;
65
- info(message: string, fields?: LogFields): void;
66
- warn(message: string, fields?: LogFields): void;
67
- error(message: string, fields?: LogFields): void;
68
- private log;
69
- private flush;
70
- }
71
- /**
72
- * Parse log level from string
73
- */
74
- export declare function parseLogLevel(level: string): LogLevel;
75
- /**
76
- * Get log level from browser environment
77
- */
78
- export declare function getLogLevelFromEnv(): LogLevel;
79
- /**
80
- * Performance timer for measuring operation duration
81
- */
82
- export declare class PerformanceTimer {
83
- private startTime;
84
- private marks;
85
- private logger;
86
- constructor(logger: Logger);
87
- /**
88
- * Mark a point in time
89
- */
90
- mark(name: string): void;
91
- /**
92
- * Log elapsed time with optional fields
93
- */
94
- logElapsed(message: string, fields?: LogFields): void;
95
- /**
96
- * Log time between marks
97
- */
98
- logMarkDuration(fromMark: string, toMark: string, message: string, fields?: LogFields): void;
99
- }
100
- /**
101
- * Generate a unique request ID for distributed tracing
102
- */
103
- export declare function generateRequestId(): string;
104
- /**
105
- * Logger factory for creating loggers with consistent configuration
106
- */
107
- export declare class LoggerFactory {
108
- private static defaultLevel;
109
- private static defaultLogger;
110
- /**
111
- * Set the default log level for all new loggers
112
- */
113
- static setDefaultLevel(level: LogLevel): void;
114
- /**
115
- * Set a default logger instance to use
116
- */
117
- static setDefaultLogger(logger: Logger): void;
118
- /**
119
- * Create a logger instance based on configuration
120
- */
121
- static create(options?: {
122
- level?: LogLevel;
123
- prefix?: string;
124
- remote?: {
125
- endpoint: string;
126
- apiKey: string;
127
- };
128
- custom?: Logger;
129
- }): Logger;
130
- }
@@ -1,370 +0,0 @@
1
- "use strict";
2
- /**
3
- * Industry-grade logging for Glide Web SDK
4
- * Following best practices from Stripe, Auth0, Twilio, and AWS Amplify
5
- */
6
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
- return new (P || (P = Promise))(function (resolve, reject) {
9
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
- step((generator = generator.apply(thisArg, _arguments || [])).next());
13
- });
14
- };
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.LoggerFactory = exports.PerformanceTimer = exports.RemoteLogger = exports.NoopLogger = exports.ConsoleLogger = exports.LogLevel = void 0;
17
- exports.parseLogLevel = parseLogLevel;
18
- exports.getLogLevelFromEnv = getLogLevelFromEnv;
19
- exports.generateRequestId = generateRequestId;
20
- var LogLevel;
21
- (function (LogLevel) {
22
- LogLevel[LogLevel["SILENT"] = 0] = "SILENT";
23
- LogLevel[LogLevel["ERROR"] = 1] = "ERROR";
24
- LogLevel[LogLevel["WARN"] = 2] = "WARN";
25
- LogLevel[LogLevel["INFO"] = 3] = "INFO";
26
- LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG";
27
- })(LogLevel || (exports.LogLevel = LogLevel = {}));
28
- /**
29
- * Default browser console logger with automatic data sanitization
30
- */
31
- class ConsoleLogger {
32
- constructor(level = LogLevel.SILENT, prefix = '[Glide]', enableGrouping = false) {
33
- this.level = level;
34
- this.prefix = prefix;
35
- this.enableGrouping = enableGrouping;
36
- }
37
- debug(message, fields) {
38
- if (this.level >= LogLevel.DEBUG) {
39
- this.log('debug', message, fields);
40
- }
41
- }
42
- info(message, fields) {
43
- if (this.level >= LogLevel.INFO) {
44
- this.log('info', message, fields);
45
- }
46
- }
47
- warn(message, fields) {
48
- if (this.level >= LogLevel.WARN) {
49
- this.log('warn', message, fields);
50
- }
51
- }
52
- error(message, fields) {
53
- if (this.level >= LogLevel.ERROR) {
54
- this.log('error', message, fields);
55
- }
56
- }
57
- log(level, message, fields) {
58
- const timestamp = new Date().toISOString();
59
- const sanitizedFields = fields ? this.sanitizeFields(fields) : {};
60
- // Format the message
61
- const formattedMessage = `${this.prefix} ${timestamp} [${level.toUpperCase()}] ${message}`;
62
- // Use console grouping for better readability if enabled
63
- if (this.enableGrouping && Object.keys(sanitizedFields).length > 0) {
64
- console.groupCollapsed(formattedMessage);
65
- Object.entries(sanitizedFields).forEach(([key, value]) => {
66
- console.log(`${key}:`, value);
67
- });
68
- console.groupEnd();
69
- }
70
- else {
71
- // Standard logging with or without fields
72
- if (Object.keys(sanitizedFields).length > 0) {
73
- console[level](formattedMessage, sanitizedFields);
74
- }
75
- else {
76
- console[level](formattedMessage);
77
- }
78
- }
79
- }
80
- /**
81
- * Sanitize sensitive data from log fields
82
- */
83
- sanitizeFields(fields) {
84
- const sanitized = {};
85
- for (const [key, value] of Object.entries(fields)) {
86
- sanitized[key] = this.sanitizeValue(key, value);
87
- }
88
- return sanitized;
89
- }
90
- /**
91
- * Redact sensitive information based on field name and value patterns
92
- */
93
- sanitizeValue(key, value) {
94
- // List of sensitive field patterns
95
- const sensitiveFields = [
96
- 'apikey', 'api_key', 'apiKey',
97
- 'token', 'accesstoken', 'access_token', 'accessToken',
98
- 'password', 'passwd', 'pwd',
99
- 'secret', 'credential',
100
- 'authorization', 'auth',
101
- 'cookie', 'session',
102
- ];
103
- const lowerKey = key.toLowerCase();
104
- // Check if field name indicates sensitive data
105
- for (const sensitive of sensitiveFields) {
106
- if (lowerKey.includes(sensitive.toLowerCase())) {
107
- if (typeof value === 'string' && value.length > 4) {
108
- return value.substring(0, 4) + '****[REDACTED]';
109
- }
110
- return '****[REDACTED]';
111
- }
112
- }
113
- // Handle specific value patterns
114
- if (typeof value === 'string') {
115
- // Phone number pattern - show area code only
116
- const phoneRegex = /^\+?[1-9]\d{6,14}$/;
117
- if (phoneRegex.test(value)) {
118
- return value.substring(0, 6) + '****';
119
- }
120
- // Email pattern - show domain only
121
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
122
- if (emailRegex.test(value)) {
123
- const [, domain] = value.split('@');
124
- return '****@' + domain;
125
- }
126
- // URL with credentials
127
- if (value.includes('://') && value.includes('@')) {
128
- return value.replace(/\/\/([^:]+):([^@]+)@/, '//****:****@');
129
- }
130
- // JWT tokens
131
- if (value.startsWith('eyJ') && value.split('.').length === 3) {
132
- return value.substring(0, 10) + '****[JWT]';
133
- }
134
- // Credit card numbers
135
- const creditCardRegex = /\b\d{13,19}\b/;
136
- if (creditCardRegex.test(value)) {
137
- return value.substring(0, 4) + '****' + value.substring(value.length - 4);
138
- }
139
- }
140
- // Recursively sanitize objects
141
- if (value && typeof value === 'object' && !Array.isArray(value)) {
142
- return this.sanitizeFields(value);
143
- }
144
- // Sanitize arrays
145
- if (Array.isArray(value)) {
146
- return value.map((item, index) => this.sanitizeValue(`${key}[${index}]`, item));
147
- }
148
- return value;
149
- }
150
- }
151
- exports.ConsoleLogger = ConsoleLogger;
152
- /**
153
- * No-op logger for when logging is disabled
154
- */
155
- class NoopLogger {
156
- debug(message, fields) { }
157
- info(message, fields) { }
158
- warn(message, fields) { }
159
- error(message, fields) { }
160
- }
161
- exports.NoopLogger = NoopLogger;
162
- /**
163
- * Remote logger for sending logs to a backend service
164
- * Useful for debugging production issues
165
- */
166
- class RemoteLogger {
167
- constructor(endpoint, apiKey, fallbackLogger) {
168
- this.buffer = [];
169
- this.flushInterval = 5000; // 5 seconds
170
- this.maxBufferSize = 100;
171
- this.endpoint = endpoint;
172
- this.apiKey = apiKey;
173
- this.localLogger = fallbackLogger || new ConsoleLogger(LogLevel.ERROR);
174
- // Set up automatic flushing
175
- if (typeof window !== 'undefined') {
176
- setInterval(() => this.flush(), this.flushInterval);
177
- // Flush on page unload
178
- window.addEventListener('beforeunload', () => this.flush());
179
- }
180
- }
181
- debug(message, fields) {
182
- this.log('debug', message, fields);
183
- }
184
- info(message, fields) {
185
- this.log('info', message, fields);
186
- }
187
- warn(message, fields) {
188
- this.log('warn', message, fields);
189
- }
190
- error(message, fields) {
191
- this.log('error', message, fields);
192
- }
193
- log(level, message, fields) {
194
- const logEntry = {
195
- timestamp: new Date().toISOString(),
196
- level,
197
- message,
198
- fields,
199
- userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,
200
- url: typeof window !== 'undefined' ? window.location.href : undefined,
201
- };
202
- this.buffer.push(logEntry);
203
- // Also log locally for immediate feedback
204
- this.localLogger[level](message, fields);
205
- // Flush if buffer is full
206
- if (this.buffer.length >= this.maxBufferSize) {
207
- this.flush();
208
- }
209
- }
210
- flush() {
211
- return __awaiter(this, void 0, void 0, function* () {
212
- if (this.buffer.length === 0)
213
- return;
214
- const logs = [...this.buffer];
215
- this.buffer = [];
216
- try {
217
- yield fetch(this.endpoint, {
218
- method: 'POST',
219
- headers: {
220
- 'Content-Type': 'application/json',
221
- 'Authorization': `Bearer ${this.apiKey}`,
222
- },
223
- body: JSON.stringify({ logs }),
224
- });
225
- }
226
- catch (error) {
227
- // Failed to send logs, log locally
228
- this.localLogger.error('Failed to send logs to remote server', { error });
229
- // Optionally, put logs back in buffer for retry
230
- // this.buffer.unshift(...logs);
231
- }
232
- });
233
- }
234
- }
235
- exports.RemoteLogger = RemoteLogger;
236
- /**
237
- * Parse log level from string
238
- */
239
- function parseLogLevel(level) {
240
- switch (level.toLowerCase()) {
241
- case 'debug':
242
- return LogLevel.DEBUG;
243
- case 'info':
244
- return LogLevel.INFO;
245
- case 'warn':
246
- case 'warning':
247
- return LogLevel.WARN;
248
- case 'error':
249
- return LogLevel.ERROR;
250
- case 'silent':
251
- case 'none':
252
- case 'off':
253
- return LogLevel.SILENT;
254
- default:
255
- return LogLevel.SILENT;
256
- }
257
- }
258
- /**
259
- * Get log level from browser environment
260
- */
261
- function getLogLevelFromEnv() {
262
- // Check localStorage
263
- if (typeof localStorage !== 'undefined') {
264
- const storedLevel = localStorage.getItem('GLIDE_LOG_LEVEL');
265
- if (storedLevel) {
266
- return parseLogLevel(storedLevel);
267
- }
268
- const debugFlag = localStorage.getItem('GLIDE_DEBUG');
269
- if (debugFlag === 'true' || debugFlag === '1') {
270
- return LogLevel.DEBUG;
271
- }
272
- }
273
- // Check URL parameters
274
- if (typeof window !== 'undefined' && window.location) {
275
- const params = new URLSearchParams(window.location.search);
276
- const urlLogLevel = params.get('glide_log_level');
277
- if (urlLogLevel) {
278
- return parseLogLevel(urlLogLevel);
279
- }
280
- if (params.has('glide_debug')) {
281
- return LogLevel.DEBUG;
282
- }
283
- }
284
- return LogLevel.SILENT;
285
- }
286
- /**
287
- * Performance timer for measuring operation duration
288
- */
289
- class PerformanceTimer {
290
- constructor(logger) {
291
- this.marks = new Map();
292
- this.startTime = performance.now();
293
- this.logger = logger;
294
- }
295
- /**
296
- * Mark a point in time
297
- */
298
- mark(name) {
299
- this.marks.set(name, performance.now());
300
- }
301
- /**
302
- * Log elapsed time with optional fields
303
- */
304
- logElapsed(message, fields) {
305
- const elapsed = performance.now() - this.startTime;
306
- this.logger.debug(message, Object.assign(Object.assign({}, fields), { elapsedMs: elapsed, elapsed: `${elapsed.toFixed(2)}ms` }));
307
- }
308
- /**
309
- * Log time between marks
310
- */
311
- logMarkDuration(fromMark, toMark, message, fields) {
312
- const from = this.marks.get(fromMark);
313
- const to = this.marks.get(toMark);
314
- if (from && to) {
315
- const duration = to - from;
316
- this.logger.debug(message, Object.assign(Object.assign({}, fields), { durationMs: duration, duration: `${duration.toFixed(2)}ms`, fromMark,
317
- toMark }));
318
- }
319
- }
320
- }
321
- exports.PerformanceTimer = PerformanceTimer;
322
- /**
323
- * Generate a unique request ID for distributed tracing
324
- */
325
- function generateRequestId() {
326
- return `req_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
327
- }
328
- /**
329
- * Logger factory for creating loggers with consistent configuration
330
- */
331
- class LoggerFactory {
332
- /**
333
- * Set the default log level for all new loggers
334
- */
335
- static setDefaultLevel(level) {
336
- this.defaultLevel = level;
337
- }
338
- /**
339
- * Set a default logger instance to use
340
- */
341
- static setDefaultLogger(logger) {
342
- this.defaultLogger = logger;
343
- }
344
- /**
345
- * Create a logger instance based on configuration
346
- */
347
- static create(options) {
348
- var _a, _b;
349
- // Use custom logger if provided
350
- if (options === null || options === void 0 ? void 0 : options.custom) {
351
- return options.custom;
352
- }
353
- // Use default logger if set
354
- if (this.defaultLogger) {
355
- return this.defaultLogger;
356
- }
357
- // Determine log level
358
- const level = (_b = (_a = options === null || options === void 0 ? void 0 : options.level) !== null && _a !== void 0 ? _a : getLogLevelFromEnv()) !== null && _b !== void 0 ? _b : this.defaultLevel;
359
- // Create remote logger if configured
360
- if (options === null || options === void 0 ? void 0 : options.remote) {
361
- const fallbackLogger = new ConsoleLogger(level, options === null || options === void 0 ? void 0 : options.prefix);
362
- return new RemoteLogger(options.remote.endpoint, options.remote.apiKey, fallbackLogger);
363
- }
364
- // Create console logger
365
- return new ConsoleLogger(level, options === null || options === void 0 ? void 0 : options.prefix);
366
- }
367
- }
368
- exports.LoggerFactory = LoggerFactory;
369
- LoggerFactory.defaultLevel = LogLevel.SILENT;
370
- LoggerFactory.defaultLogger = null;