paygate-mcp 2.4.0 → 2.6.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/README.md +63 -2
- package/dist/audit.d.ts +1 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js.map +1 -1
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +1 -0
- package/dist/gate.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/redis-sync.d.ts +2 -0
- package/dist/redis-sync.d.ts.map +1 -1
- package/dist/redis-sync.js +4 -0
- package/dist/redis-sync.js.map +1 -1
- package/dist/server.d.ts +19 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +166 -1
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/webhook.d.ts +63 -1
- package/dist/webhook.d.ts.map +1 -1
- package/dist/webhook.js +133 -11
- package/dist/webhook.js.map +1 -1
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -68,6 +68,8 @@ export interface PayGateConfig {
|
|
|
68
68
|
webhookUrl: string | null;
|
|
69
69
|
/** Secret for HMAC-SHA256 webhook signatures. Null = unsigned. */
|
|
70
70
|
webhookSecret: string | null;
|
|
71
|
+
/** Maximum retries for failed webhook deliveries. Default: 5. */
|
|
72
|
+
webhookMaxRetries?: number;
|
|
71
73
|
/** Refund credits when downstream tool call fails. Default: false. */
|
|
72
74
|
refundOnFailure: boolean;
|
|
73
75
|
/** Global usage quota defaults (daily/monthly limits). Null = unlimited. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA2HU,QAAA,cAAc,GAAkB;IAC3C,IAAI,EAAE,oBAAoB;IAC1B,aAAa,EAAE,EAAE;IACjB,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,IAAI;IACV,qBAAqB,EAAE,CAAC;IACxB,WAAW,EAAE,EAAE;IACf,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,2BAA2B,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,CAAC;IAC/H,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,CAAC;IACpB,eAAe,EAAE,KAAK;CACvB,CAAC"}
|
package/dist/webhook.d.ts
CHANGED
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Webhook — Fire-and-forget HTTP POST of events to an external URL.
|
|
3
3
|
*
|
|
4
4
|
* Events are batched (max 10, flush every 5s) to reduce overhead.
|
|
5
|
-
* Failed deliveries are retried
|
|
5
|
+
* Failed deliveries are retried with exponential backoff (1s, 2s, 4s, 8s, 16s).
|
|
6
|
+
* After maxRetries exhausted, events move to a dead-letter queue for inspection.
|
|
6
7
|
*
|
|
7
8
|
* Supports:
|
|
8
9
|
* - Usage events (tool calls, denials)
|
|
9
10
|
* - Admin lifecycle events (key.created, key.revoked, key.rotated, key.topup)
|
|
10
11
|
* - HMAC-SHA256 signatures for payload verification (X-PayGate-Signature header)
|
|
12
|
+
* - Exponential backoff retry queue with configurable max retries
|
|
13
|
+
* - Dead-letter queue for permanently failed deliveries (max 1000 entries)
|
|
11
14
|
*/
|
|
12
15
|
import { UsageEvent } from './types';
|
|
13
16
|
export interface WebhookAdminEvent {
|
|
@@ -17,18 +20,47 @@ export interface WebhookAdminEvent {
|
|
|
17
20
|
metadata: Record<string, unknown>;
|
|
18
21
|
}
|
|
19
22
|
export type WebhookEvent = UsageEvent | WebhookAdminEvent;
|
|
23
|
+
export interface DeadLetterEntry {
|
|
24
|
+
/** Events that permanently failed */
|
|
25
|
+
events: WebhookEvent[];
|
|
26
|
+
/** Number of attempts made */
|
|
27
|
+
attempts: number;
|
|
28
|
+
/** Last error message or HTTP status */
|
|
29
|
+
lastError: string;
|
|
30
|
+
/** When the first attempt was made */
|
|
31
|
+
firstAttempt: string;
|
|
32
|
+
/** When the last attempt was made */
|
|
33
|
+
lastAttempt: string;
|
|
34
|
+
/** Target webhook URL */
|
|
35
|
+
url: string;
|
|
36
|
+
}
|
|
20
37
|
export declare class WebhookEmitter {
|
|
21
38
|
private readonly url;
|
|
22
39
|
private readonly secret;
|
|
23
40
|
private readonly isHttps;
|
|
24
41
|
private buffer;
|
|
25
42
|
private timer;
|
|
43
|
+
private retryTimer;
|
|
26
44
|
private readonly batchSize;
|
|
27
45
|
private readonly flushIntervalMs;
|
|
46
|
+
readonly maxRetries: number;
|
|
47
|
+
private readonly baseDelayMs;
|
|
48
|
+
/** Entries waiting for retry with exponential backoff */
|
|
49
|
+
private retryQueue;
|
|
50
|
+
/** Permanently failed deliveries (capped at maxDeadLetters) */
|
|
51
|
+
private deadLetters;
|
|
52
|
+
private readonly maxDeadLetters;
|
|
53
|
+
/** Counts for monitoring */
|
|
54
|
+
private _totalDelivered;
|
|
55
|
+
private _totalFailed;
|
|
56
|
+
private _totalRetries;
|
|
28
57
|
constructor(url: string, options?: {
|
|
29
58
|
secret?: string | null;
|
|
30
59
|
batchSize?: number;
|
|
31
60
|
flushIntervalMs?: number;
|
|
61
|
+
maxRetries?: number;
|
|
62
|
+
baseDelayMs?: number;
|
|
63
|
+
maxDeadLetters?: number;
|
|
32
64
|
});
|
|
33
65
|
/**
|
|
34
66
|
* Emit a usage event (tool call / denial).
|
|
@@ -47,6 +79,36 @@ export declare class WebhookEmitter {
|
|
|
47
79
|
* Verify an HMAC-SHA256 signature.
|
|
48
80
|
*/
|
|
49
81
|
static verify(payload: string, signature: string, secret: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Process the retry queue: send any entries whose nextRetryAt has passed.
|
|
84
|
+
*/
|
|
85
|
+
private processRetryQueue;
|
|
86
|
+
/**
|
|
87
|
+
* Schedule a batch for retry with exponential backoff.
|
|
88
|
+
*/
|
|
89
|
+
private scheduleRetry;
|
|
90
|
+
/**
|
|
91
|
+
* Add a permanently failed delivery to the dead letter queue.
|
|
92
|
+
*/
|
|
93
|
+
private addDeadLetter;
|
|
94
|
+
/**
|
|
95
|
+
* Get all dead letter entries.
|
|
96
|
+
*/
|
|
97
|
+
getDeadLetters(): DeadLetterEntry[];
|
|
98
|
+
/**
|
|
99
|
+
* Clear dead letter queue. Returns number of entries cleared.
|
|
100
|
+
*/
|
|
101
|
+
clearDeadLetters(): number;
|
|
102
|
+
/**
|
|
103
|
+
* Get retry queue stats.
|
|
104
|
+
*/
|
|
105
|
+
getRetryStats(): {
|
|
106
|
+
pendingRetries: number;
|
|
107
|
+
deadLetterCount: number;
|
|
108
|
+
totalDelivered: number;
|
|
109
|
+
totalFailed: number;
|
|
110
|
+
totalRetries: number;
|
|
111
|
+
};
|
|
50
112
|
private send;
|
|
51
113
|
destroy(): void;
|
|
52
114
|
}
|
package/dist/webhook.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/webhook.js
CHANGED
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* Webhook — Fire-and-forget HTTP POST of events to an external URL.
|
|
4
4
|
*
|
|
5
5
|
* Events are batched (max 10, flush every 5s) to reduce overhead.
|
|
6
|
-
* Failed deliveries are retried
|
|
6
|
+
* Failed deliveries are retried with exponential backoff (1s, 2s, 4s, 8s, 16s).
|
|
7
|
+
* After maxRetries exhausted, events move to a dead-letter queue for inspection.
|
|
7
8
|
*
|
|
8
9
|
* Supports:
|
|
9
10
|
* - Usage events (tool calls, denials)
|
|
10
11
|
* - Admin lifecycle events (key.created, key.revoked, key.rotated, key.topup)
|
|
11
12
|
* - HMAC-SHA256 signatures for payload verification (X-PayGate-Signature header)
|
|
13
|
+
* - Exponential backoff retry queue with configurable max retries
|
|
14
|
+
* - Dead-letter queue for permanently failed deliveries (max 1000 entries)
|
|
12
15
|
*/
|
|
13
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
17
|
exports.WebhookEmitter = void 0;
|
|
@@ -25,17 +28,36 @@ class WebhookEmitter {
|
|
|
25
28
|
isHttps;
|
|
26
29
|
buffer = [];
|
|
27
30
|
timer = null;
|
|
31
|
+
retryTimer = null;
|
|
28
32
|
batchSize;
|
|
29
33
|
flushIntervalMs;
|
|
34
|
+
maxRetries;
|
|
35
|
+
baseDelayMs;
|
|
36
|
+
/** Entries waiting for retry with exponential backoff */
|
|
37
|
+
retryQueue = [];
|
|
38
|
+
/** Permanently failed deliveries (capped at maxDeadLetters) */
|
|
39
|
+
deadLetters = [];
|
|
40
|
+
maxDeadLetters;
|
|
41
|
+
/** Counts for monitoring */
|
|
42
|
+
_totalDelivered = 0;
|
|
43
|
+
_totalFailed = 0;
|
|
44
|
+
_totalRetries = 0;
|
|
30
45
|
constructor(url, options) {
|
|
31
46
|
this.url = url;
|
|
32
47
|
this.secret = options?.secret || null;
|
|
33
48
|
this.isHttps = url.startsWith('https://');
|
|
34
49
|
this.batchSize = options?.batchSize || 10;
|
|
35
50
|
this.flushIntervalMs = options?.flushIntervalMs || 5000;
|
|
51
|
+
this.maxRetries = options?.maxRetries ?? 5;
|
|
52
|
+
this.baseDelayMs = options?.baseDelayMs ?? 1000;
|
|
53
|
+
this.maxDeadLetters = options?.maxDeadLetters ?? 1000;
|
|
36
54
|
this.timer = setInterval(() => this.flush(), this.flushIntervalMs);
|
|
37
55
|
if (this.timer.unref)
|
|
38
|
-
this.timer.unref();
|
|
56
|
+
this.timer.unref();
|
|
57
|
+
// Process retry queue every second
|
|
58
|
+
this.retryTimer = setInterval(() => this.processRetryQueue(), 1000);
|
|
59
|
+
if (this.retryTimer.unref)
|
|
60
|
+
this.retryTimer.unref();
|
|
39
61
|
}
|
|
40
62
|
/**
|
|
41
63
|
* Emit a usage event (tool call / denial).
|
|
@@ -65,7 +87,7 @@ class WebhookEmitter {
|
|
|
65
87
|
if (this.buffer.length === 0)
|
|
66
88
|
return;
|
|
67
89
|
const batch = this.buffer.splice(0, this.batchSize);
|
|
68
|
-
this.send(batch,
|
|
90
|
+
this.send(batch, 0, new Date().toISOString());
|
|
69
91
|
}
|
|
70
92
|
/**
|
|
71
93
|
* Compute HMAC-SHA256 signature for a payload.
|
|
@@ -87,7 +109,94 @@ class WebhookEmitter {
|
|
|
87
109
|
}
|
|
88
110
|
return result === 0;
|
|
89
111
|
}
|
|
90
|
-
|
|
112
|
+
// ─── Retry Queue ────────────────────────────────────────────────────────────
|
|
113
|
+
/**
|
|
114
|
+
* Process the retry queue: send any entries whose nextRetryAt has passed.
|
|
115
|
+
*/
|
|
116
|
+
processRetryQueue() {
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
const ready = [];
|
|
119
|
+
const remaining = [];
|
|
120
|
+
for (const entry of this.retryQueue) {
|
|
121
|
+
if (entry.nextRetryAt <= now) {
|
|
122
|
+
ready.push(entry);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
remaining.push(entry);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
this.retryQueue = remaining;
|
|
129
|
+
for (const entry of ready) {
|
|
130
|
+
this._totalRetries++;
|
|
131
|
+
this.send(entry.events, entry.attempt, entry.firstAttempt, entry.lastError);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Schedule a batch for retry with exponential backoff.
|
|
136
|
+
*/
|
|
137
|
+
scheduleRetry(events, attempt, firstAttempt, lastError) {
|
|
138
|
+
if (attempt >= this.maxRetries) {
|
|
139
|
+
// Exhausted retries — move to dead letter queue
|
|
140
|
+
this.addDeadLetter(events, attempt, lastError, firstAttempt);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const delayMs = this.baseDelayMs * Math.pow(2, attempt);
|
|
144
|
+
this.retryQueue.push({
|
|
145
|
+
events,
|
|
146
|
+
attempt: attempt + 1,
|
|
147
|
+
nextRetryAt: Date.now() + delayMs,
|
|
148
|
+
firstAttempt,
|
|
149
|
+
lastError,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Add a permanently failed delivery to the dead letter queue.
|
|
154
|
+
*/
|
|
155
|
+
addDeadLetter(events, attempts, lastError, firstAttempt) {
|
|
156
|
+
this._totalFailed++;
|
|
157
|
+
const entry = {
|
|
158
|
+
events,
|
|
159
|
+
attempts,
|
|
160
|
+
lastError,
|
|
161
|
+
firstAttempt,
|
|
162
|
+
lastAttempt: new Date().toISOString(),
|
|
163
|
+
url: this.url,
|
|
164
|
+
};
|
|
165
|
+
this.deadLetters.push(entry);
|
|
166
|
+
// Cap the dead letter queue size
|
|
167
|
+
if (this.deadLetters.length > this.maxDeadLetters) {
|
|
168
|
+
this.deadLetters = this.deadLetters.slice(-this.maxDeadLetters);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// ─── Dead Letter API ────────────────────────────────────────────────────────
|
|
172
|
+
/**
|
|
173
|
+
* Get all dead letter entries.
|
|
174
|
+
*/
|
|
175
|
+
getDeadLetters() {
|
|
176
|
+
return [...this.deadLetters];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Clear dead letter queue. Returns number of entries cleared.
|
|
180
|
+
*/
|
|
181
|
+
clearDeadLetters() {
|
|
182
|
+
const count = this.deadLetters.length;
|
|
183
|
+
this.deadLetters = [];
|
|
184
|
+
return count;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get retry queue stats.
|
|
188
|
+
*/
|
|
189
|
+
getRetryStats() {
|
|
190
|
+
return {
|
|
191
|
+
pendingRetries: this.retryQueue.length,
|
|
192
|
+
deadLetterCount: this.deadLetters.length,
|
|
193
|
+
totalDelivered: this._totalDelivered,
|
|
194
|
+
totalFailed: this._totalFailed,
|
|
195
|
+
totalRetries: this._totalRetries,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// ─── Send ──────────────────────────────────────────────────────────────────
|
|
199
|
+
send(events, attempt, firstAttempt, previousError) {
|
|
91
200
|
// Separate events by type for the payload
|
|
92
201
|
const usageEvents = [];
|
|
93
202
|
const adminEvents = [];
|
|
@@ -112,7 +221,8 @@ class WebhookEmitter {
|
|
|
112
221
|
parsed = new URL(this.url);
|
|
113
222
|
}
|
|
114
223
|
catch {
|
|
115
|
-
// Invalid URL —
|
|
224
|
+
// Invalid URL — send to dead letter
|
|
225
|
+
this.addDeadLetter(events, attempt, 'Invalid webhook URL', firstAttempt);
|
|
116
226
|
return;
|
|
117
227
|
}
|
|
118
228
|
const headers = {
|
|
@@ -127,6 +237,10 @@ class WebhookEmitter {
|
|
|
127
237
|
const signature = WebhookEmitter.sign(signaturePayload, this.secret);
|
|
128
238
|
headers['X-PayGate-Signature'] = `t=${timestamp},v1=${signature}`;
|
|
129
239
|
}
|
|
240
|
+
// Add retry attempt header for observability
|
|
241
|
+
if (attempt > 0) {
|
|
242
|
+
headers['X-PayGate-Retry'] = attempt;
|
|
243
|
+
}
|
|
130
244
|
const reqFn = this.isHttps ? https_1.request : http_1.request;
|
|
131
245
|
const req = reqFn({
|
|
132
246
|
hostname: parsed.hostname,
|
|
@@ -138,17 +252,21 @@ class WebhookEmitter {
|
|
|
138
252
|
}, (res) => {
|
|
139
253
|
// Drain response to free socket
|
|
140
254
|
res.resume();
|
|
141
|
-
if (res.statusCode && res.statusCode >= 400
|
|
142
|
-
|
|
255
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
256
|
+
const errorMsg = `HTTP ${res.statusCode}`;
|
|
257
|
+
this.scheduleRetry(events, attempt, firstAttempt, errorMsg);
|
|
143
258
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (retriesLeft > 0) {
|
|
147
|
-
setTimeout(() => this.send(events, retriesLeft - 1), 2000);
|
|
259
|
+
else {
|
|
260
|
+
this._totalDelivered++;
|
|
148
261
|
}
|
|
149
262
|
});
|
|
263
|
+
req.on('error', (err) => {
|
|
264
|
+
const errorMsg = err.message || 'Connection error';
|
|
265
|
+
this.scheduleRetry(events, attempt, firstAttempt, errorMsg);
|
|
266
|
+
});
|
|
150
267
|
req.on('timeout', () => {
|
|
151
268
|
req.destroy();
|
|
269
|
+
this.scheduleRetry(events, attempt, firstAttempt, 'Timeout (10s)');
|
|
152
270
|
});
|
|
153
271
|
req.write(body);
|
|
154
272
|
req.end();
|
|
@@ -158,6 +276,10 @@ class WebhookEmitter {
|
|
|
158
276
|
clearInterval(this.timer);
|
|
159
277
|
this.timer = null;
|
|
160
278
|
}
|
|
279
|
+
if (this.retryTimer) {
|
|
280
|
+
clearInterval(this.retryTimer);
|
|
281
|
+
this.retryTimer = null;
|
|
282
|
+
}
|
|
161
283
|
this.flush(); // Send remaining events
|
|
162
284
|
}
|
|
163
285
|
}
|
package/dist/webhook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paygate-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Pay-per-tool-call gating proxy for MCP servers. Wrap any MCP server with API key auth, per-tool pricing, rate limiting, and usage metering.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|