@soulbatical/tetra-core 0.1.23 → 0.1.25
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/dist/core/systemDb.d.ts +27 -21
- package/dist/core/systemDb.d.ts.map +1 -1
- package/dist/core/systemDb.js +29 -41
- package/dist/core/systemDb.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/mcp/index.d.ts +48 -0
- package/dist/shared/mcp/index.d.ts.map +1 -0
- package/dist/shared/mcp/index.js +49 -0
- package/dist/shared/mcp/index.js.map +1 -0
- package/dist/shared/mcp/mcp-auth-routes.d.ts +26 -0
- package/dist/shared/mcp/mcp-auth-routes.d.ts.map +1 -0
- package/dist/shared/mcp/mcp-auth-routes.js +138 -0
- package/dist/shared/mcp/mcp-auth-routes.js.map +1 -0
- package/dist/shared/mcp/mcp-routes.d.ts +29 -0
- package/dist/shared/mcp/mcp-routes.d.ts.map +1 -0
- package/dist/shared/mcp/mcp-routes.js +168 -0
- package/dist/shared/mcp/mcp-routes.js.map +1 -0
- package/dist/shared/mcp/mcp-tokens-routes.d.ts +21 -0
- package/dist/shared/mcp/mcp-tokens-routes.d.ts.map +1 -0
- package/dist/shared/mcp/mcp-tokens-routes.js +82 -0
- package/dist/shared/mcp/mcp-tokens-routes.js.map +1 -0
- package/dist/shared/mcp/mcp-usage-routes.d.ts +17 -0
- package/dist/shared/mcp/mcp-usage-routes.d.ts.map +1 -0
- package/dist/shared/mcp/mcp-usage-routes.js +78 -0
- package/dist/shared/mcp/mcp-usage-routes.js.map +1 -0
- package/dist/shared/mcp/tenant-context.d.ts +44 -0
- package/dist/shared/mcp/tenant-context.d.ts.map +1 -0
- package/dist/shared/mcp/tenant-context.js +117 -0
- package/dist/shared/mcp/tenant-context.js.map +1 -0
- package/dist/shared/mcp/types.d.ts +58 -0
- package/dist/shared/mcp/types.d.ts.map +1 -0
- package/dist/shared/mcp/types.js +7 -0
- package/dist/shared/mcp/types.js.map +1 -0
- package/package.json +9 -3
- package/src/shared/mcp/migrations/001_mcp_api_tokens.sql +21 -0
- package/src/shared/mcp/migrations/002_mcp_audit_log.sql +16 -0
package/dist/core/systemDb.d.ts
CHANGED
|
@@ -1,34 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System Database Client — Service Role Key (bypasses RLS)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* full database access without user context.
|
|
4
|
+
* ⚠️ SECURITY: This bypasses ALL Row Level Security policies.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
*
|
|
6
|
+
* ONLY use for operations where NO user context exists:
|
|
7
|
+
* - Cron jobs (background timers)
|
|
8
|
+
* - External webhook handlers (Mollie, Stripe, ActiveCampaign)
|
|
9
|
+
* - OAuth callbacks (browser redirects without JWT)
|
|
10
|
+
*
|
|
11
|
+
* NEVER use in:
|
|
12
|
+
* - Admin controllers (use SupabaseUserClient.createForUser(req.userToken!))
|
|
13
|
+
* - Admin routes (use SupabaseUserClient.createForUser(req.userToken!))
|
|
14
|
+
* - Any route behind requireAuth middleware
|
|
15
|
+
*
|
|
16
|
+
* If your service needs DB access and is called from both cron AND admin routes,
|
|
17
|
+
* refactor it to accept a SupabaseClient parameter:
|
|
14
18
|
*
|
|
15
19
|
* @example
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // ✅ Service with dependency injection
|
|
22
|
+
* class CampaignService {
|
|
23
|
+
* constructor(private supabase: SupabaseClient) {}
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* // From admin route (RLS active):
|
|
27
|
+
* new CampaignService(await SupabaseUserClient.createForUser(req.userToken!))
|
|
28
|
+
*
|
|
29
|
+
* // From cron job (no user context):
|
|
30
|
+
* new CampaignService(systemDB('campaign-sync-cron'))
|
|
31
|
+
* ```
|
|
21
32
|
*/
|
|
22
|
-
|
|
33
|
+
import { SupabaseClient } from '@supabase/supabase-js';
|
|
23
34
|
/**
|
|
24
35
|
* Create a system-level Supabase client (service role key, bypasses RLS).
|
|
25
36
|
*
|
|
26
|
-
* @param context -
|
|
37
|
+
* @param context - WHY system access is needed (e.g., 'stripe-webhook', 'token-refresh-cron')
|
|
27
38
|
*/
|
|
28
39
|
export declare function systemDB(context: string): SupabaseClient;
|
|
29
|
-
/**
|
|
30
|
-
* Secure system DB — same as systemDB but with stricter logging.
|
|
31
|
-
* Use for operations that modify critical data.
|
|
32
|
-
*/
|
|
33
|
-
export declare function secureSystemDB(context: string): SupabaseClient;
|
|
34
40
|
//# sourceMappingURL=systemDb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemDb.d.ts","sourceRoot":"","sources":["../../src/core/systemDb.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"systemDb.d.ts","sourceRoot":"","sources":["../../src/core/systemDb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKrE;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAaxD"}
|
package/dist/core/systemDb.js
CHANGED
|
@@ -1,44 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* System Database Client — Service Role Key (bypasses RLS)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* full database access without user context.
|
|
4
|
+
* ⚠️ SECURITY: This bypasses ALL Row Level Security policies.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* ONLY use for operations where NO user context exists:
|
|
7
|
+
* - Cron jobs (background timers)
|
|
8
|
+
* - External webhook handlers (Mollie, Stripe, ActiveCampaign)
|
|
9
|
+
* - OAuth callbacks (browser redirects without JWT)
|
|
10
|
+
*
|
|
11
|
+
* NEVER use in:
|
|
12
|
+
* - Admin controllers (use SupabaseUserClient.createForUser(req.userToken!))
|
|
13
|
+
* - Admin routes (use SupabaseUserClient.createForUser(req.userToken!))
|
|
14
|
+
* - Any route behind requireAuth middleware
|
|
15
|
+
*
|
|
16
|
+
* If your service needs DB access and is called from both cron AND admin routes,
|
|
17
|
+
* refactor it to accept a SupabaseClient parameter:
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // ✅ Service with dependency injection
|
|
22
|
+
* class CampaignService {
|
|
23
|
+
* constructor(private supabase: SupabaseClient) {}
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* // From admin route (RLS active):
|
|
27
|
+
* new CampaignService(await SupabaseUserClient.createForUser(req.userToken!))
|
|
28
|
+
*
|
|
29
|
+
* // From cron job (no user context):
|
|
30
|
+
* new CampaignService(systemDB('campaign-sync-cron'))
|
|
31
|
+
* ```
|
|
9
32
|
*/
|
|
10
33
|
import { createClient } from '@supabase/supabase-js';
|
|
11
34
|
import { createLogger } from '../utils/logger.js';
|
|
12
35
|
const logger = createLogger('security:db:system');
|
|
13
|
-
/**
|
|
14
|
-
* Whitelist of known/approved system database contexts.
|
|
15
|
-
* Projects add their own via addWhitelistedContexts().
|
|
16
|
-
*/
|
|
17
|
-
const WHITELISTED_CONTEXTS = new Set([
|
|
18
|
-
// Tetra core
|
|
19
|
-
'system-migration',
|
|
20
|
-
'system-health-check',
|
|
21
|
-
]);
|
|
22
|
-
/**
|
|
23
|
-
* Register additional whitelisted contexts for your project.
|
|
24
|
-
* Call at app startup.
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* addWhitelistedContexts([
|
|
28
|
-
* 'order-sync-service',
|
|
29
|
-
* 'email-queue-processor',
|
|
30
|
-
* 'phase-cron-service',
|
|
31
|
-
* ]);
|
|
32
|
-
*/
|
|
33
|
-
export function addWhitelistedContexts(contexts) {
|
|
34
|
-
for (const ctx of contexts) {
|
|
35
|
-
WHITELISTED_CONTEXTS.add(ctx);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
36
|
/**
|
|
39
37
|
* Create a system-level Supabase client (service role key, bypasses RLS).
|
|
40
38
|
*
|
|
41
|
-
* @param context -
|
|
39
|
+
* @param context - WHY system access is needed (e.g., 'stripe-webhook', 'token-refresh-cron')
|
|
42
40
|
*/
|
|
43
41
|
export function systemDB(context) {
|
|
44
42
|
const url = process.env.SUPABASE_URL;
|
|
@@ -46,19 +44,9 @@ export function systemDB(context) {
|
|
|
46
44
|
if (!url || !serviceKey) {
|
|
47
45
|
throw new Error('Missing SUPABASE_URL or SUPABASE_SERVICE_ROLE_KEY environment variables');
|
|
48
46
|
}
|
|
49
|
-
|
|
50
|
-
logger.warn({ context }, 'systemDB called with unknown context — consider whitelisting');
|
|
51
|
-
}
|
|
47
|
+
logger.debug({ context }, 'systemDB access');
|
|
52
48
|
return createClient(url, serviceKey, {
|
|
53
49
|
auth: { persistSession: false }
|
|
54
50
|
});
|
|
55
51
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Secure system DB — same as systemDB but with stricter logging.
|
|
58
|
-
* Use for operations that modify critical data.
|
|
59
|
-
*/
|
|
60
|
-
export function secureSystemDB(context) {
|
|
61
|
-
logger.info({ context }, 'secureSystemDB access');
|
|
62
|
-
return systemDB(context);
|
|
63
|
-
}
|
|
64
52
|
//# sourceMappingURL=systemDb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemDb.js","sourceRoot":"","sources":["../../src/core/systemDb.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"systemDb.js","sourceRoot":"","sources":["../../src/core/systemDb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAEzD,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE7C,OAAO,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE;QACnC,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;KAChC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export { validateUUID, validateUUIDOrThrow, validateUUIDs, filterValidUUIDs } fr
|
|
|
72
72
|
export { validateOrganization, validateOrganizationOrRespond, hasOrganization } from './shared/validators/organizationValidator.js';
|
|
73
73
|
export type { ContentOwnershipType, UserRole, OwnershipFieldMapping, EntityOwnershipConfig, OwnershipValidationResult, OwnershipUserContext } from './shared/ownership/types.js';
|
|
74
74
|
export { publicDB } from './core/publicDb.js';
|
|
75
|
-
export { systemDB
|
|
75
|
+
export { systemDB } from './core/systemDb.js';
|
|
76
76
|
export { adminDB } from './core/adminDb.js';
|
|
77
77
|
export { userDB } from './core/userDb.js';
|
|
78
78
|
export { superadminDB } from './core/superadminDb.js';
|
|
@@ -96,6 +96,8 @@ export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig,
|
|
|
96
96
|
export type { GeneratedSQL, FilterDefinition, RPCGeneratorOptions, DetailRPCGeneratorOptions, ValidationResult as RPCValidationResult, ValidationError as RPCValidationError, AccessLevel, CreatorVisibilityConfig as RPCCreatorVisibilityConfig } from './generators/rpc/index.js';
|
|
97
97
|
export { EmailService, sendMailgunEmail, escapeHtml } from './shared/email/index.js';
|
|
98
98
|
export type { EmailConfig, SendEmailOpts, EmailTemplate, EmailLogEntry, MailgunResponse } from './shared/email/index.js';
|
|
99
|
+
export { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes, getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken } from './shared/mcp/index.js';
|
|
100
|
+
export type { McpRoutesConfig, McpAuthRoutesConfig, McpToolDefinition, McpToolResult, McpToolHandler, TenantContext as McpTenantContext } from './shared/mcp/index.js';
|
|
99
101
|
export { createApp } from './core/createApp.js';
|
|
100
102
|
export type { CreateAppConfig } from './core/createApp.js';
|
|
101
103
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -68,7 +68,7 @@ export { validateOrganization, validateOrganizationOrRespond, hasOrganization }
|
|
|
68
68
|
// NOT re-exported here to avoid requiring React/tanstack deps in backend environments.
|
|
69
69
|
// ─── Core (DB clients) ─────────────────────────────────────
|
|
70
70
|
export { publicDB } from './core/publicDb.js';
|
|
71
|
-
export { systemDB
|
|
71
|
+
export { systemDB } from './core/systemDb.js';
|
|
72
72
|
export { adminDB } from './core/adminDb.js';
|
|
73
73
|
export { userDB } from './core/userDb.js';
|
|
74
74
|
export { superadminDB } from './core/superadminDb.js';
|
|
@@ -90,6 +90,8 @@ export { generateExecSQL, checkExecSQLExists } from './generators/rls-exec-sql.j
|
|
|
90
90
|
export { RPCGenerator, DetailRPCGenerator, validateConfig as validateRPCConfig, generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations, generateTimestamp, getTableAlias, escapeIdentifier } from './generators/rpc/index.js';
|
|
91
91
|
// ─── Email Module ───────────────────────────────────────────
|
|
92
92
|
export { EmailService, sendMailgunEmail, escapeHtml } from './shared/email/index.js';
|
|
93
|
+
// ─── MCP Online Module ──────────────────────────────────────
|
|
94
|
+
export { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes, getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken } from './shared/mcp/index.js';
|
|
93
95
|
// ─── App Bootstrap ──────────────────────────────────────────
|
|
94
96
|
export { createApp } from './core/createApp.js';
|
|
95
97
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Online Module
|
|
3
|
+
*
|
|
4
|
+
* Provides everything needed to expose MCP tools over HTTP:
|
|
5
|
+
* - StreamableHTTP transport with Bearer token auth
|
|
6
|
+
* - Browser-based login flow for token acquisition
|
|
7
|
+
* - Token CRUD management
|
|
8
|
+
* - Usage stats / audit logging
|
|
9
|
+
* - Tenant isolation via AsyncLocalStorage
|
|
10
|
+
*
|
|
11
|
+
* Quick start:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes } from '@soulbatical/tetra-core';
|
|
14
|
+
* import { Router } from 'express';
|
|
15
|
+
*
|
|
16
|
+
* const tokenPrefix = 'myapp_';
|
|
17
|
+
*
|
|
18
|
+
* // MCP endpoint (Bearer API token auth)
|
|
19
|
+
* const mcpRouter = Router();
|
|
20
|
+
* addMcpRoutes(mcpRouter, { tools, handlers, tokenPrefix });
|
|
21
|
+
* app.use('/api/mcp', mcpRouter);
|
|
22
|
+
*
|
|
23
|
+
* // Browser auth flow (public + JWT)
|
|
24
|
+
* const mcpAuthRouter = Router();
|
|
25
|
+
* addMcpAuthRoutes(mcpAuthRouter, { tokenPrefix });
|
|
26
|
+
* app.use('/api/mcp-auth', mcpAuthRouter);
|
|
27
|
+
*
|
|
28
|
+
* // Token management (JWT auth)
|
|
29
|
+
* const mcpTokensRouter = Router();
|
|
30
|
+
* addMcpTokenRoutes(mcpTokensRouter, { tokenPrefix });
|
|
31
|
+
* app.use('/api/mcp-tokens', mcpTokensRouter);
|
|
32
|
+
*
|
|
33
|
+
* // Usage stats (JWT auth)
|
|
34
|
+
* const mcpUsageRouter = Router();
|
|
35
|
+
* addMcpUsageRoutes(mcpUsageRouter);
|
|
36
|
+
* app.use('/api/mcp-usage', mcpUsageRouter);
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Database: requires `mcp_api_tokens` and `mcp_audit_log` tables.
|
|
40
|
+
* See migrations/ directory for SQL.
|
|
41
|
+
*/
|
|
42
|
+
export { addMcpRoutes } from './mcp-routes.js';
|
|
43
|
+
export { addMcpAuthRoutes } from './mcp-auth-routes.js';
|
|
44
|
+
export { addMcpTokenRoutes } from './mcp-tokens-routes.js';
|
|
45
|
+
export { addMcpUsageRoutes } from './mcp-usage-routes.js';
|
|
46
|
+
export { getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken } from './tenant-context.js';
|
|
47
|
+
export type { McpRoutesConfig, McpAuthRoutesConfig, McpToolDefinition, McpToolResult, McpToolHandler, TenantContext } from './types.js';
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG5I,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Online Module
|
|
3
|
+
*
|
|
4
|
+
* Provides everything needed to expose MCP tools over HTTP:
|
|
5
|
+
* - StreamableHTTP transport with Bearer token auth
|
|
6
|
+
* - Browser-based login flow for token acquisition
|
|
7
|
+
* - Token CRUD management
|
|
8
|
+
* - Usage stats / audit logging
|
|
9
|
+
* - Tenant isolation via AsyncLocalStorage
|
|
10
|
+
*
|
|
11
|
+
* Quick start:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { addMcpRoutes, addMcpAuthRoutes, addMcpTokenRoutes, addMcpUsageRoutes } from '@soulbatical/tetra-core';
|
|
14
|
+
* import { Router } from 'express';
|
|
15
|
+
*
|
|
16
|
+
* const tokenPrefix = 'myapp_';
|
|
17
|
+
*
|
|
18
|
+
* // MCP endpoint (Bearer API token auth)
|
|
19
|
+
* const mcpRouter = Router();
|
|
20
|
+
* addMcpRoutes(mcpRouter, { tools, handlers, tokenPrefix });
|
|
21
|
+
* app.use('/api/mcp', mcpRouter);
|
|
22
|
+
*
|
|
23
|
+
* // Browser auth flow (public + JWT)
|
|
24
|
+
* const mcpAuthRouter = Router();
|
|
25
|
+
* addMcpAuthRoutes(mcpAuthRouter, { tokenPrefix });
|
|
26
|
+
* app.use('/api/mcp-auth', mcpAuthRouter);
|
|
27
|
+
*
|
|
28
|
+
* // Token management (JWT auth)
|
|
29
|
+
* const mcpTokensRouter = Router();
|
|
30
|
+
* addMcpTokenRoutes(mcpTokensRouter, { tokenPrefix });
|
|
31
|
+
* app.use('/api/mcp-tokens', mcpTokensRouter);
|
|
32
|
+
*
|
|
33
|
+
* // Usage stats (JWT auth)
|
|
34
|
+
* const mcpUsageRouter = Router();
|
|
35
|
+
* addMcpUsageRoutes(mcpUsageRouter);
|
|
36
|
+
* app.use('/api/mcp-usage', mcpUsageRouter);
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* Database: requires `mcp_api_tokens` and `mcp_audit_log` tables.
|
|
40
|
+
* See migrations/ directory for SQL.
|
|
41
|
+
*/
|
|
42
|
+
// Routes
|
|
43
|
+
export { addMcpRoutes } from './mcp-routes.js';
|
|
44
|
+
export { addMcpAuthRoutes } from './mcp-auth-routes.js';
|
|
45
|
+
export { addMcpTokenRoutes } from './mcp-tokens-routes.js';
|
|
46
|
+
export { addMcpUsageRoutes } from './mcp-usage-routes.js';
|
|
47
|
+
// Tenant context
|
|
48
|
+
export { getMcpOrganizationId, getMcpTenantContext, runWithMcpTenant, validateMcpApiToken, generateMcpApiToken } from './tenant-context.js';
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,iBAAiB;AACjB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Auth Routes — Factory
|
|
3
|
+
*
|
|
4
|
+
* Browser-based login flow for MCP token acquisition.
|
|
5
|
+
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. MCP client POST /request → gets request_id + login URL
|
|
8
|
+
* 2. User opens browser, logs in
|
|
9
|
+
* 3. Frontend calls POST /approve/:requestId (authenticated)
|
|
10
|
+
* 4. MCP client polls GET /poll/:requestId → receives API token
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { addMcpAuthRoutes } from '@soulbatical/tetra-core';
|
|
15
|
+
*
|
|
16
|
+
* const mcpAuthRouter = Router();
|
|
17
|
+
* addMcpAuthRoutes(mcpAuthRouter, {
|
|
18
|
+
* tokenPrefix: 'vincifox_',
|
|
19
|
+
* });
|
|
20
|
+
* app.use('/api/mcp-auth', mcpAuthRouter);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import type { Router } from 'express';
|
|
24
|
+
import type { McpAuthRoutesConfig } from './types.js';
|
|
25
|
+
export declare function addMcpAuthRoutes(router: Router, config: McpAuthRoutesConfig): void;
|
|
26
|
+
//# sourceMappingURL=mcp-auth-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-auth-routes.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-auth-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAKzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAiCtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAwHlF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Auth Routes — Factory
|
|
3
|
+
*
|
|
4
|
+
* Browser-based login flow for MCP token acquisition.
|
|
5
|
+
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. MCP client POST /request → gets request_id + login URL
|
|
8
|
+
* 2. User opens browser, logs in
|
|
9
|
+
* 3. Frontend calls POST /approve/:requestId (authenticated)
|
|
10
|
+
* 4. MCP client polls GET /poll/:requestId → receives API token
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { addMcpAuthRoutes } from '@soulbatical/tetra-core';
|
|
15
|
+
*
|
|
16
|
+
* const mcpAuthRouter = Router();
|
|
17
|
+
* addMcpAuthRoutes(mcpAuthRouter, {
|
|
18
|
+
* tokenPrefix: 'vincifox_',
|
|
19
|
+
* });
|
|
20
|
+
* app.use('/api/mcp-auth', mcpAuthRouter);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { randomUUID } from 'node:crypto';
|
|
24
|
+
import { authenticateToken } from '../../middleware/authMiddleware.js';
|
|
25
|
+
import { systemDB } from '../../core/systemDb.js';
|
|
26
|
+
import { generateMcpApiToken } from './tenant-context.js';
|
|
27
|
+
// In-memory store (short-lived, <5min)
|
|
28
|
+
const pendingRequests = new Map();
|
|
29
|
+
// Cleanup expired every 30s
|
|
30
|
+
setInterval(() => {
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
for (const [id, req] of pendingRequests) {
|
|
33
|
+
if (now - req.createdAt > 600_000) { // 10min hard limit
|
|
34
|
+
pendingRequests.delete(id);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, 30_000).unref();
|
|
38
|
+
function getOrgId(req) {
|
|
39
|
+
const user = req.user;
|
|
40
|
+
return user?.activeOrganizationId || user?.active_organization_id || user?.organizationId || null;
|
|
41
|
+
}
|
|
42
|
+
function paramStr(value) {
|
|
43
|
+
return Array.isArray(value) ? value[0] : value || '';
|
|
44
|
+
}
|
|
45
|
+
export function addMcpAuthRoutes(router, config) {
|
|
46
|
+
const { tokenPrefix, frontendApprovalPath = '/app/settings/api-tokens', defaultDeviceName = 'Claude Code', expirySeconds = 300, } = config;
|
|
47
|
+
const frontendUrl = config.frontendUrl || process.env.FRONTEND_URL || 'http://localhost:3000';
|
|
48
|
+
const db = systemDB('mcp-auth');
|
|
49
|
+
// POST /request — Create pending auth request
|
|
50
|
+
router.post('/request', (req, res) => {
|
|
51
|
+
const { device_name } = req.body || {};
|
|
52
|
+
const requestId = randomUUID();
|
|
53
|
+
pendingRequests.set(requestId, {
|
|
54
|
+
requestId,
|
|
55
|
+
deviceName: device_name || defaultDeviceName,
|
|
56
|
+
createdAt: Date.now(),
|
|
57
|
+
});
|
|
58
|
+
res.json({
|
|
59
|
+
request_id: requestId,
|
|
60
|
+
login_url: `${frontendUrl}${frontendApprovalPath}?mcp_auth=${requestId}`,
|
|
61
|
+
expires_in: expirySeconds,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
// GET /status/:requestId — Check if request is valid (for frontend)
|
|
65
|
+
router.get('/status/:requestId', (req, res) => {
|
|
66
|
+
const requestId = paramStr(req.params.requestId);
|
|
67
|
+
const pending = pendingRequests.get(requestId);
|
|
68
|
+
if (!pending) {
|
|
69
|
+
res.status(404).json({ error: 'Auth request not found or expired' });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const expiryMs = expirySeconds * 1000;
|
|
73
|
+
res.json({
|
|
74
|
+
status: pending.approved ? 'approved' : 'pending',
|
|
75
|
+
device_name: pending.deviceName,
|
|
76
|
+
expires_in: Math.max(0, Math.ceil((pending.createdAt + expiryMs - Date.now()) / 1000)),
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
// POST /approve/:requestId — Approve and generate token (requires JWT)
|
|
80
|
+
router.post('/approve/:requestId', authenticateToken, async (req, res) => {
|
|
81
|
+
try {
|
|
82
|
+
const requestId = paramStr(req.params.requestId);
|
|
83
|
+
const user = req.user;
|
|
84
|
+
const pending = pendingRequests.get(requestId);
|
|
85
|
+
if (!pending) {
|
|
86
|
+
res.status(404).json({ error: 'Auth request not found or expired' });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (pending.approved) {
|
|
90
|
+
res.status(409).json({ error: 'Already approved' });
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const organizationId = getOrgId(req);
|
|
94
|
+
if (!organizationId) {
|
|
95
|
+
res.status(400).json({ error: 'No active organization' });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Generate API token
|
|
99
|
+
const tokenName = `${pending.deviceName} (${new Date().toISOString().slice(0, 10)})`;
|
|
100
|
+
const token = await generateMcpApiToken(organizationId, tokenName, tokenPrefix, user.id);
|
|
101
|
+
// Get org name for display
|
|
102
|
+
const { data: org } = await db
|
|
103
|
+
.from('organizations')
|
|
104
|
+
.select('name')
|
|
105
|
+
.eq('id', organizationId)
|
|
106
|
+
.single();
|
|
107
|
+
pending.apiToken = token;
|
|
108
|
+
pending.organizationName = org?.name || 'Unknown';
|
|
109
|
+
pending.approved = true;
|
|
110
|
+
res.json({ success: true, organization: org?.name });
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
res.status(500).json({ error: 'Internal server error' });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// GET /poll/:requestId — Poll for token (MCP client side)
|
|
117
|
+
router.get('/poll/:requestId', (req, res) => {
|
|
118
|
+
const requestId = paramStr(req.params.requestId);
|
|
119
|
+
const pending = pendingRequests.get(requestId);
|
|
120
|
+
if (!pending) {
|
|
121
|
+
res.status(404).json({ error: 'Auth request not found or expired' });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (!pending.approved) {
|
|
125
|
+
res.json({ status: 'pending' });
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// Return token and clean up (one-time retrieval)
|
|
129
|
+
const result = {
|
|
130
|
+
status: 'approved',
|
|
131
|
+
api_token: pending.apiToken,
|
|
132
|
+
organization: pending.organizationName,
|
|
133
|
+
};
|
|
134
|
+
pendingRequests.delete(requestId);
|
|
135
|
+
res.json(result);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=mcp-auth-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-auth-routes.js","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-auth-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP StreamableHTTP Routes — Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates an Express router that exposes MCP tools over HTTP
|
|
5
|
+
* with Bearer token authentication, rate limiting, and audit logging.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { addMcpRoutes } from '@soulbatical/tetra-core';
|
|
10
|
+
*
|
|
11
|
+
* const mcpRouter = Router();
|
|
12
|
+
* addMcpRoutes(mcpRouter, {
|
|
13
|
+
* tools: myToolDefinitions,
|
|
14
|
+
* handlers: myToolHandlers,
|
|
15
|
+
* tokenPrefix: 'vincifox_',
|
|
16
|
+
* });
|
|
17
|
+
* app.use('/api/mcp', mcpRouter);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
import type { Router } from 'express';
|
|
21
|
+
import type { McpRoutesConfig } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* Add MCP StreamableHTTP routes to a router.
|
|
24
|
+
*
|
|
25
|
+
* The router handles POST (JSON-RPC requests), GET (SSE), and DELETE (cleanup).
|
|
26
|
+
* Authentication is via Bearer token in the Authorization header.
|
|
27
|
+
*/
|
|
28
|
+
export declare function addMcpRoutes(router: Router, config: McpRoutesConfig): void;
|
|
29
|
+
//# sourceMappingURL=mcp-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-routes.d.ts","sourceRoot":"","sources":["../../../src/shared/mcp/mcp-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIzD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AA8CjE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAuI1E"}
|