@armory-sh/client-ethers 0.2.25-beta.20260216.68 → 0.2.26-alpha.23.74
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 -5
- package/dist/index.js +27 -31
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -32,10 +32,6 @@ declare function parsePaymentRequired(response: Response): ParsedPaymentRequirem
|
|
|
32
32
|
* Create x402 payment payload (V2-only wrapper)
|
|
33
33
|
*/
|
|
34
34
|
declare function createX402Payment(signer: Signer, parsed: ParsedPaymentRequirements, fromAddress: Address, nonce?: `0x${string}`, validBefore?: number, domainName?: string, domainVersion?: string): Promise<PaymentPayloadV2>;
|
|
35
|
-
/**
|
|
36
|
-
* Encode x402 payment payload to Base64 for transport
|
|
37
|
-
*/
|
|
38
|
-
declare function encodeX402Payment(payload: PaymentPayloadV2): string;
|
|
39
35
|
|
|
40
36
|
declare class X402ClientError extends Error {
|
|
41
37
|
readonly cause?: unknown;
|
|
@@ -310,4 +306,4 @@ interface ArmoryInstance {
|
|
|
310
306
|
}
|
|
311
307
|
declare const createArmory: (config: ArmoryConfig) => ArmoryInstance;
|
|
312
308
|
|
|
313
|
-
export { type ArmoryConfig, type ArmoryInstance, AuthorizationError, type ClientConfig, type HttpMethod, type NormalizedWallet, type ParsedPaymentRequirements, PaymentError, type PaymentOptions, ProviderRequiredError, SignerRequiredError, SigningError, type SimpleWalletInput, type X402Client, type X402ClientConfig, X402ClientError, type X402RequestInit, type X402Transport, type X402TransportConfig, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, createArmory, createX402Client, createX402Payment, createX402Transport, detectX402Version,
|
|
309
|
+
export { type ArmoryConfig, type ArmoryInstance, AuthorizationError, type ClientConfig, type HttpMethod, type NormalizedWallet, type ParsedPaymentRequirements, PaymentError, type PaymentOptions, ProviderRequiredError, SignerRequiredError, SigningError, type SimpleWalletInput, type X402Client, type X402ClientConfig, X402ClientError, type X402RequestInit, type X402Transport, type X402TransportConfig, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, createArmory, createX402Client, createX402Payment, createX402Transport, detectX402Version, getNetworks, getPaymentHeaderName, getTokens, getWalletAddress, normalizeWallet, parsePaymentRequired, recoverEIP3009Signer, signEIP3009, signEIP3009WithDomain, signPayment, validateNetwork, validateToken };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createEIP712Domain, V2_HEADERS, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, getNetworkConfig, normalizeNetworkName, decodeSettlementV2 } from '@armory-sh/base';
|
|
1
|
+
import { createEIP712Domain, V2_HEADERS, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, getNetworkConfig, normalizeNetworkName, encodePaymentV2, decodeSettlementV2 } from '@armory-sh/base';
|
|
2
2
|
export { EIP712_TYPES, ERC20_ABI, NETWORKS, V2_HEADERS, createEIP712Domain, createTransferWithAuthorization, decodePayment, decodePaymentV2, decodeSettlementV2, detectPaymentVersion, encodePaymentV2, encodeSettlementV2, getMainnets, getNetworkByChainId, getNetworkConfig, getTestnets, getTxHash, isCAIP2ChainId, isCAIPAssetId, isPaymentV2, isSettlementSuccessful, isSettlementV2, isX402V2PaymentRequired, safeBase64Decode, validateTransferWithAuthorization } from '@armory-sh/base';
|
|
3
3
|
import { ethers } from 'ethers';
|
|
4
4
|
|
|
@@ -117,7 +117,7 @@ async function recoverEIP3009Signer(params, signature, domain) {
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
// src/bytes.ts
|
|
120
|
-
|
|
120
|
+
new TextEncoder();
|
|
121
121
|
var textDecoder = new TextDecoder();
|
|
122
122
|
function getNodeBuffer() {
|
|
123
123
|
if ("Buffer" in globalThis) {
|
|
@@ -125,20 +125,6 @@ function getNodeBuffer() {
|
|
|
125
125
|
}
|
|
126
126
|
return void 0;
|
|
127
127
|
}
|
|
128
|
-
function toBase64(bytes) {
|
|
129
|
-
if (typeof btoa === "function") {
|
|
130
|
-
let binary = "";
|
|
131
|
-
for (let index = 0; index < bytes.length; index += 1) {
|
|
132
|
-
binary += String.fromCharCode(bytes[index]);
|
|
133
|
-
}
|
|
134
|
-
return btoa(binary);
|
|
135
|
-
}
|
|
136
|
-
const nodeBuffer = getNodeBuffer();
|
|
137
|
-
if (nodeBuffer) {
|
|
138
|
-
return nodeBuffer.from(bytes).toString("base64");
|
|
139
|
-
}
|
|
140
|
-
throw new Error("No base64 encoder available in this runtime");
|
|
141
|
-
}
|
|
142
128
|
function fromBase64(base64) {
|
|
143
129
|
if (typeof atob === "function") {
|
|
144
130
|
const binary = atob(base64);
|
|
@@ -154,10 +140,6 @@ function fromBase64(base64) {
|
|
|
154
140
|
}
|
|
155
141
|
throw new Error("No base64 decoder available in this runtime");
|
|
156
142
|
}
|
|
157
|
-
function encodeUtf8ToBase64(value) {
|
|
158
|
-
const bytes = textEncoder.encode(value);
|
|
159
|
-
return toBase64(bytes);
|
|
160
|
-
}
|
|
161
143
|
function decodeBase64ToUtf8(value) {
|
|
162
144
|
const bytes = fromBase64(value);
|
|
163
145
|
return textDecoder.decode(bytes);
|
|
@@ -203,9 +185,6 @@ function parsePaymentRequired(response) {
|
|
|
203
185
|
throw new PaymentError(`Failed to parse V2 PAYMENT-REQUIRED header: ${error}`);
|
|
204
186
|
}
|
|
205
187
|
}
|
|
206
|
-
function toAtomicUnits(amount) {
|
|
207
|
-
return Math.floor(parseFloat(amount) * 1e6).toString();
|
|
208
|
-
}
|
|
209
188
|
function extractChainId(network) {
|
|
210
189
|
if (network.startsWith("eip155:")) {
|
|
211
190
|
return parseInt(network.split(":")[1], 10);
|
|
@@ -223,13 +202,14 @@ function createNonce() {
|
|
|
223
202
|
async function createX402V2Payment(signer, requirements, fromAddress, nonce, validBefore, domainName, domainVersion) {
|
|
224
203
|
const contractAddress = requirements.asset;
|
|
225
204
|
const chainId = extractChainId(requirements.network);
|
|
205
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
226
206
|
const domain = createEIP712Domain(chainId, contractAddress);
|
|
227
207
|
const customDomain = domainName || domainVersion ? { ...domain, name: domainName ?? domain.name, version: domainVersion ?? domain.version } : domain;
|
|
228
208
|
const authorization = {
|
|
229
209
|
from: fromAddress,
|
|
230
210
|
to: requirements.payTo,
|
|
231
|
-
value:
|
|
232
|
-
validAfter:
|
|
211
|
+
value: requirements.amount,
|
|
212
|
+
validAfter: (now - 600).toString(),
|
|
233
213
|
validBefore: validBefore.toString(),
|
|
234
214
|
nonce
|
|
235
215
|
};
|
|
@@ -266,9 +246,6 @@ async function createX402Payment(signer, parsed, fromAddress, nonce, validBefore
|
|
|
266
246
|
domainVersion
|
|
267
247
|
);
|
|
268
248
|
}
|
|
269
|
-
function encodeX402Payment(payload) {
|
|
270
|
-
return encodeUtf8ToBase64(JSON.stringify(payload));
|
|
271
|
-
}
|
|
272
249
|
var defaultConfig = {
|
|
273
250
|
baseURL: "",
|
|
274
251
|
headers: {},
|
|
@@ -301,6 +278,16 @@ var fetchWithTimeout = async (url, init, timeout) => {
|
|
|
301
278
|
}
|
|
302
279
|
};
|
|
303
280
|
var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
281
|
+
var getRequirementDomainOverrides = (parsed) => {
|
|
282
|
+
const requirement = parsed.requirements;
|
|
283
|
+
const extra = requirement.extra;
|
|
284
|
+
const extraName = extra && typeof extra === "object" && typeof extra["name"] === "string" ? extra["name"] : void 0;
|
|
285
|
+
const extraVersion = extra && typeof extra === "object" && typeof extra["version"] === "string" ? extra["version"] : void 0;
|
|
286
|
+
return {
|
|
287
|
+
domainName: requirement.name ?? extraName,
|
|
288
|
+
domainVersion: requirement.version ?? extraVersion
|
|
289
|
+
};
|
|
290
|
+
};
|
|
304
291
|
var handlePaymentRequired = async (state, response) => {
|
|
305
292
|
if (!state.signer) {
|
|
306
293
|
throw new SignerRequiredError("Cannot handle payment: no signer configured.");
|
|
@@ -308,8 +295,17 @@ var handlePaymentRequired = async (state, response) => {
|
|
|
308
295
|
try {
|
|
309
296
|
const parsed = parsePaymentRequired(response);
|
|
310
297
|
const from = await state.signer.getAddress();
|
|
311
|
-
const
|
|
312
|
-
const
|
|
298
|
+
const requirementDomain = getRequirementDomainOverrides(parsed);
|
|
299
|
+
const payload = await createX402Payment(
|
|
300
|
+
state.signer,
|
|
301
|
+
parsed,
|
|
302
|
+
from,
|
|
303
|
+
void 0,
|
|
304
|
+
Math.floor(Date.now() / 1e3) + parsed.requirements.maxTimeoutSeconds,
|
|
305
|
+
requirementDomain.domainName,
|
|
306
|
+
requirementDomain.domainVersion
|
|
307
|
+
);
|
|
308
|
+
const encoded = encodePaymentV2(payload);
|
|
313
309
|
const headerName = getPaymentHeaderName(parsed.version);
|
|
314
310
|
const paymentResponse = await fetchWithTimeout(
|
|
315
311
|
response.url,
|
|
@@ -592,4 +588,4 @@ var createArmory = (config) => {
|
|
|
592
588
|
};
|
|
593
589
|
};
|
|
594
590
|
|
|
595
|
-
export { AuthorizationError, PaymentError, ProviderRequiredError, SignerRequiredError, SigningError, X402ClientError, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, createArmory, createX402Client, createX402Payment, createX402Transport, detectX402Version,
|
|
591
|
+
export { AuthorizationError, PaymentError, ProviderRequiredError, SignerRequiredError, SigningError, X402ClientError, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, createArmory, createX402Client, createX402Payment, createX402Transport, detectX402Version, getNetworks, getPaymentHeaderName, getTokens, getWalletAddress, normalizeWallet, parsePaymentRequired, recoverEIP3009Signer, signEIP3009, signEIP3009WithDomain, signPayment, validateNetwork, validateToken };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@armory-sh/client-ethers",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.26-alpha.23.74",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Sawyer Cutler <sawyer@dirtroad.dev>",
|
|
6
6
|
"keywords": [
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"directory": "packages/client-ethers"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@armory-sh/base": "0.2.
|
|
50
|
+
"@armory-sh/base": "0.2.27-alpha.23.74",
|
|
51
51
|
"ethers": "6.16.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|