@armory-sh/client-web3 0.2.9 → 0.2.10
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.d.ts +1 -0
- package/dist/index.js +80 -38
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -6,7 +6,9 @@ import {
|
|
|
6
6
|
encodePaymentV2,
|
|
7
7
|
isX402V1Requirements,
|
|
8
8
|
isX402V2Requirements,
|
|
9
|
-
combineSignatureV2
|
|
9
|
+
combineSignatureV2,
|
|
10
|
+
V1_HEADERS as V1_HEADERS2,
|
|
11
|
+
V2_HEADERS as V2_HEADERS2
|
|
10
12
|
} from "@armory-sh/base";
|
|
11
13
|
|
|
12
14
|
// src/eip3009.ts
|
|
@@ -236,8 +238,9 @@ var createX402V2Payment = (params) => {
|
|
|
236
238
|
};
|
|
237
239
|
return {
|
|
238
240
|
x402Version: 2,
|
|
241
|
+
scheme: params.accepted.scheme,
|
|
242
|
+
network: params.accepted.network,
|
|
239
243
|
resource: params.resource,
|
|
240
|
-
accepted: params.accepted,
|
|
241
244
|
payload: {
|
|
242
245
|
signature: params.signature,
|
|
243
246
|
authorization
|
|
@@ -359,6 +362,36 @@ var signPaymentV1 = async (state, params) => {
|
|
|
359
362
|
};
|
|
360
363
|
return { v: signature.v, r: signature.r, s: signature.s, payload: legacyPayload };
|
|
361
364
|
};
|
|
365
|
+
var handlePaymentRequirements = async (requirements, state) => {
|
|
366
|
+
const version = detectVersionFromRequirements(requirements);
|
|
367
|
+
if (version === 1) {
|
|
368
|
+
const req2 = requirements;
|
|
369
|
+
if (isX402V1Requirements(req2)) {
|
|
370
|
+
const x402Req = req2;
|
|
371
|
+
return signPayment({
|
|
372
|
+
amount: x402Req.maxAmountRequired,
|
|
373
|
+
to: x402Req.payTo
|
|
374
|
+
}, state);
|
|
375
|
+
}
|
|
376
|
+
const legacyReq = req2;
|
|
377
|
+
return signPayment({
|
|
378
|
+
amount: legacyReq.amount,
|
|
379
|
+
to: legacyReq.payTo,
|
|
380
|
+
expiry: legacyReq.expiry
|
|
381
|
+
}, state);
|
|
382
|
+
}
|
|
383
|
+
const req = requirements;
|
|
384
|
+
const to = typeof req.payTo === "string" ? req.payTo : "0x0000000000000000000000000000000000000000";
|
|
385
|
+
const from = getAddress(state.account);
|
|
386
|
+
return signPaymentV2(state, {
|
|
387
|
+
from,
|
|
388
|
+
to,
|
|
389
|
+
amount: req.amount,
|
|
390
|
+
nonce: crypto.randomUUID(),
|
|
391
|
+
expiry: Math.floor(Date.now() / 1e3) + DEFAULT_EXPIRY_SECONDS,
|
|
392
|
+
accepted: req
|
|
393
|
+
});
|
|
394
|
+
};
|
|
362
395
|
var signPaymentV2 = async (state, params) => {
|
|
363
396
|
const { from, to, amount, nonce, expiry, accepted } = params;
|
|
364
397
|
const { network, domainName, domainVersion } = state;
|
|
@@ -402,7 +435,43 @@ var signPaymentV2 = async (state, params) => {
|
|
|
402
435
|
};
|
|
403
436
|
var createX402Client = (config) => {
|
|
404
437
|
const state = createClientState(config);
|
|
438
|
+
const fetch2 = async (url, init) => {
|
|
439
|
+
let response = await fetch2(url, init);
|
|
440
|
+
if (response.status === 402) {
|
|
441
|
+
const version = detectX402Version(response, state.version);
|
|
442
|
+
const parsed = await parsePaymentRequired(response, version);
|
|
443
|
+
const selectedRequirements = selectSchemeRequirements(parsed.requirements, "exact");
|
|
444
|
+
if (!selectedRequirements) {
|
|
445
|
+
throw new Error("No supported payment scheme found in requirements");
|
|
446
|
+
}
|
|
447
|
+
const from = getAddress(state.account);
|
|
448
|
+
let result;
|
|
449
|
+
if (version === 1) {
|
|
450
|
+
result = await handlePaymentRequirements(selectedRequirements, state);
|
|
451
|
+
} else {
|
|
452
|
+
const req = selectedRequirements;
|
|
453
|
+
const to = typeof req.payTo === "string" ? req.payTo : "0x0000000000000000000000000000000000000000";
|
|
454
|
+
result = await signPaymentV2(state, {
|
|
455
|
+
from,
|
|
456
|
+
to,
|
|
457
|
+
amount: req.amount,
|
|
458
|
+
nonce: crypto.randomUUID(),
|
|
459
|
+
expiry: Math.floor(Date.now() / 1e3) + DEFAULT_EXPIRY_SECONDS,
|
|
460
|
+
accepted: req
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
const paymentHeaders = new Headers(init?.headers);
|
|
464
|
+
if (version === 1) {
|
|
465
|
+
paymentHeaders.set(V1_HEADERS2.PAYMENT, encodePaymentV1(result.payload));
|
|
466
|
+
} else {
|
|
467
|
+
paymentHeaders.set(V2_HEADERS2.PAYMENT_SIGNATURE, encodePaymentV2(result.payload));
|
|
468
|
+
}
|
|
469
|
+
response = await fetch2(url, { ...init, headers: paymentHeaders });
|
|
470
|
+
}
|
|
471
|
+
return response;
|
|
472
|
+
};
|
|
405
473
|
return {
|
|
474
|
+
fetch: fetch2,
|
|
406
475
|
getAccount: () => state.account,
|
|
407
476
|
getNetwork: () => state.network,
|
|
408
477
|
getVersion: () => state.version,
|
|
@@ -435,34 +504,7 @@ var createX402Client = (config) => {
|
|
|
435
504
|
return headers;
|
|
436
505
|
},
|
|
437
506
|
handlePaymentRequired: async (requirements) => {
|
|
438
|
-
|
|
439
|
-
if (version === 1) {
|
|
440
|
-
const req2 = requirements;
|
|
441
|
-
if (isX402V1Requirements(req2)) {
|
|
442
|
-
const x402Req = req2;
|
|
443
|
-
return signPayment({
|
|
444
|
-
amount: x402Req.maxAmountRequired,
|
|
445
|
-
to: x402Req.payTo
|
|
446
|
-
}, state);
|
|
447
|
-
}
|
|
448
|
-
const legacyReq = req2;
|
|
449
|
-
return signPayment({
|
|
450
|
-
amount: legacyReq.amount,
|
|
451
|
-
to: legacyReq.payTo,
|
|
452
|
-
expiry: legacyReq.expiry
|
|
453
|
-
}, state);
|
|
454
|
-
}
|
|
455
|
-
const req = requirements;
|
|
456
|
-
const to = typeof req.payTo === "string" ? req.payTo : "0x0000000000000000000000000000000000000000";
|
|
457
|
-
const from = getAddress(state.account);
|
|
458
|
-
return signPaymentV2(state, {
|
|
459
|
-
from,
|
|
460
|
-
to,
|
|
461
|
-
amount: req.amount,
|
|
462
|
-
nonce: crypto.randomUUID(),
|
|
463
|
-
expiry: Math.floor(Date.now() / 1e3) + DEFAULT_EXPIRY_SECONDS,
|
|
464
|
-
accepted: req
|
|
465
|
-
});
|
|
507
|
+
return handlePaymentRequirements(requirements, state);
|
|
466
508
|
},
|
|
467
509
|
verifySettlement: (response) => {
|
|
468
510
|
if ("success" in response) {
|
|
@@ -507,8 +549,8 @@ var signPayment = async (options, state) => {
|
|
|
507
549
|
|
|
508
550
|
// src/transport.ts
|
|
509
551
|
import {
|
|
510
|
-
V1_HEADERS as
|
|
511
|
-
V2_HEADERS as
|
|
552
|
+
V1_HEADERS as V1_HEADERS3,
|
|
553
|
+
V2_HEADERS as V2_HEADERS3,
|
|
512
554
|
encodePaymentV1 as encodePaymentV12,
|
|
513
555
|
encodePaymentV2 as encodePaymentV22,
|
|
514
556
|
isX402V1Requirements as isX402V1Requirements2,
|
|
@@ -518,9 +560,9 @@ var DEFAULT_MAX_RETRIES = 3;
|
|
|
518
560
|
var createPaymentHeaders = (payload, version) => {
|
|
519
561
|
const headers = new Headers();
|
|
520
562
|
if (version === 1) {
|
|
521
|
-
headers.set(
|
|
563
|
+
headers.set(V1_HEADERS3.PAYMENT, encodePaymentV12(payload));
|
|
522
564
|
} else {
|
|
523
|
-
headers.set(
|
|
565
|
+
headers.set(V2_HEADERS3.PAYMENT_SIGNATURE, encodePaymentV22(payload));
|
|
524
566
|
}
|
|
525
567
|
return headers;
|
|
526
568
|
};
|
|
@@ -599,8 +641,8 @@ var isV2Settlement = (response) => "status" in response;
|
|
|
599
641
|
|
|
600
642
|
// src/index.ts
|
|
601
643
|
import {
|
|
602
|
-
V1_HEADERS as
|
|
603
|
-
V2_HEADERS as
|
|
644
|
+
V1_HEADERS as V1_HEADERS4,
|
|
645
|
+
V2_HEADERS as V2_HEADERS4,
|
|
604
646
|
encodePaymentV1 as encodePaymentV13,
|
|
605
647
|
decodePaymentV1,
|
|
606
648
|
encodeSettlementV1,
|
|
@@ -645,8 +687,8 @@ export {
|
|
|
645
687
|
EIP712_TYPES,
|
|
646
688
|
NETWORKS,
|
|
647
689
|
USDC_DOMAIN,
|
|
648
|
-
|
|
649
|
-
|
|
690
|
+
V1_HEADERS4 as V1_HEADERS,
|
|
691
|
+
V2_HEADERS4 as V2_HEADERS,
|
|
650
692
|
adjustVForChainId,
|
|
651
693
|
combineSignatureV22 as combineSignatureV2,
|
|
652
694
|
concatenateSignature,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@armory-sh/client-web3",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Sawyer Cutler <sawyer@dirtroad.dev>",
|
|
6
6
|
"type": "module",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"directory": "packages/client-web3"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@armory-sh/base": "^0.2.
|
|
30
|
+
"@armory-sh/base": "^0.2.13",
|
|
31
31
|
"web3": "4.16.0",
|
|
32
32
|
"web3-types": "1.10.0"
|
|
33
33
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"bun-types": "latest"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
|
-
"build": "tsup",
|
|
39
|
+
"build": "rm -rf dist && tsup",
|
|
40
40
|
"test": "bun test",
|
|
41
41
|
"example": "bun run examples/"
|
|
42
42
|
}
|