@soulbatical/tetra-core 0.10.4 → 0.11.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 +78 -38
- package/dist/core/createApp.d.ts +1 -1
- package/dist/core/createApp.d.ts.map +1 -1
- package/dist/core/createApp.js +77 -2
- package/dist/core/createApp.js.map +1 -1
- package/dist/core/dualWriteProxy.d.ts +7 -2
- package/dist/core/dualWriteProxy.d.ts.map +1 -1
- package/dist/core/dualWriteProxy.js +16 -5
- package/dist/core/dualWriteProxy.js.map +1 -1
- package/dist/core/routeContext.d.ts +24 -0
- package/dist/core/routeContext.d.ts.map +1 -1
- package/dist/core/routeContext.js +31 -4
- package/dist/core/routeContext.js.map +1 -1
- package/dist/core/systemDb.d.ts +2 -2
- package/dist/core/systemDb.js +2 -2
- package/dist/generators/rls-checker.d.ts +1 -1
- package/dist/generators/rls-checker.js +1 -1
- package/dist/generators/rls-exec-sql.d.ts +1 -1
- package/dist/generators/rls-exec-sql.js +1 -1
- package/dist/generators/rpc/index.d.ts +1 -1
- package/dist/generators/rpc/index.js +1 -1
- package/dist/index.d.ts +3 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -32
- package/dist/index.js.map +1 -1
- package/dist/middleware/securityMiddleware.d.ts +1 -1
- package/dist/middleware/securityMiddleware.d.ts.map +1 -1
- package/dist/middleware/validateBody.d.ts.map +1 -1
- package/dist/middleware/validateBody.js +51 -8
- package/dist/middleware/validateBody.js.map +1 -1
- package/dist/shared/rfc7807ErrorResponse.d.ts +7 -0
- package/dist/shared/rfc7807ErrorResponse.d.ts.map +1 -1
- package/dist/shared/rfc7807ErrorResponse.js +19 -5
- package/dist/shared/rfc7807ErrorResponse.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +16 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +33 -77
- package/dist/affiliate.d.ts +0 -11
- package/dist/affiliate.d.ts.map +0 -1
- package/dist/affiliate.js +0 -10
- package/dist/affiliate.js.map +0 -1
- package/dist/billing.d.ts +0 -8
- package/dist/billing.d.ts.map +0 -1
- package/dist/billing.js +0 -7
- package/dist/billing.js.map +0 -1
- package/dist/email.d.ts +0 -9
- package/dist/email.d.ts.map +0 -1
- package/dist/email.js +0 -8
- package/dist/email.js.map +0 -1
- package/dist/generators/rls-exec-sql.sql +0 -57
- package/dist/generators.d.ts +0 -15
- package/dist/generators.d.ts.map +0 -1
- package/dist/generators.js +0 -12
- package/dist/generators.js.map +0 -1
- package/dist/mcp.d.ts +0 -8
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js +0 -7
- package/dist/mcp.js.map +0 -1
- package/dist/planner.d.ts +0 -8
- package/dist/planner.d.ts.map +0 -1
- package/dist/planner.js +0 -7
- package/dist/planner.js.map +0 -1
- package/dist/shared/affiliate/AffiliateAttributionService.d.ts +0 -47
- package/dist/shared/affiliate/AffiliateAttributionService.d.ts.map +0 -1
- package/dist/shared/affiliate/AffiliateAttributionService.js +0 -308
- package/dist/shared/affiliate/AffiliateAttributionService.js.map +0 -1
- package/dist/shared/affiliate/AffiliateClickService.d.ts +0 -35
- package/dist/shared/affiliate/AffiliateClickService.d.ts.map +0 -1
- package/dist/shared/affiliate/AffiliateClickService.js +0 -87
- package/dist/shared/affiliate/AffiliateClickService.js.map +0 -1
- package/dist/shared/affiliate/affiliateFeatureConfig.d.ts +0 -11
- package/dist/shared/affiliate/affiliateFeatureConfig.d.ts.map +0 -1
- package/dist/shared/affiliate/affiliateFeatureConfig.js +0 -242
- package/dist/shared/affiliate/affiliateFeatureConfig.js.map +0 -1
- package/dist/shared/affiliate/index.d.ts +0 -11
- package/dist/shared/affiliate/index.d.ts.map +0 -1
- package/dist/shared/affiliate/index.js +0 -13
- package/dist/shared/affiliate/index.js.map +0 -1
- package/dist/shared/affiliate/routes.d.ts +0 -87
- package/dist/shared/affiliate/routes.d.ts.map +0 -1
- package/dist/shared/affiliate/routes.js +0 -404
- package/dist/shared/affiliate/routes.js.map +0 -1
- package/dist/shared/affiliate/types.d.ts +0 -170
- package/dist/shared/affiliate/types.d.ts.map +0 -1
- package/dist/shared/affiliate/types.js +0 -11
- package/dist/shared/affiliate/types.js.map +0 -1
- package/dist/shared/billing/BillingService.d.ts +0 -56
- package/dist/shared/billing/BillingService.d.ts.map +0 -1
- package/dist/shared/billing/BillingService.js +0 -588
- package/dist/shared/billing/BillingService.js.map +0 -1
- package/dist/shared/billing/SeatBillingService.d.ts +0 -106
- package/dist/shared/billing/SeatBillingService.d.ts.map +0 -1
- package/dist/shared/billing/SeatBillingService.js +0 -292
- package/dist/shared/billing/SeatBillingService.js.map +0 -1
- package/dist/shared/billing/index.d.ts +0 -30
- package/dist/shared/billing/index.d.ts.map +0 -1
- package/dist/shared/billing/index.js +0 -27
- package/dist/shared/billing/index.js.map +0 -1
- package/dist/shared/billing/routes.d.ts +0 -45
- package/dist/shared/billing/routes.d.ts.map +0 -1
- package/dist/shared/billing/routes.js +0 -184
- package/dist/shared/billing/routes.js.map +0 -1
- package/dist/shared/billing/seat-pricing.d.ts +0 -53
- package/dist/shared/billing/seat-pricing.d.ts.map +0 -1
- package/dist/shared/billing/seat-pricing.js +0 -81
- package/dist/shared/billing/seat-pricing.js.map +0 -1
- package/dist/shared/billing/types.d.ts +0 -109
- package/dist/shared/billing/types.d.ts.map +0 -1
- package/dist/shared/billing/types.js +0 -8
- package/dist/shared/billing/types.js.map +0 -1
- package/dist/shared/email/EmailService.d.ts +0 -64
- package/dist/shared/email/EmailService.d.ts.map +0 -1
- package/dist/shared/email/EmailService.js +0 -300
- package/dist/shared/email/EmailService.js.map +0 -1
- package/dist/shared/email/adminRoutes.d.ts +0 -30
- package/dist/shared/email/adminRoutes.d.ts.map +0 -1
- package/dist/shared/email/adminRoutes.js +0 -227
- package/dist/shared/email/adminRoutes.js.map +0 -1
- package/dist/shared/email/gmail.d.ts +0 -208
- package/dist/shared/email/gmail.d.ts.map +0 -1
- package/dist/shared/email/gmail.js +0 -626
- package/dist/shared/email/gmail.js.map +0 -1
- package/dist/shared/email/index.d.ts +0 -15
- package/dist/shared/email/index.d.ts.map +0 -1
- package/dist/shared/email/index.js +0 -18
- package/dist/shared/email/index.js.map +0 -1
- package/dist/shared/email/mailgun.d.ts +0 -18
- package/dist/shared/email/mailgun.d.ts.map +0 -1
- package/dist/shared/email/mailgun.js +0 -76
- package/dist/shared/email/mailgun.js.map +0 -1
- package/dist/shared/email/sanitize.d.ts +0 -25
- package/dist/shared/email/sanitize.d.ts.map +0 -1
- package/dist/shared/email/sanitize.js +0 -39
- package/dist/shared/email/sanitize.js.map +0 -1
- package/dist/shared/email/smtp.d.ts +0 -20
- package/dist/shared/email/smtp.d.ts.map +0 -1
- package/dist/shared/email/smtp.js +0 -53
- package/dist/shared/email/smtp.js.map +0 -1
- package/dist/shared/email/types.d.ts +0 -113
- package/dist/shared/email/types.d.ts.map +0 -1
- package/dist/shared/email/types.js +0 -7
- package/dist/shared/email/types.js.map +0 -1
- package/dist/shared/email/webhookRoutes.d.ts +0 -29
- package/dist/shared/email/webhookRoutes.d.ts.map +0 -1
- package/dist/shared/email/webhookRoutes.js +0 -125
- package/dist/shared/email/webhookRoutes.js.map +0 -1
- package/dist/shared/mcp/index.d.ts +0 -51
- package/dist/shared/mcp/index.d.ts.map +0 -1
- package/dist/shared/mcp/index.js +0 -51
- package/dist/shared/mcp/index.js.map +0 -1
- package/dist/shared/mcp/mcp-auth-routes.d.ts +0 -26
- package/dist/shared/mcp/mcp-auth-routes.d.ts.map +0 -1
- package/dist/shared/mcp/mcp-auth-routes.js +0 -141
- package/dist/shared/mcp/mcp-auth-routes.js.map +0 -1
- package/dist/shared/mcp/mcp-db.d.ts +0 -99
- package/dist/shared/mcp/mcp-db.d.ts.map +0 -1
- package/dist/shared/mcp/mcp-db.js +0 -106
- package/dist/shared/mcp/mcp-db.js.map +0 -1
- package/dist/shared/mcp/mcp-routes.d.ts +0 -29
- package/dist/shared/mcp/mcp-routes.d.ts.map +0 -1
- package/dist/shared/mcp/mcp-routes.js +0 -171
- package/dist/shared/mcp/mcp-routes.js.map +0 -1
- package/dist/shared/mcp/mcp-tokens-routes.d.ts +0 -35
- package/dist/shared/mcp/mcp-tokens-routes.d.ts.map +0 -1
- package/dist/shared/mcp/mcp-tokens-routes.js +0 -94
- package/dist/shared/mcp/mcp-tokens-routes.js.map +0 -1
- package/dist/shared/mcp/mcp-usage-routes.d.ts +0 -17
- package/dist/shared/mcp/mcp-usage-routes.d.ts.map +0 -1
- package/dist/shared/mcp/mcp-usage-routes.js +0 -81
- package/dist/shared/mcp/mcp-usage-routes.js.map +0 -1
- package/dist/shared/mcp/tenant-context.d.ts +0 -59
- package/dist/shared/mcp/tenant-context.d.ts.map +0 -1
- package/dist/shared/mcp/tenant-context.js +0 -136
- package/dist/shared/mcp/tenant-context.js.map +0 -1
- package/dist/shared/mcp/types.d.ts +0 -74
- package/dist/shared/mcp/types.d.ts.map +0 -1
- package/dist/shared/mcp/types.js +0 -7
- package/dist/shared/mcp/types.js.map +0 -1
- package/dist/shared/planner/GoogleCalendarService.d.ts +0 -137
- package/dist/shared/planner/GoogleCalendarService.d.ts.map +0 -1
- package/dist/shared/planner/GoogleCalendarService.js +0 -525
- package/dist/shared/planner/GoogleCalendarService.js.map +0 -1
- package/dist/shared/planner/PlannerService.d.ts +0 -264
- package/dist/shared/planner/PlannerService.d.ts.map +0 -1
- package/dist/shared/planner/PlannerService.js +0 -1393
- package/dist/shared/planner/PlannerService.js.map +0 -1
- package/dist/shared/planner/index.d.ts +0 -37
- package/dist/shared/planner/index.d.ts.map +0 -1
- package/dist/shared/planner/index.js +0 -35
- package/dist/shared/planner/index.js.map +0 -1
- package/dist/shared/planner/intervals.d.ts +0 -60
- package/dist/shared/planner/intervals.d.ts.map +0 -1
- package/dist/shared/planner/intervals.js +0 -141
- package/dist/shared/planner/intervals.js.map +0 -1
- package/dist/shared/planner/routes.d.ts +0 -69
- package/dist/shared/planner/routes.d.ts.map +0 -1
- package/dist/shared/planner/routes.js +0 -770
- package/dist/shared/planner/routes.js.map +0 -1
- package/dist/shared/planner/types.d.ts +0 -328
- package/dist/shared/planner/types.d.ts.map +0 -1
- package/dist/shared/planner/types.js +0 -9
- package/dist/shared/planner/types.js.map +0 -1
- package/dist/shared/storage/ImageProcessingService.d.ts +0 -32
- package/dist/shared/storage/ImageProcessingService.d.ts.map +0 -1
- package/dist/shared/storage/ImageProcessingService.js +0 -127
- package/dist/shared/storage/ImageProcessingService.js.map +0 -1
- package/dist/shared/storage/StorageProxyService.d.ts +0 -47
- package/dist/shared/storage/StorageProxyService.d.ts.map +0 -1
- package/dist/shared/storage/StorageProxyService.js +0 -196
- package/dist/shared/storage/StorageProxyService.js.map +0 -1
- package/dist/shared/storage/StorageUploadService.d.ts +0 -126
- package/dist/shared/storage/StorageUploadService.d.ts.map +0 -1
- package/dist/shared/storage/StorageUploadService.js +0 -206
- package/dist/shared/storage/StorageUploadService.js.map +0 -1
- package/dist/shared/storage/creative-urls.d.ts +0 -14
- package/dist/shared/storage/creative-urls.d.ts.map +0 -1
- package/dist/shared/storage/creative-urls.js +0 -30
- package/dist/shared/storage/creative-urls.js.map +0 -1
- package/dist/shared/storage/index.d.ts +0 -28
- package/dist/shared/storage/index.d.ts.map +0 -1
- package/dist/shared/storage/index.js +0 -27
- package/dist/shared/storage/index.js.map +0 -1
- package/dist/shared/storage/routes.d.ts +0 -42
- package/dist/shared/storage/routes.d.ts.map +0 -1
- package/dist/shared/storage/routes.js +0 -160
- package/dist/shared/storage/routes.js.map +0 -1
- package/dist/shared/storage/types.d.ts +0 -53
- package/dist/shared/storage/types.d.ts.map +0 -1
- package/dist/shared/storage/types.js +0 -2
- package/dist/shared/storage/types.js.map +0 -1
- package/dist/shared/telegram/index.d.ts +0 -4
- package/dist/shared/telegram/index.d.ts.map +0 -1
- package/dist/shared/telegram/index.js +0 -3
- package/dist/shared/telegram/index.js.map +0 -1
- package/dist/shared/telegram/routes.d.ts +0 -43
- package/dist/shared/telegram/routes.d.ts.map +0 -1
- package/dist/shared/telegram/routes.js +0 -868
- package/dist/shared/telegram/routes.js.map +0 -1
- package/dist/shared/telegram/types.d.ts +0 -168
- package/dist/shared/telegram/types.d.ts.map +0 -1
- package/dist/shared/telegram/types.js +0 -7
- package/dist/shared/telegram/types.js.map +0 -1
- package/dist/shared/telegram/utils.d.ts +0 -44
- package/dist/shared/telegram/utils.d.ts.map +0 -1
- package/dist/shared/telegram/utils.js +0 -121
- package/dist/shared/telegram/utils.js.map +0 -1
- package/dist/storage.d.ts +0 -9
- package/dist/storage.d.ts.map +0 -1
- package/dist/storage.js +0 -8
- package/dist/storage.js.map +0 -1
- package/dist/telemetry.d.ts +0 -9
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -8
- package/dist/telemetry.js.map +0 -1
- package/scripts/postinstall.js +0 -79
- package/src/shared/affiliate/migrations/001_create_affiliates.sql +0 -49
- package/src/shared/affiliate/migrations/002_create_affiliate_commissions.sql +0 -31
- package/src/shared/affiliate/migrations/003_create_affiliate_clicks.sql +0 -26
- package/src/shared/affiliate/migrations/004_create_affiliate_payments.sql +0 -34
- package/src/shared/affiliate/migrations/005_create_affiliate_tier_history.sql +0 -19
- package/src/shared/affiliate/migrations/006_create_affiliate_rpc_functions.sql +0 -209
- package/src/shared/affiliate/migrations/007_create_affiliate_rls_policies.sql +0 -123
- package/src/shared/billing/migrations/00000000000001_billing.sql +0 -114
- package/src/shared/email/migrations/000_create_email_logs.sql +0 -27
- package/src/shared/email/migrations/001_create_email_templates.sql +0 -27
- package/src/shared/email/migrations/002_add_rls_baseline_policies.sql +0 -37
- package/src/shared/email/migrations/003_create_gmail_accounts.sql +0 -82
- package/src/shared/email/migrations/004_add_email_logs_tracking_columns.sql +0 -15
- package/src/shared/mcp/migrations/001_mcp_api_tokens.sql +0 -21
- package/src/shared/mcp/migrations/002_mcp_audit_log.sql +0 -16
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-routes.js","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Token Management Routes — Factory
|
|
3
|
-
*
|
|
4
|
-
* CRUD for API tokens. All endpoints require authenticated user (Supabase JWT).
|
|
5
|
-
* Tokens are scoped to the user's active organization.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { addMcpTokenRoutes } from '@soulbatical/tetra-core';
|
|
10
|
-
*
|
|
11
|
-
* const mcpTokensRouter = Router();
|
|
12
|
-
* addMcpTokenRoutes(mcpTokensRouter, { tokenPrefix: 'vincifox_' });
|
|
13
|
-
* app.use('/api/mcp-tokens', mcpTokensRouter);
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
import type { Router } from 'express';
|
|
17
|
-
export interface McpToolDoc {
|
|
18
|
-
/** Tool name as used in MCP calls */
|
|
19
|
-
name: string;
|
|
20
|
-
/** Human-readable description */
|
|
21
|
-
description?: string;
|
|
22
|
-
/** Category for grouping (e.g. "read", "write", "admin") */
|
|
23
|
-
category?: string;
|
|
24
|
-
}
|
|
25
|
-
export interface McpTokenRoutesConfig {
|
|
26
|
-
tokenPrefix: string;
|
|
27
|
-
/**
|
|
28
|
-
* Available MCP tools for the documentation endpoint.
|
|
29
|
-
* If provided, GET /tools returns this list so the frontend can display it.
|
|
30
|
-
* Can be a static array or an async function that resolves tool definitions.
|
|
31
|
-
*/
|
|
32
|
-
tools?: McpToolDoc[] | (() => Promise<McpToolDoc[]> | McpToolDoc[]);
|
|
33
|
-
}
|
|
34
|
-
export declare function addMcpTokenRoutes(router: Router, config: McpTokenRoutesConfig): void;
|
|
35
|
-
//# sourceMappingURL=mcp-tokens-routes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tokens-routes.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-tokens-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAKzD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,CAAC;CACrE;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAkFpF"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Token Management Routes — Factory
|
|
3
|
-
*
|
|
4
|
-
* CRUD for API tokens. All endpoints require authenticated user (Supabase JWT).
|
|
5
|
-
* Tokens are scoped to the user's active organization.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { addMcpTokenRoutes } from '@soulbatical/tetra-core';
|
|
10
|
-
*
|
|
11
|
-
* const mcpTokensRouter = Router();
|
|
12
|
-
* addMcpTokenRoutes(mcpTokensRouter, { tokenPrefix: 'vincifox_' });
|
|
13
|
-
* app.use('/api/mcp-tokens', mcpTokensRouter);
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
import { authenticateToken } from '../../middleware/authMiddleware.js';
|
|
17
|
-
import { systemDB } from '../../core/systemDb.js';
|
|
18
|
-
import { generateMcpApiToken } from './tenant-context.js';
|
|
19
|
-
function getOrgId(req) {
|
|
20
|
-
const user = req.user;
|
|
21
|
-
return user?.activeOrganizationId || user?.active_organization_id || user?.organizationId || null;
|
|
22
|
-
}
|
|
23
|
-
export function addMcpTokenRoutes(router, config) {
|
|
24
|
-
const { tokenPrefix, tools: toolsConfig } = config;
|
|
25
|
-
// GET /tools — List available MCP tools (public, no auth needed)
|
|
26
|
-
router.get('/tools', async (_req, res) => {
|
|
27
|
-
if (!toolsConfig) {
|
|
28
|
-
res.json({ tools: [] });
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const tools = typeof toolsConfig === 'function' ? await toolsConfig() : toolsConfig;
|
|
32
|
-
res.json({ tools });
|
|
33
|
-
});
|
|
34
|
-
// Lazy DB: only create client when first request arrives (not at import/mount time)
|
|
35
|
-
let _db = null;
|
|
36
|
-
const db = () => { if (!_db)
|
|
37
|
-
_db = systemDB('mcp-tokens'); return _db; };
|
|
38
|
-
// GET / — List all tokens for the active organization
|
|
39
|
-
router.get('/', authenticateToken, async (req, res) => {
|
|
40
|
-
const orgId = getOrgId(req);
|
|
41
|
-
if (!orgId) {
|
|
42
|
-
res.status(400).json({ error: 'No active organization' });
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const { data, error } = await db()
|
|
46
|
-
.from('mcp_api_tokens')
|
|
47
|
-
.select('id, name, is_active, last_used_at, created_at, revoked_at, created_by')
|
|
48
|
-
.eq('organization_id', orgId)
|
|
49
|
-
.order('created_at', { ascending: false });
|
|
50
|
-
if (error) {
|
|
51
|
-
res.status(500).json({ error: 'Failed to list tokens' });
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
res.json({ tokens: data || [] });
|
|
55
|
-
});
|
|
56
|
-
// POST / — Generate a new API token
|
|
57
|
-
router.post('/', authenticateToken, async (req, res) => {
|
|
58
|
-
const orgId = getOrgId(req);
|
|
59
|
-
const user = req.user;
|
|
60
|
-
if (!orgId) {
|
|
61
|
-
res.status(400).json({ error: 'No active organization' });
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const { name } = req.body || {};
|
|
65
|
-
const tokenName = name || `API Token (${new Date().toISOString().slice(0, 10)})`;
|
|
66
|
-
try {
|
|
67
|
-
const token = await generateMcpApiToken(orgId, tokenName, tokenPrefix, user.id);
|
|
68
|
-
res.json({ token, name: tokenName });
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
res.status(500).json({ error: 'Failed to generate token' });
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
// DELETE /:tokenId — Revoke a token
|
|
75
|
-
router.delete('/:tokenId', authenticateToken, async (req, res) => {
|
|
76
|
-
const orgId = getOrgId(req);
|
|
77
|
-
if (!orgId) {
|
|
78
|
-
res.status(400).json({ error: 'No active organization' });
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const tokenId = Array.isArray(req.params.tokenId) ? req.params.tokenId[0] : req.params.tokenId;
|
|
82
|
-
const { error } = await db()
|
|
83
|
-
.from('mcp_api_tokens')
|
|
84
|
-
.update({ is_active: false, revoked_at: new Date().toISOString() })
|
|
85
|
-
.eq('id', tokenId)
|
|
86
|
-
.eq('organization_id', orgId);
|
|
87
|
-
if (error) {
|
|
88
|
-
res.status(500).json({ error: 'Failed to revoke token' });
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
res.json({ success: true });
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=mcp-tokens-routes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tokens-routes.js","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-tokens-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Usage Routes — Factory
|
|
3
|
-
*
|
|
4
|
-
* Returns audit log stats for the active organization.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* ```typescript
|
|
8
|
-
* import { addMcpUsageRoutes } from '@soulbatical/tetra-core';
|
|
9
|
-
*
|
|
10
|
-
* const mcpUsageRouter = Router();
|
|
11
|
-
* addMcpUsageRoutes(mcpUsageRouter);
|
|
12
|
-
* app.use('/api/mcp-usage', mcpUsageRouter);
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
import type { Router } from 'express';
|
|
16
|
-
export declare function addMcpUsageRoutes(router: Router): void;
|
|
17
|
-
//# sourceMappingURL=mcp-usage-routes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-usage-routes.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-usage-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AASzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAgEtD"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Usage Routes — Factory
|
|
3
|
-
*
|
|
4
|
-
* Returns audit log stats for the active organization.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* ```typescript
|
|
8
|
-
* import { addMcpUsageRoutes } from '@soulbatical/tetra-core';
|
|
9
|
-
*
|
|
10
|
-
* const mcpUsageRouter = Router();
|
|
11
|
-
* addMcpUsageRoutes(mcpUsageRouter);
|
|
12
|
-
* app.use('/api/mcp-usage', mcpUsageRouter);
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
import { authenticateToken } from '../../middleware/authMiddleware.js';
|
|
16
|
-
import { systemDB } from '../../core/systemDb.js';
|
|
17
|
-
function getOrgId(req) {
|
|
18
|
-
const user = req.user;
|
|
19
|
-
return user?.activeOrganizationId || user?.active_organization_id || user?.organizationId || null;
|
|
20
|
-
}
|
|
21
|
-
export function addMcpUsageRoutes(router) {
|
|
22
|
-
// Lazy DB: only create client when first request arrives (not at mount time)
|
|
23
|
-
let _db = null;
|
|
24
|
-
const db = () => { if (!_db)
|
|
25
|
-
_db = systemDB('mcp-usage'); return _db; };
|
|
26
|
-
// GET / — Usage stats (total calls, by tool, daily trend)
|
|
27
|
-
// Query: ?period=7d|30d|90d
|
|
28
|
-
router.get('/', authenticateToken, async (req, res) => {
|
|
29
|
-
const orgId = getOrgId(req);
|
|
30
|
-
if (!orgId) {
|
|
31
|
-
res.status(400).json({ error: 'No active organization' });
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const period = req.query.period || '30d';
|
|
35
|
-
const days = period === '7d' ? 7 : period === '90d' ? 90 : 30;
|
|
36
|
-
const since = new Date();
|
|
37
|
-
since.setDate(since.getDate() - days);
|
|
38
|
-
try {
|
|
39
|
-
const { count: totalCalls } = await db()
|
|
40
|
-
.from('mcp_audit_log')
|
|
41
|
-
.select('id', { count: 'exact', head: true })
|
|
42
|
-
.eq('organization_id', orgId)
|
|
43
|
-
.gte('created_at', since.toISOString());
|
|
44
|
-
const { data: logs } = await db()
|
|
45
|
-
.from('mcp_audit_log')
|
|
46
|
-
.select('tool_name, created_at')
|
|
47
|
-
.eq('organization_id', orgId)
|
|
48
|
-
.gte('created_at', since.toISOString())
|
|
49
|
-
.order('created_at', { ascending: true });
|
|
50
|
-
// Aggregate
|
|
51
|
-
const byTool = {};
|
|
52
|
-
const byDay = {};
|
|
53
|
-
for (const log of logs || []) {
|
|
54
|
-
byTool[log.tool_name] = (byTool[log.tool_name] || 0) + 1;
|
|
55
|
-
const day = log.created_at.slice(0, 10);
|
|
56
|
-
byDay[day] = (byDay[day] || 0) + 1;
|
|
57
|
-
}
|
|
58
|
-
// Fill day gaps
|
|
59
|
-
const trend = [];
|
|
60
|
-
const current = new Date(since);
|
|
61
|
-
const now = new Date();
|
|
62
|
-
while (current <= now) {
|
|
63
|
-
const day = current.toISOString().slice(0, 10);
|
|
64
|
-
trend.push({ date: day, count: byDay[day] || 0 });
|
|
65
|
-
current.setDate(current.getDate() + 1);
|
|
66
|
-
}
|
|
67
|
-
res.json({
|
|
68
|
-
period,
|
|
69
|
-
total_calls: totalCalls || 0,
|
|
70
|
-
by_tool: Object.entries(byTool)
|
|
71
|
-
.map(([tool, count]) => ({ tool, count }))
|
|
72
|
-
.sort((a, b) => b.count - a.count),
|
|
73
|
-
trend,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
catch (err) {
|
|
77
|
-
res.status(500).json({ error: 'Failed to load usage stats' });
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=mcp-usage-routes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-usage-routes.js","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-usage-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Tenant Context
|
|
3
|
-
*
|
|
4
|
-
* Provides:
|
|
5
|
-
* - Token validation (Bearer token → organization_id)
|
|
6
|
-
* - Request-scoped tenant context via AsyncLocalStorage
|
|
7
|
-
* - Token generation for admin use
|
|
8
|
-
*
|
|
9
|
-
* Works with any project that has the mcp_api_tokens table.
|
|
10
|
-
*/
|
|
11
|
-
import type { TenantContext } from './types.js';
|
|
12
|
-
/**
|
|
13
|
-
* Get the current tenant's organization_id.
|
|
14
|
-
* Returns undefined when running in local stdio mode (no tenant context).
|
|
15
|
-
*/
|
|
16
|
-
export declare function getMcpOrganizationId(): string | undefined;
|
|
17
|
-
/**
|
|
18
|
-
* Get the full tenant context (org + token).
|
|
19
|
-
*/
|
|
20
|
-
export declare function getMcpTenantContext(): TenantContext | undefined;
|
|
21
|
-
/**
|
|
22
|
-
* Run a function within a tenant context.
|
|
23
|
-
* The context is propagated through async calls via AsyncLocalStorage.
|
|
24
|
-
*/
|
|
25
|
-
export declare function runWithMcpTenant<T>(ctx: TenantContext, fn: () => T): T;
|
|
26
|
-
/**
|
|
27
|
-
* Validate a Bearer token and return the tenant context.
|
|
28
|
-
* Throws if token is invalid, revoked, or inactive.
|
|
29
|
-
*
|
|
30
|
-
* @param token - The raw API token (e.g. "vincifox_abc123...")
|
|
31
|
-
* @param expectedPrefix - Expected token prefix (e.g. "vincifox_")
|
|
32
|
-
*/
|
|
33
|
-
export declare function validateMcpApiToken(token: string, expectedPrefix: string): Promise<TenantContext>;
|
|
34
|
-
/**
|
|
35
|
-
* Options for generating an MCP API token.
|
|
36
|
-
*/
|
|
37
|
-
export interface GenerateMcpApiTokenOptions {
|
|
38
|
-
organizationId: string;
|
|
39
|
-
name: string;
|
|
40
|
-
prefix: string;
|
|
41
|
-
createdBy?: string;
|
|
42
|
-
accessLevel?: string;
|
|
43
|
-
userId?: string;
|
|
44
|
-
permissions?: string[];
|
|
45
|
-
expiresAt?: string;
|
|
46
|
-
rateLimit?: number;
|
|
47
|
-
keyPrefix?: string;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Generate a new API token for an organization.
|
|
51
|
-
* Returns the plaintext token (only shown once — stored as SHA-256 hash).
|
|
52
|
-
*
|
|
53
|
-
* @param organizationIdOrOptions - The organization UUID (legacy) or full options object
|
|
54
|
-
* @param name - Human-readable token name (legacy)
|
|
55
|
-
* @param prefix - Token prefix (e.g. "vincifox_") (legacy)
|
|
56
|
-
* @param createdBy - Optional user UUID who created the token (legacy)
|
|
57
|
-
*/
|
|
58
|
-
export declare function generateMcpApiToken(organizationIdOrOptions: string | GenerateMcpApiTokenOptions, name?: string, prefix?: string, createdBy?: string): Promise<string>;
|
|
59
|
-
//# sourceMappingURL=tenant-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-context.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/tenant-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,GAAG,SAAS,CAE/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEtE;AA4BD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,CAAC,CA4CxB;AAID;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,uBAAuB,EAAE,MAAM,GAAG,0BAA0B,EAC5D,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Tenant Context
|
|
3
|
-
*
|
|
4
|
-
* Provides:
|
|
5
|
-
* - Token validation (Bearer token → organization_id)
|
|
6
|
-
* - Request-scoped tenant context via AsyncLocalStorage
|
|
7
|
-
* - Token generation for admin use
|
|
8
|
-
*
|
|
9
|
-
* Works with any project that has the mcp_api_tokens table.
|
|
10
|
-
*/
|
|
11
|
-
import { createHash, randomBytes } from 'node:crypto';
|
|
12
|
-
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
13
|
-
import { createClient } from '@supabase/supabase-js';
|
|
14
|
-
// ── AsyncLocalStorage for request-scoped context ──
|
|
15
|
-
const tenantStorage = new AsyncLocalStorage();
|
|
16
|
-
/**
|
|
17
|
-
* Get the current tenant's organization_id.
|
|
18
|
-
* Returns undefined when running in local stdio mode (no tenant context).
|
|
19
|
-
*/
|
|
20
|
-
export function getMcpOrganizationId() {
|
|
21
|
-
return tenantStorage.getStore()?.organizationId;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get the full tenant context (org + token).
|
|
25
|
-
*/
|
|
26
|
-
export function getMcpTenantContext() {
|
|
27
|
-
return tenantStorage.getStore();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Run a function within a tenant context.
|
|
31
|
-
* The context is propagated through async calls via AsyncLocalStorage.
|
|
32
|
-
*/
|
|
33
|
-
export function runWithMcpTenant(ctx, fn) {
|
|
34
|
-
return tenantStorage.run(ctx, fn);
|
|
35
|
-
}
|
|
36
|
-
// ── DB client ──
|
|
37
|
-
let db = null;
|
|
38
|
-
function getDb() {
|
|
39
|
-
if (!db) {
|
|
40
|
-
const url = process.env.SUPABASE_URL;
|
|
41
|
-
const key = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
42
|
-
if (!url || !key) {
|
|
43
|
-
throw new Error('SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY required for MCP tenant auth');
|
|
44
|
-
}
|
|
45
|
-
db = createClient(url, key, {
|
|
46
|
-
auth: { autoRefreshToken: false, persistSession: false },
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
return db;
|
|
50
|
-
}
|
|
51
|
-
// ── Token hashing ──
|
|
52
|
-
function hashToken(token) {
|
|
53
|
-
return createHash('sha256').update(token).digest('hex');
|
|
54
|
-
}
|
|
55
|
-
// ── Token validation ──
|
|
56
|
-
/**
|
|
57
|
-
* Validate a Bearer token and return the tenant context.
|
|
58
|
-
* Throws if token is invalid, revoked, or inactive.
|
|
59
|
-
*
|
|
60
|
-
* @param token - The raw API token (e.g. "vincifox_abc123...")
|
|
61
|
-
* @param expectedPrefix - Expected token prefix (e.g. "vincifox_")
|
|
62
|
-
*/
|
|
63
|
-
export async function validateMcpApiToken(token, expectedPrefix) {
|
|
64
|
-
if (!token.startsWith(expectedPrefix)) {
|
|
65
|
-
throw new Error('Invalid token format');
|
|
66
|
-
}
|
|
67
|
-
const hash = hashToken(token);
|
|
68
|
-
const supabase = getDb();
|
|
69
|
-
const { data, error } = await supabase
|
|
70
|
-
.from('mcp_api_tokens')
|
|
71
|
-
.select('id, organization_id, is_active, revoked_at, access_level, user_id, permissions, expires_at, rate_limit')
|
|
72
|
-
.eq('token_hash', hash)
|
|
73
|
-
.single();
|
|
74
|
-
if (error || !data) {
|
|
75
|
-
throw new Error('Invalid API token');
|
|
76
|
-
}
|
|
77
|
-
if (!data.is_active || data.revoked_at) {
|
|
78
|
-
throw new Error('Token has been revoked');
|
|
79
|
-
}
|
|
80
|
-
// Check expiration
|
|
81
|
-
if (data.expires_at && new Date(data.expires_at) < new Date()) {
|
|
82
|
-
throw new Error('Token has expired');
|
|
83
|
-
}
|
|
84
|
-
// Update last_used_at (fire and forget)
|
|
85
|
-
supabase
|
|
86
|
-
.from('mcp_api_tokens')
|
|
87
|
-
.update({ last_used_at: new Date().toISOString() })
|
|
88
|
-
.eq('id', data.id)
|
|
89
|
-
.then(() => { });
|
|
90
|
-
const accessLevel = data.access_level || 'admin';
|
|
91
|
-
return {
|
|
92
|
-
organizationId: data.organization_id,
|
|
93
|
-
tokenId: data.id,
|
|
94
|
-
accessLevel,
|
|
95
|
-
isSuperAdmin: accessLevel === 'superadmin',
|
|
96
|
-
userId: data.user_id || null,
|
|
97
|
-
permissions: Array.isArray(data.permissions) ? data.permissions : [],
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Generate a new API token for an organization.
|
|
102
|
-
* Returns the plaintext token (only shown once — stored as SHA-256 hash).
|
|
103
|
-
*
|
|
104
|
-
* @param organizationIdOrOptions - The organization UUID (legacy) or full options object
|
|
105
|
-
* @param name - Human-readable token name (legacy)
|
|
106
|
-
* @param prefix - Token prefix (e.g. "vincifox_") (legacy)
|
|
107
|
-
* @param createdBy - Optional user UUID who created the token (legacy)
|
|
108
|
-
*/
|
|
109
|
-
export async function generateMcpApiToken(organizationIdOrOptions, name, prefix, createdBy) {
|
|
110
|
-
// Support both legacy positional args and new options object
|
|
111
|
-
const opts = typeof organizationIdOrOptions === 'string'
|
|
112
|
-
? { organizationId: organizationIdOrOptions, name: name, prefix: prefix, createdBy }
|
|
113
|
-
: organizationIdOrOptions;
|
|
114
|
-
const hex = randomBytes(32).toString('hex');
|
|
115
|
-
const token = `${opts.prefix}${hex}`;
|
|
116
|
-
const hash = hashToken(token);
|
|
117
|
-
const tokenKeyPrefix = opts.keyPrefix || token.substring(0, 12);
|
|
118
|
-
const supabase = getDb();
|
|
119
|
-
const { error } = await supabase.from('mcp_api_tokens').insert({
|
|
120
|
-
organization_id: opts.organizationId,
|
|
121
|
-
token_hash: hash,
|
|
122
|
-
name: opts.name,
|
|
123
|
-
created_by: opts.createdBy || null,
|
|
124
|
-
access_level: opts.accessLevel || 'admin',
|
|
125
|
-
user_id: opts.userId || null,
|
|
126
|
-
permissions: opts.permissions || [],
|
|
127
|
-
expires_at: opts.expiresAt || null,
|
|
128
|
-
rate_limit: opts.rateLimit || 60,
|
|
129
|
-
key_prefix: tokenKeyPrefix,
|
|
130
|
-
});
|
|
131
|
-
if (error) {
|
|
132
|
-
throw new Error(`Failed to create token: ${error.message}`);
|
|
133
|
-
}
|
|
134
|
-
return token;
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=tenant-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-context.js","sourceRoot":"","sources":["../../../src/shared/mcp/tenant-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Online Module — Types
|
|
3
|
-
*
|
|
4
|
-
* Shared types for MCP StreamableHTTP endpoints.
|
|
5
|
-
*/
|
|
6
|
-
export interface McpToolDefinition {
|
|
7
|
-
name: string;
|
|
8
|
-
description?: string;
|
|
9
|
-
inputSchema: {
|
|
10
|
-
type: 'object';
|
|
11
|
-
properties?: Record<string, unknown>;
|
|
12
|
-
required?: string[];
|
|
13
|
-
[key: string]: unknown;
|
|
14
|
-
};
|
|
15
|
-
[key: string]: unknown;
|
|
16
|
-
}
|
|
17
|
-
export interface McpToolResult {
|
|
18
|
-
content: Array<{
|
|
19
|
-
type: 'text';
|
|
20
|
-
text: string;
|
|
21
|
-
}>;
|
|
22
|
-
isError?: boolean;
|
|
23
|
-
[key: string]: unknown;
|
|
24
|
-
}
|
|
25
|
-
export type McpToolHandler = (args: Record<string, unknown>) => Promise<McpToolResult>;
|
|
26
|
-
export interface TenantContext {
|
|
27
|
-
organizationId: string;
|
|
28
|
-
tokenId: string;
|
|
29
|
-
accessLevel?: string;
|
|
30
|
-
isSuperAdmin?: boolean;
|
|
31
|
-
userId?: string | null;
|
|
32
|
-
permissions?: string[];
|
|
33
|
-
}
|
|
34
|
-
export interface McpRoutesConfig {
|
|
35
|
-
/** Tool definitions to expose via the MCP endpoint */
|
|
36
|
-
tools: McpToolDefinition[];
|
|
37
|
-
/** Map of tool name → handler function */
|
|
38
|
-
handlers: Record<string, McpToolHandler>;
|
|
39
|
-
/** Token prefix for validation, e.g. "vincifox_" or "snelstart_" */
|
|
40
|
-
tokenPrefix: string;
|
|
41
|
-
/** Rate limit: max requests per window (default: 100) */
|
|
42
|
-
rateLimitMax?: number;
|
|
43
|
-
/** Rate limit: window in ms (default: 15 minutes) */
|
|
44
|
-
rateLimitWindowMs?: number;
|
|
45
|
-
/** Enable audit logging to mcp_audit_log table (default: true) */
|
|
46
|
-
enableAuditLog?: boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Custom authentication handler. If provided, replaces the default
|
|
49
|
-
* mcp_api_tokens table lookup. Must return a TenantContext or throw.
|
|
50
|
-
*
|
|
51
|
-
* Use this when your project has its own API key system (e.g. AgentRook's
|
|
52
|
-
* access-level-based keys, or SnelStart's credential-loading tokens).
|
|
53
|
-
*
|
|
54
|
-
* The raw Bearer token string is passed in (without "Bearer " prefix).
|
|
55
|
-
*/
|
|
56
|
-
onAuthenticate?: (token: string) => Promise<TenantContext>;
|
|
57
|
-
}
|
|
58
|
-
export interface McpAuthRoutesConfig {
|
|
59
|
-
/** Token prefix for generated tokens, e.g. "vincifox_" */
|
|
60
|
-
tokenPrefix: string;
|
|
61
|
-
/** Frontend URL for login redirect (falls back to FRONTEND_URL env or localhost:3000) */
|
|
62
|
-
frontendUrl?: string;
|
|
63
|
-
/** Path on the frontend where the approval page lives (default: "/app/settings/api-tokens") */
|
|
64
|
-
frontendApprovalPath?: string;
|
|
65
|
-
/** Default device name when not provided (default: "Claude Code") */
|
|
66
|
-
defaultDeviceName?: string;
|
|
67
|
-
/** Request expiry in seconds (default: 300 = 5 minutes) */
|
|
68
|
-
expirySeconds?: number;
|
|
69
|
-
}
|
|
70
|
-
export interface McpTokenRoutesConfig {
|
|
71
|
-
}
|
|
72
|
-
export interface McpUsageRoutesConfig {
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAIvF,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAID,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACzC,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;CAEpC;AAED,MAAM,WAAW,oBAAoB;CAEpC"}
|
package/dist/shared/mcp/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|