paygate-mcp 8.63.0 → 8.65.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 +191 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +55 -0
- package/dist/server.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
|
|
7
7
|
Monetize any MCP server with one command. Add API key auth, per-tool pricing, rate limiting, and usage metering to any Model Context Protocol server. Zero dependencies. Zero config. Zero code changes.
|
|
8
8
|
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
- [Quick Start](#quick-start)
|
|
12
|
+
- [What It Does](#what-it-does)
|
|
13
|
+
- [Usage](#usage) — Local stdio, remote HTTP, multi-server, client SDK
|
|
14
|
+
- [API Reference](#api-reference) — All 150+ endpoints
|
|
15
|
+
- [CLI Options](#cli-options)
|
|
16
|
+
- [Deployment](#deployment) — Docker, docker-compose, systemd, PM2
|
|
17
|
+
- [Error Codes](#error-codes) — Complete error code reference
|
|
18
|
+
- [Feature Reference](#persistent-storage) — Detailed docs for every feature
|
|
19
|
+
- [Storage & Billing](#persistent-storage) · [Stripe](#stripe-integration) · [ACL](#per-tool-acl-access-control) · [Rate Limits](#per-tool-rate-limits)
|
|
20
|
+
- [Key Management](#key-expiry-ttl) · [Webhooks](#webhook-events) · [OAuth 2.1](#oauth-21) · [SSE](#sse-streaming-mcp-streamable-http)
|
|
21
|
+
- [Analytics (64 endpoints)](#cost-analysis) · [Teams](#team-management) · [Redis Scaling](#horizontal-scaling-redis)
|
|
22
|
+
- [Plugins](#plugin-system) · [Groups](#key-groups-policy-templates) · [Namespaces](#multi-tenant-namespaces)
|
|
23
|
+
- [Programmatic API](#programmatic-api)
|
|
24
|
+
- [Security](#security)
|
|
25
|
+
- [Current Limitations](#current-limitations)
|
|
26
|
+
- [Roadmap](#roadmap)
|
|
27
|
+
- [Requirements](#requirements)
|
|
28
|
+
- [License](#license)
|
|
29
|
+
|
|
9
30
|
## Quick Start
|
|
10
31
|
|
|
11
32
|
```bash
|
|
@@ -164,6 +185,7 @@ Agent → PayGate (auth + billing) → Your MCP Server (stdio or HTTP)
|
|
|
164
185
|
- **Credit Burn Rate** — `GET /admin/credit-burn-rate` system-wide credit burn rate with credits/hour, utilization percentage, depletion forecast
|
|
165
186
|
- **Consumer Risk Score** — `GET /admin/consumer-risk-score` per-consumer risk scoring based on utilization with risk levels (low/medium/high/critical)
|
|
166
187
|
- **Revenue Forecast** — `GET /admin/revenue-forecast` projected revenue with hourly/daily/weekly/monthly forecasts capped by remaining credits
|
|
188
|
+
- **System Overview** — `GET /admin/system-overview` executive summary with key counts, credit totals, utilization, activity metrics
|
|
167
189
|
- **Key Health Overview** — `GET /admin/key-health-overview` holistic per-key health check with utilization, status levels, health distribution
|
|
168
190
|
- **Namespace Comparison** — `GET /admin/namespace-comparison` side-by-side namespace comparison with allocation, spend, utilization, leader
|
|
169
191
|
- **Consumer Growth** — `GET /admin/consumer-growth` consumer growth metrics with age, spend rate, credits allocated, new consumer count
|
|
@@ -3782,6 +3804,23 @@ curl http://localhost:3000/admin/revenue-forecast -H "X-Admin-Key: YOUR_ADMIN_KE
|
|
|
3782
3804
|
|
|
3783
3805
|
Projected revenue based on current spend trends. Forecasts for next hour, day, week, and month are extrapolated from aggregate credits/hour rate and capped by total remaining credits. Includes current totals and active key count. Zero-spend systems show zero forecasts. Excludes revoked/suspended keys. Read-only.
|
|
3784
3806
|
|
|
3807
|
+
### System Overview
|
|
3808
|
+
|
|
3809
|
+
```bash
|
|
3810
|
+
curl http://localhost:3000/admin/system-overview -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
3811
|
+
```
|
|
3812
|
+
|
|
3813
|
+
```json
|
|
3814
|
+
{
|
|
3815
|
+
"keys": { "total": 15, "active": 12, "revoked": 2, "suspended": 1 },
|
|
3816
|
+
"credits": { "totalAllocated": 150000, "totalSpent": 45000, "totalRemaining": 105000, "utilizationPercent": 30 },
|
|
3817
|
+
"activity": { "totalCalls": 3500, "uniqueTools": 8 },
|
|
3818
|
+
"generatedAt": "2025-01-15T14:30:00Z"
|
|
3819
|
+
}
|
|
3820
|
+
```
|
|
3821
|
+
|
|
3822
|
+
Executive summary of the entire system. Key counts by status (active, revoked, suspended). Credit totals with utilization percentage. Activity metrics including total calls and unique tools used. Single endpoint for dashboards and monitoring integrations. Read-only.
|
|
3823
|
+
|
|
3785
3824
|
### Key Health Overview
|
|
3786
3825
|
|
|
3787
3826
|
```bash
|
|
@@ -4893,6 +4932,158 @@ Response includes changed fields, skipped fields, and any validation warnings:
|
|
|
4893
4932
|
|
|
4894
4933
|
The config file is validated before applying changes — invalid configs are rejected with detailed error messages and zero changes applied.
|
|
4895
4934
|
|
|
4935
|
+
## Deployment
|
|
4936
|
+
|
|
4937
|
+
### Docker
|
|
4938
|
+
|
|
4939
|
+
```bash
|
|
4940
|
+
# Build the image
|
|
4941
|
+
docker build -t paygate-mcp .
|
|
4942
|
+
|
|
4943
|
+
# Run with a remote MCP server
|
|
4944
|
+
docker run -d \
|
|
4945
|
+
-p 3000:3000 \
|
|
4946
|
+
-v paygate-data:/data \
|
|
4947
|
+
-e PAYGATE_REMOTE_URL="https://my-mcp-server.com/mcp" \
|
|
4948
|
+
-e PAYGATE_ADMIN_KEY="your-admin-key" \
|
|
4949
|
+
paygate-mcp
|
|
4950
|
+
|
|
4951
|
+
# Run with environment variables
|
|
4952
|
+
docker run -d \
|
|
4953
|
+
-p 3000:3000 \
|
|
4954
|
+
-e PAYGATE_PORT=3000 \
|
|
4955
|
+
-e PAYGATE_REMOTE_URL="https://api.example.com/mcp" \
|
|
4956
|
+
-e PAYGATE_DEFAULT_CREDITS=5 \
|
|
4957
|
+
-e PAYGATE_RATE_LIMIT=120 \
|
|
4958
|
+
-e PAYGATE_WEBHOOK_URL="https://hooks.example.com/paygate" \
|
|
4959
|
+
paygate-mcp
|
|
4960
|
+
```
|
|
4961
|
+
|
|
4962
|
+
### Docker Compose (with Redis)
|
|
4963
|
+
|
|
4964
|
+
```bash
|
|
4965
|
+
# Set your MCP server URL and start
|
|
4966
|
+
MCP_REMOTE_URL="https://my-mcp-server.com/mcp" docker-compose up -d
|
|
4967
|
+
|
|
4968
|
+
# View logs
|
|
4969
|
+
docker-compose logs -f paygate
|
|
4970
|
+
|
|
4971
|
+
# Check health
|
|
4972
|
+
curl http://localhost:3000/health
|
|
4973
|
+
```
|
|
4974
|
+
|
|
4975
|
+
The included `docker-compose.yml` starts PayGate with Redis for horizontal scaling, state persistence, and distributed rate limiting.
|
|
4976
|
+
|
|
4977
|
+
### systemd
|
|
4978
|
+
|
|
4979
|
+
```ini
|
|
4980
|
+
# /etc/systemd/system/paygate-mcp.service
|
|
4981
|
+
[Unit]
|
|
4982
|
+
Description=PayGate MCP Proxy
|
|
4983
|
+
After=network.target
|
|
4984
|
+
|
|
4985
|
+
[Service]
|
|
4986
|
+
Type=simple
|
|
4987
|
+
User=paygate
|
|
4988
|
+
WorkingDirectory=/opt/paygate-mcp
|
|
4989
|
+
ExecStart=/usr/bin/node dist/cli.js wrap \
|
|
4990
|
+
--remote-url "https://my-mcp-server.com/mcp" \
|
|
4991
|
+
--port 3000 \
|
|
4992
|
+
--state-file /var/lib/paygate/state.json \
|
|
4993
|
+
--audit-file /var/log/paygate/audit.jsonl
|
|
4994
|
+
Restart=always
|
|
4995
|
+
RestartSec=5
|
|
4996
|
+
Environment=NODE_ENV=production
|
|
4997
|
+
|
|
4998
|
+
[Install]
|
|
4999
|
+
WantedBy=multi-user.target
|
|
5000
|
+
```
|
|
5001
|
+
|
|
5002
|
+
```bash
|
|
5003
|
+
sudo systemctl enable paygate-mcp
|
|
5004
|
+
sudo systemctl start paygate-mcp
|
|
5005
|
+
sudo journalctl -u paygate-mcp -f
|
|
5006
|
+
```
|
|
5007
|
+
|
|
5008
|
+
### PM2
|
|
5009
|
+
|
|
5010
|
+
```bash
|
|
5011
|
+
# Install globally
|
|
5012
|
+
npm install -g paygate-mcp
|
|
5013
|
+
|
|
5014
|
+
# Start with PM2
|
|
5015
|
+
pm2 start paygate-mcp -- wrap \
|
|
5016
|
+
--remote-url "https://my-mcp-server.com/mcp" \
|
|
5017
|
+
--port 3000 \
|
|
5018
|
+
--state-file ./state.json
|
|
5019
|
+
|
|
5020
|
+
# Or use ecosystem file
|
|
5021
|
+
pm2 start ecosystem.config.js
|
|
5022
|
+
```
|
|
5023
|
+
|
|
5024
|
+
### Production Checklist
|
|
5025
|
+
|
|
5026
|
+
- [ ] Set `--state-file` for persistent storage across restarts
|
|
5027
|
+
- [ ] Set `--audit-file` for audit trail retention
|
|
5028
|
+
- [ ] Configure `--webhook-url` for external billing/alerting
|
|
5029
|
+
- [ ] Use `--admin-key` or set `PAYGATE_ADMIN_KEY` (auto-generated if omitted)
|
|
5030
|
+
- [ ] Enable Redis (`--redis-url`) for multi-instance deployments
|
|
5031
|
+
- [ ] Set up reverse proxy (nginx/caddy) with TLS termination
|
|
5032
|
+
- [ ] Configure `--cors-origin` for browser-based clients
|
|
5033
|
+
- [ ] Monitor `/health` endpoint with your uptime checker
|
|
5034
|
+
- [ ] Scrape `/metrics` with Prometheus for observability
|
|
5035
|
+
- [ ] Back up state file regularly (or use Redis persistence)
|
|
5036
|
+
|
|
5037
|
+
## Error Codes
|
|
5038
|
+
|
|
5039
|
+
### HTTP Status Codes
|
|
5040
|
+
|
|
5041
|
+
| Code | Meaning | When |
|
|
5042
|
+
|------|---------|------|
|
|
5043
|
+
| `200` | OK | Successful read/update operations |
|
|
5044
|
+
| `201` | Created | Key, team, group, or template created |
|
|
5045
|
+
| `401` | Unauthorized | Missing or invalid admin key |
|
|
5046
|
+
| `402` | Payment Required | Insufficient credits for tool call |
|
|
5047
|
+
| `403` | Forbidden | IP not in allowlist, ACL denied |
|
|
5048
|
+
| `404` | Not Found | Key, template, group, or resource not found |
|
|
5049
|
+
| `405` | Method Not Allowed | Wrong HTTP method for endpoint |
|
|
5050
|
+
| `409` | Conflict | Duplicate alias, template name collision |
|
|
5051
|
+
| `429` | Too Many Requests | Rate limit exceeded |
|
|
5052
|
+
| `503` | Service Unavailable | Maintenance mode or server shutting down |
|
|
5053
|
+
|
|
5054
|
+
### JSON-RPC Error Codes (MCP /mcp endpoint)
|
|
5055
|
+
|
|
5056
|
+
| Code | Name | Description |
|
|
5057
|
+
|------|------|-------------|
|
|
5058
|
+
| `-32402` | `insufficient_credits` | API key has zero credits remaining |
|
|
5059
|
+
| `-32402` | `rate_limited` | Request rate exceeds per-key or per-tool limit |
|
|
5060
|
+
| `-32402` | `quota_exceeded` | Daily/monthly call or credit quota exceeded |
|
|
5061
|
+
| `-32402` | `spending_limit_reached` | Cumulative spend exceeds key spending limit |
|
|
5062
|
+
| `-32402` | `key_suspended` | API key is temporarily suspended |
|
|
5063
|
+
| `-32402` | `key_expired` | API key TTL has elapsed |
|
|
5064
|
+
| `-32402` | `acl_denied` | Tool not in key's ACL whitelist |
|
|
5065
|
+
| `-32402` | `ip_not_allowed` | Client IP not in key's allowlist |
|
|
5066
|
+
| `-32402` | `invalid_api_key` | X-API-Key header not recognized |
|
|
5067
|
+
| `-32402` | `maintenance_mode` | Server in maintenance mode |
|
|
5068
|
+
| `-32600` | `invalid_request` | Malformed JSON-RPC request body |
|
|
5069
|
+
| `-32601` | `method_not_found` | Unknown MCP method |
|
|
5070
|
+
|
|
5071
|
+
### Webhook Event Types
|
|
5072
|
+
|
|
5073
|
+
| Event | Trigger |
|
|
5074
|
+
|-------|---------|
|
|
5075
|
+
| `key.created` | New API key provisioned |
|
|
5076
|
+
| `key.revoked` | API key permanently revoked |
|
|
5077
|
+
| `key.suspended` | API key temporarily suspended |
|
|
5078
|
+
| `key.resumed` | Suspended key reactivated |
|
|
5079
|
+
| `key.rotated` | API key rotated to new value |
|
|
5080
|
+
| `key.topup` | Credits added to key |
|
|
5081
|
+
| `key.expired` | Key TTL elapsed |
|
|
5082
|
+
| `key.expiry_warning` | Key approaching expiry |
|
|
5083
|
+
| `credit.transfer` | Credits moved between keys |
|
|
5084
|
+
| `credit.auto_topup` | Auto-topup triggered |
|
|
5085
|
+
| `usage` | Batched tool call events |
|
|
5086
|
+
|
|
4896
5087
|
## Programmatic API
|
|
4897
5088
|
|
|
4898
5089
|
```typescript
|
package/dist/server.d.ts
CHANGED
|
@@ -289,6 +289,7 @@ export declare class PayGateServer {
|
|
|
289
289
|
private handlePeakUsage;
|
|
290
290
|
private handleConsumerActivity;
|
|
291
291
|
private handleToolPopularity;
|
|
292
|
+
private handleSystemOverview;
|
|
292
293
|
private handleKeyHealthOverview;
|
|
293
294
|
private handleNamespaceComparison;
|
|
294
295
|
private handleConsumerGrowth;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAgB,eAAe,EAA0B,MAAM,MAAM,CAAC;AAI7E,OAAO,EAAE,aAAa,EAAkB,mBAAmB,EAAkB,MAAM,SAAS,CAAC;AAU7F,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,iBAAiB,CAAC;AAC/C,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;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,eAAe,EAA6B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAErE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAsBvF;AAyCD,yCAAyC;AACzC,KAAK,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAa5C,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,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,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;IAC5C,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,oCAAoC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,sCAAsC;IACtC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAS;IACzB,wEAAwE;IACxE,OAAO,CAAC,eAAe,CAAS;IAChC,mDAAmD;IACnD,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,kDAAkD;IAClD,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,gDAAgD;IAChD,OAAO,CAAC,iBAAiB,CAAqF;IAC9G,8CAA8C;IAC9C,OAAO,CAAC,wBAAwB,CAA+C;IAC/E,8BAA8B;IAC9B,OAAO,CAAC,gBAAgB,CAOhB;IACR,2CAA2C;IAC3C,OAAO,CAAC,aAAa,CAA+C;IACpE,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAK;IAC3B,kCAAkC;IAClC,OAAO,CAAC,kBAAkB,CAOX;IACf,+CAA+C;IAC/C,OAAO,CAAC,iBAAiB,CAAK;IAC9B,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAUV;IACR,gCAAgC;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAK;IACrB,sEAAsE;IACtE,OAAO,CAAC,UAAU,CAAuB;IAEzC,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;IAsMnB;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAK1B,KAAK,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;YA0C5C,aAAa;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1176,6 +1176,12 @@ class PayGateServer {
|
|
|
1176
1176
|
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
1177
1177
|
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
1178
1178
|
return;
|
|
1179
|
+
case '/admin/system-overview':
|
|
1180
|
+
if (req.method === 'GET')
|
|
1181
|
+
return this.handleSystemOverview(req, res);
|
|
1182
|
+
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
1183
|
+
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
1184
|
+
return;
|
|
1179
1185
|
// ─── Plugin endpoints ──────────────────────────────────────────────
|
|
1180
1186
|
case '/plugins':
|
|
1181
1187
|
return this.handleListPlugins(req, res);
|
|
@@ -1773,6 +1779,7 @@ class PayGateServer {
|
|
|
1773
1779
|
creditBurnRate: 'GET /admin/credit-burn-rate — System-wide credit burn rate with credits/hour, utilization percentage, depletion forecast, and active key count (requires X-Admin-Key)',
|
|
1774
1780
|
consumerRiskScore: 'GET /admin/consumer-risk-score — Per-consumer risk scoring based on utilization, spend velocity, and credit depletion proximity with risk levels (requires X-Admin-Key)',
|
|
1775
1781
|
revenueForecast: 'GET /admin/revenue-forecast — Projected revenue with hourly/daily/weekly/monthly forecasts based on current spend trends, capped by remaining credits (requires X-Admin-Key)',
|
|
1782
|
+
systemOverview: 'GET /admin/system-overview — Executive summary with key counts, credit totals, utilization, activity metrics (requires X-Admin-Key)',
|
|
1776
1783
|
keyHealthOverview: 'GET /admin/key-health-overview — Holistic per-key health check with utilization, status (healthy/warning/critical), and health distribution (requires X-Admin-Key)',
|
|
1777
1784
|
namespaceComparison: 'GET /admin/namespace-comparison — Side-by-side namespace comparison with allocation, spend, utilization, and leader namespace (requires X-Admin-Key)',
|
|
1778
1785
|
consumerGrowth: 'GET /admin/consumer-growth — Consumer growth metrics with age, spend rate, credits allocated, and new consumer count (requires X-Admin-Key)',
|
|
@@ -8191,6 +8198,54 @@ class PayGateServer {
|
|
|
8191
8198
|
}));
|
|
8192
8199
|
}
|
|
8193
8200
|
// ─── /admin/group-activity — Per-group activity metrics ──────────────────
|
|
8201
|
+
handleSystemOverview(_req, res) {
|
|
8202
|
+
if (!this.checkAdmin(_req, res))
|
|
8203
|
+
return;
|
|
8204
|
+
const allRecords = this.gate.store.getAllRecords();
|
|
8205
|
+
const activeRecords = allRecords.filter(r => r.active && !r.suspended);
|
|
8206
|
+
const revokedCount = allRecords.filter(r => !r.active).length;
|
|
8207
|
+
const suspendedCount = allRecords.filter(r => r.active && r.suspended).length;
|
|
8208
|
+
let totalAllocated = 0;
|
|
8209
|
+
let totalSpent = 0;
|
|
8210
|
+
let totalRemaining = 0;
|
|
8211
|
+
let totalCalls = 0;
|
|
8212
|
+
for (const rec of activeRecords) {
|
|
8213
|
+
totalAllocated += rec.credits + rec.totalSpent;
|
|
8214
|
+
totalSpent += rec.totalSpent;
|
|
8215
|
+
totalRemaining += rec.credits;
|
|
8216
|
+
totalCalls += rec.totalCalls;
|
|
8217
|
+
}
|
|
8218
|
+
// Count unique tools from request log
|
|
8219
|
+
const toolSet = new Set();
|
|
8220
|
+
for (const entry of this.requestLog) {
|
|
8221
|
+
if (entry.status === 'allowed') {
|
|
8222
|
+
toolSet.add(entry.tool);
|
|
8223
|
+
}
|
|
8224
|
+
}
|
|
8225
|
+
const utilizationPercent = totalAllocated > 0
|
|
8226
|
+
? Math.round((totalSpent / totalAllocated) * 100)
|
|
8227
|
+
: 0;
|
|
8228
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
8229
|
+
res.end(JSON.stringify({
|
|
8230
|
+
keys: {
|
|
8231
|
+
total: allRecords.length,
|
|
8232
|
+
active: activeRecords.length,
|
|
8233
|
+
revoked: revokedCount,
|
|
8234
|
+
suspended: suspendedCount,
|
|
8235
|
+
},
|
|
8236
|
+
credits: {
|
|
8237
|
+
totalAllocated,
|
|
8238
|
+
totalSpent,
|
|
8239
|
+
totalRemaining,
|
|
8240
|
+
utilizationPercent,
|
|
8241
|
+
},
|
|
8242
|
+
activity: {
|
|
8243
|
+
totalCalls,
|
|
8244
|
+
uniqueTools: toolSet.size,
|
|
8245
|
+
},
|
|
8246
|
+
generatedAt: new Date().toISOString(),
|
|
8247
|
+
}));
|
|
8248
|
+
}
|
|
8194
8249
|
handleKeyHealthOverview(_req, res) {
|
|
8195
8250
|
if (!this.checkAdmin(_req, res))
|
|
8196
8251
|
return;
|