paygate-mcp 10.16.0 → 10.18.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/dist/api-metrics.d.ts +95 -0
- package/dist/api-metrics.d.ts.map +1 -0
- package/dist/api-metrics.js +187 -0
- package/dist/api-metrics.js.map +1 -0
- package/dist/incident-manager.d.ts +108 -0
- package/dist/incident-manager.d.ts.map +1 -0
- package/dist/incident-manager.js +178 -0
- package/dist/incident-manager.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/key-migration.d.ts +88 -0
- package/dist/key-migration.d.ts.map +1 -0
- package/dist/key-migration.js +168 -0
- package/dist/key-migration.js.map +1 -0
- package/dist/key-tags.d.ts +79 -0
- package/dist/key-tags.d.ts.map +1 -0
- package/dist/key-tags.js +207 -0
- package/dist/key-tags.js.map +1 -0
- package/dist/load-balancer.d.ts +91 -0
- package/dist/load-balancer.d.ts.map +1 -0
- package/dist/load-balancer.js +204 -0
- package/dist/load-balancer.js.map +1 -0
- package/dist/maintenance-window.d.ts +99 -0
- package/dist/maintenance-window.d.ts.map +1 -0
- package/dist/maintenance-window.js +203 -0
- package/dist/maintenance-window.js.map +1 -0
- package/dist/request-validator.d.ts +94 -0
- package/dist/request-validator.d.ts.map +1 -0
- package/dist/request-validator.js +183 -0
- package/dist/request-validator.js.map +1 -0
- package/dist/webhook-retry.d.ts +94 -0
- package/dist/webhook-retry.d.ts.map +1 -0
- package/dist/webhook-retry.js +186 -0
- package/dist/webhook-retry.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIMetricsAggregator — Time-bucketed API metrics with percentile calculations.
|
|
3
|
+
*
|
|
4
|
+
* Record API call metrics, aggregate into time buckets,
|
|
5
|
+
* and compute percentile latencies for monitoring.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const agg = new APIMetricsAggregator();
|
|
10
|
+
*
|
|
11
|
+
* agg.record({ method: 'tools/call', tool: 'search', latencyMs: 45, statusCode: 200 });
|
|
12
|
+
* agg.record({ method: 'tools/call', tool: 'search', latencyMs: 120, statusCode: 200 });
|
|
13
|
+
*
|
|
14
|
+
* const summary = agg.getSummary('1m');
|
|
15
|
+
* // { totalRequests, avgLatencyMs, p50, p95, p99, errorRate, ... }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export type MetricGranularity = '1m' | '5m' | '1h' | '1d';
|
|
19
|
+
export interface MetricRecord {
|
|
20
|
+
method?: string;
|
|
21
|
+
tool?: string;
|
|
22
|
+
key?: string;
|
|
23
|
+
latencyMs: number;
|
|
24
|
+
statusCode: number;
|
|
25
|
+
credits?: number;
|
|
26
|
+
timestamp?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface MetricBucket {
|
|
29
|
+
start: number;
|
|
30
|
+
end: number;
|
|
31
|
+
count: number;
|
|
32
|
+
errors: number;
|
|
33
|
+
latencies: number[];
|
|
34
|
+
totalCredits: number;
|
|
35
|
+
}
|
|
36
|
+
export interface MetricSummary {
|
|
37
|
+
granularity: MetricGranularity;
|
|
38
|
+
bucketCount: number;
|
|
39
|
+
totalRequests: number;
|
|
40
|
+
totalErrors: number;
|
|
41
|
+
errorRate: number;
|
|
42
|
+
avgLatencyMs: number;
|
|
43
|
+
p50LatencyMs: number;
|
|
44
|
+
p95LatencyMs: number;
|
|
45
|
+
p99LatencyMs: number;
|
|
46
|
+
minLatencyMs: number;
|
|
47
|
+
maxLatencyMs: number;
|
|
48
|
+
totalCredits: number;
|
|
49
|
+
requestsPerSecond: number;
|
|
50
|
+
}
|
|
51
|
+
export interface ToolMetricSummary {
|
|
52
|
+
tool: string;
|
|
53
|
+
count: number;
|
|
54
|
+
errors: number;
|
|
55
|
+
avgLatencyMs: number;
|
|
56
|
+
totalCredits: number;
|
|
57
|
+
}
|
|
58
|
+
export interface APIMetricsConfig {
|
|
59
|
+
/** Max raw records to keep. Default 100000. */
|
|
60
|
+
maxRecords?: number;
|
|
61
|
+
/** Max age for records in ms. Default 86400000 (24h). */
|
|
62
|
+
maxAgeMs?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface APIMetricsStats {
|
|
65
|
+
totalRecords: number;
|
|
66
|
+
totalRequests: number;
|
|
67
|
+
totalErrors: number;
|
|
68
|
+
oldestRecord: number | null;
|
|
69
|
+
newestRecord: number | null;
|
|
70
|
+
}
|
|
71
|
+
export declare class APIMetricsAggregator {
|
|
72
|
+
private records;
|
|
73
|
+
private maxRecords;
|
|
74
|
+
private maxAgeMs;
|
|
75
|
+
constructor(config?: APIMetricsConfig);
|
|
76
|
+
/** Record a metric data point. */
|
|
77
|
+
record(metric: MetricRecord): void;
|
|
78
|
+
/** Get aggregated summary for a granularity. */
|
|
79
|
+
getSummary(granularity?: MetricGranularity, options?: {
|
|
80
|
+
tool?: string;
|
|
81
|
+
key?: string;
|
|
82
|
+
}): MetricSummary;
|
|
83
|
+
/** Get per-tool breakdown. */
|
|
84
|
+
getToolBreakdown(): ToolMetricSummary[];
|
|
85
|
+
/** Get time-series buckets. */
|
|
86
|
+
getBuckets(granularity: MetricGranularity): MetricBucket[];
|
|
87
|
+
/** Remove records older than maxAge. */
|
|
88
|
+
cleanup(): number;
|
|
89
|
+
getStats(): APIMetricsStats;
|
|
90
|
+
/** Clear all data. */
|
|
91
|
+
destroy(): void;
|
|
92
|
+
private getRelevantRecords;
|
|
93
|
+
private percentile;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=api-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-metrics.d.ts","sourceRoot":"","sources":["../src/api-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAqBD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,gBAAqB;IAOzC,kCAAkC;IAClC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAqBlC,gDAAgD;IAChD,UAAU,CAAC,WAAW,GAAE,iBAAwB,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa;IAmD3G,8BAA8B;IAC9B,gBAAgB,IAAI,iBAAiB,EAAE;IAyBvC,+BAA+B;IAC/B,UAAU,CAAC,WAAW,EAAE,iBAAiB,GAAG,YAAY,EAAE;IA+B1D,wCAAwC;IACxC,OAAO,IAAI,MAAM;IASjB,QAAQ,IAAI,eAAe;IAU3B,sBAAsB;IACtB,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* APIMetricsAggregator — Time-bucketed API metrics with percentile calculations.
|
|
4
|
+
*
|
|
5
|
+
* Record API call metrics, aggregate into time buckets,
|
|
6
|
+
* and compute percentile latencies for monitoring.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const agg = new APIMetricsAggregator();
|
|
11
|
+
*
|
|
12
|
+
* agg.record({ method: 'tools/call', tool: 'search', latencyMs: 45, statusCode: 200 });
|
|
13
|
+
* agg.record({ method: 'tools/call', tool: 'search', latencyMs: 120, statusCode: 200 });
|
|
14
|
+
*
|
|
15
|
+
* const summary = agg.getSummary('1m');
|
|
16
|
+
* // { totalRequests, avgLatencyMs, p50, p95, p99, errorRate, ... }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.APIMetricsAggregator = void 0;
|
|
21
|
+
const GRANULARITY_MS = {
|
|
22
|
+
'1m': 60_000,
|
|
23
|
+
'5m': 300_000,
|
|
24
|
+
'1h': 3_600_000,
|
|
25
|
+
'1d': 86_400_000,
|
|
26
|
+
};
|
|
27
|
+
class APIMetricsAggregator {
|
|
28
|
+
records = [];
|
|
29
|
+
maxRecords;
|
|
30
|
+
maxAgeMs;
|
|
31
|
+
constructor(config = {}) {
|
|
32
|
+
this.maxRecords = config.maxRecords ?? 100_000;
|
|
33
|
+
this.maxAgeMs = config.maxAgeMs ?? 86_400_000;
|
|
34
|
+
}
|
|
35
|
+
// ── Recording ─────────────────────────────────────────────────
|
|
36
|
+
/** Record a metric data point. */
|
|
37
|
+
record(metric) {
|
|
38
|
+
const stored = {
|
|
39
|
+
method: metric.method ?? '',
|
|
40
|
+
tool: metric.tool ?? '',
|
|
41
|
+
key: metric.key ?? '',
|
|
42
|
+
latencyMs: metric.latencyMs,
|
|
43
|
+
statusCode: metric.statusCode,
|
|
44
|
+
credits: metric.credits ?? 0,
|
|
45
|
+
timestamp: metric.timestamp ?? Date.now(),
|
|
46
|
+
};
|
|
47
|
+
this.records.push(stored);
|
|
48
|
+
// Evict oldest if over limit
|
|
49
|
+
if (this.records.length > this.maxRecords) {
|
|
50
|
+
this.records.splice(0, this.records.length - this.maxRecords);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ── Aggregation ───────────────────────────────────────────────
|
|
54
|
+
/** Get aggregated summary for a granularity. */
|
|
55
|
+
getSummary(granularity = '1m', options) {
|
|
56
|
+
let filtered = this.getRelevantRecords();
|
|
57
|
+
if (options?.tool)
|
|
58
|
+
filtered = filtered.filter(r => r.tool === options.tool);
|
|
59
|
+
if (options?.key)
|
|
60
|
+
filtered = filtered.filter(r => r.key === options.key);
|
|
61
|
+
if (filtered.length === 0) {
|
|
62
|
+
return {
|
|
63
|
+
granularity,
|
|
64
|
+
bucketCount: 0,
|
|
65
|
+
totalRequests: 0,
|
|
66
|
+
totalErrors: 0,
|
|
67
|
+
errorRate: 0,
|
|
68
|
+
avgLatencyMs: 0,
|
|
69
|
+
p50LatencyMs: 0,
|
|
70
|
+
p95LatencyMs: 0,
|
|
71
|
+
p99LatencyMs: 0,
|
|
72
|
+
minLatencyMs: 0,
|
|
73
|
+
maxLatencyMs: 0,
|
|
74
|
+
totalCredits: 0,
|
|
75
|
+
requestsPerSecond: 0,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const latencies = filtered.map(r => r.latencyMs).sort((a, b) => a - b);
|
|
79
|
+
const errors = filtered.filter(r => r.statusCode >= 400).length;
|
|
80
|
+
const totalCredits = filtered.reduce((s, r) => s + r.credits, 0);
|
|
81
|
+
const oldest = filtered[0].timestamp;
|
|
82
|
+
const newest = filtered[filtered.length - 1].timestamp;
|
|
83
|
+
const durationSec = Math.max(1, (newest - oldest) / 1000);
|
|
84
|
+
const bucketMs = GRANULARITY_MS[granularity];
|
|
85
|
+
const bucketCount = Math.ceil((newest - oldest + 1) / bucketMs);
|
|
86
|
+
return {
|
|
87
|
+
granularity,
|
|
88
|
+
bucketCount,
|
|
89
|
+
totalRequests: filtered.length,
|
|
90
|
+
totalErrors: errors,
|
|
91
|
+
errorRate: Math.round((errors / filtered.length) * 10000) / 100,
|
|
92
|
+
avgLatencyMs: Math.round(latencies.reduce((s, l) => s + l, 0) / latencies.length * 100) / 100,
|
|
93
|
+
p50LatencyMs: this.percentile(latencies, 50),
|
|
94
|
+
p95LatencyMs: this.percentile(latencies, 95),
|
|
95
|
+
p99LatencyMs: this.percentile(latencies, 99),
|
|
96
|
+
minLatencyMs: latencies[0],
|
|
97
|
+
maxLatencyMs: latencies[latencies.length - 1],
|
|
98
|
+
totalCredits,
|
|
99
|
+
requestsPerSecond: Math.round((filtered.length / durationSec) * 100) / 100,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** Get per-tool breakdown. */
|
|
103
|
+
getToolBreakdown() {
|
|
104
|
+
const records = this.getRelevantRecords();
|
|
105
|
+
const toolMap = new Map();
|
|
106
|
+
for (const r of records) {
|
|
107
|
+
if (!r.tool)
|
|
108
|
+
continue;
|
|
109
|
+
const existing = toolMap.get(r.tool) ?? { count: 0, errors: 0, latencySum: 0, credits: 0 };
|
|
110
|
+
existing.count++;
|
|
111
|
+
if (r.statusCode >= 400)
|
|
112
|
+
existing.errors++;
|
|
113
|
+
existing.latencySum += r.latencyMs;
|
|
114
|
+
existing.credits += r.credits;
|
|
115
|
+
toolMap.set(r.tool, existing);
|
|
116
|
+
}
|
|
117
|
+
return [...toolMap.entries()]
|
|
118
|
+
.map(([tool, data]) => ({
|
|
119
|
+
tool,
|
|
120
|
+
count: data.count,
|
|
121
|
+
errors: data.errors,
|
|
122
|
+
avgLatencyMs: Math.round((data.latencySum / data.count) * 100) / 100,
|
|
123
|
+
totalCredits: data.credits,
|
|
124
|
+
}))
|
|
125
|
+
.sort((a, b) => b.count - a.count);
|
|
126
|
+
}
|
|
127
|
+
/** Get time-series buckets. */
|
|
128
|
+
getBuckets(granularity) {
|
|
129
|
+
const records = this.getRelevantRecords();
|
|
130
|
+
if (records.length === 0)
|
|
131
|
+
return [];
|
|
132
|
+
const bucketMs = GRANULARITY_MS[granularity];
|
|
133
|
+
const oldest = records[0].timestamp;
|
|
134
|
+
const newest = records[records.length - 1].timestamp;
|
|
135
|
+
const buckets = [];
|
|
136
|
+
let start = Math.floor(oldest / bucketMs) * bucketMs;
|
|
137
|
+
while (start <= newest) {
|
|
138
|
+
const end = start + bucketMs;
|
|
139
|
+
const inBucket = records.filter(r => r.timestamp >= start && r.timestamp < end);
|
|
140
|
+
buckets.push({
|
|
141
|
+
start,
|
|
142
|
+
end,
|
|
143
|
+
count: inBucket.length,
|
|
144
|
+
errors: inBucket.filter(r => r.statusCode >= 400).length,
|
|
145
|
+
latencies: inBucket.map(r => r.latencyMs),
|
|
146
|
+
totalCredits: inBucket.reduce((s, r) => s + r.credits, 0),
|
|
147
|
+
});
|
|
148
|
+
start = end;
|
|
149
|
+
}
|
|
150
|
+
return buckets;
|
|
151
|
+
}
|
|
152
|
+
// ── Cleanup ───────────────────────────────────────────────────
|
|
153
|
+
/** Remove records older than maxAge. */
|
|
154
|
+
cleanup() {
|
|
155
|
+
const cutoff = Date.now() - this.maxAgeMs;
|
|
156
|
+
const before = this.records.length;
|
|
157
|
+
this.records = this.records.filter(r => r.timestamp >= cutoff);
|
|
158
|
+
return before - this.records.length;
|
|
159
|
+
}
|
|
160
|
+
// ── Stats ──────────────────────────────────────────────────────
|
|
161
|
+
getStats() {
|
|
162
|
+
return {
|
|
163
|
+
totalRecords: this.records.length,
|
|
164
|
+
totalRequests: this.records.length,
|
|
165
|
+
totalErrors: this.records.filter(r => r.statusCode >= 400).length,
|
|
166
|
+
oldestRecord: this.records.length > 0 ? this.records[0].timestamp : null,
|
|
167
|
+
newestRecord: this.records.length > 0 ? this.records[this.records.length - 1].timestamp : null,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/** Clear all data. */
|
|
171
|
+
destroy() {
|
|
172
|
+
this.records = [];
|
|
173
|
+
}
|
|
174
|
+
// ── Private ───────────────────────────────────────────────────
|
|
175
|
+
getRelevantRecords() {
|
|
176
|
+
const cutoff = Date.now() - this.maxAgeMs;
|
|
177
|
+
return this.records.filter(r => r.timestamp >= cutoff).sort((a, b) => a.timestamp - b.timestamp);
|
|
178
|
+
}
|
|
179
|
+
percentile(sorted, p) {
|
|
180
|
+
if (sorted.length === 0)
|
|
181
|
+
return 0;
|
|
182
|
+
const idx = Math.ceil((p / 100) * sorted.length) - 1;
|
|
183
|
+
return sorted[Math.max(0, idx)];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.APIMetricsAggregator = APIMetricsAggregator;
|
|
187
|
+
//# sourceMappingURL=api-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-metrics.js","sourceRoot":"","sources":["../src/api-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IncidentManager — Incident lifecycle tracking with status pages.
|
|
3
|
+
*
|
|
4
|
+
* Create and manage incidents, track status updates,
|
|
5
|
+
* and provide status page data for service health communication.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const mgr = new IncidentManager();
|
|
10
|
+
*
|
|
11
|
+
* const inc = mgr.createIncident({
|
|
12
|
+
* title: 'API Latency Spike',
|
|
13
|
+
* severity: 'major',
|
|
14
|
+
* affectedServices: ['api-gateway'],
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* mgr.addUpdate(inc.id, { status: 'investigating', message: 'Identified high CPU on api-1' });
|
|
18
|
+
* mgr.resolveIncident(inc.id, 'Scaled up api-1 instances');
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type IncidentSeverity = 'minor' | 'major' | 'critical';
|
|
22
|
+
export type IncidentStatus = 'investigating' | 'identified' | 'monitoring' | 'resolved';
|
|
23
|
+
export interface Incident {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
description: string;
|
|
27
|
+
severity: IncidentSeverity;
|
|
28
|
+
status: IncidentStatus;
|
|
29
|
+
affectedServices: string[];
|
|
30
|
+
updates: IncidentUpdate[];
|
|
31
|
+
createdAt: number;
|
|
32
|
+
resolvedAt: number | null;
|
|
33
|
+
durationMs: number | null;
|
|
34
|
+
}
|
|
35
|
+
export interface IncidentCreateParams {
|
|
36
|
+
title: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
severity: IncidentSeverity;
|
|
39
|
+
affectedServices?: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface IncidentUpdate {
|
|
42
|
+
status: IncidentStatus;
|
|
43
|
+
message: string;
|
|
44
|
+
timestamp: number;
|
|
45
|
+
}
|
|
46
|
+
export interface UpdateParams {
|
|
47
|
+
status: IncidentStatus;
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
export interface StatusPageData {
|
|
51
|
+
overallStatus: 'operational' | 'degraded' | 'major_outage';
|
|
52
|
+
activeIncidents: Incident[];
|
|
53
|
+
recentResolved: Incident[];
|
|
54
|
+
serviceStatuses: {
|
|
55
|
+
service: string;
|
|
56
|
+
status: 'operational' | 'affected';
|
|
57
|
+
}[];
|
|
58
|
+
}
|
|
59
|
+
export interface IncidentManagerConfig {
|
|
60
|
+
/** Max incidents to track. Default 1000. */
|
|
61
|
+
maxIncidents?: number;
|
|
62
|
+
/** Max resolved incidents to show on status page. Default 10. */
|
|
63
|
+
recentResolvedCount?: number;
|
|
64
|
+
}
|
|
65
|
+
export interface IncidentManagerStats {
|
|
66
|
+
totalIncidents: number;
|
|
67
|
+
activeIncidents: number;
|
|
68
|
+
resolvedIncidents: number;
|
|
69
|
+
avgResolutionMs: number;
|
|
70
|
+
incidentsBySeverity: {
|
|
71
|
+
minor: number;
|
|
72
|
+
major: number;
|
|
73
|
+
critical: number;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export declare class IncidentManager {
|
|
77
|
+
private incidents;
|
|
78
|
+
private services;
|
|
79
|
+
private nextId;
|
|
80
|
+
private maxIncidents;
|
|
81
|
+
private recentResolvedCount;
|
|
82
|
+
constructor(config?: IncidentManagerConfig);
|
|
83
|
+
/** Register a service for status tracking. */
|
|
84
|
+
registerService(name: string): void;
|
|
85
|
+
/** List registered services. */
|
|
86
|
+
listServices(): string[];
|
|
87
|
+
/** Create an incident. */
|
|
88
|
+
createIncident(params: IncidentCreateParams): Incident;
|
|
89
|
+
/** Add a status update to an incident. */
|
|
90
|
+
addUpdate(id: string, params: UpdateParams): Incident;
|
|
91
|
+
/** Resolve an incident. */
|
|
92
|
+
resolveIncident(id: string, message: string): Incident;
|
|
93
|
+
/** Get incident by ID. */
|
|
94
|
+
getIncident(id: string): Incident | null;
|
|
95
|
+
/** List incidents with optional filters. */
|
|
96
|
+
listIncidents(options?: {
|
|
97
|
+
status?: IncidentStatus;
|
|
98
|
+
severity?: IncidentSeverity;
|
|
99
|
+
}): Incident[];
|
|
100
|
+
/** Get active (unresolved) incidents. */
|
|
101
|
+
getActiveIncidents(): Incident[];
|
|
102
|
+
/** Get status page data. */
|
|
103
|
+
getStatusPage(): StatusPageData;
|
|
104
|
+
getStats(): IncidentManagerStats;
|
|
105
|
+
/** Clear all data. */
|
|
106
|
+
destroy(): void;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=incident-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-manager.d.ts","sourceRoot":"","sources":["../src/incident-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IncidentManager — Incident lifecycle tracking with status pages.
|
|
4
|
+
*
|
|
5
|
+
* Create and manage incidents, track status updates,
|
|
6
|
+
* and provide status page data for service health communication.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const mgr = new IncidentManager();
|
|
11
|
+
*
|
|
12
|
+
* const inc = mgr.createIncident({
|
|
13
|
+
* title: 'API Latency Spike',
|
|
14
|
+
* severity: 'major',
|
|
15
|
+
* affectedServices: ['api-gateway'],
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* mgr.addUpdate(inc.id, { status: 'investigating', message: 'Identified high CPU on api-1' });
|
|
19
|
+
* mgr.resolveIncident(inc.id, 'Scaled up api-1 instances');
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.IncidentManager = void 0;
|
|
24
|
+
// ── Implementation ───────────────────────────────────────────────────
|
|
25
|
+
class IncidentManager {
|
|
26
|
+
incidents = new Map();
|
|
27
|
+
services = new Set();
|
|
28
|
+
nextId = 1;
|
|
29
|
+
maxIncidents;
|
|
30
|
+
recentResolvedCount;
|
|
31
|
+
constructor(config = {}) {
|
|
32
|
+
this.maxIncidents = config.maxIncidents ?? 1000;
|
|
33
|
+
this.recentResolvedCount = config.recentResolvedCount ?? 10;
|
|
34
|
+
}
|
|
35
|
+
// ── Service Registration ──────────────────────────────────────
|
|
36
|
+
/** Register a service for status tracking. */
|
|
37
|
+
registerService(name) {
|
|
38
|
+
this.services.add(name);
|
|
39
|
+
}
|
|
40
|
+
/** List registered services. */
|
|
41
|
+
listServices() {
|
|
42
|
+
return [...this.services];
|
|
43
|
+
}
|
|
44
|
+
// ── Incident Lifecycle ────────────────────────────────────────
|
|
45
|
+
/** Create an incident. */
|
|
46
|
+
createIncident(params) {
|
|
47
|
+
if (!params.title)
|
|
48
|
+
throw new Error('Incident title is required');
|
|
49
|
+
if (this.incidents.size >= this.maxIncidents) {
|
|
50
|
+
throw new Error(`Maximum ${this.maxIncidents} incidents reached`);
|
|
51
|
+
}
|
|
52
|
+
const incident = {
|
|
53
|
+
id: `inc_${this.nextId++}`,
|
|
54
|
+
title: params.title,
|
|
55
|
+
description: params.description ?? '',
|
|
56
|
+
severity: params.severity,
|
|
57
|
+
status: 'investigating',
|
|
58
|
+
affectedServices: params.affectedServices ?? [],
|
|
59
|
+
updates: [{
|
|
60
|
+
status: 'investigating',
|
|
61
|
+
message: `Incident created: ${params.title}`,
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
}],
|
|
64
|
+
createdAt: Date.now(),
|
|
65
|
+
resolvedAt: null,
|
|
66
|
+
durationMs: null,
|
|
67
|
+
};
|
|
68
|
+
// Auto-register affected services
|
|
69
|
+
for (const svc of incident.affectedServices) {
|
|
70
|
+
this.services.add(svc);
|
|
71
|
+
}
|
|
72
|
+
this.incidents.set(incident.id, incident);
|
|
73
|
+
return incident;
|
|
74
|
+
}
|
|
75
|
+
/** Add a status update to an incident. */
|
|
76
|
+
addUpdate(id, params) {
|
|
77
|
+
const inc = this.incidents.get(id);
|
|
78
|
+
if (!inc)
|
|
79
|
+
throw new Error(`Incident '${id}' not found`);
|
|
80
|
+
if (inc.status === 'resolved')
|
|
81
|
+
throw new Error(`Incident '${id}' is already resolved`);
|
|
82
|
+
inc.status = params.status;
|
|
83
|
+
inc.updates.push({
|
|
84
|
+
status: params.status,
|
|
85
|
+
message: params.message,
|
|
86
|
+
timestamp: Date.now(),
|
|
87
|
+
});
|
|
88
|
+
if (params.status === 'resolved') {
|
|
89
|
+
inc.resolvedAt = Date.now();
|
|
90
|
+
inc.durationMs = inc.resolvedAt - inc.createdAt;
|
|
91
|
+
}
|
|
92
|
+
return inc;
|
|
93
|
+
}
|
|
94
|
+
/** Resolve an incident. */
|
|
95
|
+
resolveIncident(id, message) {
|
|
96
|
+
return this.addUpdate(id, { status: 'resolved', message });
|
|
97
|
+
}
|
|
98
|
+
/** Get incident by ID. */
|
|
99
|
+
getIncident(id) {
|
|
100
|
+
return this.incidents.get(id) ?? null;
|
|
101
|
+
}
|
|
102
|
+
/** List incidents with optional filters. */
|
|
103
|
+
listIncidents(options) {
|
|
104
|
+
let results = [...this.incidents.values()];
|
|
105
|
+
if (options?.status)
|
|
106
|
+
results = results.filter(i => i.status === options.status);
|
|
107
|
+
if (options?.severity)
|
|
108
|
+
results = results.filter(i => i.severity === options.severity);
|
|
109
|
+
return results.sort((a, b) => b.createdAt - a.createdAt);
|
|
110
|
+
}
|
|
111
|
+
/** Get active (unresolved) incidents. */
|
|
112
|
+
getActiveIncidents() {
|
|
113
|
+
return [...this.incidents.values()]
|
|
114
|
+
.filter(i => i.status !== 'resolved')
|
|
115
|
+
.sort((a, b) => b.createdAt - a.createdAt);
|
|
116
|
+
}
|
|
117
|
+
// ── Status Page ───────────────────────────────────────────────
|
|
118
|
+
/** Get status page data. */
|
|
119
|
+
getStatusPage() {
|
|
120
|
+
const active = this.getActiveIncidents();
|
|
121
|
+
const resolved = [...this.incidents.values()]
|
|
122
|
+
.filter(i => i.status === 'resolved')
|
|
123
|
+
.sort((a, b) => b.resolvedAt - a.resolvedAt)
|
|
124
|
+
.slice(0, this.recentResolvedCount);
|
|
125
|
+
// Determine overall status
|
|
126
|
+
let overallStatus = 'operational';
|
|
127
|
+
if (active.some(i => i.severity === 'critical')) {
|
|
128
|
+
overallStatus = 'major_outage';
|
|
129
|
+
}
|
|
130
|
+
else if (active.length > 0) {
|
|
131
|
+
overallStatus = 'degraded';
|
|
132
|
+
}
|
|
133
|
+
// Service statuses
|
|
134
|
+
const affectedSet = new Set();
|
|
135
|
+
for (const inc of active) {
|
|
136
|
+
for (const svc of inc.affectedServices)
|
|
137
|
+
affectedSet.add(svc);
|
|
138
|
+
}
|
|
139
|
+
const serviceStatuses = [...this.services].map(svc => ({
|
|
140
|
+
service: svc,
|
|
141
|
+
status: affectedSet.has(svc) ? 'affected' : 'operational',
|
|
142
|
+
}));
|
|
143
|
+
return { overallStatus, activeIncidents: active, recentResolved: resolved, serviceStatuses };
|
|
144
|
+
}
|
|
145
|
+
// ── Stats ──────────────────────────────────────────────────────
|
|
146
|
+
getStats() {
|
|
147
|
+
let active = 0, resolved = 0;
|
|
148
|
+
let totalResolutionMs = 0, resolvedCount = 0;
|
|
149
|
+
const bySeverity = { minor: 0, major: 0, critical: 0 };
|
|
150
|
+
for (const inc of this.incidents.values()) {
|
|
151
|
+
if (inc.status === 'resolved') {
|
|
152
|
+
resolved++;
|
|
153
|
+
if (inc.durationMs) {
|
|
154
|
+
totalResolutionMs += inc.durationMs;
|
|
155
|
+
resolvedCount++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
active++;
|
|
160
|
+
}
|
|
161
|
+
bySeverity[inc.severity]++;
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
totalIncidents: this.incidents.size,
|
|
165
|
+
activeIncidents: active,
|
|
166
|
+
resolvedIncidents: resolved,
|
|
167
|
+
avgResolutionMs: resolvedCount > 0 ? Math.round(totalResolutionMs / resolvedCount) : 0,
|
|
168
|
+
incidentsBySeverity: bySeverity,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** Clear all data. */
|
|
172
|
+
destroy() {
|
|
173
|
+
this.incidents.clear();
|
|
174
|
+
this.services.clear();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.IncidentManager = IncidentManager;
|
|
178
|
+
//# sourceMappingURL=incident-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-manager.js","sourceRoot":"","sources":["../src/incident-manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA4DH,wEAAwE;AAExE,MAAa,eAAe;IAClB,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,MAAM,GAAG,CAAC,CAAC;IAEX,YAAY,CAAS;IACrB,mBAAmB,CAAS;IAEpC,YAAY,SAAgC,EAAE;QAC5C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED,iEAAiE;IAEjE,8CAA8C;IAC9C,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,gCAAgC;IAChC,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,iEAAiE;IAEjE,0BAA0B;IAC1B,cAAc,CAAC,MAA4B;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,YAAY,oBAAoB,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAa;YACzB,EAAE,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE;YAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;YACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,eAAe;YACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE;YAC/C,OAAO,EAAE,CAAC;oBACR,MAAM,EAAE,eAAe;oBACvB,OAAO,EAAE,qBAAqB,MAAM,CAAC,KAAK,EAAE;oBAC5C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB,CAAC;YACF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QAEF,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0CAA0C;IAC1C,SAAS,CAAC,EAAU,EAAE,MAAoB;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAEvF,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;QAClD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,eAAe,CAAC,EAAU,EAAE,OAAe;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,0BAA0B;IAC1B,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,4CAA4C;IAC5C,aAAa,CAAC,OAAkE;QAC9E,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,MAAM;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChF,IAAI,OAAO,EAAE,QAAQ;YAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,yCAAyC;IACzC,kBAAkB;QAChB,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,iEAAiE;IAEjE,4BAA4B;IAC5B,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;aACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAW,GAAG,CAAC,CAAC,UAAW,CAAC;aAC7C,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEtC,2BAA2B;QAC3B,IAAI,aAAa,GAAgD,aAAa,CAAC;QAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,EAAE,CAAC;YAChD,aAAa,GAAG,cAAc,CAAC;QACjC,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,aAAa,GAAG,UAAU,CAAC;QAC7B,CAAC;QAED,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,gBAAgB;gBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAmB,CAAC,CAAC,CAAC,aAAsB;SAC5E,CAAC,CAAC,CAAC;QAEJ,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC/F,CAAC;IAED,kEAAkE;IAElE,QAAQ;QACN,IAAI,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QAC7B,IAAI,iBAAiB,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAEvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC9B,QAAQ,EAAE,CAAC;gBACX,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,iBAAiB,IAAI,GAAG,CAAC,UAAU,CAAC;oBACpC,aAAa,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC;YACX,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YACnC,eAAe,EAAE,MAAM;YACvB,iBAAiB,EAAE,QAAQ;YAC3B,eAAe,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,mBAAmB,EAAE,UAAU;SAChC,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AA5KD,0CA4KC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -223,6 +223,22 @@ export { DataRetentionManager } from './data-retention';
|
|
|
223
223
|
export type { RetentionPolicy, PolicyCreateParams, RetentionAction, DataStore, PurgeRecord, EnforceResult, RetentionStatus, DataRetentionConfig, DataRetentionStats } from './data-retention';
|
|
224
224
|
export { CapacityPlanner } from './capacity-planner';
|
|
225
225
|
export type { Resource, ResourceCreateParams, CapacitySample, ForecastPoint, ForecastResult, AlertSeverity, CapacityAlert, CapacityPlannerConfig, CapacityPlannerStats } from './capacity-planner';
|
|
226
|
+
export { LoadBalancer } from './load-balancer';
|
|
227
|
+
export type { Backend, BackendAddParams, PickResult, BalancingStrategy, LoadBalancerConfig, LoadBalancerStats } from './load-balancer';
|
|
228
|
+
export { APIKeyTagManager } from './key-tags';
|
|
229
|
+
export type { KeyTagEntry, TagSearchResult, TagGroup, KeyTagConfig, KeyTagStats } from './key-tags';
|
|
230
|
+
export { RequestValidator } from './request-validator';
|
|
231
|
+
export type { ValidationRule, RuleCreateParams as ValidationRuleCreateParams, RequestValidationResult, RequestValidatorConfig, RequestValidatorStats } from './request-validator';
|
|
232
|
+
export { MaintenanceWindowManager } from './maintenance-window';
|
|
233
|
+
export type { MaintenanceWindow, WindowScheduleParams, WindowStatus, MaintenanceStatus, MaintenanceWindowConfig, MaintenanceWindowStats } from './maintenance-window';
|
|
234
|
+
export { WebhookRetryManager } from './webhook-retry';
|
|
235
|
+
export type { RetryEntry, RetryEntryStatus, EnqueueParams, WebhookRetryConfig, WebhookRetryStats } from './webhook-retry';
|
|
236
|
+
export { APIMetricsAggregator } from './api-metrics';
|
|
237
|
+
export type { MetricRecord as APIMetricRecord, MetricGranularity, MetricBucket, MetricSummary, ToolMetricSummary, APIMetricsConfig, APIMetricsStats } from './api-metrics';
|
|
238
|
+
export { KeyMigrationManager } from './key-migration';
|
|
239
|
+
export type { Migration, MigrationStatus, MigrationPlanParams, MigrationHandler, KeyMigrationConfig, KeyMigrationStats } from './key-migration';
|
|
240
|
+
export { IncidentManager } from './incident-manager';
|
|
241
|
+
export type { Incident, IncidentSeverity, IncidentStatus, IncidentCreateParams, IncidentUpdate, UpdateParams, StatusPageData, IncidentManagerConfig, IncidentManagerStats } from './incident-manager';
|
|
226
242
|
export type { PayGateConfig, JsonRpcRequest, JsonRpcResponse, JsonRpcError, ToolCallParams, ToolInfo, ToolPricing, ServerBackendConfig, ApiKeyRecord, UsageEvent, UsageSummary, GateDecision, QuotaConfig, SpendCapConfig, X402Config, BatchToolCall, BatchGateResult, WebhookFilterRule, KeyListQuery, KeyListResult, } from './types';
|
|
227
243
|
export { DEFAULT_CONFIG } from './types';
|
|
228
244
|
//# sourceMappingURL=index.d.ts.map
|