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,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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"}
|