datadog-frontend-toolkit 1.0.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/LICENSE +21 -0
- package/README.md +486 -0
- package/dist/cjs/context/ContextManager.js +197 -0
- package/dist/cjs/context/ContextManager.js.map +1 -0
- package/dist/cjs/core/BootstrapGuard.js +81 -0
- package/dist/cjs/core/BootstrapGuard.js.map +1 -0
- package/dist/cjs/core/ConfigManager.js +133 -0
- package/dist/cjs/core/ConfigManager.js.map +1 -0
- package/dist/cjs/core/ObservabilitySDK.js +355 -0
- package/dist/cjs/core/ObservabilitySDK.js.map +1 -0
- package/dist/cjs/errors/ErrorBoundary.js +187 -0
- package/dist/cjs/errors/ErrorBoundary.js.map +1 -0
- package/dist/cjs/index.js +110 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logger/LoggerService.js +256 -0
- package/dist/cjs/logger/LoggerService.js.map +1 -0
- package/dist/cjs/logs/LogsManager.js +112 -0
- package/dist/cjs/logs/LogsManager.js.map +1 -0
- package/dist/cjs/network/NetworkInterceptor.js +185 -0
- package/dist/cjs/network/NetworkInterceptor.js.map +1 -0
- package/dist/cjs/performance/PerformanceMonitor.js +290 -0
- package/dist/cjs/performance/PerformanceMonitor.js.map +1 -0
- package/dist/cjs/resources/ResourceProvisioner.js +210 -0
- package/dist/cjs/resources/ResourceProvisioner.js.map +1 -0
- package/dist/cjs/resources/templates/dashboard.js +333 -0
- package/dist/cjs/resources/templates/dashboard.js.map +1 -0
- package/dist/cjs/resources/templates/monitors.js +120 -0
- package/dist/cjs/resources/templates/monitors.js.map +1 -0
- package/dist/cjs/resources/templates/slos.js +79 -0
- package/dist/cjs/resources/templates/slos.js.map +1 -0
- package/dist/cjs/rum/RumManager.js +164 -0
- package/dist/cjs/rum/RumManager.js.map +1 -0
- package/dist/cjs/types/config.js +13 -0
- package/dist/cjs/types/config.js.map +1 -0
- package/dist/cjs/types/events.js +26 -0
- package/dist/cjs/types/events.js.map +1 -0
- package/dist/cjs/types/index.js +20 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/logger.js +13 -0
- package/dist/cjs/types/logger.js.map +1 -0
- package/dist/cjs/utils/EventEmitter.js +49 -0
- package/dist/cjs/utils/EventEmitter.js.map +1 -0
- package/dist/cjs/utils/fingerprint.js +48 -0
- package/dist/cjs/utils/fingerprint.js.map +1 -0
- package/dist/cjs/utils/retry.js +35 -0
- package/dist/cjs/utils/retry.js.map +1 -0
- package/dist/cjs/utils/sanitizer.js +106 -0
- package/dist/cjs/utils/sanitizer.js.map +1 -0
- package/dist/cjs/utils/storage.js +99 -0
- package/dist/cjs/utils/storage.js.map +1 -0
- package/dist/cli/commands/setup.js +178 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/status.js +103 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompt.js +140 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/esm/context/ContextManager.js +193 -0
- package/dist/esm/context/ContextManager.js.map +1 -0
- package/dist/esm/core/BootstrapGuard.js +77 -0
- package/dist/esm/core/BootstrapGuard.js.map +1 -0
- package/dist/esm/core/ConfigManager.js +129 -0
- package/dist/esm/core/ConfigManager.js.map +1 -0
- package/dist/esm/core/ObservabilitySDK.js +351 -0
- package/dist/esm/core/ObservabilitySDK.js.map +1 -0
- package/dist/esm/errors/ErrorBoundary.js +183 -0
- package/dist/esm/errors/ErrorBoundary.js.map +1 -0
- package/dist/esm/index.js +87 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/logger/LoggerService.js +251 -0
- package/dist/esm/logger/LoggerService.js.map +1 -0
- package/dist/esm/logs/LogsManager.js +108 -0
- package/dist/esm/logs/LogsManager.js.map +1 -0
- package/dist/esm/network/NetworkInterceptor.js +181 -0
- package/dist/esm/network/NetworkInterceptor.js.map +1 -0
- package/dist/esm/performance/PerformanceMonitor.js +286 -0
- package/dist/esm/performance/PerformanceMonitor.js.map +1 -0
- package/dist/esm/resources/ResourceProvisioner.js +206 -0
- package/dist/esm/resources/ResourceProvisioner.js.map +1 -0
- package/dist/esm/resources/templates/dashboard.js +330 -0
- package/dist/esm/resources/templates/dashboard.js.map +1 -0
- package/dist/esm/resources/templates/monitors.js +117 -0
- package/dist/esm/resources/templates/monitors.js.map +1 -0
- package/dist/esm/resources/templates/slos.js +76 -0
- package/dist/esm/resources/templates/slos.js.map +1 -0
- package/dist/esm/rum/RumManager.js +160 -0
- package/dist/esm/rum/RumManager.js.map +1 -0
- package/dist/esm/types/config.js +10 -0
- package/dist/esm/types/config.js.map +1 -0
- package/dist/esm/types/events.js +23 -0
- package/dist/esm/types/events.js.map +1 -0
- package/dist/esm/types/index.js +4 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/logger.js +10 -0
- package/dist/esm/types/logger.js.map +1 -0
- package/dist/esm/utils/EventEmitter.js +45 -0
- package/dist/esm/utils/EventEmitter.js.map +1 -0
- package/dist/esm/utils/fingerprint.js +44 -0
- package/dist/esm/utils/fingerprint.js.map +1 -0
- package/dist/esm/utils/retry.js +32 -0
- package/dist/esm/utils/retry.js.map +1 -0
- package/dist/esm/utils/sanitizer.js +102 -0
- package/dist/esm/utils/sanitizer.js.map +1 -0
- package/dist/esm/utils/storage.js +95 -0
- package/dist/esm/utils/storage.js.map +1 -0
- package/dist/resources/ResourceProvisioner.js +207 -0
- package/dist/resources/ResourceProvisioner.js.map +1 -0
- package/dist/resources/templates/dashboard.js +333 -0
- package/dist/resources/templates/dashboard.js.map +1 -0
- package/dist/resources/templates/monitors.js +120 -0
- package/dist/resources/templates/monitors.js.map +1 -0
- package/dist/resources/templates/slos.js +79 -0
- package/dist/resources/templates/slos.js.map +1 -0
- package/dist/types/config.js +13 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/context/ContextManager.d.ts +63 -0
- package/dist/types/context/ContextManager.d.ts.map +1 -0
- package/dist/types/core/BootstrapGuard.d.ts +46 -0
- package/dist/types/core/BootstrapGuard.d.ts.map +1 -0
- package/dist/types/core/ConfigManager.d.ts +13 -0
- package/dist/types/core/ConfigManager.d.ts.map +1 -0
- package/dist/types/core/ObservabilitySDK.d.ts +141 -0
- package/dist/types/core/ObservabilitySDK.d.ts.map +1 -0
- package/dist/types/errors/ErrorBoundary.d.ts +55 -0
- package/dist/types/errors/ErrorBoundary.d.ts.map +1 -0
- package/dist/types/events.js +26 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +75 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/logger/LoggerService.d.ts +104 -0
- package/dist/types/logger/LoggerService.d.ts.map +1 -0
- package/dist/types/logger.js +13 -0
- package/dist/types/logger.js.map +1 -0
- package/dist/types/logs/LogsManager.d.ts +41 -0
- package/dist/types/logs/LogsManager.d.ts.map +1 -0
- package/dist/types/network/NetworkInterceptor.d.ts +35 -0
- package/dist/types/network/NetworkInterceptor.d.ts.map +1 -0
- package/dist/types/performance/PerformanceMonitor.d.ts +44 -0
- package/dist/types/performance/PerformanceMonitor.d.ts.map +1 -0
- package/dist/types/resources/ResourceProvisioner.d.ts +46 -0
- package/dist/types/resources/ResourceProvisioner.d.ts.map +1 -0
- package/dist/types/resources/templates/dashboard.d.ts +6 -0
- package/dist/types/resources/templates/dashboard.d.ts.map +1 -0
- package/dist/types/resources/templates/monitors.d.ts +11 -0
- package/dist/types/resources/templates/monitors.d.ts.map +1 -0
- package/dist/types/resources/templates/slos.d.ts +18 -0
- package/dist/types/resources/templates/slos.d.ts.map +1 -0
- package/dist/types/rum/RumManager.d.ts +70 -0
- package/dist/types/rum/RumManager.d.ts.map +1 -0
- package/dist/types/types/config.d.ts +271 -0
- package/dist/types/types/config.d.ts.map +1 -0
- package/dist/types/types/events.d.ts +71 -0
- package/dist/types/types/events.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/logger.d.ts +102 -0
- package/dist/types/types/logger.d.ts.map +1 -0
- package/dist/types/utils/EventEmitter.d.ts +14 -0
- package/dist/types/utils/EventEmitter.d.ts.map +1 -0
- package/dist/types/utils/fingerprint.d.ts +10 -0
- package/dist/types/utils/fingerprint.d.ts.map +1 -0
- package/dist/types/utils/retry.d.ts +9 -0
- package/dist/types/utils/retry.d.ts.map +1 -0
- package/dist/types/utils/sanitizer.d.ts +14 -0
- package/dist/types/utils/sanitizer.d.ts.map +1 -0
- package/dist/types/utils/storage.d.ts +17 -0
- package/dist/types/utils/storage.d.ts.map +1 -0
- package/dist/utils/retry.js +35 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { SDKEvent } from '../types/events';
|
|
2
|
+
import { ConfigManager } from './ConfigManager';
|
|
3
|
+
import { BootstrapGuard } from './BootstrapGuard';
|
|
4
|
+
import { ContextManager } from '../context/ContextManager';
|
|
5
|
+
import { RumManager } from '../rum/RumManager';
|
|
6
|
+
import { LogsManager } from '../logs/LogsManager';
|
|
7
|
+
import { LoggerService } from '../logger/LoggerService';
|
|
8
|
+
import { ErrorBoundary } from '../errors/ErrorBoundary';
|
|
9
|
+
import { PerformanceMonitor } from '../performance/PerformanceMonitor';
|
|
10
|
+
import { NetworkInterceptor } from '../network/NetworkInterceptor';
|
|
11
|
+
import { EventEmitter } from '../utils/EventEmitter';
|
|
12
|
+
/**
|
|
13
|
+
* Main orchestrator for the Observability Toolkit.
|
|
14
|
+
*
|
|
15
|
+
* Implements the Facade pattern to provide a single entry point
|
|
16
|
+
* for all observability features. Manages the lifecycle of all
|
|
17
|
+
* sub-modules and coordinates initialization.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { init } from 'datadog-frontend-toolkit';
|
|
22
|
+
*
|
|
23
|
+
* const observatory = init({
|
|
24
|
+
* clientToken: 'pub-xxx',
|
|
25
|
+
* applicationId: 'xxx',
|
|
26
|
+
* service: 'my-app',
|
|
27
|
+
* env: 'production',
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* const logger = observatory.logger;
|
|
31
|
+
* logger.info('App started');
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class ObservabilitySDK {
|
|
35
|
+
static instance = null;
|
|
36
|
+
config;
|
|
37
|
+
emitter;
|
|
38
|
+
contextManager;
|
|
39
|
+
rumManager;
|
|
40
|
+
logsManager;
|
|
41
|
+
errorBoundary;
|
|
42
|
+
performanceMonitor;
|
|
43
|
+
networkInterceptor;
|
|
44
|
+
/** Public logger instance */
|
|
45
|
+
logger;
|
|
46
|
+
destroyed = false;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
// Apply lifecycle hook
|
|
49
|
+
const finalConfig = config.hooks?.beforeInit?.(config) ?? config;
|
|
50
|
+
// Resolve config with defaults
|
|
51
|
+
this.config = ConfigManager.resolve(finalConfig);
|
|
52
|
+
// Initialize core infrastructure
|
|
53
|
+
this.emitter = new EventEmitter();
|
|
54
|
+
this.contextManager = new ContextManager(this.config, this.emitter);
|
|
55
|
+
// Initialize Datadog SDKs
|
|
56
|
+
this.rumManager = new RumManager(this.config, this.contextManager);
|
|
57
|
+
this.logsManager = new LogsManager(this.config, this.contextManager);
|
|
58
|
+
// Initialize logger
|
|
59
|
+
this.logger = new LoggerService(this.logsManager, this.contextManager, this.emitter, {
|
|
60
|
+
minLevel: this.config.logLevel,
|
|
61
|
+
consoleOutput: this.config.consoleOutput,
|
|
62
|
+
service: this.config.service,
|
|
63
|
+
env: this.config.env,
|
|
64
|
+
version: this.config.version,
|
|
65
|
+
piiFields: this.config.privacy.piiFields,
|
|
66
|
+
});
|
|
67
|
+
// Initialize error boundary
|
|
68
|
+
this.errorBoundary = new ErrorBoundary(this.config, this.logger, this.rumManager, this.contextManager, this.emitter);
|
|
69
|
+
// Initialize performance monitor
|
|
70
|
+
this.performanceMonitor = new PerformanceMonitor(this.config, this.logger, this.rumManager, this.emitter);
|
|
71
|
+
// Initialize network interceptor
|
|
72
|
+
this.networkInterceptor = new NetworkInterceptor(this.config, this.logger, this.emitter);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Initializes the Observability SDK.
|
|
76
|
+
* This is the main entry point — call once at application bootstrap.
|
|
77
|
+
*
|
|
78
|
+
* Returns the SDK instance (singleton). Subsequent calls return the same instance.
|
|
79
|
+
*/
|
|
80
|
+
static init(config) {
|
|
81
|
+
const guard = BootstrapGuard.getInstance();
|
|
82
|
+
// Prevent double initialization
|
|
83
|
+
if (ObservabilitySDK.instance && !ObservabilitySDK.instance.destroyed) {
|
|
84
|
+
if (ObservabilitySDK.instance.config.debug) {
|
|
85
|
+
// eslint-disable-next-line no-console
|
|
86
|
+
console.warn('[dd-frontend-toolkit] SDK already initialized. Returning existing instance.');
|
|
87
|
+
}
|
|
88
|
+
return ObservabilitySDK.instance;
|
|
89
|
+
}
|
|
90
|
+
const sdk = new ObservabilitySDK(config);
|
|
91
|
+
ObservabilitySDK.instance = sdk;
|
|
92
|
+
// Track bootstrap
|
|
93
|
+
const isFirstBoot = guard.isFirstBootstrap(sdk.config.service, sdk.config.env);
|
|
94
|
+
guard.markInitialized(sdk.config.service, sdk.config.env, sdk.config.version);
|
|
95
|
+
// Boot all modules
|
|
96
|
+
sdk.boot(isFirstBoot);
|
|
97
|
+
return sdk;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Returns the current SDK instance, or null if not initialized.
|
|
101
|
+
*/
|
|
102
|
+
static getInstance() {
|
|
103
|
+
return ObservabilitySDK.instance;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Destroys the SDK and cleans up all handlers.
|
|
107
|
+
*/
|
|
108
|
+
async destroy() {
|
|
109
|
+
if (this.destroyed)
|
|
110
|
+
return;
|
|
111
|
+
// Teardown plugins
|
|
112
|
+
for (const plugin of this.config.plugins) {
|
|
113
|
+
try {
|
|
114
|
+
await plugin.teardown?.();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// Swallow plugin teardown errors
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
this.errorBoundary.uninstall();
|
|
121
|
+
this.networkInterceptor.uninstall();
|
|
122
|
+
this.performanceMonitor.stop();
|
|
123
|
+
this.rumManager.stop();
|
|
124
|
+
this.emitter.removeAllListeners();
|
|
125
|
+
this.destroyed = true;
|
|
126
|
+
ObservabilitySDK.instance = null;
|
|
127
|
+
this.emitter.emit(SDKEvent.DESTROYED, {
|
|
128
|
+
type: SDKEvent.DESTROYED,
|
|
129
|
+
timestamp: Date.now(),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// ── Public API ──────────────────────────────────────────────
|
|
133
|
+
/**
|
|
134
|
+
* Sets the current user context across all Datadog modules.
|
|
135
|
+
*/
|
|
136
|
+
setUser(user) {
|
|
137
|
+
this.contextManager.setUser(user);
|
|
138
|
+
this.rumManager.setUser(user);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Clears the current user context.
|
|
142
|
+
*/
|
|
143
|
+
clearUser() {
|
|
144
|
+
this.contextManager.clearUser();
|
|
145
|
+
this.rumManager.clearUser();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Adds a key-value pair to the global context.
|
|
149
|
+
*/
|
|
150
|
+
addGlobalContext(key, value) {
|
|
151
|
+
this.contextManager.setGlobalContext(key, value);
|
|
152
|
+
this.rumManager.setGlobalContext(key, value);
|
|
153
|
+
this.logsManager.setGlobalContext(key, value);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Removes a key from the global context.
|
|
157
|
+
*/
|
|
158
|
+
removeGlobalContext(key) {
|
|
159
|
+
this.contextManager.removeGlobalContext(key);
|
|
160
|
+
this.rumManager.removeGlobalContext(key);
|
|
161
|
+
this.logsManager.removeGlobalContext(key);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Sets the current view/route name.
|
|
165
|
+
* Use this when navigating between pages in SPAs.
|
|
166
|
+
*/
|
|
167
|
+
setView(name) {
|
|
168
|
+
this.contextManager.setView(name);
|
|
169
|
+
if (this.config.actions.trackViewsManually) {
|
|
170
|
+
this.rumManager.startView(name);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Tracks a custom user action.
|
|
175
|
+
*/
|
|
176
|
+
trackAction(name, context) {
|
|
177
|
+
this.rumManager.addAction(name, context);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Manually captures an error and sends it to Datadog.
|
|
181
|
+
*/
|
|
182
|
+
captureError(error, context) {
|
|
183
|
+
this.errorBoundary.captureError(error, context);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Captures a message as an error-level event.
|
|
187
|
+
*/
|
|
188
|
+
captureMessage(message, context) {
|
|
189
|
+
this.errorBoundary.captureMessage(message, context);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Records a custom performance timing.
|
|
193
|
+
*/
|
|
194
|
+
addTiming(name, duration) {
|
|
195
|
+
this.rumManager.addTiming(name, duration);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Marks a performance checkpoint.
|
|
199
|
+
*/
|
|
200
|
+
mark(name) {
|
|
201
|
+
this.performanceMonitor.mark(name);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Measures time between two performance marks.
|
|
205
|
+
*/
|
|
206
|
+
measure(name, startMark, endMark) {
|
|
207
|
+
return this.performanceMonitor.measure(name, startMark, endMark);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Starts session replay recording.
|
|
211
|
+
*/
|
|
212
|
+
startSessionReplay() {
|
|
213
|
+
this.rumManager.startSessionReplay();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Stops session replay recording.
|
|
217
|
+
*/
|
|
218
|
+
stopSessionReplay() {
|
|
219
|
+
this.rumManager.stopSessionReplay();
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Grants consent for tracking (when privacy.requireConsent is true).
|
|
223
|
+
*/
|
|
224
|
+
grantConsent() {
|
|
225
|
+
this.emitter.emit(SDKEvent.CONSENT_GRANTED, {
|
|
226
|
+
type: SDKEvent.CONSENT_GRANTED,
|
|
227
|
+
timestamp: Date.now(),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Revokes consent for tracking.
|
|
232
|
+
*/
|
|
233
|
+
revokeConsent() {
|
|
234
|
+
this.emitter.emit(SDKEvent.CONSENT_REVOKED, {
|
|
235
|
+
type: SDKEvent.CONSENT_REVOKED,
|
|
236
|
+
timestamp: Date.now(),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Subscribes to SDK lifecycle events.
|
|
241
|
+
*/
|
|
242
|
+
onEvent(event, handler) {
|
|
243
|
+
this.emitter.on(event, handler);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Unsubscribes from SDK lifecycle events.
|
|
247
|
+
*/
|
|
248
|
+
offEvent(event, handler) {
|
|
249
|
+
this.emitter.off(event, handler);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Returns the resolved (with defaults) configuration.
|
|
253
|
+
*/
|
|
254
|
+
getConfig() {
|
|
255
|
+
return Object.freeze({ ...this.config });
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Returns the RUM internal context (session ID, view ID, etc.).
|
|
259
|
+
*/
|
|
260
|
+
getRumContext() {
|
|
261
|
+
return this.rumManager.getInternalContext();
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Returns whether the SDK has been initialized and is active.
|
|
265
|
+
*/
|
|
266
|
+
isActive() {
|
|
267
|
+
return !this.destroyed;
|
|
268
|
+
}
|
|
269
|
+
// ── Private Boot Sequence ───────────────────────────────────
|
|
270
|
+
boot(isFirstBoot) {
|
|
271
|
+
// 1. Initialize Datadog SDKs
|
|
272
|
+
this.rumManager.init();
|
|
273
|
+
this.logsManager.init();
|
|
274
|
+
// 2. Install error boundary
|
|
275
|
+
if (this.config.errorTracking.enabled) {
|
|
276
|
+
this.errorBoundary.install();
|
|
277
|
+
}
|
|
278
|
+
// 3. Start performance monitoring
|
|
279
|
+
if (this.config.performance.webVitals || this.config.performance.longTasks) {
|
|
280
|
+
this.performanceMonitor.start();
|
|
281
|
+
}
|
|
282
|
+
// 4. Install network interceptor
|
|
283
|
+
if (this.config.network.enabled) {
|
|
284
|
+
this.networkInterceptor.install();
|
|
285
|
+
}
|
|
286
|
+
// 5. Start session replay if configured
|
|
287
|
+
if (this.config.sampling.sessionReplaySampleRate > 0) {
|
|
288
|
+
this.rumManager.startSessionReplay();
|
|
289
|
+
}
|
|
290
|
+
// 6. Load plugins
|
|
291
|
+
this.loadPlugins();
|
|
292
|
+
// 7. Log initialization
|
|
293
|
+
this.logger.info('Observability SDK initialized', {
|
|
294
|
+
service: this.config.service,
|
|
295
|
+
env: this.config.env,
|
|
296
|
+
version: this.config.version,
|
|
297
|
+
isFirstBoot,
|
|
298
|
+
features: {
|
|
299
|
+
rum: this.rumManager.isInitialized(),
|
|
300
|
+
logs: this.logsManager.isInitialized(),
|
|
301
|
+
errorTracking: this.config.errorTracking.enabled,
|
|
302
|
+
performanceMonitoring: this.config.performance.webVitals,
|
|
303
|
+
networkInterception: this.config.network.enabled,
|
|
304
|
+
sessionReplay: this.config.sampling.sessionReplaySampleRate > 0,
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
// 8. Emit initialized event
|
|
308
|
+
this.emitter.emit(SDKEvent.INITIALIZED, {
|
|
309
|
+
type: SDKEvent.INITIALIZED,
|
|
310
|
+
timestamp: Date.now(),
|
|
311
|
+
data: { isFirstBoot },
|
|
312
|
+
});
|
|
313
|
+
// 9. Call afterInit hook
|
|
314
|
+
this.config.hooks.afterInit?.();
|
|
315
|
+
}
|
|
316
|
+
loadPlugins() {
|
|
317
|
+
for (const plugin of this.config.plugins) {
|
|
318
|
+
this.loadPlugin(plugin);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
loadPlugin(plugin) {
|
|
322
|
+
try {
|
|
323
|
+
plugin.setup(this);
|
|
324
|
+
this.emitter.emit(SDKEvent.PLUGIN_LOADED, {
|
|
325
|
+
type: SDKEvent.PLUGIN_LOADED,
|
|
326
|
+
timestamp: Date.now(),
|
|
327
|
+
data: { name: plugin.name, version: plugin.version },
|
|
328
|
+
});
|
|
329
|
+
if (this.config.debug) {
|
|
330
|
+
this.logger.debug(`Plugin loaded: ${plugin.name}@${plugin.version}`);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
this.emitter.emit(SDKEvent.PLUGIN_ERROR, {
|
|
335
|
+
type: SDKEvent.PLUGIN_ERROR,
|
|
336
|
+
timestamp: Date.now(),
|
|
337
|
+
data: {
|
|
338
|
+
name: plugin.name,
|
|
339
|
+
error: error instanceof Error ? error.message : String(error),
|
|
340
|
+
},
|
|
341
|
+
});
|
|
342
|
+
this.logger.error(`Failed to load plugin: ${plugin.name}`, error instanceof Error ? error : new Error(String(error)));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/** @internal For testing only */
|
|
346
|
+
static resetInstance() {
|
|
347
|
+
ObservabilitySDK.instance = null;
|
|
348
|
+
BootstrapGuard.resetInstance();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=ObservabilitySDK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilitySDK.js","sourceRoot":"","sources":["../../../src/core/ObservabilitySDK.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { SDKEvent } from '../types/events';
|
|
2
|
+
/**
|
|
3
|
+
* Global error boundary that intercepts unhandled errors and promise rejections.
|
|
4
|
+
* Automatically forwards them to Datadog with full context.
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - Global window.onerror handler
|
|
8
|
+
* - Unhandled promise rejection handler
|
|
9
|
+
* - Error throttling to prevent log flooding
|
|
10
|
+
* - Error pattern filtering
|
|
11
|
+
* - Stack trace enrichment
|
|
12
|
+
*
|
|
13
|
+
* Follows the Chain of Responsibility pattern for error processing.
|
|
14
|
+
*/
|
|
15
|
+
export class ErrorBoundary {
|
|
16
|
+
config;
|
|
17
|
+
logger;
|
|
18
|
+
rumManager;
|
|
19
|
+
contextManager;
|
|
20
|
+
emitter;
|
|
21
|
+
errorCount = 0;
|
|
22
|
+
errorWindowStart = Date.now();
|
|
23
|
+
installed = false;
|
|
24
|
+
originalOnError = null;
|
|
25
|
+
originalOnUnhandledRejection = null;
|
|
26
|
+
boundErrorHandler;
|
|
27
|
+
boundRejectionHandler;
|
|
28
|
+
constructor(config, logger, rumManager, contextManager, emitter) {
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.logger = logger;
|
|
31
|
+
this.rumManager = rumManager;
|
|
32
|
+
this.contextManager = contextManager;
|
|
33
|
+
this.emitter = emitter;
|
|
34
|
+
this.boundErrorHandler = this.handleError.bind(this);
|
|
35
|
+
this.boundRejectionHandler = this.handleRejection.bind(this);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Installs global error handlers.
|
|
39
|
+
*/
|
|
40
|
+
install() {
|
|
41
|
+
if (this.installed || typeof window === 'undefined') {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Preserve existing handlers
|
|
45
|
+
this.originalOnError = window.onerror;
|
|
46
|
+
this.originalOnUnhandledRejection = window.onunhandledrejection;
|
|
47
|
+
// Install our handlers
|
|
48
|
+
window.addEventListener('error', this.boundErrorHandler);
|
|
49
|
+
if (this.config.errorTracking.unhandledRejections) {
|
|
50
|
+
window.addEventListener('unhandledrejection', this.boundRejectionHandler);
|
|
51
|
+
}
|
|
52
|
+
this.installed = true;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Uninstalls global error handlers and restores originals.
|
|
56
|
+
*/
|
|
57
|
+
uninstall() {
|
|
58
|
+
if (!this.installed || typeof window === 'undefined') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
window.removeEventListener('error', this.boundErrorHandler);
|
|
62
|
+
window.removeEventListener('unhandledrejection', this.boundRejectionHandler);
|
|
63
|
+
// Restore original handlers
|
|
64
|
+
if (this.originalOnError !== undefined) {
|
|
65
|
+
window.onerror = this.originalOnError;
|
|
66
|
+
}
|
|
67
|
+
if (this.originalOnUnhandledRejection !== undefined) {
|
|
68
|
+
window.onunhandledrejection = this.originalOnUnhandledRejection;
|
|
69
|
+
}
|
|
70
|
+
this.installed = false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Manually capture an error (for framework integrations).
|
|
74
|
+
*/
|
|
75
|
+
captureError(error, context) {
|
|
76
|
+
this.processError(error, 'custom', true, context);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Manually capture a message as an error.
|
|
80
|
+
*/
|
|
81
|
+
captureMessage(message, context) {
|
|
82
|
+
const error = new Error(message);
|
|
83
|
+
error.name = 'CapturedMessage';
|
|
84
|
+
this.processError(error, 'custom', true, context);
|
|
85
|
+
}
|
|
86
|
+
handleError(event) {
|
|
87
|
+
const error = event.error instanceof Error
|
|
88
|
+
? event.error
|
|
89
|
+
: new Error(event.message || 'Unknown error');
|
|
90
|
+
if (!(event.error instanceof Error)) {
|
|
91
|
+
error.name = 'UncaughtError';
|
|
92
|
+
}
|
|
93
|
+
const context = {
|
|
94
|
+
filename: event.filename,
|
|
95
|
+
lineno: event.lineno,
|
|
96
|
+
colno: event.colno,
|
|
97
|
+
};
|
|
98
|
+
this.processError(error, 'global', false, context);
|
|
99
|
+
}
|
|
100
|
+
handleRejection(event) {
|
|
101
|
+
const error = event.reason instanceof Error
|
|
102
|
+
? event.reason
|
|
103
|
+
: new Error(typeof event.reason === 'string'
|
|
104
|
+
? event.reason
|
|
105
|
+
: 'Unhandled promise rejection');
|
|
106
|
+
if (!(event.reason instanceof Error)) {
|
|
107
|
+
error.name = 'UnhandledRejection';
|
|
108
|
+
}
|
|
109
|
+
this.processError(error, 'promise', false, {
|
|
110
|
+
type: 'unhandled_rejection',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
processError(error, source, handled, context) {
|
|
114
|
+
// Check if error should be ignored
|
|
115
|
+
if (this.shouldIgnore(error)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Throttle check
|
|
119
|
+
if (this.isThrottled()) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Enrich context
|
|
123
|
+
const enrichedContext = {
|
|
124
|
+
...context,
|
|
125
|
+
error_source: source,
|
|
126
|
+
handled,
|
|
127
|
+
url: typeof window !== 'undefined' ? window.location.href : undefined,
|
|
128
|
+
view: this.contextManager.getView(),
|
|
129
|
+
user_id: this.contextManager.getUser()?.id,
|
|
130
|
+
};
|
|
131
|
+
// Log the error
|
|
132
|
+
this.logger.error(`[${source}] ${error.message}`, error, enrichedContext);
|
|
133
|
+
// Report to RUM
|
|
134
|
+
this.rumManager.addError(error, enrichedContext);
|
|
135
|
+
// Emit event
|
|
136
|
+
const payload = {
|
|
137
|
+
type: SDKEvent.ERROR_CAPTURED,
|
|
138
|
+
timestamp: Date.now(),
|
|
139
|
+
data: {
|
|
140
|
+
error,
|
|
141
|
+
source,
|
|
142
|
+
context: enrichedContext,
|
|
143
|
+
handled,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
this.emitter.emit(SDKEvent.ERROR_CAPTURED, payload);
|
|
147
|
+
}
|
|
148
|
+
shouldIgnore(error) {
|
|
149
|
+
const message = error.message || '';
|
|
150
|
+
return this.config.errorTracking.ignorePatterns.some((pattern) => {
|
|
151
|
+
if (typeof pattern === 'string') {
|
|
152
|
+
return message.includes(pattern);
|
|
153
|
+
}
|
|
154
|
+
return pattern.test(message);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
isThrottled() {
|
|
158
|
+
const now = Date.now();
|
|
159
|
+
const windowMs = 60000; // 1 minute window
|
|
160
|
+
// Reset window if expired
|
|
161
|
+
if (now - this.errorWindowStart > windowMs) {
|
|
162
|
+
this.errorCount = 0;
|
|
163
|
+
this.errorWindowStart = now;
|
|
164
|
+
}
|
|
165
|
+
this.errorCount++;
|
|
166
|
+
if (this.errorCount > this.config.errorTracking.maxErrorsPerMinute) {
|
|
167
|
+
if (this.errorCount === this.config.errorTracking.maxErrorsPerMinute + 1) {
|
|
168
|
+
// Log throttle activation once
|
|
169
|
+
this.emitter.emit(SDKEvent.THROTTLE_ACTIVATED, {
|
|
170
|
+
type: SDKEvent.THROTTLE_ACTIVATED,
|
|
171
|
+
timestamp: now,
|
|
172
|
+
data: {
|
|
173
|
+
errorsPerMinute: this.errorCount,
|
|
174
|
+
threshold: this.config.errorTracking.maxErrorsPerMinute,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../../src/errors/ErrorBoundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* datadog-frontend-toolkit
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade, framework-agnostic frontend observability toolkit for Datadog.
|
|
5
|
+
* Auto-instruments RUM, Logs, Error Tracking, Performance Monitoring,
|
|
6
|
+
* and provisions Dashboards, Monitors & SLOs.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { init } from 'datadog-frontend-toolkit';
|
|
11
|
+
*
|
|
12
|
+
* const observatory = init({
|
|
13
|
+
* clientToken: 'pub-xxx',
|
|
14
|
+
* applicationId: 'xxx-xxx-xxx',
|
|
15
|
+
* service: 'my-frontend-app',
|
|
16
|
+
* env: 'production',
|
|
17
|
+
* version: '1.2.3',
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Use the logger
|
|
21
|
+
* observatory.logger.info('Application started');
|
|
22
|
+
* observatory.logger.error('Something failed', new Error('oops'), { orderId: '123' });
|
|
23
|
+
*
|
|
24
|
+
* // Set user context
|
|
25
|
+
* observatory.setUser({ id: 'user-1', name: 'John', email: 'john@example.com' });
|
|
26
|
+
*
|
|
27
|
+
* // Track custom actions
|
|
28
|
+
* observatory.trackAction('checkout_completed', { total: 99.99 });
|
|
29
|
+
*
|
|
30
|
+
* // SPA view tracking
|
|
31
|
+
* observatory.setView('/dashboard');
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @packageDocumentation
|
|
35
|
+
*/
|
|
36
|
+
import { ObservabilitySDK } from './core/ObservabilitySDK';
|
|
37
|
+
// ── Main init function ──────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Initializes the Observability SDK with the given configuration.
|
|
40
|
+
* Call this once at application bootstrap.
|
|
41
|
+
*
|
|
42
|
+
* @param config - SDK configuration. Only `clientToken`, `applicationId`, `service`, and `env` are required.
|
|
43
|
+
* @returns The SDK instance with logger and all observability features.
|
|
44
|
+
*/
|
|
45
|
+
export function init(config) {
|
|
46
|
+
return ObservabilitySDK.init(config);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the current SDK instance, or null if not initialized.
|
|
50
|
+
* Useful for accessing the SDK from anywhere without passing references.
|
|
51
|
+
*/
|
|
52
|
+
export function getInstance() {
|
|
53
|
+
return ObservabilitySDK.getInstance();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Shorthand to get the logger from the current SDK instance.
|
|
57
|
+
* Throws if the SDK has not been initialized.
|
|
58
|
+
*/
|
|
59
|
+
export function getLogger() {
|
|
60
|
+
const instance = ObservabilitySDK.getInstance();
|
|
61
|
+
if (!instance) {
|
|
62
|
+
throw new Error('[dd-frontend-toolkit] SDK not initialized. Call init() first.');
|
|
63
|
+
}
|
|
64
|
+
return instance.logger;
|
|
65
|
+
}
|
|
66
|
+
// ── Re-exports ──────────────────────────────────────────────
|
|
67
|
+
// Core
|
|
68
|
+
export { ObservabilitySDK } from './core/ObservabilitySDK';
|
|
69
|
+
export { ConfigManager } from './core/ConfigManager';
|
|
70
|
+
export { BootstrapGuard } from './core/BootstrapGuard';
|
|
71
|
+
// Modules
|
|
72
|
+
export { LoggerService, ChildLogger } from './logger/LoggerService';
|
|
73
|
+
export { RumManager } from './rum/RumManager';
|
|
74
|
+
export { LogsManager } from './logs/LogsManager';
|
|
75
|
+
export { ErrorBoundary } from './errors/ErrorBoundary';
|
|
76
|
+
export { PerformanceMonitor } from './performance/PerformanceMonitor';
|
|
77
|
+
export { NetworkInterceptor } from './network/NetworkInterceptor';
|
|
78
|
+
export { ContextManager } from './context/ContextManager';
|
|
79
|
+
// Resource provisioning (CLI/server-side only)
|
|
80
|
+
export { ResourceProvisioner } from './resources/ResourceProvisioner';
|
|
81
|
+
// Utilities
|
|
82
|
+
export { Sanitizer } from './utils/sanitizer';
|
|
83
|
+
export { EventEmitter } from './utils/EventEmitter';
|
|
84
|
+
export { LogLevel } from './types/config';
|
|
85
|
+
export { LOG_LEVEL_PRIORITY } from './types/logger';
|
|
86
|
+
export { SDKEvent } from './types/events';
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,+DAA+D;AAE/D;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,MAA2B;IAC9C,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED,+DAA+D;AAE/D,OAAO;AACP,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,+CAA+C;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAuBpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAa1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAWpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|