@armory-sh/client-ethers 0.2.18 → 0.2.20-alpha.3.11
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 +114 -2
- package/dist/index.js +192 -94
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PaymentRequirementsV2, Address, PaymentPayloadV2, CustomToken } from '@armory-sh/base';
|
|
1
|
+
import { PaymentRequirementsV2, Address, PaymentPayloadV2, CustomToken, NetworkId, TokenId, ArmoryPaymentResult, ValidationError } from '@armory-sh/base';
|
|
2
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
3
|
import { Signer, Provider } from 'ethers';
|
|
4
4
|
export { Provider, Signer } from 'ethers';
|
|
@@ -198,4 +198,116 @@ declare function createX402Client(config: X402ClientConfig & SignerClientConfig
|
|
|
198
198
|
}): X402Client;
|
|
199
199
|
declare function createX402Client(config: X402ClientConfig & ProviderClientConfig): X402Client;
|
|
200
200
|
|
|
201
|
-
|
|
201
|
+
/**
|
|
202
|
+
* Simple one-line payment API for Armory (Ethers)
|
|
203
|
+
* Focus on DX/UX - "everything just magically works"
|
|
204
|
+
*/
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Simple wallet input - accepts wallet directly or wrapped for backward compatibility
|
|
208
|
+
*/
|
|
209
|
+
type SimpleWalletInput = Signer | {
|
|
210
|
+
signer: Signer;
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Normalized wallet (internal use)
|
|
214
|
+
*/
|
|
215
|
+
type NormalizedWallet = Signer;
|
|
216
|
+
/**
|
|
217
|
+
* Normalize wallet input to internal format
|
|
218
|
+
*/
|
|
219
|
+
declare const normalizeWallet: (wallet: SimpleWalletInput) => NormalizedWallet;
|
|
220
|
+
/**
|
|
221
|
+
* Make a payment-protected API request with one line of code
|
|
222
|
+
*/
|
|
223
|
+
declare const armoryPay: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, options?: {
|
|
224
|
+
/** Request method (default: GET) */
|
|
225
|
+
method?: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
226
|
+
/** Request body (for POST/PUT/PATCH) */
|
|
227
|
+
body?: unknown;
|
|
228
|
+
/** Request headers */
|
|
229
|
+
headers?: Record<string, string>;
|
|
230
|
+
/** Protocol version (V2 only) */
|
|
231
|
+
version?: 2;
|
|
232
|
+
/** Payment amount in token units (default: from 402 header) */
|
|
233
|
+
amount?: string;
|
|
234
|
+
/** Enable debug logging */
|
|
235
|
+
debug?: boolean;
|
|
236
|
+
}) => Promise<ArmoryPaymentResult<T>>;
|
|
237
|
+
/**
|
|
238
|
+
* Make a GET request with payment
|
|
239
|
+
*/
|
|
240
|
+
declare const armoryGet: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, options?: Omit<Parameters<typeof armoryPay>[4], "method">) => Promise<ArmoryPaymentResult<T>>;
|
|
241
|
+
/**
|
|
242
|
+
* Make a POST request with payment
|
|
243
|
+
*/
|
|
244
|
+
declare const armoryPost: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, body?: unknown, options?: Omit<Parameters<typeof armoryPay>[4], "method" | "body">) => Promise<ArmoryPaymentResult<T>>;
|
|
245
|
+
/**
|
|
246
|
+
* Make a PUT request with payment
|
|
247
|
+
*/
|
|
248
|
+
declare const armoryPut: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, body?: unknown, options?: Omit<Parameters<typeof armoryPay>[4], "method" | "body">) => Promise<ArmoryPaymentResult<T>>;
|
|
249
|
+
/**
|
|
250
|
+
* Make a DELETE request with payment
|
|
251
|
+
*/
|
|
252
|
+
declare const armoryDelete: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, options?: Omit<Parameters<typeof armoryPay>[4], "method">) => Promise<ArmoryPaymentResult<T>>;
|
|
253
|
+
/**
|
|
254
|
+
* Make a PATCH request with payment
|
|
255
|
+
*/
|
|
256
|
+
declare const armoryPatch: <T = unknown>(wallet: SimpleWalletInput, url: string, network: NetworkId, token: TokenId, body?: unknown, options?: Omit<Parameters<typeof armoryPay>[4], "method" | "body">) => Promise<ArmoryPaymentResult<T>>;
|
|
257
|
+
/**
|
|
258
|
+
* Get the wallet address from a SimpleWalletInput
|
|
259
|
+
*/
|
|
260
|
+
declare const getWalletAddress: (wallet: SimpleWalletInput) => Promise<string>;
|
|
261
|
+
/**
|
|
262
|
+
* Validate a network identifier without making a request
|
|
263
|
+
*/
|
|
264
|
+
declare const validateNetwork: (network: NetworkId) => ValidationError | {
|
|
265
|
+
success: true;
|
|
266
|
+
network: string;
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* Validate a token identifier without making a request
|
|
270
|
+
*/
|
|
271
|
+
declare const validateToken: (token: TokenId, network?: NetworkId) => ValidationError | {
|
|
272
|
+
success: true;
|
|
273
|
+
token: string;
|
|
274
|
+
network: string;
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* Get list of available networks
|
|
278
|
+
*/
|
|
279
|
+
declare const getNetworks: () => string[];
|
|
280
|
+
/**
|
|
281
|
+
* Get list of available tokens
|
|
282
|
+
*/
|
|
283
|
+
declare const getTokens: () => string[];
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Armory API - Simplified payment interface (Ethers)
|
|
287
|
+
* Provides a configurable object with method-based payment functions
|
|
288
|
+
*/
|
|
289
|
+
|
|
290
|
+
type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
291
|
+
interface ArmoryConfig {
|
|
292
|
+
wallet: SimpleWalletInput;
|
|
293
|
+
methods?: HttpMethod[] | HttpMethod;
|
|
294
|
+
tokens?: TokenId[] | TokenId;
|
|
295
|
+
chains?: NetworkId[] | NetworkId;
|
|
296
|
+
debug?: boolean;
|
|
297
|
+
}
|
|
298
|
+
interface PaymentOptions {
|
|
299
|
+
method?: HttpMethod;
|
|
300
|
+
body?: unknown;
|
|
301
|
+
}
|
|
302
|
+
interface ArmoryInstance {
|
|
303
|
+
get<T>(url: string, body?: unknown): Promise<ArmoryPaymentResult<T>>;
|
|
304
|
+
post<T>(url: string, body?: unknown): Promise<ArmoryPaymentResult<T>>;
|
|
305
|
+
put<T>(url: string, body?: unknown): Promise<ArmoryPaymentResult<T>>;
|
|
306
|
+
delete<T>(url: string): Promise<ArmoryPaymentResult<T>>;
|
|
307
|
+
patch<T>(url: string, body?: unknown): Promise<ArmoryPaymentResult<T>>;
|
|
308
|
+
pay<T>(url: string, options?: PaymentOptions): Promise<ArmoryPaymentResult<T>>;
|
|
309
|
+
call<T>(url: string): Promise<ArmoryPaymentResult<T>>;
|
|
310
|
+
}
|
|
311
|
+
declare const createArmory: (config: ArmoryConfig) => ArmoryInstance;
|
|
312
|
+
|
|
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,47 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
isSettlementSuccessful as isSettlementSuccessful2,
|
|
5
|
-
getTxHash,
|
|
6
|
-
NETWORKS,
|
|
7
|
-
getNetworkConfig as getNetworkConfig2,
|
|
8
|
-
getNetworkByChainId as getNetworkByChainId2,
|
|
9
|
-
getMainnets,
|
|
10
|
-
getTestnets,
|
|
11
|
-
ERC20_ABI,
|
|
12
|
-
encodePaymentV2,
|
|
13
|
-
decodePaymentV2,
|
|
14
|
-
encodeSettlementV2,
|
|
15
|
-
decodeSettlementV2 as decodeSettlementV22,
|
|
16
|
-
detectPaymentVersion,
|
|
17
|
-
decodePayment,
|
|
18
|
-
isPaymentV2,
|
|
19
|
-
isSettlementV2,
|
|
20
|
-
isX402V2PaymentRequired as isX402V2PaymentRequired2,
|
|
21
|
-
EIP712_TYPES as EIP712_TYPES2,
|
|
22
|
-
createEIP712Domain as createEIP712Domain3,
|
|
23
|
-
createTransferWithAuthorization as createTransferWithAuthorization2,
|
|
24
|
-
validateTransferWithAuthorization,
|
|
25
|
-
isCAIP2ChainId,
|
|
26
|
-
isCAIPAssetId,
|
|
27
|
-
safeBase64Decode
|
|
28
|
-
} from "@armory-sh/base";
|
|
1
|
+
import { createEIP712Domain, V2_HEADERS, isX402V2PaymentRequired, validatePaymentConfig, isValidationError, resolveNetwork, resolveToken, getNetworkConfig, normalizeNetworkName, decodeSettlementV2 } from '@armory-sh/base';
|
|
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
|
+
import { ethers } from 'ethers';
|
|
29
4
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
createEIP712Domain as createEIP712Domain2,
|
|
37
|
-
normalizeNetworkName
|
|
38
|
-
} from "@armory-sh/base";
|
|
39
|
-
|
|
40
|
-
// src/eip3009.ts
|
|
41
|
-
import { ethers } from "ethers";
|
|
42
|
-
import {
|
|
43
|
-
createEIP712Domain
|
|
44
|
-
} from "@armory-sh/base";
|
|
5
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
6
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
7
|
+
}) : x)(function(x) {
|
|
8
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
9
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
10
|
+
});
|
|
45
11
|
|
|
46
12
|
// src/errors.ts
|
|
47
13
|
var X402ClientError = class extends Error {
|
|
@@ -199,7 +165,7 @@ function createNonce() {
|
|
|
199
165
|
async function createX402V2Payment(signer, requirements, fromAddress, nonce, validBefore, domainName, domainVersion) {
|
|
200
166
|
const contractAddress = requirements.asset;
|
|
201
167
|
const chainId = extractChainId(requirements.network);
|
|
202
|
-
const domain =
|
|
168
|
+
const domain = createEIP712Domain(chainId, contractAddress);
|
|
203
169
|
const customDomain = domainName || domainVersion ? { ...domain, name: domainName ?? domain.name, version: domainVersion ?? domain.version } : domain;
|
|
204
170
|
const authorization = {
|
|
205
171
|
from: fromAddress,
|
|
@@ -246,12 +212,6 @@ async function createX402Payment(signer, parsed, fromAddress, nonce, validBefore
|
|
|
246
212
|
function encodeX402Payment(payload) {
|
|
247
213
|
return Buffer.from(JSON.stringify(payload)).toString("base64");
|
|
248
214
|
}
|
|
249
|
-
|
|
250
|
-
// src/transport.ts
|
|
251
|
-
import {
|
|
252
|
-
decodeSettlementV2,
|
|
253
|
-
V2_HEADERS as V2_HEADERS2
|
|
254
|
-
} from "@armory-sh/base";
|
|
255
215
|
var defaultConfig = {
|
|
256
216
|
baseURL: "",
|
|
257
217
|
headers: {},
|
|
@@ -302,7 +262,7 @@ var handlePaymentRequired = async (state, response) => {
|
|
|
302
262
|
},
|
|
303
263
|
state.config.timeout
|
|
304
264
|
);
|
|
305
|
-
const settlement = decodeSettlementV2(paymentResponse.headers.get(
|
|
265
|
+
const settlement = decodeSettlementV2(paymentResponse.headers.get(V2_HEADERS.PAYMENT_RESPONSE) || "");
|
|
306
266
|
return { success: true, settlement };
|
|
307
267
|
} catch (error) {
|
|
308
268
|
return { success: false, error: error instanceof Error ? error : new Error(String(error)) };
|
|
@@ -394,47 +354,185 @@ function createX402Client(config) {
|
|
|
394
354
|
getSigner: () => transport.getSigner()
|
|
395
355
|
};
|
|
396
356
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
357
|
+
var normalizeWallet = (wallet) => {
|
|
358
|
+
if (typeof wallet === "object" && wallet !== null && "signer" in wallet) {
|
|
359
|
+
return wallet.signer;
|
|
360
|
+
}
|
|
361
|
+
return wallet;
|
|
362
|
+
};
|
|
363
|
+
var armoryPay = async (wallet, url, network, token, options) => {
|
|
364
|
+
try {
|
|
365
|
+
const signer = normalizeWallet(wallet);
|
|
366
|
+
const config = validatePaymentConfig(network, token);
|
|
367
|
+
if (isValidationError(config)) {
|
|
368
|
+
return {
|
|
369
|
+
success: false,
|
|
370
|
+
code: config.code,
|
|
371
|
+
message: config.message,
|
|
372
|
+
details: config
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
const transport = createX402Transport();
|
|
376
|
+
transport.setSigner(signer);
|
|
377
|
+
const method = options?.method ?? "GET";
|
|
378
|
+
const headers = { ...options?.headers };
|
|
379
|
+
let response;
|
|
380
|
+
if (method === "GET") {
|
|
381
|
+
response = await transport.get(url, { headers });
|
|
382
|
+
} else if (method === "POST") {
|
|
383
|
+
response = await transport.post(url, options?.body, { headers });
|
|
384
|
+
} else if (method === "PUT") {
|
|
385
|
+
response = await transport.put(url, options?.body, { headers });
|
|
386
|
+
} else if (method === "DELETE") {
|
|
387
|
+
response = await transport.del(url, { headers });
|
|
388
|
+
} else if (method === "PATCH") {
|
|
389
|
+
response = await transport.patch(url, options?.body, { headers });
|
|
390
|
+
} else {
|
|
391
|
+
response = await transport.fetch(url, { method, headers });
|
|
392
|
+
}
|
|
393
|
+
if (!response.ok) {
|
|
394
|
+
const error = await response.text();
|
|
395
|
+
return {
|
|
396
|
+
success: false,
|
|
397
|
+
code: "PAYMENT_DECLINED",
|
|
398
|
+
message: `Request failed: ${response.status} ${error}`
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
const data = await response.json();
|
|
402
|
+
const txHash = response.headers.get("X-PAYMENT-RESPONSE") || response.headers.get("PAYMENT-RESPONSE");
|
|
403
|
+
return {
|
|
404
|
+
success: true,
|
|
405
|
+
data,
|
|
406
|
+
...txHash && { txHash }
|
|
407
|
+
};
|
|
408
|
+
} catch (error) {
|
|
409
|
+
return {
|
|
410
|
+
success: false,
|
|
411
|
+
code: "NETWORK_ERROR",
|
|
412
|
+
message: error instanceof Error ? error.message : "Unknown error occurred",
|
|
413
|
+
details: error
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
var armoryGet = (wallet, url, network, token, options) => {
|
|
418
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "GET" });
|
|
419
|
+
};
|
|
420
|
+
var armoryPost = (wallet, url, network, token, body, options) => {
|
|
421
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "POST", body });
|
|
422
|
+
};
|
|
423
|
+
var armoryPut = (wallet, url, network, token, body, options) => {
|
|
424
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "PUT", body });
|
|
425
|
+
};
|
|
426
|
+
var armoryDelete = (wallet, url, network, token, options) => {
|
|
427
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "DELETE" });
|
|
428
|
+
};
|
|
429
|
+
var armoryPatch = (wallet, url, network, token, body, options) => {
|
|
430
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "PATCH", body });
|
|
431
|
+
};
|
|
432
|
+
var getWalletAddress = async (wallet) => {
|
|
433
|
+
const signer = normalizeWallet(wallet);
|
|
434
|
+
return signer.getAddress();
|
|
440
435
|
};
|
|
436
|
+
var validateNetwork = (network) => {
|
|
437
|
+
const resolved = resolveNetwork(network);
|
|
438
|
+
if (isValidationError(resolved)) {
|
|
439
|
+
return resolved;
|
|
440
|
+
}
|
|
441
|
+
return { success: true, network: resolved.config.name };
|
|
442
|
+
};
|
|
443
|
+
var validateToken = (token, network) => {
|
|
444
|
+
let resolvedNetwork = void 0;
|
|
445
|
+
if (network) {
|
|
446
|
+
const networkResult = resolveNetwork(network);
|
|
447
|
+
if (isValidationError(networkResult)) {
|
|
448
|
+
return networkResult;
|
|
449
|
+
}
|
|
450
|
+
resolvedNetwork = networkResult;
|
|
451
|
+
}
|
|
452
|
+
const resolved = resolveToken(token, resolvedNetwork);
|
|
453
|
+
if (isValidationError(resolved)) {
|
|
454
|
+
return resolved;
|
|
455
|
+
}
|
|
456
|
+
return {
|
|
457
|
+
success: true,
|
|
458
|
+
token: resolved.config.symbol,
|
|
459
|
+
network: resolved.network.config.name
|
|
460
|
+
};
|
|
461
|
+
};
|
|
462
|
+
var getNetworks = () => {
|
|
463
|
+
const { getAvailableNetworks } = __require("@armory-sh/base");
|
|
464
|
+
return getAvailableNetworks();
|
|
465
|
+
};
|
|
466
|
+
var getTokens = () => {
|
|
467
|
+
const { getAvailableTokens } = __require("@armory-sh/base");
|
|
468
|
+
return getAvailableTokens();
|
|
469
|
+
};
|
|
470
|
+
var ALL_METHODS = /* @__PURE__ */ new Set(["GET", "POST", "PUT", "DELETE", "PATCH"]);
|
|
471
|
+
var arrayify = (value) => {
|
|
472
|
+
if (value === void 0) return void 0;
|
|
473
|
+
return Array.isArray(value) ? value : [value];
|
|
474
|
+
};
|
|
475
|
+
var normalizeArmoryConfig = (config) => ({
|
|
476
|
+
wallet: normalizeWallet(config.wallet),
|
|
477
|
+
allowedMethods: config.methods ? new Set(arrayify(config.methods)) : ALL_METHODS,
|
|
478
|
+
allowedTokens: arrayify(config.tokens) ?? [],
|
|
479
|
+
allowedChains: arrayify(config.chains) ?? [],
|
|
480
|
+
debug: config.debug ?? false
|
|
481
|
+
});
|
|
482
|
+
var createArmory = (config) => {
|
|
483
|
+
const internal = normalizeArmoryConfig(config);
|
|
484
|
+
const transport = createX402Transport();
|
|
485
|
+
transport.setSigner(internal.wallet);
|
|
486
|
+
const makeRequest = async (url, method, body) => {
|
|
487
|
+
try {
|
|
488
|
+
let response;
|
|
489
|
+
const headers = {};
|
|
490
|
+
if (method === "GET") {
|
|
491
|
+
response = await transport.get(url, { headers });
|
|
492
|
+
} else if (method === "POST") {
|
|
493
|
+
response = await transport.post(url, body, { headers });
|
|
494
|
+
} else if (method === "PUT") {
|
|
495
|
+
response = await transport.put(url, body, { headers });
|
|
496
|
+
} else if (method === "DELETE") {
|
|
497
|
+
response = await transport.del(url, { headers });
|
|
498
|
+
} else if (method === "PATCH") {
|
|
499
|
+
response = await transport.patch(url, body, { headers });
|
|
500
|
+
} else {
|
|
501
|
+
response = await transport.fetch(url, { method, headers });
|
|
502
|
+
}
|
|
503
|
+
if (!response.ok) {
|
|
504
|
+
const error = await response.text();
|
|
505
|
+
return {
|
|
506
|
+
success: false,
|
|
507
|
+
code: "PAYMENT_DECLINED",
|
|
508
|
+
message: `Request failed: ${response.status} ${error}`
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
const data = await response.json();
|
|
512
|
+
const txHash = response.headers.get("X-PAYMENT-RESPONSE") || response.headers.get("PAYMENT-RESPONSE");
|
|
513
|
+
return {
|
|
514
|
+
success: true,
|
|
515
|
+
data,
|
|
516
|
+
...txHash && { txHash }
|
|
517
|
+
};
|
|
518
|
+
} catch (error) {
|
|
519
|
+
return {
|
|
520
|
+
success: false,
|
|
521
|
+
code: "NETWORK_ERROR",
|
|
522
|
+
message: error instanceof Error ? error.message : "Unknown error occurred",
|
|
523
|
+
details: error
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
return {
|
|
528
|
+
get: (url, body) => makeRequest(url, "GET", body),
|
|
529
|
+
post: (url, body) => makeRequest(url, "POST", body),
|
|
530
|
+
put: (url, body) => makeRequest(url, "PUT", body),
|
|
531
|
+
delete: (url) => makeRequest(url, "DELETE"),
|
|
532
|
+
patch: (url, body) => makeRequest(url, "PATCH", body),
|
|
533
|
+
pay: (url, options) => makeRequest(url, options?.method ?? "GET", options?.body),
|
|
534
|
+
call: (url) => makeRequest(url, "GET")
|
|
535
|
+
};
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
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.20-alpha.3.11",
|
|
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": "
|
|
26
|
+
"url": "https://github.com/TheGreatAxios/armory",
|
|
27
27
|
"directory": "packages/client-ethers"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@armory-sh/base": "^0.2.
|
|
30
|
+
"@armory-sh/base": "^0.2.21",
|
|
31
31
|
"ethers": "6.16.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|