@dripfi/drip-sdk 1.2.5-dev.1 → 1.2.6
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/DripApi.d.ts +4 -12
- package/dist/DripApi.js +29 -87
- package/dist/DripConfig.d.ts +1 -0
- package/dist/DripConfig.js +6 -2
- package/dist/DripSdk.d.ts +8 -14
- package/dist/DripSdk.js +68 -136
- package/dist/contracts/DripSwapAndRecyclerContract.d.ts +7 -0
- package/dist/contracts/DripSwapAndRecyclerContract.js +42 -0
- package/dist/contracts/abi/DripSwapAndRecyclerAbi.json +516 -0
- package/dist/index.d.ts +2 -3
- package/dist/test.js +12 -42
- package/dist/types/BeanEntry.d.ts +12 -0
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -47
- package/package.json +1 -1
- package/dist/types/DeployedMetaVault.d.ts +0 -6
- package/dist/types/MetaVault.d.ts +0 -17
- package/dist/types/MetaVault.js +0 -2
- package/dist/types/UserMetaVaultBalance.d.ts +0 -6
- package/dist/types/UserMetaVaultBalance.js +0 -2
- /package/dist/types/{DeployedMetaVault.js → BeanEntry.js} +0 -0
package/dist/DripApi.d.ts
CHANGED
@@ -7,24 +7,21 @@ import { VaultStats } from './types/VaultStats';
|
|
7
7
|
import { UserBalance } from './types/UserBalance';
|
8
8
|
import { VaultClaimData } from './types/VaultClaimData';
|
9
9
|
import MyPerqData from './types/MyPerqData';
|
10
|
+
import { LoyaltyCard } from './types/LoyaltyCard';
|
10
11
|
import { BeansBalance } from './types/BeansBalance';
|
11
|
-
import { MetaVault } from './types/MetaVault';
|
12
|
-
import { MetaVaultClaimableFlushes } from '@spool.fi/spool-v2-sdk';
|
13
|
-
import { UserMetaVaultBalance } from './types/UserMetaVaultBalance';
|
14
12
|
import { PerqToBeansSwapInfo } from './types/PerqToBeansSwapInfo';
|
13
|
+
import BeanEntry from './types/BeanEntry';
|
15
14
|
export declare const IMPERSONATOR_HEADER = "impersonatorAddress";
|
16
15
|
export default class DripApi {
|
17
16
|
route: string;
|
18
17
|
constructor(route: string);
|
19
18
|
fetchAllVaults(): Promise<Vault[]>;
|
20
|
-
fetchAllMetaVaults(): Promise<MetaVault[]>;
|
21
19
|
fetchTokenPrice(tokenName: string): Promise<number>;
|
22
20
|
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number, token: string): Promise<string>;
|
23
21
|
getUserBalance(walletAddress: string, token: string, headers?: Headers): Promise<UserBalance>;
|
24
22
|
getUserBoostedNfts(walletAddress: string, vaultAddress: string, token: string, headers?: Headers): Promise<string[]>;
|
25
23
|
fetchVaultStats(): Promise<VaultStats>;
|
26
24
|
fetchVaultDetails(vaultAddress: string): Promise<Vault>;
|
27
|
-
fetchMetaVaultDetails(metaVaultAddress: string): Promise<MetaVault>;
|
28
25
|
fetchRewardsPerHour(vaultAddress: string, token: string): Promise<number>;
|
29
26
|
getSwapInfo(fromTokenAddress: string, toTokenAddress: string, amount: BigNumber, fromAddress: string): Promise<SwapInfo[]>;
|
30
27
|
fetchUserSVTBalance(vaultAddress: string, walletAddress: string, token: string): Promise<BigNumber>;
|
@@ -38,7 +35,7 @@ export default class DripApi {
|
|
38
35
|
fetchFastWithdrawNFTs(vaultAddress: string, walletAddress: string, token: string, headers?: Headers): Promise<QLFastRedeem[]>;
|
39
36
|
fetchUserRewards(walletAddress: string, token: string, headers?: Headers): Promise<UserRewards>;
|
40
37
|
fetchVaultsClaimableData(walletAddress: string, token: string, headers?: Headers): Promise<VaultClaimData>;
|
41
|
-
fetchAllLoyaltyCards(): Promise<
|
38
|
+
fetchAllLoyaltyCards(): Promise<LoyaltyCard[]>;
|
42
39
|
fetchOwnedLoyaltyCards(token: string, headers?: Headers): Promise<{
|
43
40
|
id: any;
|
44
41
|
tier: any;
|
@@ -61,13 +58,8 @@ export default class DripApi {
|
|
61
58
|
cost: number;
|
62
59
|
boost: any;
|
63
60
|
}>;
|
64
|
-
fetchUserMetaVaultBalance(userAddress: string, metaVaultAddress: string, token: string, headers?: Headers): Promise<any>;
|
65
61
|
fetchMyPerqData(userAddress: string, token: string, headers?: Headers): Promise<MyPerqData>;
|
66
62
|
getLoyaltyCardBoost(rewardId: string, token: string, headers?: Headers): Promise<number>;
|
67
|
-
fetchMyPerqMetaVaultsData(userAddress: string, token: string, headers?: Headers): Promise<MyPerqData>;
|
68
|
-
fetchAllUserMetaVaultBalance(userAddress: string, token: string, headers?: Headers): Promise<{
|
69
|
-
[metaVaultAddress: string]: UserMetaVaultBalance;
|
70
|
-
}>;
|
71
|
-
fetchClaimableFlushes(userAddress: string, metaVaultAddress: string, token: string, headers?: Headers): Promise<MetaVaultClaimableFlushes>;
|
72
63
|
getSwapPerqForBeansInfo(): Promise<PerqToBeansSwapInfo>;
|
64
|
+
fetchBeansHistory(walletAddress: string, token: string, headers?: Headers): Promise<BeanEntry[]>;
|
73
65
|
}
|
package/dist/DripApi.js
CHANGED
@@ -12,7 +12,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.IMPERSONATOR_HEADER = void 0;
|
13
13
|
const ethers_1 = require("ethers");
|
14
14
|
const DripConfig_1 = require("./DripConfig");
|
15
|
-
const utils_1 = require("./utils");
|
16
15
|
const WETH_TOKEN_ADDRESS = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
|
17
16
|
exports.IMPERSONATOR_HEADER = 'impersonatorAddress';
|
18
17
|
const AUTHORIZATION_HEADER = 'Authorization';
|
@@ -32,21 +31,6 @@ class DripApi {
|
|
32
31
|
}
|
33
32
|
});
|
34
33
|
}
|
35
|
-
fetchAllMetaVaults() {
|
36
|
-
return __awaiter(this, void 0, void 0, function* () {
|
37
|
-
const res = yield fetch(`${this.route}/api-be/api/metavault`);
|
38
|
-
if (res.ok) {
|
39
|
-
const data = yield res.json();
|
40
|
-
const metaVaults = data.map((metaVault) => {
|
41
|
-
return Object.assign(Object.assign({}, metaVault), { liveUntilFormatted: (0, utils_1.getMonthDayUTCTimeString)(metaVault.liveUntil), hasPoolEnded: (0, utils_1.hasPoolEnded)(metaVault.liveUntil) });
|
42
|
-
});
|
43
|
-
return metaVaults;
|
44
|
-
}
|
45
|
-
else {
|
46
|
-
throw Error(`${yield res.text()}`);
|
47
|
-
}
|
48
|
-
});
|
49
|
-
}
|
50
34
|
fetchTokenPrice(tokenName) {
|
51
35
|
return __awaiter(this, void 0, void 0, function* () {
|
52
36
|
const res = yield fetch(`${this.route}/api-be/api/tokenPrice?tokenName=${tokenName}`);
|
@@ -143,18 +127,6 @@ class DripApi {
|
|
143
127
|
}
|
144
128
|
});
|
145
129
|
}
|
146
|
-
fetchMetaVaultDetails(metaVaultAddress) {
|
147
|
-
return __awaiter(this, void 0, void 0, function* () {
|
148
|
-
const res = yield fetch(`${this.route}/api-be/api/metavault/${metaVaultAddress}`);
|
149
|
-
if (res.ok) {
|
150
|
-
const data = (yield res.json());
|
151
|
-
return data;
|
152
|
-
}
|
153
|
-
else {
|
154
|
-
throw Error(`${yield res.text()}`);
|
155
|
-
}
|
156
|
-
});
|
157
|
-
}
|
158
130
|
fetchRewardsPerHour(vaultAddress, token) {
|
159
131
|
return __awaiter(this, void 0, void 0, function* () {
|
160
132
|
const headers = new Headers();
|
@@ -386,18 +358,15 @@ class DripApi {
|
|
386
358
|
}
|
387
359
|
fetchAllLoyaltyCards() {
|
388
360
|
return __awaiter(this, void 0, void 0, function* () {
|
389
|
-
const res = yield fetch(`${this.route}/api-be/api/loyaltyCards`);
|
361
|
+
const res = yield fetch(`${this.route}/api-be/api/loyaltyCards/all`);
|
390
362
|
const data = yield res.json();
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
};
|
399
|
-
});
|
400
|
-
return mappedData;
|
363
|
+
return data.map((card) => ({
|
364
|
+
id: card.id,
|
365
|
+
tier: card.tier,
|
366
|
+
level: card.level,
|
367
|
+
cost: parseFloat(ethers_1.ethers.utils.formatUnits(card.cost.toString(), DripConfig_1.DRIP_TOKEN_DECIMALS)),
|
368
|
+
boost: card.boost
|
369
|
+
}));
|
401
370
|
});
|
402
371
|
}
|
403
372
|
fetchOwnedLoyaltyCards(token, headers) {
|
@@ -474,20 +443,6 @@ class DripApi {
|
|
474
443
|
};
|
475
444
|
});
|
476
445
|
}
|
477
|
-
fetchUserMetaVaultBalance(userAddress, metaVaultAddress, token, headers) {
|
478
|
-
return __awaiter(this, void 0, void 0, function* () {
|
479
|
-
const reqHeaders = headers ? headers : new Headers();
|
480
|
-
reqHeaders.append(AUTHORIZATION_HEADER, token);
|
481
|
-
if (reqHeaders.has(exports.IMPERSONATOR_HEADER)) {
|
482
|
-
userAddress = reqHeaders.get(exports.IMPERSONATOR_HEADER);
|
483
|
-
}
|
484
|
-
const res = yield fetch(`${this.route}/api-be/api/user/metavault/balance/${userAddress}/${metaVaultAddress}`, {
|
485
|
-
headers: reqHeaders,
|
486
|
-
});
|
487
|
-
const data = yield res.json();
|
488
|
-
return data;
|
489
|
-
});
|
490
|
-
}
|
491
446
|
fetchMyPerqData(userAddress, token, headers) {
|
492
447
|
return __awaiter(this, void 0, void 0, function* () {
|
493
448
|
const reqHeaders = headers ? headers : new Headers();
|
@@ -523,16 +478,9 @@ class DripApi {
|
|
523
478
|
}
|
524
479
|
});
|
525
480
|
}
|
526
|
-
|
481
|
+
getSwapPerqForBeansInfo() {
|
527
482
|
return __awaiter(this, void 0, void 0, function* () {
|
528
|
-
const
|
529
|
-
reqHeaders.append(AUTHORIZATION_HEADER, token);
|
530
|
-
if (reqHeaders.has(exports.IMPERSONATOR_HEADER)) {
|
531
|
-
userAddress = reqHeaders.get(exports.IMPERSONATOR_HEADER);
|
532
|
-
}
|
533
|
-
const res = yield fetch(`${this.route}/api-be/api/myperq/metavaults/${userAddress}`, {
|
534
|
-
headers: reqHeaders,
|
535
|
-
});
|
483
|
+
const res = yield fetch(`${this.route}/api-be/api/swap/price`, {});
|
536
484
|
if (res.ok) {
|
537
485
|
const data = yield res.json();
|
538
486
|
return data;
|
@@ -542,40 +490,34 @@ class DripApi {
|
|
542
490
|
}
|
543
491
|
});
|
544
492
|
}
|
545
|
-
|
546
|
-
return __awaiter(this, void 0, void 0, function* () {
|
547
|
-
const reqHeaders = headers ? headers : new Headers();
|
548
|
-
reqHeaders.append(AUTHORIZATION_HEADER, token);
|
549
|
-
if (reqHeaders.has(exports.IMPERSONATOR_HEADER)) {
|
550
|
-
userAddress = reqHeaders.get(exports.IMPERSONATOR_HEADER);
|
551
|
-
}
|
552
|
-
const res = yield fetch(`${this.route}/api-be/api/user/metavault/balance/${userAddress}`, {
|
553
|
-
headers: reqHeaders,
|
554
|
-
});
|
555
|
-
const data = yield res.json();
|
556
|
-
return data;
|
557
|
-
});
|
558
|
-
}
|
559
|
-
fetchClaimableFlushes(userAddress, metaVaultAddress, token, headers) {
|
493
|
+
fetchBeansHistory(walletAddress, token, headers) {
|
560
494
|
return __awaiter(this, void 0, void 0, function* () {
|
561
495
|
const reqHeaders = headers ? headers : new Headers();
|
562
496
|
reqHeaders.append(AUTHORIZATION_HEADER, token);
|
563
497
|
if (reqHeaders.has(exports.IMPERSONATOR_HEADER)) {
|
564
|
-
|
498
|
+
walletAddress = reqHeaders.get(exports.IMPERSONATOR_HEADER);
|
565
499
|
}
|
566
|
-
const res = yield fetch(`${this.route}/api-be/api/
|
500
|
+
const res = yield fetch(`${this.route}/api-be/api/beans/history/${walletAddress}`, {
|
501
|
+
method: 'GET',
|
567
502
|
headers: reqHeaders,
|
568
503
|
});
|
569
|
-
const data = yield res.json();
|
570
|
-
return data;
|
571
|
-
});
|
572
|
-
}
|
573
|
-
getSwapPerqForBeansInfo() {
|
574
|
-
return __awaiter(this, void 0, void 0, function* () {
|
575
|
-
const res = yield fetch(`${this.route}/api-be/api/swap/price`, {});
|
576
504
|
if (res.ok) {
|
577
505
|
const data = yield res.json();
|
578
|
-
|
506
|
+
const result = data.map((element) => {
|
507
|
+
const newBeanEntry = {
|
508
|
+
address: element.address,
|
509
|
+
reason: element.reason,
|
510
|
+
recycledAmount: element.recycledAmount,
|
511
|
+
beansAmount: element.beansAmount,
|
512
|
+
beansSum: element.beansSum,
|
513
|
+
amountDepositedInUsd: element.amountDepositedInUsd,
|
514
|
+
chainId: element.chainId,
|
515
|
+
nonce: element.nonce,
|
516
|
+
createdAt: element.createdAt
|
517
|
+
};
|
518
|
+
return newBeanEntry;
|
519
|
+
});
|
520
|
+
return result;
|
579
521
|
}
|
580
522
|
else {
|
581
523
|
throw Error(`${yield res.text()}`);
|
package/dist/DripConfig.d.ts
CHANGED
@@ -13,6 +13,7 @@ export declare class DripConfig {
|
|
13
13
|
smartVaultManagerAddress: string | undefined;
|
14
14
|
dripTokenAddress: string;
|
15
15
|
dripTokenRecyclerAddress: string;
|
16
|
+
dripSwapAndRecyclerAddress: string;
|
16
17
|
constructor(chain: Chain, dripRoute?: string);
|
17
18
|
getSwapAndDepositContractAddress(signer: Signer): Promise<string>;
|
18
19
|
getSmartVaultManagerAddress(signer: Signer): Promise<string>;
|
package/dist/DripConfig.js
CHANGED
@@ -20,10 +20,12 @@ var Chain;
|
|
20
20
|
})(Chain || (exports.Chain = Chain = {}));
|
21
21
|
const SUBGRAPH_URL_SEPOLIA = 'https://subgraph.satsuma-prod.com/49eb322da234/solidant/spool-v2-sepolia/api';
|
22
22
|
const RECYCLER_ADDRESS_SEPOLIA = '0x07F2264E199D62afe07E8288eC9D36d155fc3f24';
|
23
|
+
const SWAP_AND_RECYCLER_ADDRESS_SEPOLIA = '0xA4ed357FF233731860Ec8D0446FD95756d564014';
|
23
24
|
const DRIP_TOKEN_ADDRESS_SEPOLIA = '0x707B4Cc05645713d8Ea04FBC7192A0f2c1503d6E';
|
24
25
|
const SUBGRAPH_URL_MAINNET = 'https://subgraph.satsuma-prod.com/49eb322da234/solidant/spool-v2/api';
|
25
26
|
// const RECYCLER_ADDRESS_MAINNET = '';
|
26
|
-
// const
|
27
|
+
// const SWAP_AND_RECYCLER_ADDRESS_MAINNET = '0xA4ed357FF233731860Ec8D0446FD95756d564014';
|
28
|
+
const DRIP_TOKEN_ADDRESS_MAINNET = '0x2a414884a549ef5716bc1a4e648d3dc03f08b2cf';
|
27
29
|
const DEV_BACKEND_ROUTE = 'https://dev.drip.fi.io';
|
28
30
|
const PROD_BACKEND_ROUTE = 'https://perq.finance';
|
29
31
|
class DripConfig {
|
@@ -32,14 +34,16 @@ class DripConfig {
|
|
32
34
|
case Chain.MAINNET:
|
33
35
|
this.internalConfig = (0, spool_v2_sdk_1.getMainnetConfig)(SUBGRAPH_URL_MAINNET);
|
34
36
|
this.dripRoute = dripRoute !== undefined ? dripRoute : PROD_BACKEND_ROUTE;
|
35
|
-
this.dripTokenAddress =
|
37
|
+
this.dripTokenAddress = DRIP_TOKEN_ADDRESS_MAINNET;
|
36
38
|
this.dripTokenRecyclerAddress = exports.NULL_ADDRESS;
|
39
|
+
this.dripSwapAndRecyclerAddress = exports.NULL_ADDRESS;
|
37
40
|
break;
|
38
41
|
case Chain.SEPOLIA:
|
39
42
|
this.internalConfig = (0, spool_v2_sdk_1.getSepoliaConfig)(SUBGRAPH_URL_SEPOLIA);
|
40
43
|
this.dripRoute = dripRoute !== undefined ? dripRoute : DEV_BACKEND_ROUTE;
|
41
44
|
this.dripTokenAddress = DRIP_TOKEN_ADDRESS_SEPOLIA;
|
42
45
|
this.dripTokenRecyclerAddress = RECYCLER_ADDRESS_SEPOLIA;
|
46
|
+
this.dripSwapAndRecyclerAddress = SWAP_AND_RECYCLER_ADDRESS_SEPOLIA;
|
43
47
|
break;
|
44
48
|
}
|
45
49
|
}
|
package/dist/DripSdk.d.ts
CHANGED
@@ -11,18 +11,17 @@ import MyPerqData from './types/MyPerqData';
|
|
11
11
|
import { Chain } from './DripConfig';
|
12
12
|
import { BeansBalance } from './types/BeansBalance';
|
13
13
|
import { PerqToBeansSwapInfo } from './types/PerqToBeansSwapInfo';
|
14
|
-
import
|
15
|
-
import { UserMetaVaultBalance } from './types/UserMetaVaultBalance';
|
14
|
+
import BeanEntry from './types/BeanEntry';
|
16
15
|
export default class DripSdk {
|
17
16
|
private dripApi;
|
18
17
|
private dripTokenContract;
|
19
18
|
private dripTokenRecyclerContract;
|
19
|
+
private dripSwapAndRecyclerContract;
|
20
20
|
private spoolSdk?;
|
21
21
|
private signer?;
|
22
22
|
private dripConfig;
|
23
23
|
constructor(chain: Chain, signer?: Signer, dripRoute?: string);
|
24
24
|
getAllVaults(): Promise<Vault[]>;
|
25
|
-
getAllMetaVaults(): Promise<MetaVault[]>;
|
26
25
|
getVaultDetails(vaultAddress: string): Promise<Vault>;
|
27
26
|
getVaultStats(): Promise<VaultStats>;
|
28
27
|
getTokenPrice(tokenName: string): Promise<number>;
|
@@ -31,45 +30,40 @@ export default class DripSdk {
|
|
31
30
|
authenticate(): Promise<boolean>;
|
32
31
|
newDeposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
33
32
|
deposit(tokenAddress: string, vaultAddress: string, amount: string): Promise<string>;
|
34
|
-
depositMetaVault(metaVaultAddress: string, amount: string): Promise<string>;
|
35
33
|
private doDeposit;
|
36
34
|
getTokenAllowanceForCurrency(tokenAddress: string): Promise<string>;
|
37
35
|
getTokenAllowanceForRecycler(tokenAddress: string): Promise<BigNumber>;
|
36
|
+
getTokenAllowanceForSwapAndRecycler(tokenAddress: string): Promise<BigNumber>;
|
38
37
|
getExpectedSwapResult(fromTokenAddress: string, toTokenAddress: string, amount: string, decimals: number): Promise<string>;
|
39
38
|
getUserBalance(headers?: Headers): Promise<UserBalance>;
|
40
39
|
getUserBoostedNfts(vaultAddress: string, headers?: Headers): Promise<string[]>;
|
41
40
|
getRewardsPerHour(vaultAddress: string): Promise<number>;
|
42
41
|
getRewards(headers?: Headers): Promise<UserRewards>;
|
43
42
|
getMyPerqBalance(headers?: Headers): Promise<MyPerqData>;
|
44
|
-
getMyPerqMetaVaultsBalance(headers?: Headers): Promise<MyPerqData>;
|
45
43
|
getUserVaultBalance(vaultAddress: string, headers?: Headers): Promise<UserVaultBalance>;
|
46
|
-
getUserMetaVaultBalance(metaVaultAddress: string, headers?: Headers): Promise<UserMetaVaultBalance>;
|
47
|
-
getAllUserMetaVaultBalance(headers?: Headers): Promise<{
|
48
|
-
[metaVaultAddress: string]: UserMetaVaultBalance;
|
49
|
-
}>;
|
50
44
|
fastWithdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
51
45
|
swapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
52
46
|
newSwapAndDeposit(fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string, vaultAddress: string, ethAmount?: string): Promise<string>;
|
53
|
-
swapAndDepositMetaVault(metaVaultAddress: string, fromTokenAddress: string, toTokenAddress: string, fromTokenAmount: string): Promise<void>;
|
54
47
|
private doSwapAndDeposit;
|
55
48
|
withdraw(vaultAddress: string, amountToWithdraw?: string): Promise<string>;
|
56
|
-
withdrawMetavault(metaVaultAddress: string, amount?: string): Promise<string>;
|
57
|
-
claimWithdrawsMetaVault(metaVaultAddress: string): Promise<string>;
|
58
49
|
claimWithdraws(vaultAddress: string): Promise<string>;
|
59
50
|
getVaultsClaimableData(headers?: Headers): Promise<VaultClaimData>;
|
60
51
|
getBeansBalance(headers?: Headers): Promise<BeansBalance>;
|
52
|
+
getBeansHistory(headers?: Headers): Promise<BeanEntry[]>;
|
61
53
|
recycleTokens(tokenAddress: string | undefined, amountToRecycle: string, beneficiary: string | undefined, price: string, deadline: string, signature: string): Promise<string>;
|
54
|
+
swapAndRecycleETH(beneficiary: string, path: string[], minAmountOutWithDecimals: string, amountOfEth: string, price: string, deadline: string, signature: string): Promise<string>;
|
55
|
+
swapAndRecycleERC20(beneficiary: string, path: string[], minAmountOutWithDecimals: string, amountInWithDecimals: string, price: string, deadline: string, signature: string): Promise<string>;
|
62
56
|
upgradeLoyaltyCard(): Promise<LoyaltyCard>;
|
63
57
|
getNextLoyaltyCard(headers?: Headers): Promise<LoyaltyCard>;
|
64
58
|
getOwnedLoyaltyCards(headers?: Headers): Promise<LoyaltyCard>;
|
65
59
|
getAllLoyaltyCards(): Promise<LoyaltyCard[]>;
|
66
60
|
getLoyaltyCardBoost(rewardId: string, headers?: Headers): Promise<number>;
|
67
61
|
approveTokenForRecycler(tokenAddress: string, amount: string): Promise<string>;
|
62
|
+
approveTokenForSwapAndRecycler(tokenAddress: string, amount: string): Promise<string>;
|
68
63
|
approveTokenForSwapAndDeposit(tokenAddress: string, amount: string): Promise<string>;
|
69
64
|
approveTokenForDeposit(tokenAddress: string, amount: string): Promise<string>;
|
70
65
|
getDripTokenContractAddress(): string;
|
71
66
|
getSwapPerqForBeansInfo(): Promise<PerqToBeansSwapInfo>;
|
72
|
-
approveTokenForMetaVaultDeposit(tokenAddress: string, metaVaultAddress: string, amount: string): Promise<string>;
|
73
67
|
private generateRedeemBagStruct;
|
74
68
|
private getERC20Precission;
|
75
69
|
private calculatePendingDeposits;
|
@@ -80,5 +74,5 @@ export default class DripSdk {
|
|
80
74
|
private getTokenAllowanceForDeposit;
|
81
75
|
private getTokenAllowanceForSwapAndDeposit;
|
82
76
|
private getERC20TokenAllowance;
|
83
|
-
approveToken
|
77
|
+
private approveToken;
|
84
78
|
}
|
package/dist/DripSdk.js
CHANGED
@@ -20,6 +20,7 @@ const DripApi_1 = __importDefault(require("./DripApi"));
|
|
20
20
|
const js_cookie_1 = __importDefault(require("js-cookie"));
|
21
21
|
const DripTokenContract_1 = __importDefault(require("./contracts/DripTokenContract"));
|
22
22
|
const DripTokenRecyclerContract_1 = __importDefault(require("./contracts/DripTokenRecyclerContract"));
|
23
|
+
const DripSwapAndRecyclerContract_1 = __importDefault(require("./contracts/DripSwapAndRecyclerContract"));
|
23
24
|
class DripSdk {
|
24
25
|
constructor(chain, signer, dripRoute) {
|
25
26
|
this.signer = signer;
|
@@ -30,17 +31,13 @@ class DripSdk {
|
|
30
31
|
this.dripApi = new DripApi_1.default(this.dripConfig.dripRoute);
|
31
32
|
this.dripTokenContract = new DripTokenContract_1.default(this.dripConfig.dripTokenAddress, signer);
|
32
33
|
this.dripTokenRecyclerContract = new DripTokenRecyclerContract_1.default(this.dripConfig.dripTokenRecyclerAddress, signer);
|
34
|
+
this.dripSwapAndRecyclerContract = new DripSwapAndRecyclerContract_1.default(this.dripConfig.dripSwapAndRecyclerAddress, signer);
|
33
35
|
}
|
34
36
|
getAllVaults() {
|
35
37
|
return __awaiter(this, void 0, void 0, function* () {
|
36
38
|
return this.dripApi.fetchAllVaults();
|
37
39
|
});
|
38
40
|
}
|
39
|
-
getAllMetaVaults() {
|
40
|
-
return __awaiter(this, void 0, void 0, function* () {
|
41
|
-
return this.dripApi.fetchAllMetaVaults();
|
42
|
-
});
|
43
|
-
}
|
44
41
|
getVaultDetails(vaultAddress) {
|
45
42
|
return __awaiter(this, void 0, void 0, function* () {
|
46
43
|
return this.dripApi.fetchVaultDetails(vaultAddress);
|
@@ -121,23 +118,6 @@ class DripSdk {
|
|
121
118
|
return this.doDeposit(tokenAddress, vaultAddress, amount, true);
|
122
119
|
});
|
123
120
|
}
|
124
|
-
depositMetaVault(metaVaultAddress, amount) {
|
125
|
-
return __awaiter(this, void 0, void 0, function* () {
|
126
|
-
if (!this.signer) {
|
127
|
-
throw Error('No signer provided');
|
128
|
-
}
|
129
|
-
const metavault = yield this.dripApi.fetchMetaVaultDetails(metaVaultAddress);
|
130
|
-
if (!metavault) {
|
131
|
-
throw Error('Metavault not found');
|
132
|
-
}
|
133
|
-
const decimals = yield this.getERC20Precission(metavault.depositToken.tokenAddress);
|
134
|
-
const amountWithDecimals = parseFloat(parseFloat(amount).toFixed(decimals));
|
135
|
-
const amountToDeposit = ethers_1.ethers.utils.parseUnits(amountWithDecimals.toString(), decimals);
|
136
|
-
const depositTx = yield this.spoolSdk.metaVaultDeposit(metaVaultAddress.toLowerCase(), amountToDeposit);
|
137
|
-
const txReceipt = yield depositTx.wait();
|
138
|
-
return txReceipt.transactionHash;
|
139
|
-
});
|
140
|
-
}
|
141
121
|
doDeposit(tokenAddress, vaultAddress, amount, checkAllowance) {
|
142
122
|
return __awaiter(this, void 0, void 0, function* () {
|
143
123
|
if (!this.signer) {
|
@@ -186,6 +166,15 @@ class DripSdk {
|
|
186
166
|
return allowance;
|
187
167
|
});
|
188
168
|
}
|
169
|
+
getTokenAllowanceForSwapAndRecycler(tokenAddress) {
|
170
|
+
return __awaiter(this, void 0, void 0, function* () {
|
171
|
+
if (!this.signer) {
|
172
|
+
throw Error('No signer provided');
|
173
|
+
}
|
174
|
+
const allowance = yield this.getERC20TokenAllowance(this.dripSwapAndRecyclerContract.getContractAddress(), tokenAddress);
|
175
|
+
return allowance;
|
176
|
+
});
|
177
|
+
}
|
189
178
|
getExpectedSwapResult(fromTokenAddress, toTokenAddress, amount, decimals) {
|
190
179
|
return __awaiter(this, void 0, void 0, function* () {
|
191
180
|
const userAddress = yield this.signer.getAddress();
|
@@ -234,14 +223,6 @@ class DripSdk {
|
|
234
223
|
return myPerqBalance;
|
235
224
|
});
|
236
225
|
}
|
237
|
-
getMyPerqMetaVaultsBalance(headers) {
|
238
|
-
return __awaiter(this, void 0, void 0, function* () {
|
239
|
-
const userAddress = yield this.signer.getAddress();
|
240
|
-
const authData = yield this.isUserAuthenticated();
|
241
|
-
const myPerqMetaVaultsBalance = this.dripApi.fetchMyPerqMetaVaultsData(userAddress, authData.token, headers);
|
242
|
-
return myPerqMetaVaultsBalance;
|
243
|
-
});
|
244
|
-
}
|
245
226
|
getUserVaultBalance(vaultAddress, headers) {
|
246
227
|
return __awaiter(this, void 0, void 0, function* () {
|
247
228
|
const userAddress = yield this.signer.getAddress();
|
@@ -265,38 +246,6 @@ class DripSdk {
|
|
265
246
|
};
|
266
247
|
});
|
267
248
|
}
|
268
|
-
getUserMetaVaultBalance(metaVaultAddress, headers) {
|
269
|
-
return __awaiter(this, void 0, void 0, function* () {
|
270
|
-
const authData = yield this.isUserAuthenticated();
|
271
|
-
const balance = yield this.dripApi.fetchUserMetaVaultBalance(authData.address, metaVaultAddress, authData.token, headers);
|
272
|
-
return {
|
273
|
-
userBalance: balance.userBalance,
|
274
|
-
pendingUserBalance: balance.pendingUserBalance,
|
275
|
-
pendingWithdrawalBalance: balance.pendingWithdrawalBalance,
|
276
|
-
claimable: balance.claimable
|
277
|
-
};
|
278
|
-
});
|
279
|
-
}
|
280
|
-
getAllUserMetaVaultBalance(headers) {
|
281
|
-
return __awaiter(this, void 0, void 0, function* () {
|
282
|
-
const authData = yield this.isUserAuthenticated();
|
283
|
-
const balances = yield this.dripApi.fetchAllUserMetaVaultBalance(authData.address, authData.token, headers);
|
284
|
-
const addressArray = Object.keys(balances);
|
285
|
-
const result = {};
|
286
|
-
for (const address of addressArray) {
|
287
|
-
if (result[address]) {
|
288
|
-
continue;
|
289
|
-
}
|
290
|
-
result[address] = {
|
291
|
-
userBalance: balances[address].userBalance,
|
292
|
-
pendingUserBalance: balances[address].pendingUserBalance,
|
293
|
-
pendingWithdrawalBalance: balances[address].pendingWithdrawalBalance,
|
294
|
-
claimable: balances[address].claimable
|
295
|
-
};
|
296
|
-
}
|
297
|
-
return result;
|
298
|
-
});
|
299
|
-
}
|
300
249
|
fastWithdraw(vaultAddress, amountToWithdraw) {
|
301
250
|
return __awaiter(this, void 0, void 0, function* () {
|
302
251
|
var _a, _b;
|
@@ -330,31 +279,6 @@ class DripSdk {
|
|
330
279
|
return this.doSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, false, ethAmount);
|
331
280
|
});
|
332
281
|
}
|
333
|
-
swapAndDepositMetaVault(metaVaultAddress, fromTokenAddress, toTokenAddress, fromTokenAmount) {
|
334
|
-
return __awaiter(this, void 0, void 0, function* () {
|
335
|
-
var _a;
|
336
|
-
if (parseFloat(fromTokenAmount) <= 0) {
|
337
|
-
throw Error('fromTokenAmount must be bigger than 0');
|
338
|
-
}
|
339
|
-
// parse from token amount according to decimals
|
340
|
-
const decimals = yield this.getERC20Precission(fromTokenAddress);
|
341
|
-
const parsedAmount = ethers_1.ethers.utils.parseUnits(fromTokenAmount, decimals);
|
342
|
-
const tokenAllowance = yield this.getTokenAllowanceForSwapAndDeposit(fromTokenAddress);
|
343
|
-
if (tokenAllowance.lt(parsedAmount)) {
|
344
|
-
throw Error(`current allowance: ${tokenAllowance} is less than required: ${parsedAmount}`);
|
345
|
-
}
|
346
|
-
const userAddress = yield this.signer.getAddress();
|
347
|
-
const swapInfo = yield this.dripApi.getSwapInfo(fromTokenAddress, toTokenAddress, parsedAmount, userAddress);
|
348
|
-
const swapAndDepositBag = {
|
349
|
-
metaVault: metaVaultAddress,
|
350
|
-
inTokens: [fromTokenAddress],
|
351
|
-
inAmounts: [parsedAmount],
|
352
|
-
swapInfo
|
353
|
-
};
|
354
|
-
console.log(`swapAndDepositBag: ${JSON.stringify(swapAndDepositBag, null, 2)}`);
|
355
|
-
yield ((_a = this.spoolSdk) === null || _a === void 0 ? void 0 : _a.metaVaultSwapAndDeposit(swapAndDepositBag));
|
356
|
-
});
|
357
|
-
}
|
358
282
|
doSwapAndDeposit(fromTokenAddress, toTokenAddress, fromTokenAmount, vaultAddress, checkAllowance, ethAmount) {
|
359
283
|
return __awaiter(this, void 0, void 0, function* () {
|
360
284
|
const userAddress = yield this.signer.getAddress();
|
@@ -407,47 +331,6 @@ class DripSdk {
|
|
407
331
|
return redeemTxReceipt.transactionHash;
|
408
332
|
});
|
409
333
|
}
|
410
|
-
withdrawMetavault(metaVaultAddress, amount) {
|
411
|
-
return __awaiter(this, void 0, void 0, function* () {
|
412
|
-
if (!this.signer) {
|
413
|
-
throw Error('No signer provided');
|
414
|
-
}
|
415
|
-
const authData = yield this.isUserAuthenticated();
|
416
|
-
const balance = yield this.dripApi.fetchUserMetaVaultBalance(authData.address, metaVaultAddress, authData.token);
|
417
|
-
if (0 == balance.userBalance || (amount !== undefined && parseFloat(amount) > balance.userBalance)) {
|
418
|
-
throw Error('Not enough funds to withdraw');
|
419
|
-
}
|
420
|
-
if (amount !== undefined && parseFloat(amount) === 0) {
|
421
|
-
throw Error('Amount to withdraw must be bigger than 0');
|
422
|
-
}
|
423
|
-
//If amount is undefined means user wants to withdraw all funds
|
424
|
-
const sharesToWithdraw = amount !== undefined ? ((parseFloat(amount) * balance.userBalanceShares) / balance.userBalance).toFixed(0) : balance.userBalanceShares;
|
425
|
-
const depositTx = yield this.spoolSdk.metaVaultRedeem(metaVaultAddress, sharesToWithdraw, balance.userClaimableFlushIndexes);
|
426
|
-
const txReceipt = yield depositTx.wait();
|
427
|
-
return txReceipt.transactionHash;
|
428
|
-
});
|
429
|
-
}
|
430
|
-
claimWithdrawsMetaVault(metaVaultAddress) {
|
431
|
-
return __awaiter(this, void 0, void 0, function* () {
|
432
|
-
if (!this.signer) {
|
433
|
-
throw Error('No signer provided');
|
434
|
-
}
|
435
|
-
const authData = yield this.isUserAuthenticated();
|
436
|
-
const metaVaultClaimableFlushes = yield this.dripApi.fetchClaimableFlushes(authData.address.toLowerCase(), metaVaultAddress.toLowerCase(), authData.token);
|
437
|
-
const flushIndexes = metaVaultClaimableFlushes.unclaimedWithdraws.reduce((acc, item) => {
|
438
|
-
if (item.isFlushed) {
|
439
|
-
acc.push(item.flushIndex.toString());
|
440
|
-
}
|
441
|
-
return acc;
|
442
|
-
}, []);
|
443
|
-
if (flushIndexes.length === 0) {
|
444
|
-
throw Error('No funds to claim');
|
445
|
-
}
|
446
|
-
const metaVaultWithdrawTx = yield this.spoolSdk.metaVaultWithdraw(metaVaultAddress, flushIndexes);
|
447
|
-
const txReceipt = yield metaVaultWithdrawTx.wait();
|
448
|
-
return txReceipt.transactionHash;
|
449
|
-
});
|
450
|
-
}
|
451
334
|
claimWithdraws(vaultAddress) {
|
452
335
|
return __awaiter(this, void 0, void 0, function* () {
|
453
336
|
const userAddress = yield this.signer.getAddress();
|
@@ -490,6 +373,15 @@ class DripSdk {
|
|
490
373
|
return this.dripApi.fetchBeansBalance(authData.token, headers);
|
491
374
|
});
|
492
375
|
}
|
376
|
+
getBeansHistory(headers) {
|
377
|
+
return __awaiter(this, void 0, void 0, function* () {
|
378
|
+
const authData = yield this.isUserAuthenticated();
|
379
|
+
if (!authData.isAuthenticated) {
|
380
|
+
throw Error(`User not authenticated: ${authData.message}`);
|
381
|
+
}
|
382
|
+
return this.dripApi.fetchBeansHistory(authData.address, authData.token, headers);
|
383
|
+
});
|
384
|
+
}
|
493
385
|
recycleTokens() {
|
494
386
|
return __awaiter(this, arguments, void 0, function* (tokenAddress = this.dripConfig.dripTokenAddress, amountToRecycle, beneficiary = DripConfig_1.NULL_ADDRESS, price, deadline, signature) {
|
495
387
|
const authData = yield this.isUserAuthenticated();
|
@@ -506,6 +398,43 @@ class DripSdk {
|
|
506
398
|
return receipt.transactionHash;
|
507
399
|
});
|
508
400
|
}
|
401
|
+
swapAndRecycleETH(beneficiary, path, minAmountOutWithDecimals, amountOfEth, price, deadline, signature) {
|
402
|
+
return __awaiter(this, void 0, void 0, function* () {
|
403
|
+
const authData = yield this.isUserAuthenticated();
|
404
|
+
if (!authData.isAuthenticated) {
|
405
|
+
throw Error(`User not authenticated: ${authData.message}`);
|
406
|
+
}
|
407
|
+
if (this.dripConfig.dripSwapAndRecyclerAddress === DripConfig_1.NULL_ADDRESS) {
|
408
|
+
throw Error('Recycler contract address not defined');
|
409
|
+
}
|
410
|
+
const swapAndRecycleTx = yield this.dripSwapAndRecyclerContract.swapETHAndRecycle(beneficiary, path, minAmountOutWithDecimals, amountOfEth, price, deadline, signature);
|
411
|
+
const receipt = yield swapAndRecycleTx.wait();
|
412
|
+
return receipt.transactionHash;
|
413
|
+
});
|
414
|
+
}
|
415
|
+
swapAndRecycleERC20(beneficiary, path, minAmountOutWithDecimals, amountInWithDecimals, price, deadline, signature) {
|
416
|
+
return __awaiter(this, void 0, void 0, function* () {
|
417
|
+
const authData = yield this.isUserAuthenticated();
|
418
|
+
if (!authData.isAuthenticated) {
|
419
|
+
throw Error(`User not authenticated: ${authData.message}`);
|
420
|
+
}
|
421
|
+
if (this.dripConfig.dripSwapAndRecyclerAddress === DripConfig_1.NULL_ADDRESS) {
|
422
|
+
throw Error('Recycler contract address not defined');
|
423
|
+
}
|
424
|
+
console.log("swap and recycle ERC-20 with this: ", {
|
425
|
+
beneficiary,
|
426
|
+
path,
|
427
|
+
amountInWithDecimals,
|
428
|
+
minAmountOutWithDecimals,
|
429
|
+
price,
|
430
|
+
deadline,
|
431
|
+
signature
|
432
|
+
});
|
433
|
+
const swapAndRecycleTx = yield this.dripSwapAndRecyclerContract.swapAndRecycle(beneficiary, path, amountInWithDecimals, minAmountOutWithDecimals, price, deadline, signature);
|
434
|
+
const receipt = yield swapAndRecycleTx.wait();
|
435
|
+
return receipt.transactionHash;
|
436
|
+
});
|
437
|
+
}
|
509
438
|
upgradeLoyaltyCard() {
|
510
439
|
return __awaiter(this, void 0, void 0, function* () {
|
511
440
|
const authData = yield this.isUserAuthenticated();
|
@@ -558,6 +487,17 @@ class DripSdk {
|
|
558
487
|
return yield this.approveToken(tokenAddress, amount, this.dripConfig.dripTokenRecyclerAddress);
|
559
488
|
});
|
560
489
|
}
|
490
|
+
approveTokenForSwapAndRecycler(tokenAddress, amount) {
|
491
|
+
return __awaiter(this, void 0, void 0, function* () {
|
492
|
+
if (!this.signer) {
|
493
|
+
throw Error('No signer provided');
|
494
|
+
}
|
495
|
+
if (this.dripConfig.dripSwapAndRecyclerAddress === DripConfig_1.NULL_ADDRESS) {
|
496
|
+
throw Error('Recycler contract address not defined');
|
497
|
+
}
|
498
|
+
return yield this.approveToken(tokenAddress, amount, this.dripConfig.dripSwapAndRecyclerAddress);
|
499
|
+
});
|
500
|
+
}
|
561
501
|
approveTokenForSwapAndDeposit(tokenAddress, amount) {
|
562
502
|
return __awaiter(this, void 0, void 0, function* () {
|
563
503
|
if (!this.signer) {
|
@@ -584,14 +524,6 @@ class DripSdk {
|
|
584
524
|
return this.dripApi.getSwapPerqForBeansInfo();
|
585
525
|
});
|
586
526
|
}
|
587
|
-
approveTokenForMetaVaultDeposit(tokenAddress, metaVaultAddress, amount) {
|
588
|
-
return __awaiter(this, void 0, void 0, function* () {
|
589
|
-
if (!this.signer) {
|
590
|
-
throw Error('No signer provided');
|
591
|
-
}
|
592
|
-
return yield this.approveToken(tokenAddress, amount, metaVaultAddress);
|
593
|
-
});
|
594
|
-
}
|
595
527
|
generateRedeemBagStruct(vault, signerAddress, amountToWithdraw) {
|
596
528
|
return __awaiter(this, void 0, void 0, function* () {
|
597
529
|
if (!this.spoolSdk) {
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { ContractTransaction, ethers } from 'ethers';
|
2
|
+
import BaseDripContract from './BaseDripContract';
|
3
|
+
export default class DripSwapAndRecyclerContract extends BaseDripContract {
|
4
|
+
constructor(address: string, signer?: ethers.Signer);
|
5
|
+
swapAndRecycle(beneficiary: string | undefined, path: string[], amountInWithDecimals: string, minAmountOutWithDecimals: string, price: string, deadline: string, signature: string): Promise<ContractTransaction>;
|
6
|
+
swapETHAndRecycle(beneficiary: string | undefined, path: string[], minAmountOutWithDecimals: string, amountInEth: string, price: string, deadline: string, signature: string): Promise<ContractTransaction>;
|
7
|
+
}
|