@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.
Files changed (271) hide show
  1. package/README.md +78 -38
  2. package/dist/core/createApp.d.ts +1 -1
  3. package/dist/core/createApp.d.ts.map +1 -1
  4. package/dist/core/createApp.js +77 -2
  5. package/dist/core/createApp.js.map +1 -1
  6. package/dist/core/dualWriteProxy.d.ts +7 -2
  7. package/dist/core/dualWriteProxy.d.ts.map +1 -1
  8. package/dist/core/dualWriteProxy.js +16 -5
  9. package/dist/core/dualWriteProxy.js.map +1 -1
  10. package/dist/core/routeContext.d.ts +24 -0
  11. package/dist/core/routeContext.d.ts.map +1 -1
  12. package/dist/core/routeContext.js +31 -4
  13. package/dist/core/routeContext.js.map +1 -1
  14. package/dist/core/systemDb.d.ts +2 -2
  15. package/dist/core/systemDb.js +2 -2
  16. package/dist/generators/rls-checker.d.ts +1 -1
  17. package/dist/generators/rls-checker.js +1 -1
  18. package/dist/generators/rls-exec-sql.d.ts +1 -1
  19. package/dist/generators/rls-exec-sql.js +1 -1
  20. package/dist/generators/rpc/index.d.ts +1 -1
  21. package/dist/generators/rpc/index.js +1 -1
  22. package/dist/index.d.ts +3 -31
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -32
  25. package/dist/index.js.map +1 -1
  26. package/dist/middleware/securityMiddleware.d.ts +1 -1
  27. package/dist/middleware/securityMiddleware.d.ts.map +1 -1
  28. package/dist/middleware/validateBody.d.ts.map +1 -1
  29. package/dist/middleware/validateBody.js +51 -8
  30. package/dist/middleware/validateBody.js.map +1 -1
  31. package/dist/shared/rfc7807ErrorResponse.d.ts +7 -0
  32. package/dist/shared/rfc7807ErrorResponse.d.ts.map +1 -1
  33. package/dist/shared/rfc7807ErrorResponse.js +19 -5
  34. package/dist/shared/rfc7807ErrorResponse.js.map +1 -1
  35. package/dist/utils/logger.d.ts.map +1 -1
  36. package/dist/utils/logger.js +16 -1
  37. package/dist/utils/logger.js.map +1 -1
  38. package/package.json +33 -77
  39. package/dist/affiliate.d.ts +0 -11
  40. package/dist/affiliate.d.ts.map +0 -1
  41. package/dist/affiliate.js +0 -10
  42. package/dist/affiliate.js.map +0 -1
  43. package/dist/billing.d.ts +0 -8
  44. package/dist/billing.d.ts.map +0 -1
  45. package/dist/billing.js +0 -7
  46. package/dist/billing.js.map +0 -1
  47. package/dist/email.d.ts +0 -9
  48. package/dist/email.d.ts.map +0 -1
  49. package/dist/email.js +0 -8
  50. package/dist/email.js.map +0 -1
  51. package/dist/generators/rls-exec-sql.sql +0 -57
  52. package/dist/generators.d.ts +0 -15
  53. package/dist/generators.d.ts.map +0 -1
  54. package/dist/generators.js +0 -12
  55. package/dist/generators.js.map +0 -1
  56. package/dist/mcp.d.ts +0 -8
  57. package/dist/mcp.d.ts.map +0 -1
  58. package/dist/mcp.js +0 -7
  59. package/dist/mcp.js.map +0 -1
  60. package/dist/planner.d.ts +0 -8
  61. package/dist/planner.d.ts.map +0 -1
  62. package/dist/planner.js +0 -7
  63. package/dist/planner.js.map +0 -1
  64. package/dist/shared/affiliate/AffiliateAttributionService.d.ts +0 -47
  65. package/dist/shared/affiliate/AffiliateAttributionService.d.ts.map +0 -1
  66. package/dist/shared/affiliate/AffiliateAttributionService.js +0 -308
  67. package/dist/shared/affiliate/AffiliateAttributionService.js.map +0 -1
  68. package/dist/shared/affiliate/AffiliateClickService.d.ts +0 -35
  69. package/dist/shared/affiliate/AffiliateClickService.d.ts.map +0 -1
  70. package/dist/shared/affiliate/AffiliateClickService.js +0 -87
  71. package/dist/shared/affiliate/AffiliateClickService.js.map +0 -1
  72. package/dist/shared/affiliate/affiliateFeatureConfig.d.ts +0 -11
  73. package/dist/shared/affiliate/affiliateFeatureConfig.d.ts.map +0 -1
  74. package/dist/shared/affiliate/affiliateFeatureConfig.js +0 -242
  75. package/dist/shared/affiliate/affiliateFeatureConfig.js.map +0 -1
  76. package/dist/shared/affiliate/index.d.ts +0 -11
  77. package/dist/shared/affiliate/index.d.ts.map +0 -1
  78. package/dist/shared/affiliate/index.js +0 -13
  79. package/dist/shared/affiliate/index.js.map +0 -1
  80. package/dist/shared/affiliate/routes.d.ts +0 -87
  81. package/dist/shared/affiliate/routes.d.ts.map +0 -1
  82. package/dist/shared/affiliate/routes.js +0 -404
  83. package/dist/shared/affiliate/routes.js.map +0 -1
  84. package/dist/shared/affiliate/types.d.ts +0 -170
  85. package/dist/shared/affiliate/types.d.ts.map +0 -1
  86. package/dist/shared/affiliate/types.js +0 -11
  87. package/dist/shared/affiliate/types.js.map +0 -1
  88. package/dist/shared/billing/BillingService.d.ts +0 -56
  89. package/dist/shared/billing/BillingService.d.ts.map +0 -1
  90. package/dist/shared/billing/BillingService.js +0 -588
  91. package/dist/shared/billing/BillingService.js.map +0 -1
  92. package/dist/shared/billing/SeatBillingService.d.ts +0 -106
  93. package/dist/shared/billing/SeatBillingService.d.ts.map +0 -1
  94. package/dist/shared/billing/SeatBillingService.js +0 -292
  95. package/dist/shared/billing/SeatBillingService.js.map +0 -1
  96. package/dist/shared/billing/index.d.ts +0 -30
  97. package/dist/shared/billing/index.d.ts.map +0 -1
  98. package/dist/shared/billing/index.js +0 -27
  99. package/dist/shared/billing/index.js.map +0 -1
  100. package/dist/shared/billing/routes.d.ts +0 -45
  101. package/dist/shared/billing/routes.d.ts.map +0 -1
  102. package/dist/shared/billing/routes.js +0 -184
  103. package/dist/shared/billing/routes.js.map +0 -1
  104. package/dist/shared/billing/seat-pricing.d.ts +0 -53
  105. package/dist/shared/billing/seat-pricing.d.ts.map +0 -1
  106. package/dist/shared/billing/seat-pricing.js +0 -81
  107. package/dist/shared/billing/seat-pricing.js.map +0 -1
  108. package/dist/shared/billing/types.d.ts +0 -109
  109. package/dist/shared/billing/types.d.ts.map +0 -1
  110. package/dist/shared/billing/types.js +0 -8
  111. package/dist/shared/billing/types.js.map +0 -1
  112. package/dist/shared/email/EmailService.d.ts +0 -64
  113. package/dist/shared/email/EmailService.d.ts.map +0 -1
  114. package/dist/shared/email/EmailService.js +0 -300
  115. package/dist/shared/email/EmailService.js.map +0 -1
  116. package/dist/shared/email/adminRoutes.d.ts +0 -30
  117. package/dist/shared/email/adminRoutes.d.ts.map +0 -1
  118. package/dist/shared/email/adminRoutes.js +0 -227
  119. package/dist/shared/email/adminRoutes.js.map +0 -1
  120. package/dist/shared/email/gmail.d.ts +0 -208
  121. package/dist/shared/email/gmail.d.ts.map +0 -1
  122. package/dist/shared/email/gmail.js +0 -626
  123. package/dist/shared/email/gmail.js.map +0 -1
  124. package/dist/shared/email/index.d.ts +0 -15
  125. package/dist/shared/email/index.d.ts.map +0 -1
  126. package/dist/shared/email/index.js +0 -18
  127. package/dist/shared/email/index.js.map +0 -1
  128. package/dist/shared/email/mailgun.d.ts +0 -18
  129. package/dist/shared/email/mailgun.d.ts.map +0 -1
  130. package/dist/shared/email/mailgun.js +0 -76
  131. package/dist/shared/email/mailgun.js.map +0 -1
  132. package/dist/shared/email/sanitize.d.ts +0 -25
  133. package/dist/shared/email/sanitize.d.ts.map +0 -1
  134. package/dist/shared/email/sanitize.js +0 -39
  135. package/dist/shared/email/sanitize.js.map +0 -1
  136. package/dist/shared/email/smtp.d.ts +0 -20
  137. package/dist/shared/email/smtp.d.ts.map +0 -1
  138. package/dist/shared/email/smtp.js +0 -53
  139. package/dist/shared/email/smtp.js.map +0 -1
  140. package/dist/shared/email/types.d.ts +0 -113
  141. package/dist/shared/email/types.d.ts.map +0 -1
  142. package/dist/shared/email/types.js +0 -7
  143. package/dist/shared/email/types.js.map +0 -1
  144. package/dist/shared/email/webhookRoutes.d.ts +0 -29
  145. package/dist/shared/email/webhookRoutes.d.ts.map +0 -1
  146. package/dist/shared/email/webhookRoutes.js +0 -125
  147. package/dist/shared/email/webhookRoutes.js.map +0 -1
  148. package/dist/shared/mcp/index.d.ts +0 -51
  149. package/dist/shared/mcp/index.d.ts.map +0 -1
  150. package/dist/shared/mcp/index.js +0 -51
  151. package/dist/shared/mcp/index.js.map +0 -1
  152. package/dist/shared/mcp/mcp-auth-routes.d.ts +0 -26
  153. package/dist/shared/mcp/mcp-auth-routes.d.ts.map +0 -1
  154. package/dist/shared/mcp/mcp-auth-routes.js +0 -141
  155. package/dist/shared/mcp/mcp-auth-routes.js.map +0 -1
  156. package/dist/shared/mcp/mcp-db.d.ts +0 -99
  157. package/dist/shared/mcp/mcp-db.d.ts.map +0 -1
  158. package/dist/shared/mcp/mcp-db.js +0 -106
  159. package/dist/shared/mcp/mcp-db.js.map +0 -1
  160. package/dist/shared/mcp/mcp-routes.d.ts +0 -29
  161. package/dist/shared/mcp/mcp-routes.d.ts.map +0 -1
  162. package/dist/shared/mcp/mcp-routes.js +0 -171
  163. package/dist/shared/mcp/mcp-routes.js.map +0 -1
  164. package/dist/shared/mcp/mcp-tokens-routes.d.ts +0 -35
  165. package/dist/shared/mcp/mcp-tokens-routes.d.ts.map +0 -1
  166. package/dist/shared/mcp/mcp-tokens-routes.js +0 -94
  167. package/dist/shared/mcp/mcp-tokens-routes.js.map +0 -1
  168. package/dist/shared/mcp/mcp-usage-routes.d.ts +0 -17
  169. package/dist/shared/mcp/mcp-usage-routes.d.ts.map +0 -1
  170. package/dist/shared/mcp/mcp-usage-routes.js +0 -81
  171. package/dist/shared/mcp/mcp-usage-routes.js.map +0 -1
  172. package/dist/shared/mcp/tenant-context.d.ts +0 -59
  173. package/dist/shared/mcp/tenant-context.d.ts.map +0 -1
  174. package/dist/shared/mcp/tenant-context.js +0 -136
  175. package/dist/shared/mcp/tenant-context.js.map +0 -1
  176. package/dist/shared/mcp/types.d.ts +0 -74
  177. package/dist/shared/mcp/types.d.ts.map +0 -1
  178. package/dist/shared/mcp/types.js +0 -7
  179. package/dist/shared/mcp/types.js.map +0 -1
  180. package/dist/shared/planner/GoogleCalendarService.d.ts +0 -137
  181. package/dist/shared/planner/GoogleCalendarService.d.ts.map +0 -1
  182. package/dist/shared/planner/GoogleCalendarService.js +0 -525
  183. package/dist/shared/planner/GoogleCalendarService.js.map +0 -1
  184. package/dist/shared/planner/PlannerService.d.ts +0 -264
  185. package/dist/shared/planner/PlannerService.d.ts.map +0 -1
  186. package/dist/shared/planner/PlannerService.js +0 -1393
  187. package/dist/shared/planner/PlannerService.js.map +0 -1
  188. package/dist/shared/planner/index.d.ts +0 -37
  189. package/dist/shared/planner/index.d.ts.map +0 -1
  190. package/dist/shared/planner/index.js +0 -35
  191. package/dist/shared/planner/index.js.map +0 -1
  192. package/dist/shared/planner/intervals.d.ts +0 -60
  193. package/dist/shared/planner/intervals.d.ts.map +0 -1
  194. package/dist/shared/planner/intervals.js +0 -141
  195. package/dist/shared/planner/intervals.js.map +0 -1
  196. package/dist/shared/planner/routes.d.ts +0 -69
  197. package/dist/shared/planner/routes.d.ts.map +0 -1
  198. package/dist/shared/planner/routes.js +0 -770
  199. package/dist/shared/planner/routes.js.map +0 -1
  200. package/dist/shared/planner/types.d.ts +0 -328
  201. package/dist/shared/planner/types.d.ts.map +0 -1
  202. package/dist/shared/planner/types.js +0 -9
  203. package/dist/shared/planner/types.js.map +0 -1
  204. package/dist/shared/storage/ImageProcessingService.d.ts +0 -32
  205. package/dist/shared/storage/ImageProcessingService.d.ts.map +0 -1
  206. package/dist/shared/storage/ImageProcessingService.js +0 -127
  207. package/dist/shared/storage/ImageProcessingService.js.map +0 -1
  208. package/dist/shared/storage/StorageProxyService.d.ts +0 -47
  209. package/dist/shared/storage/StorageProxyService.d.ts.map +0 -1
  210. package/dist/shared/storage/StorageProxyService.js +0 -196
  211. package/dist/shared/storage/StorageProxyService.js.map +0 -1
  212. package/dist/shared/storage/StorageUploadService.d.ts +0 -126
  213. package/dist/shared/storage/StorageUploadService.d.ts.map +0 -1
  214. package/dist/shared/storage/StorageUploadService.js +0 -206
  215. package/dist/shared/storage/StorageUploadService.js.map +0 -1
  216. package/dist/shared/storage/creative-urls.d.ts +0 -14
  217. package/dist/shared/storage/creative-urls.d.ts.map +0 -1
  218. package/dist/shared/storage/creative-urls.js +0 -30
  219. package/dist/shared/storage/creative-urls.js.map +0 -1
  220. package/dist/shared/storage/index.d.ts +0 -28
  221. package/dist/shared/storage/index.d.ts.map +0 -1
  222. package/dist/shared/storage/index.js +0 -27
  223. package/dist/shared/storage/index.js.map +0 -1
  224. package/dist/shared/storage/routes.d.ts +0 -42
  225. package/dist/shared/storage/routes.d.ts.map +0 -1
  226. package/dist/shared/storage/routes.js +0 -160
  227. package/dist/shared/storage/routes.js.map +0 -1
  228. package/dist/shared/storage/types.d.ts +0 -53
  229. package/dist/shared/storage/types.d.ts.map +0 -1
  230. package/dist/shared/storage/types.js +0 -2
  231. package/dist/shared/storage/types.js.map +0 -1
  232. package/dist/shared/telegram/index.d.ts +0 -4
  233. package/dist/shared/telegram/index.d.ts.map +0 -1
  234. package/dist/shared/telegram/index.js +0 -3
  235. package/dist/shared/telegram/index.js.map +0 -1
  236. package/dist/shared/telegram/routes.d.ts +0 -43
  237. package/dist/shared/telegram/routes.d.ts.map +0 -1
  238. package/dist/shared/telegram/routes.js +0 -868
  239. package/dist/shared/telegram/routes.js.map +0 -1
  240. package/dist/shared/telegram/types.d.ts +0 -168
  241. package/dist/shared/telegram/types.d.ts.map +0 -1
  242. package/dist/shared/telegram/types.js +0 -7
  243. package/dist/shared/telegram/types.js.map +0 -1
  244. package/dist/shared/telegram/utils.d.ts +0 -44
  245. package/dist/shared/telegram/utils.d.ts.map +0 -1
  246. package/dist/shared/telegram/utils.js +0 -121
  247. package/dist/shared/telegram/utils.js.map +0 -1
  248. package/dist/storage.d.ts +0 -9
  249. package/dist/storage.d.ts.map +0 -1
  250. package/dist/storage.js +0 -8
  251. package/dist/storage.js.map +0 -1
  252. package/dist/telemetry.d.ts +0 -9
  253. package/dist/telemetry.d.ts.map +0 -1
  254. package/dist/telemetry.js +0 -8
  255. package/dist/telemetry.js.map +0 -1
  256. package/scripts/postinstall.js +0 -79
  257. package/src/shared/affiliate/migrations/001_create_affiliates.sql +0 -49
  258. package/src/shared/affiliate/migrations/002_create_affiliate_commissions.sql +0 -31
  259. package/src/shared/affiliate/migrations/003_create_affiliate_clicks.sql +0 -26
  260. package/src/shared/affiliate/migrations/004_create_affiliate_payments.sql +0 -34
  261. package/src/shared/affiliate/migrations/005_create_affiliate_tier_history.sql +0 -19
  262. package/src/shared/affiliate/migrations/006_create_affiliate_rpc_functions.sql +0 -209
  263. package/src/shared/affiliate/migrations/007_create_affiliate_rls_policies.sql +0 -123
  264. package/src/shared/billing/migrations/00000000000001_billing.sql +0 -114
  265. package/src/shared/email/migrations/000_create_email_logs.sql +0 -27
  266. package/src/shared/email/migrations/001_create_email_templates.sql +0 -27
  267. package/src/shared/email/migrations/002_add_rls_baseline_policies.sql +0 -37
  268. package/src/shared/email/migrations/003_create_gmail_accounts.sql +0 -82
  269. package/src/shared/email/migrations/004_add_email_logs_tracking_columns.sql +0 -15
  270. package/src/shared/mcp/migrations/001_mcp_api_tokens.sql +0 -21
  271. 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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * MCP Online Module — Types
3
- *
4
- * Shared types for MCP StreamableHTTP endpoints.
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}