@scriptmasterlabs/mcp-x402 2.1.0 → 2.1.1

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 (253) hide show
  1. package/.well-known/x402.json +37 -0
  2. package/LICENSE +57 -21
  3. package/README.md +185 -227
  4. package/dist/index.d.ts +12 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +9 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/mcp-wrapper.d.ts +71 -0
  9. package/dist/mcp-wrapper.d.ts.map +1 -0
  10. package/dist/mcp-wrapper.js +104 -0
  11. package/dist/mcp-wrapper.js.map +1 -0
  12. package/dist/x402-middleware.d.ts +76 -0
  13. package/dist/x402-middleware.d.ts.map +1 -0
  14. package/dist/x402-middleware.js +113 -0
  15. package/dist/x402-middleware.js.map +1 -0
  16. package/dist/xrpl-facilitator.d.ts +77 -0
  17. package/dist/xrpl-facilitator.d.ts.map +1 -0
  18. package/dist/xrpl-facilitator.js +156 -0
  19. package/dist/xrpl-facilitator.js.map +1 -0
  20. package/llms.txt +108 -170
  21. package/package.json +43 -56
  22. package/schema.jsonld +97 -0
  23. package/.well-known/agentcard.json +0 -34
  24. package/.well-known/ai.txt +0 -32
  25. package/CONTRIBUTING.md +0 -76
  26. package/agents.json +0 -81
  27. package/ai/faq.json +0 -74
  28. package/ai/summary.json +0 -157
  29. package/dist/lib/chains/base.d.ts +0 -10
  30. package/dist/lib/chains/base.d.ts.map +0 -1
  31. package/dist/lib/chains/base.js +0 -75
  32. package/dist/lib/chains/base.js.map +0 -1
  33. package/dist/lib/chains/solana.d.ts +0 -10
  34. package/dist/lib/chains/solana.d.ts.map +0 -1
  35. package/dist/lib/chains/solana.js +0 -49
  36. package/dist/lib/chains/solana.js.map +0 -1
  37. package/dist/lib/chains/xrpl.d.ts +0 -10
  38. package/dist/lib/chains/xrpl.d.ts.map +0 -1
  39. package/dist/lib/chains/xrpl.js +0 -55
  40. package/dist/lib/chains/xrpl.js.map +0 -1
  41. package/dist/lib/credit/bureau.d.ts +0 -16
  42. package/dist/lib/credit/bureau.d.ts.map +0 -1
  43. package/dist/lib/credit/bureau.js +0 -88
  44. package/dist/lib/credit/bureau.js.map +0 -1
  45. package/dist/lib/sml-api/agentcard.d.ts +0 -17
  46. package/dist/lib/sml-api/agentcard.d.ts.map +0 -1
  47. package/dist/lib/sml-api/agentcard.js +0 -30
  48. package/dist/lib/sml-api/agentcard.js.map +0 -1
  49. package/dist/lib/sml-api/backtest.d.ts +0 -22
  50. package/dist/lib/sml-api/backtest.d.ts.map +0 -1
  51. package/dist/lib/sml-api/backtest.js +0 -28
  52. package/dist/lib/sml-api/backtest.js.map +0 -1
  53. package/dist/lib/sml-api/brokers.d.ts +0 -40
  54. package/dist/lib/sml-api/brokers.d.ts.map +0 -1
  55. package/dist/lib/sml-api/brokers.js +0 -128
  56. package/dist/lib/sml-api/brokers.js.map +0 -1
  57. package/dist/lib/sml-api/copytrader.d.ts +0 -11
  58. package/dist/lib/sml-api/copytrader.d.ts.map +0 -1
  59. package/dist/lib/sml-api/copytrader.js +0 -30
  60. package/dist/lib/sml-api/copytrader.js.map +0 -1
  61. package/dist/lib/sml-api/crawl.d.ts +0 -20
  62. package/dist/lib/sml-api/crawl.d.ts.map +0 -1
  63. package/dist/lib/sml-api/crawl.js +0 -32
  64. package/dist/lib/sml-api/crawl.js.map +0 -1
  65. package/dist/lib/sml-api/echo.d.ts +0 -10
  66. package/dist/lib/sml-api/echo.d.ts.map +0 -1
  67. package/dist/lib/sml-api/echo.js +0 -23
  68. package/dist/lib/sml-api/echo.js.map +0 -1
  69. package/dist/lib/sml-api/forge.d.ts +0 -11
  70. package/dist/lib/sml-api/forge.d.ts.map +0 -1
  71. package/dist/lib/sml-api/forge.js +0 -29
  72. package/dist/lib/sml-api/forge.js.map +0 -1
  73. package/dist/lib/sml-api/ftd.d.ts +0 -18
  74. package/dist/lib/sml-api/ftd.d.ts.map +0 -1
  75. package/dist/lib/sml-api/ftd.js +0 -43
  76. package/dist/lib/sml-api/ftd.js.map +0 -1
  77. package/dist/lib/sml-api/ghost.d.ts +0 -13
  78. package/dist/lib/sml-api/ghost.d.ts.map +0 -1
  79. package/dist/lib/sml-api/ghost.js +0 -29
  80. package/dist/lib/sml-api/ghost.js.map +0 -1
  81. package/dist/lib/sml-api/launchpad.d.ts +0 -20
  82. package/dist/lib/sml-api/launchpad.d.ts.map +0 -1
  83. package/dist/lib/sml-api/launchpad.js +0 -31
  84. package/dist/lib/sml-api/launchpad.js.map +0 -1
  85. package/dist/lib/sml-api/leviathan.d.ts +0 -22
  86. package/dist/lib/sml-api/leviathan.d.ts.map +0 -1
  87. package/dist/lib/sml-api/leviathan.js +0 -33
  88. package/dist/lib/sml-api/leviathan.js.map +0 -1
  89. package/dist/lib/sml-api/nexus.d.ts +0 -18
  90. package/dist/lib/sml-api/nexus.d.ts.map +0 -1
  91. package/dist/lib/sml-api/nexus.js +0 -40
  92. package/dist/lib/sml-api/nexus.js.map +0 -1
  93. package/dist/lib/sml-api/proof402.d.ts +0 -6
  94. package/dist/lib/sml-api/proof402.d.ts.map +0 -1
  95. package/dist/lib/sml-api/proof402.js +0 -30
  96. package/dist/lib/sml-api/proof402.js.map +0 -1
  97. package/dist/lib/sml-api/rails.d.ts +0 -12
  98. package/dist/lib/sml-api/rails.d.ts.map +0 -1
  99. package/dist/lib/sml-api/rails.js +0 -29
  100. package/dist/lib/sml-api/rails.js.map +0 -1
  101. package/dist/lib/sml-api/shadow.d.ts +0 -15
  102. package/dist/lib/sml-api/shadow.d.ts.map +0 -1
  103. package/dist/lib/sml-api/shadow.js +0 -27
  104. package/dist/lib/sml-api/shadow.js.map +0 -1
  105. package/dist/lib/sml-api/squeezeos.d.ts +0 -21
  106. package/dist/lib/sml-api/squeezeos.d.ts.map +0 -1
  107. package/dist/lib/sml-api/squeezeos.js +0 -97
  108. package/dist/lib/sml-api/squeezeos.js.map +0 -1
  109. package/dist/lib/sml-api/xdeo.d.ts +0 -13
  110. package/dist/lib/sml-api/xdeo.d.ts.map +0 -1
  111. package/dist/lib/sml-api/xdeo.js +0 -34
  112. package/dist/lib/sml-api/xdeo.js.map +0 -1
  113. package/dist/lib/sml-api/xmit.d.ts +0 -13
  114. package/dist/lib/sml-api/xmit.d.ts.map +0 -1
  115. package/dist/lib/sml-api/xmit.js +0 -34
  116. package/dist/lib/sml-api/xmit.js.map +0 -1
  117. package/dist/server/health.d.ts +0 -16
  118. package/dist/server/health.d.ts.map +0 -1
  119. package/dist/server/health.js +0 -39
  120. package/dist/server/health.js.map +0 -1
  121. package/dist/server/index.d.ts +0 -3
  122. package/dist/server/index.d.ts.map +0 -1
  123. package/dist/server/index.js +0 -322
  124. package/dist/server/index.js.map +0 -1
  125. package/dist/server/payments/ap2.d.ts +0 -17
  126. package/dist/server/payments/ap2.d.ts.map +0 -1
  127. package/dist/server/payments/ap2.js +0 -77
  128. package/dist/server/payments/ap2.js.map +0 -1
  129. package/dist/server/payments/receipt.d.ts +0 -28
  130. package/dist/server/payments/receipt.d.ts.map +0 -1
  131. package/dist/server/payments/receipt.js +0 -60
  132. package/dist/server/payments/receipt.js.map +0 -1
  133. package/dist/server/payments/router.d.ts +0 -23
  134. package/dist/server/payments/router.d.ts.map +0 -1
  135. package/dist/server/payments/router.js +0 -69
  136. package/dist/server/payments/router.js.map +0 -1
  137. package/dist/server/payments/wallet.d.ts +0 -18
  138. package/dist/server/payments/wallet.d.ts.map +0 -1
  139. package/dist/server/payments/wallet.js +0 -107
  140. package/dist/server/payments/wallet.js.map +0 -1
  141. package/dist/server/payments/x402.d.ts +0 -29
  142. package/dist/server/payments/x402.d.ts.map +0 -1
  143. package/dist/server/payments/x402.js +0 -138
  144. package/dist/server/payments/x402.js.map +0 -1
  145. package/dist/server/registry/catalog.d.ts +0 -12
  146. package/dist/server/registry/catalog.d.ts.map +0 -1
  147. package/dist/server/registry/catalog.js +0 -55
  148. package/dist/server/registry/catalog.js.map +0 -1
  149. package/dist/server/registry/discovery.d.ts +0 -16
  150. package/dist/server/registry/discovery.d.ts.map +0 -1
  151. package/dist/server/registry/discovery.js +0 -33
  152. package/dist/server/registry/discovery.js.map +0 -1
  153. package/dist/server/registry/pricing.d.ts +0 -10
  154. package/dist/server/registry/pricing.d.ts.map +0 -1
  155. package/dist/server/registry/pricing.js +0 -123
  156. package/dist/server/registry/pricing.js.map +0 -1
  157. package/dist/server/security/acl.d.ts +0 -28
  158. package/dist/server/security/acl.d.ts.map +0 -1
  159. package/dist/server/security/acl.js +0 -36
  160. package/dist/server/security/acl.js.map +0 -1
  161. package/dist/server/security/audit.d.ts +0 -15
  162. package/dist/server/security/audit.d.ts.map +0 -1
  163. package/dist/server/security/audit.js +0 -77
  164. package/dist/server/security/audit.js.map +0 -1
  165. package/dist/server/security/rate-limit.d.ts +0 -12
  166. package/dist/server/security/rate-limit.d.ts.map +0 -1
  167. package/dist/server/security/rate-limit.js +0 -72
  168. package/dist/server/security/rate-limit.js.map +0 -1
  169. package/dist/server/security/sandbox.d.ts +0 -7
  170. package/dist/server/security/sandbox.d.ts.map +0 -1
  171. package/dist/server/security/sandbox.js +0 -42
  172. package/dist/server/security/sandbox.js.map +0 -1
  173. package/dist/server/tools/agentcard.d.ts +0 -3
  174. package/dist/server/tools/agentcard.d.ts.map +0 -1
  175. package/dist/server/tools/agentcard.js +0 -118
  176. package/dist/server/tools/agentcard.js.map +0 -1
  177. package/dist/server/tools/backtest.d.ts +0 -3
  178. package/dist/server/tools/backtest.d.ts.map +0 -1
  179. package/dist/server/tools/backtest.js +0 -112
  180. package/dist/server/tools/backtest.js.map +0 -1
  181. package/dist/server/tools/brokers.d.ts +0 -3
  182. package/dist/server/tools/brokers.d.ts.map +0 -1
  183. package/dist/server/tools/brokers.js +0 -223
  184. package/dist/server/tools/brokers.js.map +0 -1
  185. package/dist/server/tools/copytrader.d.ts +0 -3
  186. package/dist/server/tools/copytrader.d.ts.map +0 -1
  187. package/dist/server/tools/copytrader.js +0 -90
  188. package/dist/server/tools/copytrader.js.map +0 -1
  189. package/dist/server/tools/crawl.d.ts +0 -3
  190. package/dist/server/tools/crawl.d.ts.map +0 -1
  191. package/dist/server/tools/crawl.js +0 -60
  192. package/dist/server/tools/crawl.js.map +0 -1
  193. package/dist/server/tools/discovery.d.ts +0 -3
  194. package/dist/server/tools/discovery.d.ts.map +0 -1
  195. package/dist/server/tools/discovery.js +0 -188
  196. package/dist/server/tools/discovery.js.map +0 -1
  197. package/dist/server/tools/echo.d.ts +0 -3
  198. package/dist/server/tools/echo.d.ts.map +0 -1
  199. package/dist/server/tools/echo.js +0 -48
  200. package/dist/server/tools/echo.js.map +0 -1
  201. package/dist/server/tools/forge.d.ts +0 -3
  202. package/dist/server/tools/forge.d.ts.map +0 -1
  203. package/dist/server/tools/forge.js +0 -77
  204. package/dist/server/tools/forge.js.map +0 -1
  205. package/dist/server/tools/ftd.d.ts +0 -3
  206. package/dist/server/tools/ftd.d.ts.map +0 -1
  207. package/dist/server/tools/ftd.js +0 -70
  208. package/dist/server/tools/ftd.js.map +0 -1
  209. package/dist/server/tools/ghost.d.ts +0 -3
  210. package/dist/server/tools/ghost.d.ts.map +0 -1
  211. package/dist/server/tools/ghost.js +0 -83
  212. package/dist/server/tools/ghost.js.map +0 -1
  213. package/dist/server/tools/index.d.ts +0 -3
  214. package/dist/server/tools/index.d.ts.map +0 -1
  215. package/dist/server/tools/index.js +0 -44
  216. package/dist/server/tools/index.js.map +0 -1
  217. package/dist/server/tools/launchpad.d.ts +0 -3
  218. package/dist/server/tools/launchpad.d.ts.map +0 -1
  219. package/dist/server/tools/launchpad.js +0 -151
  220. package/dist/server/tools/launchpad.js.map +0 -1
  221. package/dist/server/tools/leviathan.d.ts +0 -3
  222. package/dist/server/tools/leviathan.d.ts.map +0 -1
  223. package/dist/server/tools/leviathan.js +0 -73
  224. package/dist/server/tools/leviathan.js.map +0 -1
  225. package/dist/server/tools/nexus.d.ts +0 -3
  226. package/dist/server/tools/nexus.d.ts.map +0 -1
  227. package/dist/server/tools/nexus.js +0 -65
  228. package/dist/server/tools/nexus.js.map +0 -1
  229. package/dist/server/tools/proof402.d.ts +0 -3
  230. package/dist/server/tools/proof402.d.ts.map +0 -1
  231. package/dist/server/tools/proof402.js +0 -74
  232. package/dist/server/tools/proof402.js.map +0 -1
  233. package/dist/server/tools/rails.d.ts +0 -3
  234. package/dist/server/tools/rails.d.ts.map +0 -1
  235. package/dist/server/tools/rails.js +0 -82
  236. package/dist/server/tools/rails.js.map +0 -1
  237. package/dist/server/tools/shadow.d.ts +0 -3
  238. package/dist/server/tools/shadow.d.ts.map +0 -1
  239. package/dist/server/tools/shadow.js +0 -114
  240. package/dist/server/tools/shadow.js.map +0 -1
  241. package/dist/server/tools/squeezeos.d.ts +0 -3
  242. package/dist/server/tools/squeezeos.d.ts.map +0 -1
  243. package/dist/server/tools/squeezeos.js +0 -231
  244. package/dist/server/tools/squeezeos.js.map +0 -1
  245. package/dist/server/tools/xdeo.d.ts +0 -3
  246. package/dist/server/tools/xdeo.d.ts.map +0 -1
  247. package/dist/server/tools/xdeo.js +0 -58
  248. package/dist/server/tools/xdeo.js.map +0 -1
  249. package/dist/server/tools/xmit.d.ts +0 -3
  250. package/dist/server/tools/xmit.d.ts.map +0 -1
  251. package/dist/server/tools/xmit.js +0 -59
  252. package/dist/server/tools/xmit.js.map +0 -1
  253. package/server.json +0 -52
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.XdeoClient = void 0;
4
- class XdeoClient {
5
- static instance;
6
- baseUrl;
7
- constructor() {
8
- this.baseUrl = process.env['SML_API_BASE'] ?? 'https://api.scriptmasterlabs.com';
9
- }
10
- static getInstance() {
11
- if (!XdeoClient.instance) {
12
- XdeoClient.instance = new XdeoClient();
13
- }
14
- return XdeoClient.instance;
15
- }
16
- async getEstimate(params) {
17
- const res = await fetch(`${this.baseUrl}/xdeo/v1/estimate`, {
18
- method: 'POST',
19
- headers: { 'Content-Type': 'application/json' },
20
- body: JSON.stringify({
21
- ticker: params.ticker,
22
- fiscal_quarter: params.fiscalQuarter,
23
- estimate_type: params.estimateType,
24
- }),
25
- signal: AbortSignal.timeout(10_000),
26
- });
27
- if (!res.ok) {
28
- throw new Error(`xDEO API error: HTTP ${res.status}`);
29
- }
30
- return res.json();
31
- }
32
- }
33
- exports.XdeoClient = XdeoClient;
34
- //# sourceMappingURL=xdeo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xdeo.js","sourceRoot":"","sources":["../../../src/lib/sml-api/xdeo.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IACnB,OAAO,CAAS;IAEjC;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAA0B;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,cAAc,EAAE,MAAM,CAAC,aAAa;gBACpC,aAAa,EAAE,MAAM,CAAC,YAAY;aACnC,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AAjCD,gCAiCC"}
@@ -1,13 +0,0 @@
1
- export interface XmitDecodeParams {
2
- filingUrl: string;
3
- parseTarget: 'executive_pay' | 'holdings' | 'ownership_changes' | 'all';
4
- format: 'json' | 'markdown';
5
- }
6
- export declare class XmitClient {
7
- private static instance;
8
- private readonly baseUrl;
9
- private constructor();
10
- static getInstance(): XmitClient;
11
- decode(params: XmitDecodeParams): Promise<unknown>;
12
- }
13
- //# sourceMappingURL=xmit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmit.d.ts","sourceRoot":"","sources":["../../../src/lib/sml-api/xmit.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,eAAe,GAAG,UAAU,GAAG,mBAAmB,GAAG,KAAK,CAAC;IACxE,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CAC7B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,UAAU;IAO1B,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBzD"}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.XmitClient = void 0;
4
- class XmitClient {
5
- static instance;
6
- baseUrl;
7
- constructor() {
8
- this.baseUrl = process.env['SML_API_BASE'] ?? 'https://api.scriptmasterlabs.com';
9
- }
10
- static getInstance() {
11
- if (!XmitClient.instance) {
12
- XmitClient.instance = new XmitClient();
13
- }
14
- return XmitClient.instance;
15
- }
16
- async decode(params) {
17
- const res = await fetch(`${this.baseUrl}/xmit/v1/decode`, {
18
- method: 'POST',
19
- headers: { 'Content-Type': 'application/json' },
20
- body: JSON.stringify({
21
- filing_url: params.filingUrl,
22
- parse_target: params.parseTarget,
23
- format: params.format,
24
- }),
25
- signal: AbortSignal.timeout(30_000),
26
- });
27
- if (!res.ok) {
28
- throw new Error(`xMIT API error: HTTP ${res.status}`);
29
- }
30
- return res.json();
31
- }
32
- }
33
- exports.XmitClient = XmitClient;
34
- //# sourceMappingURL=xmit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xmit.js","sourceRoot":"","sources":["../../../src/lib/sml-api/xmit.ts"],"names":[],"mappings":";;;AAMA,MAAa,UAAU;IACb,MAAM,CAAC,QAAQ,CAAa;IACnB,OAAO,CAAS;IAEjC;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,kCAAkC,CAAC;IACnF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAwB;QACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,iBAAiB,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;CACF;AAjCD,gCAiCC"}
@@ -1,16 +0,0 @@
1
- import type { Request, Response } from 'express';
2
- export interface HealthStatus {
3
- status: 'ok' | 'degraded';
4
- version: string;
5
- transport: string;
6
- uptime_seconds: number;
7
- uptime_human: string;
8
- timestamp: string;
9
- checks: {
10
- process: 'ok';
11
- memory_mb: number;
12
- memory_ok: boolean;
13
- };
14
- }
15
- export declare function healthHandler(_req: Request, res: Response): void;
16
- //# sourceMappingURL=health.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,IAAI,GAAG,UAAU,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,OAAO,EAAE,IAAI,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAaD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAsBhE"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.healthHandler = healthHandler;
4
- const startTime = Date.now();
5
- function formatUptime(ms) {
6
- const s = Math.floor(ms / 1000);
7
- const m = Math.floor(s / 60);
8
- const h = Math.floor(m / 60);
9
- const d = Math.floor(h / 24);
10
- if (d > 0)
11
- return `${d}d ${h % 24}h ${m % 60}m`;
12
- if (h > 0)
13
- return `${h}h ${m % 60}m ${s % 60}s`;
14
- if (m > 0)
15
- return `${m}m ${s % 60}s`;
16
- return `${s}s`;
17
- }
18
- function healthHandler(_req, res) {
19
- const uptimeMs = Date.now() - startTime;
20
- const memMb = Math.round(process.memoryUsage().rss / 1024 / 1024);
21
- const memOk = memMb < 450; // warn if approaching 512MB container limit
22
- const body = {
23
- status: memOk ? 'ok' : 'degraded',
24
- version: process.env['npm_package_version'] ?? '1.0.0',
25
- transport: process.env['MCP_TRANSPORT'] ?? 'stdio',
26
- uptime_seconds: Math.floor(uptimeMs / 1000),
27
- uptime_human: formatUptime(uptimeMs),
28
- timestamp: new Date().toISOString(),
29
- checks: {
30
- process: 'ok',
31
- memory_mb: memMb,
32
- memory_ok: memOk,
33
- },
34
- };
35
- // Return 200 even if degraded — let the orchestrator decide.
36
- // Only return 5xx if the process itself is fundamentally broken.
37
- res.status(200).json(body);
38
- }
39
- //# sourceMappingURL=health.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/server/health.ts"],"names":[],"mappings":";;AA6BA,sCAsBC;AAjDD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAgB7B,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAED,SAAgB,aAAa,CAAC,IAAa,EAAE,GAAa;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,4CAA4C;IAEvE,MAAM,IAAI,GAAiB;QACzB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;QACjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,OAAO;QACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO;QAClD,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3C,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;QACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE;YACN,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,KAAK;SACjB;KACF,CAAC;IAEF,6DAA6D;IAC7D,iEAAiE;IACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":""}
@@ -1,322 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
8
- const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
9
- const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
10
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
11
- const express_1 = __importDefault(require("express"));
12
- const crypto_1 = require("crypto");
13
- const cors_1 = __importDefault(require("cors"));
14
- const index_js_1 = require("./tools/index.js");
15
- const audit_js_1 = require("./security/audit.js");
16
- const rate_limit_js_1 = require("./security/rate-limit.js");
17
- const health_js_1 = require("./health.js");
18
- const VERSION = '1.0.0';
19
- async function createServer() {
20
- const server = new mcp_js_1.McpServer({ name: 'mcp-x402', version: VERSION }, { capabilities: { tools: {} } });
21
- await (0, index_js_1.registerTools)(server);
22
- return server;
23
- }
24
- async function runStdio() {
25
- const server = await createServer();
26
- const transport = new stdio_js_1.StdioServerTransport();
27
- await server.connect(transport);
28
- audit_js_1.AuditLogger.getInstance().info('server_start', { transport: 'stdio', version: VERSION });
29
- const shutdown = async () => {
30
- audit_js_1.AuditLogger.getInstance().info('server_stop', { transport: 'stdio' });
31
- await server.close();
32
- process.exit(0);
33
- };
34
- process.on('SIGINT', shutdown);
35
- process.on('SIGTERM', shutdown);
36
- // Keep stdio process alive — reconnect on unexpected transport close
37
- process.stdin.on('end', () => {
38
- audit_js_1.AuditLogger.getInstance().warn('stdio_stdin_end', {});
39
- process.exit(0);
40
- });
41
- }
42
- async function runSSE() {
43
- const app = (0, express_1.default)();
44
- const port = parseInt(process.env['MCP_SSE_PORT'] ?? '3402', 10);
45
- app.use((0, cors_1.default)({ origin: process.env['CORS_ORIGIN'] ?? '*' }));
46
- app.use(express_1.default.json({ limit: '1mb' }));
47
- // Health endpoint — hit every 30s by Docker healthcheck + keepalive cron
48
- app.get('/health', health_js_1.healthHandler);
49
- // Wallet info — shows the server's derived wallet address (safe to expose, no private key)
50
- app.get('/wallet', async (_req, res) => {
51
- const { WalletManager } = await import('./payments/wallet.js');
52
- const wallet = await WalletManager.getInstance().getOrCreateWallet();
53
- res.json({ address: wallet.address, chain: wallet.chain, note: 'Fund this address with USDC on Base to enable outbound payments.' });
54
- });
55
- app.get('/agents.json', (_req, res) => {
56
- res.sendFile('agents.json', { root: process.cwd() });
57
- });
58
- app.get('/llms.txt', (_req, res) => {
59
- res.sendFile('llms.txt', { root: process.cwd() });
60
- });
61
- app.get('/.well-known/agentcard.json', (_req, res) => {
62
- res.sendFile('.well-known/agentcard.json', { root: process.cwd() });
63
- });
64
- // Root handler — service discovery for agents hitting / directly
65
- app.get('/', (_req, res) => {
66
- res.json({
67
- name: 'mcp-x402',
68
- version: VERSION,
69
- description: 'The x402 Amazon — 43+ tools, pay-per-call via XRPL. scriptmasterlabs.com',
70
- status: 'online',
71
- transport: 'streamable-http + sse',
72
- endpoints: {
73
- mcp_streamable: 'POST /mcp',
74
- sse_connect: 'GET /sse',
75
- sse_messages: 'POST /messages',
76
- health: 'GET /health',
77
- agentCard: 'GET /.well-known/agentcard.json',
78
- llms: 'GET /llms.txt',
79
- },
80
- links: {
81
- github: 'https://github.com/Timwal78/SML_Portfolio/tree/main/mcp-x402',
82
- homepage: 'https://scriptmasterlabs.com',
83
- },
84
- });
85
- });
86
- // --- MONETIZATION FLYWHEEL (Credit Bureau & Paid Endpoints) ---
87
- const creditScores = new Map();
88
- const freeTierUsage = new Map();
89
- function getScore(did) {
90
- if (!creditScores.has(did))
91
- creditScores.set(did, 300);
92
- return creditScores.get(did);
93
- }
94
- function recordPaidCall(did) {
95
- const score = getScore(did) + 5;
96
- const newScore = Math.min(score, 850);
97
- creditScores.set(did, newScore);
98
- return newScore;
99
- }
100
- const COUNCIL_PRICE = "0.10";
101
- const VIP_PRICE = "0.08";
102
- const PLATINUM_PRICE = "0.06";
103
- async function agentDidMiddleware(req, res, next) {
104
- const proofHeader = req.headers["x-payment-proof"];
105
- let agentDid = req.headers["x-agent-did"];
106
- if (!agentDid && proofHeader) {
107
- try {
108
- const proof = JSON.parse(Buffer.from(proofHeader, "base64").toString("utf8"));
109
- agentDid = `did:poi:xrpl:${proof.payer}`;
110
- }
111
- catch { }
112
- }
113
- if (!agentDid) {
114
- agentDid = `did:anonymous:${req.ip?.replace(/[:.]/g, "-")}`;
115
- }
116
- req.agentDid = agentDid;
117
- next();
118
- }
119
- async function freeTierRateLimit(req, res, next) {
120
- const did = req.agentDid;
121
- const today = new Date().toISOString().slice(0, 10);
122
- let usage = freeTierUsage.get(did) || { count: 0, date: today };
123
- if (usage.date !== today)
124
- usage = { count: 0, date: today };
125
- usage.count++;
126
- freeTierUsage.set(did, usage);
127
- if (usage.count > 3) {
128
- res.status(429).json({
129
- error: "free_tier_exhausted",
130
- message: "Free tier limit: 3 calls/day. Upgrade via x402 payment.",
131
- upgradeEndpoint: "/api/council",
132
- price: COUNCIL_PRICE,
133
- currency: "RLUSD",
134
- network: process.env['XRPL_NETWORK'] ?? "xrpl-mainnet",
135
- yourScore: getScore(did)
136
- });
137
- return;
138
- }
139
- next();
140
- }
141
- async function dynamicPriceGate(req, res, next) {
142
- const did = req.agentDid || "did:anonymous";
143
- const score = getScore(did);
144
- const proofHeader = req.headers["x-payment-proof"];
145
- if (proofHeader) {
146
- next();
147
- return;
148
- }
149
- const price = score >= 800 ? PLATINUM_PRICE : score >= 700 ? VIP_PRICE : COUNCIL_PRICE;
150
- const receivingAddress = process.env['XRPL_RECEIVING_ADDRESS'];
151
- if (!receivingAddress) {
152
- res.status(503).json({ error: 'payment_not_configured', message: 'XRPL_RECEIVING_ADDRESS not set' });
153
- return;
154
- }
155
- const requirements = {
156
- destination: receivingAddress,
157
- amount: price,
158
- currency: "RLUSD",
159
- network: process.env['XRPL_NETWORK'] ?? "xrpl-mainnet",
160
- description: `SqueezeOS Premium — ${price} RLUSD (Score: ${score})`,
161
- expiresAt: new Date(Date.now() + 60000).toISOString()
162
- };
163
- const encoded = Buffer.from(JSON.stringify(requirements)).toString("base64");
164
- res.status(402).setHeader("X-Payment-Requirements", encoded).json({
165
- error: "payment_required",
166
- protocol: "x402",
167
- price,
168
- currency: "RLUSD",
169
- agentCreditScore: score,
170
- vipEligible: score >= 700,
171
- requirements
172
- });
173
- }
174
- app.get("/api/beastmode", agentDidMiddleware, freeTierRateLimit, (req, res) => {
175
- const score = getScore(req.agentDid);
176
- res.json({
177
- tool: "beastmode", tier: "free",
178
- result: { status: "Awaiting Data", note: "Free tier preview only. Full scan requires /api/beastmode/full (0.10 RLUSD)", agentCreditScore: score },
179
- watermark: "ScriptMasterLabs — mcp-x402"
180
- });
181
- });
182
- app.get("/api/demo/council", agentDidMiddleware, freeTierRateLimit, (req, res) => {
183
- const score = getScore(req.agentDid);
184
- res.json({
185
- tool: "council_demo", tier: "free", councilMember: "RISK_SENTINEL",
186
- response: "Awaiting Data — connect wallet and pay for full council verdict.", agentCreditScore: score,
187
- watermark: "ScriptMasterLabs — mcp-x402"
188
- });
189
- });
190
- app.get("/api/credit-score", agentDidMiddleware, (req, res) => {
191
- const did = req.agentDid;
192
- const score = getScore(did);
193
- res.json({ agentDid: did, creditScore: score, scale: "300-850", benefits: { "700+": "VIP 0.08 RLUSD", "800+": "Platinum 0.06 RLUSD" } });
194
- });
195
- app.post("/api/council", agentDidMiddleware, dynamicPriceGate, (req, res) => {
196
- const newScore = recordPaidCall(req.agentDid);
197
- res.json({
198
- tool: "council", tier: "paid", consensus: "Awaiting Data", agentCreditScore: newScore, scoreGained: "+5",
199
- note: "Route to SqueezeOS council endpoint for live verdict"
200
- });
201
- });
202
- app.post("/api/beastmode/full", agentDidMiddleware, dynamicPriceGate, (req, res) => {
203
- const newScore = recordPaidCall(req.agentDid);
204
- res.json({
205
- tool: "beastmode_full", tier: "paid", scan: "Awaiting Data",
206
- agentCreditScore: newScore, scoreGained: "+5"
207
- });
208
- });
209
- // Streamable HTTP transport — used by claude.ai web connectors
210
- const streamableTransports = new Map();
211
- app.post('/mcp', async (req, res) => {
212
- const sessionId = req.headers['mcp-session-id'];
213
- let transport = sessionId ? streamableTransports.get(sessionId) : undefined;
214
- if (!transport) {
215
- const newSessionId = (0, crypto_1.randomUUID)();
216
- transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: () => newSessionId });
217
- streamableTransports.set(newSessionId, transport);
218
- transport.onclose = () => streamableTransports.delete(newSessionId);
219
- const server = await createServer();
220
- await server.connect(transport);
221
- audit_js_1.AuditLogger.getInstance().info('mcp_connect', { sessionId: newSessionId });
222
- }
223
- await transport.handleRequest(req, res, req.body);
224
- });
225
- // GET /mcp with no session returns service info instead of 404
226
- app.get('/mcp', async (req, res) => {
227
- const sessionId = req.headers['mcp-session-id'];
228
- const transport = sessionId ? streamableTransports.get(sessionId) : undefined;
229
- if (!transport) {
230
- res.json({
231
- name: 'mcp-x402',
232
- version: VERSION,
233
- protocol: 'MCP/streamable-http',
234
- status: 'ready',
235
- tools: '43+ tools available',
236
- how_to_connect: 'POST /mcp with a JSON-RPC initialize request',
237
- sse_alternative: 'GET /sse for legacy SSE transport',
238
- health: '/health',
239
- homepage: 'https://scriptmasterlabs.com',
240
- });
241
- return;
242
- }
243
- await transport.handleRequest(req, res);
244
- });
245
- app.delete('/mcp', async (req, res) => {
246
- const sessionId = req.headers['mcp-session-id'];
247
- const transport = sessionId ? streamableTransports.get(sessionId) : undefined;
248
- if (!transport) {
249
- res.status(404).json({ error: 'session_not_found' });
250
- return;
251
- }
252
- await transport.handleRequest(req, res);
253
- });
254
- const transports = new Map();
255
- const rateLimiter = rate_limit_js_1.RateLimiter.getInstance();
256
- app.get('/sse', async (req, res) => {
257
- const clientIp = req.ip ?? 'unknown';
258
- if (!rateLimiter.checkIp(clientIp)) {
259
- res.status(429).json({ error: 'rate_limit_exceeded', retry_after: 60 });
260
- return;
261
- }
262
- const transport = new sse_js_1.SSEServerTransport('/messages', res);
263
- const sessionId = transport.sessionId;
264
- transports.set(sessionId, transport);
265
- const server = await createServer();
266
- await server.connect(transport);
267
- audit_js_1.AuditLogger.getInstance().info('sse_connect', { sessionId, clientIp });
268
- res.on('close', async () => {
269
- transports.delete(sessionId);
270
- audit_js_1.AuditLogger.getInstance().info('sse_disconnect', { sessionId });
271
- await server.close();
272
- });
273
- });
274
- app.post('/messages', async (req, res) => {
275
- const sessionId = req.query['sessionId'];
276
- if (!sessionId) {
277
- res.status(400).json({ error: 'missing_session_id' });
278
- return;
279
- }
280
- const transport = transports.get(sessionId);
281
- if (!transport) {
282
- res.status(404).json({ error: 'session_not_found' });
283
- return;
284
- }
285
- await transport.handlePostMessage(req, res);
286
- });
287
- const httpServer = await new Promise((resolve) => {
288
- const s = app.listen(port, () => resolve(s));
289
- });
290
- audit_js_1.AuditLogger.getInstance().info('server_start', { transport: 'sse', port, version: VERSION });
291
- console.error(`[mcp-x402] listening on :${port} — health: http://localhost:${port}/health`);
292
- const shutdown = async () => {
293
- audit_js_1.AuditLogger.getInstance().info('server_stop', { transport: 'sse' });
294
- for (const [id] of transports) {
295
- audit_js_1.AuditLogger.getInstance().info('sse_force_close', { sessionId: id });
296
- }
297
- httpServer.close(() => process.exit(0));
298
- setTimeout(() => process.exit(1), 10_000).unref();
299
- };
300
- process.on('SIGINT', shutdown);
301
- process.on('SIGTERM', shutdown);
302
- process.on('uncaughtException', (err) => {
303
- audit_js_1.AuditLogger.getInstance().error('uncaught_exception', { error: String(err), stack: err.stack ?? '' });
304
- });
305
- process.on('unhandledRejection', (reason) => {
306
- audit_js_1.AuditLogger.getInstance().error('unhandledRejection', { reason: String(reason) });
307
- });
308
- }
309
- const transport = process.env['MCP_TRANSPORT'] ?? 'stdio';
310
- if (transport === 'sse') {
311
- runSSE().catch((err) => {
312
- console.error('[mcp-x402] fatal:', err);
313
- process.exit(1);
314
- });
315
- }
316
- else {
317
- runStdio().catch((err) => {
318
- console.error('[mcp-x402] fatal:', err);
319
- process.exit(1);
320
- });
321
- }
322
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- export interface MandateParams {
2
- maxAmount: string;
3
- currency: string;
4
- toolName: string;
5
- }
6
- export declare class AP2Client {
7
- private static instance;
8
- private readonly baseUrl;
9
- private constructor();
10
- static getInstance(): AP2Client;
11
- verifyMandate(wallet: string, params: MandateParams): Promise<boolean>;
12
- createMandate(wallet: string, params: {
13
- dailyCap: string;
14
- currency: string;
15
- }): Promise<string>;
16
- }
17
- //# sourceMappingURL=ap2.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ap2.d.ts","sourceRoot":"","sources":["../../../src/server/payments/ap2.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,SAAS;IAOzB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAgDtE,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,MAAM,CAAC;CAkBnB"}
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AP2Client = void 0;
4
- const audit_js_1 = require("../security/audit.js");
5
- // In-memory mandate cache — 5 minute TTL per wallet+tool combination
6
- const mandateCache = new Map();
7
- class AP2Client {
8
- static instance;
9
- baseUrl;
10
- constructor() {
11
- this.baseUrl = process.env['SML_API_BASE'] ?? 'https://api.scriptmasterlabs.com';
12
- }
13
- static getInstance() {
14
- if (!AP2Client.instance) {
15
- AP2Client.instance = new AP2Client();
16
- }
17
- return AP2Client.instance;
18
- }
19
- async verifyMandate(wallet, params) {
20
- const cacheKey = `${wallet}:${params.toolName}:${params.currency}`;
21
- const cached = mandateCache.get(cacheKey);
22
- if (cached && cached.expiresAt > Date.now()) {
23
- return cached.valid;
24
- }
25
- const audit = audit_js_1.AuditLogger.getInstance();
26
- try {
27
- const controller = new AbortController();
28
- const timeout = setTimeout(() => controller.abort(), 5000);
29
- const res = await fetch(`${this.baseUrl}/ap2/v1/mandate/verify`, {
30
- method: 'POST',
31
- headers: { 'Content-Type': 'application/json' },
32
- body: JSON.stringify({
33
- wallet,
34
- max_amount: params.maxAmount,
35
- currency: params.currency,
36
- tool: params.toolName,
37
- }),
38
- signal: controller.signal,
39
- });
40
- clearTimeout(timeout);
41
- if (!res.ok) {
42
- audit.warn('ap2_mandate_http_error', { status: res.status, wallet });
43
- mandateCache.set(cacheKey, { valid: false, expiresAt: Date.now() + 60_000 });
44
- return false;
45
- }
46
- const body = (await res.json());
47
- const ttl = (body.expires_in ?? 300) * 1000;
48
- mandateCache.set(cacheKey, { valid: body.valid, expiresAt: Date.now() + ttl });
49
- return body.valid;
50
- }
51
- catch (err) {
52
- audit.error('ap2_mandate_error', { error: String(err), wallet });
53
- // Fail open when AP2 service is unreachable — log and allow
54
- audit.warn('ap2_mandate_fallback', { wallet, tool: params.toolName, note: 'AP2 unreachable, auto-approving' });
55
- mandateCache.set(cacheKey, { valid: true, expiresAt: Date.now() + 60_000 });
56
- return true;
57
- }
58
- }
59
- async createMandate(wallet, params) {
60
- const res = await fetch(`${this.baseUrl}/ap2/v1/mandate/create`, {
61
- method: 'POST',
62
- headers: { 'Content-Type': 'application/json' },
63
- body: JSON.stringify({
64
- wallet,
65
- daily_cap: params.dailyCap,
66
- currency: params.currency,
67
- }),
68
- });
69
- if (!res.ok) {
70
- throw new Error(`AP2 mandate creation failed: HTTP ${res.status}`);
71
- }
72
- const body = (await res.json());
73
- return body.mandate_id;
74
- }
75
- }
76
- exports.AP2Client = AP2Client;
77
- //# sourceMappingURL=ap2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ap2.js","sourceRoot":"","sources":["../../../src/server/payments/ap2.ts"],"names":[],"mappings":"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"}