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,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Sanitizer = void 0;
4
+ const DEFAULT_PII_PATTERNS = [
5
+ /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, // emails
6
+ /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g, // phone numbers
7
+ /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g, // credit cards
8
+ /\b\d{3}-\d{2}-\d{4}\b/g, // SSN
9
+ ];
10
+ const DEFAULT_SENSITIVE_KEYS = [
11
+ 'password', 'passwd', 'secret', 'token', 'apikey', 'api_key',
12
+ 'authorization', 'auth', 'credential', 'private_key', 'privatekey',
13
+ 'access_token', 'refresh_token', 'ssn', 'credit_card', 'creditcard',
14
+ 'cvv', 'pin', 'otp',
15
+ ];
16
+ const REDACTED = '[REDACTED]';
17
+ const MAX_DEPTH = 10;
18
+ const MAX_STRING_LENGTH = 10000;
19
+ const MAX_ARRAY_LENGTH = 100;
20
+ class Sanitizer {
21
+ piiPatterns;
22
+ sensitiveKeys;
23
+ maxDepth;
24
+ maxStringLength;
25
+ constructor(piiFields = [], maxDepth = MAX_DEPTH, maxStringLength = MAX_STRING_LENGTH) {
26
+ this.sensitiveKeys = new Set([
27
+ ...DEFAULT_SENSITIVE_KEYS,
28
+ ...piiFields.map((f) => f.toLowerCase()),
29
+ ]);
30
+ this.piiPatterns = [...DEFAULT_PII_PATTERNS];
31
+ this.maxDepth = maxDepth;
32
+ this.maxStringLength = maxStringLength;
33
+ }
34
+ sanitize(data) {
35
+ return this.deepSanitize(data, 0, new WeakSet());
36
+ }
37
+ sanitizeString(value) {
38
+ let result = value;
39
+ for (const pattern of this.piiPatterns) {
40
+ const cloned = new RegExp(pattern.source, pattern.flags);
41
+ result = result.replace(cloned, REDACTED);
42
+ }
43
+ return this.truncateString(result);
44
+ }
45
+ deepSanitize(value, depth, seen) {
46
+ if (depth > this.maxDepth) {
47
+ return '[MAX_DEPTH_EXCEEDED]';
48
+ }
49
+ if (value === null || value === undefined) {
50
+ return value;
51
+ }
52
+ if (typeof value === 'string') {
53
+ return this.sanitizeString(value);
54
+ }
55
+ if (typeof value === 'number' || typeof value === 'boolean') {
56
+ return value;
57
+ }
58
+ if (value instanceof Date) {
59
+ return value.toISOString();
60
+ }
61
+ if (value instanceof Error) {
62
+ return this.sanitizeError(value, depth, seen);
63
+ }
64
+ if (Array.isArray(value)) {
65
+ const limited = value.slice(0, MAX_ARRAY_LENGTH);
66
+ return limited.map((item) => this.deepSanitize(item, depth + 1, seen));
67
+ }
68
+ if (typeof value === 'object') {
69
+ if (seen.has(value)) {
70
+ return '[CIRCULAR_REFERENCE]';
71
+ }
72
+ seen.add(value);
73
+ const sanitized = {};
74
+ for (const [key, val] of Object.entries(value)) {
75
+ if (this.isSensitiveKey(key)) {
76
+ sanitized[key] = REDACTED;
77
+ }
78
+ else {
79
+ sanitized[key] = this.deepSanitize(val, depth + 1, seen);
80
+ }
81
+ }
82
+ return sanitized;
83
+ }
84
+ return String(value);
85
+ }
86
+ sanitizeError(error, depth, seen) {
87
+ return {
88
+ name: error.name,
89
+ message: this.sanitizeString(error.message),
90
+ stack: error.stack ? this.sanitizeString(error.stack) : undefined,
91
+ cause: error.cause ? this.deepSanitize(error.cause, depth + 1, seen) : undefined,
92
+ };
93
+ }
94
+ isSensitiveKey(key) {
95
+ const lower = key.toLowerCase();
96
+ return this.sensitiveKeys.has(lower) || this.sensitiveKeys.has(lower.replace(/[-_]/g, ''));
97
+ }
98
+ truncateString(value) {
99
+ if (value.length <= this.maxStringLength) {
100
+ return value;
101
+ }
102
+ return value.substring(0, this.maxStringLength) + `... [truncated, total: ${value.length}]`;
103
+ }
104
+ }
105
+ exports.Sanitizer = Sanitizer;
106
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/utils/sanitizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageManager = void 0;
4
+ const STORAGE_PREFIX = 'dd_toolkit_';
5
+ /**
6
+ * Safe localStorage wrapper that handles SSR, private browsing,
7
+ * and storage quota exceeded scenarios.
8
+ */
9
+ class StorageManager {
10
+ prefix;
11
+ memoryFallback;
12
+ useMemory;
13
+ constructor(prefix = STORAGE_PREFIX) {
14
+ this.prefix = prefix;
15
+ this.memoryFallback = new Map();
16
+ this.useMemory = !this.isLocalStorageAvailable();
17
+ }
18
+ get(key, defaultValue) {
19
+ try {
20
+ const raw = this.useMemory
21
+ ? this.memoryFallback.get(this.prefixKey(key))
22
+ : localStorage.getItem(this.prefixKey(key));
23
+ if (raw === null || raw === undefined) {
24
+ return defaultValue;
25
+ }
26
+ return JSON.parse(raw);
27
+ }
28
+ catch {
29
+ return defaultValue;
30
+ }
31
+ }
32
+ set(key, value) {
33
+ try {
34
+ const serialized = JSON.stringify(value);
35
+ if (this.useMemory) {
36
+ this.memoryFallback.set(this.prefixKey(key), serialized);
37
+ }
38
+ else {
39
+ localStorage.setItem(this.prefixKey(key), serialized);
40
+ }
41
+ }
42
+ catch {
43
+ // Storage full or unavailable — fallback silently
44
+ this.useMemory = true;
45
+ this.memoryFallback.set(this.prefixKey(key), JSON.stringify(value));
46
+ }
47
+ }
48
+ remove(key) {
49
+ try {
50
+ if (this.useMemory) {
51
+ this.memoryFallback.delete(this.prefixKey(key));
52
+ }
53
+ else {
54
+ localStorage.removeItem(this.prefixKey(key));
55
+ }
56
+ }
57
+ catch {
58
+ this.memoryFallback.delete(this.prefixKey(key));
59
+ }
60
+ }
61
+ clear() {
62
+ try {
63
+ if (this.useMemory) {
64
+ this.memoryFallback.clear();
65
+ return;
66
+ }
67
+ const keys = [];
68
+ for (let i = 0; i < localStorage.length; i++) {
69
+ const key = localStorage.key(i);
70
+ if (key?.startsWith(this.prefix)) {
71
+ keys.push(key);
72
+ }
73
+ }
74
+ keys.forEach((key) => localStorage.removeItem(key));
75
+ }
76
+ catch {
77
+ this.memoryFallback.clear();
78
+ }
79
+ }
80
+ prefixKey(key) {
81
+ return `${this.prefix}${key}`;
82
+ }
83
+ isLocalStorageAvailable() {
84
+ try {
85
+ if (typeof window === 'undefined' || !window.localStorage) {
86
+ return false;
87
+ }
88
+ const testKey = `${this.prefix}__test__`;
89
+ localStorage.setItem(testKey, 'test');
90
+ localStorage.removeItem(testKey);
91
+ return true;
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ }
98
+ exports.StorageManager = StorageManager;
99
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setup = setup;
4
+ const ResourceProvisioner_1 = require("../../resources/ResourceProvisioner");
5
+ const prompt_1 = require("../prompt");
6
+ async function setup(options) {
7
+ // eslint-disable-next-line no-console
8
+ console.log('');
9
+ // eslint-disable-next-line no-console
10
+ console.log('\x1b[36m%s\x1b[0m', '🚀 datadog-frontend-toolkit — Setup');
11
+ // eslint-disable-next-line no-console
12
+ console.log('');
13
+ // Resolve values: CLI args → env vars → interactive prompt
14
+ const service = options['service'] ||
15
+ (await (0, prompt_1.prompt)('Service name', process.env.DD_SERVICE));
16
+ const env = options['env'] ||
17
+ (await (0, prompt_1.selectOrCustom)('Environment', ['production', 'staging', 'development', 'test']));
18
+ const apiKey = options['apiKey'] ||
19
+ process.env.DD_API_KEY ||
20
+ (await (0, prompt_1.promptSecret)('Datadog API Key (DD_API_KEY)'));
21
+ const appKey = options['appKey'] ||
22
+ process.env.DD_APP_KEY ||
23
+ (await (0, prompt_1.promptSecret)('Datadog App Key (DD_APP_KEY)'));
24
+ const site = options['site'] ||
25
+ process.env.DD_SITE ||
26
+ (await (0, prompt_1.prompt)('Datadog site', 'datadoghq.com'));
27
+ const team = options['team'] ||
28
+ (await (0, prompt_1.prompt)('Team name (optional)')) ||
29
+ undefined;
30
+ const dryRun = !!options['dryRun'];
31
+ // Validate after prompts
32
+ if (!service) {
33
+ throw new Error('Service name is required');
34
+ }
35
+ if (!env) {
36
+ throw new Error('Environment is required');
37
+ }
38
+ if (!apiKey) {
39
+ throw new Error('Datadog API Key is required');
40
+ }
41
+ if (!appKey) {
42
+ throw new Error('Datadog App Key is required');
43
+ }
44
+ // Ask which resources to provision (unless flags were passed)
45
+ let dashboards = !options['noDashboards'];
46
+ let monitors = !options['noMonitors'];
47
+ let slos = !options['noSlos'];
48
+ if (!options['noDashboards'] && !options['noMonitors'] && !options['noSlos']) {
49
+ // eslint-disable-next-line no-console
50
+ console.log('');
51
+ // eslint-disable-next-line no-console
52
+ console.log(' Resources to provision:');
53
+ dashboards = await (0, prompt_1.confirm)(' Create Dashboard?');
54
+ monitors = await (0, prompt_1.confirm)(' Create Monitors (6)?');
55
+ slos = await (0, prompt_1.confirm)(' Create SLOs (4)?');
56
+ }
57
+ const provisioningConfig = {
58
+ apiKey,
59
+ appKey,
60
+ site,
61
+ team,
62
+ dashboards,
63
+ monitors,
64
+ slos,
65
+ tags: [`service:${service}`, `env:${env}`, ...(team ? [`team:${team}`] : [])],
66
+ };
67
+ // eslint-disable-next-line no-console
68
+ console.log('');
69
+ // eslint-disable-next-line no-console
70
+ console.log('\x1b[36m%s\x1b[0m', '─── Configuration ───');
71
+ // eslint-disable-next-line no-console
72
+ console.log(` Service: ${service}`);
73
+ // eslint-disable-next-line no-console
74
+ console.log(` Env: ${env}`);
75
+ // eslint-disable-next-line no-console
76
+ console.log(` Site: ${site}`);
77
+ if (team) {
78
+ // eslint-disable-next-line no-console
79
+ console.log(` Team: ${team}`);
80
+ }
81
+ // eslint-disable-next-line no-console
82
+ console.log(` Dashboards: ${dashboards ? '✓' : '✗'}`);
83
+ // eslint-disable-next-line no-console
84
+ console.log(` Monitors: ${monitors ? '✓' : '✗'}`);
85
+ // eslint-disable-next-line no-console
86
+ console.log(` SLOs: ${slos ? '✓' : '✗'}`);
87
+ if (dryRun) {
88
+ // eslint-disable-next-line no-console
89
+ console.log(` Mode: \x1b[33mdry-run\x1b[0m`);
90
+ }
91
+ // eslint-disable-next-line no-console
92
+ console.log('');
93
+ if (dryRun) {
94
+ // eslint-disable-next-line no-console
95
+ console.log('\x1b[33m%s\x1b[0m', '⚠️ DRY RUN — No resources will be created');
96
+ // eslint-disable-next-line no-console
97
+ console.log('');
98
+ // eslint-disable-next-line no-console
99
+ console.log('Would provision:');
100
+ if (provisioningConfig.dashboards) {
101
+ // eslint-disable-next-line no-console
102
+ console.log(` ✓ Dashboard: [Auto] ${service} - Frontend Observability`);
103
+ }
104
+ if (provisioningConfig.monitors) {
105
+ // eslint-disable-next-line no-console
106
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - High Frontend Error Rate`);
107
+ // eslint-disable-next-line no-console
108
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - Poor LCP Performance`);
109
+ // eslint-disable-next-line no-console
110
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - High CLS Score`);
111
+ // eslint-disable-next-line no-console
112
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - JS Error Spike`);
113
+ // eslint-disable-next-line no-console
114
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - Error Log Anomaly`);
115
+ // eslint-disable-next-line no-console
116
+ console.log(` ✓ Monitor: [Auto] ${service} (${env}) - Poor INP Performance`);
117
+ }
118
+ if (provisioningConfig.slos) {
119
+ // eslint-disable-next-line no-console
120
+ console.log(` ✓ SLO: [Auto] ${service} (${env}) - Frontend Availability`);
121
+ // eslint-disable-next-line no-console
122
+ console.log(` ✓ SLO: [Auto] ${service} (${env}) - LCP Performance`);
123
+ // eslint-disable-next-line no-console
124
+ console.log(` ✓ SLO: [Auto] ${service} (${env}) - INP Performance`);
125
+ // eslint-disable-next-line no-console
126
+ console.log(` ✓ SLO: [Auto] ${service} (${env}) - CLS Performance`);
127
+ }
128
+ // eslint-disable-next-line no-console
129
+ console.log('');
130
+ return;
131
+ }
132
+ const provisioner = new ResourceProvisioner_1.ResourceProvisioner(provisioningConfig);
133
+ // eslint-disable-next-line no-console
134
+ console.log('Provisioning resources...');
135
+ // eslint-disable-next-line no-console
136
+ console.log('');
137
+ const result = await provisioner.provision(service, env, provisioningConfig);
138
+ // Report results
139
+ if (result.dashboards.length > 0) {
140
+ // eslint-disable-next-line no-console
141
+ console.log('\x1b[32m%s\x1b[0m', '✅ Dashboards:');
142
+ for (const d of result.dashboards) {
143
+ // eslint-disable-next-line no-console
144
+ console.log(` ${d.title} → ${d.url}`);
145
+ }
146
+ }
147
+ if (result.monitors.length > 0) {
148
+ // eslint-disable-next-line no-console
149
+ console.log('\x1b[32m%s\x1b[0m', '✅ Monitors:');
150
+ for (const m of result.monitors) {
151
+ // eslint-disable-next-line no-console
152
+ console.log(` ${m.name} (id: ${m.id})`);
153
+ }
154
+ }
155
+ if (result.slos.length > 0) {
156
+ // eslint-disable-next-line no-console
157
+ console.log('\x1b[32m%s\x1b[0m', '✅ SLOs:');
158
+ for (const s of result.slos) {
159
+ // eslint-disable-next-line no-console
160
+ console.log(` ${s.name} (id: ${s.id})`);
161
+ }
162
+ }
163
+ if (result.errors.length > 0) {
164
+ // eslint-disable-next-line no-console
165
+ console.log('');
166
+ // eslint-disable-next-line no-console
167
+ console.log('\x1b[31m%s\x1b[0m', '❌ Errors:');
168
+ for (const e of result.errors) {
169
+ // eslint-disable-next-line no-console
170
+ console.log(` ${e}`);
171
+ }
172
+ }
173
+ // eslint-disable-next-line no-console
174
+ console.log('');
175
+ // eslint-disable-next-line no-console
176
+ console.log('\x1b[36m%s\x1b[0m', '✨ Provisioning complete!');
177
+ }
178
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.status = status;
4
+ const prompt_1 = require("../prompt");
5
+ async function status(options) {
6
+ const service = options['service'] ||
7
+ (await (0, prompt_1.prompt)('Service name', process.env.DD_SERVICE));
8
+ const env = options['env'] ||
9
+ (await (0, prompt_1.selectOrCustom)('Environment', ['production', 'staging', 'development', 'test']));
10
+ const apiKey = options['apiKey'] ||
11
+ process.env.DD_API_KEY ||
12
+ (await (0, prompt_1.promptSecret)('Datadog API Key (DD_API_KEY)'));
13
+ const appKey = options['appKey'] ||
14
+ process.env.DD_APP_KEY ||
15
+ (await (0, prompt_1.promptSecret)('Datadog App Key (DD_APP_KEY)'));
16
+ const site = options['site'] ||
17
+ process.env.DD_SITE ||
18
+ 'datadoghq.com';
19
+ if (!service) {
20
+ throw new Error('Service name is required');
21
+ }
22
+ if (!env) {
23
+ throw new Error('Environment is required');
24
+ }
25
+ if (!apiKey || !appKey) {
26
+ throw new Error('Datadog API Key and App Key are required');
27
+ }
28
+ const baseUrl = `https://api.${site}/api`;
29
+ const headers = {
30
+ 'Content-Type': 'application/json',
31
+ 'DD-API-KEY': apiKey,
32
+ 'DD-APPLICATION-KEY': appKey,
33
+ };
34
+ const managedTag = 'managed:datadog-frontend-toolkit';
35
+ // eslint-disable-next-line no-console
36
+ console.log('\x1b[36m%s\x1b[0m', '📊 datadog-frontend-toolkit — Status Check');
37
+ // eslint-disable-next-line no-console
38
+ console.log('');
39
+ // eslint-disable-next-line no-console
40
+ console.log(` Service: ${service}`);
41
+ // eslint-disable-next-line no-console
42
+ console.log(` Env: ${env}`);
43
+ // eslint-disable-next-line no-console
44
+ console.log('');
45
+ // Check dashboards
46
+ try {
47
+ const dashRes = await fetch(`${baseUrl}/v1/dashboard`, { headers });
48
+ if (dashRes.ok) {
49
+ const data = (await dashRes.json());
50
+ const managed = (data.dashboards || []).filter((d) => d.title.includes(`[Auto] ${service}`) && d.title.includes(env));
51
+ // eslint-disable-next-line no-console
52
+ console.log(` Dashboards: ${managed.length > 0 ? '✅' : '❌'} ${managed.length} found`);
53
+ for (const d of managed) {
54
+ // eslint-disable-next-line no-console
55
+ console.log(` → ${d.title} (${d.id})`);
56
+ }
57
+ }
58
+ }
59
+ catch {
60
+ // eslint-disable-next-line no-console
61
+ console.log(' Dashboards: ⚠️ Could not check');
62
+ }
63
+ // Check monitors
64
+ try {
65
+ const monRes = await fetch(`${baseUrl}/v1/monitor?tag=${encodeURIComponent(managedTag)}`, { headers });
66
+ if (monRes.ok) {
67
+ const monitors = (await monRes.json());
68
+ const relevant = monitors.filter((m) => m.name.includes(service) && m.name.includes(env));
69
+ // eslint-disable-next-line no-console
70
+ console.log(` Monitors: ${relevant.length > 0 ? '✅' : '❌'} ${relevant.length} found`);
71
+ for (const m of relevant) {
72
+ const stateIcon = m.overall_state === 'OK' ? '🟢' : m.overall_state === 'Alert' ? '🔴' : '🟡';
73
+ // eslint-disable-next-line no-console
74
+ console.log(` ${stateIcon} ${m.name} (${m.overall_state})`);
75
+ }
76
+ }
77
+ }
78
+ catch {
79
+ // eslint-disable-next-line no-console
80
+ console.log(' Monitors: ⚠️ Could not check');
81
+ }
82
+ // Check SLOs
83
+ try {
84
+ const sloRes = await fetch(`${baseUrl}/v1/slo?tags_query=${encodeURIComponent(managedTag)}`, { headers });
85
+ if (sloRes.ok) {
86
+ const data = (await sloRes.json());
87
+ const relevant = (data.data || []).filter((s) => s.name.includes(service) && s.name.includes(env));
88
+ // eslint-disable-next-line no-console
89
+ console.log(` SLOs: ${relevant.length > 0 ? '✅' : '❌'} ${relevant.length} found`);
90
+ for (const s of relevant) {
91
+ // eslint-disable-next-line no-console
92
+ console.log(` → ${s.name} (${s.id})`);
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // eslint-disable-next-line no-console
98
+ console.log(' SLOs: ⚠️ Could not check');
99
+ }
100
+ // eslint-disable-next-line no-console
101
+ console.log('');
102
+ }
103
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const setup_1 = require("./commands/setup");
5
+ const status_1 = require("./commands/status");
6
+ const args = process.argv.slice(2);
7
+ const command = args[0];
8
+ const HELP_TEXT = `
9
+ datadog-frontend-toolkit CLI
10
+
11
+ Usage:
12
+ dd-toolkit <command> [options]
13
+
14
+ Commands:
15
+ setup Provision Datadog resources (dashboards, monitors, SLOs)
16
+ status Check provisioning status for a service
17
+
18
+ Options:
19
+ --service, -s Service name (required)
20
+ --env, -e Environment (required)
21
+ --api-key Datadog API key (or DD_API_KEY env var)
22
+ --app-key Datadog Application key (or DD_APP_KEY env var)
23
+ --site Datadog site (default: datadoghq.com)
24
+ --team Team name for resource ownership
25
+ --no-dashboards Skip dashboard provisioning
26
+ --no-monitors Skip monitor provisioning
27
+ --no-slos Skip SLO provisioning
28
+ --dry-run Preview what would be created without making changes
29
+ --help, -h Show this help message
30
+
31
+ Examples:
32
+ dd-toolkit setup -s my-app -e production --api-key <key> --app-key <key>
33
+ dd-toolkit setup -s my-app -e staging --team frontend --dry-run
34
+ dd-toolkit status -s my-app -e production
35
+ `;
36
+ function parseArgs(args) {
37
+ const parsed = {};
38
+ for (let i = 0; i < args.length; i++) {
39
+ const arg = args[i];
40
+ if (arg === '--help' || arg === '-h') {
41
+ parsed['help'] = true;
42
+ }
43
+ else if (arg === '--dry-run') {
44
+ parsed['dryRun'] = true;
45
+ }
46
+ else if (arg === '--no-dashboards') {
47
+ parsed['noDashboards'] = true;
48
+ }
49
+ else if (arg === '--no-monitors') {
50
+ parsed['noMonitors'] = true;
51
+ }
52
+ else if (arg === '--no-slos') {
53
+ parsed['noSlos'] = true;
54
+ }
55
+ else if ((arg === '--service' || arg === '-s') && args[i + 1]) {
56
+ parsed['service'] = args[++i];
57
+ }
58
+ else if ((arg === '--env' || arg === '-e') && args[i + 1]) {
59
+ parsed['env'] = args[++i];
60
+ }
61
+ else if (arg === '--api-key' && args[i + 1]) {
62
+ parsed['apiKey'] = args[++i];
63
+ }
64
+ else if (arg === '--app-key' && args[i + 1]) {
65
+ parsed['appKey'] = args[++i];
66
+ }
67
+ else if (arg === '--site' && args[i + 1]) {
68
+ parsed['site'] = args[++i];
69
+ }
70
+ else if (arg === '--team' && args[i + 1]) {
71
+ parsed['team'] = args[++i];
72
+ }
73
+ }
74
+ return parsed;
75
+ }
76
+ async function main() {
77
+ if (!command || command === '--help' || command === '-h') {
78
+ // eslint-disable-next-line no-console
79
+ console.log(HELP_TEXT);
80
+ process.exit(0);
81
+ }
82
+ const options = parseArgs(args.slice(1));
83
+ if (options['help']) {
84
+ // eslint-disable-next-line no-console
85
+ console.log(HELP_TEXT);
86
+ process.exit(0);
87
+ }
88
+ try {
89
+ switch (command) {
90
+ case 'setup':
91
+ await (0, setup_1.setup)(options);
92
+ break;
93
+ case 'status':
94
+ await (0, status_1.status)(options);
95
+ break;
96
+ default:
97
+ // eslint-disable-next-line no-console
98
+ console.error(`Unknown command: ${command}`);
99
+ // eslint-disable-next-line no-console
100
+ console.log(HELP_TEXT);
101
+ process.exit(1);
102
+ }
103
+ }
104
+ catch (error) {
105
+ // eslint-disable-next-line no-console
106
+ console.error('\x1b[31m%s\x1b[0m', `Error: ${error instanceof Error ? error.message : String(error)}`);
107
+ process.exit(1);
108
+ }
109
+ }
110
+ main();
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}