@avalabs/core-paraswap-sdk 2.8.0-alpha.197
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/LICENSE +9 -0
- package/README.md +5 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.js +1 -0
- package/esm/index.d.ts +4 -0
- package/esm/index.js +1 -0
- package/esm/models.d.ts +35 -0
- package/esm/models.js +1 -0
- package/esm/paraswapUtils.js +1 -0
- package/esm/performSwap.d.ts +29 -0
- package/esm/performSwap.js +1 -0
- package/esm/types/TransactionSender.d.ts +3 -0
- package/esm/types/TransactionSigner.d.ts +5 -0
- package/package.json +53 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Copyright (C) 2021, Ava Labs, Inc. All rights reserved.
|
|
2
|
+
|
|
3
|
+
Subject to the limited license below (**”License””), you may not, and you may not permit anyone else to, copy, reproduce, aggregate, republish, download, post, distribute, license, sublicense, reverse engineer, modify, or create derivative works based on this software (collectively, **“Software”**).
|
|
4
|
+
|
|
5
|
+
You are hereby granted a limited, non-exclusive, non-sublicensable and non-transferable license to download and use the Software as-is solely (i) for use in connection with the Avalanche Public Blockchain platform, having a NetworkID of 1 (Mainnet) or 5 (Fuji), and associated blockchains, comprised exclusively of the Avalanche X-Chain, C-Chain, P-Chain and any subnets linked to the P-Chain (**“Avalanche Authorized Platform”**) or (ii) for non-production, testing or research purposes without any commercial application within the Avalanche ecosystem (**“Non-Commercial Use”**); provided that, in each case, you may not use or allow use of the Software (a) in connection with any forks of the Avalanche Authorized Platform, (b) in any manner not operationally connected to the Avalanche Authorized Platform other than for Non-Commercial Use, or (c) to the extent the number of monthly active users or the number of total installs of any software that uses the Software across all versions thereof exceeds 10,000 at any time. You may not modify or alter the Software in any way.
|
|
6
|
+
|
|
7
|
+
You hereby acknowledge and agree to the terms set forth at www.avalabs.org/important-notice.
|
|
8
|
+
|
|
9
|
+
**TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED ON AN “AS IS” BASIS, AND AVA LABS EXPRESSLY DISCLAIMS AND EXCLUDES ALL REPRESENTATIONS, WARRANTIES AND OTHER TERMS AND CONDITIONS, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION BY OPERATION OF LAW OR BY CUSTOM, STATUTE OR OTHERWISE, AND INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTY, TERM, OR CONDITION OF NON-INFRINGEMENT, MERCHANTABILITY, TITLE, OR FITNESS FOR PARTICULAR PURPOSE. YOU USE THE SOFTWARE AT YOUR OWN RISK. AVA LABS EXPRESSLY DISCLAIMS ALL LIABILITY (INCLUDING FOR ALL DIRECT, CONSEQUENTIAL OR OTHER DAMAGES OR LOSSES) RELATED TO ANY USE OF THE SOFTWARE.**
|
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Parawap SDK
|
|
2
|
+
|
|
3
|
+
This SDK enables you to use `performSwap` function which encapsulates whole swap process using Paraswap api.
|
|
4
|
+
This includes checking input values, computing necessary parameters, getting spend allowance on ERC-20 tokens, building,
|
|
5
|
+
signing and sending transaction to blockchain.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { OptimalRate } from 'paraswap-core';
|
|
2
|
+
import { BitcoinInputUTXO, BitcoinOutputUTXO, JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
3
|
+
import { TransactionRequest } from 'ethers';
|
|
4
|
+
import { Network } from '@avalabs/chains-sdk';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Paraswap may return both data and an error sometimes.
|
|
8
|
+
* @see https://app.swaggerhub.com/apis/paraswapv5/api/1.0#/PriceRouteWithError
|
|
9
|
+
*/
|
|
10
|
+
type ParaswapPricesResponseWithError = {
|
|
11
|
+
error: string;
|
|
12
|
+
priceRoute?: OptimalRate;
|
|
13
|
+
};
|
|
14
|
+
type ParaswapPricesSuccessResponse = {
|
|
15
|
+
error: never;
|
|
16
|
+
priceRoute: OptimalRate;
|
|
17
|
+
};
|
|
18
|
+
type ParaswapPricesResponse = ParaswapPricesSuccessResponse | ParaswapPricesResponseWithError;
|
|
19
|
+
/**
|
|
20
|
+
* Paraswap API errors after which it may be useful to retry the request.
|
|
21
|
+
*
|
|
22
|
+
* @see https://app.swaggerhub.com/apis/paraswapv5/api/1.0#/PriceErrorMessage
|
|
23
|
+
*/
|
|
24
|
+
declare const PARASWAP_RETRYABLE_ERRORS: string[];
|
|
25
|
+
declare const hasParaswapError: (response: ParaswapPricesResponse) => response is ParaswapPricesResponseWithError;
|
|
26
|
+
type SignTransactionRequest = TransactionRequest | BtcTransactionRequest | AvalancheTransactionRequest;
|
|
27
|
+
interface BtcTransactionRequest {
|
|
28
|
+
inputs: BitcoinInputUTXO[];
|
|
29
|
+
outputs: BitcoinOutputUTXO[];
|
|
30
|
+
}
|
|
31
|
+
interface AvalancheTransactionRequest {
|
|
32
|
+
tx: Buffer;
|
|
33
|
+
chain: 'X' | 'P' | 'C';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
type TransactionSender = (signedTx: string) => Promise<string>;
|
|
37
|
+
|
|
38
|
+
type TransactionSigner = (tx: TransactionRequest) => Promise<string>;
|
|
39
|
+
|
|
40
|
+
type PerformSwapParams = {
|
|
41
|
+
srcTokenAddress: string | undefined;
|
|
42
|
+
isSrcTokenNative: boolean;
|
|
43
|
+
destTokenAddress: string | undefined;
|
|
44
|
+
isDestTokenNative: boolean;
|
|
45
|
+
priceRoute: OptimalRate | undefined;
|
|
46
|
+
gasLimit: number | undefined;
|
|
47
|
+
slippage: number;
|
|
48
|
+
activeNetwork: Network | undefined;
|
|
49
|
+
provider: JsonRpcBatchInternal;
|
|
50
|
+
transactionSend: TransactionSender;
|
|
51
|
+
transactionSign: TransactionSigner;
|
|
52
|
+
userAddress: string | undefined;
|
|
53
|
+
networkGasPrice: bigint;
|
|
54
|
+
maxFeePerGas?: bigint;
|
|
55
|
+
maxPriorityFeePerGas?: bigint;
|
|
56
|
+
};
|
|
57
|
+
declare function performSwap({ srcTokenAddress, isSrcTokenNative, destTokenAddress, isDestTokenNative, priceRoute, gasLimit, maxFeePerGas, maxPriorityFeePerGas, slippage, activeNetwork, provider, transactionSend, transactionSign, userAddress, networkGasPrice, }: PerformSwapParams): Promise<{
|
|
58
|
+
swapTxHash: string;
|
|
59
|
+
approveTxHash: string | undefined;
|
|
60
|
+
}>;
|
|
61
|
+
|
|
62
|
+
export { AvalancheTransactionRequest, BtcTransactionRequest, PARASWAP_RETRYABLE_ERRORS, ParaswapPricesResponse, ParaswapPricesResponseWithError, ParaswapPricesSuccessResponse, PerformSwapParams, SignTransactionRequest, TransactionSender, TransactionSigner, hasParaswapError, performSwap };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("@openzeppelin/contracts/build/contracts/ERC20.json"),r=require("big.js"),t=require("bn.js"),s=require("paraswap"),a=require("@avalabs/core-utils-sdk"),n=require("@avalabs/chains-sdk"),o=require("web3"),i=require("assert"),c=require("ethers");const d=new s.ParaSwap(n.ChainId.AVALANCHE_MAINNET_ID,void 0,new o);exports.PARASWAP_RETRYABLE_ERRORS=["Price Timeout","An error has occurred, please try again later or contact our support"],exports.hasParaswapError=e=>"string"==typeof e.error,exports.performSwap=async function({srcTokenAddress:o,isSrcTokenNative:p,destTokenAddress:u,isDestTokenNative:w,priceRoute:m,gasLimit:l,maxFeePerGas:A,maxPriorityFeePerGas:h,slippage:E,activeNetwork:f,provider:v,transactionSend:T,transactionSign:k,userAddress:g,networkGasPrice:R}){i(o,"no source token on request"),i(u,"no destination token on request"),i(m,"request requires the paraswap priceRoute"),i(l,"request requires gas limit from paraswap response"),i(g,"Wallet Error: address not defined"),i(R,"network gas price not defined"),i(f,"Network Init Error: Wrong network"),i(!f.isTestnet,"Network Init Error: Wrong network");const S=await async function(){const e=await fetch(`${d.apiURL}/adapters/contracts?network=${n.ChainId.AVALANCHE_MAINNET_ID}`);return(await e.json()).TokenTransferProxy}(),x=p?s.ETHER_ADDRESS:o,P=w?s.ETHER_ADDRESS:u,D=R;let q;const I=new r(m.destAmount).times(1-E/100).toFixed(0),y=new r(m.srcAmount).times(1+E/100).toFixed(0),N="SELL"===m.side?m.srcAmount:y,L="SELL"===m.side?I:m.destAmount;let $=await v.getTransactionCount(g);if(!p){const r=new c.Contract(x,e.abi,v),[t,s]=await a.resolve(r.allowance(g,S));if(s||null===t)throw new Error(`Allowance Error: ${s}`);if(t<BigInt(N)){const[e]=await a.resolve(r.approve.estimateGas(S,N)),{data:t}=await r.approve.populateTransaction(S,N),[s,n]=await a.resolve(k({nonce:$,chainId:f.chainId,maxFeePerGas:D,gasPrice:D,gasLimit:e||BigInt(l),data:t,to:x}));if(!s||n)throw new Error(`Approve Error: ${n}`);const[o,c]=await a.resolve(T(s));if(c)throw new Error(`Approve Error: ${c}`);i(o,"Tx hash empty"),$++,q=o}else q=void 0}const[b,F]=await a.resolve(a.promiseResolveWithBackoff((()=>async function({network:e,srcToken:r,destToken:t,srcAmount:s,destAmount:a,priceRoute:n,userAddress:o,partner:i,partnerAddress:c,partnerFeeBps:p,receiver:u,options:w,srcDecimals:m,destDecimals:l,permit:A,deadline:h}){const E=new URLSearchParams(w),f=`${d.apiURL}/transactions/${e}/?${E.toString()}`,v={priceRoute:n,srcToken:r,destToken:t,srcAmount:s,destAmount:a,userAddress:o,partner:i,partnerAddress:c,partnerFeeBps:p,receiver:u,srcDecimals:m,destDecimals:l,permit:A,deadline:h},T=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});return await T.json()}({network:f.chainId.toString(),srcToken:x,destToken:P,srcAmount:N,destAmount:L,priceRoute:m,userAddress:g,partner:"Avalanche",partnerAddress:undefined,partnerFeeBps:undefined,receiver:undefined,options:undefined,srcDecimals:m.srcDecimals,destDecimals:m.destDecimals,permit:undefined,deadline:undefined})),(function(e){return"Server too busy"===e.message||e.error}),0,10));if(!b||F||"message"in b)throw new Error(`Data Error: ${F}`);const[B,C]=await a.resolve(k({nonce:$,chainId:f.chainId,maxFeePerGas:A??D,maxPriorityFeePerGas:h,gasLimit:Number(b.gas),data:b.data,to:b.to,value:p?`0x${new t.BN(N).toString("hex")}`:void 0}));if(!B||C)throw new Error(`Tx Error: ${C}`);const[_,G]=await a.resolve(T(B));if(G)throw new Error(`Tx Error: ${G}`);return i(_,"Tx hash empty"),{swapTxHash:_,approveTxHash:q}};
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { AvalancheTransactionRequest, BtcTransactionRequest, PARASWAP_RETRYABLE_ERRORS, ParaswapPricesResponse, ParaswapPricesResponseWithError, ParaswapPricesSuccessResponse, SignTransactionRequest, hasParaswapError } from './models.js';
|
|
2
|
+
export { PerformSwapParams, performSwap } from './performSwap.js';
|
|
3
|
+
export { TransactionSender } from './types/TransactionSender.js';
|
|
4
|
+
export { TransactionSigner } from './types/TransactionSigner.js';
|
package/esm/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{PARASWAP_RETRYABLE_ERRORS,hasParaswapError}from"./models.js";export{performSwap}from"./performSwap.js";
|
package/esm/models.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { OptimalRate } from 'paraswap-core';
|
|
2
|
+
import { BitcoinInputUTXO, BitcoinOutputUTXO } from '@avalabs/core-wallets-sdk';
|
|
3
|
+
import { TransactionRequest } from 'ethers';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Paraswap may return both data and an error sometimes.
|
|
7
|
+
* @see https://app.swaggerhub.com/apis/paraswapv5/api/1.0#/PriceRouteWithError
|
|
8
|
+
*/
|
|
9
|
+
type ParaswapPricesResponseWithError = {
|
|
10
|
+
error: string;
|
|
11
|
+
priceRoute?: OptimalRate;
|
|
12
|
+
};
|
|
13
|
+
type ParaswapPricesSuccessResponse = {
|
|
14
|
+
error: never;
|
|
15
|
+
priceRoute: OptimalRate;
|
|
16
|
+
};
|
|
17
|
+
type ParaswapPricesResponse = ParaswapPricesSuccessResponse | ParaswapPricesResponseWithError;
|
|
18
|
+
/**
|
|
19
|
+
* Paraswap API errors after which it may be useful to retry the request.
|
|
20
|
+
*
|
|
21
|
+
* @see https://app.swaggerhub.com/apis/paraswapv5/api/1.0#/PriceErrorMessage
|
|
22
|
+
*/
|
|
23
|
+
declare const PARASWAP_RETRYABLE_ERRORS: string[];
|
|
24
|
+
declare const hasParaswapError: (response: ParaswapPricesResponse) => response is ParaswapPricesResponseWithError;
|
|
25
|
+
type SignTransactionRequest = TransactionRequest | BtcTransactionRequest | AvalancheTransactionRequest;
|
|
26
|
+
interface BtcTransactionRequest {
|
|
27
|
+
inputs: BitcoinInputUTXO[];
|
|
28
|
+
outputs: BitcoinOutputUTXO[];
|
|
29
|
+
}
|
|
30
|
+
interface AvalancheTransactionRequest {
|
|
31
|
+
tx: Buffer;
|
|
32
|
+
chain: 'X' | 'P' | 'C';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { AvalancheTransactionRequest, BtcTransactionRequest, PARASWAP_RETRYABLE_ERRORS, ParaswapPricesResponse, ParaswapPricesResponseWithError, ParaswapPricesSuccessResponse, SignTransactionRequest, hasParaswapError };
|
package/esm/models.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const r=["Price Timeout","An error has occurred, please try again later or contact our support"],o=r=>"string"==typeof r.error;export{r as PARASWAP_RETRYABLE_ERRORS,o as hasParaswapError};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ParaSwap as e}from"paraswap";import{ChainId as r}from"@avalabs/chains-sdk";import t from"web3";const s=new e(r.AVALANCHE_MAINNET_ID,void 0,new t);async function n({network:e,srcToken:r,destToken:t,srcAmount:n,destAmount:a,priceRoute:o,userAddress:i,partner:c,partnerAddress:p,partnerFeeBps:d,receiver:m,options:A,srcDecimals:u,destDecimals:w,permit:T,deadline:f}){const k=new URLSearchParams(A),l=`${s.apiURL}/transactions/${e}/?${k.toString()}`,N={priceRoute:o,srcToken:r,destToken:t,srcAmount:n,destAmount:a,userAddress:i,partner:c,partnerAddress:p,partnerFeeBps:d,receiver:m,srcDecimals:u,destDecimals:w,permit:T,deadline:f},h=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(N)});return await h.json()}async function a(){const e=await fetch(`${s.apiURL}/adapters/contracts?network=${r.AVALANCHE_MAINNET_ID}`);return(await e.json()).TokenTransferProxy}export{n as buildTx,a as getParaswapSpender};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Network } from '@avalabs/chains-sdk';
|
|
2
|
+
import { JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
3
|
+
import { OptimalRate } from 'paraswap-core';
|
|
4
|
+
import { TransactionSender } from './types/TransactionSender.js';
|
|
5
|
+
import { TransactionSigner } from './types/TransactionSigner.js';
|
|
6
|
+
|
|
7
|
+
type PerformSwapParams = {
|
|
8
|
+
srcTokenAddress: string | undefined;
|
|
9
|
+
isSrcTokenNative: boolean;
|
|
10
|
+
destTokenAddress: string | undefined;
|
|
11
|
+
isDestTokenNative: boolean;
|
|
12
|
+
priceRoute: OptimalRate | undefined;
|
|
13
|
+
gasLimit: number | undefined;
|
|
14
|
+
slippage: number;
|
|
15
|
+
activeNetwork: Network | undefined;
|
|
16
|
+
provider: JsonRpcBatchInternal;
|
|
17
|
+
transactionSend: TransactionSender;
|
|
18
|
+
transactionSign: TransactionSigner;
|
|
19
|
+
userAddress: string | undefined;
|
|
20
|
+
networkGasPrice: bigint;
|
|
21
|
+
maxFeePerGas?: bigint;
|
|
22
|
+
maxPriorityFeePerGas?: bigint;
|
|
23
|
+
};
|
|
24
|
+
declare function performSwap({ srcTokenAddress, isSrcTokenNative, destTokenAddress, isDestTokenNative, priceRoute, gasLimit, maxFeePerGas, maxPriorityFeePerGas, slippage, activeNetwork, provider, transactionSend, transactionSign, userAddress, networkGasPrice, }: PerformSwapParams): Promise<{
|
|
25
|
+
swapTxHash: string;
|
|
26
|
+
approveTxHash: string | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
|
|
29
|
+
export { PerformSwapParams, performSwap };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"@openzeppelin/contracts/build/contracts/ERC20.json";import r from"big.js";import{BN as t}from"bn.js";import{ETHER_ADDRESS as o}from"paraswap";import{resolve as a,promiseResolveWithBackoff as n}from"@avalabs/core-utils-sdk";import{getParaswapSpender as s,buildTx as i}from"./paraswapUtils.js";import d from"assert";import{Contract as c}from"ethers";async function p({srcTokenAddress:p,isSrcTokenNative:m,destTokenAddress:w,isDestTokenNative:u,priceRoute:f,gasLimit:l,maxFeePerGas:h,maxPriorityFeePerGas:g,slippage:E,activeNetwork:k,provider:v,transactionSend:x,transactionSign:A,userAddress:T,networkGasPrice:I}){d(p,"no source token on request"),d(w,"no destination token on request"),d(f,"request requires the paraswap priceRoute"),d(l,"request requires gas limit from paraswap response"),d(T,"Wallet Error: address not defined"),d(I,"network gas price not defined"),d(k,"Network Init Error: Wrong network"),d(!k.isTestnet,"Network Init Error: Wrong network");const P=await s(),F=m?o:p,S=u?o:w,b=I;let G;const L=new r(f.destAmount).times(1-E/100).toFixed(0),$=new r(f.srcAmount).times(1+E/100).toFixed(0),q="SELL"===f.side?f.srcAmount:$,y="SELL"===f.side?L:f.destAmount;let D=await v.getTransactionCount(T);if(!m){const r=new c(F,e.abi,v),[t,o]=await a(r.allowance(T,P));if(o||null===t)throw new Error(`Allowance Error: ${o}`);if(t<BigInt(q)){const[e]=await a(r.approve.estimateGas(P,q)),{data:t}=await r.approve.populateTransaction(P,q),[o,n]=await a(A({nonce:D,chainId:k.chainId,maxFeePerGas:b,gasPrice:b,gasLimit:e||BigInt(l),data:t,to:F}));if(!o||n)throw new Error(`Approve Error: ${n}`);const[s,i]=await a(x(o));if(i)throw new Error(`Approve Error: ${i}`);d(s,"Tx hash empty"),D++,G=s}else G=void 0}const[N,j]=await a(n((()=>i({network:k.chainId.toString(),srcToken:F,destToken:S,srcAmount:q,destAmount:y,priceRoute:f,userAddress:T,partner:"Avalanche",partnerAddress:undefined,partnerFeeBps:undefined,receiver:undefined,options:undefined,srcDecimals:f.srcDecimals,destDecimals:f.destDecimals,permit:undefined,deadline:undefined})),(function(e){return"Server too busy"===e.message||e.error}),0,10));if(!N||j||"message"in N)throw new Error(`Data Error: ${j}`);const[R,B]=await a(A({nonce:D,chainId:k.chainId,maxFeePerGas:h??b,maxPriorityFeePerGas:g,gasLimit:Number(N.gas),data:N.data,to:N.to,value:m?`0x${new t(q).toString("hex")}`:void 0}));if(!R||B)throw new Error(`Tx Error: ${B}`);const[W,C]=await a(x(R));if(C)throw new Error(`Tx Error: ${C}`);return d(W,"Tx hash empty"),{swapTxHash:W,approveTxHash:G}}export{p as performSwap};
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@avalabs/core-paraswap-sdk",
|
|
3
|
+
"version": "2.8.0-alpha.197",
|
|
4
|
+
"license": "Limited Ecosystem License",
|
|
5
|
+
"private": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "restricted"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"module": "esm/index.js",
|
|
11
|
+
"typings": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"esm"
|
|
15
|
+
],
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"scripts": {
|
|
18
|
+
"start": "rollup -c --watch",
|
|
19
|
+
"build": "rollup -c",
|
|
20
|
+
"lint": "eslint --fix -c ./.eslintrc.js \"src/**/*.ts*\""
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/big.js": "6.1.6",
|
|
24
|
+
"@types/jest": "29.5.12",
|
|
25
|
+
"@types/lodash": "4.14.191",
|
|
26
|
+
"@types/react": "18.0.26",
|
|
27
|
+
"big.js": "6.2.1",
|
|
28
|
+
"bitcoinjs-lib": "5.2.0",
|
|
29
|
+
"coinselect": "3.1.13",
|
|
30
|
+
"ethers": "6.7.1",
|
|
31
|
+
"jest": "29.7.0",
|
|
32
|
+
"lodash": "4.17.21",
|
|
33
|
+
"paraswap": "5.2.0",
|
|
34
|
+
"react": "17.0.2",
|
|
35
|
+
"ts-jest": "29.0.5"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@avalabs/core-utils-sdk": "2.8.0-alpha.197",
|
|
39
|
+
"@avalabs/core-wallets-sdk": "2.8.0-alpha.197"
|
|
40
|
+
},
|
|
41
|
+
"peerDependencies": {
|
|
42
|
+
"big.js": "^6.2.1",
|
|
43
|
+
"bitcoinjs-lib": "^5.2.0",
|
|
44
|
+
"coinselect": "^3.1.12",
|
|
45
|
+
"ethers": "^6.7.1",
|
|
46
|
+
"paraswap": "5.2.0",
|
|
47
|
+
"react": "^17.0.2"
|
|
48
|
+
},
|
|
49
|
+
"volta": {
|
|
50
|
+
"node": "16.13.1",
|
|
51
|
+
"yarn": "1.22.17"
|
|
52
|
+
}
|
|
53
|
+
}
|