@armory-sh/client-web3 0.2.17 → 0.2.18-alpha.3.20
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 +19 -70
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { Web3 } from 'web3';
|
|
2
|
+
import { encodePaymentV2, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, V2_HEADERS, getNetworkConfig, getNetworkByChainId, combineSignatureV2, networkToCaip2, isX402V2PaymentRequired } from '@armory-sh/base';
|
|
3
|
+
|
|
1
4
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
5
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
6
|
}) : x)(function(x) {
|
|
@@ -5,17 +8,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
5
8
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
9
|
});
|
|
7
10
|
|
|
8
|
-
// src/client.ts
|
|
9
|
-
import { Web3 } from "web3";
|
|
10
|
-
import {
|
|
11
|
-
getNetworkConfig,
|
|
12
|
-
getNetworkByChainId,
|
|
13
|
-
encodePaymentV2,
|
|
14
|
-
networkToCaip2,
|
|
15
|
-
combineSignatureV2,
|
|
16
|
-
V2_HEADERS as V2_HEADERS2
|
|
17
|
-
} from "@armory-sh/base";
|
|
18
|
-
|
|
19
11
|
// src/eip3009.ts
|
|
20
12
|
var USDC_DOMAIN = {
|
|
21
13
|
NAME: "USD Coin",
|
|
@@ -111,12 +103,6 @@ var signWithPrivateKey = async (_privateKey, _domain, _message) => {
|
|
|
111
103
|
"Direct private key signing not implemented. Use wallet provider's signTypedData method instead."
|
|
112
104
|
);
|
|
113
105
|
};
|
|
114
|
-
|
|
115
|
-
// src/protocol.ts
|
|
116
|
-
import {
|
|
117
|
-
V2_HEADERS,
|
|
118
|
-
isX402V2PaymentRequired
|
|
119
|
-
} from "@armory-sh/base";
|
|
120
106
|
var detectX402Version = (_response, _fallbackVersion = 2) => {
|
|
121
107
|
return 2;
|
|
122
108
|
};
|
|
@@ -130,7 +116,8 @@ var parsePaymentRequired = async (response, _version) => {
|
|
|
130
116
|
try {
|
|
131
117
|
parsed = JSON.parse(v2Header);
|
|
132
118
|
} catch {
|
|
133
|
-
const
|
|
119
|
+
const normalized = v2Header.replace(/-/g, "+").replace(/_/g, "/").padEnd(Math.ceil(v2Header.length / 4) * 4, "=");
|
|
120
|
+
const decoded = Buffer.from(normalized, "base64").toString("utf-8");
|
|
134
121
|
parsed = JSON.parse(decoded);
|
|
135
122
|
}
|
|
136
123
|
if (!isX402V2PaymentRequired(parsed)) {
|
|
@@ -256,7 +243,7 @@ var signPaymentV2 = async (state, network, params) => {
|
|
|
256
243
|
const defaultAccepted = accepted ?? {
|
|
257
244
|
scheme: "exact",
|
|
258
245
|
network: networkToCaip2(network.name),
|
|
259
|
-
amount,
|
|
246
|
+
maxAmountRequired: amount,
|
|
260
247
|
asset: network.usdcAddress,
|
|
261
248
|
payTo: to,
|
|
262
249
|
maxTimeoutSeconds: expiry - Math.floor(Date.now() / 1e3)
|
|
@@ -299,8 +286,7 @@ var createX402Client = (config) => {
|
|
|
299
286
|
const fetch2 = async (url, init) => {
|
|
300
287
|
let response = await fetch2(url, init);
|
|
301
288
|
if (response.status === 402) {
|
|
302
|
-
const
|
|
303
|
-
const parsed = await parsePaymentRequired(response, version);
|
|
289
|
+
const parsed = await parsePaymentRequired(response);
|
|
304
290
|
const selectedRequirements = parsed.requirements[0];
|
|
305
291
|
if (!selectedRequirements) {
|
|
306
292
|
throw new Error("No supported payment scheme found in requirements");
|
|
@@ -312,13 +298,13 @@ var createX402Client = (config) => {
|
|
|
312
298
|
const result = await signPaymentV2(state, network, {
|
|
313
299
|
from,
|
|
314
300
|
to,
|
|
315
|
-
amount: req.
|
|
301
|
+
amount: req.maxAmountRequired,
|
|
316
302
|
nonce: crypto.randomUUID(),
|
|
317
303
|
expiry: Math.floor(Date.now() / 1e3) + DEFAULT_EXPIRY_SECONDS,
|
|
318
304
|
accepted: req
|
|
319
305
|
});
|
|
320
306
|
const paymentHeaders = new Headers(init?.headers);
|
|
321
|
-
paymentHeaders.set(
|
|
307
|
+
paymentHeaders.set(V2_HEADERS.PAYMENT_SIGNATURE, encodePaymentV2(result.payload));
|
|
322
308
|
response = await fetch2(url, { ...init, headers: paymentHeaders });
|
|
323
309
|
}
|
|
324
310
|
return response;
|
|
@@ -360,7 +346,7 @@ var createX402Client = (config) => {
|
|
|
360
346
|
return signPaymentV2(state, network, {
|
|
361
347
|
from,
|
|
362
348
|
to,
|
|
363
|
-
amount: requirements.
|
|
349
|
+
amount: requirements.maxAmountRequired,
|
|
364
350
|
nonce: crypto.randomUUID(),
|
|
365
351
|
expiry: Math.floor(Date.now() / 1e3) + DEFAULT_EXPIRY_SECONDS,
|
|
366
352
|
accepted: requirements
|
|
@@ -371,16 +357,10 @@ var createX402Client = (config) => {
|
|
|
371
357
|
}
|
|
372
358
|
};
|
|
373
359
|
};
|
|
374
|
-
|
|
375
|
-
// src/transport.ts
|
|
376
|
-
import {
|
|
377
|
-
V2_HEADERS as V2_HEADERS3,
|
|
378
|
-
encodePaymentV2 as encodePaymentV22
|
|
379
|
-
} from "@armory-sh/base";
|
|
380
360
|
var DEFAULT_MAX_RETRIES = 3;
|
|
381
361
|
var createPaymentHeaders = (payload, _version) => {
|
|
382
362
|
const headers = new Headers();
|
|
383
|
-
headers.set(
|
|
363
|
+
headers.set(V2_HEADERS.PAYMENT_SIGNATURE, encodePaymentV2(payload));
|
|
384
364
|
return headers;
|
|
385
365
|
};
|
|
386
366
|
var isPaymentRelatedError = (error) => error.message.includes("402") || error.message.includes("payment") || error.message.includes("signature") || error.message.includes("Payment");
|
|
@@ -390,15 +370,15 @@ var backoff = (attempt) => {
|
|
|
390
370
|
return new Promise((resolve) => setTimeout(resolve, baseDelay + jitter));
|
|
391
371
|
};
|
|
392
372
|
var handlePaymentRequired = async (response, client) => {
|
|
393
|
-
|
|
394
|
-
const parsed = await parsePaymentRequired(response
|
|
373
|
+
detectX402Version(response, client.getVersion());
|
|
374
|
+
const parsed = await parsePaymentRequired(response);
|
|
395
375
|
const selectedRequirements = parsed.requirements[0];
|
|
396
376
|
if (!selectedRequirements) {
|
|
397
377
|
throw new Error("No supported payment scheme found in requirements");
|
|
398
378
|
}
|
|
399
379
|
const req = selectedRequirements;
|
|
400
380
|
const result = await client.handlePaymentRequired(req);
|
|
401
|
-
return createPaymentHeaders(result.payload
|
|
381
|
+
return createPaymentHeaders(result.payload);
|
|
402
382
|
};
|
|
403
383
|
var mergePaymentHeaders = (init = {}, paymentHeaders) => {
|
|
404
384
|
const existingHeaders = new Headers(init.headers);
|
|
@@ -440,14 +420,6 @@ var createX402Transport = (options) => {
|
|
|
440
420
|
}
|
|
441
421
|
};
|
|
442
422
|
};
|
|
443
|
-
|
|
444
|
-
// src/payment-api.ts
|
|
445
|
-
import {
|
|
446
|
-
resolveNetwork,
|
|
447
|
-
resolveToken,
|
|
448
|
-
validatePaymentConfig,
|
|
449
|
-
isValidationError
|
|
450
|
-
} from "@armory-sh/base";
|
|
451
423
|
var normalizeWallet = (wallet) => {
|
|
452
424
|
if (typeof wallet === "object" && wallet !== null && "account" in wallet) {
|
|
453
425
|
return wallet.account;
|
|
@@ -500,7 +472,7 @@ var armoryPay = async (wallet, url, network, token, options) => {
|
|
|
500
472
|
};
|
|
501
473
|
}
|
|
502
474
|
const data = await response.json();
|
|
503
|
-
const txHash = response.headers.get("
|
|
475
|
+
const txHash = response.headers.get("PAYMENT-RESPONSE");
|
|
504
476
|
return {
|
|
505
477
|
success: true,
|
|
506
478
|
data,
|
|
@@ -585,7 +557,7 @@ var normalizeArmoryConfig = (config) => ({
|
|
|
585
557
|
debug: config.debug ?? false
|
|
586
558
|
});
|
|
587
559
|
var createArmory = (config) => {
|
|
588
|
-
|
|
560
|
+
normalizeArmoryConfig(config);
|
|
589
561
|
const makeRequest = async (url, method, body) => {
|
|
590
562
|
try {
|
|
591
563
|
const headers = new Headers();
|
|
@@ -603,7 +575,7 @@ var createArmory = (config) => {
|
|
|
603
575
|
};
|
|
604
576
|
}
|
|
605
577
|
const data = await response.json();
|
|
606
|
-
const txHash = response.headers.get("
|
|
578
|
+
const txHash = response.headers.get("PAYMENT-RESPONSE");
|
|
607
579
|
return {
|
|
608
580
|
success: true,
|
|
609
581
|
data,
|
|
@@ -628,28 +600,5 @@ var createArmory = (config) => {
|
|
|
628
600
|
call: (url) => makeRequest(url, "GET")
|
|
629
601
|
};
|
|
630
602
|
};
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
armoryDelete,
|
|
634
|
-
armoryGet,
|
|
635
|
-
armoryPatch,
|
|
636
|
-
armoryPay,
|
|
637
|
-
armoryPost,
|
|
638
|
-
armoryPut,
|
|
639
|
-
concatenateSignature,
|
|
640
|
-
createArmory,
|
|
641
|
-
createEIP712Domain,
|
|
642
|
-
createTransferWithAuthorization,
|
|
643
|
-
createX402Client,
|
|
644
|
-
createX402Transport,
|
|
645
|
-
getNetworks,
|
|
646
|
-
getTokens,
|
|
647
|
-
getWalletAddress,
|
|
648
|
-
normalizeWallet,
|
|
649
|
-
parseSignature,
|
|
650
|
-
signTypedData,
|
|
651
|
-
signWithPrivateKey,
|
|
652
|
-
validateNetwork,
|
|
653
|
-
validateToken,
|
|
654
|
-
validateTransferWithAuthorization
|
|
655
|
-
};
|
|
603
|
+
|
|
604
|
+
export { adjustVForChainId, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, concatenateSignature, createArmory, createEIP712Domain, createTransferWithAuthorization, createX402Client, createX402Transport, getNetworks, getTokens, getWalletAddress, normalizeWallet, parseSignature, signTypedData, signWithPrivateKey, validateNetwork, validateToken, validateTransferWithAuthorization };
|
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.18-alpha.3.20",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Sawyer Cutler <sawyer@dirtroad.dev>",
|
|
6
6
|
"type": "module",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
},
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "git",
|
|
26
|
-
"url": "git+https://github.com/
|
|
26
|
+
"url": "git+https://github.com/TheGreatAxios/armory.git",
|
|
27
27
|
"directory": "packages/client-web3"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@armory-sh/base": "^0.2.
|
|
30
|
+
"@armory-sh/base": "^0.2.22",
|
|
31
31
|
"web3": "4.16.0",
|
|
32
32
|
"web3-types": "1.10.0"
|
|
33
33
|
},
|