@3rd-eye-labs/openmm 0.1.0 → 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.
- package/README.md +6 -1
- package/dist/cli/cli.js +4 -0
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/ohlcv.d.ts +3 -0
- package/dist/cli/commands/ohlcv.d.ts.map +1 -0
- package/dist/cli/commands/ohlcv.js +115 -0
- package/dist/cli/commands/ohlcv.js.map +1 -0
- package/dist/cli/commands/pool-discovery.d.ts.map +1 -1
- package/dist/cli/commands/pool-discovery.js +13 -4
- package/dist/cli/commands/pool-discovery.js.map +1 -1
- package/dist/cli/commands/wallet.d.ts +7 -0
- package/dist/cli/commands/wallet.d.ts.map +1 -0
- package/dist/cli/commands/wallet.js +271 -0
- package/dist/cli/commands/wallet.js.map +1 -0
- package/dist/cli/pool-discovery-core.d.ts +2 -1
- package/dist/cli/pool-discovery-core.d.ts.map +1 -1
- package/dist/cli/pool-discovery-core.js +66 -30
- package/dist/cli/pool-discovery-core.js.map +1 -1
- package/dist/core/exchange/base-exchange-connector.d.ts +2 -1
- package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -1
- package/dist/core/exchange/base-exchange-connector.js.map +1 -1
- package/dist/exchanges/bitget/bitget-connector.d.ts +11 -1
- package/dist/exchanges/bitget/bitget-connector.d.ts.map +1 -1
- package/dist/exchanges/bitget/bitget-connector.js +52 -0
- package/dist/exchanges/bitget/bitget-connector.js.map +1 -1
- package/dist/exchanges/gateio/gateio-connector.d.ts +11 -1
- package/dist/exchanges/gateio/gateio-connector.d.ts.map +1 -1
- package/dist/exchanges/gateio/gateio-connector.js +54 -0
- package/dist/exchanges/gateio/gateio-connector.js.map +1 -1
- package/dist/exchanges/kraken/kraken-connector.d.ts +6 -1
- package/dist/exchanges/kraken/kraken-connector.d.ts.map +1 -1
- package/dist/exchanges/kraken/kraken-connector.js +44 -0
- package/dist/exchanges/kraken/kraken-connector.js.map +1 -1
- package/dist/exchanges/mexc/mexc-auth.d.ts +1 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-auth.js +4 -1
- package/dist/exchanges/mexc/mexc-auth.js.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.d.ts +6 -1
- package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -1
- package/dist/exchanges/mexc/mexc-connector.js +37 -0
- package/dist/exchanges/mexc/mexc-connector.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -1
- package/dist/index.js.map +1 -1
- package/dist/types/market.d.ts +15 -0
- package/dist/types/market.d.ts.map +1 -1
- package/dist/x402/crypto.d.ts +79 -0
- package/dist/x402/crypto.d.ts.map +1 -0
- package/dist/x402/crypto.js +300 -0
- package/dist/x402/crypto.js.map +1 -0
- package/dist/x402/evm.d.ts +41 -0
- package/dist/x402/evm.d.ts.map +1 -0
- package/dist/x402/evm.js +229 -0
- package/dist/x402/evm.js.map +1 -0
- package/dist/x402/handler.d.ts +53 -0
- package/dist/x402/handler.d.ts.map +1 -0
- package/dist/x402/handler.js +233 -0
- package/dist/x402/handler.js.map +1 -0
- package/dist/x402/index.d.ts +29 -0
- package/dist/x402/index.d.ts.map +1 -0
- package/dist/x402/index.js +67 -0
- package/dist/x402/index.js.map +1 -0
- package/dist/x402/types.d.ts +185 -0
- package/dist/x402/types.d.ts.map +1 -0
- package/dist/x402/types.js +7 -0
- package/dist/x402/types.js.map +1 -0
- package/dist/x402/wallet.d.ts +65 -0
- package/dist/x402/wallet.d.ts.map +1 -0
- package/dist/x402/wallet.js +282 -0
- package/dist/x402/wallet.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/grid.d.ts +0 -3
- package/dist/cli/commands/grid.d.ts.map +0 -1
- package/dist/cli/commands/grid.js +0 -103
- package/dist/cli/commands/grid.js.map +0 -1
- package/dist/cli/commands/multi-trade.d.ts +0 -3
- package/dist/cli/commands/multi-trade.d.ts.map +0 -1
- package/dist/cli/commands/multi-trade.js +0 -175
- package/dist/cli/commands/multi-trade.js.map +0 -1
- package/dist/cli/pool-discovery.d.ts +0 -56
- package/dist/cli/pool-discovery.d.ts.map +0 -1
- package/dist/cli/pool-discovery.js +0 -283
- package/dist/cli/pool-discovery.js.map +0 -1
- package/dist/core/price-aggregation/price-cache.d.ts +0 -55
- package/dist/core/price-aggregation/price-cache.d.ts.map +0 -1
- package/dist/core/price-aggregation/price-cache.js +0 -152
- package/dist/core/price-aggregation/price-cache.js.map +0 -1
- package/dist/examples/mexc-connector-comprehensive-test.d.ts +0 -15
- package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +0 -1
- package/dist/examples/mexc-connector-comprehensive-test.js +0 -514
- package/dist/examples/mexc-connector-comprehensive-test.js.map +0 -1
- package/dist/examples/mexc-order-update-test.d.ts +0 -4
- package/dist/examples/mexc-order-update-test.d.ts.map +0 -1
- package/dist/examples/mexc-order-update-test.js +0 -186
- package/dist/examples/mexc-order-update-test.js.map +0 -1
- package/dist/examples/mexc-test.d.ts +0 -9
- package/dist/examples/mexc-test.d.ts.map +0 -1
- package/dist/examples/mexc-test.js +0 -218
- package/dist/examples/mexc-test.js.map +0 -1
- package/dist/examples/mexc-trades-debug.d.ts +0 -2
- package/dist/examples/mexc-trades-debug.d.ts.map +0 -1
- package/dist/examples/mexc-trades-debug.js +0 -101
- package/dist/examples/mexc-trades-debug.js.map +0 -1
- package/dist/examples/mexc-trades-subscription-debug.d.ts +0 -2
- package/dist/examples/mexc-trades-subscription-debug.d.ts.map +0 -1
- package/dist/examples/mexc-trades-subscription-debug.js +0 -150
- package/dist/examples/mexc-trades-subscription-debug.js.map +0 -1
- package/dist/examples/mexc-websocket-test.d.ts +0 -8
- package/dist/examples/mexc-websocket-test.d.ts.map +0 -1
- package/dist/examples/mexc-websocket-test.js +0 -115
- package/dist/examples/mexc-websocket-test.js.map +0 -1
- package/dist/examples/test-protobuf-status-detection.d.ts +0 -9
- package/dist/examples/test-protobuf-status-detection.d.ts.map +0 -1
- package/dist/examples/test-protobuf-status-detection.js +0 -83
- package/dist/examples/test-protobuf-status-detection.js.map +0 -1
- package/dist/exchanges/base-exchange-connector.d.ts +0 -33
- package/dist/exchanges/base-exchange-connector.d.ts.map +0 -1
- package/dist/exchanges/base-exchange-connector.js +0 -55
- package/dist/exchanges/base-exchange-connector.js.map +0 -1
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts +0 -19
- package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +0 -1
- package/dist/exchanges/kraken/test-kraken-websocket.js +0 -413
- package/dist/exchanges/kraken/test-kraken-websocket.js.map +0 -1
- package/dist/mcp/resources/index.d.ts +0 -3
- package/dist/mcp/resources/index.d.ts.map +0 -1
- package/dist/mcp/resources/index.js +0 -11
- package/dist/mcp/resources/index.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -4
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -29
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -3
- package/dist/mcp/tools/index.d.ts.map +0 -1
- package/dist/mcp/tools/index.js +0 -12
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/tests/fixtures/test-helpers.d.ts +0 -5
- package/dist/tests/fixtures/test-helpers.d.ts.map +0 -1
- package/dist/tests/fixtures/test-helpers.js +0 -8
- package/dist/tests/fixtures/test-helpers.js.map +0 -1
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +0 -2
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +0 -1
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +0 -237
- package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +0 -1
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +0 -2
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +0 -1
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +0 -57
- package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +0 -1
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +0 -2
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +0 -1
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +0 -141
- package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +0 -1
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +0 -2
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +0 -1
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +0 -375
- package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +0 -1
- package/dist/tests/unit/cli/exchange-factory.test.d.ts +0 -2
- package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +0 -1
- package/dist/tests/unit/cli/exchange-factory.test.js +0 -148
- package/dist/tests/unit/cli/exchange-factory.test.js.map +0 -1
- package/dist/tests/unit/config/environment.test.d.ts +0 -2
- package/dist/tests/unit/config/environment.test.d.ts.map +0 -1
- package/dist/tests/unit/config/environment.test.js +0 -158
- package/dist/tests/unit/config/environment.test.js.map +0 -1
- package/dist/tests/unit/config/launcher-config.test.d.ts +0 -2
- package/dist/tests/unit/config/launcher-config.test.d.ts.map +0 -1
- package/dist/tests/unit/config/launcher-config.test.js +0 -117
- package/dist/tests/unit/config/launcher-config.test.js.map +0 -1
- package/dist/tests/unit/config/price-aggregation.test.d.ts +0 -2
- package/dist/tests/unit/config/price-aggregation.test.d.ts.map +0 -1
- package/dist/tests/unit/config/price-aggregation.test.js +0 -144
- package/dist/tests/unit/config/price-aggregation.test.js.map +0 -1
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +0 -2
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +0 -1
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +0 -191
- package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +0 -1
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +0 -2
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +0 -1
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +0 -324
- package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +0 -1
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +0 -2
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +0 -1
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +0 -177
- package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +0 -1
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +0 -2
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +0 -1
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +0 -168
- package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +0 -1
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +0 -2
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +0 -1
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +0 -217
- package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +0 -1
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +0 -2
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +0 -1
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +0 -229
- package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +0 -1
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +0 -2
- package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +0 -1
- package/dist/tests/unit/core/risk-management/risk-manager.test.js +0 -194
- package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +0 -1
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +0 -2
- package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +0 -1
- package/dist/tests/unit/core/strategy/base-strategy.test.js +0 -254
- package/dist/tests/unit/core/strategy/base-strategy.test.js.map +0 -1
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +0 -2
- package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +0 -1
- package/dist/tests/unit/core/strategy/strategy-factory.test.js +0 -213
- package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +0 -452
- package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +0 -1419
- package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +0 -435
- package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +0 -314
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +0 -178
- package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +0 -502
- package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +0 -317
- package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +0 -2
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +0 -1
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +0 -843
- package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +0 -2
- package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js +0 -67
- package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +0 -2
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +0 -211
- package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +0 -2
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +0 -197
- package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +0 -2
- package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +0 -1
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js +0 -429
- package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +0 -1
- package/dist/tests/unit/utils/logger.test.d.ts +0 -2
- package/dist/tests/unit/utils/logger.test.d.ts.map +0 -1
- package/dist/tests/unit/utils/logger.test.js +0 -260
- package/dist/tests/unit/utils/logger.test.js.map +0 -1
- package/dist/tests/unit/utils/symbol-utils.test.d.ts +0 -2
- package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +0 -1
- package/dist/tests/unit/utils/symbol-utils.test.js +0 -178
- package/dist/tests/unit/utils/symbol-utils.test.js.map +0 -1
- package/dist/types/price-aggregation.d.ts +0 -31
- package/dist/types/price-aggregation.d.ts.map +0 -1
- package/dist/types/price-aggregation.js +0 -6
- package/dist/types/price-aggregation.js.map +0 -1
- package/dist/utils/crypto.d.ts +0 -15
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/crypto.js +0 -50
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -36
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -174
- package/dist/utils/validation.js.map +0 -1
|
@@ -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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenMM x402 Payment Types
|
|
3
|
+
* Type definitions for x402 payment protocol support.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Payment requirement from 402 response header.
|
|
7
|
+
*/
|
|
8
|
+
export interface PaymentRequirement {
|
|
9
|
+
/** CAIP-2 network identifier (e.g., "eip155:8453" for Base) */
|
|
10
|
+
network: string;
|
|
11
|
+
/** Token contract address */
|
|
12
|
+
asset: string;
|
|
13
|
+
/** Amount in smallest unit (e.g., USDC with 6 decimals: 1000000 = $1) */
|
|
14
|
+
amount: string;
|
|
15
|
+
/** Recipient address */
|
|
16
|
+
payTo?: string;
|
|
17
|
+
pay_to?: string;
|
|
18
|
+
/** Additional requirements (e.g., EIP-712 domain info) */
|
|
19
|
+
extra?: {
|
|
20
|
+
name?: string;
|
|
21
|
+
version?: string;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parsed 402 response with payment requirements.
|
|
27
|
+
*/
|
|
28
|
+
export interface PaymentRequiredResponse {
|
|
29
|
+
accepts: PaymentRequirement[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* EVM wallet keypair.
|
|
33
|
+
*/
|
|
34
|
+
export interface EvmWallet {
|
|
35
|
+
address: string;
|
|
36
|
+
privateKey: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Solana wallet keypair.
|
|
40
|
+
*/
|
|
41
|
+
export interface SolanaWallet {
|
|
42
|
+
address: string;
|
|
43
|
+
privateKey: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Encrypted key storage format.
|
|
47
|
+
*/
|
|
48
|
+
export interface EncryptedKey {
|
|
49
|
+
/** Unencrypted storage */
|
|
50
|
+
data?: string;
|
|
51
|
+
encrypted?: boolean;
|
|
52
|
+
/** Encrypted storage */
|
|
53
|
+
cipher?: string;
|
|
54
|
+
kdf?: string;
|
|
55
|
+
kdfParams?: {
|
|
56
|
+
N: number;
|
|
57
|
+
r: number;
|
|
58
|
+
p: number;
|
|
59
|
+
};
|
|
60
|
+
salt?: string;
|
|
61
|
+
iv?: string;
|
|
62
|
+
authTag?: string;
|
|
63
|
+
ciphertext?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Stored wallet format.
|
|
67
|
+
*/
|
|
68
|
+
export interface StoredWallet {
|
|
69
|
+
name: string;
|
|
70
|
+
createdAt: string;
|
|
71
|
+
evm: {
|
|
72
|
+
address: string;
|
|
73
|
+
encrypted: EncryptedKey;
|
|
74
|
+
};
|
|
75
|
+
solana?: {
|
|
76
|
+
address: string;
|
|
77
|
+
encrypted: EncryptedKey;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Wallet configuration.
|
|
82
|
+
*/
|
|
83
|
+
export interface WalletConfig {
|
|
84
|
+
defaultWallet: string | null;
|
|
85
|
+
passwordHash: {
|
|
86
|
+
salt: string;
|
|
87
|
+
hash: string;
|
|
88
|
+
} | null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Exported wallet with decrypted keys.
|
|
92
|
+
*/
|
|
93
|
+
export interface ExportedWallet {
|
|
94
|
+
name: string;
|
|
95
|
+
evm: {
|
|
96
|
+
address: string;
|
|
97
|
+
privateKey: string;
|
|
98
|
+
};
|
|
99
|
+
solana?: {
|
|
100
|
+
address: string;
|
|
101
|
+
privateKey: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Wallet list entry (public info only).
|
|
106
|
+
*/
|
|
107
|
+
export interface WalletListEntry {
|
|
108
|
+
name: string;
|
|
109
|
+
evm: string | null;
|
|
110
|
+
solana: string | null;
|
|
111
|
+
createdAt: string;
|
|
112
|
+
isDefault: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* EIP-712 domain for typed data signing.
|
|
116
|
+
*/
|
|
117
|
+
export interface EIP712Domain {
|
|
118
|
+
name: string;
|
|
119
|
+
version: string;
|
|
120
|
+
chainId: number;
|
|
121
|
+
verifyingContract: string;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* EIP-3009 TransferWithAuthorization message.
|
|
125
|
+
*/
|
|
126
|
+
export interface TransferAuthorization {
|
|
127
|
+
from: string;
|
|
128
|
+
to: string;
|
|
129
|
+
value: bigint;
|
|
130
|
+
validAfter: bigint;
|
|
131
|
+
validBefore: bigint;
|
|
132
|
+
nonce: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* ECDSA signature components.
|
|
136
|
+
*/
|
|
137
|
+
export interface ECDSASignature {
|
|
138
|
+
r: Buffer;
|
|
139
|
+
s: Buffer;
|
|
140
|
+
v: number;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* x402 payment payload for Payment-Signature header.
|
|
144
|
+
*/
|
|
145
|
+
export interface X402PaymentPayload {
|
|
146
|
+
x402Version: number;
|
|
147
|
+
payload: {
|
|
148
|
+
authorization: {
|
|
149
|
+
from: string;
|
|
150
|
+
to: string;
|
|
151
|
+
value: string;
|
|
152
|
+
validAfter: string;
|
|
153
|
+
validBefore: string;
|
|
154
|
+
nonce: string;
|
|
155
|
+
};
|
|
156
|
+
signature: string;
|
|
157
|
+
};
|
|
158
|
+
accepted: PaymentRequirement;
|
|
159
|
+
resource?: {
|
|
160
|
+
url: string;
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Options for x402 fetch wrapper.
|
|
165
|
+
*/
|
|
166
|
+
export interface X402FetchOptions extends RequestInit {
|
|
167
|
+
/** Wallet name to use (defaults to default wallet) */
|
|
168
|
+
walletName?: string;
|
|
169
|
+
/** Wallet password (defaults to env var OPENMM_WALLET_PASSWORD) */
|
|
170
|
+
password?: string;
|
|
171
|
+
/** Skip auto-payment, just return 402 response */
|
|
172
|
+
skipPayment?: boolean;
|
|
173
|
+
/** Maximum retries after payment */
|
|
174
|
+
maxRetries?: number;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Result of checking x402 balance.
|
|
178
|
+
*/
|
|
179
|
+
export interface X402BalanceResult {
|
|
180
|
+
network: string;
|
|
181
|
+
address: string;
|
|
182
|
+
balance: number;
|
|
183
|
+
symbol: string;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenMM x402 Wallet Management
|
|
3
|
+
* Local key generation and storage for EVM and Solana chains.
|
|
4
|
+
*/
|
|
5
|
+
import type { WalletConfig, ExportedWallet, WalletListEntry } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve wallet password from environment variable.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolvePassword(): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Get wallet configuration.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getWalletConfig(): WalletConfig;
|
|
14
|
+
/**
|
|
15
|
+
* List all wallets.
|
|
16
|
+
*/
|
|
17
|
+
export declare function listWallets(): {
|
|
18
|
+
wallets: WalletListEntry[];
|
|
19
|
+
defaultWallet: string | null;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Create a new wallet pair (EVM + Solana).
|
|
23
|
+
*/
|
|
24
|
+
export declare function createWallet(name: string, password: string | null): {
|
|
25
|
+
name: string;
|
|
26
|
+
evm: string;
|
|
27
|
+
solana: string;
|
|
28
|
+
isDefault: boolean;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Show wallet details (addresses only, no keys).
|
|
32
|
+
*/
|
|
33
|
+
export declare function showWallet(name: string): {
|
|
34
|
+
name: string;
|
|
35
|
+
evm: string | null;
|
|
36
|
+
solana: string | null;
|
|
37
|
+
createdAt: string;
|
|
38
|
+
isDefault: boolean;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Export private keys for a wallet (requires password).
|
|
42
|
+
*/
|
|
43
|
+
export declare function exportWallet(name: string, password: string | null): ExportedWallet;
|
|
44
|
+
/**
|
|
45
|
+
* Set the default wallet.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setDefaultWallet(name: string): {
|
|
48
|
+
defaultWallet: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Delete a wallet.
|
|
52
|
+
*/
|
|
53
|
+
export declare function deleteWallet(name: string, password: string | null): {
|
|
54
|
+
deleted: string;
|
|
55
|
+
newDefault: string | null;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Get the default wallet's addresses without requiring password.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getDefaultWalletAddresses(): {
|
|
61
|
+
name: string;
|
|
62
|
+
evm: string | null;
|
|
63
|
+
solana: string | null;
|
|
64
|
+
} | null;
|
|
65
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/x402/wallet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EAEV,YAAY,EACZ,cAAc,EACd,eAAe,EAEhB,MAAM,SAAS,CAAC;AAuCjB;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAID;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AAqCD;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAmB1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB,CAsEA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAgBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CA0BlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAWxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA2BhD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,GAAG,IAAI,CAcP"}
|