@kasufinance/kasu-sdk 1.0.1

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.
Files changed (219) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.json +90 -0
  3. package/.github/workflows/ci.yml +0 -0
  4. package/.github/workflows/main.yml +43 -0
  5. package/.prettierignore +3 -0
  6. package/.prettierrc +28 -0
  7. package/abis/IClearingCoordinator.abi.json +410 -0
  8. package/abis/IERC20Metadata.abi.json +224 -0
  9. package/abis/IFeeManager.abi.json +66 -0
  10. package/abis/IKSULocking.abi.json +754 -0
  11. package/abis/IKasuAllowList.abi.json +455 -0
  12. package/abis/IKasuController.abi.json +423 -0
  13. package/abis/IKasuNFTs.abi.json +1523 -0
  14. package/abis/IKsuPrice.abi.json +15 -0
  15. package/abis/ILendingPool.abi.json +1431 -0
  16. package/abis/ILendingPoolFactory.abi.json +97 -0
  17. package/abis/ILendingPoolManager.abi.json +1347 -0
  18. package/abis/ILendingPoolTranche.abi.json +1317 -0
  19. package/abis/IPriceFeed.abi.json +1 -0
  20. package/abis/ISystemVariables.abi.json +431 -0
  21. package/abis/IUserLoyaltyRewards.abi.json +288 -0
  22. package/abis/IUserManager.abi.json +321 -0
  23. package/abis/KSULockBonus.abi.json +91 -0
  24. package/abis/KasuPoolExternalTVL.abi.json +812 -0
  25. package/abis/Swapper.abi.json +146 -0
  26. package/copy-abi.ps1 +15 -0
  27. package/dist/bundle.cjs.js +21646 -0
  28. package/dist/bundle.esm.js +21644 -0
  29. package/dist/contracts/IClearingCoordinatorAbi.d.ts +169 -0
  30. package/dist/contracts/IClearingCoordinatorAbi.js +1 -0
  31. package/dist/contracts/IERC20MetadataAbi.d.ts +162 -0
  32. package/dist/contracts/IERC20MetadataAbi.js +1 -0
  33. package/dist/contracts/IFeeManagerAbi.d.ts +96 -0
  34. package/dist/contracts/IFeeManagerAbi.js +1 -0
  35. package/dist/contracts/IKSULockingAbi.d.ts +466 -0
  36. package/dist/contracts/IKSULockingAbi.js +1 -0
  37. package/dist/contracts/IKasuAllowListAbi.d.ts +304 -0
  38. package/dist/contracts/IKasuAllowListAbi.js +1 -0
  39. package/dist/contracts/IKasuControllerAbi.d.ts +309 -0
  40. package/dist/contracts/IKasuControllerAbi.js +1 -0
  41. package/dist/contracts/IKasuNFTsAbi.d.ts +1121 -0
  42. package/dist/contracts/IKasuNFTsAbi.js +1 -0
  43. package/dist/contracts/IKsuPriceAbi.d.ts +42 -0
  44. package/dist/contracts/IKsuPriceAbi.js +1 -0
  45. package/dist/contracts/ILendingPoolAbi.d.ts +968 -0
  46. package/dist/contracts/ILendingPoolAbi.js +1 -0
  47. package/dist/contracts/ILendingPoolFactoryAbi.d.ts +103 -0
  48. package/dist/contracts/ILendingPoolFactoryAbi.js +1 -0
  49. package/dist/contracts/ILendingPoolManagerAbi.d.ts +779 -0
  50. package/dist/contracts/ILendingPoolManagerAbi.js +1 -0
  51. package/dist/contracts/ILendingPoolTrancheAbi.d.ts +752 -0
  52. package/dist/contracts/ILendingPoolTrancheAbi.js +1 -0
  53. package/dist/contracts/ISystemVariablesAbi.d.ts +378 -0
  54. package/dist/contracts/ISystemVariablesAbi.js +1 -0
  55. package/dist/contracts/IUserLoyaltyRewardsAbi.d.ts +248 -0
  56. package/dist/contracts/IUserLoyaltyRewardsAbi.js +1 -0
  57. package/dist/contracts/IUserManagerAbi.d.ts +270 -0
  58. package/dist/contracts/IUserManagerAbi.js +1 -0
  59. package/dist/contracts/KSULockBonusAbi.d.ts +61 -0
  60. package/dist/contracts/KSULockBonusAbi.js +1 -0
  61. package/dist/contracts/KasuPoolExternalTVLAbi.d.ts +411 -0
  62. package/dist/contracts/KasuPoolExternalTVLAbi.js +1 -0
  63. package/dist/contracts/SwapperAbi.d.ts +120 -0
  64. package/dist/contracts/SwapperAbi.js +1 -0
  65. package/dist/contracts/common.d.ts +21 -0
  66. package/dist/contracts/common.js +1 -0
  67. package/dist/contracts/factories/IClearingCoordinatorAbi__factory.d.ts +320 -0
  68. package/dist/contracts/factories/IClearingCoordinatorAbi__factory.js +423 -0
  69. package/dist/contracts/factories/IERC20MetadataAbi__factory.d.ts +178 -0
  70. package/dist/contracts/factories/IERC20MetadataAbi__factory.js +237 -0
  71. package/dist/contracts/factories/IFeeManagerAbi__factory.d.ts +59 -0
  72. package/dist/contracts/factories/IFeeManagerAbi__factory.js +79 -0
  73. package/dist/contracts/factories/IKSULockingAbi__factory.d.ts +588 -0
  74. package/dist/contracts/factories/IKSULockingAbi__factory.js +767 -0
  75. package/dist/contracts/factories/IKasuAllowListAbi__factory.d.ts +354 -0
  76. package/dist/contracts/factories/IKasuAllowListAbi__factory.js +468 -0
  77. package/dist/contracts/factories/IKasuControllerAbi__factory.d.ts +339 -0
  78. package/dist/contracts/factories/IKasuControllerAbi__factory.js +436 -0
  79. package/dist/contracts/factories/IKasuNFTsAbi__factory.d.ts +1629 -0
  80. package/dist/contracts/factories/IKasuNFTsAbi__factory.js +2108 -0
  81. package/dist/contracts/factories/IKsuPriceAbi__factory.d.ts +18 -0
  82. package/dist/contracts/factories/IKsuPriceAbi__factory.js +28 -0
  83. package/dist/contracts/factories/ILendingPoolAbi__factory.d.ts +1109 -0
  84. package/dist/contracts/factories/ILendingPoolAbi__factory.js +1444 -0
  85. package/dist/contracts/factories/ILendingPoolFactoryAbi__factory.d.ts +81 -0
  86. package/dist/contracts/factories/ILendingPoolFactoryAbi__factory.js +110 -0
  87. package/dist/contracts/factories/ILendingPoolManagerAbi__factory.d.ts +1045 -0
  88. package/dist/contracts/factories/ILendingPoolManagerAbi__factory.js +1360 -0
  89. package/dist/contracts/factories/ILendingPoolTrancheAbi__factory.d.ts +1015 -0
  90. package/dist/contracts/factories/ILendingPoolTrancheAbi__factory.js +1330 -0
  91. package/dist/contracts/factories/ISystemVariablesAbi__factory.d.ts +338 -0
  92. package/dist/contracts/factories/ISystemVariablesAbi__factory.js +444 -0
  93. package/dist/contracts/factories/IUserLoyaltyRewardsAbi__factory.d.ts +230 -0
  94. package/dist/contracts/factories/IUserLoyaltyRewardsAbi__factory.js +301 -0
  95. package/dist/contracts/factories/IUserManagerAbi__factory.d.ts +250 -0
  96. package/dist/contracts/factories/IUserManagerAbi__factory.js +334 -0
  97. package/dist/contracts/factories/KSULockBonusAbi__factory.d.ts +76 -0
  98. package/dist/contracts/factories/KSULockBonusAbi__factory.js +104 -0
  99. package/dist/contracts/factories/KasuPoolExternalTVLAbi__factory.d.ts +631 -0
  100. package/dist/contracts/factories/KasuPoolExternalTVLAbi__factory.js +825 -0
  101. package/dist/contracts/factories/SwapperAbi__factory.d.ts +120 -0
  102. package/dist/contracts/factories/SwapperAbi__factory.js +159 -0
  103. package/dist/contracts/factories/index.d.ts +18 -0
  104. package/dist/contracts/factories/index.js +21 -0
  105. package/dist/contracts/index.d.ts +37 -0
  106. package/dist/contracts/index.js +19 -0
  107. package/dist/index.d.ts +17 -0
  108. package/dist/index.js +16 -0
  109. package/dist/sdk-config.d.ts +22 -0
  110. package/dist/sdk-config.js +9 -0
  111. package/dist/services/DataService/data-service.d.ts +37 -0
  112. package/dist/services/DataService/data-service.js +586 -0
  113. package/dist/services/DataService/directus-types.d.ts +187 -0
  114. package/dist/services/DataService/directus-types.js +1 -0
  115. package/dist/services/DataService/queries.d.ts +7 -0
  116. package/dist/services/DataService/queries.js +158 -0
  117. package/dist/services/DataService/subgraph-types.d.ts +95 -0
  118. package/dist/services/DataService/subgraph-types.js +1 -0
  119. package/dist/services/DataService/types.d.ts +169 -0
  120. package/dist/services/DataService/types.js +1 -0
  121. package/dist/services/Locking/locking.d.ts +61 -0
  122. package/dist/services/Locking/locking.js +344 -0
  123. package/dist/services/Locking/queries.d.ts +10 -0
  124. package/dist/services/Locking/queries.js +108 -0
  125. package/dist/services/Locking/types.d.ts +117 -0
  126. package/dist/services/Locking/types.js +1 -0
  127. package/dist/services/Portfolio/portfolio.d.ts +22 -0
  128. package/dist/services/Portfolio/portfolio.js +325 -0
  129. package/dist/services/Portfolio/queries.d.ts +2 -0
  130. package/dist/services/Portfolio/queries.js +164 -0
  131. package/dist/services/Portfolio/types.d.ts +206 -0
  132. package/dist/services/Portfolio/types.js +1 -0
  133. package/dist/services/Swapper/swapper.d.ts +11 -0
  134. package/dist/services/Swapper/swapper.js +97 -0
  135. package/dist/services/Swapper/types.d.ts +51 -0
  136. package/dist/services/Swapper/types.js +1 -0
  137. package/dist/services/UserLending/helper.d.ts +2 -0
  138. package/dist/services/UserLending/helper.js +16 -0
  139. package/dist/services/UserLending/queries.d.ts +8 -0
  140. package/dist/services/UserLending/queries.js +188 -0
  141. package/dist/services/UserLending/subgraph-types.d.ts +147 -0
  142. package/dist/services/UserLending/subgraph-types.js +6 -0
  143. package/dist/services/UserLending/types.d.ts +102 -0
  144. package/dist/services/UserLending/types.js +13 -0
  145. package/dist/services/UserLending/user-lending.d.ts +55 -0
  146. package/dist/services/UserLending/user-lending.js +490 -0
  147. package/dist/services/shared.d.ts +1 -0
  148. package/dist/services/shared.js +11 -0
  149. package/dist/tests/sample.test.d.ts +1 -0
  150. package/dist/tests/sample.test.js +32 -0
  151. package/index.ts +2 -0
  152. package/jest-config.ts +9 -0
  153. package/jest.config.js +8 -0
  154. package/package.json +49 -0
  155. package/rollup.config.js +45 -0
  156. package/src/contracts/IClearingCoordinatorAbi.ts +406 -0
  157. package/src/contracts/IERC20MetadataAbi.ts +364 -0
  158. package/src/contracts/IFeeManagerAbi.ts +182 -0
  159. package/src/contracts/IKSULockingAbi.ts +965 -0
  160. package/src/contracts/IKasuAllowListAbi.ts +605 -0
  161. package/src/contracts/IKasuControllerAbi.ts +703 -0
  162. package/src/contracts/IKasuNFTsAbi.ts +2744 -0
  163. package/src/contracts/IKsuPriceAbi.ts +87 -0
  164. package/src/contracts/ILendingPoolAbi.ts +2081 -0
  165. package/src/contracts/ILendingPoolFactoryAbi.ts +161 -0
  166. package/src/contracts/ILendingPoolManagerAbi.ts +1917 -0
  167. package/src/contracts/ILendingPoolTrancheAbi.ts +1911 -0
  168. package/src/contracts/ISystemVariablesAbi.ts +908 -0
  169. package/src/contracts/IUserLoyaltyRewardsAbi.ts +544 -0
  170. package/src/contracts/IUserManagerAbi.ts +612 -0
  171. package/src/contracts/KSULockBonusAbi.ts +124 -0
  172. package/src/contracts/KasuPoolExternalTVLAbi.ts +1071 -0
  173. package/src/contracts/SwapperAbi.ts +266 -0
  174. package/src/contracts/common.ts +44 -0
  175. package/src/contracts/factories/IClearingCoordinatorAbi__factory.ts +438 -0
  176. package/src/contracts/factories/IERC20MetadataAbi__factory.ts +248 -0
  177. package/src/contracts/factories/IFeeManagerAbi__factory.ts +90 -0
  178. package/src/contracts/factories/IKSULockingAbi__factory.ts +778 -0
  179. package/src/contracts/factories/IKasuAllowListAbi__factory.ts +479 -0
  180. package/src/contracts/factories/IKasuControllerAbi__factory.ts +447 -0
  181. package/src/contracts/factories/IKasuNFTsAbi__factory.ts +2116 -0
  182. package/src/contracts/factories/IKsuPriceAbi__factory.ts +36 -0
  183. package/src/contracts/factories/ILendingPoolAbi__factory.ts +1455 -0
  184. package/src/contracts/factories/ILendingPoolFactoryAbi__factory.ts +125 -0
  185. package/src/contracts/factories/ILendingPoolManagerAbi__factory.ts +1375 -0
  186. package/src/contracts/factories/ILendingPoolTrancheAbi__factory.ts +1345 -0
  187. package/src/contracts/factories/ISystemVariablesAbi__factory.ts +455 -0
  188. package/src/contracts/factories/IUserLoyaltyRewardsAbi__factory.ts +316 -0
  189. package/src/contracts/factories/IUserManagerAbi__factory.ts +345 -0
  190. package/src/contracts/factories/KSULockBonusAbi__factory.ts +115 -0
  191. package/src/contracts/factories/KasuPoolExternalTVLAbi__factory.ts +840 -0
  192. package/src/contracts/factories/SwapperAbi__factory.ts +167 -0
  193. package/src/contracts/factories/index.ts +21 -0
  194. package/src/contracts/index.ts +40 -0
  195. package/src/index.ts +27 -0
  196. package/src/sdk-config.ts +35 -0
  197. package/src/services/DataService/data-service.ts +1017 -0
  198. package/src/services/DataService/directus-types.ts +199 -0
  199. package/src/services/DataService/queries.ts +165 -0
  200. package/src/services/DataService/subgraph-types.ts +104 -0
  201. package/src/services/DataService/types.ts +184 -0
  202. package/src/services/Locking/locking.ts +541 -0
  203. package/src/services/Locking/queries.ts +118 -0
  204. package/src/services/Locking/types.ts +141 -0
  205. package/src/services/Portfolio/portfolio.ts +593 -0
  206. package/src/services/Portfolio/queries.ts +166 -0
  207. package/src/services/Portfolio/types.ts +220 -0
  208. package/src/services/Swapper/swapper.ts +158 -0
  209. package/src/services/Swapper/types.ts +54 -0
  210. package/src/services/UserLending/helper.ts +28 -0
  211. package/src/services/UserLending/queries.ts +196 -0
  212. package/src/services/UserLending/subgraph-types.ts +173 -0
  213. package/src/services/UserLending/types.ts +123 -0
  214. package/src/services/UserLending/user-lending.ts +933 -0
  215. package/src/services/shared.ts +11 -0
  216. package/src/tests/sample.test.ts +44 -0
  217. package/tsconfig.json +27 -0
  218. package/tsconfig.tsbuildinfo +1 -0
  219. package/versioner.sh +6 -0
@@ -0,0 +1,166 @@
1
+ import { gql } from 'graphql-request';
2
+
3
+ export const lastEpochQuery = gql`
4
+ query LastEpochQuery(
5
+ $userAddress: String!
6
+ $epochId: String!
7
+ $unusedPools: [String]!
8
+ ) {
9
+ user(id: $userAddress) {
10
+ lendingPoolUserDetails(
11
+ where: { lendingPool_not_in: $unusedPools }
12
+ ) {
13
+ id
14
+ lendingPool {
15
+ id
16
+ name
17
+ balance
18
+ tranches {
19
+ shares
20
+ }
21
+ }
22
+ lendingPoolTrancheUserDetails {
23
+ lendingPoolTrancheUserEpochSharesUpdates(
24
+ orderDirection: desc
25
+ orderBy: shareUpdatesIndex
26
+ where: { epochId_lte: $epochId }
27
+ first: 1
28
+ ) {
29
+ shares
30
+ }
31
+ userLendingPoolTrancheFixedTermDepositLocks {
32
+ lockId
33
+ initialTrancheShares
34
+ isWithdrawalRequested
35
+ createdOn
36
+ epochLockStart
37
+ epochLockEnd
38
+ lendingPoolTrancheFixedTermConfig {
39
+ epochLockDuration
40
+ }
41
+ }
42
+ tranche {
43
+ id
44
+ lendingPoolTrancheShareUpdates(
45
+ orderBy: shareUpdatesIndex
46
+ orderDirection: desc
47
+ where: { epochId_lte: $epochId }
48
+ first: 1
49
+ ) {
50
+ shares
51
+ }
52
+ lendingPoolTrancheEpochInterest(
53
+ where: { epochId: $epochId }
54
+ ) {
55
+ epochInterestAmount
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ `;
63
+
64
+ export const lendingPortfolioQuery = gql`
65
+ query LastEpochQuery(
66
+ $userAddress: ID!
67
+ $epochId: BigInt!
68
+ $lastEpochId: BigInt!
69
+ $unusedPools: [String!]!
70
+ ) {
71
+ user(id: $userAddress) {
72
+ lendingPoolUserDetails(
73
+ where: { lendingPool_not_in: $unusedPools }
74
+ ) {
75
+ id
76
+ lendingPool {
77
+ id
78
+ name
79
+ balance
80
+ tranches {
81
+ shares
82
+ }
83
+ }
84
+ lendingPoolTrancheUserDetails {
85
+ shares
86
+ lendingPoolTrancheUserEpochSharesUpdates(
87
+ orderDirection: desc
88
+ orderBy: shareUpdatesIndex
89
+ where: { epochId_lt: $epochId }
90
+ first: 1
91
+ ) {
92
+ shares
93
+ }
94
+ userLendingPoolTrancheFixedTermDepositLocks {
95
+ isLocked
96
+ unlockAmount
97
+ initialAmount
98
+ lockId
99
+ initialTrancheShares
100
+ isWithdrawalRequested
101
+ createdOn
102
+ epochLockStart
103
+ epochLockEnd
104
+ trancheShares
105
+ lendingPoolTrancheFixedTermConfig {
106
+ epochLockDuration
107
+ configId
108
+ epochInterestRate
109
+ }
110
+ userLendingPoolTrancheFixedTermDepositLockShareUpdate(
111
+ orderBy: shareUpdatesIndex
112
+ orderDirection: desc
113
+ first: 1
114
+ where: { epochId_lt: $lastEpochId }
115
+ ) {
116
+ shares
117
+ }
118
+ }
119
+ tranche {
120
+ id
121
+ shares
122
+ balance
123
+ lendingPoolTrancheShareUpdates(
124
+ first: 1
125
+ orderBy: shareUpdatesIndex
126
+ orderDirection: desc
127
+ where: { epochId_lt: $epochId }
128
+ ) {
129
+ shares
130
+ }
131
+ lendingPoolTrancheEpochInterest(
132
+ first: 1
133
+ orderBy: epochId
134
+ orderDirection: desc
135
+ where: { epochId_lt: $epochId }
136
+ ) {
137
+ epochInterestAmount
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ userRequests(
144
+ where: {
145
+ user: $userAddress
146
+ userRequestEvents_: {
147
+ type_in: [DepositInitiated, DepositIncreased]
148
+ additionalData_not: null
149
+ }
150
+ }
151
+ ) {
152
+ createdOn
153
+ amountAccepted
154
+ tranche {
155
+ id
156
+ }
157
+ fixedTermConfigId
158
+ userRequestEvents(
159
+ where: { type_in: [DepositInitiated, DepositIncreased] }
160
+ ) {
161
+ id
162
+ assetAmount
163
+ }
164
+ }
165
+ }
166
+ `;
@@ -0,0 +1,220 @@
1
+ import { PoolOverview, TrancheData } from '../DataService/types';
2
+
3
+ export interface PortfolioRewards {
4
+ bonusYieldEarnings: {
5
+ claimableBalance: {
6
+ ksuAmount: string;
7
+ };
8
+ lifeTime: {
9
+ ksuAmount: string;
10
+ };
11
+ };
12
+ ksuLaunchBonus: {
13
+ lifeTime: {
14
+ ksuAmount: string;
15
+ };
16
+ };
17
+ protocolFees: {
18
+ claimableBalance: {
19
+ usdcAmount: string;
20
+ };
21
+ lifeTime: {
22
+ usdcAmount: string;
23
+ };
24
+ };
25
+ }
26
+
27
+ export interface PortfolioSummary {
28
+ current: {
29
+ totalKsuLocked: string;
30
+ totalLendingPoolInvestments: string;
31
+ weightedAverageApy: string;
32
+ };
33
+ daily: {
34
+ yieldEarnings: string;
35
+ };
36
+ weekly: {
37
+ yieldEarnings: string;
38
+ protocolFeesEarned: string;
39
+ ksuBonusRewards: string;
40
+ };
41
+ lifetime: {
42
+ yieldEarnings: string;
43
+ ksuBonusRewards: string;
44
+ protocolFeesEarned: string;
45
+ };
46
+ }
47
+
48
+ export interface PortfolioTrancheDepositDetails {
49
+ timestamp: EpochTimeStamp;
50
+ id: string;
51
+ depositAmount: string;
52
+ acceptedAmount: string;
53
+ }
54
+ export interface PortfolioTranche extends TrancheData {
55
+ investedAmount: string;
56
+ yieldEarnings: {
57
+ lastEpoch: string;
58
+ lifetime: string;
59
+ };
60
+ depositDetails: PortfolioTrancheDepositDetails[];
61
+ fixedLoans: {
62
+ isLocked: boolean;
63
+ lockId: string;
64
+ configId: string;
65
+ epochInterestRate: string;
66
+ epochLockStart: string;
67
+ epochLockEnd: string;
68
+ epochLockDuration: string;
69
+ isWithdrawalRequested: boolean;
70
+ startTime: EpochTimeStamp;
71
+ amount: string;
72
+ endTime: EpochTimeStamp;
73
+ yieldEarnings: {
74
+ lastEpoch: string;
75
+ lifetime: string;
76
+ };
77
+ depositDetails: PortfolioTrancheDepositDetails[];
78
+ }[];
79
+ }
80
+ export interface PortfolioLendingPool extends Omit<PoolOverview, 'tranches'> {
81
+ totalInvestedAmount: string;
82
+ totalYieldEarningsLastEpoch: string;
83
+ totalYieldEarningsLifetime: string;
84
+ isActive: boolean;
85
+ tranches: PortfolioTranche[];
86
+ requestEpochsInAdvance: string;
87
+ }
88
+ export interface LendingPortfolioData {
89
+ lendingPools: PortfolioLendingPool[];
90
+ }
91
+
92
+ export interface UserLendingPoolTrancheFixedTermDepositLock {
93
+ isLocked: boolean;
94
+ lockId: string;
95
+ createdOn: string;
96
+ isWithdrawalRequested: boolean;
97
+ initialTrancheShares: string;
98
+ epochLockStart: string;
99
+ epochLockEnd: string;
100
+ lendingPoolTrancheFixedTermConfig: {
101
+ epochLockDuration: string;
102
+ configId: string;
103
+ epochInterestRate: string;
104
+ };
105
+ unlockAmount: string | null;
106
+ initialAmount: string;
107
+ trancheShares: string;
108
+ userLendingPoolTrancheFixedTermDepositLockShareUpdate:
109
+ | {
110
+ shares: string;
111
+ }[]
112
+ | undefined;
113
+ }
114
+
115
+ export interface LastEpochQueryResult {
116
+ user: {
117
+ lendingPoolUserDetails: {
118
+ id: string;
119
+ lendingPool: {
120
+ id: string;
121
+ name: string;
122
+ balance: string;
123
+ configuration: {
124
+ lendingPoolWithdrawalConfig: {
125
+ requestEpochsInAdvance: string;
126
+ cancelRequestEpochsInAdvance: string;
127
+ };
128
+ };
129
+ tranches: {
130
+ shares: string;
131
+ }[];
132
+ };
133
+ lendingPoolTrancheUserDetails: {
134
+ userLendingPoolTrancheFixedTermDepositLocks: {
135
+ lockId: string;
136
+ createdOn: string;
137
+ isWithdrawalRequested: boolean;
138
+ initialTrancheShares: string;
139
+ epochLockStart: string;
140
+ epochLockEnd: string;
141
+ lendingPoolTrancheFixedTermConfig: {
142
+ epochLockDuration: string;
143
+ };
144
+ }[];
145
+ lendingPoolTrancheUserEpochSharesUpdates: {
146
+ shares: string;
147
+ }[];
148
+ tranche: {
149
+ id: string;
150
+ lendingPoolTrancheShareUpdates: {
151
+ shares: string;
152
+ }[];
153
+ lendingPoolTrancheEpochInterest: {
154
+ epochInterestAmount: string;
155
+ }[];
156
+ };
157
+ }[];
158
+ }[];
159
+ } | null;
160
+ }
161
+
162
+ export interface LendingPortfolioQueryResult {
163
+ user: {
164
+ lendingPoolUserDetails: {
165
+ id: string;
166
+ lendingPool: {
167
+ id: string;
168
+ name: string;
169
+ balance: string;
170
+ configuration: {
171
+ lendingPoolWithdrawalConfig: {
172
+ requestEpochsInAdvance: string;
173
+ cancelRequestEpochsInAdvance: string;
174
+ };
175
+ };
176
+ tranches: {
177
+ shares: string;
178
+ }[];
179
+ };
180
+ lendingPoolTrancheUserDetails: {
181
+ shares: string;
182
+ userLendingPoolTrancheFixedTermDepositLocks: UserLendingPoolTrancheFixedTermDepositLock[];
183
+ lendingPoolTrancheUserEpochSharesUpdates:
184
+ | {
185
+ shares: string;
186
+ }[]
187
+ | undefined;
188
+ totalAcceptedDeposits: string;
189
+ totalAcceptedWithdrawnAmount: string;
190
+ tranche: {
191
+ id: string;
192
+ shares: string;
193
+ balance: string;
194
+ lendingPoolTrancheShareUpdates:
195
+ | {
196
+ shares: string;
197
+ }[]
198
+ | undefined;
199
+ lendingPoolTrancheEpochInterest:
200
+ | {
201
+ epochInterestAmount: string;
202
+ }[]
203
+ | undefined;
204
+ };
205
+ }[];
206
+ }[];
207
+ } | null;
208
+ userRequests: {
209
+ createdOn: string;
210
+ amountAccepted: string;
211
+ tranche: {
212
+ id: string;
213
+ };
214
+ fixedTermConfigId: string;
215
+ userRequestEvents: {
216
+ id: string;
217
+ assetAmount: string;
218
+ }[];
219
+ }[];
220
+ }
@@ -0,0 +1,158 @@
1
+ import axios from 'axios';
2
+ import { BigNumber, ethers } from 'ethers';
3
+
4
+ import { SwapInfoStruct } from '../../contracts/SwapperAbi';
5
+
6
+ import { OneInchQuoteRes, OneInchSwapRes, SwapDepositBagStruct } from './types';
7
+
8
+ export class Swapper {
9
+ private readonly PRECISION_DECIMALS = 18;
10
+ private readonly PRECISION = BigNumber.from(10).pow(
11
+ this.PRECISION_DECIMALS,
12
+ );
13
+
14
+ public async getSwapData(
15
+ url: string,
16
+ fromTokenAddress: string,
17
+ toTokenAddress: string,
18
+ amountInDecimals: string,
19
+ fromAddress: string,
20
+ slippage: string,
21
+ ): Promise<OneInchSwapRes> {
22
+ const res: { data: OneInchSwapRes } = await axios.get(url, {
23
+ params: {
24
+ getRequest: `/swap/v5.2/1/swap?fromTokenAddress=${fromTokenAddress}&toTokenAddress=${toTokenAddress}&amount=${amountInDecimals}&fromAddress=${fromAddress}&slippage=${slippage}&disableEstimate=true&allowPartialFill=false&includeTokensInfo=true`,
25
+ },
26
+ });
27
+ return res.data;
28
+ }
29
+
30
+ public async getConversionData(
31
+ url: string,
32
+ fromTokenAddress: string,
33
+ toTokenAddress: string,
34
+ amountInDecimals: string,
35
+ ): Promise<OneInchQuoteRes> {
36
+ const res: { data: OneInchQuoteRes } = await axios.get(url, {
37
+ params: {
38
+ getRequest: `/swap/v5.2/1/quote?fromTokenAddress=${fromTokenAddress}&toTokenAddress=${toTokenAddress}&amount=${amountInDecimals}&includeTokensInfo=true&includeGas=true`,
39
+ },
40
+ });
41
+ return res.data;
42
+ }
43
+ private async getTokenRatioAtMax(
44
+ swapUrl: string,
45
+ inToken: string,
46
+ inAmount: BigNumber,
47
+ outToken: string,
48
+ ): Promise<BigNumber> {
49
+ const data = await this.getConversionData(
50
+ swapUrl,
51
+ inToken,
52
+ outToken,
53
+ inAmount.toString(),
54
+ );
55
+
56
+ return inAmount
57
+ .mul(this.PRECISION)
58
+ .div(
59
+ ethers.utils.parseUnits(
60
+ data.toAmount,
61
+ this.PRECISION_DECIMALS - data.toToken.decimals,
62
+ ),
63
+ );
64
+ }
65
+
66
+ public async getSwap(
67
+ swapUrl: string,
68
+ inTokens: string[],
69
+ inAmounts: BigNumber[],
70
+ inDecimals: BigNumber[],
71
+ outToken: string,
72
+ userAddress: string,
73
+ swapperAddress: string,
74
+ slippage: string,
75
+ ): Promise<SwapDepositBagStruct> {
76
+ if (
77
+ inTokens.length !== inAmounts.length ||
78
+ inTokens.length !== inDecimals.length
79
+ ) {
80
+ throw new Error('Invalid input');
81
+ }
82
+
83
+ const transaction: SwapDepositBagStruct = {
84
+ tokensIn: inTokens,
85
+ swapInfo: [],
86
+ tokenOut: outToken,
87
+ receiver: userAddress,
88
+ };
89
+
90
+ const swapDataPromises: Promise<OneInchSwapRes>[] = [];
91
+ for (let i = 0; i < inTokens.length; i++) {
92
+ swapDataPromises[i] = this.getSwapData(
93
+ swapUrl,
94
+ inTokens[i],
95
+ outToken,
96
+ ethers.utils.formatUnits(inAmounts[i], 0).split('.')[0],
97
+ swapperAddress,
98
+ slippage,
99
+ );
100
+ }
101
+
102
+ const promiseSwapData2D = Promise.all(swapDataPromises);
103
+
104
+ await promiseSwapData2D.then((values) => {
105
+ for (let i = 0; i < inTokens.length; i++) {
106
+ if (inTokens[i] !== outToken) {
107
+ const swapInfo: SwapInfoStruct = {
108
+ swapTarget: values[i].tx.to,
109
+ token: inTokens[i],
110
+ swapCallData: values[i].tx.data,
111
+ };
112
+ transaction.swapInfo.push(swapInfo);
113
+ }
114
+ }
115
+ });
116
+ return transaction;
117
+ }
118
+
119
+ public async getSwapInfo(
120
+ swapUrl: string,
121
+ inTokens: string[],
122
+ inAmounts: BigNumber[],
123
+ inDecimals: BigNumber[],
124
+ outToken: string,
125
+ userAddress: string,
126
+ swapperAddress: string,
127
+ slippage: string,
128
+ ): Promise<Awaited<OneInchSwapRes>[]> {
129
+ if (
130
+ inTokens.length !== inAmounts.length ||
131
+ inTokens.length !== inDecimals.length
132
+ ) {
133
+ throw new Error('Invalid input');
134
+ }
135
+
136
+ // const transaction: SwapDepositBagStruct = {
137
+ // tokensIn: inTokens,
138
+ // swapInfo: [],
139
+ // tokenOut: outToken,
140
+ // receiver: userAddress,
141
+ // }
142
+
143
+ const swapDataPromises: Promise<OneInchSwapRes>[] = [];
144
+ for (let i = 0; i < inTokens.length; i++) {
145
+ swapDataPromises[i] = this.getSwapData(
146
+ swapUrl,
147
+ inTokens[i],
148
+ outToken,
149
+ ethers.utils.formatUnits(inAmounts[i], 0).split('.')[0],
150
+ swapperAddress,
151
+ slippage,
152
+ );
153
+ }
154
+
155
+ const promiseSwapData2D = Promise.all(swapDataPromises);
156
+ return promiseSwapData2D;
157
+ }
158
+ }
@@ -0,0 +1,54 @@
1
+ import { SwapInfoStruct } from '../../contracts/SwapperAbi';
2
+
3
+ export interface SwapDepositBagStruct {
4
+ tokensIn: string[],
5
+ swapInfo: SwapInfoStruct[],
6
+ tokenOut: string,
7
+ receiver: string,
8
+ }
9
+
10
+ export interface OneInchQuoteRes {
11
+ fromToken: {
12
+ symbol: string
13
+ name: string
14
+ address: string
15
+ decimals: number
16
+ logoURI: string
17
+ }
18
+ toToken: {
19
+ symbol: string
20
+ name: string
21
+ address: string
22
+ decimals: number
23
+ logoURI: string
24
+ }
25
+ toAmount: string
26
+ gas: number
27
+ }
28
+
29
+ export interface OneInchSwapRes {
30
+ fromToken: {
31
+ symbol: string
32
+ name: string
33
+ address: string
34
+ decimals: number
35
+ logoURI: string
36
+ }
37
+ toToken: {
38
+ symbol: string
39
+ name: string
40
+ address: string
41
+ decimals: number
42
+ logoURI: string
43
+ }
44
+ toAmount: string
45
+ protocols: string[]
46
+ tx: {
47
+ from: string
48
+ to: string
49
+ data: string
50
+ value: string
51
+ gasPrice: string
52
+ gas: number
53
+ }
54
+ }
@@ -0,0 +1,28 @@
1
+ import { UserRequestEventType } from './subgraph-types';
2
+
3
+ const USER_REQUEST_EVENT_MAP = {
4
+ DepositAccepted: 'Accepted',
5
+ DepositCancelled: 'Cancelled',
6
+ DepositIncreased: 'Increased',
7
+ DepositInitiated: 'Initiated',
8
+ DepositRejected: 'Rejected',
9
+ DepositReallocated: 'Reallocated',
10
+ WithdrawalAccepted: 'Accepted',
11
+ WithdrawalCancelled: 'Cancelled',
12
+ WithdrawalIncreased: 'Increased',
13
+ WithdrawalInitiated: 'Initiated',
14
+ ImmediateWithdrawalExecuted: 'Forced',
15
+ } as const;
16
+
17
+ export const mapUserRequestEventType = (
18
+ requestType: UserRequestEventType,
19
+ ):
20
+ | 'Initiated'
21
+ | 'Increased'
22
+ | 'Cancelled'
23
+ | 'Accepted'
24
+ | 'Rejected'
25
+ | 'Reallocated'
26
+ | 'Forced' => {
27
+ return USER_REQUEST_EVENT_MAP[requestType];
28
+ };