paygate-mcp 10.19.0 → 10.21.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.
Files changed (37) hide show
  1. package/dist/credit-expiration.d.ts +91 -0
  2. package/dist/credit-expiration.d.ts.map +1 -0
  3. package/dist/credit-expiration.js +215 -0
  4. package/dist/credit-expiration.js.map +1 -0
  5. package/dist/credit-transfer.d.ts +94 -0
  6. package/dist/credit-transfer.d.ts.map +1 -0
  7. package/dist/credit-transfer.js +170 -0
  8. package/dist/credit-transfer.js.map +1 -0
  9. package/dist/index.d.ts +16 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +19 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/key-rotation-policy.d.ts +100 -0
  14. package/dist/key-rotation-policy.d.ts.map +1 -0
  15. package/dist/key-rotation-policy.js +221 -0
  16. package/dist/key-rotation-policy.js.map +1 -0
  17. package/dist/request-buffer.d.ts +92 -0
  18. package/dist/request-buffer.d.ts.map +1 -0
  19. package/dist/request-buffer.js +173 -0
  20. package/dist/request-buffer.js.map +1 -0
  21. package/dist/token-bucket.d.ts +80 -0
  22. package/dist/token-bucket.d.ts.map +1 -0
  23. package/dist/token-bucket.js +173 -0
  24. package/dist/token-bucket.js.map +1 -0
  25. package/dist/usage-anomaly.d.ts +99 -0
  26. package/dist/usage-anomaly.d.ts.map +1 -0
  27. package/dist/usage-anomaly.js +192 -0
  28. package/dist/usage-anomaly.js.map +1 -0
  29. package/dist/webhook-delivery-log.d.ts +96 -0
  30. package/dist/webhook-delivery-log.d.ts.map +1 -0
  31. package/dist/webhook-delivery-log.js +169 -0
  32. package/dist/webhook-delivery-log.js.map +1 -0
  33. package/dist/webhook-filter-expr.d.ts +99 -0
  34. package/dist/webhook-filter-expr.d.ts.map +1 -0
  35. package/dist/webhook-filter-expr.js +199 -0
  36. package/dist/webhook-filter-expr.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * CreditExpirationManager — Time-based credit expiration with FIFO consumption.
3
+ *
4
+ * Grant credits with expiration dates, consume oldest credits first,
5
+ * and track expiring-soon grants for proactive notifications.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const mgr = new CreditExpirationManager();
10
+ *
11
+ * mgr.grant({ key: 'k1', amount: 100, expiresInMs: 86400000 }); // 24h
12
+ * mgr.grant({ key: 'k1', amount: 50, expiresInMs: 172800000 }); // 48h
13
+ *
14
+ * const result = mgr.consume('k1', 120);
15
+ * // Uses all 100 from first grant + 20 from second
16
+ * // result.consumed === 120, result.remaining === 30
17
+ * ```
18
+ */
19
+ export interface CreditGrant {
20
+ id: string;
21
+ key: string;
22
+ originalAmount: number;
23
+ remainingAmount: number;
24
+ grantedAt: number;
25
+ expiresAt: number;
26
+ expired: boolean;
27
+ source: string;
28
+ }
29
+ export interface CreditGrantParams {
30
+ key: string;
31
+ amount: number;
32
+ expiresInMs: number;
33
+ source?: string;
34
+ }
35
+ export interface CreditConsumeResult {
36
+ key: string;
37
+ requested: number;
38
+ consumed: number;
39
+ remaining: number;
40
+ grantsUsed: number;
41
+ timestamp: number;
42
+ }
43
+ export interface ExpiringGrant {
44
+ id: string;
45
+ key: string;
46
+ remainingAmount: number;
47
+ expiresAt: number;
48
+ expiresInMs: number;
49
+ }
50
+ export interface CreditExpirationConfig {
51
+ /** Max grants per key. Default 100. */
52
+ maxGrantsPerKey?: number;
53
+ /** Max tracked keys. Default 10000. */
54
+ maxKeys?: number;
55
+ }
56
+ export interface CreditExpirationStats {
57
+ trackedKeys: number;
58
+ totalGrants: number;
59
+ activeGrants: number;
60
+ expiredGrants: number;
61
+ totalGranted: number;
62
+ totalConsumed: number;
63
+ totalExpired: number;
64
+ }
65
+ export declare class CreditExpirationManager {
66
+ private grants;
67
+ private nextId;
68
+ private maxGrantsPerKey;
69
+ private maxKeys;
70
+ private totalGranted;
71
+ private totalConsumed;
72
+ private totalExpiredAmount;
73
+ constructor(config?: CreditExpirationConfig);
74
+ /** Grant credits with expiration. */
75
+ grant(params: CreditGrantParams): CreditGrant;
76
+ /** Consume credits from a key (FIFO — oldest grants first). */
77
+ consume(key: string, amount: number): CreditConsumeResult;
78
+ /** Get available balance for a key. */
79
+ getBalance(key: string): number;
80
+ /** Get active grants for a key. */
81
+ getGrants(key: string): CreditGrant[];
82
+ /** Get grants expiring within a time window. */
83
+ getExpiringSoon(withinMs: number): ExpiringGrant[];
84
+ /** Force expire all grants for a key. */
85
+ expireAll(key: string): number;
86
+ getStats(): CreditExpirationStats;
87
+ /** Clear all data. */
88
+ destroy(): void;
89
+ private pruneExpired;
90
+ }
91
+ //# sourceMappingURL=credit-expiration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-expiration.d.ts","sourceRoot":"","sources":["../src/credit-expiration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,MAAM,GAAE,sBAA2B;IAO/C,qCAAqC;IACrC,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW;IAyC7C,+DAA+D;IAC/D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB;IA+CzD,uCAAuC;IACvC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAS/B,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,EAAE;IAKrC,gDAAgD;IAChD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAsBlD,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAkB9B,QAAQ,IAAI,qBAAqB;IA2BjC,sBAAsB;IACtB,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,YAAY;CAarB"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * CreditExpirationManager — Time-based credit expiration with FIFO consumption.
4
+ *
5
+ * Grant credits with expiration dates, consume oldest credits first,
6
+ * and track expiring-soon grants for proactive notifications.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const mgr = new CreditExpirationManager();
11
+ *
12
+ * mgr.grant({ key: 'k1', amount: 100, expiresInMs: 86400000 }); // 24h
13
+ * mgr.grant({ key: 'k1', amount: 50, expiresInMs: 172800000 }); // 48h
14
+ *
15
+ * const result = mgr.consume('k1', 120);
16
+ * // Uses all 100 from first grant + 20 from second
17
+ * // result.consumed === 120, result.remaining === 30
18
+ * ```
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CreditExpirationManager = void 0;
22
+ // ── Implementation ───────────────────────────────────────────────────
23
+ class CreditExpirationManager {
24
+ grants = new Map();
25
+ nextId = 1;
26
+ maxGrantsPerKey;
27
+ maxKeys;
28
+ // Stats
29
+ totalGranted = 0;
30
+ totalConsumed = 0;
31
+ totalExpiredAmount = 0;
32
+ constructor(config = {}) {
33
+ this.maxGrantsPerKey = config.maxGrantsPerKey ?? 100;
34
+ this.maxKeys = config.maxKeys ?? 10_000;
35
+ }
36
+ // ── Grant Management ────────────────────────────────────────────
37
+ /** Grant credits with expiration. */
38
+ grant(params) {
39
+ if (params.amount <= 0)
40
+ throw new Error('Amount must be positive');
41
+ if (params.expiresInMs <= 0)
42
+ throw new Error('Expiration must be positive');
43
+ let keyGrants = this.grants.get(params.key);
44
+ if (!keyGrants) {
45
+ if (this.grants.size >= this.maxKeys) {
46
+ throw new Error(`Maximum ${this.maxKeys} keys reached`);
47
+ }
48
+ keyGrants = [];
49
+ this.grants.set(params.key, keyGrants);
50
+ }
51
+ if (keyGrants.length >= this.maxGrantsPerKey) {
52
+ // Remove expired grants first
53
+ this.pruneExpired(params.key);
54
+ keyGrants = this.grants.get(params.key) ?? [];
55
+ if (keyGrants.length >= this.maxGrantsPerKey) {
56
+ throw new Error(`Maximum ${this.maxGrantsPerKey} grants per key reached`);
57
+ }
58
+ }
59
+ const now = Date.now();
60
+ const grant = {
61
+ id: `cg_${this.nextId++}`,
62
+ key: params.key,
63
+ originalAmount: params.amount,
64
+ remainingAmount: params.amount,
65
+ grantedAt: now,
66
+ expiresAt: now + params.expiresInMs,
67
+ expired: false,
68
+ source: params.source ?? '',
69
+ };
70
+ keyGrants.push(grant);
71
+ this.totalGranted += params.amount;
72
+ return grant;
73
+ }
74
+ // ── Consumption ─────────────────────────────────────────────────
75
+ /** Consume credits from a key (FIFO — oldest grants first). */
76
+ consume(key, amount) {
77
+ if (amount <= 0)
78
+ throw new Error('Amount must be positive');
79
+ this.pruneExpired(key);
80
+ const keyGrants = this.grants.get(key);
81
+ if (!keyGrants) {
82
+ return { key, requested: amount, consumed: 0, remaining: 0, grantsUsed: 0, timestamp: Date.now() };
83
+ }
84
+ // Sort by expiration (earliest first = FIFO)
85
+ const active = keyGrants
86
+ .filter(g => !g.expired && g.remainingAmount > 0)
87
+ .sort((a, b) => a.expiresAt - b.expiresAt);
88
+ let consumed = 0;
89
+ let grantsUsed = 0;
90
+ let remaining = amount;
91
+ for (const grant of active) {
92
+ if (remaining <= 0)
93
+ break;
94
+ const take = Math.min(remaining, grant.remainingAmount);
95
+ grant.remainingAmount -= take;
96
+ consumed += take;
97
+ remaining -= take;
98
+ grantsUsed++;
99
+ }
100
+ this.totalConsumed += consumed;
101
+ // Calculate total remaining balance
102
+ const totalRemaining = keyGrants
103
+ .filter(g => !g.expired)
104
+ .reduce((sum, g) => sum + g.remainingAmount, 0);
105
+ return {
106
+ key,
107
+ requested: amount,
108
+ consumed,
109
+ remaining: totalRemaining,
110
+ grantsUsed,
111
+ timestamp: Date.now(),
112
+ };
113
+ }
114
+ // ── Query ───────────────────────────────────────────────────────
115
+ /** Get available balance for a key. */
116
+ getBalance(key) {
117
+ this.pruneExpired(key);
118
+ const keyGrants = this.grants.get(key);
119
+ if (!keyGrants)
120
+ return 0;
121
+ return keyGrants
122
+ .filter(g => !g.expired)
123
+ .reduce((sum, g) => sum + g.remainingAmount, 0);
124
+ }
125
+ /** Get active grants for a key. */
126
+ getGrants(key) {
127
+ this.pruneExpired(key);
128
+ return (this.grants.get(key) ?? []).filter(g => !g.expired && g.remainingAmount > 0);
129
+ }
130
+ /** Get grants expiring within a time window. */
131
+ getExpiringSoon(withinMs) {
132
+ const now = Date.now();
133
+ const deadline = now + withinMs;
134
+ const results = [];
135
+ for (const keyGrants of this.grants.values()) {
136
+ for (const g of keyGrants) {
137
+ if (!g.expired && g.remainingAmount > 0 && g.expiresAt <= deadline && g.expiresAt > now) {
138
+ results.push({
139
+ id: g.id,
140
+ key: g.key,
141
+ remainingAmount: g.remainingAmount,
142
+ expiresAt: g.expiresAt,
143
+ expiresInMs: g.expiresAt - now,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ return results.sort((a, b) => a.expiresAt - b.expiresAt);
149
+ }
150
+ /** Force expire all grants for a key. */
151
+ expireAll(key) {
152
+ const keyGrants = this.grants.get(key);
153
+ if (!keyGrants)
154
+ return 0;
155
+ let expired = 0;
156
+ for (const g of keyGrants) {
157
+ if (!g.expired && g.remainingAmount > 0) {
158
+ this.totalExpiredAmount += g.remainingAmount;
159
+ g.remainingAmount = 0;
160
+ g.expired = true;
161
+ expired++;
162
+ }
163
+ }
164
+ return expired;
165
+ }
166
+ // ── Stats ──────────────────────────────────────────────────────
167
+ getStats() {
168
+ let totalGrants = 0;
169
+ let activeGrants = 0;
170
+ let expiredGrants = 0;
171
+ for (const keyGrants of this.grants.values()) {
172
+ for (const g of keyGrants) {
173
+ totalGrants++;
174
+ if (g.expired || g.expiresAt <= Date.now()) {
175
+ expiredGrants++;
176
+ }
177
+ else if (g.remainingAmount > 0) {
178
+ activeGrants++;
179
+ }
180
+ }
181
+ }
182
+ return {
183
+ trackedKeys: this.grants.size,
184
+ totalGrants,
185
+ activeGrants,
186
+ expiredGrants,
187
+ totalGranted: this.totalGranted,
188
+ totalConsumed: this.totalConsumed,
189
+ totalExpired: this.totalExpiredAmount,
190
+ };
191
+ }
192
+ /** Clear all data. */
193
+ destroy() {
194
+ this.grants.clear();
195
+ this.totalGranted = 0;
196
+ this.totalConsumed = 0;
197
+ this.totalExpiredAmount = 0;
198
+ }
199
+ // ── Private ───────────────────────────────────────────────────
200
+ pruneExpired(key) {
201
+ const keyGrants = this.grants.get(key);
202
+ if (!keyGrants)
203
+ return;
204
+ const now = Date.now();
205
+ for (const g of keyGrants) {
206
+ if (!g.expired && g.expiresAt <= now) {
207
+ this.totalExpiredAmount += g.remainingAmount;
208
+ g.remainingAmount = 0;
209
+ g.expired = true;
210
+ }
211
+ }
212
+ }
213
+ }
214
+ exports.CreditExpirationManager = CreditExpirationManager;
215
+ //# sourceMappingURL=credit-expiration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-expiration.js","sourceRoot":"","sources":["../src/credit-expiration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * CreditTransferManager — Transfer credits between API keys with audit trail.
3
+ *
4
+ * Enable credit transfers between keys, enforce balance checks,
5
+ * and maintain a complete audit trail of all transfers.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const mgr = new CreditTransferManager();
10
+ *
11
+ * mgr.setBalance('key_alice', 1000);
12
+ * mgr.setBalance('key_bob', 200);
13
+ *
14
+ * const result = mgr.transfer({
15
+ * fromKey: 'key_alice',
16
+ * toKey: 'key_bob',
17
+ * amount: 100,
18
+ * reason: 'Team rebalance',
19
+ * });
20
+ * // Alice: 900, Bob: 300
21
+ * ```
22
+ */
23
+ export interface TransferRecord {
24
+ id: string;
25
+ fromKey: string;
26
+ toKey: string;
27
+ amount: number;
28
+ reason: string;
29
+ fromBalanceBefore: number;
30
+ fromBalanceAfter: number;
31
+ toBalanceBefore: number;
32
+ toBalanceAfter: number;
33
+ createdAt: number;
34
+ reversedAt: number | null;
35
+ reversalId: string | null;
36
+ }
37
+ export interface TransferParams {
38
+ fromKey: string;
39
+ toKey: string;
40
+ amount: number;
41
+ reason?: string;
42
+ }
43
+ export interface CreditTransferConfig {
44
+ /** Max transfer history. Default 10000. */
45
+ maxHistory?: number;
46
+ /** Minimum transfer amount. Default 1. */
47
+ minAmount?: number;
48
+ /** Maximum single transfer amount. Default Infinity. */
49
+ maxAmount?: number;
50
+ /** Allow overdraft (negative balance). Default false. */
51
+ allowOverdraft?: boolean;
52
+ }
53
+ export interface CreditTransferStats {
54
+ trackedKeys: number;
55
+ totalTransfers: number;
56
+ totalReversals: number;
57
+ totalAmountTransferred: number;
58
+ totalBalance: number;
59
+ }
60
+ export declare class CreditTransferManager {
61
+ private balances;
62
+ private history;
63
+ private nextId;
64
+ private maxHistory;
65
+ private minAmount;
66
+ private maxAmount;
67
+ private allowOverdraft;
68
+ constructor(config?: CreditTransferConfig);
69
+ /** Set a key's balance. */
70
+ setBalance(key: string, balance: number): void;
71
+ /** Get a key's balance. */
72
+ getBalance(key: string): number | null;
73
+ /** Add credits to a key. */
74
+ addCredits(key: string, amount: number): number;
75
+ /** Transfer credits from one key to another. */
76
+ transfer(params: TransferParams): TransferRecord;
77
+ /** Reverse a transfer. */
78
+ reverse(transferId: string, reason?: string): TransferRecord;
79
+ /** Get transfer history for a key. */
80
+ getKeyHistory(key: string, limit?: number): TransferRecord[];
81
+ /** Get all transfer history. */
82
+ getHistory(limit?: number): TransferRecord[];
83
+ /** Get a transfer by ID. */
84
+ getTransfer(id: string): TransferRecord | null;
85
+ /** List all tracked keys with balances. */
86
+ listBalances(): {
87
+ key: string;
88
+ balance: number;
89
+ }[];
90
+ getStats(): CreditTransferStats;
91
+ /** Clear all data. */
92
+ destroy(): void;
93
+ }
94
+ //# sourceMappingURL=credit-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-transfer.d.ts","sourceRoot":"","sources":["../src/credit-transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,MAAM,CAAK;IAEnB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAU;gBAEpB,MAAM,GAAE,oBAAyB;IAS7C,2BAA2B;IAC3B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9C,2BAA2B;IAC3B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC,4BAA4B;IAC5B,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAU/C,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc;IA6ChD,0BAA0B;IAC1B,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc;IAmB5D,sCAAsC;IACtC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,cAAc,EAAE;IAMxD,gCAAgC;IAChC,UAAU,CAAC,KAAK,SAAK,GAAG,cAAc,EAAE;IAIxC,4BAA4B;IAC5B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI9C,2CAA2C;IAC3C,YAAY,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE;IAQlD,QAAQ,IAAI,mBAAmB;IAoB/B,sBAAsB;IACtB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /**
3
+ * CreditTransferManager — Transfer credits between API keys with audit trail.
4
+ *
5
+ * Enable credit transfers between keys, enforce balance checks,
6
+ * and maintain a complete audit trail of all transfers.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const mgr = new CreditTransferManager();
11
+ *
12
+ * mgr.setBalance('key_alice', 1000);
13
+ * mgr.setBalance('key_bob', 200);
14
+ *
15
+ * const result = mgr.transfer({
16
+ * fromKey: 'key_alice',
17
+ * toKey: 'key_bob',
18
+ * amount: 100,
19
+ * reason: 'Team rebalance',
20
+ * });
21
+ * // Alice: 900, Bob: 300
22
+ * ```
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.CreditTransferManager = void 0;
26
+ // ── Implementation ───────────────────────────────────────────────────
27
+ class CreditTransferManager {
28
+ balances = new Map();
29
+ history = [];
30
+ nextId = 1;
31
+ maxHistory;
32
+ minAmount;
33
+ maxAmount;
34
+ allowOverdraft;
35
+ constructor(config = {}) {
36
+ this.maxHistory = config.maxHistory ?? 10_000;
37
+ this.minAmount = config.minAmount ?? 1;
38
+ this.maxAmount = config.maxAmount ?? Infinity;
39
+ this.allowOverdraft = config.allowOverdraft ?? false;
40
+ }
41
+ // ── Balance Management ─────────────────────────────────────────
42
+ /** Set a key's balance. */
43
+ setBalance(key, balance) {
44
+ this.balances.set(key, balance);
45
+ }
46
+ /** Get a key's balance. */
47
+ getBalance(key) {
48
+ return this.balances.get(key) ?? null;
49
+ }
50
+ /** Add credits to a key. */
51
+ addCredits(key, amount) {
52
+ if (amount <= 0)
53
+ throw new Error('Amount must be positive');
54
+ const current = this.balances.get(key) ?? 0;
55
+ const newBalance = current + amount;
56
+ this.balances.set(key, newBalance);
57
+ return newBalance;
58
+ }
59
+ // ── Transfer ───────────────────────────────────────────────────
60
+ /** Transfer credits from one key to another. */
61
+ transfer(params) {
62
+ if (!params.fromKey)
63
+ throw new Error('fromKey is required');
64
+ if (!params.toKey)
65
+ throw new Error('toKey is required');
66
+ if (params.fromKey === params.toKey)
67
+ throw new Error('Cannot transfer to same key');
68
+ if (params.amount < this.minAmount)
69
+ throw new Error(`Amount must be at least ${this.minAmount}`);
70
+ if (params.amount > this.maxAmount)
71
+ throw new Error(`Amount cannot exceed ${this.maxAmount}`);
72
+ const fromBalance = this.balances.get(params.fromKey);
73
+ if (fromBalance === undefined)
74
+ throw new Error(`Key '${params.fromKey}' not found`);
75
+ const toBalance = this.balances.get(params.toKey);
76
+ if (toBalance === undefined)
77
+ throw new Error(`Key '${params.toKey}' not found`);
78
+ if (!this.allowOverdraft && fromBalance < params.amount) {
79
+ throw new Error(`Insufficient balance: ${fromBalance} < ${params.amount}`);
80
+ }
81
+ const newFromBalance = fromBalance - params.amount;
82
+ const newToBalance = toBalance + params.amount;
83
+ this.balances.set(params.fromKey, newFromBalance);
84
+ this.balances.set(params.toKey, newToBalance);
85
+ const record = {
86
+ id: `xfer_${this.nextId++}`,
87
+ fromKey: params.fromKey,
88
+ toKey: params.toKey,
89
+ amount: params.amount,
90
+ reason: params.reason ?? '',
91
+ fromBalanceBefore: fromBalance,
92
+ fromBalanceAfter: newFromBalance,
93
+ toBalanceBefore: toBalance,
94
+ toBalanceAfter: newToBalance,
95
+ createdAt: Date.now(),
96
+ reversedAt: null,
97
+ reversalId: null,
98
+ };
99
+ this.history.push(record);
100
+ if (this.history.length > this.maxHistory) {
101
+ this.history.splice(0, this.history.length - this.maxHistory);
102
+ }
103
+ return record;
104
+ }
105
+ /** Reverse a transfer. */
106
+ reverse(transferId, reason) {
107
+ const original = this.history.find(r => r.id === transferId);
108
+ if (!original)
109
+ throw new Error(`Transfer '${transferId}' not found`);
110
+ if (original.reversedAt)
111
+ throw new Error(`Transfer '${transferId}' already reversed`);
112
+ const reversal = this.transfer({
113
+ fromKey: original.toKey,
114
+ toKey: original.fromKey,
115
+ amount: original.amount,
116
+ reason: reason ?? `Reversal of ${transferId}`,
117
+ });
118
+ original.reversedAt = Date.now();
119
+ original.reversalId = reversal.id;
120
+ return reversal;
121
+ }
122
+ // ── Query ──────────────────────────────────────────────────────
123
+ /** Get transfer history for a key. */
124
+ getKeyHistory(key, limit = 50) {
125
+ return this.history
126
+ .filter(r => r.fromKey === key || r.toKey === key)
127
+ .slice(-limit);
128
+ }
129
+ /** Get all transfer history. */
130
+ getHistory(limit = 50) {
131
+ return this.history.slice(-limit);
132
+ }
133
+ /** Get a transfer by ID. */
134
+ getTransfer(id) {
135
+ return this.history.find(r => r.id === id) ?? null;
136
+ }
137
+ /** List all tracked keys with balances. */
138
+ listBalances() {
139
+ return [...this.balances.entries()]
140
+ .map(([key, balance]) => ({ key, balance }))
141
+ .sort((a, b) => b.balance - a.balance);
142
+ }
143
+ // ── Stats ──────────────────────────────────────────────────────
144
+ getStats() {
145
+ let totalAmount = 0;
146
+ let totalBalance = 0;
147
+ let reversals = 0;
148
+ for (const r of this.history) {
149
+ totalAmount += r.amount;
150
+ if (r.reversedAt)
151
+ reversals++;
152
+ }
153
+ for (const b of this.balances.values())
154
+ totalBalance += b;
155
+ return {
156
+ trackedKeys: this.balances.size,
157
+ totalTransfers: this.history.length,
158
+ totalReversals: reversals,
159
+ totalAmountTransferred: totalAmount,
160
+ totalBalance,
161
+ };
162
+ }
163
+ /** Clear all data. */
164
+ destroy() {
165
+ this.balances.clear();
166
+ this.history = [];
167
+ }
168
+ }
169
+ exports.CreditTransferManager = CreditTransferManager;
170
+ //# sourceMappingURL=credit-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-transfer.js","sourceRoot":"","sources":["../src/credit-transfer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -247,6 +247,22 @@ export { ErrorClassifier } from './error-classifier';
247
247
  export type { ErrorSeverity, ErrorPattern, PatternRegistration, ClassifyResult, ErrorFrequency, ErrorClassifierConfig, ErrorClassifierStats } from './error-classifier';
248
248
  export { GracePeriodManager } from './grace-period';
249
249
  export type { GracePolicy, PolicyDefineParams, GracePeriod, GraceCheckResult, GracePeriodConfig, GracePeriodStats } from './grace-period';
250
+ export { RequestBufferQueue } from './request-buffer';
251
+ export type { BufferedRequest, BufferEnqueueParams, BufferStatus, RequestBufferConfig, RequestBufferStats } from './request-buffer';
252
+ export { CreditTransferManager } from './credit-transfer';
253
+ export type { TransferRecord, TransferParams, CreditTransferConfig, CreditTransferStats } from './credit-transfer';
254
+ export { UsageAnomalyDetector } from './usage-anomaly';
255
+ export type { UsageDataPoint as AnomalyUsageDataPoint, AnomalyResult, AnomalyEvent as UsageAnomalyEvent, UsageAnomalyConfig, UsageAnomalyStats } from './usage-anomaly';
256
+ export { WebhookFilterExpression } from './webhook-filter-expr';
257
+ export type { FilterOp, FilterCondition, FilterMatchMode, FilterRule, FilterRuleCreateParams, FilterEvalResult, WebhookFilterConfig, WebhookFilterStats } from './webhook-filter-expr';
258
+ export { RateLimitTokenBucket } from './token-bucket';
259
+ export type { TokenBucketConfig, TokenConsumeResult, TokenBucketState, TokenBucketStats } from './token-bucket';
260
+ export { WebhookDeliveryLog } from './webhook-delivery-log';
261
+ export type { DeliveryStatus, DeliveryEntry, DeliveryRecordParams, DeliveryRetryParams, DeliveryQuery, DeliveryLogConfig, DeliveryLogStats } from './webhook-delivery-log';
262
+ export { CreditExpirationManager } from './credit-expiration';
263
+ export type { CreditGrant as ExpirationCreditGrant, CreditGrantParams as ExpirationGrantParams, CreditConsumeResult, ExpiringGrant, CreditExpirationConfig, CreditExpirationStats } from './credit-expiration';
264
+ export { APIKeyRotationPolicy } from './key-rotation-policy';
265
+ export type { RotationPolicy as RotationPolicyDef, RotationPolicyParams, KeyRotationStatus, ManagedKey, RotationEvent as PolicyRotationEvent, KeyRotationPolicyConfig, KeyRotationPolicyStats } from './key-rotation-policy';
250
266
  export type { PayGateConfig, JsonRpcRequest, JsonRpcResponse, JsonRpcError, ToolCallParams, ToolInfo, ToolPricing, ServerBackendConfig, ApiKeyRecord, UsageEvent, UsageSummary, GateDecision, QuotaConfig, SpendCapConfig, X402Config, BatchToolCall, BatchGateResult, WebhookFilterRule, KeyListQuery, KeyListResult, } from './types';
251
267
  export { DEFAULT_CONFIG } from './types';
252
268
  //# sourceMappingURL=index.d.ts.map