@steerprotocol/sdk 1.2.0 → 1.3.0

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.
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StakingClient = void 0;
4
+ const SubgraphClient_1 = require("./SubgraphClient");
5
+ // ABIs for staking contracts
6
+ const SINGLE_REWARD_ABI = [
7
+ {
8
+ "inputs": [],
9
+ "name": "lastTimeRewardApplicable",
10
+ "outputs": [{ "type": "uint256" }],
11
+ "stateMutability": "view",
12
+ "type": "function"
13
+ },
14
+ {
15
+ "inputs": [{ "type": "address" }],
16
+ "name": "earned",
17
+ "outputs": [{ "type": "uint256" }],
18
+ "stateMutability": "view",
19
+ "type": "function"
20
+ },
21
+ {
22
+ "inputs": [],
23
+ "name": "totalSupply",
24
+ "outputs": [{ "type": "uint256" }],
25
+ "stateMutability": "view",
26
+ "type": "function"
27
+ },
28
+ {
29
+ "inputs": [{ "type": "address" }],
30
+ "name": "balanceOf",
31
+ "outputs": [{ "type": "uint256" }],
32
+ "stateMutability": "view",
33
+ "type": "function"
34
+ },
35
+ {
36
+ "inputs": [{ "type": "uint256" }],
37
+ "name": "stake",
38
+ "outputs": [],
39
+ "stateMutability": "nonpayable",
40
+ "type": "function"
41
+ },
42
+ {
43
+ "inputs": [{ "type": "uint256" }],
44
+ "name": "withdraw",
45
+ "outputs": [],
46
+ "stateMutability": "nonpayable",
47
+ "type": "function"
48
+ },
49
+ {
50
+ "inputs": [],
51
+ "name": "getReward",
52
+ "outputs": [],
53
+ "stateMutability": "nonpayable",
54
+ "type": "function"
55
+ },
56
+ {
57
+ "inputs": [],
58
+ "name": "exit",
59
+ "outputs": [],
60
+ "stateMutability": "nonpayable",
61
+ "type": "function"
62
+ }
63
+ ];
64
+ const DUAL_REWARD_ABI = [
65
+ ...SINGLE_REWARD_ABI,
66
+ {
67
+ "inputs": [{ "type": "address" }],
68
+ "name": "earnedA",
69
+ "outputs": [{ "type": "uint256" }],
70
+ "stateMutability": "view",
71
+ "type": "function"
72
+ },
73
+ {
74
+ "inputs": [{ "type": "address" }],
75
+ "name": "earnedB",
76
+ "outputs": [{ "type": "uint256" }],
77
+ "stateMutability": "view",
78
+ "type": "function"
79
+ }
80
+ ];
81
+ class StakingClient extends SubgraphClient_1.SubgraphClient {
82
+ constructor(client) {
83
+ super(client);
84
+ this.stakingPoolsEndpoint = 'https://9i52h964s3.execute-api.us-east-1.amazonaws.com/dev/staking-pools';
85
+ this.publicClient = client;
86
+ this.walletClient = client;
87
+ }
88
+ /**
89
+ * Fetches staking pool data from the API
90
+ * @param chainId Optional chain ID to filter pools
91
+ * @param protocol Optional protocol name to filter pools
92
+ */
93
+ async getStakingPools(chainId, protocol) {
94
+ try {
95
+ const response = await fetch(this.stakingPoolsEndpoint);
96
+ if (!response.ok) {
97
+ throw new Error('Failed to fetch staking pools');
98
+ }
99
+ let pools = await response.json();
100
+ // Apply filters if provided
101
+ if (chainId) {
102
+ pools = pools.filter(pool => pool.chainId === chainId);
103
+ }
104
+ if (protocol) {
105
+ pools = pools.filter(pool => pool.protocol === protocol);
106
+ }
107
+ return {
108
+ data: pools,
109
+ status: 200,
110
+ success: true,
111
+ };
112
+ }
113
+ catch (error) {
114
+ return {
115
+ data: null,
116
+ status: 500,
117
+ success: false,
118
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
119
+ };
120
+ }
121
+ }
122
+ /**
123
+ * Stakes tokens in a staking pool
124
+ * @param params The staking parameters
125
+ */
126
+ async stake(params) {
127
+ try {
128
+ const account = await this.walletClient.getAddresses();
129
+ if (!account[0])
130
+ throw new Error('No account found');
131
+ const { request } = await this.publicClient.simulateContract({
132
+ address: params.stakingPool,
133
+ abi: SINGLE_REWARD_ABI,
134
+ functionName: 'stake',
135
+ args: [params.amount],
136
+ account: account[0],
137
+ });
138
+ const hash = await this.walletClient.writeContract(request);
139
+ return {
140
+ data: hash,
141
+ status: 200,
142
+ success: true,
143
+ };
144
+ }
145
+ catch (error) {
146
+ return {
147
+ data: null,
148
+ status: 500,
149
+ success: false,
150
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Withdraws tokens from a staking pool
156
+ * @param params The withdrawal parameters
157
+ */
158
+ async withdraw(params) {
159
+ try {
160
+ const account = await this.walletClient.getAddresses();
161
+ if (!account[0])
162
+ throw new Error('No account found');
163
+ const { request } = await this.publicClient.simulateContract({
164
+ address: params.stakingPool,
165
+ abi: SINGLE_REWARD_ABI,
166
+ functionName: 'withdraw',
167
+ args: [params.amount],
168
+ account: account[0],
169
+ });
170
+ const hash = await this.walletClient.writeContract(request);
171
+ return {
172
+ data: hash,
173
+ status: 200,
174
+ success: true,
175
+ };
176
+ }
177
+ catch (error) {
178
+ return {
179
+ data: null,
180
+ status: 500,
181
+ success: false,
182
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
183
+ };
184
+ }
185
+ }
186
+ /**
187
+ * Claims rewards from a staking pool
188
+ * @param params The reward claim parameters
189
+ */
190
+ async getReward(params) {
191
+ try {
192
+ const account = await this.walletClient.getAddresses();
193
+ if (!account[0])
194
+ throw new Error('No account found');
195
+ const { request } = await this.publicClient.simulateContract({
196
+ address: params.stakingPool,
197
+ abi: SINGLE_REWARD_ABI,
198
+ functionName: 'getReward',
199
+ args: [],
200
+ account: account[0],
201
+ });
202
+ const hash = await this.walletClient.writeContract(request);
203
+ return {
204
+ data: hash,
205
+ status: 200,
206
+ success: true,
207
+ };
208
+ }
209
+ catch (error) {
210
+ return {
211
+ data: null,
212
+ status: 500,
213
+ success: false,
214
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
215
+ };
216
+ }
217
+ }
218
+ /**
219
+ * Gets the earned rewards for an account in a staking pool
220
+ * @param stakingPool The staking pool address
221
+ * @param account The account to check rewards for
222
+ */
223
+ async earned(stakingPool, account) {
224
+ try {
225
+ // First try to read as single reward
226
+ try {
227
+ const reward = await this.publicClient.readContract({
228
+ address: stakingPool,
229
+ abi: SINGLE_REWARD_ABI,
230
+ functionName: 'earned',
231
+ args: [account],
232
+ });
233
+ return {
234
+ data: { rewardA: reward },
235
+ status: 200,
236
+ success: true,
237
+ };
238
+ }
239
+ catch {
240
+ // If single reward fails, try dual rewards
241
+ const [rewardA, rewardB] = await Promise.all([
242
+ this.publicClient.readContract({
243
+ address: stakingPool,
244
+ abi: DUAL_REWARD_ABI,
245
+ functionName: 'earnedA',
246
+ args: [account],
247
+ }),
248
+ this.publicClient.readContract({
249
+ address: stakingPool,
250
+ abi: DUAL_REWARD_ABI,
251
+ functionName: 'earnedB',
252
+ args: [account],
253
+ }),
254
+ ]);
255
+ return {
256
+ data: { rewardA, rewardB },
257
+ status: 200,
258
+ success: true,
259
+ };
260
+ }
261
+ }
262
+ catch (error) {
263
+ return {
264
+ data: null,
265
+ status: 500,
266
+ success: false,
267
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
268
+ };
269
+ }
270
+ }
271
+ /**
272
+ * Gets the total supply of staked tokens in a pool
273
+ * @param stakingPool The staking pool address
274
+ */
275
+ async totalSupply(stakingPool) {
276
+ try {
277
+ const totalSupply = await this.publicClient.readContract({
278
+ address: stakingPool,
279
+ abi: SINGLE_REWARD_ABI,
280
+ functionName: 'totalSupply',
281
+ });
282
+ return {
283
+ data: totalSupply,
284
+ status: 200,
285
+ success: true,
286
+ };
287
+ }
288
+ catch (error) {
289
+ return {
290
+ data: null,
291
+ status: 500,
292
+ success: false,
293
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
294
+ };
295
+ }
296
+ }
297
+ /**
298
+ * Gets the staked balance of an account in a pool
299
+ * @param stakingPool The staking pool address
300
+ * @param account The account to check balance for
301
+ */
302
+ async balanceOf(stakingPool, account) {
303
+ try {
304
+ const balance = await this.publicClient.readContract({
305
+ address: stakingPool,
306
+ abi: SINGLE_REWARD_ABI,
307
+ functionName: 'balanceOf',
308
+ args: [account],
309
+ });
310
+ return {
311
+ data: balance,
312
+ status: 200,
313
+ success: true,
314
+ };
315
+ }
316
+ catch (error) {
317
+ return {
318
+ data: null,
319
+ status: 500,
320
+ success: false,
321
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
322
+ };
323
+ }
324
+ }
325
+ /**
326
+ * Calculates the APR for a staking pool
327
+ * @param pool The staking pool data
328
+ * @param rewardTokenPriceUSD The price of the reward token in USD
329
+ * @param totalStakedUSD The total value staked in USD
330
+ */
331
+ calculateAPR(pool, rewardTokenPriceUSD, totalStakedUSD) {
332
+ if (totalStakedUSD === 0) {
333
+ return 0;
334
+ }
335
+ const dailyRewardUSD = pool.dailyEmissionRewardA * rewardTokenPriceUSD;
336
+ let apr = (dailyRewardUSD * 365 * 100) / totalStakedUSD;
337
+ if (pool.isDualFactory && pool.dailyEmissionRewardB) {
338
+ const dailyRewardBUSD = pool.dailyEmissionRewardB * rewardTokenPriceUSD;
339
+ apr += (dailyRewardBUSD * 365 * 100) / totalStakedUSD;
340
+ }
341
+ return apr;
342
+ }
343
+ }
344
+ exports.StakingClient = StakingClient;
345
+ //# sourceMappingURL=StakingClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakingClient.js","sourceRoot":"","sources":["../../../src/base/StakingClient.ts"],"names":[],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -20,6 +20,9 @@ __exportStar(require("./types"), exports);
20
20
  __exportStar(require("./const"), exports);
21
21
  __exportStar(require("./const/subgraph"), exports);
22
22
  __exportStar(require("./const/api"), exports);
23
+ __exportStar(require("./base/VaultClient"), exports);
24
+ __exportStar(require("./base/SubgraphClient"), exports);
25
+ __exportStar(require("./base/StakingClient"), exports);
23
26
  /**
24
27
  * @packageDocumentation
25
28
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,mDAAiC;AACjC,8CAA4B;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,mDAAiC;AACjC,8CAA4B;AAC5B,qDAAmC;AACnC,wDAAsC;AACtC,uDAAqC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
@@ -0,0 +1,341 @@
1
+ import { SubgraphClient } from './SubgraphClient';
2
+ // ABIs for staking contracts
3
+ const SINGLE_REWARD_ABI = [
4
+ {
5
+ "inputs": [],
6
+ "name": "lastTimeRewardApplicable",
7
+ "outputs": [{ "type": "uint256" }],
8
+ "stateMutability": "view",
9
+ "type": "function"
10
+ },
11
+ {
12
+ "inputs": [{ "type": "address" }],
13
+ "name": "earned",
14
+ "outputs": [{ "type": "uint256" }],
15
+ "stateMutability": "view",
16
+ "type": "function"
17
+ },
18
+ {
19
+ "inputs": [],
20
+ "name": "totalSupply",
21
+ "outputs": [{ "type": "uint256" }],
22
+ "stateMutability": "view",
23
+ "type": "function"
24
+ },
25
+ {
26
+ "inputs": [{ "type": "address" }],
27
+ "name": "balanceOf",
28
+ "outputs": [{ "type": "uint256" }],
29
+ "stateMutability": "view",
30
+ "type": "function"
31
+ },
32
+ {
33
+ "inputs": [{ "type": "uint256" }],
34
+ "name": "stake",
35
+ "outputs": [],
36
+ "stateMutability": "nonpayable",
37
+ "type": "function"
38
+ },
39
+ {
40
+ "inputs": [{ "type": "uint256" }],
41
+ "name": "withdraw",
42
+ "outputs": [],
43
+ "stateMutability": "nonpayable",
44
+ "type": "function"
45
+ },
46
+ {
47
+ "inputs": [],
48
+ "name": "getReward",
49
+ "outputs": [],
50
+ "stateMutability": "nonpayable",
51
+ "type": "function"
52
+ },
53
+ {
54
+ "inputs": [],
55
+ "name": "exit",
56
+ "outputs": [],
57
+ "stateMutability": "nonpayable",
58
+ "type": "function"
59
+ }
60
+ ];
61
+ const DUAL_REWARD_ABI = [
62
+ ...SINGLE_REWARD_ABI,
63
+ {
64
+ "inputs": [{ "type": "address" }],
65
+ "name": "earnedA",
66
+ "outputs": [{ "type": "uint256" }],
67
+ "stateMutability": "view",
68
+ "type": "function"
69
+ },
70
+ {
71
+ "inputs": [{ "type": "address" }],
72
+ "name": "earnedB",
73
+ "outputs": [{ "type": "uint256" }],
74
+ "stateMutability": "view",
75
+ "type": "function"
76
+ }
77
+ ];
78
+ export class StakingClient extends SubgraphClient {
79
+ constructor(client) {
80
+ super(client);
81
+ this.stakingPoolsEndpoint = 'https://9i52h964s3.execute-api.us-east-1.amazonaws.com/dev/staking-pools';
82
+ this.publicClient = client;
83
+ this.walletClient = client;
84
+ }
85
+ /**
86
+ * Fetches staking pool data from the API
87
+ * @param chainId Optional chain ID to filter pools
88
+ * @param protocol Optional protocol name to filter pools
89
+ */
90
+ async getStakingPools(chainId, protocol) {
91
+ try {
92
+ const response = await fetch(this.stakingPoolsEndpoint);
93
+ if (!response.ok) {
94
+ throw new Error('Failed to fetch staking pools');
95
+ }
96
+ let pools = await response.json();
97
+ // Apply filters if provided
98
+ if (chainId) {
99
+ pools = pools.filter(pool => pool.chainId === chainId);
100
+ }
101
+ if (protocol) {
102
+ pools = pools.filter(pool => pool.protocol === protocol);
103
+ }
104
+ return {
105
+ data: pools,
106
+ status: 200,
107
+ success: true,
108
+ };
109
+ }
110
+ catch (error) {
111
+ return {
112
+ data: null,
113
+ status: 500,
114
+ success: false,
115
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
116
+ };
117
+ }
118
+ }
119
+ /**
120
+ * Stakes tokens in a staking pool
121
+ * @param params The staking parameters
122
+ */
123
+ async stake(params) {
124
+ try {
125
+ const account = await this.walletClient.getAddresses();
126
+ if (!account[0])
127
+ throw new Error('No account found');
128
+ const { request } = await this.publicClient.simulateContract({
129
+ address: params.stakingPool,
130
+ abi: SINGLE_REWARD_ABI,
131
+ functionName: 'stake',
132
+ args: [params.amount],
133
+ account: account[0],
134
+ });
135
+ const hash = await this.walletClient.writeContract(request);
136
+ return {
137
+ data: hash,
138
+ status: 200,
139
+ success: true,
140
+ };
141
+ }
142
+ catch (error) {
143
+ return {
144
+ data: null,
145
+ status: 500,
146
+ success: false,
147
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
148
+ };
149
+ }
150
+ }
151
+ /**
152
+ * Withdraws tokens from a staking pool
153
+ * @param params The withdrawal parameters
154
+ */
155
+ async withdraw(params) {
156
+ try {
157
+ const account = await this.walletClient.getAddresses();
158
+ if (!account[0])
159
+ throw new Error('No account found');
160
+ const { request } = await this.publicClient.simulateContract({
161
+ address: params.stakingPool,
162
+ abi: SINGLE_REWARD_ABI,
163
+ functionName: 'withdraw',
164
+ args: [params.amount],
165
+ account: account[0],
166
+ });
167
+ const hash = await this.walletClient.writeContract(request);
168
+ return {
169
+ data: hash,
170
+ status: 200,
171
+ success: true,
172
+ };
173
+ }
174
+ catch (error) {
175
+ return {
176
+ data: null,
177
+ status: 500,
178
+ success: false,
179
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
180
+ };
181
+ }
182
+ }
183
+ /**
184
+ * Claims rewards from a staking pool
185
+ * @param params The reward claim parameters
186
+ */
187
+ async getReward(params) {
188
+ try {
189
+ const account = await this.walletClient.getAddresses();
190
+ if (!account[0])
191
+ throw new Error('No account found');
192
+ const { request } = await this.publicClient.simulateContract({
193
+ address: params.stakingPool,
194
+ abi: SINGLE_REWARD_ABI,
195
+ functionName: 'getReward',
196
+ args: [],
197
+ account: account[0],
198
+ });
199
+ const hash = await this.walletClient.writeContract(request);
200
+ return {
201
+ data: hash,
202
+ status: 200,
203
+ success: true,
204
+ };
205
+ }
206
+ catch (error) {
207
+ return {
208
+ data: null,
209
+ status: 500,
210
+ success: false,
211
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
212
+ };
213
+ }
214
+ }
215
+ /**
216
+ * Gets the earned rewards for an account in a staking pool
217
+ * @param stakingPool The staking pool address
218
+ * @param account The account to check rewards for
219
+ */
220
+ async earned(stakingPool, account) {
221
+ try {
222
+ // First try to read as single reward
223
+ try {
224
+ const reward = await this.publicClient.readContract({
225
+ address: stakingPool,
226
+ abi: SINGLE_REWARD_ABI,
227
+ functionName: 'earned',
228
+ args: [account],
229
+ });
230
+ return {
231
+ data: { rewardA: reward },
232
+ status: 200,
233
+ success: true,
234
+ };
235
+ }
236
+ catch {
237
+ // If single reward fails, try dual rewards
238
+ const [rewardA, rewardB] = await Promise.all([
239
+ this.publicClient.readContract({
240
+ address: stakingPool,
241
+ abi: DUAL_REWARD_ABI,
242
+ functionName: 'earnedA',
243
+ args: [account],
244
+ }),
245
+ this.publicClient.readContract({
246
+ address: stakingPool,
247
+ abi: DUAL_REWARD_ABI,
248
+ functionName: 'earnedB',
249
+ args: [account],
250
+ }),
251
+ ]);
252
+ return {
253
+ data: { rewardA, rewardB },
254
+ status: 200,
255
+ success: true,
256
+ };
257
+ }
258
+ }
259
+ catch (error) {
260
+ return {
261
+ data: null,
262
+ status: 500,
263
+ success: false,
264
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
265
+ };
266
+ }
267
+ }
268
+ /**
269
+ * Gets the total supply of staked tokens in a pool
270
+ * @param stakingPool The staking pool address
271
+ */
272
+ async totalSupply(stakingPool) {
273
+ try {
274
+ const totalSupply = await this.publicClient.readContract({
275
+ address: stakingPool,
276
+ abi: SINGLE_REWARD_ABI,
277
+ functionName: 'totalSupply',
278
+ });
279
+ return {
280
+ data: totalSupply,
281
+ status: 200,
282
+ success: true,
283
+ };
284
+ }
285
+ catch (error) {
286
+ return {
287
+ data: null,
288
+ status: 500,
289
+ success: false,
290
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
291
+ };
292
+ }
293
+ }
294
+ /**
295
+ * Gets the staked balance of an account in a pool
296
+ * @param stakingPool The staking pool address
297
+ * @param account The account to check balance for
298
+ */
299
+ async balanceOf(stakingPool, account) {
300
+ try {
301
+ const balance = await this.publicClient.readContract({
302
+ address: stakingPool,
303
+ abi: SINGLE_REWARD_ABI,
304
+ functionName: 'balanceOf',
305
+ args: [account],
306
+ });
307
+ return {
308
+ data: balance,
309
+ status: 200,
310
+ success: true,
311
+ };
312
+ }
313
+ catch (error) {
314
+ return {
315
+ data: null,
316
+ status: 500,
317
+ success: false,
318
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
319
+ };
320
+ }
321
+ }
322
+ /**
323
+ * Calculates the APR for a staking pool
324
+ * @param pool The staking pool data
325
+ * @param rewardTokenPriceUSD The price of the reward token in USD
326
+ * @param totalStakedUSD The total value staked in USD
327
+ */
328
+ calculateAPR(pool, rewardTokenPriceUSD, totalStakedUSD) {
329
+ if (totalStakedUSD === 0) {
330
+ return 0;
331
+ }
332
+ const dailyRewardUSD = pool.dailyEmissionRewardA * rewardTokenPriceUSD;
333
+ let apr = (dailyRewardUSD * 365 * 100) / totalStakedUSD;
334
+ if (pool.isDualFactory && pool.dailyEmissionRewardB) {
335
+ const dailyRewardBUSD = pool.dailyEmissionRewardB * rewardTokenPriceUSD;
336
+ apr += (dailyRewardBUSD * 365 * 100) / totalStakedUSD;
337
+ }
338
+ return apr;
339
+ }
340
+ }
341
+ //# sourceMappingURL=StakingClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakingClient.js","sourceRoot":"","sources":["../../../src/base/StakingClient.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -4,6 +4,9 @@ export * from './types';
4
4
  export * from './const';
5
5
  export * from './const/subgraph';
6
6
  export * from './const/api';
7
+ export * from './base/VaultClient';
8
+ export * from './base/SubgraphClient';
9
+ export * from './base/StakingClient';
7
10
  /**
8
11
  * @packageDocumentation
9
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
@@ -0,0 +1,81 @@
1
+ import type { Address, Hash, PublicClient, WalletClient } from 'viem';
2
+ import { SteerResponse } from '../types';
3
+ import { SubgraphClient } from './SubgraphClient';
4
+ export interface StakingPool {
5
+ chainId: number;
6
+ stakingPool: string;
7
+ protocol: string;
8
+ isDualFactory: boolean;
9
+ dailyEmissionRewardA: number;
10
+ dailyEmissionRewardB: number;
11
+ rewardTokenA: string;
12
+ rewardTokenB: string;
13
+ periodFinish: string;
14
+ rewardsDuration: string;
15
+ }
16
+ export interface StakeParams {
17
+ stakingPool: Address;
18
+ amount: bigint;
19
+ }
20
+ export interface WithdrawParams {
21
+ stakingPool: Address;
22
+ amount: bigint;
23
+ }
24
+ export interface GetRewardParams {
25
+ stakingPool: Address;
26
+ }
27
+ export declare class StakingClient extends SubgraphClient {
28
+ protected readonly publicClient: PublicClient;
29
+ protected readonly walletClient: WalletClient;
30
+ private readonly stakingPoolsEndpoint;
31
+ constructor(client: PublicClient & WalletClient);
32
+ /**
33
+ * Fetches staking pool data from the API
34
+ * @param chainId Optional chain ID to filter pools
35
+ * @param protocol Optional protocol name to filter pools
36
+ */
37
+ getStakingPools(chainId?: number, protocol?: string): Promise<SteerResponse<StakingPool[]>>;
38
+ /**
39
+ * Stakes tokens in a staking pool
40
+ * @param params The staking parameters
41
+ */
42
+ stake(params: StakeParams): Promise<SteerResponse<Hash>>;
43
+ /**
44
+ * Withdraws tokens from a staking pool
45
+ * @param params The withdrawal parameters
46
+ */
47
+ withdraw(params: WithdrawParams): Promise<SteerResponse<Hash>>;
48
+ /**
49
+ * Claims rewards from a staking pool
50
+ * @param params The reward claim parameters
51
+ */
52
+ getReward(params: GetRewardParams): Promise<SteerResponse<Hash>>;
53
+ /**
54
+ * Gets the earned rewards for an account in a staking pool
55
+ * @param stakingPool The staking pool address
56
+ * @param account The account to check rewards for
57
+ */
58
+ earned(stakingPool: Address, account: Address): Promise<SteerResponse<{
59
+ rewardA: bigint;
60
+ rewardB?: bigint;
61
+ }>>;
62
+ /**
63
+ * Gets the total supply of staked tokens in a pool
64
+ * @param stakingPool The staking pool address
65
+ */
66
+ totalSupply(stakingPool: Address): Promise<SteerResponse<bigint>>;
67
+ /**
68
+ * Gets the staked balance of an account in a pool
69
+ * @param stakingPool The staking pool address
70
+ * @param account The account to check balance for
71
+ */
72
+ balanceOf(stakingPool: Address, account: Address): Promise<SteerResponse<bigint>>;
73
+ /**
74
+ * Calculates the APR for a staking pool
75
+ * @param pool The staking pool data
76
+ * @param rewardTokenPriceUSD The price of the reward token in USD
77
+ * @param totalStakedUSD The total value staked in USD
78
+ */
79
+ calculateAPR(pool: StakingPool, rewardTokenPriceUSD: number, totalStakedUSD: number): number;
80
+ }
81
+ //# sourceMappingURL=StakingClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakingClient.d.ts","sourceRoot":"","sources":["../../../src/base/StakingClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;CACtB;AAgFD,qBAAa,aAAc,SAAQ,cAAc;IAC/C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8E;gBAEvG,MAAM,EAAE,YAAY,GAAG,YAAY;IAM/C;;;;OAIG;IACU,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAgCxG;;;OAGG;IACU,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IA8BrE;;;OAGG;IACU,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IA8B3E;;;OAGG;IACU,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IA8B7E;;;;OAIG;IACU,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAiD1H;;;OAGG;IACU,WAAW,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAuB9E;;;;OAIG;IACU,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAwB9F;;;;;OAKG;IACI,YAAY,CACjB,IAAI,EAAE,WAAW,EACjB,mBAAmB,EAAE,MAAM,EAC3B,cAAc,EAAE,MAAM,GACrB,MAAM;CAeV"}
@@ -4,6 +4,9 @@ export * from './types';
4
4
  export * from './const';
5
5
  export * from './const/subgraph';
6
6
  export * from './const/api';
7
+ export * from './base/VaultClient';
8
+ export * from './base/SubgraphClient';
9
+ export * from './base/StakingClient';
7
10
  /**
8
11
  * @packageDocumentation
9
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steerprotocol/sdk",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Steer Protocol SDK",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",