paygate-mcp 10.17.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.
@@ -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":"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"}
package/dist/index.d.ts CHANGED
@@ -231,6 +231,14 @@ export { RequestValidator } from './request-validator';
231
231
  export type { ValidationRule, RuleCreateParams as ValidationRuleCreateParams, RequestValidationResult, RequestValidatorConfig, RequestValidatorStats } from './request-validator';
232
232
  export { MaintenanceWindowManager } from './maintenance-window';
233
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';
234
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';
235
243
  export { DEFAULT_CONFIG } from './types';
236
244
  //# sourceMappingURL=index.d.ts.map