pepay-streams-sdk 0.1.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.
Files changed (62) hide show
  1. package/README.md +405 -0
  2. package/dist/api/index.d.mts +321 -0
  3. package/dist/api/index.d.ts +321 -0
  4. package/dist/api/index.js +312 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/api/index.mjs +306 -0
  7. package/dist/api/index.mjs.map +1 -0
  8. package/dist/automation/index.d.mts +140 -0
  9. package/dist/automation/index.d.ts +140 -0
  10. package/dist/automation/index.js +331 -0
  11. package/dist/automation/index.js.map +1 -0
  12. package/dist/automation/index.mjs +326 -0
  13. package/dist/automation/index.mjs.map +1 -0
  14. package/dist/campaigns/index.d.mts +286 -0
  15. package/dist/campaigns/index.d.ts +286 -0
  16. package/dist/campaigns/index.js +652 -0
  17. package/dist/campaigns/index.js.map +1 -0
  18. package/dist/campaigns/index.mjs +645 -0
  19. package/dist/campaigns/index.mjs.map +1 -0
  20. package/dist/claims/index.d.mts +190 -0
  21. package/dist/claims/index.d.ts +190 -0
  22. package/dist/claims/index.js +414 -0
  23. package/dist/claims/index.js.map +1 -0
  24. package/dist/claims/index.mjs +409 -0
  25. package/dist/claims/index.mjs.map +1 -0
  26. package/dist/index-BTG0TRJt.d.mts +555 -0
  27. package/dist/index-BTG0TRJt.d.ts +555 -0
  28. package/dist/index.d.mts +170 -0
  29. package/dist/index.d.ts +170 -0
  30. package/dist/index.js +2926 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.mjs +2888 -0
  33. package/dist/index.mjs.map +1 -0
  34. package/dist/marketplace/index.d.mts +225 -0
  35. package/dist/marketplace/index.d.ts +225 -0
  36. package/dist/marketplace/index.js +529 -0
  37. package/dist/marketplace/index.js.map +1 -0
  38. package/dist/marketplace/index.mjs +524 -0
  39. package/dist/marketplace/index.mjs.map +1 -0
  40. package/dist/react/index.d.mts +185 -0
  41. package/dist/react/index.d.ts +185 -0
  42. package/dist/react/index.js +340 -0
  43. package/dist/react/index.js.map +1 -0
  44. package/dist/react/index.mjs +333 -0
  45. package/dist/react/index.mjs.map +1 -0
  46. package/dist/staking/index.d.mts +158 -0
  47. package/dist/staking/index.d.ts +158 -0
  48. package/dist/staking/index.js +359 -0
  49. package/dist/staking/index.js.map +1 -0
  50. package/dist/staking/index.mjs +354 -0
  51. package/dist/staking/index.mjs.map +1 -0
  52. package/package.json +106 -0
  53. package/src/api/index.ts +577 -0
  54. package/src/automation/index.ts +436 -0
  55. package/src/campaigns/index.ts +835 -0
  56. package/src/claims/index.ts +530 -0
  57. package/src/client.ts +518 -0
  58. package/src/index.ts +101 -0
  59. package/src/marketplace/index.ts +730 -0
  60. package/src/react/index.ts +498 -0
  61. package/src/staking/index.ts +449 -0
  62. package/src/types/index.ts +631 -0
@@ -0,0 +1,354 @@
1
+ import { DIAMOND_ABI } from '@pepay-streams/abi/diamond';
2
+
3
+ // src/staking/index.ts
4
+ var StakingModule = class {
5
+ constructor(publicClient, walletClient, diamondAddress) {
6
+ this.publicClient = publicClient;
7
+ this.walletClient = walletClient;
8
+ this.diamondAddress = diamondAddress;
9
+ }
10
+ // ============================================================================
11
+ // Staking Operations
12
+ // ============================================================================
13
+ /**
14
+ * Stake tokens in a pool
15
+ *
16
+ * Must approve the Diamond contract first.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * await sdk.approve(stakeToken, amount);
21
+ * const result = await sdk.staking.stake(poolId, amount);
22
+ * ```
23
+ */
24
+ async stake(poolId, amount) {
25
+ const wallet = this.requireWallet();
26
+ const hash = await wallet.writeContract({
27
+ chain: wallet.chain,
28
+ account: wallet.account,
29
+ address: this.diamondAddress,
30
+ abi: DIAMOND_ABI,
31
+ functionName: "stake",
32
+ args: [poolId, amount]
33
+ });
34
+ return this.createTransactionResult(hash);
35
+ }
36
+ /**
37
+ * Increase stake in an existing deposit
38
+ */
39
+ async increaseStake(poolId, amount) {
40
+ const wallet = this.requireWallet();
41
+ const hash = await wallet.writeContract({
42
+ chain: wallet.chain,
43
+ account: wallet.account,
44
+ address: this.diamondAddress,
45
+ abi: DIAMOND_ABI,
46
+ functionName: "increaseStake",
47
+ args: [poolId, amount]
48
+ });
49
+ return this.createTransactionResult(hash);
50
+ }
51
+ /**
52
+ * Unstake all tokens from a pool
53
+ *
54
+ * Automatically claims pending rewards.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const result = await sdk.staking.unstake(poolId);
59
+ * ```
60
+ */
61
+ async unstake(poolId) {
62
+ const wallet = this.requireWallet();
63
+ const hash = await wallet.writeContract({
64
+ chain: wallet.chain,
65
+ account: wallet.account,
66
+ address: this.diamondAddress,
67
+ abi: DIAMOND_ABI,
68
+ functionName: "unstake",
69
+ args: [poolId]
70
+ });
71
+ return this.createTransactionResult(hash);
72
+ }
73
+ /**
74
+ * Partial unstake - withdraw some tokens but keep position open
75
+ */
76
+ async partialUnstake(poolId, amount) {
77
+ const wallet = this.requireWallet();
78
+ const hash = await wallet.writeContract({
79
+ chain: wallet.chain,
80
+ account: wallet.account,
81
+ address: this.diamondAddress,
82
+ abi: DIAMOND_ABI,
83
+ functionName: "partialUnstake",
84
+ args: [poolId, amount]
85
+ });
86
+ return this.createTransactionResult(hash);
87
+ }
88
+ /**
89
+ * Emergency unstake - forfeit rewards but get principal back
90
+ *
91
+ * Use when pool has issues or you need immediate exit.
92
+ */
93
+ async emergencyUnstake(poolId) {
94
+ const wallet = this.requireWallet();
95
+ const hash = await wallet.writeContract({
96
+ chain: wallet.chain,
97
+ account: wallet.account,
98
+ address: this.diamondAddress,
99
+ abi: DIAMOND_ABI,
100
+ functionName: "emergencyUnstake",
101
+ args: [poolId]
102
+ });
103
+ return this.createTransactionResult(hash);
104
+ }
105
+ // ============================================================================
106
+ // Pool Queries
107
+ // ============================================================================
108
+ /**
109
+ * Get pool information
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const pool = await sdk.staking.getPool(1n);
114
+ * console.log('Total staked:', formatEther(pool.totalStaked));
115
+ * ```
116
+ */
117
+ async getPool(poolId) {
118
+ const result = await this.publicClient.readContract({
119
+ address: this.diamondAddress,
120
+ abi: DIAMOND_ABI,
121
+ functionName: "pools",
122
+ args: [poolId]
123
+ });
124
+ return this.parsePoolInfo(poolId, result);
125
+ }
126
+ /**
127
+ * Get total number of staking pools
128
+ */
129
+ async getPoolCount() {
130
+ const result = await this.publicClient.readContract({
131
+ address: this.diamondAddress,
132
+ abi: DIAMOND_ABI,
133
+ functionName: "poolCount",
134
+ args: []
135
+ });
136
+ return result;
137
+ }
138
+ /**
139
+ * Get pool stats (runtime state)
140
+ */
141
+ async getPoolStats(poolId) {
142
+ const result = await this.publicClient.readContract({
143
+ address: this.diamondAddress,
144
+ abi: DIAMOND_ABI,
145
+ functionName: "poolStats",
146
+ args: [poolId]
147
+ });
148
+ return {
149
+ statusBits: result[0],
150
+ rewardRemaining: result[1],
151
+ totalStaked: result[2],
152
+ endAt: Number(result[4]),
153
+ finalized: result[6],
154
+ rewardRatePerSecond: result[9]
155
+ };
156
+ }
157
+ // ============================================================================
158
+ // User Stake Queries
159
+ // ============================================================================
160
+ /**
161
+ * Get user's deposit info for a pool
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * const stake = await sdk.staking.getUserDeposit(poolId, address);
166
+ * console.log('Staked:', formatEther(stake.amount));
167
+ * ```
168
+ */
169
+ async getUserDeposit(poolId, user) {
170
+ const result = await this.publicClient.readContract({
171
+ address: this.diamondAddress,
172
+ abi: DIAMOND_ABI,
173
+ functionName: "deposits",
174
+ args: [poolId, user]
175
+ });
176
+ return {
177
+ amount: result.amount,
178
+ startAt: Number(result.startAt),
179
+ rewardDebtRay: result.rewardDebtRay,
180
+ claimedReward: result.claimedReward,
181
+ claimedAt: Number(result.claimedAt),
182
+ active: result.active
183
+ };
184
+ }
185
+ /**
186
+ * Get comprehensive deposit status for a user
187
+ */
188
+ async getDepositStatus(poolId, user) {
189
+ const result = await this.publicClient.readContract({
190
+ address: this.diamondAddress,
191
+ abi: DIAMOND_ABI,
192
+ functionName: "depositStatus",
193
+ args: [poolId, user]
194
+ });
195
+ return {
196
+ active: result[0],
197
+ stakedAmount: result[1],
198
+ pendingRewards: result[2],
199
+ canUnstakeNow: result[3],
200
+ secondsUntilUnstake: Number(result[4]),
201
+ totalClaimed: result[5]
202
+ };
203
+ }
204
+ /**
205
+ * Get pending rewards for a user in a pool
206
+ */
207
+ async getPendingRewards(poolId, user) {
208
+ const result = await this.publicClient.readContract({
209
+ address: this.diamondAddress,
210
+ abi: DIAMOND_ABI,
211
+ functionName: "pendingReward",
212
+ args: [poolId, user]
213
+ });
214
+ return result;
215
+ }
216
+ /**
217
+ * Check if user can unstake from a pool
218
+ */
219
+ async canUnstake(poolId, user) {
220
+ const result = await this.publicClient.readContract({
221
+ address: this.diamondAddress,
222
+ abi: DIAMOND_ABI,
223
+ functionName: "canUnstake",
224
+ args: [poolId, user]
225
+ });
226
+ return result;
227
+ }
228
+ /**
229
+ * Get time until user can unstake
230
+ */
231
+ async secondsUntilUnstakeable(poolId, user) {
232
+ const result = await this.publicClient.readContract({
233
+ address: this.diamondAddress,
234
+ abi: DIAMOND_ABI,
235
+ functionName: "secondsUntilUnstakeable",
236
+ args: [poolId, user]
237
+ });
238
+ return result;
239
+ }
240
+ /**
241
+ * Get user's stake info for a pool (convenience wrapper)
242
+ *
243
+ * @example
244
+ * ```typescript
245
+ * const stake = await sdk.staking.getUserStake(poolId, address);
246
+ * console.log('Staked:', formatEther(stake.amount));
247
+ * console.log('Pending rewards:', formatEther(stake.pendingRewards));
248
+ * ```
249
+ */
250
+ async getUserStake(poolId, user) {
251
+ const [deposit, pendingRewards] = await Promise.all([
252
+ this.getUserDeposit(poolId, user),
253
+ this.getPendingRewards(poolId, user)
254
+ ]);
255
+ return {
256
+ amount: deposit.amount,
257
+ pendingRewards,
258
+ lastClaimTime: deposit.claimedAt,
259
+ stakeTime: deposit.startAt
260
+ };
261
+ }
262
+ // ============================================================================
263
+ // Utility Functions
264
+ // ============================================================================
265
+ /**
266
+ * Get APY preview for a pool
267
+ */
268
+ async getApyPreview(poolId) {
269
+ const result = await this.publicClient.readContract({
270
+ address: this.diamondAddress,
271
+ abi: DIAMOND_ABI,
272
+ functionName: "apyPreview",
273
+ args: [poolId]
274
+ });
275
+ return {
276
+ ratePerSecond: result[0],
277
+ totalStaked: result[1]
278
+ };
279
+ }
280
+ /**
281
+ * Calculate APY for a pool
282
+ *
283
+ * @example
284
+ * ```typescript
285
+ * const pool = await sdk.staking.getPool(poolId);
286
+ * const apy = sdk.staking.calculateApy(pool);
287
+ * console.log('APY:', apy.toFixed(2), '%');
288
+ * ```
289
+ */
290
+ calculateApy(pool) {
291
+ if (pool.totalStaked === 0n) {
292
+ return 0;
293
+ }
294
+ const durationInYears = (pool.endTime - pool.startTime) / (365 * 24 * 60 * 60);
295
+ const rewardRate = Number(pool.rewardBudget) / Number(pool.totalStaked);
296
+ return rewardRate / durationInYears * 100;
297
+ }
298
+ // ============================================================================
299
+ // Helpers
300
+ // ============================================================================
301
+ requireWallet() {
302
+ if (!this.walletClient) {
303
+ throw new Error(
304
+ "Wallet client required for write operations. Initialize SDK with a signer."
305
+ );
306
+ }
307
+ return this.walletClient;
308
+ }
309
+ parsePoolInfo(id, data) {
310
+ return {
311
+ id,
312
+ stakeToken: data.stake,
313
+ rewardToken: data.reward,
314
+ creator: data.creator,
315
+ totalStaked: data.totalStaked,
316
+ rewardBudget: data.rewardRemaining,
317
+ // Current remaining
318
+ rewardsDistributed: 0n,
319
+ // Not directly available
320
+ startTime: 0,
321
+ // Not in pool struct
322
+ endTime: Number(data.endAt),
323
+ minStake: 0n,
324
+ // Not in pool struct
325
+ maxStake: data.cap,
326
+ stakerCount: 0,
327
+ // Not in pool struct
328
+ isActive: !(data.statusBits > 0),
329
+ isFinalized: data.finalized
330
+ };
331
+ }
332
+ createTransactionResult(hash) {
333
+ return {
334
+ hash,
335
+ wait: async () => {
336
+ const receipt = await this.publicClient.waitForTransactionReceipt({
337
+ hash
338
+ });
339
+ return {
340
+ blockNumber: receipt.blockNumber,
341
+ transactionHash: receipt.transactionHash,
342
+ gasUsed: receipt.gasUsed,
343
+ status: receipt.status,
344
+ logs: receipt.logs
345
+ };
346
+ }
347
+ };
348
+ }
349
+ };
350
+ var staking_default = StakingModule;
351
+
352
+ export { StakingModule, staking_default as default };
353
+ //# sourceMappingURL=index.mjs.map
354
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/staking/index.ts"],"names":[],"mappings":";;;AAyBO,IAAM,gBAAN,MAAoB;AAAA,EACzB,WAAA,CACmB,YAAA,EACA,YAAA,EACA,cAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBH,MAAM,KAAA,CAAM,MAAA,EAAgB,MAAA,EAA4C;AACtE,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc;AAAA,MACtC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,OAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM;AAAA,KACtB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CACJ,MAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc;AAAA,MACtC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM;AAAA,KACtB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,QAAQ,MAAA,EAA4C;AACxD,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc;AAAA,MACtC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,MAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc;AAAA,MACtC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,gBAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAM;AAAA,KACtB,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,iBAAiB,MAAA,EAA4C;AACjE,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAElC,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc;AAAA,MACtC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,kBAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,QAAQ,MAAA,EAAmC;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,OAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,MAAA,EAAQ,MAAiC,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAgC;AACpC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,MAAM;AAAC,KACR,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,MAAA,EAOhB;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAED,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,MACpB,eAAA,EAAiB,OAAO,CAAC,CAAA;AAAA,MACzB,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,MACrB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,MACvB,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,MACnB,mBAAA,EAAqB,OAAO,CAAC;AAAA,KAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,cAAA,CAAe,MAAA,EAAgB,IAAA,EAOlC;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,UAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,KACpB,CAAA;AAED,IAAA,OAAO;AAAA,MACL,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAAA,MAC9B,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AAAA,MAClC,QAAQ,MAAA,CAAO;AAAA,KACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,MAAA,EAAgB,IAAA,EAOpC;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,KACpB,CAAA;AAED,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,MAChB,YAAA,EAAc,OAAO,CAAC,CAAA;AAAA,MACtB,cAAA,EAAgB,OAAO,CAAC,CAAA;AAAA,MACxB,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,MACvB,mBAAA,EAAqB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,MACrC,YAAA,EAAc,OAAO,CAAC;AAAA,KACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,MAAA,EAAgB,IAAA,EAAgC;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,KACpB,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CAAW,MAAA,EAAgB,IAAA,EAAiC;AAChE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,YAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,KACpB,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACJ,MAAA,EACA,IAAA,EACiB;AACjB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,yBAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,KACpB,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,YAAA,CAAa,MAAA,EAAgB,IAAA,EAAmC;AACpE,IAAA,MAAM,CAAC,OAAA,EAAS,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAClD,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA;AAAA,MAChC,IAAA,CAAK,iBAAA,CAAkB,MAAA,EAAQ,IAAI;AAAA,KACpC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,cAAA;AAAA,MACA,eAAe,OAAA,CAAQ,SAAA;AAAA,MACvB,WAAW,OAAA,CAAQ;AAAA,KACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAc,MAAA,EAGjB;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MAClD,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,WAAA;AAAA,MACL,YAAA,EAAc,YAAA;AAAA,MACd,IAAA,EAAM,CAAC,MAAM;AAAA,KACd,CAAA;AAED,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,MACvB,WAAA,EAAa,OAAO,CAAC;AAAA,KACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,aAAa,IAAA,EAAwB;AACnC,IAAA,IAAI,IAAA,CAAK,gBAAgB,EAAA,EAAI;AAC3B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,mBACH,IAAA,CAAK,OAAA,GAAU,KAAK,SAAA,KAAc,GAAA,GAAM,KAAK,EAAA,GAAK,EAAA,CAAA;AACrD,IAAA,MAAM,aACJ,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,GAAI,MAAA,CAAO,KAAK,WAAW,CAAA;AAErD,IAAA,OAAQ,aAAa,eAAA,GAAmB,GAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAA,GAA8B;AACpC,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEQ,aAAA,CAAc,IAAY,IAAA,EAAyC;AACzE,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,YAAY,IAAA,CAAK,KAAA;AAAA,MACjB,aAAa,IAAA,CAAK,MAAA;AAAA,MAClB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK,eAAA;AAAA;AAAA,MACnB,kBAAA,EAAoB,EAAA;AAAA;AAAA,MACpB,SAAA,EAAW,CAAA;AAAA;AAAA,MACX,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAe,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA;AAAA;AAAA,MACV,UAAU,IAAA,CAAK,GAAA;AAAA,MACf,WAAA,EAAa,CAAA;AAAA;AAAA,MACb,QAAA,EAAU,EAAG,IAAA,CAAK,UAAA,GAAwB,CAAA,CAAA;AAAA,MAC1C,aAAa,IAAA,CAAK;AAAA,KACpB;AAAA,EACF;AAAA,EAEQ,wBAAwB,IAAA,EAA+B;AAC7D,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,MAAM,YAAY;AAChB,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,yBAAA,CAA0B;AAAA,UAChE;AAAA,SACD,CAAA;AACD,QAAA,OAAO;AAAA,UACL,aAAa,OAAA,CAAQ,WAAA;AAAA,UACrB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,UACzB,SAAS,OAAA,CAAQ,OAAA;AAAA,UACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,UAChB,MAAM,OAAA,CAAQ;AAAA,SAChB;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF;AAEA,IAAO,eAAA,GAAQ","file":"index.mjs","sourcesContent":["/**\r\n * Staking Module\r\n *\r\n * Provides methods for staking operations:\r\n * - Stake tokens\r\n * - Unstake tokens\r\n * - Claim rewards\r\n * - Pool queries\r\n */\r\nimport {\r\n type PublicClient,\r\n type WalletClient,\r\n type Address,\r\n type Hash,\r\n} from 'viem';\r\nimport { DIAMOND_ABI } from '@pepay-streams/abi/diamond';\r\nimport type {\r\n PoolInfo,\r\n UserStake,\r\n TransactionResult,\r\n} from '../types';\r\n\r\n/**\r\n * Staking module for fixed-duration staking pools\r\n */\r\nexport class StakingModule {\r\n constructor(\r\n private readonly publicClient: PublicClient,\r\n private readonly walletClient: WalletClient | undefined,\r\n private readonly diamondAddress: Address\r\n ) {}\r\n\r\n // ============================================================================\r\n // Staking Operations\r\n // ============================================================================\r\n\r\n /**\r\n * Stake tokens in a pool\r\n *\r\n * Must approve the Diamond contract first.\r\n *\r\n * @example\r\n * ```typescript\r\n * await sdk.approve(stakeToken, amount);\r\n * const result = await sdk.staking.stake(poolId, amount);\r\n * ```\r\n */\r\n async stake(poolId: bigint, amount: bigint): Promise<TransactionResult> {\r\n const wallet = this.requireWallet();\r\n\r\n const hash = await wallet.writeContract({\r\n chain: wallet.chain,\r\n account: wallet.account!,\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'stake',\r\n args: [poolId, amount],\r\n });\r\n\r\n return this.createTransactionResult(hash);\r\n }\r\n\r\n /**\r\n * Increase stake in an existing deposit\r\n */\r\n async increaseStake(\r\n poolId: bigint,\r\n amount: bigint\r\n ): Promise<TransactionResult> {\r\n const wallet = this.requireWallet();\r\n\r\n const hash = await wallet.writeContract({\r\n chain: wallet.chain,\r\n account: wallet.account!,\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'increaseStake',\r\n args: [poolId, amount],\r\n });\r\n\r\n return this.createTransactionResult(hash);\r\n }\r\n\r\n /**\r\n * Unstake all tokens from a pool\r\n *\r\n * Automatically claims pending rewards.\r\n *\r\n * @example\r\n * ```typescript\r\n * const result = await sdk.staking.unstake(poolId);\r\n * ```\r\n */\r\n async unstake(poolId: bigint): Promise<TransactionResult> {\r\n const wallet = this.requireWallet();\r\n\r\n const hash = await wallet.writeContract({\r\n chain: wallet.chain,\r\n account: wallet.account!,\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'unstake',\r\n args: [poolId],\r\n });\r\n\r\n return this.createTransactionResult(hash);\r\n }\r\n\r\n /**\r\n * Partial unstake - withdraw some tokens but keep position open\r\n */\r\n async partialUnstake(\r\n poolId: bigint,\r\n amount: bigint\r\n ): Promise<TransactionResult> {\r\n const wallet = this.requireWallet();\r\n\r\n const hash = await wallet.writeContract({\r\n chain: wallet.chain,\r\n account: wallet.account!,\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'partialUnstake',\r\n args: [poolId, amount],\r\n });\r\n\r\n return this.createTransactionResult(hash);\r\n }\r\n\r\n /**\r\n * Emergency unstake - forfeit rewards but get principal back\r\n *\r\n * Use when pool has issues or you need immediate exit.\r\n */\r\n async emergencyUnstake(poolId: bigint): Promise<TransactionResult> {\r\n const wallet = this.requireWallet();\r\n\r\n const hash = await wallet.writeContract({\r\n chain: wallet.chain,\r\n account: wallet.account!,\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'emergencyUnstake',\r\n args: [poolId],\r\n });\r\n\r\n return this.createTransactionResult(hash);\r\n }\r\n\r\n // ============================================================================\r\n // Pool Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get pool information\r\n *\r\n * @example\r\n * ```typescript\r\n * const pool = await sdk.staking.getPool(1n);\r\n * console.log('Total staked:', formatEther(pool.totalStaked));\r\n * ```\r\n */\r\n async getPool(poolId: bigint): Promise<PoolInfo> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'pools',\r\n args: [poolId],\r\n });\r\n\r\n return this.parsePoolInfo(poolId, result as Record<string, unknown>);\r\n }\r\n\r\n /**\r\n * Get total number of staking pools\r\n */\r\n async getPoolCount(): Promise<bigint> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'poolCount',\r\n args: [],\r\n });\r\n\r\n return result as bigint;\r\n }\r\n\r\n /**\r\n * Get pool stats (runtime state)\r\n */\r\n async getPoolStats(poolId: bigint): Promise<{\r\n statusBits: number;\r\n rewardRemaining: bigint;\r\n totalStaked: bigint;\r\n endAt: number;\r\n finalized: boolean;\r\n rewardRatePerSecond: bigint;\r\n }> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'poolStats',\r\n args: [poolId],\r\n }) as [number, bigint, bigint, bigint, bigint, bigint, boolean, bigint, bigint, bigint];\r\n\r\n return {\r\n statusBits: result[0],\r\n rewardRemaining: result[1],\r\n totalStaked: result[2],\r\n endAt: Number(result[4]),\r\n finalized: result[6],\r\n rewardRatePerSecond: result[9],\r\n };\r\n }\r\n\r\n // ============================================================================\r\n // User Stake Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get user's deposit info for a pool\r\n *\r\n * @example\r\n * ```typescript\r\n * const stake = await sdk.staking.getUserDeposit(poolId, address);\r\n * console.log('Staked:', formatEther(stake.amount));\r\n * ```\r\n */\r\n async getUserDeposit(poolId: bigint, user: Address): Promise<{\r\n amount: bigint;\r\n startAt: number;\r\n rewardDebtRay: bigint;\r\n claimedReward: bigint;\r\n claimedAt: number;\r\n active: boolean;\r\n }> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'deposits',\r\n args: [poolId, user],\r\n }) as { amount: bigint; startAt: bigint; rewardDebtRay: bigint; claimedReward: bigint; claimedAt: bigint; active: boolean };\r\n\r\n return {\r\n amount: result.amount,\r\n startAt: Number(result.startAt),\r\n rewardDebtRay: result.rewardDebtRay,\r\n claimedReward: result.claimedReward,\r\n claimedAt: Number(result.claimedAt),\r\n active: result.active,\r\n };\r\n }\r\n\r\n /**\r\n * Get comprehensive deposit status for a user\r\n */\r\n async getDepositStatus(poolId: bigint, user: Address): Promise<{\r\n active: boolean;\r\n stakedAmount: bigint;\r\n pendingRewards: bigint;\r\n canUnstakeNow: boolean;\r\n secondsUntilUnstake: number;\r\n totalClaimed: bigint;\r\n }> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'depositStatus',\r\n args: [poolId, user],\r\n }) as [boolean, bigint, bigint, boolean, bigint, bigint];\r\n\r\n return {\r\n active: result[0],\r\n stakedAmount: result[1],\r\n pendingRewards: result[2],\r\n canUnstakeNow: result[3],\r\n secondsUntilUnstake: Number(result[4]),\r\n totalClaimed: result[5],\r\n };\r\n }\r\n\r\n /**\r\n * Get pending rewards for a user in a pool\r\n */\r\n async getPendingRewards(poolId: bigint, user: Address): Promise<bigint> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'pendingReward',\r\n args: [poolId, user],\r\n });\r\n\r\n return result as bigint;\r\n }\r\n\r\n /**\r\n * Check if user can unstake from a pool\r\n */\r\n async canUnstake(poolId: bigint, user: Address): Promise<boolean> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'canUnstake',\r\n args: [poolId, user],\r\n });\r\n\r\n return result as boolean;\r\n }\r\n\r\n /**\r\n * Get time until user can unstake\r\n */\r\n async secondsUntilUnstakeable(\r\n poolId: bigint,\r\n user: Address\r\n ): Promise<bigint> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'secondsUntilUnstakeable',\r\n args: [poolId, user],\r\n });\r\n\r\n return result as bigint;\r\n }\r\n\r\n /**\r\n * Get user's stake info for a pool (convenience wrapper)\r\n *\r\n * @example\r\n * ```typescript\r\n * const stake = await sdk.staking.getUserStake(poolId, address);\r\n * console.log('Staked:', formatEther(stake.amount));\r\n * console.log('Pending rewards:', formatEther(stake.pendingRewards));\r\n * ```\r\n */\r\n async getUserStake(poolId: bigint, user: Address): Promise<UserStake> {\r\n const [deposit, pendingRewards] = await Promise.all([\r\n this.getUserDeposit(poolId, user),\r\n this.getPendingRewards(poolId, user),\r\n ]);\r\n\r\n return {\r\n amount: deposit.amount,\r\n pendingRewards,\r\n lastClaimTime: deposit.claimedAt,\r\n stakeTime: deposit.startAt,\r\n };\r\n }\r\n\r\n // ============================================================================\r\n // Utility Functions\r\n // ============================================================================\r\n\r\n /**\r\n * Get APY preview for a pool\r\n */\r\n async getApyPreview(poolId: bigint): Promise<{\r\n ratePerSecond: bigint;\r\n totalStaked: bigint;\r\n }> {\r\n const result = await this.publicClient.readContract({\r\n address: this.diamondAddress,\r\n abi: DIAMOND_ABI,\r\n functionName: 'apyPreview',\r\n args: [poolId],\r\n }) as [bigint, bigint];\r\n\r\n return {\r\n ratePerSecond: result[0],\r\n totalStaked: result[1],\r\n };\r\n }\r\n\r\n /**\r\n * Calculate APY for a pool\r\n *\r\n * @example\r\n * ```typescript\r\n * const pool = await sdk.staking.getPool(poolId);\r\n * const apy = sdk.staking.calculateApy(pool);\r\n * console.log('APY:', apy.toFixed(2), '%');\r\n * ```\r\n */\r\n calculateApy(pool: PoolInfo): number {\r\n if (pool.totalStaked === 0n) {\r\n return 0;\r\n }\r\n\r\n const durationInYears =\r\n (pool.endTime - pool.startTime) / (365 * 24 * 60 * 60);\r\n const rewardRate =\r\n Number(pool.rewardBudget) / Number(pool.totalStaked);\r\n\r\n return (rewardRate / durationInYears) * 100;\r\n }\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private requireWallet(): WalletClient {\r\n if (!this.walletClient) {\r\n throw new Error(\r\n 'Wallet client required for write operations. Initialize SDK with a signer.'\r\n );\r\n }\r\n return this.walletClient;\r\n }\r\n\r\n private parsePoolInfo(id: bigint, data: Record<string, unknown>): PoolInfo {\r\n return {\r\n id,\r\n stakeToken: data.stake as Address,\r\n rewardToken: data.reward as Address,\r\n creator: data.creator as Address,\r\n totalStaked: data.totalStaked as bigint,\r\n rewardBudget: data.rewardRemaining as bigint, // Current remaining\r\n rewardsDistributed: 0n, // Not directly available\r\n startTime: 0, // Not in pool struct\r\n endTime: Number(data.endAt as bigint),\r\n minStake: 0n, // Not in pool struct\r\n maxStake: data.cap as bigint,\r\n stakerCount: 0, // Not in pool struct\r\n isActive: !((data.statusBits as number) > 0),\r\n isFinalized: data.finalized as boolean,\r\n };\r\n }\r\n\r\n private createTransactionResult(hash: Hash): TransactionResult {\r\n return {\r\n hash,\r\n wait: async () => {\r\n const receipt = await this.publicClient.waitForTransactionReceipt({\r\n hash,\r\n });\r\n return {\r\n blockNumber: receipt.blockNumber,\r\n transactionHash: receipt.transactionHash,\r\n gasUsed: receipt.gasUsed,\r\n status: receipt.status,\r\n logs: receipt.logs,\r\n };\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default StakingModule;\r\n"]}
package/package.json ADDED
@@ -0,0 +1,106 @@
1
+ {
2
+ "name": "pepay-streams-sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for Pepay Streams - Token distribution, vesting, locks, staking, and marketplace",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./campaigns": {
15
+ "types": "./dist/campaigns/index.d.ts",
16
+ "import": "./dist/campaigns/index.mjs",
17
+ "require": "./dist/campaigns/index.js"
18
+ },
19
+ "./claims": {
20
+ "types": "./dist/claims/index.d.ts",
21
+ "import": "./dist/claims/index.mjs",
22
+ "require": "./dist/claims/index.js"
23
+ },
24
+ "./staking": {
25
+ "types": "./dist/staking/index.d.ts",
26
+ "import": "./dist/staking/index.mjs",
27
+ "require": "./dist/staking/index.js"
28
+ },
29
+ "./marketplace": {
30
+ "types": "./dist/marketplace/index.d.ts",
31
+ "import": "./dist/marketplace/index.mjs",
32
+ "require": "./dist/marketplace/index.js"
33
+ },
34
+ "./automation": {
35
+ "types": "./dist/automation/index.d.ts",
36
+ "import": "./dist/automation/index.mjs",
37
+ "require": "./dist/automation/index.js"
38
+ },
39
+ "./api": {
40
+ "types": "./dist/api/index.d.ts",
41
+ "import": "./dist/api/index.mjs",
42
+ "require": "./dist/api/index.js"
43
+ },
44
+ "./react": {
45
+ "types": "./dist/react/index.d.ts",
46
+ "import": "./dist/react/index.mjs",
47
+ "require": "./dist/react/index.js"
48
+ }
49
+ },
50
+ "scripts": {
51
+ "build": "tsup",
52
+ "dev": "tsup --watch",
53
+ "typecheck": "tsc --noEmit",
54
+ "test": "vitest run",
55
+ "test:watch": "vitest",
56
+ "test:coverage": "vitest run --coverage",
57
+ "lint": "eslint src/",
58
+ "clean": "rimraf dist"
59
+ },
60
+ "keywords": [
61
+ "pepay",
62
+ "streams",
63
+ "sdk",
64
+ "ethereum",
65
+ "viem",
66
+ "token-distribution",
67
+ "vesting",
68
+ "staking",
69
+ "airdrop",
70
+ "diamond",
71
+ "eip-2535"
72
+ ],
73
+ "author": "Pepay Labs",
74
+ "license": "MIT",
75
+ "dependencies": {
76
+ "@pepay-streams/abi": "workspace:*",
77
+ "@pepay-streams/shared": "workspace:*",
78
+ "viem": "^2.21.0"
79
+ },
80
+ "devDependencies": {
81
+ "@types/node": "^20.10.0",
82
+ "@vitest/coverage-v8": "^4.0.14",
83
+ "eslint": "^8.55.0",
84
+ "rimraf": "^5.0.5",
85
+ "tsup": "^8.0.1",
86
+ "typescript": "^5.3.0",
87
+ "vitest": "^4.0.14"
88
+ },
89
+ "peerDependencies": {
90
+ "viem": ">=2.0.0"
91
+ },
92
+ "files": [
93
+ "dist",
94
+ "src",
95
+ "README.md",
96
+ "CHANGELOG.md"
97
+ ],
98
+ "repository": {
99
+ "type": "git",
100
+ "url": "https://github.com/PepayLabs/pepay-streams"
101
+ },
102
+ "bugs": {
103
+ "url": "https://github.com/PepayLabs/pepay-streams/issues"
104
+ },
105
+ "homepage": "https://github.com/PepayLabs/pepay-streams#readme"
106
+ }