@armory-sh/client-ethers 0.2.26-alpha.23.73 → 0.2.27
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 +5 -1
- package/dist/index.js +30 -25
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -32,6 +32,10 @@ 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;
|
|
35
39
|
|
|
36
40
|
declare class X402ClientError extends Error {
|
|
37
41
|
readonly cause?: unknown;
|
|
@@ -306,4 +310,4 @@ interface ArmoryInstance {
|
|
|
306
310
|
}
|
|
307
311
|
declare const createArmory: (config: ArmoryConfig) => ArmoryInstance;
|
|
308
312
|
|
|
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 };
|
|
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, encodeX402Payment, 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,
|
|
1
|
+
import { createEIP712Domain, V2_HEADERS, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, getNetworkConfig, normalizeNetworkName, 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
|
-
new TextEncoder();
|
|
120
|
+
var textEncoder = new TextEncoder();
|
|
121
121
|
var textDecoder = new TextDecoder();
|
|
122
122
|
function getNodeBuffer() {
|
|
123
123
|
if ("Buffer" in globalThis) {
|
|
@@ -125,6 +125,20 @@ 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
|
+
}
|
|
128
142
|
function fromBase64(base64) {
|
|
129
143
|
if (typeof atob === "function") {
|
|
130
144
|
const binary = atob(base64);
|
|
@@ -140,6 +154,10 @@ function fromBase64(base64) {
|
|
|
140
154
|
}
|
|
141
155
|
throw new Error("No base64 decoder available in this runtime");
|
|
142
156
|
}
|
|
157
|
+
function encodeUtf8ToBase64(value) {
|
|
158
|
+
const bytes = textEncoder.encode(value);
|
|
159
|
+
return toBase64(bytes);
|
|
160
|
+
}
|
|
143
161
|
function decodeBase64ToUtf8(value) {
|
|
144
162
|
const bytes = fromBase64(value);
|
|
145
163
|
return textDecoder.decode(bytes);
|
|
@@ -185,6 +203,9 @@ function parsePaymentRequired(response) {
|
|
|
185
203
|
throw new PaymentError(`Failed to parse V2 PAYMENT-REQUIRED header: ${error}`);
|
|
186
204
|
}
|
|
187
205
|
}
|
|
206
|
+
function toAtomicUnits(amount) {
|
|
207
|
+
return Math.floor(parseFloat(amount) * 1e6).toString();
|
|
208
|
+
}
|
|
188
209
|
function extractChainId(network) {
|
|
189
210
|
if (network.startsWith("eip155:")) {
|
|
190
211
|
return parseInt(network.split(":")[1], 10);
|
|
@@ -207,7 +228,7 @@ async function createX402V2Payment(signer, requirements, fromAddress, nonce, val
|
|
|
207
228
|
const authorization = {
|
|
208
229
|
from: fromAddress,
|
|
209
230
|
to: requirements.payTo,
|
|
210
|
-
value: requirements.amount,
|
|
231
|
+
value: toAtomicUnits(requirements.amount),
|
|
211
232
|
validAfter: "0",
|
|
212
233
|
validBefore: validBefore.toString(),
|
|
213
234
|
nonce
|
|
@@ -245,6 +266,9 @@ async function createX402Payment(signer, parsed, fromAddress, nonce, validBefore
|
|
|
245
266
|
domainVersion
|
|
246
267
|
);
|
|
247
268
|
}
|
|
269
|
+
function encodeX402Payment(payload) {
|
|
270
|
+
return encodeUtf8ToBase64(JSON.stringify(payload));
|
|
271
|
+
}
|
|
248
272
|
var defaultConfig = {
|
|
249
273
|
baseURL: "",
|
|
250
274
|
headers: {},
|
|
@@ -277,16 +301,6 @@ var fetchWithTimeout = async (url, init, timeout) => {
|
|
|
277
301
|
}
|
|
278
302
|
};
|
|
279
303
|
var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
280
|
-
var getRequirementDomainOverrides = (parsed) => {
|
|
281
|
-
const requirement = parsed.requirements;
|
|
282
|
-
const extra = requirement.extra;
|
|
283
|
-
const extraName = extra && typeof extra === "object" && typeof extra["name"] === "string" ? extra["name"] : void 0;
|
|
284
|
-
const extraVersion = extra && typeof extra === "object" && typeof extra["version"] === "string" ? extra["version"] : void 0;
|
|
285
|
-
return {
|
|
286
|
-
domainName: requirement.name ?? extraName,
|
|
287
|
-
domainVersion: requirement.version ?? extraVersion
|
|
288
|
-
};
|
|
289
|
-
};
|
|
290
304
|
var handlePaymentRequired = async (state, response) => {
|
|
291
305
|
if (!state.signer) {
|
|
292
306
|
throw new SignerRequiredError("Cannot handle payment: no signer configured.");
|
|
@@ -294,17 +308,8 @@ var handlePaymentRequired = async (state, response) => {
|
|
|
294
308
|
try {
|
|
295
309
|
const parsed = parsePaymentRequired(response);
|
|
296
310
|
const from = await state.signer.getAddress();
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
state.signer,
|
|
300
|
-
parsed,
|
|
301
|
-
from,
|
|
302
|
-
void 0,
|
|
303
|
-
void 0,
|
|
304
|
-
requirementDomain.domainName,
|
|
305
|
-
requirementDomain.domainVersion
|
|
306
|
-
);
|
|
307
|
-
const encoded = encodePaymentV2(payload);
|
|
311
|
+
const payload = await createX402Payment(state.signer, parsed, from);
|
|
312
|
+
const encoded = encodeX402Payment(payload);
|
|
308
313
|
const headerName = getPaymentHeaderName(parsed.version);
|
|
309
314
|
const paymentResponse = await fetchWithTimeout(
|
|
310
315
|
response.url,
|
|
@@ -587,4 +592,4 @@ var createArmory = (config) => {
|
|
|
587
592
|
};
|
|
588
593
|
};
|
|
589
594
|
|
|
590
|
-
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 };
|
|
595
|
+
export { AuthorizationError, PaymentError, ProviderRequiredError, SignerRequiredError, SigningError, X402ClientError, armoryDelete, armoryGet, armoryPatch, armoryPay, armoryPost, armoryPut, createArmory, createX402Client, createX402Payment, createX402Transport, detectX402Version, encodeX402Payment, 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.27",
|
|
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.28",
|
|
51
51
|
"ethers": "6.16.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|