@obolos_tech/mcp-server 0.2.3 → 0.2.4
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/dist/index.js +0 -0
- package/dist/payment.js +66 -7
- package/dist/payment.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
File without changes
|
package/dist/payment.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Signs x402 payment requests using a private key (no browser wallet needed).
|
|
5
5
|
* Supports both v1 (exact) and v2 (x402x-router-settlement) payment schemes.
|
|
6
6
|
*/
|
|
7
|
-
import { createWalletClient, http, publicActions, formatUnits, } from 'viem';
|
|
7
|
+
import { createWalletClient, http, publicActions, formatUnits, keccak256, encodePacked, } from 'viem';
|
|
8
8
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
9
9
|
import { base } from 'viem/chains';
|
|
10
10
|
const USDC_ADDRESS = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
|
|
@@ -17,6 +17,42 @@ const USDC_ABI = [
|
|
|
17
17
|
type: 'function',
|
|
18
18
|
},
|
|
19
19
|
];
|
|
20
|
+
/**
|
|
21
|
+
* Calculate the SettlementRouter commitment hash.
|
|
22
|
+
* This must be used as the EIP-3009 nonce when signing for router settlement,
|
|
23
|
+
* because the on-chain contract recalculates and verifies it.
|
|
24
|
+
*/
|
|
25
|
+
function calculateCommitment(params) {
|
|
26
|
+
return keccak256(encodePacked([
|
|
27
|
+
'string', // protocol identifier
|
|
28
|
+
'uint256', // chainId
|
|
29
|
+
'address', // hub (settlementRouter)
|
|
30
|
+
'address', // token
|
|
31
|
+
'address', // from
|
|
32
|
+
'uint256', // value
|
|
33
|
+
'uint256', // validAfter
|
|
34
|
+
'uint256', // validBefore
|
|
35
|
+
'bytes32', // salt
|
|
36
|
+
'address', // payTo
|
|
37
|
+
'uint256', // facilitatorFee
|
|
38
|
+
'address', // hook
|
|
39
|
+
'bytes32', // keccak256(hookData)
|
|
40
|
+
], [
|
|
41
|
+
'X402/settle/v1',
|
|
42
|
+
params.chainId,
|
|
43
|
+
params.hub,
|
|
44
|
+
params.asset,
|
|
45
|
+
params.from,
|
|
46
|
+
params.value,
|
|
47
|
+
params.validAfter,
|
|
48
|
+
params.validBefore,
|
|
49
|
+
params.salt,
|
|
50
|
+
params.payTo,
|
|
51
|
+
params.facilitatorFee,
|
|
52
|
+
params.hook,
|
|
53
|
+
keccak256(params.hookData),
|
|
54
|
+
]));
|
|
55
|
+
}
|
|
20
56
|
export class PaymentSigner {
|
|
21
57
|
account;
|
|
22
58
|
client;
|
|
@@ -72,6 +108,10 @@ export class PaymentSigner {
|
|
|
72
108
|
if (!amount || !payTo) {
|
|
73
109
|
throw new Error('Missing amount or payTo in payment requirement');
|
|
74
110
|
}
|
|
111
|
+
// Check for x402x-router-settlement extension
|
|
112
|
+
const settlementKey = 'x402x-router-settlement';
|
|
113
|
+
const settlementExt = requirement.extra?.[settlementKey];
|
|
114
|
+
const settlementInfo = settlementExt?.info;
|
|
75
115
|
// Build EIP-712 typed data for the exact scheme
|
|
76
116
|
const deadline = BigInt(Math.floor(Date.now() / 1000) + 300); // 5 min
|
|
77
117
|
const amountBigInt = BigInt(amount);
|
|
@@ -92,10 +132,31 @@ export class PaymentSigner {
|
|
|
92
132
|
{ name: 'nonce', type: 'bytes32' },
|
|
93
133
|
],
|
|
94
134
|
};
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
135
|
+
// Determine the nonce: commitment hash for router settlement, random otherwise
|
|
136
|
+
let nonce;
|
|
137
|
+
if (settlementInfo?.settlementRouter && settlementInfo?.salt) {
|
|
138
|
+
// SettlementRouter requires nonce = commitment hash of all settlement params
|
|
139
|
+
nonce = calculateCommitment({
|
|
140
|
+
chainId: 8453n,
|
|
141
|
+
hub: settlementInfo.settlementRouter,
|
|
142
|
+
asset,
|
|
143
|
+
from: this.account.address,
|
|
144
|
+
value: amountBigInt,
|
|
145
|
+
validAfter: 0n,
|
|
146
|
+
validBefore: deadline,
|
|
147
|
+
salt: settlementInfo.salt,
|
|
148
|
+
payTo: settlementInfo.finalPayTo || payTo,
|
|
149
|
+
facilitatorFee: BigInt(settlementInfo.facilitatorFee || '0'),
|
|
150
|
+
hook: settlementInfo.hook,
|
|
151
|
+
hookData: settlementInfo.hookData,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Standard exact scheme — random nonce
|
|
156
|
+
const nonceBytes = new Uint8Array(32);
|
|
157
|
+
crypto.getRandomValues(nonceBytes);
|
|
158
|
+
nonce = `0x${Array.from(nonceBytes).map(b => b.toString(16).padStart(2, '0')).join('')}`;
|
|
159
|
+
}
|
|
99
160
|
const message = {
|
|
100
161
|
from: this.account.address,
|
|
101
162
|
to: payTo,
|
|
@@ -133,8 +194,6 @@ export class PaymentSigner {
|
|
|
133
194
|
},
|
|
134
195
|
};
|
|
135
196
|
// Forward settlement extensions if present in the 402 response
|
|
136
|
-
const settlementKey = 'x402x-router-settlement';
|
|
137
|
-
const settlementExt = requirement.extra?.[settlementKey];
|
|
138
197
|
if (settlementExt) {
|
|
139
198
|
paymentPayload.extensions = { [settlementKey]: settlementExt };
|
|
140
199
|
}
|
package/dist/payment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,IAAI,EACJ,aAAa,EACb,WAAW,
|
|
1
|
+
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"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"}
|