@armory-sh/client-ethers 0.2.26-alpha.23.73 → 0.2.26-alpha.23.76
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 +3 -13
- package/dist/index.js +12 -65
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PaymentRequirementsV2, Address, PaymentPayloadV2, CustomToken, NetworkId, TokenId, ArmoryPaymentResult, ValidationError } from '@armory-sh/base';
|
|
2
|
-
export { Address, BalanceOfParams, CAIP2ChainId, CAIPAssetId, EIP712_TYPES, ERC20_ABI, Extensions, NETWORKS, NetworkConfig, PayToV2, PaymentPayload, PaymentPayloadV2, PaymentRequirements, PaymentRequirementsV2, SettlementResponse, SettlementResponseV2, Signature, TransferWithAuthorizationParams, 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
1
|
import { Signer, Provider } from 'ethers';
|
|
4
2
|
export { Provider, Signer } from 'ethers';
|
|
3
|
+
import { PaymentRequirementsV2, Address, PaymentPayloadV2, X402ClientError, CustomToken, NetworkId, TokenId, ArmoryPaymentResult, ValidationError } from '@armory-sh/base';
|
|
4
|
+
export { PaymentException as PaymentError, SigningError, X402ClientError } from '@armory-sh/base';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* X402 Protocol Implementation for Ethers Client (V2 Only)
|
|
@@ -33,16 +33,6 @@ declare function parsePaymentRequired(response: Response): ParsedPaymentRequirem
|
|
|
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
35
|
|
|
36
|
-
declare class X402ClientError extends Error {
|
|
37
|
-
readonly cause?: unknown;
|
|
38
|
-
constructor(message: string, cause?: unknown);
|
|
39
|
-
}
|
|
40
|
-
declare class SigningError extends X402ClientError {
|
|
41
|
-
constructor(message: string, cause?: unknown);
|
|
42
|
-
}
|
|
43
|
-
declare class PaymentError extends X402ClientError {
|
|
44
|
-
constructor(message: string, cause?: unknown);
|
|
45
|
-
}
|
|
46
36
|
declare class SignerRequiredError extends X402ClientError {
|
|
47
37
|
constructor(message?: string);
|
|
48
38
|
}
|
|
@@ -306,4 +296,4 @@ interface ArmoryInstance {
|
|
|
306
296
|
}
|
|
307
297
|
declare const createArmory: (config: ArmoryConfig) => ArmoryInstance;
|
|
308
298
|
|
|
309
|
-
export { type ArmoryConfig, type ArmoryInstance, AuthorizationError, type ClientConfig, type HttpMethod, type NormalizedWallet, type ParsedPaymentRequirements,
|
|
299
|
+
export { type ArmoryConfig, type ArmoryInstance, AuthorizationError, type ClientConfig, type HttpMethod, type NormalizedWallet, type ParsedPaymentRequirements, type PaymentOptions, ProviderRequiredError, SignerRequiredError, type SimpleWalletInput, type X402Client, type X402ClientConfig, 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,5 +1,5 @@
|
|
|
1
|
-
import { createEIP712Domain, V2_HEADERS, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, getNetworkConfig, normalizeNetworkName, encodePaymentV2, decodeSettlementV2 } from '@armory-sh/base';
|
|
2
|
-
export {
|
|
1
|
+
import { X402ClientError, createEIP712Domain, V2_HEADERS, PaymentException, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, normalizeBase64Url, decodeBase64ToUtf8, getNetworkConfig, normalizeNetworkName, encodePaymentV2, decodeSettlementV2 } from '@armory-sh/base';
|
|
2
|
+
export { PaymentException as PaymentError, SigningError, X402ClientError } from '@armory-sh/base';
|
|
3
3
|
import { ethers } from 'ethers';
|
|
4
4
|
|
|
5
5
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
@@ -8,28 +8,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
8
8
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
9
9
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
10
10
|
});
|
|
11
|
-
|
|
12
|
-
// src/errors.ts
|
|
13
|
-
var X402ClientError = class extends Error {
|
|
14
|
-
cause;
|
|
15
|
-
constructor(message, cause) {
|
|
16
|
-
super(message);
|
|
17
|
-
this.name = "X402ClientError";
|
|
18
|
-
this.cause = cause;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
var SigningError = class extends X402ClientError {
|
|
22
|
-
constructor(message, cause) {
|
|
23
|
-
super(`Signing failed: ${message}`, cause);
|
|
24
|
-
this.name = "SigningError";
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
var PaymentError = class extends X402ClientError {
|
|
28
|
-
constructor(message, cause) {
|
|
29
|
-
super(`Payment failed: ${message}`, cause);
|
|
30
|
-
this.name = "PaymentError";
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
11
|
var SignerRequiredError = class extends X402ClientError {
|
|
34
12
|
constructor(message = "Signer is required for this operation") {
|
|
35
13
|
super(message);
|
|
@@ -116,38 +94,6 @@ async function recoverEIP3009Signer(params, signature, domain) {
|
|
|
116
94
|
return address;
|
|
117
95
|
}
|
|
118
96
|
|
|
119
|
-
// src/bytes.ts
|
|
120
|
-
new TextEncoder();
|
|
121
|
-
var textDecoder = new TextDecoder();
|
|
122
|
-
function getNodeBuffer() {
|
|
123
|
-
if ("Buffer" in globalThis) {
|
|
124
|
-
return globalThis.Buffer;
|
|
125
|
-
}
|
|
126
|
-
return void 0;
|
|
127
|
-
}
|
|
128
|
-
function fromBase64(base64) {
|
|
129
|
-
if (typeof atob === "function") {
|
|
130
|
-
const binary = atob(base64);
|
|
131
|
-
const bytes = new Uint8Array(binary.length);
|
|
132
|
-
for (let index = 0; index < binary.length; index += 1) {
|
|
133
|
-
bytes[index] = binary.charCodeAt(index);
|
|
134
|
-
}
|
|
135
|
-
return bytes;
|
|
136
|
-
}
|
|
137
|
-
const nodeBuffer = getNodeBuffer();
|
|
138
|
-
if (nodeBuffer) {
|
|
139
|
-
return Uint8Array.from(nodeBuffer.from(base64, "base64"));
|
|
140
|
-
}
|
|
141
|
-
throw new Error("No base64 decoder available in this runtime");
|
|
142
|
-
}
|
|
143
|
-
function decodeBase64ToUtf8(value) {
|
|
144
|
-
const bytes = fromBase64(value);
|
|
145
|
-
return textDecoder.decode(bytes);
|
|
146
|
-
}
|
|
147
|
-
function normalizeBase64Url(value) {
|
|
148
|
-
return value.replace(/-/g, "+").replace(/_/g, "/").padEnd(Math.ceil(value.length / 4) * 4, "=");
|
|
149
|
-
}
|
|
150
|
-
|
|
151
97
|
// src/protocol.ts
|
|
152
98
|
function detectX402Version(_response) {
|
|
153
99
|
return 2;
|
|
@@ -166,23 +112,23 @@ function parseJsonOrBase64(value) {
|
|
|
166
112
|
function parsePaymentRequired(response) {
|
|
167
113
|
const v2Header = response.headers.get(V2_HEADERS.PAYMENT_REQUIRED);
|
|
168
114
|
if (!v2Header) {
|
|
169
|
-
throw new
|
|
115
|
+
throw new PaymentException("No PAYMENT-REQUIRED header found in V2 response");
|
|
170
116
|
}
|
|
171
117
|
try {
|
|
172
118
|
const parsed = parseJsonOrBase64(v2Header);
|
|
173
119
|
if (!isX402V2PaymentRequired(parsed)) {
|
|
174
|
-
throw new
|
|
120
|
+
throw new PaymentException("Invalid x402 V2 payment required format");
|
|
175
121
|
}
|
|
176
122
|
if (!parsed.accepts || parsed.accepts.length === 0) {
|
|
177
|
-
throw new
|
|
123
|
+
throw new PaymentException("No payment requirements found in accepts array");
|
|
178
124
|
}
|
|
179
125
|
return {
|
|
180
126
|
version: 2,
|
|
181
127
|
requirements: parsed.accepts[0]
|
|
182
128
|
};
|
|
183
129
|
} catch (error) {
|
|
184
|
-
if (error instanceof
|
|
185
|
-
throw new
|
|
130
|
+
if (error instanceof PaymentException) throw error;
|
|
131
|
+
throw new PaymentException(`Failed to parse V2 PAYMENT-REQUIRED header: ${error}`);
|
|
186
132
|
}
|
|
187
133
|
}
|
|
188
134
|
function extractChainId(network) {
|
|
@@ -193,7 +139,7 @@ function extractChainId(network) {
|
|
|
193
139
|
if (net) {
|
|
194
140
|
return net.chainId;
|
|
195
141
|
}
|
|
196
|
-
throw new
|
|
142
|
+
throw new PaymentException(`Unsupported network: ${network}`);
|
|
197
143
|
}
|
|
198
144
|
function createNonce() {
|
|
199
145
|
const now = Math.floor(Date.now() / 1e3);
|
|
@@ -202,13 +148,14 @@ function createNonce() {
|
|
|
202
148
|
async function createX402V2Payment(signer, requirements, fromAddress, nonce, validBefore, domainName, domainVersion) {
|
|
203
149
|
const contractAddress = requirements.asset;
|
|
204
150
|
const chainId = extractChainId(requirements.network);
|
|
151
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
205
152
|
const domain = createEIP712Domain(chainId, contractAddress);
|
|
206
153
|
const customDomain = domainName || domainVersion ? { ...domain, name: domainName ?? domain.name, version: domainVersion ?? domain.version } : domain;
|
|
207
154
|
const authorization = {
|
|
208
155
|
from: fromAddress,
|
|
209
156
|
to: requirements.payTo,
|
|
210
157
|
value: requirements.amount,
|
|
211
|
-
validAfter:
|
|
158
|
+
validAfter: (now - 600).toString(),
|
|
212
159
|
validBefore: validBefore.toString(),
|
|
213
160
|
nonce
|
|
214
161
|
};
|
|
@@ -300,7 +247,7 @@ var handlePaymentRequired = async (state, response) => {
|
|
|
300
247
|
parsed,
|
|
301
248
|
from,
|
|
302
249
|
void 0,
|
|
303
|
-
|
|
250
|
+
Math.floor(Date.now() / 1e3) + parsed.requirements.maxTimeoutSeconds,
|
|
304
251
|
requirementDomain.domainName,
|
|
305
252
|
requirementDomain.domainVersion
|
|
306
253
|
);
|
|
@@ -587,4 +534,4 @@ var createArmory = (config) => {
|
|
|
587
534
|
};
|
|
588
535
|
};
|
|
589
536
|
|
|
590
|
-
export { AuthorizationError,
|
|
537
|
+
export { AuthorizationError, ProviderRequiredError, SignerRequiredError, 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.26-alpha.23.
|
|
3
|
+
"version": "0.2.26-alpha.23.76",
|
|
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.27-alpha.23.
|
|
50
|
+
"@armory-sh/base": "0.2.27-alpha.23.76",
|
|
51
51
|
"ethers": "6.16.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|