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.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +486 -0
  3. package/dist/cjs/context/ContextManager.js +197 -0
  4. package/dist/cjs/context/ContextManager.js.map +1 -0
  5. package/dist/cjs/core/BootstrapGuard.js +81 -0
  6. package/dist/cjs/core/BootstrapGuard.js.map +1 -0
  7. package/dist/cjs/core/ConfigManager.js +133 -0
  8. package/dist/cjs/core/ConfigManager.js.map +1 -0
  9. package/dist/cjs/core/ObservabilitySDK.js +355 -0
  10. package/dist/cjs/core/ObservabilitySDK.js.map +1 -0
  11. package/dist/cjs/errors/ErrorBoundary.js +187 -0
  12. package/dist/cjs/errors/ErrorBoundary.js.map +1 -0
  13. package/dist/cjs/index.js +110 -0
  14. package/dist/cjs/index.js.map +1 -0
  15. package/dist/cjs/logger/LoggerService.js +256 -0
  16. package/dist/cjs/logger/LoggerService.js.map +1 -0
  17. package/dist/cjs/logs/LogsManager.js +112 -0
  18. package/dist/cjs/logs/LogsManager.js.map +1 -0
  19. package/dist/cjs/network/NetworkInterceptor.js +185 -0
  20. package/dist/cjs/network/NetworkInterceptor.js.map +1 -0
  21. package/dist/cjs/performance/PerformanceMonitor.js +290 -0
  22. package/dist/cjs/performance/PerformanceMonitor.js.map +1 -0
  23. package/dist/cjs/resources/ResourceProvisioner.js +210 -0
  24. package/dist/cjs/resources/ResourceProvisioner.js.map +1 -0
  25. package/dist/cjs/resources/templates/dashboard.js +333 -0
  26. package/dist/cjs/resources/templates/dashboard.js.map +1 -0
  27. package/dist/cjs/resources/templates/monitors.js +120 -0
  28. package/dist/cjs/resources/templates/monitors.js.map +1 -0
  29. package/dist/cjs/resources/templates/slos.js +79 -0
  30. package/dist/cjs/resources/templates/slos.js.map +1 -0
  31. package/dist/cjs/rum/RumManager.js +164 -0
  32. package/dist/cjs/rum/RumManager.js.map +1 -0
  33. package/dist/cjs/types/config.js +13 -0
  34. package/dist/cjs/types/config.js.map +1 -0
  35. package/dist/cjs/types/events.js +26 -0
  36. package/dist/cjs/types/events.js.map +1 -0
  37. package/dist/cjs/types/index.js +20 -0
  38. package/dist/cjs/types/index.js.map +1 -0
  39. package/dist/cjs/types/logger.js +13 -0
  40. package/dist/cjs/types/logger.js.map +1 -0
  41. package/dist/cjs/utils/EventEmitter.js +49 -0
  42. package/dist/cjs/utils/EventEmitter.js.map +1 -0
  43. package/dist/cjs/utils/fingerprint.js +48 -0
  44. package/dist/cjs/utils/fingerprint.js.map +1 -0
  45. package/dist/cjs/utils/retry.js +35 -0
  46. package/dist/cjs/utils/retry.js.map +1 -0
  47. package/dist/cjs/utils/sanitizer.js +106 -0
  48. package/dist/cjs/utils/sanitizer.js.map +1 -0
  49. package/dist/cjs/utils/storage.js +99 -0
  50. package/dist/cjs/utils/storage.js.map +1 -0
  51. package/dist/cli/commands/setup.js +178 -0
  52. package/dist/cli/commands/setup.js.map +1 -0
  53. package/dist/cli/commands/status.js +103 -0
  54. package/dist/cli/commands/status.js.map +1 -0
  55. package/dist/cli/index.js +111 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/cli/prompt.js +140 -0
  58. package/dist/cli/prompt.js.map +1 -0
  59. package/dist/esm/context/ContextManager.js +193 -0
  60. package/dist/esm/context/ContextManager.js.map +1 -0
  61. package/dist/esm/core/BootstrapGuard.js +77 -0
  62. package/dist/esm/core/BootstrapGuard.js.map +1 -0
  63. package/dist/esm/core/ConfigManager.js +129 -0
  64. package/dist/esm/core/ConfigManager.js.map +1 -0
  65. package/dist/esm/core/ObservabilitySDK.js +351 -0
  66. package/dist/esm/core/ObservabilitySDK.js.map +1 -0
  67. package/dist/esm/errors/ErrorBoundary.js +183 -0
  68. package/dist/esm/errors/ErrorBoundary.js.map +1 -0
  69. package/dist/esm/index.js +87 -0
  70. package/dist/esm/index.js.map +1 -0
  71. package/dist/esm/logger/LoggerService.js +251 -0
  72. package/dist/esm/logger/LoggerService.js.map +1 -0
  73. package/dist/esm/logs/LogsManager.js +108 -0
  74. package/dist/esm/logs/LogsManager.js.map +1 -0
  75. package/dist/esm/network/NetworkInterceptor.js +181 -0
  76. package/dist/esm/network/NetworkInterceptor.js.map +1 -0
  77. package/dist/esm/performance/PerformanceMonitor.js +286 -0
  78. package/dist/esm/performance/PerformanceMonitor.js.map +1 -0
  79. package/dist/esm/resources/ResourceProvisioner.js +206 -0
  80. package/dist/esm/resources/ResourceProvisioner.js.map +1 -0
  81. package/dist/esm/resources/templates/dashboard.js +330 -0
  82. package/dist/esm/resources/templates/dashboard.js.map +1 -0
  83. package/dist/esm/resources/templates/monitors.js +117 -0
  84. package/dist/esm/resources/templates/monitors.js.map +1 -0
  85. package/dist/esm/resources/templates/slos.js +76 -0
  86. package/dist/esm/resources/templates/slos.js.map +1 -0
  87. package/dist/esm/rum/RumManager.js +160 -0
  88. package/dist/esm/rum/RumManager.js.map +1 -0
  89. package/dist/esm/types/config.js +10 -0
  90. package/dist/esm/types/config.js.map +1 -0
  91. package/dist/esm/types/events.js +23 -0
  92. package/dist/esm/types/events.js.map +1 -0
  93. package/dist/esm/types/index.js +4 -0
  94. package/dist/esm/types/index.js.map +1 -0
  95. package/dist/esm/types/logger.js +10 -0
  96. package/dist/esm/types/logger.js.map +1 -0
  97. package/dist/esm/utils/EventEmitter.js +45 -0
  98. package/dist/esm/utils/EventEmitter.js.map +1 -0
  99. package/dist/esm/utils/fingerprint.js +44 -0
  100. package/dist/esm/utils/fingerprint.js.map +1 -0
  101. package/dist/esm/utils/retry.js +32 -0
  102. package/dist/esm/utils/retry.js.map +1 -0
  103. package/dist/esm/utils/sanitizer.js +102 -0
  104. package/dist/esm/utils/sanitizer.js.map +1 -0
  105. package/dist/esm/utils/storage.js +95 -0
  106. package/dist/esm/utils/storage.js.map +1 -0
  107. package/dist/resources/ResourceProvisioner.js +207 -0
  108. package/dist/resources/ResourceProvisioner.js.map +1 -0
  109. package/dist/resources/templates/dashboard.js +333 -0
  110. package/dist/resources/templates/dashboard.js.map +1 -0
  111. package/dist/resources/templates/monitors.js +120 -0
  112. package/dist/resources/templates/monitors.js.map +1 -0
  113. package/dist/resources/templates/slos.js +79 -0
  114. package/dist/resources/templates/slos.js.map +1 -0
  115. package/dist/types/config.js +13 -0
  116. package/dist/types/config.js.map +1 -0
  117. package/dist/types/context/ContextManager.d.ts +63 -0
  118. package/dist/types/context/ContextManager.d.ts.map +1 -0
  119. package/dist/types/core/BootstrapGuard.d.ts +46 -0
  120. package/dist/types/core/BootstrapGuard.d.ts.map +1 -0
  121. package/dist/types/core/ConfigManager.d.ts +13 -0
  122. package/dist/types/core/ConfigManager.d.ts.map +1 -0
  123. package/dist/types/core/ObservabilitySDK.d.ts +141 -0
  124. package/dist/types/core/ObservabilitySDK.d.ts.map +1 -0
  125. package/dist/types/errors/ErrorBoundary.d.ts +55 -0
  126. package/dist/types/errors/ErrorBoundary.d.ts.map +1 -0
  127. package/dist/types/events.js +26 -0
  128. package/dist/types/events.js.map +1 -0
  129. package/dist/types/index.d.ts +75 -0
  130. package/dist/types/index.d.ts.map +1 -0
  131. package/dist/types/index.js +20 -0
  132. package/dist/types/index.js.map +1 -0
  133. package/dist/types/logger/LoggerService.d.ts +104 -0
  134. package/dist/types/logger/LoggerService.d.ts.map +1 -0
  135. package/dist/types/logger.js +13 -0
  136. package/dist/types/logger.js.map +1 -0
  137. package/dist/types/logs/LogsManager.d.ts +41 -0
  138. package/dist/types/logs/LogsManager.d.ts.map +1 -0
  139. package/dist/types/network/NetworkInterceptor.d.ts +35 -0
  140. package/dist/types/network/NetworkInterceptor.d.ts.map +1 -0
  141. package/dist/types/performance/PerformanceMonitor.d.ts +44 -0
  142. package/dist/types/performance/PerformanceMonitor.d.ts.map +1 -0
  143. package/dist/types/resources/ResourceProvisioner.d.ts +46 -0
  144. package/dist/types/resources/ResourceProvisioner.d.ts.map +1 -0
  145. package/dist/types/resources/templates/dashboard.d.ts +6 -0
  146. package/dist/types/resources/templates/dashboard.d.ts.map +1 -0
  147. package/dist/types/resources/templates/monitors.d.ts +11 -0
  148. package/dist/types/resources/templates/monitors.d.ts.map +1 -0
  149. package/dist/types/resources/templates/slos.d.ts +18 -0
  150. package/dist/types/resources/templates/slos.d.ts.map +1 -0
  151. package/dist/types/rum/RumManager.d.ts +70 -0
  152. package/dist/types/rum/RumManager.d.ts.map +1 -0
  153. package/dist/types/types/config.d.ts +271 -0
  154. package/dist/types/types/config.d.ts.map +1 -0
  155. package/dist/types/types/events.d.ts +71 -0
  156. package/dist/types/types/events.d.ts.map +1 -0
  157. package/dist/types/types/index.d.ts +4 -0
  158. package/dist/types/types/index.d.ts.map +1 -0
  159. package/dist/types/types/logger.d.ts +102 -0
  160. package/dist/types/types/logger.d.ts.map +1 -0
  161. package/dist/types/utils/EventEmitter.d.ts +14 -0
  162. package/dist/types/utils/EventEmitter.d.ts.map +1 -0
  163. package/dist/types/utils/fingerprint.d.ts +10 -0
  164. package/dist/types/utils/fingerprint.d.ts.map +1 -0
  165. package/dist/types/utils/retry.d.ts +9 -0
  166. package/dist/types/utils/retry.d.ts.map +1 -0
  167. package/dist/types/utils/sanitizer.d.ts +14 -0
  168. package/dist/types/utils/sanitizer.d.ts.map +1 -0
  169. package/dist/types/utils/storage.d.ts +17 -0
  170. package/dist/types/utils/storage.d.ts.map +1 -0
  171. package/dist/utils/retry.js +35 -0
  172. package/dist/utils/retry.js.map +1 -0
  173. package/package.json +84 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BootstrapGuard = void 0;
4
+ const storage_1 = require("../utils/storage");
5
+ const BOOTSTRAP_KEY = 'bootstrap_record';
6
+ /**
7
+ * Guards against duplicate initialization and tracks bootstrap state.
8
+ * Ensures the SDK is only initialized once per page lifecycle,
9
+ * while persisting bootstrap history across sessions.
10
+ */
11
+ class BootstrapGuard {
12
+ static instance = null;
13
+ storage;
14
+ initialized = false;
15
+ constructor() {
16
+ this.storage = new storage_1.StorageManager();
17
+ }
18
+ static getInstance() {
19
+ if (!BootstrapGuard.instance) {
20
+ BootstrapGuard.instance = new BootstrapGuard();
21
+ }
22
+ return BootstrapGuard.instance;
23
+ }
24
+ /**
25
+ * Returns true if this is the first bootstrap for this service+env combination.
26
+ */
27
+ isFirstBootstrap(service, env) {
28
+ const record = this.getRecord(service, env);
29
+ return record === undefined;
30
+ }
31
+ /**
32
+ * Marks the current session as initialized.
33
+ * Returns false if already initialized in this page lifecycle (prevents double-init).
34
+ */
35
+ markInitialized(service, env, version) {
36
+ if (this.initialized) {
37
+ return false;
38
+ }
39
+ const existing = this.getRecord(service, env);
40
+ const now = new Date().toISOString();
41
+ const record = {
42
+ service,
43
+ env,
44
+ version,
45
+ initializedAt: existing?.initializedAt ?? now,
46
+ lastSeenAt: now,
47
+ bootstrapCount: (existing?.bootstrapCount ?? 0) + 1,
48
+ };
49
+ this.storage.set(this.buildKey(service, env), record);
50
+ this.initialized = true;
51
+ return true;
52
+ }
53
+ /**
54
+ * Returns the bootstrap record for a service+env combination.
55
+ */
56
+ getRecord(service, env) {
57
+ return this.storage.get(this.buildKey(service, env));
58
+ }
59
+ /**
60
+ * Resets the initialization flag (for teardown/testing).
61
+ */
62
+ reset() {
63
+ this.initialized = false;
64
+ }
65
+ /**
66
+ * Completely clears bootstrap state (for testing).
67
+ */
68
+ clear() {
69
+ this.initialized = false;
70
+ this.storage.clear();
71
+ }
72
+ /** @internal For testing only */
73
+ static resetInstance() {
74
+ BootstrapGuard.instance = null;
75
+ }
76
+ buildKey(service, env) {
77
+ return `${BOOTSTRAP_KEY}_${service}_${env}`;
78
+ }
79
+ }
80
+ exports.BootstrapGuard = BootstrapGuard;
81
+ //# sourceMappingURL=BootstrapGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BootstrapGuard.js","sourceRoot":"","sources":["../../../src/core/BootstrapGuard.ts"],"names":[],"mappings":";;;AAAA,8CAAkD;AAWlD,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEzC;;;;GAIG;AACH,MAAa,cAAc;IACjB,MAAM,CAAC,QAAQ,GAA0B,IAAI,CAAC;IACrC,OAAO,CAAiB;IACjC,WAAW,GAAG,KAAK,CAAC;IAE5B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,wBAAc,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAe,EAAE,GAAW;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,MAAM,KAAK,SAAS,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,OAAe,EAAE,GAAW,EAAE,OAAe;QAC3D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,MAAM,GAAoB;YAC9B,OAAO;YACP,GAAG;YACH,OAAO;YACP,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,GAAG;YAC7C,UAAU,EAAE,GAAG;YACf,cAAc,EAAE,CAAC,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC;SACpD,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,GAAW;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAkB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,aAAa;QAClB,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,CAAC;IAEO,QAAQ,CAAC,OAAe,EAAE,GAAW;QAC3C,OAAO,GAAG,aAAa,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;IAC9C,CAAC;;AA/EH,wCAgFC"}
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigManager = void 0;
4
+ const config_1 = require("../types/config");
5
+ /**
6
+ * Resolves user-provided config with sensible defaults.
7
+ * Validates required fields and applies environment-aware defaults.
8
+ * Follows the Builder pattern to construct a fully resolved config.
9
+ */
10
+ class ConfigManager {
11
+ static REQUIRED_FIELDS = [
12
+ 'clientToken',
13
+ 'applicationId',
14
+ 'service',
15
+ 'env',
16
+ ];
17
+ static resolve(config) {
18
+ ConfigManager.validate(config);
19
+ const isDev = config.env === 'development' || config.env === 'test';
20
+ return {
21
+ // Required
22
+ clientToken: config.clientToken,
23
+ applicationId: config.applicationId,
24
+ service: config.service,
25
+ env: config.env,
26
+ // Core with defaults
27
+ version: config.version ?? '0.0.0',
28
+ site: config.site ?? 'datadoghq.com',
29
+ debug: config.debug ?? isDev,
30
+ logLevel: config.logLevel ?? (isDev ? config_1.LogLevel.DEBUG : config_1.LogLevel.WARN),
31
+ consoleOutput: config.consoleOutput ?? isDev,
32
+ // Sampling
33
+ sampling: {
34
+ sessionSampleRate: config.sampling?.sessionSampleRate ?? 100,
35
+ sessionReplaySampleRate: config.sampling?.sessionReplaySampleRate ?? 20,
36
+ traceSampleRate: config.sampling?.traceSampleRate ?? 100,
37
+ logSampleRate: config.sampling?.logSampleRate ?? 100,
38
+ },
39
+ // Network
40
+ network: {
41
+ enabled: config.network?.enabled ?? true,
42
+ excludeUrls: config.network?.excludeUrls ?? [],
43
+ trackHeaders: config.network?.trackHeaders ?? false,
44
+ trackBodies: config.network?.trackBodies ?? false,
45
+ maxBodySize: config.network?.maxBodySize ?? 4096,
46
+ failedOnly: config.network?.failedOnly ?? false,
47
+ },
48
+ // Performance
49
+ performance: {
50
+ webVitals: config.performance?.webVitals ?? true,
51
+ longTasks: config.performance?.longTasks ?? true,
52
+ longTaskThreshold: config.performance?.longTaskThreshold ?? 50,
53
+ resourceTiming: config.performance?.resourceTiming ?? true,
54
+ firstInputDelay: config.performance?.firstInputDelay ?? true,
55
+ cumulativeLayoutShift: config.performance?.cumulativeLayoutShift ?? true,
56
+ largestContentfulPaint: config.performance?.largestContentfulPaint ?? true,
57
+ interactionToNextPaint: config.performance?.interactionToNextPaint ?? true,
58
+ customMarks: config.performance?.customMarks ?? [],
59
+ },
60
+ // Error tracking
61
+ errorTracking: {
62
+ enabled: config.errorTracking?.enabled ?? true,
63
+ unhandledRejections: config.errorTracking?.unhandledRejections ?? true,
64
+ consoleErrors: config.errorTracking?.consoleErrors ?? true,
65
+ ignorePatterns: config.errorTracking?.ignorePatterns ?? [],
66
+ maxErrorsPerMinute: config.errorTracking?.maxErrorsPerMinute ?? 100,
67
+ captureStackTraces: config.errorTracking?.captureStackTraces ?? true,
68
+ fingerprint: config.errorTracking?.fingerprint,
69
+ },
70
+ // Session
71
+ session: {
72
+ enabled: config.session?.enabled ?? true,
73
+ timeout: config.session?.timeout ?? 1800000,
74
+ crossTabSync: config.session?.crossTabSync ?? true,
75
+ },
76
+ // Actions
77
+ actions: {
78
+ trackUserInteractions: config.actions?.trackUserInteractions ?? true,
79
+ trackFrustrations: config.actions?.trackFrustrations ?? true,
80
+ trackViewsManually: config.actions?.trackViewsManually ?? false,
81
+ },
82
+ // Privacy
83
+ privacy: {
84
+ defaultPrivacyLevel: config.privacy?.defaultPrivacyLevel ?? 'mask-user-input',
85
+ piiFields: config.privacy?.piiFields ?? [],
86
+ requireConsent: config.privacy?.requireConsent ?? false,
87
+ consentPurposes: config.privacy?.consentPurposes ?? [],
88
+ },
89
+ // Context
90
+ user: config.user,
91
+ globalContext: config.globalContext ?? {},
92
+ tags: config.tags ?? [],
93
+ plugins: config.plugins ?? [],
94
+ hooks: config.hooks ?? {},
95
+ // Advanced
96
+ proxy: config.proxy,
97
+ allowedTracingUrls: config.allowedTracingUrls ?? [],
98
+ rumOverrides: config.rumOverrides ?? {},
99
+ logsOverrides: config.logsOverrides ?? {},
100
+ provisioning: config.provisioning,
101
+ };
102
+ }
103
+ static validate(config) {
104
+ const errors = [];
105
+ for (const field of ConfigManager.REQUIRED_FIELDS) {
106
+ if (!config[field]) {
107
+ errors.push(`Missing required field: '${field}'`);
108
+ }
109
+ }
110
+ if (config.sampling?.sessionSampleRate !== undefined) {
111
+ ConfigManager.validateRange('sampling.sessionSampleRate', config.sampling.sessionSampleRate, 0, 100, errors);
112
+ }
113
+ if (config.sampling?.sessionReplaySampleRate !== undefined) {
114
+ ConfigManager.validateRange('sampling.sessionReplaySampleRate', config.sampling.sessionReplaySampleRate, 0, 100, errors);
115
+ }
116
+ if (config.sampling?.traceSampleRate !== undefined) {
117
+ ConfigManager.validateRange('sampling.traceSampleRate', config.sampling.traceSampleRate, 0, 100, errors);
118
+ }
119
+ if (config.errorTracking?.maxErrorsPerMinute !== undefined && config.errorTracking.maxErrorsPerMinute < 1) {
120
+ errors.push('errorTracking.maxErrorsPerMinute must be >= 1');
121
+ }
122
+ if (errors.length > 0) {
123
+ throw new Error(`[dd-frontend-toolkit] Configuration errors:\n${errors.map((e) => ` - ${e}`).join('\n')}`);
124
+ }
125
+ }
126
+ static validateRange(field, value, min, max, errors) {
127
+ if (value < min || value > max) {
128
+ errors.push(`${field} must be between ${min} and ${max}, got ${value}`);
129
+ }
130
+ }
131
+ }
132
+ exports.ConfigManager = ConfigManager;
133
+ //# sourceMappingURL=ConfigManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../../src/core/ConfigManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObservabilitySDK = void 0;
4
+ const events_1 = require("../types/events");
5
+ const ConfigManager_1 = require("./ConfigManager");
6
+ const BootstrapGuard_1 = require("./BootstrapGuard");
7
+ const ContextManager_1 = require("../context/ContextManager");
8
+ const RumManager_1 = require("../rum/RumManager");
9
+ const LogsManager_1 = require("../logs/LogsManager");
10
+ const LoggerService_1 = require("../logger/LoggerService");
11
+ const ErrorBoundary_1 = require("../errors/ErrorBoundary");
12
+ const PerformanceMonitor_1 = require("../performance/PerformanceMonitor");
13
+ const NetworkInterceptor_1 = require("../network/NetworkInterceptor");
14
+ const EventEmitter_1 = require("../utils/EventEmitter");
15
+ /**
16
+ * Main orchestrator for the Observability Toolkit.
17
+ *
18
+ * Implements the Facade pattern to provide a single entry point
19
+ * for all observability features. Manages the lifecycle of all
20
+ * sub-modules and coordinates initialization.
21
+ *
22
+ * Usage:
23
+ * ```ts
24
+ * import { init } from 'datadog-frontend-toolkit';
25
+ *
26
+ * const observatory = init({
27
+ * clientToken: 'pub-xxx',
28
+ * applicationId: 'xxx',
29
+ * service: 'my-app',
30
+ * env: 'production',
31
+ * });
32
+ *
33
+ * const logger = observatory.logger;
34
+ * logger.info('App started');
35
+ * ```
36
+ */
37
+ class ObservabilitySDK {
38
+ static instance = null;
39
+ config;
40
+ emitter;
41
+ contextManager;
42
+ rumManager;
43
+ logsManager;
44
+ errorBoundary;
45
+ performanceMonitor;
46
+ networkInterceptor;
47
+ /** Public logger instance */
48
+ logger;
49
+ destroyed = false;
50
+ constructor(config) {
51
+ // Apply lifecycle hook
52
+ const finalConfig = config.hooks?.beforeInit?.(config) ?? config;
53
+ // Resolve config with defaults
54
+ this.config = ConfigManager_1.ConfigManager.resolve(finalConfig);
55
+ // Initialize core infrastructure
56
+ this.emitter = new EventEmitter_1.EventEmitter();
57
+ this.contextManager = new ContextManager_1.ContextManager(this.config, this.emitter);
58
+ // Initialize Datadog SDKs
59
+ this.rumManager = new RumManager_1.RumManager(this.config, this.contextManager);
60
+ this.logsManager = new LogsManager_1.LogsManager(this.config, this.contextManager);
61
+ // Initialize logger
62
+ this.logger = new LoggerService_1.LoggerService(this.logsManager, this.contextManager, this.emitter, {
63
+ minLevel: this.config.logLevel,
64
+ consoleOutput: this.config.consoleOutput,
65
+ service: this.config.service,
66
+ env: this.config.env,
67
+ version: this.config.version,
68
+ piiFields: this.config.privacy.piiFields,
69
+ });
70
+ // Initialize error boundary
71
+ this.errorBoundary = new ErrorBoundary_1.ErrorBoundary(this.config, this.logger, this.rumManager, this.contextManager, this.emitter);
72
+ // Initialize performance monitor
73
+ this.performanceMonitor = new PerformanceMonitor_1.PerformanceMonitor(this.config, this.logger, this.rumManager, this.emitter);
74
+ // Initialize network interceptor
75
+ this.networkInterceptor = new NetworkInterceptor_1.NetworkInterceptor(this.config, this.logger, this.emitter);
76
+ }
77
+ /**
78
+ * Initializes the Observability SDK.
79
+ * This is the main entry point — call once at application bootstrap.
80
+ *
81
+ * Returns the SDK instance (singleton). Subsequent calls return the same instance.
82
+ */
83
+ static init(config) {
84
+ const guard = BootstrapGuard_1.BootstrapGuard.getInstance();
85
+ // Prevent double initialization
86
+ if (ObservabilitySDK.instance && !ObservabilitySDK.instance.destroyed) {
87
+ if (ObservabilitySDK.instance.config.debug) {
88
+ // eslint-disable-next-line no-console
89
+ console.warn('[dd-frontend-toolkit] SDK already initialized. Returning existing instance.');
90
+ }
91
+ return ObservabilitySDK.instance;
92
+ }
93
+ const sdk = new ObservabilitySDK(config);
94
+ ObservabilitySDK.instance = sdk;
95
+ // Track bootstrap
96
+ const isFirstBoot = guard.isFirstBootstrap(sdk.config.service, sdk.config.env);
97
+ guard.markInitialized(sdk.config.service, sdk.config.env, sdk.config.version);
98
+ // Boot all modules
99
+ sdk.boot(isFirstBoot);
100
+ return sdk;
101
+ }
102
+ /**
103
+ * Returns the current SDK instance, or null if not initialized.
104
+ */
105
+ static getInstance() {
106
+ return ObservabilitySDK.instance;
107
+ }
108
+ /**
109
+ * Destroys the SDK and cleans up all handlers.
110
+ */
111
+ async destroy() {
112
+ if (this.destroyed)
113
+ return;
114
+ // Teardown plugins
115
+ for (const plugin of this.config.plugins) {
116
+ try {
117
+ await plugin.teardown?.();
118
+ }
119
+ catch {
120
+ // Swallow plugin teardown errors
121
+ }
122
+ }
123
+ this.errorBoundary.uninstall();
124
+ this.networkInterceptor.uninstall();
125
+ this.performanceMonitor.stop();
126
+ this.rumManager.stop();
127
+ this.emitter.removeAllListeners();
128
+ this.destroyed = true;
129
+ ObservabilitySDK.instance = null;
130
+ this.emitter.emit(events_1.SDKEvent.DESTROYED, {
131
+ type: events_1.SDKEvent.DESTROYED,
132
+ timestamp: Date.now(),
133
+ });
134
+ }
135
+ // ── Public API ──────────────────────────────────────────────
136
+ /**
137
+ * Sets the current user context across all Datadog modules.
138
+ */
139
+ setUser(user) {
140
+ this.contextManager.setUser(user);
141
+ this.rumManager.setUser(user);
142
+ }
143
+ /**
144
+ * Clears the current user context.
145
+ */
146
+ clearUser() {
147
+ this.contextManager.clearUser();
148
+ this.rumManager.clearUser();
149
+ }
150
+ /**
151
+ * Adds a key-value pair to the global context.
152
+ */
153
+ addGlobalContext(key, value) {
154
+ this.contextManager.setGlobalContext(key, value);
155
+ this.rumManager.setGlobalContext(key, value);
156
+ this.logsManager.setGlobalContext(key, value);
157
+ }
158
+ /**
159
+ * Removes a key from the global context.
160
+ */
161
+ removeGlobalContext(key) {
162
+ this.contextManager.removeGlobalContext(key);
163
+ this.rumManager.removeGlobalContext(key);
164
+ this.logsManager.removeGlobalContext(key);
165
+ }
166
+ /**
167
+ * Sets the current view/route name.
168
+ * Use this when navigating between pages in SPAs.
169
+ */
170
+ setView(name) {
171
+ this.contextManager.setView(name);
172
+ if (this.config.actions.trackViewsManually) {
173
+ this.rumManager.startView(name);
174
+ }
175
+ }
176
+ /**
177
+ * Tracks a custom user action.
178
+ */
179
+ trackAction(name, context) {
180
+ this.rumManager.addAction(name, context);
181
+ }
182
+ /**
183
+ * Manually captures an error and sends it to Datadog.
184
+ */
185
+ captureError(error, context) {
186
+ this.errorBoundary.captureError(error, context);
187
+ }
188
+ /**
189
+ * Captures a message as an error-level event.
190
+ */
191
+ captureMessage(message, context) {
192
+ this.errorBoundary.captureMessage(message, context);
193
+ }
194
+ /**
195
+ * Records a custom performance timing.
196
+ */
197
+ addTiming(name, duration) {
198
+ this.rumManager.addTiming(name, duration);
199
+ }
200
+ /**
201
+ * Marks a performance checkpoint.
202
+ */
203
+ mark(name) {
204
+ this.performanceMonitor.mark(name);
205
+ }
206
+ /**
207
+ * Measures time between two performance marks.
208
+ */
209
+ measure(name, startMark, endMark) {
210
+ return this.performanceMonitor.measure(name, startMark, endMark);
211
+ }
212
+ /**
213
+ * Starts session replay recording.
214
+ */
215
+ startSessionReplay() {
216
+ this.rumManager.startSessionReplay();
217
+ }
218
+ /**
219
+ * Stops session replay recording.
220
+ */
221
+ stopSessionReplay() {
222
+ this.rumManager.stopSessionReplay();
223
+ }
224
+ /**
225
+ * Grants consent for tracking (when privacy.requireConsent is true).
226
+ */
227
+ grantConsent() {
228
+ this.emitter.emit(events_1.SDKEvent.CONSENT_GRANTED, {
229
+ type: events_1.SDKEvent.CONSENT_GRANTED,
230
+ timestamp: Date.now(),
231
+ });
232
+ }
233
+ /**
234
+ * Revokes consent for tracking.
235
+ */
236
+ revokeConsent() {
237
+ this.emitter.emit(events_1.SDKEvent.CONSENT_REVOKED, {
238
+ type: events_1.SDKEvent.CONSENT_REVOKED,
239
+ timestamp: Date.now(),
240
+ });
241
+ }
242
+ /**
243
+ * Subscribes to SDK lifecycle events.
244
+ */
245
+ onEvent(event, handler) {
246
+ this.emitter.on(event, handler);
247
+ }
248
+ /**
249
+ * Unsubscribes from SDK lifecycle events.
250
+ */
251
+ offEvent(event, handler) {
252
+ this.emitter.off(event, handler);
253
+ }
254
+ /**
255
+ * Returns the resolved (with defaults) configuration.
256
+ */
257
+ getConfig() {
258
+ return Object.freeze({ ...this.config });
259
+ }
260
+ /**
261
+ * Returns the RUM internal context (session ID, view ID, etc.).
262
+ */
263
+ getRumContext() {
264
+ return this.rumManager.getInternalContext();
265
+ }
266
+ /**
267
+ * Returns whether the SDK has been initialized and is active.
268
+ */
269
+ isActive() {
270
+ return !this.destroyed;
271
+ }
272
+ // ── Private Boot Sequence ───────────────────────────────────
273
+ boot(isFirstBoot) {
274
+ // 1. Initialize Datadog SDKs
275
+ this.rumManager.init();
276
+ this.logsManager.init();
277
+ // 2. Install error boundary
278
+ if (this.config.errorTracking.enabled) {
279
+ this.errorBoundary.install();
280
+ }
281
+ // 3. Start performance monitoring
282
+ if (this.config.performance.webVitals || this.config.performance.longTasks) {
283
+ this.performanceMonitor.start();
284
+ }
285
+ // 4. Install network interceptor
286
+ if (this.config.network.enabled) {
287
+ this.networkInterceptor.install();
288
+ }
289
+ // 5. Start session replay if configured
290
+ if (this.config.sampling.sessionReplaySampleRate > 0) {
291
+ this.rumManager.startSessionReplay();
292
+ }
293
+ // 6. Load plugins
294
+ this.loadPlugins();
295
+ // 7. Log initialization
296
+ this.logger.info('Observability SDK initialized', {
297
+ service: this.config.service,
298
+ env: this.config.env,
299
+ version: this.config.version,
300
+ isFirstBoot,
301
+ features: {
302
+ rum: this.rumManager.isInitialized(),
303
+ logs: this.logsManager.isInitialized(),
304
+ errorTracking: this.config.errorTracking.enabled,
305
+ performanceMonitoring: this.config.performance.webVitals,
306
+ networkInterception: this.config.network.enabled,
307
+ sessionReplay: this.config.sampling.sessionReplaySampleRate > 0,
308
+ },
309
+ });
310
+ // 8. Emit initialized event
311
+ this.emitter.emit(events_1.SDKEvent.INITIALIZED, {
312
+ type: events_1.SDKEvent.INITIALIZED,
313
+ timestamp: Date.now(),
314
+ data: { isFirstBoot },
315
+ });
316
+ // 9. Call afterInit hook
317
+ this.config.hooks.afterInit?.();
318
+ }
319
+ loadPlugins() {
320
+ for (const plugin of this.config.plugins) {
321
+ this.loadPlugin(plugin);
322
+ }
323
+ }
324
+ loadPlugin(plugin) {
325
+ try {
326
+ plugin.setup(this);
327
+ this.emitter.emit(events_1.SDKEvent.PLUGIN_LOADED, {
328
+ type: events_1.SDKEvent.PLUGIN_LOADED,
329
+ timestamp: Date.now(),
330
+ data: { name: plugin.name, version: plugin.version },
331
+ });
332
+ if (this.config.debug) {
333
+ this.logger.debug(`Plugin loaded: ${plugin.name}@${plugin.version}`);
334
+ }
335
+ }
336
+ catch (error) {
337
+ this.emitter.emit(events_1.SDKEvent.PLUGIN_ERROR, {
338
+ type: events_1.SDKEvent.PLUGIN_ERROR,
339
+ timestamp: Date.now(),
340
+ data: {
341
+ name: plugin.name,
342
+ error: error instanceof Error ? error.message : String(error),
343
+ },
344
+ });
345
+ this.logger.error(`Failed to load plugin: ${plugin.name}`, error instanceof Error ? error : new Error(String(error)));
346
+ }
347
+ }
348
+ /** @internal For testing only */
349
+ static resetInstance() {
350
+ ObservabilitySDK.instance = null;
351
+ BootstrapGuard_1.BootstrapGuard.resetInstance();
352
+ }
353
+ }
354
+ exports.ObservabilitySDK = ObservabilitySDK;
355
+ //# 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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"}