agentic-payments 0.1.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 (122) hide show
  1. package/README.md +924 -0
  2. package/bin/cli.js +18 -0
  3. package/bin/mcp.js +10 -0
  4. package/completions/agentic-payments.bash +21 -0
  5. package/completions/agentic-payments.fish +9 -0
  6. package/completions/agentic-payments.zsh +17 -0
  7. package/completions/bash.sh +182 -0
  8. package/completions/fish.fish +110 -0
  9. package/completions/zsh.sh +175 -0
  10. package/dist/active-mandate/i18n.d.ts +27 -0
  11. package/dist/active-mandate/i18n.d.ts.map +1 -0
  12. package/dist/active-mandate/i18n.js +35 -0
  13. package/dist/active-mandate/i18n.js.map +1 -0
  14. package/dist/active-mandate/index.d.ts +26 -0
  15. package/dist/active-mandate/index.d.ts.map +1 -0
  16. package/dist/active-mandate/index.js +51 -0
  17. package/dist/active-mandate/index.js.map +1 -0
  18. package/dist/active-mandate/revocation.d.ts +11 -0
  19. package/dist/active-mandate/revocation.d.ts.map +1 -0
  20. package/dist/active-mandate/revocation.js +27 -0
  21. package/dist/active-mandate/revocation.js.map +1 -0
  22. package/dist/active-mandate/schema.d.ts +85 -0
  23. package/dist/active-mandate/schema.d.ts.map +1 -0
  24. package/dist/active-mandate/schema.js +36 -0
  25. package/dist/active-mandate/schema.js.map +1 -0
  26. package/dist/active-mandate/signing.d.ts +8 -0
  27. package/dist/active-mandate/signing.d.ts.map +1 -0
  28. package/dist/active-mandate/signing.js +64 -0
  29. package/dist/active-mandate/signing.js.map +1 -0
  30. package/dist/active-mandate/types.d.ts +59 -0
  31. package/dist/active-mandate/types.d.ts.map +1 -0
  32. package/dist/active-mandate/types.js +6 -0
  33. package/dist/active-mandate/types.js.map +1 -0
  34. package/dist/cli/commands/active-mandate.d.ts +4 -0
  35. package/dist/cli/commands/active-mandate.d.ts.map +1 -0
  36. package/dist/cli/commands/active-mandate.js +218 -0
  37. package/dist/cli/commands/active-mandate.js.map +1 -0
  38. package/dist/cli/commands/generate.d.ts +3 -0
  39. package/dist/cli/commands/generate.d.ts.map +1 -0
  40. package/dist/cli/commands/generate.js +59 -0
  41. package/dist/cli/commands/generate.js.map +1 -0
  42. package/dist/cli/commands/mandate.d.ts +4 -0
  43. package/dist/cli/commands/mandate.d.ts.map +1 -0
  44. package/dist/cli/commands/mandate.js +223 -0
  45. package/dist/cli/commands/mandate.js.map +1 -0
  46. package/dist/cli/commands/system.d.ts +4 -0
  47. package/dist/cli/commands/system.d.ts.map +1 -0
  48. package/dist/cli/commands/system.js +101 -0
  49. package/dist/cli/commands/system.js.map +1 -0
  50. package/dist/cli/commands/verify.d.ts +3 -0
  51. package/dist/cli/commands/verify.d.ts.map +1 -0
  52. package/dist/cli/commands/verify.js +104 -0
  53. package/dist/cli/commands/verify.js.map +1 -0
  54. package/dist/cli/completion.d.ts +3 -0
  55. package/dist/cli/completion.d.ts.map +1 -0
  56. package/dist/cli/completion.js +245 -0
  57. package/dist/cli/completion.js.map +1 -0
  58. package/dist/cli/index.d.ts +3 -0
  59. package/dist/cli/index.d.ts.map +1 -0
  60. package/dist/cli/index.js +79 -0
  61. package/dist/cli/index.js.map +1 -0
  62. package/dist/errors.d.ts +58 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +100 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/identity.d.ts +78 -0
  67. package/dist/identity.d.ts.map +1 -0
  68. package/dist/identity.js +204 -0
  69. package/dist/identity.js.map +1 -0
  70. package/dist/index.d.ts +68 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +79 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/mandate.d.ts +134 -0
  75. package/dist/mandate.d.ts.map +1 -0
  76. package/dist/mandate.js +342 -0
  77. package/dist/mandate.js.map +1 -0
  78. package/dist/mcp/index.d.ts +7 -0
  79. package/dist/mcp/index.d.ts.map +1 -0
  80. package/dist/mcp/index.js +102 -0
  81. package/dist/mcp/index.js.map +1 -0
  82. package/dist/mcp/server.d.ts +38 -0
  83. package/dist/mcp/server.d.ts.map +1 -0
  84. package/dist/mcp/server.js +126 -0
  85. package/dist/mcp/server.js.map +1 -0
  86. package/dist/mcp/tools/agent.d.ts +9 -0
  87. package/dist/mcp/tools/agent.d.ts.map +1 -0
  88. package/dist/mcp/tools/agent.js +34 -0
  89. package/dist/mcp/tools/agent.js.map +1 -0
  90. package/dist/mcp/tools/consensus.d.ts +9 -0
  91. package/dist/mcp/tools/consensus.d.ts.map +1 -0
  92. package/dist/mcp/tools/consensus.js +38 -0
  93. package/dist/mcp/tools/consensus.js.map +1 -0
  94. package/dist/mcp/tools/index.d.ts +45 -0
  95. package/dist/mcp/tools/index.d.ts.map +1 -0
  96. package/dist/mcp/tools/index.js +282 -0
  97. package/dist/mcp/tools/index.js.map +1 -0
  98. package/dist/mcp/tools/mandate.d.ts +31 -0
  99. package/dist/mcp/tools/mandate.d.ts.map +1 -0
  100. package/dist/mcp/tools/mandate.js +165 -0
  101. package/dist/mcp/tools/mandate.js.map +1 -0
  102. package/dist/mcp/tools/payment.d.ts +13 -0
  103. package/dist/mcp/tools/payment.d.ts.map +1 -0
  104. package/dist/mcp/tools/payment.js +66 -0
  105. package/dist/mcp/tools/payment.js.map +1 -0
  106. package/dist/mcp/tools/types.d.ts +63 -0
  107. package/dist/mcp/tools/types.d.ts.map +1 -0
  108. package/dist/mcp/tools/types.js +5 -0
  109. package/dist/mcp/tools/types.js.map +1 -0
  110. package/dist/mcp/transports/http.d.ts +52 -0
  111. package/dist/mcp/transports/http.d.ts.map +1 -0
  112. package/dist/mcp/transports/http.js +234 -0
  113. package/dist/mcp/transports/http.js.map +1 -0
  114. package/dist/types.d.ts +238 -0
  115. package/dist/types.d.ts.map +1 -0
  116. package/dist/types.js +7 -0
  117. package/dist/types.js.map +1 -0
  118. package/dist/verification.d.ts +140 -0
  119. package/dist/verification.d.ts.map +1 -0
  120. package/dist/verification.js +285 -0
  121. package/dist/verification.js.map +1 -0
  122. package/package.json +175 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Payment mandate MCP tools (Intent and Cart)
3
+ */
4
+ import { IntentMandate, CartMandate } from '../../mandate.js';
5
+ /**
6
+ * Create an intent-based payment mandate
7
+ */
8
+ export async function createIntentMandateTool(args) {
9
+ try {
10
+ const { merchant_id, customer_id, intent, max_amount, currency = 'USD', expires_at, } = args;
11
+ const mandate = new IntentMandate({
12
+ merchantId: merchant_id,
13
+ customerId: customer_id,
14
+ intent,
15
+ maxAmount: max_amount,
16
+ currency,
17
+ expiresAt: expires_at || Date.now() + 86400000, // Default 24 hours
18
+ });
19
+ return {
20
+ success: true,
21
+ mandate: mandate.toJSON(),
22
+ };
23
+ }
24
+ catch (error) {
25
+ return {
26
+ success: false,
27
+ error: error instanceof Error ? error.message : 'Unknown error',
28
+ };
29
+ }
30
+ }
31
+ /**
32
+ * Create a cart-based payment mandate
33
+ */
34
+ export async function createCartMandateTool(args) {
35
+ try {
36
+ const { merchant_id, customer_id, items, currency = 'USD' } = args;
37
+ // Calculate total from items
38
+ const total = items.reduce((sum, item) => sum + item.quantity * item.unit_price, 0);
39
+ // CartMandate constructor takes data without totalAmount (it calculates it)
40
+ const mandate = new CartMandate({
41
+ merchantId: merchant_id,
42
+ customerId: customer_id,
43
+ items: items.map((item) => ({
44
+ id: item.id,
45
+ name: item.name,
46
+ quantity: item.quantity,
47
+ unitPrice: item.unit_price,
48
+ })),
49
+ currency,
50
+ expiresAt: Date.now() + 86400000, // Default 24 hours
51
+ });
52
+ return {
53
+ success: true,
54
+ mandate: mandate.toJSON(),
55
+ total,
56
+ items_count: items.length,
57
+ };
58
+ }
59
+ catch (error) {
60
+ return {
61
+ success: false,
62
+ error: error instanceof Error ? error.message : 'Unknown error',
63
+ };
64
+ }
65
+ }
66
+ //# sourceMappingURL=payment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.js","sourceRoot":"","sources":["../../../src/mcp/tools/payment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,EACJ,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,EACV,QAAQ,GAAG,KAAK,EAChB,UAAU,GACX,GAAG,IAAI,CAAC;QAET,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,WAAW;YACvB,MAAM;YACN,SAAS,EAAE,UAAU;YACrB,QAAQ;YACR,SAAS,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,mBAAmB;SACpE,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QAEnE,6BAA6B;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EACpD,CAAC,CACF,CAAC;QAEF,4EAA4E;QAC5E,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC9B,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,WAAW;YACvB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC,CAAC;YACH,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,mBAAmB;SACtD,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;YACzB,KAAK;YACL,WAAW,EAAE,KAAK,CAAC,MAAM;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * MCP Tool Type Definitions
3
+ */
4
+ export interface ToolResult {
5
+ success: boolean;
6
+ [key: string]: any;
7
+ }
8
+ export interface CreateActiveMandateArgs {
9
+ agent: string;
10
+ holder: string;
11
+ amount: number;
12
+ currency: string;
13
+ period: 'single' | 'daily' | 'weekly' | 'monthly';
14
+ kind: 'intent' | 'cart';
15
+ merchant_allow?: string[];
16
+ merchant_block?: string[];
17
+ expires_at?: string;
18
+ }
19
+ export interface SignMandateArgs {
20
+ mandate: any;
21
+ private_key: string;
22
+ }
23
+ export interface VerifyMandateArgs {
24
+ signed_mandate: any;
25
+ check_guards?: boolean;
26
+ }
27
+ export interface RevokeMandateArgs {
28
+ mandate_id: string;
29
+ reason?: string;
30
+ }
31
+ export interface GenerateAgentIdentityArgs {
32
+ include_private_key?: boolean;
33
+ }
34
+ export interface CreateIntentMandateArgs {
35
+ merchant_id: string;
36
+ customer_id: string;
37
+ intent: string;
38
+ max_amount: number;
39
+ currency?: string;
40
+ expires_at?: number;
41
+ }
42
+ export interface CreateCartMandateArgs {
43
+ merchant_id: string;
44
+ customer_id: string;
45
+ items: Array<{
46
+ id: string;
47
+ name: string;
48
+ quantity: number;
49
+ unit_price: number;
50
+ }>;
51
+ currency?: string;
52
+ }
53
+ export interface VerifyConsensusArgs {
54
+ message: string;
55
+ signature: string;
56
+ public_key: string;
57
+ agent_public_keys: string[];
58
+ consensus_threshold?: number;
59
+ }
60
+ export interface GetMandateInfoArgs {
61
+ mandate_id: string;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,GAAG,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * MCP Tool Type Definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp/tools/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * HTTP/SSE Transport for MCP Server
3
+ * Provides remote access to MCP tools via Server-Sent Events
4
+ */
5
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ /**
7
+ * HTTP transport configuration
8
+ */
9
+ export interface HttpTransportConfig {
10
+ /** Port to listen on */
11
+ port: number;
12
+ /** CORS origin (default: '*') */
13
+ corsOrigin?: string | string[];
14
+ /** Enable request logging */
15
+ enableLogging?: boolean;
16
+ }
17
+ /**
18
+ * HTTP MCP Server with SSE support
19
+ * Handles multiple client connections via session management
20
+ */
21
+ export declare class HttpMCPServer {
22
+ private app;
23
+ private server;
24
+ private sessions;
25
+ private config;
26
+ constructor(server: Server, config?: Partial<HttpTransportConfig>);
27
+ /**
28
+ * Setup Express middleware
29
+ */
30
+ private setupMiddleware;
31
+ /**
32
+ * Setup HTTP routes
33
+ */
34
+ private setupRoutes;
35
+ /**
36
+ * Start HTTP server
37
+ */
38
+ listen(): void;
39
+ /**
40
+ * Get active session count
41
+ */
42
+ getSessionCount(): number;
43
+ /**
44
+ * Get active session IDs
45
+ */
46
+ getSessionIds(): string[];
47
+ /**
48
+ * Close all sessions and shutdown
49
+ */
50
+ shutdown(): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/mcp/transports/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,6BAA6B;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAgC;gBAElC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAgBrE;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAqJnB;;OAEG;IACH,MAAM,IAAI,IAAI;IAad;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAehC"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * HTTP/SSE Transport for MCP Server
3
+ * Provides remote access to MCP tools via Server-Sent Events
4
+ */
5
+ import express from 'express';
6
+ import cors from 'cors';
7
+ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
8
+ /**
9
+ * HTTP MCP Server with SSE support
10
+ * Handles multiple client connections via session management
11
+ */
12
+ export class HttpMCPServer {
13
+ app;
14
+ server;
15
+ sessions;
16
+ config;
17
+ constructor(server, config = {}) {
18
+ this.server = server;
19
+ this.sessions = new Map();
20
+ // Default configuration
21
+ this.config = {
22
+ port: config.port || 3000,
23
+ corsOrigin: config.corsOrigin || '*',
24
+ enableLogging: config.enableLogging ?? true,
25
+ };
26
+ this.app = express();
27
+ this.setupMiddleware();
28
+ this.setupRoutes();
29
+ }
30
+ /**
31
+ * Setup Express middleware
32
+ */
33
+ setupMiddleware() {
34
+ // CORS configuration
35
+ this.app.use(cors({
36
+ origin: this.config.corsOrigin,
37
+ credentials: true,
38
+ methods: ['GET', 'POST', 'OPTIONS'],
39
+ allowedHeaders: ['Content-Type', 'Accept'],
40
+ }));
41
+ // JSON parsing
42
+ this.app.use(express.json());
43
+ // Request logging
44
+ if (this.config.enableLogging) {
45
+ this.app.use((req, _res, next) => {
46
+ const timestamp = new Date().toISOString();
47
+ console.error(`[${timestamp}] ${req.method} ${req.path}`);
48
+ next();
49
+ });
50
+ }
51
+ }
52
+ /**
53
+ * Setup HTTP routes
54
+ */
55
+ setupRoutes() {
56
+ // Health check endpoint
57
+ this.app.get('/health', (_req, res) => {
58
+ res.json({
59
+ status: 'healthy',
60
+ version: '0.1.0',
61
+ server: 'agentic-payments-mcp',
62
+ transport: 'http/sse',
63
+ activeSessions: this.sessions.size,
64
+ });
65
+ });
66
+ // SSE endpoint - establishes MCP connection
67
+ this.app.get('/sse', async (req, res) => {
68
+ try {
69
+ if (this.config.enableLogging) {
70
+ console.error(`[SSE] New connection request`);
71
+ }
72
+ // Create SSE transport - it generates its own session ID
73
+ // The endpoint for POST messages must match what transport expects
74
+ const transport = new SSEServerTransport(`/message`, res);
75
+ // Get the session ID that the transport generated
76
+ const sessionId = transport.sessionId;
77
+ this.sessions.set(sessionId, transport);
78
+ if (this.config.enableLogging) {
79
+ console.error(`[SSE] Established session: ${sessionId}`);
80
+ }
81
+ // Connect server to transport
82
+ await this.server.connect(transport);
83
+ // Don't immediately delete session on close - keep it for a grace period
84
+ // This allows POST requests to complete even if SSE disconnects briefly
85
+ req.on('close', () => {
86
+ if (this.config.enableLogging) {
87
+ console.error(`[SSE] Connection closed: ${sessionId}`);
88
+ }
89
+ // Grace period of 30 seconds before cleanup
90
+ setTimeout(() => {
91
+ if (this.sessions.has(sessionId)) {
92
+ this.sessions.delete(sessionId);
93
+ if (this.config.enableLogging) {
94
+ console.error(`[SSE] Session cleaned up: ${sessionId}`);
95
+ }
96
+ }
97
+ }, 30000);
98
+ });
99
+ // Handle errors
100
+ req.on('error', (error) => {
101
+ console.error(`[SSE] Connection error: ${sessionId}`, error);
102
+ // Don't immediately delete - same grace period
103
+ });
104
+ }
105
+ catch (error) {
106
+ console.error('[SSE] Failed to establish connection:', error);
107
+ if (!res.headersSent) {
108
+ res.status(500).json({
109
+ error: 'Failed to establish SSE connection',
110
+ message: error instanceof Error ? error.message : 'Unknown error',
111
+ });
112
+ }
113
+ }
114
+ });
115
+ // Message endpoint - receives client messages
116
+ this.app.post('/message', async (req, res) => {
117
+ try {
118
+ const sessionId = req.query.sessionId;
119
+ if (!sessionId) {
120
+ res.status(400).json({
121
+ error: 'Missing sessionId query parameter',
122
+ });
123
+ return;
124
+ }
125
+ const transport = this.sessions.get(sessionId);
126
+ if (!transport) {
127
+ res.status(404).json({
128
+ error: 'Session not found',
129
+ sessionId,
130
+ });
131
+ return;
132
+ }
133
+ // Forward message to transport with request body
134
+ await transport.handlePostMessage(req, res, req.body);
135
+ }
136
+ catch (error) {
137
+ console.error('[Message] Handler error:', error);
138
+ if (!res.headersSent) {
139
+ res.status(500).json({
140
+ error: 'Failed to process message',
141
+ message: error instanceof Error ? error.message : 'Unknown error',
142
+ });
143
+ }
144
+ }
145
+ });
146
+ // Sessions endpoint - list active sessions (for debugging)
147
+ this.app.get('/sessions', (_req, res) => {
148
+ const sessions = Array.from(this.sessions.keys());
149
+ res.json({
150
+ count: sessions.length,
151
+ sessions: sessions.map(id => ({
152
+ sessionId: id,
153
+ status: 'active',
154
+ })),
155
+ });
156
+ });
157
+ // Root endpoint - API information
158
+ this.app.get('/', (_req, res) => {
159
+ res.json({
160
+ name: 'agentic-payments-mcp',
161
+ version: '0.1.0',
162
+ protocol: 'MCP (Model Context Protocol)',
163
+ transport: 'HTTP/SSE',
164
+ endpoints: {
165
+ health: '/health',
166
+ sse: '/sse?sessionId=<uuid>',
167
+ message: '/message?sessionId=<uuid>',
168
+ sessions: '/sessions',
169
+ },
170
+ documentation: 'https://github.com/agentic-catalog/agentic-payments',
171
+ });
172
+ });
173
+ // 404 handler
174
+ this.app.use((_req, res) => {
175
+ res.status(404).json({
176
+ error: 'Not Found',
177
+ message: 'The requested endpoint does not exist',
178
+ });
179
+ });
180
+ // Error handler
181
+ this.app.use((error, _req, res, _next) => {
182
+ console.error('[Error]', error);
183
+ res.status(500).json({
184
+ error: 'Internal Server Error',
185
+ message: error.message,
186
+ });
187
+ });
188
+ }
189
+ /**
190
+ * Start HTTP server
191
+ */
192
+ listen() {
193
+ this.app.listen(this.config.port, () => {
194
+ console.error('='.repeat(60));
195
+ console.error('🚀 Agentic Payments MCP Server (HTTP/SSE)');
196
+ console.error('='.repeat(60));
197
+ console.error(`📡 Server: http://localhost:${this.config.port}`);
198
+ console.error(`🔗 SSE: http://localhost:${this.config.port}/sse`);
199
+ console.error(`💬 Messages: http://localhost:${this.config.port}/message`);
200
+ console.error(`❤️ Health: http://localhost:${this.config.port}/health`);
201
+ console.error('='.repeat(60));
202
+ });
203
+ }
204
+ /**
205
+ * Get active session count
206
+ */
207
+ getSessionCount() {
208
+ return this.sessions.size;
209
+ }
210
+ /**
211
+ * Get active session IDs
212
+ */
213
+ getSessionIds() {
214
+ return Array.from(this.sessions.keys());
215
+ }
216
+ /**
217
+ * Close all sessions and shutdown
218
+ */
219
+ async shutdown() {
220
+ console.error('Shutting down HTTP MCP server...');
221
+ // Close all active sessions
222
+ for (const [sessionId, transport] of this.sessions.entries()) {
223
+ try {
224
+ await transport.close();
225
+ this.sessions.delete(sessionId);
226
+ }
227
+ catch (error) {
228
+ console.error(`Error closing session ${sessionId}:`, error);
229
+ }
230
+ }
231
+ console.error('HTTP MCP server shutdown complete');
232
+ }
233
+ }
234
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/mcp/transports/http.ts"],"names":[],"mappings":"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"}