paygate-mcp 2.2.0 → 2.4.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 +20 -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 +6 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53 -4
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/redis-sync.js
CHANGED
|
@@ -17,11 +17,14 @@
|
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.RedisSync = void 0;
|
|
20
|
+
const redis_client_1 = require("./redis-client");
|
|
21
|
+
const crypto_1 = require("crypto");
|
|
20
22
|
const KEY_PREFIX = 'pg:key:';
|
|
21
23
|
const KEY_SET = 'pg:keys';
|
|
22
24
|
const META_KEY = 'pg:meta';
|
|
23
25
|
const USAGE_LIST = 'pg:usage';
|
|
24
26
|
const RATE_PREFIX = 'pg:rate:';
|
|
27
|
+
const PG_CHANNEL = 'pg:events';
|
|
25
28
|
/** Lua: atomic credit deduction — check + deduct + increment in one round trip */
|
|
26
29
|
const DEDUCT_LUA = `
|
|
27
30
|
local key = KEYS[1]
|
|
@@ -78,34 +81,158 @@ class RedisSync {
|
|
|
78
81
|
store;
|
|
79
82
|
syncInterval = null;
|
|
80
83
|
syncMs;
|
|
84
|
+
/** Unique instance ID for self-message filtering in pub/sub */
|
|
85
|
+
instanceId;
|
|
86
|
+
/** Dedicated subscriber connection (Redis requires separate connection for SUBSCRIBE) */
|
|
87
|
+
subscriber = null;
|
|
88
|
+
/** Redis connection options (needed to create subscriber on same host) */
|
|
89
|
+
redisOpts = null;
|
|
90
|
+
/** Whether pub/sub is actively listening */
|
|
91
|
+
pubsubActive = false;
|
|
92
|
+
/** Callback for external consumers of pub/sub events (testing, monitoring) */
|
|
93
|
+
onPubSubEvent;
|
|
81
94
|
constructor(redis, store, syncIntervalMs = 5000) {
|
|
82
95
|
this.redis = redis;
|
|
83
96
|
this.store = store;
|
|
84
97
|
this.syncMs = syncIntervalMs;
|
|
98
|
+
this.instanceId = (0, crypto_1.randomBytes)(8).toString('hex');
|
|
85
99
|
}
|
|
86
100
|
// ─── Lifecycle ─────────────────────────────────────────────────────────────
|
|
87
101
|
/**
|
|
88
|
-
* Initialize: connect to Redis
|
|
102
|
+
* Initialize: connect to Redis, load existing state, and start pub/sub listener.
|
|
89
103
|
*/
|
|
90
|
-
async init() {
|
|
104
|
+
async init(subscriberOpts) {
|
|
91
105
|
await this.redis.connect();
|
|
92
106
|
await this.redis.ping();
|
|
93
107
|
console.log('[paygate:redis] Connected to Redis');
|
|
94
108
|
await this.loadFromRedis();
|
|
95
|
-
// Start periodic refresh
|
|
109
|
+
// Start periodic refresh (fallback for missed pub/sub messages)
|
|
96
110
|
this.syncInterval = setInterval(() => {
|
|
97
111
|
this.loadFromRedis().catch(err => {
|
|
98
112
|
console.error('[paygate:redis] Sync error:', err.message);
|
|
99
113
|
});
|
|
100
114
|
}, this.syncMs);
|
|
115
|
+
// Start pub/sub subscriber if connection options available
|
|
116
|
+
if (subscriberOpts) {
|
|
117
|
+
this.redisOpts = subscriberOpts;
|
|
118
|
+
await this.startPubSub(subscriberOpts);
|
|
119
|
+
}
|
|
101
120
|
}
|
|
102
121
|
async destroy() {
|
|
103
122
|
if (this.syncInterval) {
|
|
104
123
|
clearInterval(this.syncInterval);
|
|
105
124
|
this.syncInterval = null;
|
|
106
125
|
}
|
|
126
|
+
// Tear down pub/sub subscriber
|
|
127
|
+
if (this.subscriber) {
|
|
128
|
+
await this.subscriber.disconnect();
|
|
129
|
+
this.subscriber = null;
|
|
130
|
+
this.pubsubActive = false;
|
|
131
|
+
}
|
|
107
132
|
await this.redis.disconnect();
|
|
108
133
|
}
|
|
134
|
+
// ─── Pub/Sub ────────────────────────────────────────────────────────────────
|
|
135
|
+
/**
|
|
136
|
+
* Start a dedicated subscriber connection for real-time cross-instance events.
|
|
137
|
+
* Messages from the same instance (matching instanceId) are ignored.
|
|
138
|
+
*/
|
|
139
|
+
async startPubSub(opts) {
|
|
140
|
+
try {
|
|
141
|
+
this.subscriber = new redis_client_1.RedisSubscriber(opts);
|
|
142
|
+
await this.subscriber.connect();
|
|
143
|
+
await this.subscriber.subscribe(PG_CHANNEL, (channel, message) => {
|
|
144
|
+
this.handlePubSubMessage(message);
|
|
145
|
+
});
|
|
146
|
+
this.pubsubActive = true;
|
|
147
|
+
console.log(`[paygate:redis] Pub/sub active (instance: ${this.instanceId.slice(0, 8)})`);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
console.error(`[paygate:redis] Pub/sub setup failed: ${err.message}`);
|
|
151
|
+
// Non-fatal: periodic sync is still running as fallback
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Publish an event to all PayGate instances via Redis pub/sub.
|
|
156
|
+
* Fire-and-forget — errors are logged but not thrown.
|
|
157
|
+
*/
|
|
158
|
+
async publishEvent(event) {
|
|
159
|
+
try {
|
|
160
|
+
const fullEvent = { ...event, instanceId: this.instanceId };
|
|
161
|
+
await this.redis.publish(PG_CHANNEL, JSON.stringify(fullEvent));
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
console.error(`[paygate:redis] Publish error: ${err.message}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Handle an incoming pub/sub message from another instance.
|
|
169
|
+
* Self-messages (same instanceId) are ignored. Other events trigger
|
|
170
|
+
* immediate local KeyStore updates from inline data or a Redis HGETALL.
|
|
171
|
+
*/
|
|
172
|
+
handlePubSubMessage(message) {
|
|
173
|
+
try {
|
|
174
|
+
const event = JSON.parse(message);
|
|
175
|
+
// Ignore messages from ourselves
|
|
176
|
+
if (event.instanceId === this.instanceId)
|
|
177
|
+
return;
|
|
178
|
+
// Notify external consumers (for testing/monitoring)
|
|
179
|
+
this.onPubSubEvent?.(event);
|
|
180
|
+
const localKeys = this.store.keys;
|
|
181
|
+
switch (event.type) {
|
|
182
|
+
case 'credits_changed': {
|
|
183
|
+
// Fast path: update credits from inline data (no Redis roundtrip)
|
|
184
|
+
const record = localKeys.get(event.key);
|
|
185
|
+
if (record && event.data) {
|
|
186
|
+
if (event.data.credits !== undefined)
|
|
187
|
+
record.credits = event.data.credits;
|
|
188
|
+
if (event.data.totalSpent !== undefined)
|
|
189
|
+
record.totalSpent = event.data.totalSpent;
|
|
190
|
+
if (event.data.totalCalls !== undefined)
|
|
191
|
+
record.totalCalls = event.data.totalCalls;
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case 'key_revoked': {
|
|
196
|
+
const record = localKeys.get(event.key);
|
|
197
|
+
if (record) {
|
|
198
|
+
record.active = false;
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case 'key_updated':
|
|
203
|
+
case 'key_created': {
|
|
204
|
+
// Full refresh of this key from Redis (needs latest data)
|
|
205
|
+
this.refreshSingleKey(event.key).catch(() => { });
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Malformed message — silently ignore
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Refresh a single key from Redis into the local KeyStore.
|
|
216
|
+
*/
|
|
217
|
+
async refreshSingleKey(apiKey) {
|
|
218
|
+
try {
|
|
219
|
+
const hash = await this.redis.hgetall(KEY_PREFIX + apiKey);
|
|
220
|
+
if (!hash || !hash.key)
|
|
221
|
+
return;
|
|
222
|
+
const record = this.hashToRecord(hash);
|
|
223
|
+
if (!record)
|
|
224
|
+
return;
|
|
225
|
+
const localKeys = this.store.keys;
|
|
226
|
+
localKeys.set(record.key, record);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
console.error(`[paygate:redis] Single key refresh error: ${err.message}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/** Whether pub/sub is actively listening */
|
|
233
|
+
get isPubSubActive() {
|
|
234
|
+
return this.pubsubActive;
|
|
235
|
+
}
|
|
109
236
|
// ─── Write-through operations ──────────────────────────────────────────────
|
|
110
237
|
/**
|
|
111
238
|
* Save a single key record to Redis. Called after local KeyStore mutations.
|
|
@@ -116,6 +243,8 @@ class RedisSync {
|
|
|
116
243
|
const redisKey = KEY_PREFIX + record.key;
|
|
117
244
|
await this.redis.hset(redisKey, ...this.recordToHash(record));
|
|
118
245
|
await this.redis.command('SADD', KEY_SET, record.key);
|
|
246
|
+
// Notify other instances
|
|
247
|
+
await this.publishEvent({ type: 'key_updated', key: record.key });
|
|
119
248
|
}
|
|
120
249
|
catch (err) {
|
|
121
250
|
console.error(`[paygate:redis] Save key error: ${err.message}`);
|
|
@@ -156,6 +285,16 @@ class RedisSync {
|
|
|
156
285
|
record.totalSpent += amount;
|
|
157
286
|
record.totalCalls++;
|
|
158
287
|
record.lastUsedAt = new Date().toISOString();
|
|
288
|
+
// Notify other instances with inline data (no roundtrip needed on receivers)
|
|
289
|
+
this.publishEvent({
|
|
290
|
+
type: 'credits_changed',
|
|
291
|
+
key: apiKey,
|
|
292
|
+
data: {
|
|
293
|
+
credits: record.credits,
|
|
294
|
+
totalSpent: record.totalSpent,
|
|
295
|
+
totalCalls: record.totalCalls,
|
|
296
|
+
},
|
|
297
|
+
}).catch(() => { });
|
|
159
298
|
}
|
|
160
299
|
return true;
|
|
161
300
|
}
|
|
@@ -178,6 +317,12 @@ class RedisSync {
|
|
|
178
317
|
const record = this.store.keys.get(apiKey);
|
|
179
318
|
if (record) {
|
|
180
319
|
record.credits += amount;
|
|
320
|
+
// Notify other instances
|
|
321
|
+
this.publishEvent({
|
|
322
|
+
type: 'credits_changed',
|
|
323
|
+
key: apiKey,
|
|
324
|
+
data: { credits: record.credits },
|
|
325
|
+
}).catch(() => { });
|
|
181
326
|
}
|
|
182
327
|
return true;
|
|
183
328
|
}
|
|
@@ -195,6 +340,8 @@ class RedisSync {
|
|
|
195
340
|
const localResult = this.store.revokeKey(apiKey);
|
|
196
341
|
try {
|
|
197
342
|
await this.redis.hset(KEY_PREFIX + apiKey, 'active', '0');
|
|
343
|
+
// Notify other instances
|
|
344
|
+
await this.publishEvent({ type: 'key_revoked', key: apiKey });
|
|
198
345
|
}
|
|
199
346
|
catch (err) {
|
|
200
347
|
console.error(`[paygate:redis] Revoke error: ${err.message}`);
|
package/dist/redis-sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-sync.js","sourceRoot":"","sources":["../src/redis-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redis-sync.js","sourceRoot":"","sources":["../src/redis-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -131,6 +131,12 @@ export declare class PayGateServer {
|
|
|
131
131
|
private handleTeamAssignKey;
|
|
132
132
|
private handleTeamRemoveKey;
|
|
133
133
|
private handleTeamUsage;
|
|
134
|
+
/**
|
|
135
|
+
* Sync a key mutation to Redis. Call after any local KeyStore mutation
|
|
136
|
+
* (setAcl, setExpiry, setQuota, setTags, setIpAllowlist, setSpendingLimit).
|
|
137
|
+
* Fire-and-forget: errors logged, never thrown.
|
|
138
|
+
*/
|
|
139
|
+
private syncKeyMutation;
|
|
134
140
|
private readBody;
|
|
135
141
|
stop(): Promise<void>;
|
|
136
142
|
}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,aAAa,EAAkB,mBAAmB,EAAkB,MAAM,SAAS,CAAC;AAS7F,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;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAqD,MAAM,WAAW,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAmB,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAS,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzC,yCAAyC;AACzC,KAAK,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAY5C,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,aAAa,CAAqC;IAC1D,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAQ;IAC5C,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAQ;IAE5C,0DAA0D;IAC1D,OAAO,KAAK,OAAO,GAElB;gBAGC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAC1D,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,mBAAmB,CAAC,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -156,6 +156,8 @@ class PayGateServer {
|
|
|
156
156
|
const redisOpts = (0, redis_client_1.parseRedisUrl)(redisUrl);
|
|
157
157
|
const redisClient = new redis_client_1.RedisClient(redisOpts);
|
|
158
158
|
const sync = new redis_sync_1.RedisSync(redisClient, this.gate.store);
|
|
159
|
+
// Store opts for pub/sub subscriber connection
|
|
160
|
+
sync._subscriberOpts = redisOpts;
|
|
159
161
|
this.redisSync = sync;
|
|
160
162
|
// Wire Redis hooks: fire-and-forget async operations on every gate event
|
|
161
163
|
this.gate.onUsageEvent = (event) => {
|
|
@@ -167,9 +169,10 @@ class PayGateServer {
|
|
|
167
169
|
}
|
|
168
170
|
}
|
|
169
171
|
async start() {
|
|
170
|
-
// Initialize Redis sync before starting (loads state from Redis)
|
|
172
|
+
// Initialize Redis sync before starting (loads state from Redis + starts pub/sub)
|
|
171
173
|
if (this.redisSync) {
|
|
172
|
-
|
|
174
|
+
const subOpts = this.redisSync._subscriberOpts;
|
|
175
|
+
await this.redisSync.init(subOpts);
|
|
173
176
|
console.log('[paygate] Redis distributed state enabled');
|
|
174
177
|
}
|
|
175
178
|
await this.handler.start();
|
|
@@ -647,6 +650,11 @@ class PayGateServer {
|
|
|
647
650
|
tags: params.tags,
|
|
648
651
|
ipAllowlist: params.ipAllowlist,
|
|
649
652
|
});
|
|
653
|
+
// Sync new key to Redis (if configured)
|
|
654
|
+
if (this.redisSync) {
|
|
655
|
+
this.redisSync.saveKey(record).catch(() => { });
|
|
656
|
+
this.redisSync.publishEvent({ type: 'key_created', key: record.key }).catch(() => { });
|
|
657
|
+
}
|
|
650
658
|
this.audit.log('key.created', 'admin', `Key created: ${name}`, {
|
|
651
659
|
keyMasked: (0, audit_1.maskKeyForAudit)(record.key),
|
|
652
660
|
name,
|
|
@@ -708,7 +716,14 @@ class PayGateServer {
|
|
|
708
716
|
res.end(JSON.stringify({ error: 'Credits must be a positive integer' }));
|
|
709
717
|
return;
|
|
710
718
|
}
|
|
711
|
-
|
|
719
|
+
// Use Redis atomic topup when available, fall back to local store
|
|
720
|
+
let success;
|
|
721
|
+
if (this.redisSync) {
|
|
722
|
+
success = await this.redisSync.atomicTopup(params.key, credits);
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
success = this.gate.store.addCredits(params.key, credits);
|
|
726
|
+
}
|
|
712
727
|
if (!success) {
|
|
713
728
|
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
714
729
|
res.end(JSON.stringify({ error: 'Key not found or inactive' }));
|
|
@@ -750,7 +765,14 @@ class PayGateServer {
|
|
|
750
765
|
res.end(JSON.stringify({ error: 'Missing key' }));
|
|
751
766
|
return;
|
|
752
767
|
}
|
|
753
|
-
|
|
768
|
+
// Use Redis-backed revoke when available (broadcasts to other instances)
|
|
769
|
+
let success;
|
|
770
|
+
if (this.redisSync) {
|
|
771
|
+
success = await this.redisSync.revokeKey(params.key);
|
|
772
|
+
}
|
|
773
|
+
else {
|
|
774
|
+
success = this.gate.store.revokeKey(params.key);
|
|
775
|
+
}
|
|
754
776
|
if (!success) {
|
|
755
777
|
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
756
778
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
@@ -795,6 +817,12 @@ class PayGateServer {
|
|
|
795
817
|
res.end(JSON.stringify({ error: 'Key not found or inactive' }));
|
|
796
818
|
return;
|
|
797
819
|
}
|
|
820
|
+
// Sync rotated key to Redis (save new key + revoke old)
|
|
821
|
+
if (this.redisSync) {
|
|
822
|
+
this.redisSync.saveKey(rotated).catch(() => { });
|
|
823
|
+
this.redisSync.publishEvent({ type: 'key_created', key: rotated.key }).catch(() => { });
|
|
824
|
+
this.redisSync.publishEvent({ type: 'key_revoked', key: params.key }).catch(() => { });
|
|
825
|
+
}
|
|
798
826
|
this.audit.log('key.rotated', 'admin', `Key rotated`, {
|
|
799
827
|
oldKeyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
800
828
|
newKeyMasked: (0, audit_1.maskKeyForAudit)(rotated.key),
|
|
@@ -841,6 +869,7 @@ class PayGateServer {
|
|
|
841
869
|
res.end(JSON.stringify({ error: 'Key not found or inactive' }));
|
|
842
870
|
return;
|
|
843
871
|
}
|
|
872
|
+
this.syncKeyMutation(params.key);
|
|
844
873
|
const record = this.gate.store.getKey(params.key);
|
|
845
874
|
this.audit.log('key.acl_updated', 'admin', `ACL updated`, {
|
|
846
875
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
@@ -892,6 +921,7 @@ class PayGateServer {
|
|
|
892
921
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
893
922
|
return;
|
|
894
923
|
}
|
|
924
|
+
this.syncKeyMutation(params.key);
|
|
895
925
|
const record = this.gate.store.getKeyRaw(params.key);
|
|
896
926
|
this.audit.log('key.expiry_updated', 'admin', expiresAt ? `Key expiry set to ${expiresAt}` : 'Key expiry removed', {
|
|
897
927
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
@@ -934,6 +964,7 @@ class PayGateServer {
|
|
|
934
964
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
935
965
|
return;
|
|
936
966
|
}
|
|
967
|
+
this.syncKeyMutation(params.key);
|
|
937
968
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
938
969
|
res.end(JSON.stringify({ message: 'Quota removed (using global defaults)' }));
|
|
939
970
|
return;
|
|
@@ -950,6 +981,7 @@ class PayGateServer {
|
|
|
950
981
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
951
982
|
return;
|
|
952
983
|
}
|
|
984
|
+
this.syncKeyMutation(params.key);
|
|
953
985
|
this.audit.log('key.quota_updated', 'admin', `Quota set`, {
|
|
954
986
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
955
987
|
quota,
|
|
@@ -992,6 +1024,7 @@ class PayGateServer {
|
|
|
992
1024
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
993
1025
|
return;
|
|
994
1026
|
}
|
|
1027
|
+
this.syncKeyMutation(params.key);
|
|
995
1028
|
const record = this.gate.store.getKey(params.key);
|
|
996
1029
|
this.audit.log('key.tags_updated', 'admin', `Tags updated`, {
|
|
997
1030
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
@@ -1038,6 +1071,7 @@ class PayGateServer {
|
|
|
1038
1071
|
res.end(JSON.stringify({ error: 'Key not found' }));
|
|
1039
1072
|
return;
|
|
1040
1073
|
}
|
|
1074
|
+
this.syncKeyMutation(params.key);
|
|
1041
1075
|
const record = this.gate.store.getKey(params.key);
|
|
1042
1076
|
this.audit.log('key.ip_updated', 'admin', `IP allowlist updated`, {
|
|
1043
1077
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
@@ -1158,6 +1192,7 @@ class PayGateServer {
|
|
|
1158
1192
|
const limit = Math.max(0, Math.floor(Number(params.spendingLimit) || 0));
|
|
1159
1193
|
record.spendingLimit = limit;
|
|
1160
1194
|
this.gate.store.save();
|
|
1195
|
+
this.syncKeyMutation(params.key);
|
|
1161
1196
|
this.audit.log('key.limit_updated', 'admin', limit > 0 ? `Spending limit set to ${limit}` : 'Spending limit removed', {
|
|
1162
1197
|
keyMasked: (0, audit_1.maskKeyForAudit)(params.key),
|
|
1163
1198
|
spendingLimit: limit,
|
|
@@ -1938,6 +1973,20 @@ class PayGateServer {
|
|
|
1938
1973
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
1939
1974
|
res.end(JSON.stringify(summary));
|
|
1940
1975
|
}
|
|
1976
|
+
/**
|
|
1977
|
+
* Sync a key mutation to Redis. Call after any local KeyStore mutation
|
|
1978
|
+
* (setAcl, setExpiry, setQuota, setTags, setIpAllowlist, setSpendingLimit).
|
|
1979
|
+
* Fire-and-forget: errors logged, never thrown.
|
|
1980
|
+
*/
|
|
1981
|
+
syncKeyMutation(apiKey) {
|
|
1982
|
+
if (!this.redisSync)
|
|
1983
|
+
return;
|
|
1984
|
+
const record = this.gate.store.getKey(apiKey);
|
|
1985
|
+
if (record) {
|
|
1986
|
+
// Save the full record to Redis and notify other instances
|
|
1987
|
+
this.redisSync.saveKey(record).catch(() => { });
|
|
1988
|
+
}
|
|
1989
|
+
}
|
|
1941
1990
|
readBody(req) {
|
|
1942
1991
|
return new Promise((resolve, reject) => {
|
|
1943
1992
|
let body = '';
|