paygate-mcp 2.2.0 → 2.3.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 +17 -8
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/redis-client.d.ts +50 -0
- package/dist/redis-client.d.ts.map +1 -1
- package/dist/redis-client.js +240 -1
- package/dist/redis-client.js.map +1 -1
- package/dist/redis-sync.d.ts +50 -2
- package/dist/redis-sync.d.ts.map +1 -1
- package/dist/redis-sync.js +150 -3
- package/dist/redis-sync.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ Agent → PayGate (auth + billing) → Your MCP Server (stdio or HTTP)
|
|
|
53
53
|
- **Usage Analytics** — Time-series analytics API with tool breakdown, top consumers, and trend comparison
|
|
54
54
|
- **Alert Webhooks** — Configurable alerts for spending thresholds, low credits, quota warnings, key expiry, rate limit spikes
|
|
55
55
|
- **Team Management** — Group API keys into teams with shared budgets, quotas, and usage tracking
|
|
56
|
-
- **Horizontal Scaling (Redis)** — Redis-backed state for multi-process deployments with atomic credit deduction, distributed rate limiting,
|
|
56
|
+
- **Horizontal Scaling (Redis)** — Redis-backed state for multi-process deployments with atomic credit deduction, distributed rate limiting, persistent usage audit trail, and real-time pub/sub notifications
|
|
57
57
|
- **Refund on Failure** — Automatically refund credits when downstream tool calls fail
|
|
58
58
|
- **Webhook Events** — POST batched usage events to any URL for external billing/alerting
|
|
59
59
|
- **Config File Mode** — Load all settings from a JSON file (`--config`)
|
|
@@ -953,32 +953,37 @@ PayGate uses a write-through cache pattern for maximum performance:
|
|
|
953
953
|
- **Reads** — Served from in-memory KeyStore (zero latency, no Redis round-trip)
|
|
954
954
|
- **Writes** — Propagated to Redis for cross-process shared state
|
|
955
955
|
- **Credit deduction** — Uses Redis Lua scripts for atomic check-and-deduct (prevents double-spend across processes)
|
|
956
|
-
- **Periodic sync** — Local caches refresh from Redis every 5 seconds
|
|
956
|
+
- **Periodic sync** — Local caches refresh from Redis every 5 seconds as a safety net
|
|
957
|
+
- **Pub/sub notifications** — Key mutations and credit changes propagate to all instances in real-time via Redis PUBLISH/SUBSCRIBE (sub-millisecond latency)
|
|
957
958
|
|
|
958
|
-
This means Gate.evaluate() stays synchronous and fast, while credit operations remain atomic across your entire fleet. The server automatically wires Redis hooks into the gate — every usage event and credit deduction flows to Redis without any code changes.
|
|
959
|
+
This means Gate.evaluate() stays synchronous and fast, while credit operations remain atomic across your entire fleet. The server automatically wires Redis hooks into the gate — every usage event and credit deduction flows to Redis without any code changes. Pub/sub ensures other instances see changes near-instantly (no 5-second wait).
|
|
959
960
|
|
|
960
961
|
**What Gets Synced**
|
|
961
962
|
|
|
962
963
|
| State | Redis Key Pattern | Sync Method |
|
|
963
964
|
|-------|-------------------|-------------|
|
|
964
|
-
| API keys | `pg:key:<keyId>` (Hash) | Write-through + periodic refresh |
|
|
965
|
+
| API keys | `pg:key:<keyId>` (Hash) | Write-through + pub/sub + periodic refresh |
|
|
965
966
|
| Key registry | `pg:keys` (Set) | Write-through |
|
|
966
|
-
| Credit deduction | `pg:key:<keyId>` | Atomic Lua script |
|
|
967
|
-
| Credit top-up | `pg:key:<keyId>` | Atomic Lua script |
|
|
967
|
+
| Credit deduction | `pg:key:<keyId>` | Atomic Lua script + pub/sub broadcast |
|
|
968
|
+
| Credit top-up | `pg:key:<keyId>` | Atomic Lua script + pub/sub broadcast |
|
|
968
969
|
| Rate limiting | `pg:rate:<key>` (Sorted Set) | Atomic Lua (sliding window) |
|
|
969
970
|
| Usage events | `pg:usage` (List) | Fire-and-forget RPUSH |
|
|
971
|
+
| Cross-instance events | `pg:events` (Pub/Sub) | PUBLISH/SUBSCRIBE with inline data |
|
|
970
972
|
|
|
971
973
|
**Deployment Pattern**
|
|
972
974
|
|
|
973
975
|
```
|
|
974
976
|
┌──────────────┐
|
|
975
977
|
│ Redis 7+ │
|
|
976
|
-
|
|
978
|
+
│ ┌────────┐ │
|
|
979
|
+
│ │pub/sub │ │
|
|
980
|
+
└──┴───┬────┴──┘
|
|
977
981
|
│
|
|
978
982
|
┌────────────┼────────────┐
|
|
979
983
|
│ │ │
|
|
980
984
|
┌─────┴─────┐ ┌───┴───┐ ┌─────┴─────┐
|
|
981
985
|
│ PayGate 1 │ │ PG 2 │ │ PayGate 3 │
|
|
986
|
+
│ (sub+pub) │ │ (sub) │ │ (sub+pub) │
|
|
982
987
|
└─────┬─────┘ └───┬───┘ └─────┬─────┘
|
|
983
988
|
│ │ │
|
|
984
989
|
┌─────┴────────────┴────────────┴─────┐
|
|
@@ -986,6 +991,8 @@ This means Gate.evaluate() stays synchronous and fast, while credit operations r
|
|
|
986
991
|
└──────────────────────────────────────┘
|
|
987
992
|
```
|
|
988
993
|
|
|
994
|
+
**Real-Time Pub/Sub** — When one instance creates/revokes a key or changes credits, it publishes an event to the `pg:events` channel. All other instances receive it instantly and update their local KeyStore without waiting for the 5-second sync. Credit changes include inline data (credits, totalSpent, totalCalls) so receivers skip the Redis roundtrip entirely. Each instance has a unique ID for self-message filtering — no echo loops. If pub/sub fails, the periodic sync continues as a fallback.
|
|
995
|
+
|
|
989
996
|
**Distributed Rate Limiting** — Rate limits are enforced atomically across all instances using Redis sorted sets with Lua scripts. Each rate check does ZREMRANGEBYSCORE + ZCARD + ZADD in a single round-trip, preventing burst bypass across processes. Falls open (allows) if Redis is temporarily unavailable.
|
|
990
997
|
|
|
991
998
|
**Persistent Usage Audit Trail** — Usage events are appended to a Redis list (RPUSH), creating a shared audit trail visible from any instance. Events survive process restarts and are queryable from the dashboard. Max 100k events with automatic trimming.
|
|
@@ -1112,12 +1119,14 @@ const result = await client.callTool('search', { query: 'hello' });
|
|
|
1112
1119
|
- Redis auth supported via password in URL (redis://:password@host:port)
|
|
1113
1120
|
- Graceful Redis fallback — local operations continue if Redis disconnects
|
|
1114
1121
|
- Rate limiter fails open on Redis error (allows request, never blocks on network issues)
|
|
1122
|
+
- Pub/sub self-message filtering via unique instance IDs (no echo loops)
|
|
1123
|
+
- Pub/sub subscriber uses a dedicated Redis connection (required by Redis protocol)
|
|
1115
1124
|
- Red-teamed with 101 adversarial security tests across 14 passes
|
|
1116
1125
|
|
|
1117
1126
|
## Current Limitations
|
|
1118
1127
|
|
|
1119
1128
|
- **No response size limits for HTTP transport** — Large responses from remote servers are forwarded as-is.
|
|
1120
|
-
- **Redis
|
|
1129
|
+
- **Redis key metadata has two sync paths** — Pub/sub delivers near-instant updates; periodic sync (5s) serves as a safety net for missed messages. Credits, rate limits, and usage are always atomic.
|
|
1121
1130
|
- **SSE sessions are per-instance** — Each PayGate instance manages its own SSE connections (HTTP streams can't be serialized to Redis).
|
|
1122
1131
|
|
|
1123
1132
|
## Roadmap
|
package/dist/index.d.ts
CHANGED
|
@@ -43,9 +43,10 @@ export { AlertEngine } from './alerts';
|
|
|
43
43
|
export type { Alert, AlertRule, AlertType, AlertEngineConfig } from './alerts';
|
|
44
44
|
export { TeamManager } from './teams';
|
|
45
45
|
export type { TeamRecord, TeamUsageSummary } from './teams';
|
|
46
|
-
export { RedisClient, parseRedisUrl } from './redis-client';
|
|
47
|
-
export type { RedisClientOptions } from './redis-client';
|
|
46
|
+
export { RedisClient, parseRedisUrl, RedisSubscriber } from './redis-client';
|
|
47
|
+
export type { RedisClientOptions, MessageHandler } from './redis-client';
|
|
48
48
|
export { RedisSync } from './redis-sync';
|
|
49
|
+
export type { PubSubEvent } from './redis-sync';
|
|
49
50
|
export { PayGateClient, PayGateError } from './client';
|
|
50
51
|
export type { PayGateClientConfig, CreditsNeededInfo, BalanceInfo } from './client';
|
|
51
52
|
export type { PayGateConfig, JsonRpcRequest, JsonRpcResponse, JsonRpcError, ToolCallParams, ToolInfo, ToolPricing, ServerBackendConfig, ApiKeyRecord, UsageEvent, UsageSummary, GateDecision, QuotaConfig, } from './types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1F,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/H,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* ```
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.DEFAULT_CONFIG = exports.PayGateError = exports.PayGateClient = exports.RedisSync = exports.parseRedisUrl = exports.RedisClient = exports.TeamManager = exports.AlertEngine = exports.AnalyticsEngine = exports.getDashboardHtml = exports.MetricsCollector = exports.ToolRegistry = exports.maskKeyForAudit = exports.AuditLogger = exports.writeSseKeepAlive = exports.writeSseEvent = exports.writeSseHeaders = exports.SessionManager = exports.OAuthProvider = exports.QuotaTracker = exports.WebhookEmitter = exports.StripeWebhookHandler = exports.RateLimiter = exports.UsageMeter = exports.KeyStore = exports.MultiServerRouter = exports.HttpMcpProxy = exports.McpProxy = exports.Gate = exports.PayGateServer = void 0;
|
|
19
|
+
exports.DEFAULT_CONFIG = exports.PayGateError = exports.PayGateClient = exports.RedisSync = exports.RedisSubscriber = exports.parseRedisUrl = exports.RedisClient = exports.TeamManager = exports.AlertEngine = exports.AnalyticsEngine = exports.getDashboardHtml = exports.MetricsCollector = exports.ToolRegistry = exports.maskKeyForAudit = exports.AuditLogger = exports.writeSseKeepAlive = exports.writeSseEvent = exports.writeSseHeaders = exports.SessionManager = exports.OAuthProvider = exports.QuotaTracker = exports.WebhookEmitter = exports.StripeWebhookHandler = exports.RateLimiter = exports.UsageMeter = exports.KeyStore = exports.MultiServerRouter = exports.HttpMcpProxy = exports.McpProxy = exports.Gate = exports.PayGateServer = void 0;
|
|
20
20
|
var server_1 = require("./server");
|
|
21
21
|
Object.defineProperty(exports, "PayGateServer", { enumerable: true, get: function () { return server_1.PayGateServer; } });
|
|
22
22
|
var gate_1 = require("./gate");
|
|
@@ -64,6 +64,7 @@ Object.defineProperty(exports, "TeamManager", { enumerable: true, get: function
|
|
|
64
64
|
var redis_client_1 = require("./redis-client");
|
|
65
65
|
Object.defineProperty(exports, "RedisClient", { enumerable: true, get: function () { return redis_client_1.RedisClient; } });
|
|
66
66
|
Object.defineProperty(exports, "parseRedisUrl", { enumerable: true, get: function () { return redis_client_1.parseRedisUrl; } });
|
|
67
|
+
Object.defineProperty(exports, "RedisSubscriber", { enumerable: true, get: function () { return redis_client_1.RedisSubscriber; } });
|
|
67
68
|
var redis_sync_1 = require("./redis-sync");
|
|
68
69
|
Object.defineProperty(exports, "RedisSync", { enumerable: true, get: function () { return redis_sync_1.RedisSync; } });
|
|
69
70
|
var client_1 = require("./client");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAC1B,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AAEvB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AAEtB,qCAA8F;AAArF,yGAAA,cAAc,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAC1E,iCAAuD;AAA9C,oGAAA,WAAW,OAAA;AAAE,wGAAA,eAAe,OAAA;AAErC,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAIzB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AAExB,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAEpB,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAEH,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAC1B,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AACjB,iCAAqC;AAA5B,mGAAA,UAAU,OAAA;AACnB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mCAAgD;AAAvC,8GAAA,oBAAoB,OAAA;AAC7B,qCAA2C;AAAlC,yGAAA,cAAc,OAAA;AAEvB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AAEtB,qCAA8F;AAArF,yGAAA,cAAc,OAAA;AAAE,0GAAA,eAAe,OAAA;AAAE,wGAAA,aAAa,OAAA;AAAE,4GAAA,iBAAiB,OAAA;AAC1E,iCAAuD;AAA9C,oGAAA,WAAW,OAAA;AAAE,wGAAA,eAAe,OAAA;AAErC,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AACrB,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AAIzB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AAExB,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AAEpB,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,+CAA6E;AAApE,2GAAA,WAAW,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,+GAAA,eAAe,OAAA;AAEpD,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAElB,mCAAuD;AAA9C,uGAAA,aAAa,OAAA;AAAE,sGAAA,YAAY,OAAA;AAmBpC,iCAAyC;AAAhC,uGAAA,cAAc,OAAA"}
|
package/dist/redis-client.d.ts
CHANGED
|
@@ -56,6 +56,14 @@ export declare class RedisClient {
|
|
|
56
56
|
zrangebyscore(key: string, min: string | number, max: string | number): Promise<string[]>;
|
|
57
57
|
zremrangebyscore(key: string, min: string | number, max: string | number): Promise<number>;
|
|
58
58
|
zcard(key: string): Promise<number>;
|
|
59
|
+
/**
|
|
60
|
+
* Publish a message to a Redis channel. Returns the number of receivers.
|
|
61
|
+
*/
|
|
62
|
+
publish(channel: string, message: string): Promise<number>;
|
|
63
|
+
rpush(key: string, ...values: string[]): Promise<number>;
|
|
64
|
+
lrange(key: string, start: number, stop: number): Promise<string[]>;
|
|
65
|
+
llen(key: string): Promise<number>;
|
|
66
|
+
ltrim(key: string, start: number, stop: number): Promise<string>;
|
|
59
67
|
/**
|
|
60
68
|
* Execute a server-side Lua script atomically. Used internally by PayGate
|
|
61
69
|
* for atomic credit deduction and rate limiting. Scripts are hardcoded
|
|
@@ -80,5 +88,47 @@ export declare class RedisClient {
|
|
|
80
88
|
private parseReply;
|
|
81
89
|
private findCRLF;
|
|
82
90
|
}
|
|
91
|
+
export type MessageHandler = (channel: string, message: string) => void;
|
|
92
|
+
export declare class RedisSubscriber {
|
|
93
|
+
private socket;
|
|
94
|
+
private connected;
|
|
95
|
+
private buffer;
|
|
96
|
+
private readonly opts;
|
|
97
|
+
private handler;
|
|
98
|
+
private closed;
|
|
99
|
+
private subscribed;
|
|
100
|
+
constructor(opts: RedisClientOptions);
|
|
101
|
+
/**
|
|
102
|
+
* Connect to Redis and optionally authenticate + select DB.
|
|
103
|
+
*/
|
|
104
|
+
connect(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to a channel and register a message handler.
|
|
107
|
+
* All incoming messages on any subscribed channel will be routed to the handler.
|
|
108
|
+
*/
|
|
109
|
+
subscribe(channel: string, handler: MessageHandler): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Disconnect the subscriber.
|
|
112
|
+
*/
|
|
113
|
+
disconnect(): Promise<void>;
|
|
114
|
+
get isConnected(): boolean;
|
|
115
|
+
get isSubscribed(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Send a command and wait for one RESP reply (used for AUTH/SELECT before SUBSCRIBE mode).
|
|
118
|
+
*/
|
|
119
|
+
private sendAndWait;
|
|
120
|
+
/**
|
|
121
|
+
* Process incoming RESP messages from the subscription connection.
|
|
122
|
+
* In subscription mode, Redis sends arrays like: ["message", channel, data]
|
|
123
|
+
* or ["subscribe", channel, count] (subscription confirmations).
|
|
124
|
+
*/
|
|
125
|
+
private processMessages;
|
|
126
|
+
private encodeResp;
|
|
127
|
+
/**
|
|
128
|
+
* Parse a single RESP reply. Returns [value, bytes_consumed] or null if incomplete.
|
|
129
|
+
*/
|
|
130
|
+
private parseOneReply;
|
|
131
|
+
private findCRLF;
|
|
132
|
+
}
|
|
83
133
|
export {};
|
|
84
134
|
//# sourceMappingURL=redis-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../src/redis-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../src/redis-client.ts"],"names":[],"mappings":"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"}
|
package/dist/redis-client.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* and rate limiting in distributed deployments.
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.RedisClient = void 0;
|
|
20
|
+
exports.RedisSubscriber = exports.RedisClient = void 0;
|
|
21
21
|
exports.parseRedisUrl = parseRedisUrl;
|
|
22
22
|
const net_1 = require("net");
|
|
23
23
|
/**
|
|
@@ -120,6 +120,26 @@ class RedisClient {
|
|
|
120
120
|
async zcard(key) {
|
|
121
121
|
return (await this.command('ZCARD', key));
|
|
122
122
|
}
|
|
123
|
+
// ─── Pub/Sub (publish only — subscribe requires RedisSubscriber) ──────────
|
|
124
|
+
/**
|
|
125
|
+
* Publish a message to a Redis channel. Returns the number of receivers.
|
|
126
|
+
*/
|
|
127
|
+
async publish(channel, message) {
|
|
128
|
+
return (await this.command('PUBLISH', channel, message));
|
|
129
|
+
}
|
|
130
|
+
// ─── List commands ────────────────────────────────────────────────────────
|
|
131
|
+
async rpush(key, ...values) {
|
|
132
|
+
return (await this.command('RPUSH', key, ...values));
|
|
133
|
+
}
|
|
134
|
+
async lrange(key, start, stop) {
|
|
135
|
+
return (await this.command('LRANGE', key, String(start), String(stop)));
|
|
136
|
+
}
|
|
137
|
+
async llen(key) {
|
|
138
|
+
return (await this.command('LLEN', key));
|
|
139
|
+
}
|
|
140
|
+
async ltrim(key, start, stop) {
|
|
141
|
+
return (await this.command('LTRIM', key, String(start), String(stop)));
|
|
142
|
+
}
|
|
123
143
|
// ─── Lua scripting (for atomic operations) ─────────────────────────────────
|
|
124
144
|
/**
|
|
125
145
|
* Execute a server-side Lua script atomically. Used internally by PayGate
|
|
@@ -338,4 +358,223 @@ class RedisClient {
|
|
|
338
358
|
}
|
|
339
359
|
}
|
|
340
360
|
exports.RedisClient = RedisClient;
|
|
361
|
+
class RedisSubscriber {
|
|
362
|
+
socket = null;
|
|
363
|
+
connected = false;
|
|
364
|
+
buffer = Buffer.alloc(0);
|
|
365
|
+
opts;
|
|
366
|
+
handler = null;
|
|
367
|
+
closed = false;
|
|
368
|
+
subscribed = false;
|
|
369
|
+
constructor(opts) {
|
|
370
|
+
this.opts = {
|
|
371
|
+
host: opts.host,
|
|
372
|
+
port: opts.port,
|
|
373
|
+
password: opts.password || '',
|
|
374
|
+
db: opts.db || 0,
|
|
375
|
+
connectTimeout: opts.connectTimeout || 5000,
|
|
376
|
+
commandTimeout: opts.commandTimeout || 10000,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Connect to Redis and optionally authenticate + select DB.
|
|
381
|
+
*/
|
|
382
|
+
async connect() {
|
|
383
|
+
if (this.connected)
|
|
384
|
+
return;
|
|
385
|
+
return new Promise((resolve, reject) => {
|
|
386
|
+
const timer = setTimeout(() => {
|
|
387
|
+
reject(new Error(`Redis subscriber connect timeout (${this.opts.connectTimeout}ms)`));
|
|
388
|
+
}, this.opts.connectTimeout);
|
|
389
|
+
this.socket = new net_1.Socket();
|
|
390
|
+
this.socket.setNoDelay(true);
|
|
391
|
+
this.socket.on('data', (chunk) => {
|
|
392
|
+
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
393
|
+
this.processMessages();
|
|
394
|
+
});
|
|
395
|
+
this.socket.on('error', (err) => {
|
|
396
|
+
clearTimeout(timer);
|
|
397
|
+
if (!this.connected)
|
|
398
|
+
reject(err);
|
|
399
|
+
});
|
|
400
|
+
this.socket.on('close', () => {
|
|
401
|
+
this.connected = false;
|
|
402
|
+
this.subscribed = false;
|
|
403
|
+
});
|
|
404
|
+
this.socket.connect(this.opts.port, this.opts.host, async () => {
|
|
405
|
+
clearTimeout(timer);
|
|
406
|
+
this.connected = true;
|
|
407
|
+
try {
|
|
408
|
+
// AUTH if password provided
|
|
409
|
+
if (this.opts.password) {
|
|
410
|
+
await this.sendAndWait('AUTH', this.opts.password);
|
|
411
|
+
}
|
|
412
|
+
// SELECT db if non-zero
|
|
413
|
+
if (this.opts.db > 0) {
|
|
414
|
+
await this.sendAndWait('SELECT', String(this.opts.db));
|
|
415
|
+
}
|
|
416
|
+
resolve();
|
|
417
|
+
}
|
|
418
|
+
catch (err) {
|
|
419
|
+
reject(err);
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Subscribe to a channel and register a message handler.
|
|
426
|
+
* All incoming messages on any subscribed channel will be routed to the handler.
|
|
427
|
+
*/
|
|
428
|
+
async subscribe(channel, handler) {
|
|
429
|
+
this.handler = handler;
|
|
430
|
+
this.socket.write(this.encodeResp(['SUBSCRIBE', channel]));
|
|
431
|
+
this.subscribed = true;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Disconnect the subscriber.
|
|
435
|
+
*/
|
|
436
|
+
async disconnect() {
|
|
437
|
+
this.closed = true;
|
|
438
|
+
this.handler = null;
|
|
439
|
+
if (this.socket) {
|
|
440
|
+
this.socket.destroy();
|
|
441
|
+
this.socket = null;
|
|
442
|
+
}
|
|
443
|
+
this.connected = false;
|
|
444
|
+
this.subscribed = false;
|
|
445
|
+
}
|
|
446
|
+
get isConnected() {
|
|
447
|
+
return this.connected;
|
|
448
|
+
}
|
|
449
|
+
get isSubscribed() {
|
|
450
|
+
return this.subscribed;
|
|
451
|
+
}
|
|
452
|
+
// ─── Internal helpers ───────────────────────────────────────────────────────
|
|
453
|
+
/**
|
|
454
|
+
* Send a command and wait for one RESP reply (used for AUTH/SELECT before SUBSCRIBE mode).
|
|
455
|
+
*/
|
|
456
|
+
sendAndWait(...args) {
|
|
457
|
+
return new Promise((resolve, reject) => {
|
|
458
|
+
const timer = setTimeout(() => reject(new Error('Subscriber command timeout')), this.opts.commandTimeout);
|
|
459
|
+
// Temporarily override data handler to capture one reply
|
|
460
|
+
const origHandler = this.socket.listeners('data');
|
|
461
|
+
this.socket.removeAllListeners('data');
|
|
462
|
+
let buf = Buffer.alloc(0);
|
|
463
|
+
const onData = (chunk) => {
|
|
464
|
+
buf = Buffer.concat([buf, chunk]);
|
|
465
|
+
const result = this.parseOneReply(buf, 0);
|
|
466
|
+
if (result !== null) {
|
|
467
|
+
clearTimeout(timer);
|
|
468
|
+
this.socket.removeListener('data', onData);
|
|
469
|
+
// Re-attach original data handler
|
|
470
|
+
this.socket.on('data', (c) => {
|
|
471
|
+
this.buffer = Buffer.concat([this.buffer, c]);
|
|
472
|
+
this.processMessages();
|
|
473
|
+
});
|
|
474
|
+
const [reply] = result;
|
|
475
|
+
if (reply instanceof Error) {
|
|
476
|
+
reject(reply);
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
resolve();
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
this.socket.on('data', onData);
|
|
484
|
+
this.socket.write(this.encodeResp(args));
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Process incoming RESP messages from the subscription connection.
|
|
489
|
+
* In subscription mode, Redis sends arrays like: ["message", channel, data]
|
|
490
|
+
* or ["subscribe", channel, count] (subscription confirmations).
|
|
491
|
+
*/
|
|
492
|
+
processMessages() {
|
|
493
|
+
while (this.buffer.length > 0) {
|
|
494
|
+
const result = this.parseOneReply(this.buffer, 0);
|
|
495
|
+
if (result === null)
|
|
496
|
+
break; // Incomplete data
|
|
497
|
+
const [reply, consumed] = result;
|
|
498
|
+
this.buffer = this.buffer.subarray(consumed);
|
|
499
|
+
if (reply instanceof Error)
|
|
500
|
+
continue;
|
|
501
|
+
// Route "message" events to handler
|
|
502
|
+
if (Array.isArray(reply) && reply.length === 3 && reply[0] === 'message') {
|
|
503
|
+
const channel = reply[1];
|
|
504
|
+
const data = reply[2];
|
|
505
|
+
if (this.handler && !this.closed) {
|
|
506
|
+
try {
|
|
507
|
+
this.handler(channel, data);
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
// Handler errors are silently ignored
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// "subscribe" confirmations are silently consumed
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
encodeResp(args) {
|
|
518
|
+
let resp = `*${args.length}\r\n`;
|
|
519
|
+
for (const arg of args) {
|
|
520
|
+
const buf = Buffer.from(arg);
|
|
521
|
+
resp += `$${buf.length}\r\n${arg}\r\n`;
|
|
522
|
+
}
|
|
523
|
+
return resp;
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Parse a single RESP reply. Returns [value, bytes_consumed] or null if incomplete.
|
|
527
|
+
*/
|
|
528
|
+
parseOneReply(buf, offset) {
|
|
529
|
+
if (offset >= buf.length)
|
|
530
|
+
return null;
|
|
531
|
+
const type = String.fromCharCode(buf[offset]);
|
|
532
|
+
const lineEnd = this.findCRLF(buf, offset);
|
|
533
|
+
if (lineEnd === -1)
|
|
534
|
+
return null;
|
|
535
|
+
const line = buf.subarray(offset + 1, lineEnd).toString();
|
|
536
|
+
const consumed = lineEnd + 2;
|
|
537
|
+
switch (type) {
|
|
538
|
+
case '+': return [line, consumed];
|
|
539
|
+
case '-': return [new Error(line), consumed];
|
|
540
|
+
case ':': return [parseInt(line, 10), consumed];
|
|
541
|
+
case '$': {
|
|
542
|
+
const len = parseInt(line, 10);
|
|
543
|
+
if (len === -1)
|
|
544
|
+
return [null, consumed];
|
|
545
|
+
if (consumed + len + 2 > buf.length)
|
|
546
|
+
return null;
|
|
547
|
+
const data = buf.subarray(consumed, consumed + len).toString();
|
|
548
|
+
return [data, consumed + len + 2];
|
|
549
|
+
}
|
|
550
|
+
case '*': {
|
|
551
|
+
const count = parseInt(line, 10);
|
|
552
|
+
if (count === -1)
|
|
553
|
+
return [null, consumed];
|
|
554
|
+
const items = [];
|
|
555
|
+
let pos = consumed;
|
|
556
|
+
for (let i = 0; i < count; i++) {
|
|
557
|
+
const item = this.parseOneReply(buf, pos);
|
|
558
|
+
if (item === null)
|
|
559
|
+
return null;
|
|
560
|
+
const [val, itemConsumed] = item;
|
|
561
|
+
if (val instanceof Error)
|
|
562
|
+
return [val, itemConsumed];
|
|
563
|
+
items.push(val);
|
|
564
|
+
pos = itemConsumed;
|
|
565
|
+
}
|
|
566
|
+
return [items, pos];
|
|
567
|
+
}
|
|
568
|
+
default: return [new Error(`Unknown RESP type: ${type}`), consumed];
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
findCRLF(buf, start) {
|
|
572
|
+
for (let i = start; i < buf.length - 1; i++) {
|
|
573
|
+
if (buf[i] === 0x0d && buf[i + 1] === 0x0a)
|
|
574
|
+
return i;
|
|
575
|
+
}
|
|
576
|
+
return -1;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
exports.RedisSubscriber = RedisSubscriber;
|
|
341
580
|
//# sourceMappingURL=redis-client.js.map
|
package/dist/redis-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-client.js","sourceRoot":"","sources":["../src/redis-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redis-client.js","sourceRoot":"","sources":["../src/redis-client.ts"],"names":[],"mappings":"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"}
|
package/dist/redis-sync.d.ts
CHANGED
|
@@ -15,19 +15,67 @@
|
|
|
15
15
|
* multiple PayGate instances (prevents double-spend race conditions).
|
|
16
16
|
*/
|
|
17
17
|
import { RedisClient } from './redis-client';
|
|
18
|
+
import type { RedisClientOptions } from './redis-client';
|
|
18
19
|
import { KeyStore } from './store';
|
|
19
20
|
import { ApiKeyRecord, UsageEvent } from './types';
|
|
21
|
+
export interface PubSubEvent {
|
|
22
|
+
/** Event type */
|
|
23
|
+
type: 'key_updated' | 'key_revoked' | 'credits_changed' | 'key_created';
|
|
24
|
+
/** API key affected */
|
|
25
|
+
key: string;
|
|
26
|
+
/** Originating instance ID (for self-message filtering) */
|
|
27
|
+
instanceId: string;
|
|
28
|
+
/** Inline data for fast path (avoids Redis roundtrip on receiver) */
|
|
29
|
+
data?: {
|
|
30
|
+
credits?: number;
|
|
31
|
+
totalSpent?: number;
|
|
32
|
+
totalCalls?: number;
|
|
33
|
+
active?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
20
36
|
export declare class RedisSync {
|
|
21
37
|
private readonly redis;
|
|
22
38
|
private readonly store;
|
|
23
39
|
private syncInterval;
|
|
24
40
|
private readonly syncMs;
|
|
41
|
+
/** Unique instance ID for self-message filtering in pub/sub */
|
|
42
|
+
readonly instanceId: string;
|
|
43
|
+
/** Dedicated subscriber connection (Redis requires separate connection for SUBSCRIBE) */
|
|
44
|
+
private subscriber;
|
|
45
|
+
/** Redis connection options (needed to create subscriber on same host) */
|
|
46
|
+
private redisOpts;
|
|
47
|
+
/** Whether pub/sub is actively listening */
|
|
48
|
+
private pubsubActive;
|
|
49
|
+
/** Callback for external consumers of pub/sub events (testing, monitoring) */
|
|
50
|
+
onPubSubEvent?: (event: PubSubEvent) => void;
|
|
25
51
|
constructor(redis: RedisClient, store: KeyStore, syncIntervalMs?: number);
|
|
26
52
|
/**
|
|
27
|
-
* Initialize: connect to Redis
|
|
53
|
+
* Initialize: connect to Redis, load existing state, and start pub/sub listener.
|
|
28
54
|
*/
|
|
29
|
-
init(): Promise<void>;
|
|
55
|
+
init(subscriberOpts?: RedisClientOptions): Promise<void>;
|
|
30
56
|
destroy(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Start a dedicated subscriber connection for real-time cross-instance events.
|
|
59
|
+
* Messages from the same instance (matching instanceId) are ignored.
|
|
60
|
+
*/
|
|
61
|
+
private startPubSub;
|
|
62
|
+
/**
|
|
63
|
+
* Publish an event to all PayGate instances via Redis pub/sub.
|
|
64
|
+
* Fire-and-forget — errors are logged but not thrown.
|
|
65
|
+
*/
|
|
66
|
+
publishEvent(event: Omit<PubSubEvent, 'instanceId'>): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Handle an incoming pub/sub message from another instance.
|
|
69
|
+
* Self-messages (same instanceId) are ignored. Other events trigger
|
|
70
|
+
* immediate local KeyStore updates from inline data or a Redis HGETALL.
|
|
71
|
+
*/
|
|
72
|
+
private handlePubSubMessage;
|
|
73
|
+
/**
|
|
74
|
+
* Refresh a single key from Redis into the local KeyStore.
|
|
75
|
+
*/
|
|
76
|
+
private refreshSingleKey;
|
|
77
|
+
/** Whether pub/sub is actively listening */
|
|
78
|
+
get isPubSubActive(): boolean;
|
|
31
79
|
/**
|
|
32
80
|
* Save a single key record to Redis. Called after local KeyStore mutations.
|
|
33
81
|
* Fire-and-forget (errors logged, not thrown).
|
package/dist/redis-sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-sync.d.ts","sourceRoot":"","sources":["../src/redis-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-sync.d.ts","sourceRoot":"","sources":["../src/redis-sync.ts"],"names":[],"mappings":"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"}
|