paygate-mcp 8.47.0 → 8.49.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 +41 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +163 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -154,6 +154,8 @@ Agent → PayGate (auth + billing) → Your MCP Server (stdio or HTTP)
|
|
|
154
154
|
- **Peak Usage Times** — `GET /admin/peak-usage` traffic patterns by hour-of-day with request counts, credits, unique consumers, and peak hour identification
|
|
155
155
|
- **Consumer Activity** — `GET /admin/consumer-activity` per-consumer activity metrics with calls, spend, credits remaining, last active time, and active/inactive status
|
|
156
156
|
- **Tool Popularity** — `GET /admin/tool-popularity` tool usage popularity with call counts, credits, unique consumers, percentage, and most popular tool identification
|
|
157
|
+
- **Credit Allocation Summary** — `GET /admin/credit-allocation` credit allocation across active keys with tier breakdown (1-100, 101-500, 501+), totals, and average allocation
|
|
158
|
+
- **Daily Summary** — `GET /admin/daily-summary` daily rollup of requests, credits spent, new keys, errors, unique consumers and tools for trend analysis
|
|
157
159
|
- **Config Hot Reload** — `POST /config/reload` reloads pricing, rate limits, webhooks, quotas, and behavior flags from config file without server restart
|
|
158
160
|
- **Webhook Events** — POST batched usage events to any URL for external billing/alerting
|
|
159
161
|
- **Config File Mode** — Load all settings from a JSON file (`--config`)
|
|
@@ -3574,6 +3576,45 @@ curl http://localhost:3000/admin/tool-popularity -H "X-Admin-Key: YOUR_ADMIN_KEY
|
|
|
3574
3576
|
|
|
3575
3577
|
Tool usage popularity ranking. Per-tool: total calls, credits spent, unique consumers, and call percentage. Only counts allowed (successful) requests. `mostPopular` identifies the most-called tool. Sorted by call count descending. Read-only.
|
|
3576
3578
|
|
|
3579
|
+
### Credit Allocation Summary
|
|
3580
|
+
|
|
3581
|
+
```bash
|
|
3582
|
+
curl http://localhost:3000/admin/credit-allocation -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
3583
|
+
```
|
|
3584
|
+
|
|
3585
|
+
```json
|
|
3586
|
+
{
|
|
3587
|
+
"tiers": [
|
|
3588
|
+
{ "tier": "1-100", "count": 15, "totalCredits": 750, "percentage": 5.0 },
|
|
3589
|
+
{ "tier": "101-500", "count": 30, "totalCredits": 9000, "percentage": 60.0 },
|
|
3590
|
+
{ "tier": "501+", "count": 5, "totalCredits": 5250, "percentage": 35.0 }
|
|
3591
|
+
],
|
|
3592
|
+
"summary": { "totalKeys": 50, "totalAllocated": 15000, "totalRemaining": 12000, "totalSpent": 3000, "averageAllocation": 300 },
|
|
3593
|
+
"generatedAt": "2025-01-15T14:30:00Z"
|
|
3594
|
+
}
|
|
3595
|
+
```
|
|
3596
|
+
|
|
3597
|
+
Credit allocation distribution across active keys. Groups keys into allocation tiers (1-100, 101-500, 501+) with count, total credits, and percentage per tier. Summary includes total keys, total allocated/remaining/spent credits, and average allocation per key. Excludes revoked/suspended keys. Read-only.
|
|
3598
|
+
|
|
3599
|
+
### Daily Summary
|
|
3600
|
+
|
|
3601
|
+
```bash
|
|
3602
|
+
curl http://localhost:3000/admin/daily-summary -H "X-Admin-Key: YOUR_ADMIN_KEY"
|
|
3603
|
+
```
|
|
3604
|
+
|
|
3605
|
+
```json
|
|
3606
|
+
{
|
|
3607
|
+
"days": [
|
|
3608
|
+
{ "date": "2025-01-15", "requests": 150, "allowed": 140, "denied": 10, "creditsSpent": 700, "uniqueConsumers": 25, "uniqueTools": 8, "newKeys": 3 },
|
|
3609
|
+
{ "date": "2025-01-14", "requests": 120, "allowed": 115, "denied": 5, "creditsSpent": 575, "uniqueConsumers": 20, "uniqueTools": 7, "newKeys": 1 }
|
|
3610
|
+
],
|
|
3611
|
+
"summary": { "totalDays": 2, "totalRequests": 270, "totalCreditsSpent": 1275, "averageRequestsPerDay": 135 },
|
|
3612
|
+
"generatedAt": "2025-01-15T14:30:00Z"
|
|
3613
|
+
}
|
|
3614
|
+
```
|
|
3615
|
+
|
|
3616
|
+
Daily activity rollup for trend analysis. Per-day: total requests, allowed/denied breakdown, credits spent, unique consumers, unique tools, and new keys created. Summary includes total days, total requests, total credits, and average requests per day. Sorted by date descending (most recent first). Read-only.
|
|
3617
|
+
|
|
3577
3618
|
### IP Allowlisting
|
|
3578
3619
|
|
|
3579
3620
|
Restrict API keys to specific IP addresses or CIDR ranges:
|
package/dist/server.d.ts
CHANGED
|
@@ -289,6 +289,8 @@ export declare class PayGateServer {
|
|
|
289
289
|
private handlePeakUsage;
|
|
290
290
|
private handleConsumerActivity;
|
|
291
291
|
private handleToolPopularity;
|
|
292
|
+
private handleDailySummary;
|
|
293
|
+
private handleCreditAllocation;
|
|
292
294
|
private handleGetNotes;
|
|
293
295
|
private handleAddNote;
|
|
294
296
|
private handleDeleteNote;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
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;YAwkBb,SAAS;IAmQvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA+C1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAyCrB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,UAAU;IAkKlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,UAAU;IAuElB,OAAO,CAAC,kBAAkB;IA0D1B,kEAAkE;IAClE,OAAO,CAAC,OAAO;YAWD,eAAe;IAqH7B,OAAO,CAAC,cAAc;YA0CR,WAAW;YAuEX,oBAAoB;YAwHpB,oBAAoB;IA4IlC,OAAO,CAAC,eAAe;YAoDT,eAAe;YAsEf,eAAe;YAsDf,gBAAgB;YAkEhB,eAAe;YAgEf,cAAc;YAuFd,cAAc;YAoEd,eAAe;YA0Df,YAAY;YAkDZ,eAAe;YAwDf,cAAc;YA+Dd,aAAa;YAsDb,oBAAoB;YAsDpB,qBAAqB;IAgCnC,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,cAAc;IAyEtB,OAAO,CAAC,qBAAqB;IAsD7B,OAAO,CAAC,iBAAiB;IAuEzB,OAAO,CAAC,mBAAmB;IA8C3B,OAAO,CAAC,sBAAsB;IAwD9B,OAAO,CAAC,mBAAmB;IAoG3B,OAAO,CAAC,eAAe;IAiJvB,OAAO,CAAC,kBAAkB;YA4LZ,kBAAkB;IAoFhC,OAAO,CAAC,aAAa;YAuDP,YAAY;IAkD1B,OAAO,CAAC,WAAW;YA+CL,mBAAmB;IAmCjC,OAAO,CAAC,eAAe;IAYvB,+EAA+E;IAC/E,OAAO,CAAC,mBAAmB;IAU3B,oEAAoE;YACtD,mBAAmB;IA4DjC,yDAAyD;YAC3C,oBAAoB;IAuFlC,yCAAyC;YAC3B,gBAAgB;IA8E9B,uDAAuD;YACzC,iBAAiB;IAiC/B,sEAAsE;IACtE,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,eAAe;YAYT,qBAAqB;IAmDnC,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,sBAAsB;YAwBhB,mBAAmB;IAoDjC,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,oBAAoB;IA0D5B,OAAO,CAAC,sBAAsB;IA2D9B,OAAO,CAAC,wBAAwB;IAwJhC,OAAO,CAAC,qBAAqB;IA8G7B,OAAO,CAAC,wBAAwB;IAwGhC,OAAO,CAAC,kBAAkB;IAsH1B,OAAO,CAAC,uBAAuB;IAmH/B,OAAO,CAAC,mBAAmB;IAiH3B,OAAO,CAAC,oBAAoB;IA6H5B,OAAO,CAAC,qBAAqB;IAmI7B,OAAO,CAAC,mBAAmB;IAwH3B,OAAO,CAAC,qBAAqB;IAiF7B,OAAO,CAAC,uBAAuB;IAwF/B,OAAO,CAAC,sBAAsB;IAsG9B,OAAO,CAAC,sBAAsB;IAuF9B,OAAO,CAAC,sBAAsB;IA4G9B,OAAO,CAAC,mBAAmB;IA+E3B,OAAO,CAAC,sBAAsB;IA8F9B,OAAO,CAAC,mBAAmB;IAoE3B,OAAO,CAAC,qBAAqB;IAuF7B,OAAO,CAAC,iBAAiB;IA0EzB,OAAO,CAAC,gBAAgB;IAuExB,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,oBAAoB;IAmD5B,OAAO,CAAC,kBAAkB;IAkD1B,OAAO,CAAC,sBAAsB;IAoE9B,OAAO,CAAC,mBAAmB;IAkF3B,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,mBAAmB;IAsD3B,OAAO,CAAC,sBAAsB;IA6E9B,OAAO,CAAC,kBAAkB;IAqF1B,OAAO,CAAC,kBAAkB;IA2D1B,OAAO,CAAC,sBAAsB;IAgF9B,OAAO,CAAC,mBAAmB;IA4D3B,OAAO,CAAC,cAAc;IAuDtB,OAAO,CAAC,qBAAqB;IAyD7B,OAAO,CAAC,0BAA0B;IAiElC,OAAO,CAAC,wBAAwB;IA2EhC,OAAO,CAAC,8BAA8B;IAmFtC,OAAO,CAAC,2BAA2B;IAwEnC,OAAO,CAAC,iBAAiB;IAuDzB,OAAO,CAAC,uBAAuB;IA8D/B,OAAO,CAAC,oBAAoB;IAgD5B,OAAO,CAAC,uBAAuB;IAsE/B,OAAO,CAAC,sBAAsB;IAwD9B,OAAO,CAAC,kBAAkB;IA+D1B,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,sBAAsB;IAgE9B,OAAO,CAAC,oBAAoB;IAqD5B,OAAO,CAAC,kBAAkB;IAwF1B,OAAO,CAAC,sBAAsB;IAmF9B,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,aAAa;IAiErB,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,oBAAoB;IAiG5B,OAAO,CAAC,oBAAoB;IAmC5B,gFAAgF;IAChF,OAAO,CAAC,uBAAuB;IAiD/B,OAAO,CAAC,iBAAiB;IAmGzB,OAAO,CAAC,sBAAsB;IAgC9B,OAAO,CAAC,uBAAuB;IAqG/B,OAAO,CAAC,uBAAuB;IAqE/B,OAAO,CAAC,wBAAwB;IA+ChC,uEAAuE;IACvE,OAAO,CAAC,cAAc;IAQtB,mCAAmC;IACnC,OAAO,CAAC,0BAA0B;YAWpB,kBAAkB;IA4IhC,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,mBAAmB;YAiCb,iBAAiB;IA6H/B,OAAO,CAAC,wBAAwB;YAclB,yBAAyB;YAsCzB,yBAAyB;YAiDzB,yBAAyB;IA4CvC,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,iBAAiB;IAgCzB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,eAAe;YAiBT,gBAAgB;YA4ChB,gBAAgB;YA6ChB,gBAAgB;YAsChB,mBAAmB;YAsDnB,mBAAmB;IA8CjC,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,oBAAoB;YAgBd,iBAAiB;YAyDjB,iBAAiB;IAiE/B,OAAO,CAAC,uBAAuB;IAyB/B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;YAOV,iBAAiB;YA2CjB,iBAAiB;YAuDjB,iBAAiB;YAyCjB,sBAAsB;YAsDtB,wBAAwB;IAiDtC,OAAO,CAAC,mBAAmB;YAsBb,oBAAoB;YAwDpB,oBAAoB;IAwDlC,OAAO,CAAC,mBAAmB;YAQb,oBAAoB;YAsCpB,oBAAoB;IAuClC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IAUvB,iFAAiF;IACjF,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,QAAQ;IAkBV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqC3B;;;;;;;OAOG;IACG,YAAY,CAAC,SAAS,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDrD,OAAO,CAAC,gBAAgB;IAuExB,OAAO,CAAC,eAAe;YA+GT,mBAAmB;YAgJnB,wBAAwB;IAoJtC,OAAO,CAAC,sBAAsB;IA0F9B,OAAO,CAAC,sBAAsB;IA6E9B,qDAAqD;IACrD,OAAO,CAAC,UAAU;CAMnB"}
|
package/dist/server.js
CHANGED
|
@@ -1080,6 +1080,18 @@ class PayGateServer {
|
|
|
1080
1080
|
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
1081
1081
|
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
1082
1082
|
return;
|
|
1083
|
+
case '/admin/credit-allocation':
|
|
1084
|
+
if (req.method === 'GET')
|
|
1085
|
+
return this.handleCreditAllocation(req, res);
|
|
1086
|
+
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
1087
|
+
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
1088
|
+
return;
|
|
1089
|
+
case '/admin/daily-summary':
|
|
1090
|
+
if (req.method === 'GET')
|
|
1091
|
+
return this.handleDailySummary(req, res);
|
|
1092
|
+
res.writeHead(405, { 'Content-Type': 'application/json' });
|
|
1093
|
+
res.end(JSON.stringify({ error: 'Method not allowed. Use GET.' }));
|
|
1094
|
+
return;
|
|
1083
1095
|
// ─── Plugin endpoints ──────────────────────────────────────────────
|
|
1084
1096
|
case '/plugins':
|
|
1085
1097
|
return this.handleListPlugins(req, res);
|
|
@@ -1667,6 +1679,8 @@ class PayGateServer {
|
|
|
1667
1679
|
peakUsage: 'GET /admin/peak-usage — Traffic patterns by hour-of-day with requests, credits, consumers per hour for capacity planning (requires X-Admin-Key)',
|
|
1668
1680
|
consumerActivity: 'GET /admin/consumer-activity — Per-consumer activity with calls, spend, credits remaining, last active time, and status (requires X-Admin-Key)',
|
|
1669
1681
|
toolPopularity: 'GET /admin/tool-popularity — Tool usage popularity with call counts, credits, unique consumers, and percentage breakdown (requires X-Admin-Key)',
|
|
1682
|
+
creditAllocation: 'GET /admin/credit-allocation — Credit allocation summary with tier breakdown, totals, and average allocation across active keys (requires X-Admin-Key)',
|
|
1683
|
+
dailySummary: 'GET /admin/daily-summary — Daily rollup of requests, credits spent, new keys, errors, and unique consumers for trend analysis (requires X-Admin-Key)',
|
|
1670
1684
|
...(this.oauth ? {
|
|
1671
1685
|
oauthMetadata: 'GET /.well-known/oauth-authorization-server — OAuth 2.1 server metadata',
|
|
1672
1686
|
oauthRegister: 'POST /oauth/register — Register OAuth client',
|
|
@@ -8078,6 +8092,155 @@ class PayGateServer {
|
|
|
8078
8092
|
generatedAt: new Date().toISOString(),
|
|
8079
8093
|
}));
|
|
8080
8094
|
}
|
|
8095
|
+
// ─── /admin/daily-summary — Daily activity rollup ────────────────────────
|
|
8096
|
+
handleDailySummary(_req, res) {
|
|
8097
|
+
if (!this.checkAdmin(_req, res))
|
|
8098
|
+
return;
|
|
8099
|
+
if (this.requestLog.length === 0) {
|
|
8100
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
8101
|
+
res.end(JSON.stringify({
|
|
8102
|
+
days: [],
|
|
8103
|
+
summary: {
|
|
8104
|
+
totalDays: 0,
|
|
8105
|
+
totalRequests: 0,
|
|
8106
|
+
totalCreditsSpent: 0,
|
|
8107
|
+
averageRequestsPerDay: 0,
|
|
8108
|
+
},
|
|
8109
|
+
generatedAt: new Date().toISOString(),
|
|
8110
|
+
}));
|
|
8111
|
+
return;
|
|
8112
|
+
}
|
|
8113
|
+
// Group request log entries by date (YYYY-MM-DD)
|
|
8114
|
+
const dayMap = new Map();
|
|
8115
|
+
for (const entry of this.requestLog) {
|
|
8116
|
+
const date = entry.timestamp.slice(0, 10); // YYYY-MM-DD
|
|
8117
|
+
let d = dayMap.get(date);
|
|
8118
|
+
if (!d) {
|
|
8119
|
+
d = { requests: 0, allowed: 0, denied: 0, creditsSpent: 0, consumers: new Set(), tools: new Set() };
|
|
8120
|
+
dayMap.set(date, d);
|
|
8121
|
+
}
|
|
8122
|
+
d.requests++;
|
|
8123
|
+
if (entry.status === 'allowed') {
|
|
8124
|
+
d.allowed++;
|
|
8125
|
+
d.creditsSpent += entry.credits || 0;
|
|
8126
|
+
}
|
|
8127
|
+
else {
|
|
8128
|
+
d.denied++;
|
|
8129
|
+
}
|
|
8130
|
+
d.consumers.add(entry.key);
|
|
8131
|
+
if (entry.tool)
|
|
8132
|
+
d.tools.add(entry.tool);
|
|
8133
|
+
}
|
|
8134
|
+
// Count new keys per day from store records
|
|
8135
|
+
const allRecords = this.gate.store.getAllRecords();
|
|
8136
|
+
const newKeysPerDay = new Map();
|
|
8137
|
+
for (const rec of allRecords) {
|
|
8138
|
+
if (rec.createdAt) {
|
|
8139
|
+
const date = new Date(rec.createdAt).toISOString().slice(0, 10);
|
|
8140
|
+
newKeysPerDay.set(date, (newKeysPerDay.get(date) || 0) + 1);
|
|
8141
|
+
}
|
|
8142
|
+
}
|
|
8143
|
+
// Build days array sorted by date descending
|
|
8144
|
+
const days = Array.from(dayMap.entries())
|
|
8145
|
+
.sort((a, b) => b[0].localeCompare(a[0]))
|
|
8146
|
+
.map(([date, d]) => ({
|
|
8147
|
+
date,
|
|
8148
|
+
requests: d.requests,
|
|
8149
|
+
allowed: d.allowed,
|
|
8150
|
+
denied: d.denied,
|
|
8151
|
+
creditsSpent: d.creditsSpent,
|
|
8152
|
+
uniqueConsumers: d.consumers.size,
|
|
8153
|
+
uniqueTools: d.tools.size,
|
|
8154
|
+
newKeys: newKeysPerDay.get(date) || 0,
|
|
8155
|
+
}));
|
|
8156
|
+
const totalRequests = days.reduce((s, d) => s + d.requests, 0);
|
|
8157
|
+
const totalCreditsSpent = days.reduce((s, d) => s + d.creditsSpent, 0);
|
|
8158
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
8159
|
+
res.end(JSON.stringify({
|
|
8160
|
+
days,
|
|
8161
|
+
summary: {
|
|
8162
|
+
totalDays: days.length,
|
|
8163
|
+
totalRequests,
|
|
8164
|
+
totalCreditsSpent,
|
|
8165
|
+
averageRequestsPerDay: days.length > 0 ? Math.round(totalRequests / days.length) : 0,
|
|
8166
|
+
},
|
|
8167
|
+
generatedAt: new Date().toISOString(),
|
|
8168
|
+
}));
|
|
8169
|
+
}
|
|
8170
|
+
// ─── /admin/credit-allocation — Credit allocation summary ────────────────
|
|
8171
|
+
handleCreditAllocation(_req, res) {
|
|
8172
|
+
if (!this.checkAdmin(_req, res))
|
|
8173
|
+
return;
|
|
8174
|
+
const allRecords = this.gate.store.getAllRecords();
|
|
8175
|
+
const activeRecords = allRecords.filter(r => r.active && !r.suspended);
|
|
8176
|
+
if (activeRecords.length === 0) {
|
|
8177
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
8178
|
+
res.end(JSON.stringify({
|
|
8179
|
+
tiers: [],
|
|
8180
|
+
summary: {
|
|
8181
|
+
totalKeys: 0,
|
|
8182
|
+
totalAllocated: 0,
|
|
8183
|
+
totalRemaining: 0,
|
|
8184
|
+
totalSpent: 0,
|
|
8185
|
+
averageAllocation: 0,
|
|
8186
|
+
},
|
|
8187
|
+
generatedAt: new Date().toISOString(),
|
|
8188
|
+
}));
|
|
8189
|
+
return;
|
|
8190
|
+
}
|
|
8191
|
+
// Calculate allocation per key (credits remaining + totalSpent = original allocation)
|
|
8192
|
+
const allocations = activeRecords.map(rec => ({
|
|
8193
|
+
allocated: rec.credits + (rec.totalSpent || 0),
|
|
8194
|
+
remaining: rec.credits,
|
|
8195
|
+
spent: rec.totalSpent || 0,
|
|
8196
|
+
}));
|
|
8197
|
+
const totalAllocated = allocations.reduce((s, a) => s + a.allocated, 0);
|
|
8198
|
+
const totalRemaining = allocations.reduce((s, a) => s + a.remaining, 0);
|
|
8199
|
+
const totalSpent = allocations.reduce((s, a) => s + a.spent, 0);
|
|
8200
|
+
// Classify into tiers
|
|
8201
|
+
const tierDefs = [
|
|
8202
|
+
{ tier: '1-100', min: 1, max: 100 },
|
|
8203
|
+
{ tier: '101-500', min: 101, max: 500 },
|
|
8204
|
+
{ tier: '501+', min: 501, max: Infinity },
|
|
8205
|
+
];
|
|
8206
|
+
const tierMap = new Map();
|
|
8207
|
+
for (const a of allocations) {
|
|
8208
|
+
for (const td of tierDefs) {
|
|
8209
|
+
if (a.allocated >= td.min && a.allocated <= td.max) {
|
|
8210
|
+
const existing = tierMap.get(td.tier) || { count: 0, totalCredits: 0 };
|
|
8211
|
+
existing.count++;
|
|
8212
|
+
existing.totalCredits += a.allocated;
|
|
8213
|
+
tierMap.set(td.tier, existing);
|
|
8214
|
+
break;
|
|
8215
|
+
}
|
|
8216
|
+
}
|
|
8217
|
+
}
|
|
8218
|
+
// Build tiers array sorted ascending by tier order
|
|
8219
|
+
const tierOrder = ['1-100', '101-500', '501+'];
|
|
8220
|
+
const tiers = tierOrder
|
|
8221
|
+
.filter(t => tierMap.has(t))
|
|
8222
|
+
.map(t => {
|
|
8223
|
+
const d = tierMap.get(t);
|
|
8224
|
+
return {
|
|
8225
|
+
tier: t,
|
|
8226
|
+
count: d.count,
|
|
8227
|
+
totalCredits: d.totalCredits,
|
|
8228
|
+
percentage: totalAllocated > 0 ? Math.round((d.totalCredits / totalAllocated) * 10000) / 100 : 0,
|
|
8229
|
+
};
|
|
8230
|
+
});
|
|
8231
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
8232
|
+
res.end(JSON.stringify({
|
|
8233
|
+
tiers,
|
|
8234
|
+
summary: {
|
|
8235
|
+
totalKeys: activeRecords.length,
|
|
8236
|
+
totalAllocated,
|
|
8237
|
+
totalRemaining,
|
|
8238
|
+
totalSpent,
|
|
8239
|
+
averageAllocation: Math.round(totalAllocated / activeRecords.length),
|
|
8240
|
+
},
|
|
8241
|
+
generatedAt: new Date().toISOString(),
|
|
8242
|
+
}));
|
|
8243
|
+
}
|
|
8081
8244
|
// ─── /keys/notes — Timestamped notes on API keys ─────────────────────────
|
|
8082
8245
|
handleGetNotes(req, res) {
|
|
8083
8246
|
if (!this.checkAdmin(req, res))
|