@3rd-eye-labs/openmm 0.1.1 → 0.1.3

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 (268) hide show
  1. package/dist/cli/cli.js +4 -0
  2. package/dist/cli/cli.js.map +1 -1
  3. package/dist/cli/commands/ohlcv.d.ts +3 -0
  4. package/dist/cli/commands/ohlcv.d.ts.map +1 -0
  5. package/dist/cli/commands/ohlcv.js +115 -0
  6. package/dist/cli/commands/ohlcv.js.map +1 -0
  7. package/dist/cli/commands/wallet.d.ts +7 -0
  8. package/dist/cli/commands/wallet.d.ts.map +1 -0
  9. package/dist/cli/commands/wallet.js +271 -0
  10. package/dist/cli/commands/wallet.js.map +1 -0
  11. package/dist/core/exchange/base-exchange-connector.d.ts +2 -1
  12. package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -1
  13. package/dist/core/exchange/base-exchange-connector.js.map +1 -1
  14. package/dist/exchanges/bitget/bitget-connector.d.ts +11 -1
  15. package/dist/exchanges/bitget/bitget-connector.d.ts.map +1 -1
  16. package/dist/exchanges/bitget/bitget-connector.js +52 -0
  17. package/dist/exchanges/bitget/bitget-connector.js.map +1 -1
  18. package/dist/exchanges/gateio/gateio-connector.d.ts +11 -1
  19. package/dist/exchanges/gateio/gateio-connector.d.ts.map +1 -1
  20. package/dist/exchanges/gateio/gateio-connector.js +54 -0
  21. package/dist/exchanges/gateio/gateio-connector.js.map +1 -1
  22. package/dist/exchanges/kraken/kraken-connector.d.ts +6 -1
  23. package/dist/exchanges/kraken/kraken-connector.d.ts.map +1 -1
  24. package/dist/exchanges/kraken/kraken-connector.js +44 -0
  25. package/dist/exchanges/kraken/kraken-connector.js.map +1 -1
  26. package/dist/exchanges/mexc/mexc-auth.d.ts +1 -0
  27. package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -1
  28. package/dist/exchanges/mexc/mexc-auth.js +4 -1
  29. package/dist/exchanges/mexc/mexc-auth.js.map +1 -1
  30. package/dist/exchanges/mexc/mexc-connector.d.ts +6 -1
  31. package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -1
  32. package/dist/exchanges/mexc/mexc-connector.js +37 -0
  33. package/dist/exchanges/mexc/mexc-connector.js.map +1 -1
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +25 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/types/market.d.ts +15 -0
  39. package/dist/types/market.d.ts.map +1 -1
  40. package/dist/x402/crypto.d.ts +79 -0
  41. package/dist/x402/crypto.d.ts.map +1 -0
  42. package/dist/x402/crypto.js +300 -0
  43. package/dist/x402/crypto.js.map +1 -0
  44. package/dist/x402/evm.d.ts +41 -0
  45. package/dist/x402/evm.d.ts.map +1 -0
  46. package/dist/x402/evm.js +229 -0
  47. package/dist/x402/evm.js.map +1 -0
  48. package/dist/x402/handler.d.ts +53 -0
  49. package/dist/x402/handler.d.ts.map +1 -0
  50. package/dist/x402/handler.js +233 -0
  51. package/dist/x402/handler.js.map +1 -0
  52. package/dist/x402/index.d.ts +29 -0
  53. package/dist/x402/index.d.ts.map +1 -0
  54. package/dist/x402/index.js +67 -0
  55. package/dist/x402/index.js.map +1 -0
  56. package/dist/x402/types.d.ts +185 -0
  57. package/dist/x402/types.d.ts.map +1 -0
  58. package/dist/x402/types.js +7 -0
  59. package/dist/x402/types.js.map +1 -0
  60. package/dist/x402/wallet.d.ts +65 -0
  61. package/dist/x402/wallet.d.ts.map +1 -0
  62. package/dist/x402/wallet.js +282 -0
  63. package/dist/x402/wallet.js.map +1 -0
  64. package/package.json +1 -1
  65. package/dist/cli/commands/grid.d.ts +0 -3
  66. package/dist/cli/commands/grid.d.ts.map +0 -1
  67. package/dist/cli/commands/grid.js +0 -103
  68. package/dist/cli/commands/grid.js.map +0 -1
  69. package/dist/cli/commands/multi-trade.d.ts +0 -3
  70. package/dist/cli/commands/multi-trade.d.ts.map +0 -1
  71. package/dist/cli/commands/multi-trade.js +0 -175
  72. package/dist/cli/commands/multi-trade.js.map +0 -1
  73. package/dist/cli/pool-discovery.d.ts +0 -56
  74. package/dist/cli/pool-discovery.d.ts.map +0 -1
  75. package/dist/cli/pool-discovery.js +0 -283
  76. package/dist/cli/pool-discovery.js.map +0 -1
  77. package/dist/core/price-aggregation/price-cache.d.ts +0 -55
  78. package/dist/core/price-aggregation/price-cache.d.ts.map +0 -1
  79. package/dist/core/price-aggregation/price-cache.js +0 -152
  80. package/dist/core/price-aggregation/price-cache.js.map +0 -1
  81. package/dist/examples/mexc-connector-comprehensive-test.d.ts +0 -15
  82. package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +0 -1
  83. package/dist/examples/mexc-connector-comprehensive-test.js +0 -514
  84. package/dist/examples/mexc-connector-comprehensive-test.js.map +0 -1
  85. package/dist/examples/mexc-order-update-test.d.ts +0 -4
  86. package/dist/examples/mexc-order-update-test.d.ts.map +0 -1
  87. package/dist/examples/mexc-order-update-test.js +0 -186
  88. package/dist/examples/mexc-order-update-test.js.map +0 -1
  89. package/dist/examples/mexc-test.d.ts +0 -9
  90. package/dist/examples/mexc-test.d.ts.map +0 -1
  91. package/dist/examples/mexc-test.js +0 -218
  92. package/dist/examples/mexc-test.js.map +0 -1
  93. package/dist/examples/mexc-trades-debug.d.ts +0 -2
  94. package/dist/examples/mexc-trades-debug.d.ts.map +0 -1
  95. package/dist/examples/mexc-trades-debug.js +0 -101
  96. package/dist/examples/mexc-trades-debug.js.map +0 -1
  97. package/dist/examples/mexc-trades-subscription-debug.d.ts +0 -2
  98. package/dist/examples/mexc-trades-subscription-debug.d.ts.map +0 -1
  99. package/dist/examples/mexc-trades-subscription-debug.js +0 -150
  100. package/dist/examples/mexc-trades-subscription-debug.js.map +0 -1
  101. package/dist/examples/mexc-websocket-test.d.ts +0 -8
  102. package/dist/examples/mexc-websocket-test.d.ts.map +0 -1
  103. package/dist/examples/mexc-websocket-test.js +0 -115
  104. package/dist/examples/mexc-websocket-test.js.map +0 -1
  105. package/dist/examples/test-protobuf-status-detection.d.ts +0 -9
  106. package/dist/examples/test-protobuf-status-detection.d.ts.map +0 -1
  107. package/dist/examples/test-protobuf-status-detection.js +0 -83
  108. package/dist/examples/test-protobuf-status-detection.js.map +0 -1
  109. package/dist/exchanges/base-exchange-connector.d.ts +0 -33
  110. package/dist/exchanges/base-exchange-connector.d.ts.map +0 -1
  111. package/dist/exchanges/base-exchange-connector.js +0 -55
  112. package/dist/exchanges/base-exchange-connector.js.map +0 -1
  113. package/dist/exchanges/kraken/test-kraken-websocket.d.ts +0 -19
  114. package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +0 -1
  115. package/dist/exchanges/kraken/test-kraken-websocket.js +0 -413
  116. package/dist/exchanges/kraken/test-kraken-websocket.js.map +0 -1
  117. package/dist/mcp/resources/index.d.ts +0 -3
  118. package/dist/mcp/resources/index.d.ts.map +0 -1
  119. package/dist/mcp/resources/index.js +0 -11
  120. package/dist/mcp/resources/index.js.map +0 -1
  121. package/dist/mcp/server.d.ts +0 -4
  122. package/dist/mcp/server.d.ts.map +0 -1
  123. package/dist/mcp/server.js +0 -29
  124. package/dist/mcp/server.js.map +0 -1
  125. package/dist/mcp/tools/index.d.ts +0 -3
  126. package/dist/mcp/tools/index.d.ts.map +0 -1
  127. package/dist/mcp/tools/index.js +0 -12
  128. package/dist/mcp/tools/index.js.map +0 -1
  129. package/dist/tests/fixtures/test-helpers.d.ts +0 -5
  130. package/dist/tests/fixtures/test-helpers.d.ts.map +0 -1
  131. package/dist/tests/fixtures/test-helpers.js +0 -8
  132. package/dist/tests/fixtures/test-helpers.js.map +0 -1
  133. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +0 -2
  134. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +0 -1
  135. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +0 -237
  136. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +0 -1
  137. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +0 -2
  138. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +0 -1
  139. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +0 -57
  140. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +0 -1
  141. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +0 -2
  142. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +0 -1
  143. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +0 -141
  144. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +0 -1
  145. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +0 -2
  146. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +0 -1
  147. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +0 -375
  148. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +0 -1
  149. package/dist/tests/unit/cli/exchange-factory.test.d.ts +0 -2
  150. package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +0 -1
  151. package/dist/tests/unit/cli/exchange-factory.test.js +0 -148
  152. package/dist/tests/unit/cli/exchange-factory.test.js.map +0 -1
  153. package/dist/tests/unit/config/environment.test.d.ts +0 -2
  154. package/dist/tests/unit/config/environment.test.d.ts.map +0 -1
  155. package/dist/tests/unit/config/environment.test.js +0 -158
  156. package/dist/tests/unit/config/environment.test.js.map +0 -1
  157. package/dist/tests/unit/config/launcher-config.test.d.ts +0 -2
  158. package/dist/tests/unit/config/launcher-config.test.d.ts.map +0 -1
  159. package/dist/tests/unit/config/launcher-config.test.js +0 -117
  160. package/dist/tests/unit/config/launcher-config.test.js.map +0 -1
  161. package/dist/tests/unit/config/price-aggregation.test.d.ts +0 -2
  162. package/dist/tests/unit/config/price-aggregation.test.d.ts.map +0 -1
  163. package/dist/tests/unit/config/price-aggregation.test.js +0 -144
  164. package/dist/tests/unit/config/price-aggregation.test.js.map +0 -1
  165. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +0 -2
  166. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +0 -1
  167. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +0 -191
  168. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +0 -1
  169. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +0 -2
  170. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +0 -1
  171. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +0 -324
  172. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +0 -1
  173. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +0 -2
  174. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +0 -1
  175. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +0 -177
  176. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +0 -1
  177. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +0 -2
  178. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +0 -1
  179. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +0 -168
  180. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +0 -1
  181. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +0 -2
  182. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +0 -1
  183. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +0 -217
  184. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +0 -1
  185. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +0 -2
  186. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +0 -1
  187. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +0 -229
  188. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +0 -1
  189. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +0 -2
  190. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +0 -1
  191. package/dist/tests/unit/core/risk-management/risk-manager.test.js +0 -194
  192. package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +0 -1
  193. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +0 -2
  194. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +0 -1
  195. package/dist/tests/unit/core/strategy/base-strategy.test.js +0 -254
  196. package/dist/tests/unit/core/strategy/base-strategy.test.js.map +0 -1
  197. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +0 -2
  198. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +0 -1
  199. package/dist/tests/unit/core/strategy/strategy-factory.test.js +0 -213
  200. package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +0 -1
  201. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +0 -2
  202. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +0 -1
  203. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +0 -452
  204. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +0 -1
  205. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +0 -2
  206. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +0 -1
  207. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +0 -1419
  208. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +0 -1
  209. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +0 -2
  210. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +0 -1
  211. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +0 -435
  212. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +0 -1
  213. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +0 -2
  214. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +0 -1
  215. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +0 -314
  216. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +0 -1
  217. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +0 -2
  218. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +0 -1
  219. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +0 -178
  220. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +0 -1
  221. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +0 -2
  222. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +0 -1
  223. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +0 -502
  224. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +0 -1
  225. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +0 -2
  226. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +0 -1
  227. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +0 -317
  228. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +0 -1
  229. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +0 -2
  230. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +0 -1
  231. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +0 -843
  232. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +0 -1
  233. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +0 -2
  234. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +0 -1
  235. package/dist/tests/unit/strategies/grid/grid-calculator.test.js +0 -67
  236. package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +0 -1
  237. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +0 -2
  238. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +0 -1
  239. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +0 -211
  240. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +0 -1
  241. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +0 -2
  242. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +0 -1
  243. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +0 -197
  244. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +0 -1
  245. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +0 -2
  246. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +0 -1
  247. package/dist/tests/unit/strategies/grid/grid-strategy.test.js +0 -429
  248. package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +0 -1
  249. package/dist/tests/unit/utils/logger.test.d.ts +0 -2
  250. package/dist/tests/unit/utils/logger.test.d.ts.map +0 -1
  251. package/dist/tests/unit/utils/logger.test.js +0 -260
  252. package/dist/tests/unit/utils/logger.test.js.map +0 -1
  253. package/dist/tests/unit/utils/symbol-utils.test.d.ts +0 -2
  254. package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +0 -1
  255. package/dist/tests/unit/utils/symbol-utils.test.js +0 -178
  256. package/dist/tests/unit/utils/symbol-utils.test.js.map +0 -1
  257. package/dist/types/price-aggregation.d.ts +0 -31
  258. package/dist/types/price-aggregation.d.ts.map +0 -1
  259. package/dist/types/price-aggregation.js +0 -6
  260. package/dist/types/price-aggregation.js.map +0 -1
  261. package/dist/utils/crypto.d.ts +0 -15
  262. package/dist/utils/crypto.d.ts.map +0 -1
  263. package/dist/utils/crypto.js +0 -50
  264. package/dist/utils/crypto.js.map +0 -1
  265. package/dist/utils/validation.d.ts +0 -36
  266. package/dist/utils/validation.d.ts.map +0 -1
  267. package/dist/utils/validation.js +0 -174
  268. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ /**
3
+ * OpenMM x402 EVM Auto-Payment
4
+ * Implements EIP-3009 TransferWithAuthorization via EIP-712 typed data signing.
5
+ * Pure Node.js implementation — no external dependencies.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.hashTypedData = hashTypedData;
12
+ exports.isEvmNetwork = isEvmNetwork;
13
+ exports.createEvmPaymentPayload = createEvmPaymentPayload;
14
+ exports.checkEvmBalance = checkEvmBalance;
15
+ exports.getBaseRpcUrl = getBaseRpcUrl;
16
+ const crypto_1 = __importDefault(require("crypto"));
17
+ const crypto_2 = require("./crypto");
18
+ const DOMAIN_TYPES = [
19
+ { name: 'name', type: 'string' },
20
+ { name: 'version', type: 'string' },
21
+ { name: 'chainId', type: 'uint256' },
22
+ { name: 'verifyingContract', type: 'address' },
23
+ ];
24
+ const AUTHORIZATION_TYPES = [
25
+ { name: 'from', type: 'address' },
26
+ { name: 'to', type: 'address' },
27
+ { name: 'value', type: 'uint256' },
28
+ { name: 'validAfter', type: 'uint256' },
29
+ { name: 'validBefore', type: 'uint256' },
30
+ { name: 'nonce', type: 'bytes32' },
31
+ ];
32
+ /**
33
+ * Encode a type string for EIP-712 typeHash.
34
+ */
35
+ function encodeType(typeName, fields) {
36
+ const fieldStrs = fields.map(f => `${f.type} ${f.name}`);
37
+ return `${typeName}(${fieldStrs.join(',')})`;
38
+ }
39
+ /**
40
+ * Compute typeHash = keccak256(encodeType(...))
41
+ */
42
+ function typeHash(typeName, fields) {
43
+ return (0, crypto_2.keccak256)(Buffer.from(encodeType(typeName, fields), 'utf8'));
44
+ }
45
+ /**
46
+ * ABI-encode a single value to 32 bytes based on its EIP-712 type.
47
+ */
48
+ function encodeValue(fieldType, value) {
49
+ if (fieldType === 'string') {
50
+ // Strings are hashed
51
+ return (0, crypto_2.keccak256)(Buffer.from(value, 'utf8'));
52
+ }
53
+ if (fieldType === 'bytes') {
54
+ const buf = typeof value === 'string'
55
+ ? Buffer.from(value.replace(/^0x/, ''), 'hex')
56
+ : value;
57
+ return (0, crypto_2.keccak256)(buf);
58
+ }
59
+ if (fieldType === 'bytes32') {
60
+ if (typeof value === 'string') {
61
+ return Buffer.from(value.replace(/^0x/, ''), 'hex');
62
+ }
63
+ return value;
64
+ }
65
+ if (fieldType === 'address') {
66
+ // Left-pad address to 32 bytes
67
+ const addr = value.replace(/^0x/, '').toLowerCase();
68
+ return Buffer.from(addr.padStart(64, '0'), 'hex');
69
+ }
70
+ if (fieldType.startsWith('uint') || fieldType.startsWith('int')) {
71
+ // Encode as 32-byte big-endian
72
+ const hex = BigInt(value)
73
+ .toString(16)
74
+ .padStart(64, '0');
75
+ return Buffer.from(hex, 'hex');
76
+ }
77
+ if (fieldType === 'bool') {
78
+ return Buffer.from((value ? '1' : '0').padStart(64, '0'), 'hex');
79
+ }
80
+ throw new Error(`Unsupported EIP-712 field type: ${fieldType}`);
81
+ }
82
+ /**
83
+ * Compute struct hash = keccak256(typeHash || encodeValue(field1) || ...)
84
+ */
85
+ function hashStruct(typeName, fields, data) {
86
+ const parts = [typeHash(typeName, fields)];
87
+ for (const field of fields) {
88
+ const value = data[field.name];
89
+ if (value === undefined || value === null) {
90
+ throw new Error(`Missing EIP-712 field: ${field.name}`);
91
+ }
92
+ parts.push(encodeValue(field.type, value));
93
+ }
94
+ return (0, crypto_2.keccak256)(Buffer.concat(parts));
95
+ }
96
+ /**
97
+ * Compute EIP-712 domain separator hash.
98
+ */
99
+ function hashDomain(domain) {
100
+ return hashStruct('EIP712Domain', DOMAIN_TYPES, domain);
101
+ }
102
+ /**
103
+ * Compute EIP-712 final hash: keccak256("\x19\x01" || domainSeparator || structHash)
104
+ */
105
+ function hashTypedData(domain, primaryType, fields, message) {
106
+ const domainSeparator = hashDomain(domain);
107
+ const structHash = hashStruct(primaryType, fields, message);
108
+ return (0, crypto_2.keccak256)(Buffer.concat([Buffer.from([0x19, 0x01]), domainSeparator, structHash]));
109
+ }
110
+ // ============= x402 EVM Payment =============
111
+ /**
112
+ * Extract chain ID from CAIP-2 network identifier.
113
+ * e.g., "eip155:8453" → 8453
114
+ */
115
+ function getChainId(network) {
116
+ const match = network.match(/^eip155:(\d+)$/);
117
+ if (!match)
118
+ throw new Error(`Invalid EVM network: ${network}`);
119
+ return parseInt(match[1], 10);
120
+ }
121
+ /**
122
+ * Check if a network string is an EVM network.
123
+ */
124
+ function isEvmNetwork(network) {
125
+ return typeof network === 'string' && network.startsWith('eip155:');
126
+ }
127
+ /**
128
+ * Create an x402 payment payload for EVM (EIP-3009 TransferWithAuthorization).
129
+ *
130
+ * @param requirements - Parsed PaymentRequirements from 402 response
131
+ * @param privateKeyHex - 32-byte EVM private key as hex
132
+ * @param walletAddress - Signer's EVM address
133
+ * @param resource - Original request URL
134
+ * @returns Base64-encoded PaymentPayload for Payment-Signature header
135
+ */
136
+ function createEvmPaymentPayload(requirements, privateKeyHex, walletAddress, resource) {
137
+ const chainId = getChainId(requirements.network);
138
+ const extra = requirements.extra || {};
139
+ // Token name and version from requirements.extra (set by server/facilitator)
140
+ const tokenName = extra.name;
141
+ const tokenVersion = extra.version || '1';
142
+ if (!tokenName) {
143
+ throw new Error('EIP-712 domain name missing from requirements.extra');
144
+ }
145
+ // Generate random nonce (32 bytes)
146
+ const nonce = '0x' + crypto_1.default.randomBytes(32).toString('hex');
147
+ // Validity window: valid now, expires in 1 hour
148
+ const now = Math.floor(Date.now() / 1000);
149
+ const validAfter = '0';
150
+ const validBefore = String(now + 3600);
151
+ // EIP-712 domain
152
+ const domain = {
153
+ name: tokenName,
154
+ version: tokenVersion,
155
+ chainId,
156
+ verifyingContract: requirements.asset,
157
+ };
158
+ // EIP-3009 message
159
+ const message = {
160
+ from: walletAddress,
161
+ to: requirements.payTo || requirements.pay_to || '',
162
+ value: BigInt(requirements.amount),
163
+ validAfter: BigInt(validAfter),
164
+ validBefore: BigInt(validBefore),
165
+ nonce,
166
+ };
167
+ // Hash and sign
168
+ const msgHash = hashTypedData(domain, 'TransferWithAuthorization', AUTHORIZATION_TYPES, message);
169
+ const { r, s, v } = (0, crypto_2.signSecp256k1)(msgHash, Buffer.from(privateKeyHex, 'hex'));
170
+ const signature = '0x' + r.toString('hex') + s.toString('hex') + (27 + v).toString(16);
171
+ // Build payload (camelCase keys per x402 spec)
172
+ const payload = {
173
+ x402Version: 2,
174
+ payload: {
175
+ authorization: {
176
+ from: walletAddress,
177
+ to: message.to,
178
+ value: String(requirements.amount),
179
+ validAfter: validAfter,
180
+ validBefore: validBefore,
181
+ nonce: nonce,
182
+ },
183
+ signature: signature,
184
+ },
185
+ accepted: requirements,
186
+ };
187
+ // Add resource if provided
188
+ if (resource) {
189
+ payload.resource = { url: resource };
190
+ }
191
+ return Buffer.from(JSON.stringify(payload)).toString('base64');
192
+ }
193
+ /**
194
+ * Check USDC balance on Base network.
195
+ *
196
+ * @param address - EVM address to check
197
+ * @returns Balance in USD (number) or null if check fails
198
+ */
199
+ async function checkEvmBalance(address) {
200
+ try {
201
+ // Base USDC contract address
202
+ const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
203
+ const addr = address.replace('0x', '').toLowerCase().padStart(64, '0');
204
+ const response = await fetch('https://mainnet.base.org', {
205
+ method: 'POST',
206
+ headers: { 'Content-Type': 'application/json' },
207
+ body: JSON.stringify({
208
+ jsonrpc: '2.0',
209
+ id: 1,
210
+ method: 'eth_call',
211
+ params: [{ to: USDC_BASE, data: `0x70a08231${addr}` }, 'latest'],
212
+ }),
213
+ });
214
+ const data = (await response.json());
215
+ if (!data.result)
216
+ return null;
217
+ return parseInt(data.result, 16) / 1e6;
218
+ }
219
+ catch {
220
+ return null;
221
+ }
222
+ }
223
+ /**
224
+ * Get Base network RPC URL.
225
+ */
226
+ function getBaseRpcUrl() {
227
+ return process.env.OPENMM_BASE_RPC || 'https://mainnet.base.org';
228
+ }
229
+ //# sourceMappingURL=evm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/x402/evm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * OpenMM x402 Auto-Payment Handler
3
+ * Detects 402 responses and auto-signs payment using local wallet.
4
+ */
5
+ import type { PaymentRequirement, X402FetchOptions, X402BalanceResult } from './types';
6
+ /**
7
+ * Parse PaymentRequirements from a 402 response.
8
+ */
9
+ export declare function parsePaymentRequirements(response: Response): PaymentRequirement[] | null;
10
+ /**
11
+ * Generate payment signatures for all viable payment options, in priority order.
12
+ * Yields { signature, network } objects. Caller should try each until one succeeds.
13
+ */
14
+ export declare function createPaymentSignatures(response: Response, url: string, options?: {
15
+ password?: string;
16
+ walletName?: string;
17
+ }): AsyncGenerator<{
18
+ signature: string;
19
+ network: string;
20
+ }>;
21
+ /**
22
+ * Attempt to auto-pay a 402 response (single-shot, returns first viable signature).
23
+ */
24
+ export declare function createPaymentSignature(response: Response, url: string, options?: {
25
+ password?: string;
26
+ walletName?: string;
27
+ }): Promise<string | null>;
28
+ /**
29
+ * Check x402 payment wallet balance.
30
+ */
31
+ export declare function checkX402Balance(network: string): Promise<X402BalanceResult | null>;
32
+ /**
33
+ * Wrapper for fetch that handles x402 auto-payment.
34
+ *
35
+ * When a request returns HTTP 402:
36
+ * 1. Parses payment requirements from Payment-Required header
37
+ * 2. Signs payment using local wallet
38
+ * 3. Retries request with Payment-Signature header
39
+ */
40
+ export declare function x402Fetch(url: string, options?: X402FetchOptions): Promise<Response>;
41
+ /**
42
+ * Format payment requirements for display.
43
+ */
44
+ export declare function formatPaymentRequirements(requirements: PaymentRequirement[]): string;
45
+ /**
46
+ * Check if a response is a 402 payment required.
47
+ */
48
+ export declare function isPaymentRequired(response: Response): boolean;
49
+ /**
50
+ * Get supported payment networks from requirements.
51
+ */
52
+ export declare function getSupportedNetworks(requirements: PaymentRequirement[]): string[];
53
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/x402/handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAiBxF;AA2CD;;;GAGG;AACH,wBAAuB,uBAAuB,CAC5C,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,cAAc,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA8CxD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAkBzF;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAoEnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAepF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAEjF"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * OpenMM x402 Auto-Payment Handler
4
+ * Detects 402 responses and auto-signs payment using local wallet.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parsePaymentRequirements = parsePaymentRequirements;
8
+ exports.createPaymentSignatures = createPaymentSignatures;
9
+ exports.createPaymentSignature = createPaymentSignature;
10
+ exports.checkX402Balance = checkX402Balance;
11
+ exports.x402Fetch = x402Fetch;
12
+ exports.formatPaymentRequirements = formatPaymentRequirements;
13
+ exports.isPaymentRequired = isPaymentRequired;
14
+ exports.getSupportedNetworks = getSupportedNetworks;
15
+ const evm_1 = require("./evm");
16
+ const wallet_1 = require("./wallet");
17
+ /**
18
+ * Parse PaymentRequirements from a 402 response.
19
+ */
20
+ function parsePaymentRequirements(response) {
21
+ const header = response.headers.get('payment-required');
22
+ if (!header)
23
+ return null;
24
+ try {
25
+ const decoded = JSON.parse(atob(header));
26
+ // V2 format: { accepts: [...], ... }
27
+ if (decoded.accepts && Array.isArray(decoded.accepts)) {
28
+ return decoded.accepts;
29
+ }
30
+ // Can be a single object or array of requirements
31
+ return Array.isArray(decoded) ? decoded : [decoded];
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * Rank payment requirements. Prefers EVM (gasless) over Solana.
39
+ * Returns all supported requirements in priority order.
40
+ */
41
+ function rankRequirements(requirements) {
42
+ const ranked = [];
43
+ // EVM first (gasless for client)
44
+ for (const r of requirements) {
45
+ if ((0, evm_1.isEvmNetwork)(r.network))
46
+ ranked.push(r);
47
+ }
48
+ // Solana support could be added here in the future
49
+ // for (const r of requirements) {
50
+ // if (isSvmNetwork(r.network)) ranked.push(r);
51
+ // }
52
+ return ranked;
53
+ }
54
+ /**
55
+ * Build a payment signature for a single requirement.
56
+ */
57
+ async function buildPaymentForRequirement(requirement, exported, url) {
58
+ if ((0, evm_1.isEvmNetwork)(requirement.network)) {
59
+ return (0, evm_1.createEvmPaymentPayload)(requirement, exported.evm.privateKey, exported.evm.address, url);
60
+ }
61
+ // Solana support could be added here
62
+ return null;
63
+ }
64
+ /**
65
+ * Generate payment signatures for all viable payment options, in priority order.
66
+ * Yields { signature, network } objects. Caller should try each until one succeeds.
67
+ */
68
+ async function* createPaymentSignatures(response, url, options = {}) {
69
+ const requirements = parsePaymentRequirements(response);
70
+ if (!requirements || requirements.length === 0)
71
+ return;
72
+ const ranked = rankRequirements(requirements);
73
+ if (ranked.length === 0)
74
+ return;
75
+ const walletConfig = (0, wallet_1.getWalletConfig)();
76
+ const password = walletConfig.passwordHash
77
+ ? options.password || (0, wallet_1.resolvePassword)() || null
78
+ : null;
79
+ if (walletConfig.passwordHash && password === null) {
80
+ console.error('Wallet is encrypted but no password provided.');
81
+ return;
82
+ }
83
+ const wallets = (0, wallet_1.listWallets)();
84
+ if (wallets.wallets.length === 0) {
85
+ console.error('No wallets found. Create one with: openmm wallet create');
86
+ return;
87
+ }
88
+ const walletName = options.walletName || wallets.defaultWallet;
89
+ if (!walletName) {
90
+ console.error('No default wallet set.');
91
+ return;
92
+ }
93
+ let exported;
94
+ try {
95
+ exported = (0, wallet_1.exportWallet)(walletName, password);
96
+ }
97
+ catch (err) {
98
+ console.error(`Failed to export wallet: ${err.message}`);
99
+ return;
100
+ }
101
+ for (const req of ranked) {
102
+ try {
103
+ const sig = await buildPaymentForRequirement(req, exported, url);
104
+ if (sig)
105
+ yield { signature: sig, network: req.network };
106
+ }
107
+ catch {
108
+ // This payment option failed to build, try next
109
+ continue;
110
+ }
111
+ }
112
+ }
113
+ /**
114
+ * Attempt to auto-pay a 402 response (single-shot, returns first viable signature).
115
+ */
116
+ async function createPaymentSignature(response, url, options = {}) {
117
+ for await (const { signature } of createPaymentSignatures(response, url, options)) {
118
+ return signature;
119
+ }
120
+ return null;
121
+ }
122
+ /**
123
+ * Check x402 payment wallet balance.
124
+ */
125
+ async function checkX402Balance(network) {
126
+ const addresses = (0, wallet_1.getDefaultWalletAddresses)();
127
+ if (!addresses)
128
+ return null;
129
+ if (network.startsWith('eip155:') && addresses.evm) {
130
+ const balance = await (0, evm_1.checkEvmBalance)(addresses.evm);
131
+ if (balance === null)
132
+ return null;
133
+ return {
134
+ network,
135
+ address: addresses.evm,
136
+ balance,
137
+ symbol: 'USDC',
138
+ };
139
+ }
140
+ // Solana support could be added here
141
+ return null;
142
+ }
143
+ /**
144
+ * Wrapper for fetch that handles x402 auto-payment.
145
+ *
146
+ * When a request returns HTTP 402:
147
+ * 1. Parses payment requirements from Payment-Required header
148
+ * 2. Signs payment using local wallet
149
+ * 3. Retries request with Payment-Signature header
150
+ */
151
+ async function x402Fetch(url, options = {}) {
152
+ const { walletName, password, skipPayment, maxRetries = 1, ...fetchOptions } = options;
153
+ // Make initial request
154
+ let response = await fetch(url, fetchOptions);
155
+ // If not a 402 or payment is skipped, return as-is
156
+ if (response.status !== 402 || skipPayment) {
157
+ return response;
158
+ }
159
+ // Parse payment requirements
160
+ const requirements = parsePaymentRequirements(response);
161
+ if (!requirements || requirements.length === 0) {
162
+ console.error('402 response but no valid payment requirements found');
163
+ return response;
164
+ }
165
+ // Check wallet balance before attempting payment
166
+ const ranked = rankRequirements(requirements);
167
+ if (ranked.length === 0) {
168
+ console.error('No supported payment networks in requirements');
169
+ return response;
170
+ }
171
+ const firstReq = ranked[0];
172
+ const balanceResult = await checkX402Balance(firstReq.network);
173
+ if (balanceResult) {
174
+ const requiredAmount = parseFloat(firstReq.amount) / 1e6; // Assuming 6 decimals
175
+ if (balanceResult.balance < requiredAmount) {
176
+ console.error(`Insufficient balance: ${balanceResult.balance} ${balanceResult.symbol}, ` +
177
+ `required: ${requiredAmount} ${balanceResult.symbol}`);
178
+ console.error(`Fund your wallet: ${balanceResult.address}`);
179
+ return response;
180
+ }
181
+ }
182
+ // Try to create payment signature
183
+ const signature = await createPaymentSignature(response, url, { password, walletName });
184
+ if (!signature) {
185
+ console.error('Failed to create payment signature');
186
+ return response;
187
+ }
188
+ // Retry with payment signature
189
+ let retries = 0;
190
+ while (retries < maxRetries) {
191
+ const retryHeaders = new Headers(fetchOptions.headers);
192
+ retryHeaders.set('Payment-Signature', signature);
193
+ response = await fetch(url, {
194
+ ...fetchOptions,
195
+ headers: retryHeaders,
196
+ });
197
+ // If no longer 402, we're done
198
+ if (response.status !== 402) {
199
+ return response;
200
+ }
201
+ retries++;
202
+ }
203
+ return response;
204
+ }
205
+ /**
206
+ * Format payment requirements for display.
207
+ */
208
+ function formatPaymentRequirements(requirements) {
209
+ const lines = ['Payment required:'];
210
+ for (const req of requirements) {
211
+ const network = req.network;
212
+ const amount = parseFloat(req.amount) / 1e6; // Assuming 6 decimals
213
+ const payTo = req.payTo || req.pay_to || 'unknown';
214
+ lines.push(` Network: ${network}`);
215
+ lines.push(` Amount: ${amount.toFixed(6)} USDC`);
216
+ lines.push(` Pay to: ${payTo}`);
217
+ lines.push('');
218
+ }
219
+ return lines.join('\n');
220
+ }
221
+ /**
222
+ * Check if a response is a 402 payment required.
223
+ */
224
+ function isPaymentRequired(response) {
225
+ return response.status === 402;
226
+ }
227
+ /**
228
+ * Get supported payment networks from requirements.
229
+ */
230
+ function getSupportedNetworks(requirements) {
231
+ return rankRequirements(requirements).map(r => r.network);
232
+ }
233
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/x402/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenMM x402 Payment Module
3
+ *
4
+ * Provides x402 payment protocol support for auto-paying API requests
5
+ * that return HTTP 402 Payment Required.
6
+ *
7
+ * Features:
8
+ * - Local wallet management (EVM + Solana)
9
+ * - EIP-3009 TransferWithAuthorization for gasless USDC payments on Base
10
+ * - Auto-detection and handling of 402 responses
11
+ * - Secure key storage with AES-256-GCM encryption
12
+ *
13
+ * Usage:
14
+ * ```typescript
15
+ * import { x402Fetch, createWallet, checkX402Balance } from './x402';
16
+ *
17
+ * // Create a wallet
18
+ * const wallet = createWallet('my-wallet', 'my-secure-password');
19
+ *
20
+ * // Use x402Fetch instead of fetch for auto-payment
21
+ * const response = await x402Fetch('https://api.example.com/data');
22
+ * ```
23
+ */
24
+ export type { PaymentRequirement, PaymentRequiredResponse, EvmWallet, SolanaWallet, EncryptedKey, StoredWallet, WalletConfig, ExportedWallet, WalletListEntry, EIP712Domain, TransferAuthorization, ECDSASignature, X402PaymentPayload, X402FetchOptions, X402BalanceResult, } from './types';
25
+ export { createWallet, listWallets, showWallet, exportWallet, setDefaultWallet, deleteWallet, getWalletConfig, resolvePassword, getDefaultWalletAddresses, } from './wallet';
26
+ export { createEvmPaymentPayload, isEvmNetwork, checkEvmBalance, hashTypedData, getBaseRpcUrl, } from './evm';
27
+ export { x402Fetch, parsePaymentRequirements, createPaymentSignature, createPaymentSignatures, checkX402Balance, formatPaymentRequirements, isPaymentRequired, getSupportedNetworks, } from './handler';
28
+ export { keccak256, signSecp256k1, encryptKey, decryptKey, hashPassword, verifyPassword, generatePrivateKey, privateKeyToEvmAddress, generateSolanaKeypair, base58Encode, } from './crypto';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,UAAU,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * OpenMM x402 Payment Module
4
+ *
5
+ * Provides x402 payment protocol support for auto-paying API requests
6
+ * that return HTTP 402 Payment Required.
7
+ *
8
+ * Features:
9
+ * - Local wallet management (EVM + Solana)
10
+ * - EIP-3009 TransferWithAuthorization for gasless USDC payments on Base
11
+ * - Auto-detection and handling of 402 responses
12
+ * - Secure key storage with AES-256-GCM encryption
13
+ *
14
+ * Usage:
15
+ * ```typescript
16
+ * import { x402Fetch, createWallet, checkX402Balance } from './x402';
17
+ *
18
+ * // Create a wallet
19
+ * const wallet = createWallet('my-wallet', 'my-secure-password');
20
+ *
21
+ * // Use x402Fetch instead of fetch for auto-payment
22
+ * const response = await x402Fetch('https://api.example.com/data');
23
+ * ```
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.base58Encode = exports.generateSolanaKeypair = exports.privateKeyToEvmAddress = exports.generatePrivateKey = exports.verifyPassword = exports.hashPassword = exports.decryptKey = exports.encryptKey = exports.signSecp256k1 = exports.keccak256 = exports.getSupportedNetworks = exports.isPaymentRequired = exports.formatPaymentRequirements = exports.checkX402Balance = exports.createPaymentSignatures = exports.createPaymentSignature = exports.parsePaymentRequirements = exports.x402Fetch = exports.getBaseRpcUrl = exports.hashTypedData = exports.checkEvmBalance = exports.isEvmNetwork = exports.createEvmPaymentPayload = exports.getDefaultWalletAddresses = exports.resolvePassword = exports.getWalletConfig = exports.deleteWallet = exports.setDefaultWallet = exports.exportWallet = exports.showWallet = exports.listWallets = exports.createWallet = void 0;
27
+ // Wallet management
28
+ var wallet_1 = require("./wallet");
29
+ Object.defineProperty(exports, "createWallet", { enumerable: true, get: function () { return wallet_1.createWallet; } });
30
+ Object.defineProperty(exports, "listWallets", { enumerable: true, get: function () { return wallet_1.listWallets; } });
31
+ Object.defineProperty(exports, "showWallet", { enumerable: true, get: function () { return wallet_1.showWallet; } });
32
+ Object.defineProperty(exports, "exportWallet", { enumerable: true, get: function () { return wallet_1.exportWallet; } });
33
+ Object.defineProperty(exports, "setDefaultWallet", { enumerable: true, get: function () { return wallet_1.setDefaultWallet; } });
34
+ Object.defineProperty(exports, "deleteWallet", { enumerable: true, get: function () { return wallet_1.deleteWallet; } });
35
+ Object.defineProperty(exports, "getWalletConfig", { enumerable: true, get: function () { return wallet_1.getWalletConfig; } });
36
+ Object.defineProperty(exports, "resolvePassword", { enumerable: true, get: function () { return wallet_1.resolvePassword; } });
37
+ Object.defineProperty(exports, "getDefaultWalletAddresses", { enumerable: true, get: function () { return wallet_1.getDefaultWalletAddresses; } });
38
+ // EVM payment
39
+ var evm_1 = require("./evm");
40
+ Object.defineProperty(exports, "createEvmPaymentPayload", { enumerable: true, get: function () { return evm_1.createEvmPaymentPayload; } });
41
+ Object.defineProperty(exports, "isEvmNetwork", { enumerable: true, get: function () { return evm_1.isEvmNetwork; } });
42
+ Object.defineProperty(exports, "checkEvmBalance", { enumerable: true, get: function () { return evm_1.checkEvmBalance; } });
43
+ Object.defineProperty(exports, "hashTypedData", { enumerable: true, get: function () { return evm_1.hashTypedData; } });
44
+ Object.defineProperty(exports, "getBaseRpcUrl", { enumerable: true, get: function () { return evm_1.getBaseRpcUrl; } });
45
+ // x402 handler
46
+ var handler_1 = require("./handler");
47
+ Object.defineProperty(exports, "x402Fetch", { enumerable: true, get: function () { return handler_1.x402Fetch; } });
48
+ Object.defineProperty(exports, "parsePaymentRequirements", { enumerable: true, get: function () { return handler_1.parsePaymentRequirements; } });
49
+ Object.defineProperty(exports, "createPaymentSignature", { enumerable: true, get: function () { return handler_1.createPaymentSignature; } });
50
+ Object.defineProperty(exports, "createPaymentSignatures", { enumerable: true, get: function () { return handler_1.createPaymentSignatures; } });
51
+ Object.defineProperty(exports, "checkX402Balance", { enumerable: true, get: function () { return handler_1.checkX402Balance; } });
52
+ Object.defineProperty(exports, "formatPaymentRequirements", { enumerable: true, get: function () { return handler_1.formatPaymentRequirements; } });
53
+ Object.defineProperty(exports, "isPaymentRequired", { enumerable: true, get: function () { return handler_1.isPaymentRequired; } });
54
+ Object.defineProperty(exports, "getSupportedNetworks", { enumerable: true, get: function () { return handler_1.getSupportedNetworks; } });
55
+ // Crypto utilities (for advanced use)
56
+ var crypto_1 = require("./crypto");
57
+ Object.defineProperty(exports, "keccak256", { enumerable: true, get: function () { return crypto_1.keccak256; } });
58
+ Object.defineProperty(exports, "signSecp256k1", { enumerable: true, get: function () { return crypto_1.signSecp256k1; } });
59
+ Object.defineProperty(exports, "encryptKey", { enumerable: true, get: function () { return crypto_1.encryptKey; } });
60
+ Object.defineProperty(exports, "decryptKey", { enumerable: true, get: function () { return crypto_1.decryptKey; } });
61
+ Object.defineProperty(exports, "hashPassword", { enumerable: true, get: function () { return crypto_1.hashPassword; } });
62
+ Object.defineProperty(exports, "verifyPassword", { enumerable: true, get: function () { return crypto_1.verifyPassword; } });
63
+ Object.defineProperty(exports, "generatePrivateKey", { enumerable: true, get: function () { return crypto_1.generatePrivateKey; } });
64
+ Object.defineProperty(exports, "privateKeyToEvmAddress", { enumerable: true, get: function () { return crypto_1.privateKeyToEvmAddress; } });
65
+ Object.defineProperty(exports, "generateSolanaKeypair", { enumerable: true, get: function () { return crypto_1.generateSolanaKeypair; } });
66
+ Object.defineProperty(exports, "base58Encode", { enumerable: true, get: function () { return crypto_1.base58Encode; } });
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAqBH,oBAAoB;AACpB,mCAUkB;AAThB,sGAAA,YAAY,OAAA;AACZ,qGAAA,WAAW,OAAA;AACX,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,0GAAA,gBAAgB,OAAA;AAChB,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AACf,yGAAA,eAAe,OAAA;AACf,mHAAA,yBAAyB,OAAA;AAG3B,cAAc;AACd,6BAMe;AALb,8GAAA,uBAAuB,OAAA;AACvB,mGAAA,YAAY,OAAA;AACZ,sGAAA,eAAe,OAAA;AACf,oGAAA,aAAa,OAAA;AACb,oGAAA,aAAa,OAAA;AAGf,eAAe;AACf,qCASmB;AARjB,oGAAA,SAAS,OAAA;AACT,mHAAA,wBAAwB,OAAA;AACxB,iHAAA,sBAAsB,OAAA;AACtB,kHAAA,uBAAuB,OAAA;AACvB,2GAAA,gBAAgB,OAAA;AAChB,oHAAA,yBAAyB,OAAA;AACzB,4GAAA,iBAAiB,OAAA;AACjB,+GAAA,oBAAoB,OAAA;AAGtB,sCAAsC;AACtC,mCAWkB;AAVhB,mGAAA,SAAS,OAAA;AACT,uGAAA,aAAa,OAAA;AACb,oGAAA,UAAU,OAAA;AACV,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,wGAAA,cAAc,OAAA;AACd,4GAAA,kBAAkB,OAAA;AAClB,gHAAA,sBAAsB,OAAA;AACtB,+GAAA,qBAAqB,OAAA;AACrB,sGAAA,YAAY,OAAA"}