@armory-sh/client-ethers 0.2.18 → 0.2.19
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 +216 -2
- package/package.json +2 -2
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,3 +1,10 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
6
|
+
});
|
|
7
|
+
|
|
1
8
|
// src/index.ts
|
|
2
9
|
import {
|
|
3
10
|
V2_HEADERS as V2_HEADERS3,
|
|
@@ -5,7 +12,7 @@ import {
|
|
|
5
12
|
getTxHash,
|
|
6
13
|
NETWORKS,
|
|
7
14
|
getNetworkConfig as getNetworkConfig2,
|
|
8
|
-
getNetworkByChainId as
|
|
15
|
+
getNetworkByChainId as getNetworkByChainId3,
|
|
9
16
|
getMainnets,
|
|
10
17
|
getTestnets,
|
|
11
18
|
ERC20_ABI,
|
|
@@ -394,6 +401,200 @@ function createX402Client(config) {
|
|
|
394
401
|
getSigner: () => transport.getSigner()
|
|
395
402
|
};
|
|
396
403
|
}
|
|
404
|
+
|
|
405
|
+
// src/payment-api.ts
|
|
406
|
+
import {
|
|
407
|
+
resolveNetwork,
|
|
408
|
+
resolveToken,
|
|
409
|
+
validatePaymentConfig,
|
|
410
|
+
isValidationError
|
|
411
|
+
} from "@armory-sh/base";
|
|
412
|
+
var normalizeWallet = (wallet) => {
|
|
413
|
+
if (typeof wallet === "object" && wallet !== null && "signer" in wallet) {
|
|
414
|
+
return wallet.signer;
|
|
415
|
+
}
|
|
416
|
+
return wallet;
|
|
417
|
+
};
|
|
418
|
+
var armoryPay = async (wallet, url, network, token, options) => {
|
|
419
|
+
try {
|
|
420
|
+
const signer = normalizeWallet(wallet);
|
|
421
|
+
const config = validatePaymentConfig(network, token);
|
|
422
|
+
if (isValidationError(config)) {
|
|
423
|
+
return {
|
|
424
|
+
success: false,
|
|
425
|
+
code: config.code,
|
|
426
|
+
message: config.message,
|
|
427
|
+
details: config
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
const transport = createX402Transport();
|
|
431
|
+
transport.setSigner(signer);
|
|
432
|
+
const method = options?.method ?? "GET";
|
|
433
|
+
const headers = { ...options?.headers };
|
|
434
|
+
let response;
|
|
435
|
+
if (method === "GET") {
|
|
436
|
+
response = await transport.get(url, { headers });
|
|
437
|
+
} else if (method === "POST") {
|
|
438
|
+
response = await transport.post(url, options?.body, { headers });
|
|
439
|
+
} else if (method === "PUT") {
|
|
440
|
+
response = await transport.put(url, options?.body, { headers });
|
|
441
|
+
} else if (method === "DELETE") {
|
|
442
|
+
response = await transport.del(url, { headers });
|
|
443
|
+
} else if (method === "PATCH") {
|
|
444
|
+
response = await transport.patch(url, options?.body, { headers });
|
|
445
|
+
} else {
|
|
446
|
+
response = await transport.fetch(url, { method, headers });
|
|
447
|
+
}
|
|
448
|
+
if (!response.ok) {
|
|
449
|
+
const error = await response.text();
|
|
450
|
+
return {
|
|
451
|
+
success: false,
|
|
452
|
+
code: "PAYMENT_DECLINED",
|
|
453
|
+
message: `Request failed: ${response.status} ${error}`
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
const data = await response.json();
|
|
457
|
+
const txHash = response.headers.get("X-PAYMENT-RESPONSE") || response.headers.get("PAYMENT-RESPONSE");
|
|
458
|
+
return {
|
|
459
|
+
success: true,
|
|
460
|
+
data,
|
|
461
|
+
...txHash && { txHash }
|
|
462
|
+
};
|
|
463
|
+
} catch (error) {
|
|
464
|
+
return {
|
|
465
|
+
success: false,
|
|
466
|
+
code: "NETWORK_ERROR",
|
|
467
|
+
message: error instanceof Error ? error.message : "Unknown error occurred",
|
|
468
|
+
details: error
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
var armoryGet = (wallet, url, network, token, options) => {
|
|
473
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "GET" });
|
|
474
|
+
};
|
|
475
|
+
var armoryPost = (wallet, url, network, token, body, options) => {
|
|
476
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "POST", body });
|
|
477
|
+
};
|
|
478
|
+
var armoryPut = (wallet, url, network, token, body, options) => {
|
|
479
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "PUT", body });
|
|
480
|
+
};
|
|
481
|
+
var armoryDelete = (wallet, url, network, token, options) => {
|
|
482
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "DELETE" });
|
|
483
|
+
};
|
|
484
|
+
var armoryPatch = (wallet, url, network, token, body, options) => {
|
|
485
|
+
return armoryPay(wallet, url, network, token, { ...options, method: "PATCH", body });
|
|
486
|
+
};
|
|
487
|
+
var getWalletAddress = async (wallet) => {
|
|
488
|
+
const signer = normalizeWallet(wallet);
|
|
489
|
+
return signer.getAddress();
|
|
490
|
+
};
|
|
491
|
+
var validateNetwork = (network) => {
|
|
492
|
+
const resolved = resolveNetwork(network);
|
|
493
|
+
if (isValidationError(resolved)) {
|
|
494
|
+
return resolved;
|
|
495
|
+
}
|
|
496
|
+
return { success: true, network: resolved.config.name };
|
|
497
|
+
};
|
|
498
|
+
var validateToken = (token, network) => {
|
|
499
|
+
let resolvedNetwork = void 0;
|
|
500
|
+
if (network) {
|
|
501
|
+
const networkResult = resolveNetwork(network);
|
|
502
|
+
if (isValidationError(networkResult)) {
|
|
503
|
+
return networkResult;
|
|
504
|
+
}
|
|
505
|
+
resolvedNetwork = networkResult;
|
|
506
|
+
}
|
|
507
|
+
const resolved = resolveToken(token, resolvedNetwork);
|
|
508
|
+
if (isValidationError(resolved)) {
|
|
509
|
+
return resolved;
|
|
510
|
+
}
|
|
511
|
+
return {
|
|
512
|
+
success: true,
|
|
513
|
+
token: resolved.config.symbol,
|
|
514
|
+
network: resolved.network.config.name
|
|
515
|
+
};
|
|
516
|
+
};
|
|
517
|
+
var getNetworks = () => {
|
|
518
|
+
const { getAvailableNetworks } = __require("@armory-sh/base");
|
|
519
|
+
return getAvailableNetworks();
|
|
520
|
+
};
|
|
521
|
+
var getTokens = () => {
|
|
522
|
+
const { getAvailableTokens } = __require("@armory-sh/base");
|
|
523
|
+
return getAvailableTokens();
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
// src/armory-api.ts
|
|
527
|
+
import {
|
|
528
|
+
resolveNetwork as resolveNetwork2,
|
|
529
|
+
resolveToken as resolveToken2
|
|
530
|
+
} from "@armory-sh/base";
|
|
531
|
+
var ALL_METHODS = /* @__PURE__ */ new Set(["GET", "POST", "PUT", "DELETE", "PATCH"]);
|
|
532
|
+
var arrayify = (value) => {
|
|
533
|
+
if (value === void 0) return void 0;
|
|
534
|
+
return Array.isArray(value) ? value : [value];
|
|
535
|
+
};
|
|
536
|
+
var normalizeArmoryConfig = (config) => ({
|
|
537
|
+
wallet: normalizeWallet(config.wallet),
|
|
538
|
+
allowedMethods: config.methods ? new Set(arrayify(config.methods)) : ALL_METHODS,
|
|
539
|
+
allowedTokens: arrayify(config.tokens) ?? [],
|
|
540
|
+
allowedChains: arrayify(config.chains) ?? [],
|
|
541
|
+
debug: config.debug ?? false
|
|
542
|
+
});
|
|
543
|
+
var createArmory = (config) => {
|
|
544
|
+
const internal = normalizeArmoryConfig(config);
|
|
545
|
+
const transport = createX402Transport();
|
|
546
|
+
transport.setSigner(internal.wallet);
|
|
547
|
+
const makeRequest = async (url, method, body) => {
|
|
548
|
+
try {
|
|
549
|
+
let response;
|
|
550
|
+
const headers = {};
|
|
551
|
+
if (method === "GET") {
|
|
552
|
+
response = await transport.get(url, { headers });
|
|
553
|
+
} else if (method === "POST") {
|
|
554
|
+
response = await transport.post(url, body, { headers });
|
|
555
|
+
} else if (method === "PUT") {
|
|
556
|
+
response = await transport.put(url, body, { headers });
|
|
557
|
+
} else if (method === "DELETE") {
|
|
558
|
+
response = await transport.del(url, { headers });
|
|
559
|
+
} else if (method === "PATCH") {
|
|
560
|
+
response = await transport.patch(url, body, { headers });
|
|
561
|
+
} else {
|
|
562
|
+
response = await transport.fetch(url, { method, headers });
|
|
563
|
+
}
|
|
564
|
+
if (!response.ok) {
|
|
565
|
+
const error = await response.text();
|
|
566
|
+
return {
|
|
567
|
+
success: false,
|
|
568
|
+
code: "PAYMENT_DECLINED",
|
|
569
|
+
message: `Request failed: ${response.status} ${error}`
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
const data = await response.json();
|
|
573
|
+
const txHash = response.headers.get("X-PAYMENT-RESPONSE") || response.headers.get("PAYMENT-RESPONSE");
|
|
574
|
+
return {
|
|
575
|
+
success: true,
|
|
576
|
+
data,
|
|
577
|
+
...txHash && { txHash }
|
|
578
|
+
};
|
|
579
|
+
} catch (error) {
|
|
580
|
+
return {
|
|
581
|
+
success: false,
|
|
582
|
+
code: "NETWORK_ERROR",
|
|
583
|
+
message: error instanceof Error ? error.message : "Unknown error occurred",
|
|
584
|
+
details: error
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
return {
|
|
589
|
+
get: (url, body) => makeRequest(url, "GET", body),
|
|
590
|
+
post: (url, body) => makeRequest(url, "POST", body),
|
|
591
|
+
put: (url, body) => makeRequest(url, "PUT", body),
|
|
592
|
+
delete: (url) => makeRequest(url, "DELETE"),
|
|
593
|
+
patch: (url, body) => makeRequest(url, "PATCH", body),
|
|
594
|
+
pay: (url, options) => makeRequest(url, options?.method ?? "GET", options?.body),
|
|
595
|
+
call: (url) => makeRequest(url, "GET")
|
|
596
|
+
};
|
|
597
|
+
};
|
|
397
598
|
export {
|
|
398
599
|
AuthorizationError,
|
|
399
600
|
EIP712_TYPES2 as EIP712_TYPES,
|
|
@@ -405,6 +606,13 @@ export {
|
|
|
405
606
|
SigningError,
|
|
406
607
|
V2_HEADERS3 as V2_HEADERS,
|
|
407
608
|
X402ClientError,
|
|
609
|
+
armoryDelete,
|
|
610
|
+
armoryGet,
|
|
611
|
+
armoryPatch,
|
|
612
|
+
armoryPay,
|
|
613
|
+
armoryPost,
|
|
614
|
+
armoryPut,
|
|
615
|
+
createArmory,
|
|
408
616
|
createEIP712Domain3 as createEIP712Domain,
|
|
409
617
|
createTransferWithAuthorization2 as createTransferWithAuthorization,
|
|
410
618
|
createX402Client,
|
|
@@ -419,22 +627,28 @@ export {
|
|
|
419
627
|
encodeSettlementV2,
|
|
420
628
|
encodeX402Payment,
|
|
421
629
|
getMainnets,
|
|
422
|
-
|
|
630
|
+
getNetworkByChainId3 as getNetworkByChainId,
|
|
423
631
|
getNetworkConfig2 as getNetworkConfig,
|
|
632
|
+
getNetworks,
|
|
424
633
|
getPaymentHeaderName,
|
|
425
634
|
getTestnets,
|
|
635
|
+
getTokens,
|
|
426
636
|
getTxHash,
|
|
637
|
+
getWalletAddress,
|
|
427
638
|
isCAIP2ChainId,
|
|
428
639
|
isCAIPAssetId,
|
|
429
640
|
isPaymentV2,
|
|
430
641
|
isSettlementSuccessful2 as isSettlementSuccessful,
|
|
431
642
|
isSettlementV2,
|
|
432
643
|
isX402V2PaymentRequired2 as isX402V2PaymentRequired,
|
|
644
|
+
normalizeWallet,
|
|
433
645
|
parsePaymentRequired,
|
|
434
646
|
recoverEIP3009Signer,
|
|
435
647
|
safeBase64Decode,
|
|
436
648
|
signEIP3009,
|
|
437
649
|
signEIP3009WithDomain,
|
|
438
650
|
signPayment,
|
|
651
|
+
validateNetwork,
|
|
652
|
+
validateToken,
|
|
439
653
|
validateTransferWithAuthorization
|
|
440
654
|
};
|
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.19",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Sawyer Cutler <sawyer@dirtroad.dev>",
|
|
6
6
|
"type": "module",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"directory": "packages/client-ethers"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@armory-sh/base": "^0.2.
|
|
30
|
+
"@armory-sh/base": "^0.2.20",
|
|
31
31
|
"ethers": "6.16.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|