@x402api/agent-wallet-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/balances.d.ts +32 -0
- package/dist/balances.d.ts.map +1 -0
- package/dist/balances.js +278 -0
- package/dist/balances.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +71 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +209 -0
- package/dist/notifications.js.map +1 -0
- package/dist/payment/attempt-store.d.ts +49 -0
- package/dist/payment/attempt-store.d.ts.map +1 -0
- package/dist/payment/attempt-store.js +283 -0
- package/dist/payment/attempt-store.js.map +1 -0
- package/dist/payment/authorize.d.ts +22 -0
- package/dist/payment/authorize.d.ts.map +1 -0
- package/dist/payment/authorize.js +386 -0
- package/dist/payment/authorize.js.map +1 -0
- package/dist/payment/contracts.d.ts +36 -0
- package/dist/payment/contracts.d.ts.map +1 -0
- package/dist/payment/contracts.js +132 -0
- package/dist/payment/contracts.js.map +1 -0
- package/dist/protocol/base.d.ts +78 -0
- package/dist/protocol/base.d.ts.map +1 -0
- package/dist/protocol/base.js +459 -0
- package/dist/protocol/base.js.map +1 -0
- package/dist/protocol/external-recipient.d.ts +22 -0
- package/dist/protocol/external-recipient.d.ts.map +1 -0
- package/dist/protocol/external-recipient.js +149 -0
- package/dist/protocol/external-recipient.js.map +1 -0
- package/dist/protocol/http.d.ts +52 -0
- package/dist/protocol/http.d.ts.map +1 -0
- package/dist/protocol/http.js +283 -0
- package/dist/protocol/http.js.map +1 -0
- package/dist/protocol/solana.d.ts +147 -0
- package/dist/protocol/solana.d.ts.map +1 -0
- package/dist/protocol/solana.js +549 -0
- package/dist/protocol/solana.js.map +1 -0
- package/dist/protocol/tron.d.ts +130 -0
- package/dist/protocol/tron.d.ts.map +1 -0
- package/dist/protocol/tron.js +539 -0
- package/dist/protocol/tron.js.map +1 -0
- package/dist/storage/keystore.d.ts +51 -0
- package/dist/storage/keystore.d.ts.map +1 -0
- package/dist/storage/keystore.js +317 -0
- package/dist/storage/keystore.js.map +1 -0
- package/dist/storage/paths.d.ts +8 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +22 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/private-files.d.ts +8 -0
- package/dist/storage/private-files.d.ts.map +1 -0
- package/dist/storage/private-files.js +83 -0
- package/dist/storage/private-files.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { Wallet, } from "ethers";
|
|
3
|
+
import { TronWeb } from "tronweb";
|
|
4
|
+
import nacl from "tweetnacl";
|
|
5
|
+
import { jsonRpc, readWalletBalance, SOLANA_MAINNET_GENESIS_HASH, validateRpcUrl, } from "../balances.js";
|
|
6
|
+
import { AgentWalletError } from "../errors.js";
|
|
7
|
+
import { BASE_MAINNET_NETWORK, BASE_USDC_BUYER_FUNDED_PROFILE, BASE_USDC_MAINNET_CONTRACT, buildBaseUsdcAuthorization, buildBaseUsdcEip1559TransactionRequest, encodeBaseUsdcTransferWithAuthorization, verifyBuyerSignedBaseUsdcTransaction, } from "../protocol/base.js";
|
|
8
|
+
import { verifyExternalRecipientDeclaration } from "../protocol/external-recipient.js";
|
|
9
|
+
import { createPaymentPayload, encodePaymentSignature, } from "../protocol/http.js";
|
|
10
|
+
import { createSolanaPayment, SOLANA_MAINNET_NETWORK, SOLANA_USDT_BUYER_FUNDED_PROFILE, SOLANA_USDT_MAINNET_MINT, } from "../protocol/solana.js";
|
|
11
|
+
import { createTronUsdtPayment, TRON_MAINNET_CHAIN_ID, TRON_USDT_MAINNET_CONTRACT, TronWebTransactionBuilder, } from "../protocol/tron.js";
|
|
12
|
+
import { unlockWallet } from "../storage/keystore.js";
|
|
13
|
+
import { AttemptStore } from "./attempt-store.js";
|
|
14
|
+
import { createBuyerPaymentIdentifier, loadRequestEnvelope, requirementDigest, } from "./contracts.js";
|
|
15
|
+
function payloadProfile(requirement) {
|
|
16
|
+
const value = requirement.extra.payloadProfile;
|
|
17
|
+
return typeof value === "string" ? value : null;
|
|
18
|
+
}
|
|
19
|
+
function selectRequirement(paymentRequired, wallet) {
|
|
20
|
+
const networkMatches = paymentRequired.accepts.filter((requirement) => requirement.network === wallet.network);
|
|
21
|
+
if (networkMatches.length === 0) {
|
|
22
|
+
throw new AgentWalletError("unsupported_network", "challenge does not advertise the wallet network");
|
|
23
|
+
}
|
|
24
|
+
const expected = wallet.network === BASE_MAINNET_NETWORK
|
|
25
|
+
? {
|
|
26
|
+
asset: BASE_USDC_MAINNET_CONTRACT.toLowerCase(),
|
|
27
|
+
profile: BASE_USDC_BUYER_FUNDED_PROFILE,
|
|
28
|
+
}
|
|
29
|
+
: wallet.network === SOLANA_MAINNET_NETWORK
|
|
30
|
+
? {
|
|
31
|
+
asset: SOLANA_USDT_MAINNET_MINT,
|
|
32
|
+
profile: SOLANA_USDT_BUYER_FUNDED_PROFILE,
|
|
33
|
+
}
|
|
34
|
+
: {
|
|
35
|
+
asset: TRON_USDT_MAINNET_CONTRACT,
|
|
36
|
+
profile: "com.k1hub.x402.tron-exact.v1",
|
|
37
|
+
};
|
|
38
|
+
const assetMatches = networkMatches.filter((requirement) => wallet.network === BASE_MAINNET_NETWORK
|
|
39
|
+
? requirement.asset.toLowerCase() === expected.asset
|
|
40
|
+
: requirement.asset === expected.asset);
|
|
41
|
+
if (assetMatches.length === 0) {
|
|
42
|
+
throw new AgentWalletError("unsupported_asset", "challenge does not advertise the exact supported asset");
|
|
43
|
+
}
|
|
44
|
+
const profileMatches = assetMatches.filter((requirement) => payloadProfile(requirement) === expected.profile);
|
|
45
|
+
if (profileMatches.length !== 1) {
|
|
46
|
+
throw new AgentWalletError("unsupported_profile", "challenge must advertise exactly one supported payload profile");
|
|
47
|
+
}
|
|
48
|
+
return profileMatches[0];
|
|
49
|
+
}
|
|
50
|
+
function enforceLocalPolicy(wallet, amount) {
|
|
51
|
+
if (wallet.maximumPaymentAtomic !== undefined &&
|
|
52
|
+
BigInt(amount) > BigInt(wallet.maximumPaymentAtomic)) {
|
|
53
|
+
throw new AgentWalletError("payment_limit_exceeded", "payment amount exceeds the wallet's local per-payment ceiling", {
|
|
54
|
+
details: {
|
|
55
|
+
amountAtomic: amount,
|
|
56
|
+
maximumPaymentAtomic: wallet.maximumPaymentAtomic,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function enforceBalances(options) {
|
|
62
|
+
const balance = await readWalletBalance({
|
|
63
|
+
network: options.wallet.network,
|
|
64
|
+
address: options.wallet.address,
|
|
65
|
+
rpc: options.rpc,
|
|
66
|
+
});
|
|
67
|
+
if (BigInt(balance.assetAtomic) < BigInt(options.amount)) {
|
|
68
|
+
throw new AgentWalletError("insufficient_asset_balance", `${balance.assetSymbol} balance is below the exact payment amount`, {
|
|
69
|
+
details: {
|
|
70
|
+
requiredAtomic: options.amount,
|
|
71
|
+
availableAtomic: balance.assetAtomic,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (BigInt(balance.nativeAtomic) === 0n &&
|
|
76
|
+
(balance.network !== "tron:mainnet" ||
|
|
77
|
+
BigInt(balance.feeResources?.energyAvailable ?? "0") === 0n)) {
|
|
78
|
+
throw new AgentWalletError("insufficient_network_fee_resources", `${balance.nativeSymbol} or network fee resources are required`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function typedDataParts(value) {
|
|
82
|
+
const domain = value.domain;
|
|
83
|
+
const types = value.types;
|
|
84
|
+
const message = value.message;
|
|
85
|
+
if (typeof domain !== "object" ||
|
|
86
|
+
domain === null ||
|
|
87
|
+
Array.isArray(domain) ||
|
|
88
|
+
typeof types !== "object" ||
|
|
89
|
+
types === null ||
|
|
90
|
+
Array.isArray(types) ||
|
|
91
|
+
typeof message !== "object" ||
|
|
92
|
+
message === null ||
|
|
93
|
+
Array.isArray(message)) {
|
|
94
|
+
throw new AgentWalletError("request_binding_mismatch", "Base typed data is malformed");
|
|
95
|
+
}
|
|
96
|
+
const transfer = types.TransferWithAuthorization;
|
|
97
|
+
if (!Array.isArray(transfer)) {
|
|
98
|
+
throw new AgentWalletError("request_binding_mismatch", "Base typed data types are malformed");
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
domain: domain,
|
|
102
|
+
types: {
|
|
103
|
+
TransferWithAuthorization: transfer,
|
|
104
|
+
},
|
|
105
|
+
message: message,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function requestFromJson(value) {
|
|
109
|
+
const required = [
|
|
110
|
+
"chainId",
|
|
111
|
+
"nonce",
|
|
112
|
+
"gas",
|
|
113
|
+
"maxFeePerGas",
|
|
114
|
+
"maxPriorityFeePerGas",
|
|
115
|
+
"to",
|
|
116
|
+
"value",
|
|
117
|
+
"data",
|
|
118
|
+
];
|
|
119
|
+
if (required.some((key) => typeof value[key] !== "string")) {
|
|
120
|
+
throw new AgentWalletError("request_binding_mismatch", "Base transaction request is malformed");
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
type: 2,
|
|
124
|
+
chainId: BigInt(value.chainId),
|
|
125
|
+
nonce: Number(BigInt(value.nonce)),
|
|
126
|
+
gasLimit: BigInt(value.gas),
|
|
127
|
+
maxFeePerGas: BigInt(value.maxFeePerGas),
|
|
128
|
+
maxPriorityFeePerGas: BigInt(value.maxPriorityFeePerGas),
|
|
129
|
+
to: value.to,
|
|
130
|
+
value: BigInt(value.value),
|
|
131
|
+
data: value.data,
|
|
132
|
+
accessList: [],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
async function basePayment(options) {
|
|
136
|
+
if (!options.wallet.secret.privateKeyHex) {
|
|
137
|
+
throw new AgentWalletError("wallet_locked", "Base private key is unavailable");
|
|
138
|
+
}
|
|
139
|
+
const endpoint = validateRpcUrl(options.rpc, "Base");
|
|
140
|
+
const chainId = await jsonRpc(endpoint, "eth_chainId", []);
|
|
141
|
+
if (chainId !== "0x2105") {
|
|
142
|
+
throw new AgentWalletError("unsupported_network", "Base RPC is not chain ID 8453");
|
|
143
|
+
}
|
|
144
|
+
await verifyExternalRecipientDeclaration({
|
|
145
|
+
paymentRequired: options.paymentRequired,
|
|
146
|
+
accepted: options.accepted,
|
|
147
|
+
});
|
|
148
|
+
const signer = new Wallet(`0x${options.wallet.secret.privateKeyHex}`);
|
|
149
|
+
const material = buildBaseUsdcAuthorization({
|
|
150
|
+
accepted: options.accepted,
|
|
151
|
+
payer: signer.address,
|
|
152
|
+
nowSeconds: Math.floor(Date.now() / 1000),
|
|
153
|
+
challengeDigest: options.challengeDigest,
|
|
154
|
+
});
|
|
155
|
+
const typed = typedDataParts(material.typedData);
|
|
156
|
+
const authorizationSignature = await signer.signTypedData(typed.domain, typed.types, typed.message);
|
|
157
|
+
const data = encodeBaseUsdcTransferWithAuthorization({
|
|
158
|
+
authorization: material.authorization,
|
|
159
|
+
signature: authorizationSignature,
|
|
160
|
+
});
|
|
161
|
+
const [nonceRaw, blockRaw, priorityRaw] = await Promise.all([
|
|
162
|
+
jsonRpc(endpoint, "eth_getTransactionCount", [signer.address, "pending"]),
|
|
163
|
+
jsonRpc(endpoint, "eth_getBlockByNumber", ["latest", false]),
|
|
164
|
+
jsonRpc(endpoint, "eth_maxPriorityFeePerGas", []),
|
|
165
|
+
]);
|
|
166
|
+
if (typeof nonceRaw !== "string" ||
|
|
167
|
+
typeof priorityRaw !== "string" ||
|
|
168
|
+
typeof blockRaw !== "object" ||
|
|
169
|
+
blockRaw === null ||
|
|
170
|
+
!("baseFeePerGas" in blockRaw) ||
|
|
171
|
+
typeof blockRaw.baseFeePerGas !== "string") {
|
|
172
|
+
throw new AgentWalletError("rpc_unavailable", "Base fee policy is unavailable");
|
|
173
|
+
}
|
|
174
|
+
const priority = BigInt(priorityRaw);
|
|
175
|
+
const maxFee = BigInt(blockRaw.baseFeePerGas) * 2n + priority;
|
|
176
|
+
const provisional = buildBaseUsdcEip1559TransactionRequest({
|
|
177
|
+
accepted: options.accepted,
|
|
178
|
+
payer: signer.address,
|
|
179
|
+
data,
|
|
180
|
+
policy: {
|
|
181
|
+
nonce: BigInt(nonceRaw),
|
|
182
|
+
gasLimit: 150000n,
|
|
183
|
+
maxFeePerGas: maxFee,
|
|
184
|
+
maxPriorityFeePerGas: priority,
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
const estimatedRaw = await jsonRpc(endpoint, "eth_estimateGas", [provisional]);
|
|
188
|
+
if (typeof estimatedRaw !== "string") {
|
|
189
|
+
throw new AgentWalletError("rpc_unavailable", "Base gas estimate is unavailable");
|
|
190
|
+
}
|
|
191
|
+
const estimated = BigInt(estimatedRaw);
|
|
192
|
+
const gasLimit = (estimated * 120n + 99n) / 100n;
|
|
193
|
+
const request = buildBaseUsdcEip1559TransactionRequest({
|
|
194
|
+
accepted: options.accepted,
|
|
195
|
+
payer: signer.address,
|
|
196
|
+
data,
|
|
197
|
+
policy: {
|
|
198
|
+
nonce: BigInt(nonceRaw),
|
|
199
|
+
gasLimit,
|
|
200
|
+
maxFeePerGas: maxFee,
|
|
201
|
+
maxPriorityFeePerGas: priority,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
const signedTransaction = await signer.signTransaction(requestFromJson(request));
|
|
205
|
+
verifyBuyerSignedBaseUsdcTransaction({ signedTransaction, request });
|
|
206
|
+
return encodePaymentSignature(createPaymentPayload({
|
|
207
|
+
paymentRequired: options.paymentRequired,
|
|
208
|
+
accepted: options.accepted,
|
|
209
|
+
paymentIdentifier: options.buyerPaymentIdentifier,
|
|
210
|
+
schemePayload: { transaction: signedTransaction },
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
async function solanaPayment(options) {
|
|
214
|
+
if (!options.wallet.secret.seedBase64) {
|
|
215
|
+
throw new AgentWalletError("wallet_locked", "Solana seed is unavailable");
|
|
216
|
+
}
|
|
217
|
+
const endpoint = validateRpcUrl(options.rpc, "Solana");
|
|
218
|
+
const genesis = await jsonRpc(endpoint, "getGenesisHash", []);
|
|
219
|
+
if (genesis !== SOLANA_MAINNET_GENESIS_HASH) {
|
|
220
|
+
throw new AgentWalletError("unsupported_network", "Solana RPC is not Mainnet Beta");
|
|
221
|
+
}
|
|
222
|
+
const seed = Buffer.from(options.wallet.secret.seedBase64, "base64");
|
|
223
|
+
const keyPair = nacl.sign.keyPair.fromSeed(seed);
|
|
224
|
+
const rpc = {
|
|
225
|
+
latestBlockhash: async () => {
|
|
226
|
+
const result = await jsonRpc(endpoint, "getLatestBlockhash", [
|
|
227
|
+
{ commitment: "confirmed" },
|
|
228
|
+
]);
|
|
229
|
+
const blockhash = typeof result === "object" &&
|
|
230
|
+
result !== null &&
|
|
231
|
+
"value" in result &&
|
|
232
|
+
typeof result.value === "object" &&
|
|
233
|
+
result.value !== null &&
|
|
234
|
+
"blockhash" in result.value
|
|
235
|
+
? result.value.blockhash
|
|
236
|
+
: null;
|
|
237
|
+
if (typeof blockhash !== "string") {
|
|
238
|
+
throw new AgentWalletError("rpc_unavailable", "Solana blockhash is unavailable");
|
|
239
|
+
}
|
|
240
|
+
return blockhash;
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
const transport = {
|
|
244
|
+
connect: async () => options.wallet.metadata.address,
|
|
245
|
+
signTransaction: async ({ transactionBase64 }) => {
|
|
246
|
+
const transaction = Buffer.from(transactionBase64, "base64");
|
|
247
|
+
if (transaction[0] !== 1 || transaction.length < 66) {
|
|
248
|
+
throw new AgentWalletError("request_binding_mismatch", "Solana transaction is malformed");
|
|
249
|
+
}
|
|
250
|
+
const message = transaction.subarray(65);
|
|
251
|
+
const signature = nacl.sign.detached(message, keyPair.secretKey);
|
|
252
|
+
const signed = Buffer.from(transaction);
|
|
253
|
+
signed.set(signature, 1);
|
|
254
|
+
return signed.toString("base64");
|
|
255
|
+
},
|
|
256
|
+
};
|
|
257
|
+
return encodePaymentSignature(await createSolanaPayment({
|
|
258
|
+
rpc,
|
|
259
|
+
wallet: transport,
|
|
260
|
+
paymentRequired: options.paymentRequired,
|
|
261
|
+
accepted: options.accepted,
|
|
262
|
+
buyerPaymentIdentifier: options.buyerPaymentIdentifier,
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
async function tronPayment(options) {
|
|
266
|
+
if (!options.wallet.secret.privateKeyHex) {
|
|
267
|
+
throw new AgentWalletError("wallet_locked", "TRON private key is unavailable");
|
|
268
|
+
}
|
|
269
|
+
const endpoint = validateRpcUrl(options.rpc, "TRON");
|
|
270
|
+
const tronWeb = new TronWeb({
|
|
271
|
+
fullHost: endpoint,
|
|
272
|
+
privateKey: options.wallet.secret.privateKeyHex,
|
|
273
|
+
});
|
|
274
|
+
const provider = {
|
|
275
|
+
requestAccounts: async () => [options.wallet.metadata.address],
|
|
276
|
+
getNetwork: async () => ({ networkType: "Mainnet", chainId: TRON_MAINNET_CHAIN_ID }),
|
|
277
|
+
signTransaction: async (transaction) => {
|
|
278
|
+
if (!transaction.walletDocument) {
|
|
279
|
+
throw new AgentWalletError("request_binding_mismatch", "TRON wallet document is missing");
|
|
280
|
+
}
|
|
281
|
+
const signed = (await tronWeb.trx.sign(transaction.walletDocument, options.wallet.secret.privateKeyHex));
|
|
282
|
+
const result = {
|
|
283
|
+
txID: String(signed.txID),
|
|
284
|
+
raw_data_hex: String(signed.raw_data_hex),
|
|
285
|
+
walletDocument: signed,
|
|
286
|
+
};
|
|
287
|
+
if (Array.isArray(signed.signature)) {
|
|
288
|
+
result.signature = signed.signature.map((value) => String(value));
|
|
289
|
+
}
|
|
290
|
+
return result;
|
|
291
|
+
},
|
|
292
|
+
disconnect: async () => undefined,
|
|
293
|
+
};
|
|
294
|
+
const builder = new TronWebTransactionBuilder({
|
|
295
|
+
tronWeb: tronWeb,
|
|
296
|
+
feeLimitSun: 150_000_000,
|
|
297
|
+
});
|
|
298
|
+
return encodePaymentSignature(await createTronUsdtPayment({
|
|
299
|
+
builder,
|
|
300
|
+
provider,
|
|
301
|
+
paymentRequired: options.paymentRequired,
|
|
302
|
+
accepted: options.accepted,
|
|
303
|
+
buyerPaymentIdentifier: options.buyerPaymentIdentifier,
|
|
304
|
+
trustedAssetContracts: [TRON_USDT_MAINNET_CONTRACT],
|
|
305
|
+
maxFeeLimitSun: 150_000_000,
|
|
306
|
+
}));
|
|
307
|
+
}
|
|
308
|
+
export async function authorizePayment(options) {
|
|
309
|
+
const unlocked = await unlockWallet(options.walletsDirectory, options.wallet, options.passphrase);
|
|
310
|
+
const loaded = await loadRequestEnvelope(options.requestEnvelopePath);
|
|
311
|
+
const accepted = selectRequirement(loaded.paymentRequired, unlocked.metadata);
|
|
312
|
+
enforceLocalPolicy(unlocked.metadata, accepted.amount);
|
|
313
|
+
const store = new AttemptStore(options.attemptsDirectory);
|
|
314
|
+
const existing = await store.findByRequestDigest(loaded.requestDigest);
|
|
315
|
+
if (existing !== null && !["terminal_failed", "abandoned_local"].includes(existing.state)) {
|
|
316
|
+
throw new AgentWalletError("attempt_already_exists", "reuse the existing payment attempt for this exact request", { details: { attemptId: existing.attemptId, state: existing.state } });
|
|
317
|
+
}
|
|
318
|
+
await enforceBalances({
|
|
319
|
+
wallet: unlocked.metadata,
|
|
320
|
+
amount: accepted.amount,
|
|
321
|
+
rpc: options.rpc,
|
|
322
|
+
});
|
|
323
|
+
const buyerPaymentIdentifier = createBuyerPaymentIdentifier();
|
|
324
|
+
let paymentSignature;
|
|
325
|
+
if (unlocked.metadata.network === BASE_MAINNET_NETWORK) {
|
|
326
|
+
if (!options.rpc.base)
|
|
327
|
+
throw new AgentWalletError("rpc_not_configured", "Base RPC is required");
|
|
328
|
+
paymentSignature = await basePayment({
|
|
329
|
+
wallet: unlocked,
|
|
330
|
+
paymentRequired: loaded.paymentRequired,
|
|
331
|
+
accepted,
|
|
332
|
+
challengeDigest: loaded.envelope.challengeDigest,
|
|
333
|
+
buyerPaymentIdentifier,
|
|
334
|
+
rpc: options.rpc.base,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
else if (unlocked.metadata.network === SOLANA_MAINNET_NETWORK) {
|
|
338
|
+
if (!options.rpc.solana) {
|
|
339
|
+
throw new AgentWalletError("rpc_not_configured", "Solana RPC is required");
|
|
340
|
+
}
|
|
341
|
+
paymentSignature = await solanaPayment({
|
|
342
|
+
wallet: unlocked,
|
|
343
|
+
paymentRequired: loaded.paymentRequired,
|
|
344
|
+
accepted,
|
|
345
|
+
buyerPaymentIdentifier,
|
|
346
|
+
rpc: options.rpc.solana,
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
if (!options.rpc.tron)
|
|
351
|
+
throw new AgentWalletError("rpc_not_configured", "TRON RPC is required");
|
|
352
|
+
paymentSignature = await tronPayment({
|
|
353
|
+
wallet: unlocked,
|
|
354
|
+
paymentRequired: loaded.paymentRequired,
|
|
355
|
+
accepted,
|
|
356
|
+
buyerPaymentIdentifier,
|
|
357
|
+
rpc: options.rpc.tron,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
const selectedRequirementDigest = requirementDigest(accepted);
|
|
361
|
+
const expiresAt = new Date(Date.now() + Math.min(accepted.maxTimeoutSeconds, 3600) * 1000).toISOString();
|
|
362
|
+
const { record } = await store.persistAuthorized({
|
|
363
|
+
requestDigest: loaded.requestDigest,
|
|
364
|
+
challengeDigest: loaded.envelope.challengeDigest,
|
|
365
|
+
selectedRequirementDigest,
|
|
366
|
+
buyerPaymentIdentifier,
|
|
367
|
+
wallet: unlocked.metadata.name,
|
|
368
|
+
network: unlocked.metadata.network,
|
|
369
|
+
payerAddress: unlocked.metadata.address,
|
|
370
|
+
paymentSignature,
|
|
371
|
+
artifactPath: resolve(options.artifactPath),
|
|
372
|
+
expiresAt,
|
|
373
|
+
});
|
|
374
|
+
return {
|
|
375
|
+
version: 1,
|
|
376
|
+
attemptId: record.attemptId,
|
|
377
|
+
wallet: unlocked.metadata.name,
|
|
378
|
+
payerAddress: unlocked.metadata.address,
|
|
379
|
+
network: unlocked.metadata.network,
|
|
380
|
+
asset: accepted.asset,
|
|
381
|
+
amountAtomic: accepted.amount,
|
|
382
|
+
artifactPath: record.artifactPath,
|
|
383
|
+
state: "authorized",
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=authorize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize.js","sourceRoot":"","sources":["../../src/payment/authorize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type JsonObject, type PaymentRequired, type PaymentRequirement } from "../protocol/http.js";
|
|
2
|
+
export type RequestEnvelope = {
|
|
3
|
+
version: 1;
|
|
4
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
5
|
+
url: string;
|
|
6
|
+
contentType: string;
|
|
7
|
+
bodyBase64: string;
|
|
8
|
+
paymentRequired: string;
|
|
9
|
+
challengeDigest: string;
|
|
10
|
+
merchantReference?: string;
|
|
11
|
+
};
|
|
12
|
+
export type PaymentArtifact = {
|
|
13
|
+
version: 1;
|
|
14
|
+
attemptId: string;
|
|
15
|
+
requestDigest: string;
|
|
16
|
+
buyerPaymentIdentifier: string;
|
|
17
|
+
wallet: string;
|
|
18
|
+
payerAddress: string;
|
|
19
|
+
selectedRequirementDigest: string;
|
|
20
|
+
paymentSignature: string;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
expiresAt: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function normalizeRequestUrl(value: string): string;
|
|
25
|
+
export declare function parseRequestEnvelope(value: unknown): {
|
|
26
|
+
envelope: RequestEnvelope;
|
|
27
|
+
paymentRequired: PaymentRequired;
|
|
28
|
+
body: Uint8Array;
|
|
29
|
+
requestDigest: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function loadRequestEnvelope(path: string): Promise<ReturnType<typeof parseRequestEnvelope>>;
|
|
32
|
+
export declare function digestBytes(value: Uint8Array | string): string;
|
|
33
|
+
export declare function digestJson(value: JsonObject): string;
|
|
34
|
+
export declare function requirementDigest(requirement: PaymentRequirement): string;
|
|
35
|
+
export declare function createBuyerPaymentIdentifier(): string;
|
|
36
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/payment/contracts.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAqBF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG;IACpD,QAAQ,EAAE,eAAe,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CA4EA;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAoBxG;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CAEzE;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { AgentWalletError } from "../errors.js";
|
|
5
|
+
import { canonicalJson, decodePaymentRequiredHeader, } from "../protocol/http.js";
|
|
6
|
+
const METHODS = new Set(["GET", "POST", "PUT", "PATCH", "DELETE"]);
|
|
7
|
+
const SHA256 = /^sha256:[0-9a-f]{64}$/;
|
|
8
|
+
const CONTENT_TYPE = /^[\x21-\x7e]{1,256}$/;
|
|
9
|
+
function exactObject(value, keys, label) {
|
|
10
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
11
|
+
throw new AgentWalletError("invalid_input", `${label} is not an object`);
|
|
12
|
+
}
|
|
13
|
+
const object = value;
|
|
14
|
+
if (Object.keys(object).some((key) => !keys.includes(key))) {
|
|
15
|
+
throw new AgentWalletError("invalid_input", `${label} has unknown fields`);
|
|
16
|
+
}
|
|
17
|
+
return object;
|
|
18
|
+
}
|
|
19
|
+
export function normalizeRequestUrl(value) {
|
|
20
|
+
let url;
|
|
21
|
+
try {
|
|
22
|
+
url = new URL(value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new AgentWalletError("invalid_input", "request URL is invalid", {
|
|
26
|
+
cause: error,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (url.protocol !== "https:" ||
|
|
30
|
+
url.username ||
|
|
31
|
+
url.password ||
|
|
32
|
+
url.hash ||
|
|
33
|
+
value !== url.toString()) {
|
|
34
|
+
throw new AgentWalletError("invalid_input", "request URL must be a normalized credential-free HTTPS URL");
|
|
35
|
+
}
|
|
36
|
+
return url.toString();
|
|
37
|
+
}
|
|
38
|
+
export function parseRequestEnvelope(value) {
|
|
39
|
+
const object = exactObject(value, [
|
|
40
|
+
"version",
|
|
41
|
+
"method",
|
|
42
|
+
"url",
|
|
43
|
+
"contentType",
|
|
44
|
+
"bodyBase64",
|
|
45
|
+
"paymentRequired",
|
|
46
|
+
"challengeDigest",
|
|
47
|
+
"merchantReference",
|
|
48
|
+
], "request envelope");
|
|
49
|
+
if (object.version !== 1 ||
|
|
50
|
+
typeof object.method !== "string" ||
|
|
51
|
+
!METHODS.has(object.method) ||
|
|
52
|
+
typeof object.url !== "string" ||
|
|
53
|
+
typeof object.contentType !== "string" ||
|
|
54
|
+
!CONTENT_TYPE.test(object.contentType) ||
|
|
55
|
+
typeof object.bodyBase64 !== "string" ||
|
|
56
|
+
typeof object.paymentRequired !== "string" ||
|
|
57
|
+
typeof object.challengeDigest !== "string" ||
|
|
58
|
+
!SHA256.test(object.challengeDigest) ||
|
|
59
|
+
(object.merchantReference !== undefined &&
|
|
60
|
+
(typeof object.merchantReference !== "string" ||
|
|
61
|
+
object.merchantReference.length > 256))) {
|
|
62
|
+
throw new AgentWalletError("invalid_input", "request envelope is malformed");
|
|
63
|
+
}
|
|
64
|
+
const body = Buffer.from(object.bodyBase64, "base64");
|
|
65
|
+
if (body.length > 2 * 1024 * 1024 ||
|
|
66
|
+
body.toString("base64") !== object.bodyBase64) {
|
|
67
|
+
throw new AgentWalletError("invalid_input", "request body is not bounded canonical base64");
|
|
68
|
+
}
|
|
69
|
+
const envelope = {
|
|
70
|
+
version: 1,
|
|
71
|
+
method: object.method,
|
|
72
|
+
url: normalizeRequestUrl(object.url),
|
|
73
|
+
contentType: object.contentType,
|
|
74
|
+
bodyBase64: object.bodyBase64,
|
|
75
|
+
paymentRequired: object.paymentRequired,
|
|
76
|
+
challengeDigest: object.challengeDigest,
|
|
77
|
+
...(object.merchantReference === undefined
|
|
78
|
+
? {}
|
|
79
|
+
: { merchantReference: object.merchantReference }),
|
|
80
|
+
};
|
|
81
|
+
let paymentRequired;
|
|
82
|
+
try {
|
|
83
|
+
paymentRequired = decodePaymentRequiredHeader(envelope.paymentRequired);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw new AgentWalletError("request_binding_mismatch", "PAYMENT-REQUIRED could not be decoded strictly", { cause: error });
|
|
87
|
+
}
|
|
88
|
+
if (normalizeRequestUrl(paymentRequired.resource.url) !== envelope.url) {
|
|
89
|
+
throw new AgentWalletError("request_binding_mismatch", "PAYMENT-REQUIRED resource does not match the exact request URL");
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
envelope,
|
|
93
|
+
paymentRequired,
|
|
94
|
+
body,
|
|
95
|
+
requestDigest: digestJson(envelope),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export async function loadRequestEnvelope(path) {
|
|
99
|
+
const absolute = resolve(path);
|
|
100
|
+
const stat = await lstat(absolute).catch((error) => {
|
|
101
|
+
if (error.code === "ENOENT") {
|
|
102
|
+
throw new AgentWalletError("invalid_input", `request envelope not found: ${absolute}`);
|
|
103
|
+
}
|
|
104
|
+
throw error;
|
|
105
|
+
});
|
|
106
|
+
if (!stat.isFile() || stat.isSymbolicLink() || stat.size < 2 || stat.size > 3 * 1024 * 1024) {
|
|
107
|
+
throw new AgentWalletError("invalid_input", "request envelope file is unsafe or too large");
|
|
108
|
+
}
|
|
109
|
+
let parsed;
|
|
110
|
+
try {
|
|
111
|
+
parsed = JSON.parse(await readFile(absolute, "utf8"));
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
throw new AgentWalletError("invalid_input", "request envelope is not JSON", {
|
|
115
|
+
cause: error,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return parseRequestEnvelope(parsed);
|
|
119
|
+
}
|
|
120
|
+
export function digestBytes(value) {
|
|
121
|
+
return `sha256:${createHash("sha256").update(value).digest("hex")}`;
|
|
122
|
+
}
|
|
123
|
+
export function digestJson(value) {
|
|
124
|
+
return digestBytes(canonicalJson(value));
|
|
125
|
+
}
|
|
126
|
+
export function requirementDigest(requirement) {
|
|
127
|
+
return digestJson(requirement);
|
|
128
|
+
}
|
|
129
|
+
export function createBuyerPaymentIdentifier() {
|
|
130
|
+
return randomBytes(24).toString("base64url");
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/payment/contracts.ts"],"names":[],"mappings":"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"}
|