@craftec/flowcraft-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.
- package/README.md +100 -0
- package/dist/client.d.ts +148 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +550 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +11 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/idl.json +1636 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +135 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +90 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +185 -0
- package/dist/utils.js.map +1 -0
- package/package.json +55 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FlowcraftClient = exports.IDL = void 0;
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
|
9
|
+
const spl_token_1 = require("@solana/spl-token");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
// Import IDL from generated file
|
|
13
|
+
const idl_json_1 = __importDefault(require("./idl.json"));
|
|
14
|
+
exports.IDL = idl_json_1.default;
|
|
15
|
+
class FlowcraftClient {
|
|
16
|
+
constructor(connection, wallet, programId = constants_1.PROGRAM_ID, idl = exports.IDL) {
|
|
17
|
+
this.programId = programId;
|
|
18
|
+
this.provider = new anchor_1.AnchorProvider(connection, wallet, {
|
|
19
|
+
commitment: "confirmed",
|
|
20
|
+
});
|
|
21
|
+
this.program = new anchor_1.Program(idl, this.provider);
|
|
22
|
+
}
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// PDA Helpers
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Get the config PDA
|
|
28
|
+
*/
|
|
29
|
+
getConfigPda() {
|
|
30
|
+
return (0, utils_1.getConfigPda)(this.programId);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the pool PDA for an owner and name
|
|
34
|
+
*/
|
|
35
|
+
getPoolPda(owner, name) {
|
|
36
|
+
return (0, utils_1.getPoolPda)(owner, name, this.programId);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the stream PDA for a pool and subscriber
|
|
40
|
+
*/
|
|
41
|
+
getStreamPda(pool, subscriber) {
|
|
42
|
+
return (0, utils_1.getStreamPda)(pool, subscriber, this.programId);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the vault PDA for a pool
|
|
46
|
+
*/
|
|
47
|
+
getVaultPda(pool) {
|
|
48
|
+
return (0, utils_1.getVaultPda)(pool, this.programId);
|
|
49
|
+
}
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Fetch Methods
|
|
52
|
+
// ============================================================================
|
|
53
|
+
/**
|
|
54
|
+
* Fetch the global config
|
|
55
|
+
*/
|
|
56
|
+
async fetchConfig() {
|
|
57
|
+
try {
|
|
58
|
+
const [configPda] = this.getConfigPda();
|
|
59
|
+
const account = await this.program.account.config.fetch(configPda);
|
|
60
|
+
return account;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Fetch a pool by address
|
|
68
|
+
*/
|
|
69
|
+
async fetchPool(pool) {
|
|
70
|
+
try {
|
|
71
|
+
const account = await this.program.account.pool.fetch(pool);
|
|
72
|
+
return account;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Fetch a pool by owner and name
|
|
80
|
+
*/
|
|
81
|
+
async fetchPoolByOwner(owner, name) {
|
|
82
|
+
const [poolPda] = this.getPoolPda(owner, name);
|
|
83
|
+
return this.fetchPool(poolPda);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Fetch a stream by address
|
|
87
|
+
*/
|
|
88
|
+
async fetchStream(stream) {
|
|
89
|
+
try {
|
|
90
|
+
const account = await this.program.account.stream.fetch(stream);
|
|
91
|
+
return account;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Fetch a stream by pool and subscriber
|
|
99
|
+
*/
|
|
100
|
+
async fetchStreamBySubscriber(pool, subscriber) {
|
|
101
|
+
const [streamPda] = this.getStreamPda(pool, subscriber);
|
|
102
|
+
return this.fetchStream(streamPda);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Fetch pool with computed info
|
|
106
|
+
*/
|
|
107
|
+
async getPoolInfo(pool) {
|
|
108
|
+
const poolData = await this.fetchPool(pool);
|
|
109
|
+
if (!poolData)
|
|
110
|
+
return null;
|
|
111
|
+
return {
|
|
112
|
+
address: pool,
|
|
113
|
+
owner: poolData.owner,
|
|
114
|
+
mint: poolData.mint,
|
|
115
|
+
name: poolData.name,
|
|
116
|
+
totalSubscribers: poolData.totalSubscribers.toNumber(),
|
|
117
|
+
totalDeposited: poolData.totalDeposited,
|
|
118
|
+
totalWithdrawn: poolData.totalWithdrawn,
|
|
119
|
+
totalRefunded: poolData.totalRefunded,
|
|
120
|
+
createdAt: new Date(poolData.createdAt.toNumber() * 1000),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Fetch stream with computed info
|
|
125
|
+
*/
|
|
126
|
+
async getStreamInfo(stream) {
|
|
127
|
+
const streamData = await this.fetchStream(stream);
|
|
128
|
+
if (!streamData)
|
|
129
|
+
return null;
|
|
130
|
+
let totalDeposited = streamData.archivedAmount;
|
|
131
|
+
let totalVested = streamData.archivedVested;
|
|
132
|
+
let activeSegments = 0;
|
|
133
|
+
let cancelledSegments = 0;
|
|
134
|
+
const segments = streamData.segments.map((seg, index) => {
|
|
135
|
+
totalDeposited = totalDeposited.add(seg.amount);
|
|
136
|
+
totalVested = totalVested.add(seg.vested);
|
|
137
|
+
if (seg.cancelled) {
|
|
138
|
+
cancelledSegments++;
|
|
139
|
+
}
|
|
140
|
+
else if (!seg.vested.eq(seg.amount)) {
|
|
141
|
+
activeSegments++;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
index,
|
|
145
|
+
tier: seg.tier,
|
|
146
|
+
payer: seg.payer,
|
|
147
|
+
amount: seg.amount,
|
|
148
|
+
vested: seg.vested,
|
|
149
|
+
unvested: seg.amount.sub(seg.vested),
|
|
150
|
+
ratePerSecond: seg.ratePerSecond,
|
|
151
|
+
cancelled: seg.cancelled,
|
|
152
|
+
isComplete: seg.vested.eq(seg.amount) || seg.cancelled,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
const claimable = totalVested.sub(streamData.totalWithdrawn);
|
|
156
|
+
const isExpired = streamData.segments.every((s) => s.vested.eq(s.amount) || s.cancelled);
|
|
157
|
+
return {
|
|
158
|
+
address: stream,
|
|
159
|
+
pool: streamData.pool,
|
|
160
|
+
subscriber: streamData.subscriber,
|
|
161
|
+
startTime: new Date(streamData.startTime.toNumber() * 1000),
|
|
162
|
+
totalDeposited,
|
|
163
|
+
totalVested,
|
|
164
|
+
totalWithdrawn: streamData.totalWithdrawn,
|
|
165
|
+
claimable,
|
|
166
|
+
activeSegments,
|
|
167
|
+
cancelledSegments,
|
|
168
|
+
isExpired,
|
|
169
|
+
segments,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
// ============================================================================
|
|
173
|
+
// Admin Instructions
|
|
174
|
+
// ============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* Initialize the protocol config (one-time setup)
|
|
177
|
+
*/
|
|
178
|
+
async initializeConfig(admin, treasury, feeBps) {
|
|
179
|
+
const [configPda] = this.getConfigPda();
|
|
180
|
+
return await this.program.methods
|
|
181
|
+
.initializeConfig(treasury, new anchor_1.BN(feeBps))
|
|
182
|
+
.accounts({
|
|
183
|
+
admin: admin.publicKey,
|
|
184
|
+
config: configPda,
|
|
185
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
|
186
|
+
})
|
|
187
|
+
.signers([admin])
|
|
188
|
+
.rpc();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Update protocol config (admin only)
|
|
192
|
+
*/
|
|
193
|
+
async updateConfig(admin, newTreasury, newFeeBps, newAdmin) {
|
|
194
|
+
const [configPda] = this.getConfigPda();
|
|
195
|
+
return await this.program.methods
|
|
196
|
+
.updateConfig(newTreasury ?? null, newFeeBps !== undefined ? new anchor_1.BN(newFeeBps) : null, newAdmin ?? null)
|
|
197
|
+
.accounts({
|
|
198
|
+
admin: admin.publicKey,
|
|
199
|
+
config: configPda,
|
|
200
|
+
})
|
|
201
|
+
.signers([admin])
|
|
202
|
+
.rpc();
|
|
203
|
+
}
|
|
204
|
+
// ============================================================================
|
|
205
|
+
// Pool Instructions
|
|
206
|
+
// ============================================================================
|
|
207
|
+
/**
|
|
208
|
+
* Create a new subscription pool
|
|
209
|
+
* @param payer - Keypair that pays for rent (signs the transaction)
|
|
210
|
+
* @param owner - PublicKey of pool owner (can be any account, including PDA)
|
|
211
|
+
* @param params - Pool creation parameters
|
|
212
|
+
*/
|
|
213
|
+
async createPool(payer, owner, params) {
|
|
214
|
+
const [poolPda] = this.getPoolPda(owner, params.name);
|
|
215
|
+
const [vaultPda] = this.getVaultPda(poolPda);
|
|
216
|
+
const signature = await this.program.methods
|
|
217
|
+
.createPool(params.name)
|
|
218
|
+
.accounts({
|
|
219
|
+
payer: payer.publicKey,
|
|
220
|
+
owner: owner,
|
|
221
|
+
mint: params.mint,
|
|
222
|
+
pool: poolPda,
|
|
223
|
+
vault: vaultPda,
|
|
224
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
225
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
|
226
|
+
})
|
|
227
|
+
.signers([payer])
|
|
228
|
+
.rpc();
|
|
229
|
+
return { signature, pool: poolPda, vault: vaultPda };
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Subscription Instructions
|
|
233
|
+
// ============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Subscribe to a pool (creates stream with first segment)
|
|
236
|
+
*/
|
|
237
|
+
async subscribe(subscriber, params) {
|
|
238
|
+
const [configPda] = this.getConfigPda();
|
|
239
|
+
const [streamPda] = this.getStreamPda(params.pool, subscriber.publicKey);
|
|
240
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
241
|
+
const signature = await this.program.methods
|
|
242
|
+
.subscribe(params.tier, (0, utils_1.toBN)(params.amount), (0, utils_1.toBN)(params.durationSeconds))
|
|
243
|
+
.accounts({
|
|
244
|
+
subscriber: subscriber.publicKey,
|
|
245
|
+
pool: params.pool,
|
|
246
|
+
config: configPda,
|
|
247
|
+
stream: streamPda,
|
|
248
|
+
vault: vaultPda,
|
|
249
|
+
subscriberTokenAccount: params.subscriberTokenAccount,
|
|
250
|
+
treasuryTokenAccount: params.treasuryTokenAccount,
|
|
251
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
252
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
|
253
|
+
})
|
|
254
|
+
.signers([subscriber])
|
|
255
|
+
.rpc();
|
|
256
|
+
return { signature, stream: streamPda };
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Add a new segment to an existing subscription
|
|
260
|
+
*/
|
|
261
|
+
async addSegment(payer, params) {
|
|
262
|
+
const [configPda] = this.getConfigPda();
|
|
263
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
264
|
+
return await this.program.methods
|
|
265
|
+
.addSegment(params.tier, (0, utils_1.toBN)(params.amount), (0, utils_1.toBN)(params.durationSeconds))
|
|
266
|
+
.accounts({
|
|
267
|
+
payer: payer.publicKey,
|
|
268
|
+
pool: params.pool,
|
|
269
|
+
config: configPda,
|
|
270
|
+
stream: params.stream,
|
|
271
|
+
vault: vaultPda,
|
|
272
|
+
payerTokenAccount: params.payerTokenAccount,
|
|
273
|
+
treasuryTokenAccount: params.treasuryTokenAccount,
|
|
274
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
275
|
+
})
|
|
276
|
+
.signers([payer])
|
|
277
|
+
.rpc();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Claim vested tokens (pool owner only)
|
|
281
|
+
*/
|
|
282
|
+
async claim(owner, params) {
|
|
283
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
284
|
+
return await this.program.methods
|
|
285
|
+
.claim()
|
|
286
|
+
.accounts({
|
|
287
|
+
owner: owner.publicKey,
|
|
288
|
+
pool: params.pool,
|
|
289
|
+
stream: params.stream,
|
|
290
|
+
vault: vaultPda,
|
|
291
|
+
ownerTokenAccount: params.ownerTokenAccount,
|
|
292
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
293
|
+
})
|
|
294
|
+
.signers([owner])
|
|
295
|
+
.rpc();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Claim vested tokens from multiple streams in a single transaction
|
|
299
|
+
*/
|
|
300
|
+
async claimBatch(owner, params) {
|
|
301
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
302
|
+
return await this.program.methods
|
|
303
|
+
.claimBatch()
|
|
304
|
+
.accounts({
|
|
305
|
+
owner: owner.publicKey,
|
|
306
|
+
pool: params.pool,
|
|
307
|
+
vault: vaultPda,
|
|
308
|
+
ownerTokenAccount: params.ownerTokenAccount,
|
|
309
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
310
|
+
})
|
|
311
|
+
.remainingAccounts(params.streams.map((stream) => ({
|
|
312
|
+
pubkey: stream,
|
|
313
|
+
isSigner: false,
|
|
314
|
+
isWritable: true,
|
|
315
|
+
})))
|
|
316
|
+
.signers([owner])
|
|
317
|
+
.rpc();
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Build batch claim transactions for all streams in a pool
|
|
321
|
+
* Returns transactions ready to be signed with signAllTransactions
|
|
322
|
+
*/
|
|
323
|
+
async buildClaimAllTransactions(owner, pool, ownerTokenAccount, batchSize = 20) {
|
|
324
|
+
// Fetch all streams for this pool
|
|
325
|
+
const streams = await this.fetchStreamsByPool(pool);
|
|
326
|
+
const streamAddresses = streams.map((s) => s.address);
|
|
327
|
+
const [vaultPda] = this.getVaultPda(pool);
|
|
328
|
+
const transactions = [];
|
|
329
|
+
// Split into batches
|
|
330
|
+
for (let i = 0; i < streamAddresses.length; i += batchSize) {
|
|
331
|
+
const batch = streamAddresses.slice(i, i + batchSize);
|
|
332
|
+
const tx = await this.program.methods
|
|
333
|
+
.claimBatch()
|
|
334
|
+
.accounts({
|
|
335
|
+
owner,
|
|
336
|
+
pool,
|
|
337
|
+
vault: vaultPda,
|
|
338
|
+
ownerTokenAccount,
|
|
339
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
340
|
+
})
|
|
341
|
+
.remainingAccounts(batch.map((pubkey) => ({
|
|
342
|
+
pubkey,
|
|
343
|
+
isSigner: false,
|
|
344
|
+
isWritable: true,
|
|
345
|
+
})))
|
|
346
|
+
.transaction();
|
|
347
|
+
transactions.push(tx);
|
|
348
|
+
}
|
|
349
|
+
return { transactions, totalStreams: streamAddresses.length };
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Cancel a segment (subscriber only)
|
|
353
|
+
*/
|
|
354
|
+
async cancelSegment(subscriber, params) {
|
|
355
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
356
|
+
return await this.program.methods
|
|
357
|
+
.cancelSegment(params.segmentIndex)
|
|
358
|
+
.accounts({
|
|
359
|
+
subscriber: subscriber.publicKey,
|
|
360
|
+
pool: params.pool,
|
|
361
|
+
stream: params.stream,
|
|
362
|
+
vault: vaultPda,
|
|
363
|
+
refundTokenAccount: params.refundTokenAccount,
|
|
364
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
365
|
+
})
|
|
366
|
+
.signers([subscriber])
|
|
367
|
+
.rpc();
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Upgrade or downgrade a segment
|
|
371
|
+
*/
|
|
372
|
+
async upgradeSegment(caller, params) {
|
|
373
|
+
const [vaultPda] = this.getVaultPda(params.pool);
|
|
374
|
+
return await this.program.methods
|
|
375
|
+
.upgradeSegment(params.segmentIndex, (0, utils_1.toBN)(params.newAmount), (0, utils_1.toBN)(params.newDuration))
|
|
376
|
+
.accounts({
|
|
377
|
+
caller: caller.publicKey,
|
|
378
|
+
subscriber: params.subscriber,
|
|
379
|
+
pool: params.pool,
|
|
380
|
+
stream: params.stream,
|
|
381
|
+
vault: vaultPda,
|
|
382
|
+
callerTokenAccount: params.callerTokenAccount,
|
|
383
|
+
payerTokenAccount: params.payerTokenAccount,
|
|
384
|
+
tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
|
|
385
|
+
})
|
|
386
|
+
.signers([caller])
|
|
387
|
+
.rpc();
|
|
388
|
+
}
|
|
389
|
+
// ============================================================================
|
|
390
|
+
// Helper Methods
|
|
391
|
+
// ============================================================================
|
|
392
|
+
/**
|
|
393
|
+
* Check if a pool exists
|
|
394
|
+
*/
|
|
395
|
+
async poolExists(owner, name) {
|
|
396
|
+
const pool = await this.fetchPoolByOwner(owner, name);
|
|
397
|
+
return pool !== null;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Check if a subscription stream exists
|
|
401
|
+
*/
|
|
402
|
+
async subscriptionExists(pool, subscriber) {
|
|
403
|
+
const stream = await this.fetchStreamBySubscriber(pool, subscriber);
|
|
404
|
+
return stream !== null;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Get claimable amount for a stream
|
|
408
|
+
*/
|
|
409
|
+
async getClaimable(stream) {
|
|
410
|
+
const info = await this.getStreamInfo(stream);
|
|
411
|
+
return info?.claimable ?? new anchor_1.BN(0);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Check if subscription is expired
|
|
415
|
+
*/
|
|
416
|
+
async isSubscriptionExpired(stream) {
|
|
417
|
+
const info = await this.getStreamInfo(stream);
|
|
418
|
+
return info?.isExpired ?? true;
|
|
419
|
+
}
|
|
420
|
+
// ============================================================================
|
|
421
|
+
// Pool Analytics (Off-chain Calculation)
|
|
422
|
+
// ============================================================================
|
|
423
|
+
/**
|
|
424
|
+
* Fetch all streams for a pool using getProgramAccounts
|
|
425
|
+
* Stream account layout: [8 discriminator][32 pool][32 subscriber]...
|
|
426
|
+
* Filter by pool pubkey at offset 8
|
|
427
|
+
*/
|
|
428
|
+
async fetchStreamsByPool(pool) {
|
|
429
|
+
const connection = this.provider.connection;
|
|
430
|
+
// Stream discriminator from Anchor (SHA256("account:Stream")[0..8])
|
|
431
|
+
const streamDiscriminator = Buffer.from([166, 224, 59, 4, 202, 10, 186, 83]);
|
|
432
|
+
const accounts = await connection.getProgramAccounts(this.programId, {
|
|
433
|
+
filters: [
|
|
434
|
+
{
|
|
435
|
+
memcmp: {
|
|
436
|
+
offset: 0,
|
|
437
|
+
bytes: streamDiscriminator.toString("base64"),
|
|
438
|
+
encoding: "base64",
|
|
439
|
+
},
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
memcmp: {
|
|
443
|
+
offset: 8, // After discriminator
|
|
444
|
+
bytes: pool.toBase58(),
|
|
445
|
+
},
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
});
|
|
449
|
+
const streams = [];
|
|
450
|
+
for (const { pubkey, account } of accounts) {
|
|
451
|
+
try {
|
|
452
|
+
const stream = this.program.coder.accounts.decode("stream", account.data);
|
|
453
|
+
streams.push({ address: pubkey, stream });
|
|
454
|
+
}
|
|
455
|
+
catch {
|
|
456
|
+
// Skip malformed accounts
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return streams;
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Calculate real-time aggregate statistics for a pool
|
|
463
|
+
* Fetches all streams and calculates vesting off-chain
|
|
464
|
+
*/
|
|
465
|
+
async getPoolAggregateStats(pool) {
|
|
466
|
+
const streams = await this.fetchStreamsByPool(pool);
|
|
467
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
468
|
+
let totalDeposited = new anchor_1.BN(0);
|
|
469
|
+
let totalVested = new anchor_1.BN(0);
|
|
470
|
+
let totalWithdrawn = new anchor_1.BN(0);
|
|
471
|
+
let activeStreams = 0;
|
|
472
|
+
let expiredStreams = 0;
|
|
473
|
+
for (const { stream } of streams) {
|
|
474
|
+
const vesting = (0, utils_1.calculateStreamVesting)(stream, currentTime);
|
|
475
|
+
totalDeposited = totalDeposited.add(vesting.totalDeposited);
|
|
476
|
+
totalVested = totalVested.add(vesting.totalVested);
|
|
477
|
+
totalWithdrawn = totalWithdrawn.add(stream.totalWithdrawn);
|
|
478
|
+
if (vesting.isExpired) {
|
|
479
|
+
expiredStreams++;
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
activeStreams++;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
const totalClaimable = totalVested.sub(totalWithdrawn);
|
|
486
|
+
const totalUnvested = totalDeposited.sub(totalVested);
|
|
487
|
+
return {
|
|
488
|
+
pool,
|
|
489
|
+
totalStreams: streams.length,
|
|
490
|
+
activeStreams,
|
|
491
|
+
expiredStreams,
|
|
492
|
+
totalDeposited,
|
|
493
|
+
totalVested,
|
|
494
|
+
totalWithdrawn,
|
|
495
|
+
totalClaimable: totalClaimable.gtn(0) ? totalClaimable : new anchor_1.BN(0),
|
|
496
|
+
totalUnvested,
|
|
497
|
+
calculatedAt: new Date(),
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Get real-time claimable amount for a stream (calculated off-chain)
|
|
502
|
+
*/
|
|
503
|
+
async getRealTimeClaimable(streamAddress) {
|
|
504
|
+
const stream = await this.fetchStream(streamAddress);
|
|
505
|
+
if (!stream)
|
|
506
|
+
return new anchor_1.BN(0);
|
|
507
|
+
const vesting = (0, utils_1.calculateStreamVesting)(stream);
|
|
508
|
+
return vesting.claimable;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Get detailed stream info with real-time vesting calculation
|
|
512
|
+
*/
|
|
513
|
+
async getStreamInfoRealTime(streamAddress) {
|
|
514
|
+
const stream = await this.fetchStream(streamAddress);
|
|
515
|
+
if (!stream)
|
|
516
|
+
return null;
|
|
517
|
+
const currentTime = Math.floor(Date.now() / 1000);
|
|
518
|
+
const vesting = (0, utils_1.calculateStreamVesting)(stream, currentTime);
|
|
519
|
+
const segments = stream.segments.map((seg, index) => {
|
|
520
|
+
const segVested = vesting.totalVested; // Simplified - could calculate per-segment
|
|
521
|
+
return {
|
|
522
|
+
index,
|
|
523
|
+
tier: seg.tier,
|
|
524
|
+
payer: seg.payer,
|
|
525
|
+
amount: seg.amount,
|
|
526
|
+
vested: seg.vested,
|
|
527
|
+
unvested: seg.amount.sub(seg.vested),
|
|
528
|
+
ratePerSecond: seg.ratePerSecond,
|
|
529
|
+
cancelled: seg.cancelled,
|
|
530
|
+
isComplete: seg.vested.eq(seg.amount) || seg.cancelled,
|
|
531
|
+
};
|
|
532
|
+
});
|
|
533
|
+
return {
|
|
534
|
+
address: streamAddress,
|
|
535
|
+
pool: stream.pool,
|
|
536
|
+
subscriber: stream.subscriber,
|
|
537
|
+
startTime: new Date(stream.startTime.toNumber() * 1000),
|
|
538
|
+
totalDeposited: vesting.totalDeposited,
|
|
539
|
+
totalVested: vesting.totalVested,
|
|
540
|
+
totalWithdrawn: stream.totalWithdrawn,
|
|
541
|
+
claimable: vesting.claimable,
|
|
542
|
+
activeSegments: segments.filter((s) => !s.isComplete).length,
|
|
543
|
+
cancelledSegments: segments.filter((s) => s.cancelled).length,
|
|
544
|
+
isExpired: vesting.isExpired,
|
|
545
|
+
segments,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
exports.FlowcraftClient = FlowcraftClient;
|
|
550
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
export declare const PROGRAM_ID: PublicKey;
|
|
3
|
+
export declare const RATE_DECIMALS = 1000000000n;
|
|
4
|
+
export declare const BPS_DENOMINATOR = 10000n;
|
|
5
|
+
export declare const MAX_FEE_BPS = 1000n;
|
|
6
|
+
export declare const MAX_SEGMENTS = 100;
|
|
7
|
+
export declare const CONFIG_SEED = "config";
|
|
8
|
+
export declare const POOL_SEED = "pool";
|
|
9
|
+
export declare const STREAM_SEED = "stream";
|
|
10
|
+
export declare const VAULT_SEED = "vault";
|
|
11
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,UAAU,WAEtB,CAAC;AAEF,eAAO,MAAM,aAAa,cAAiB,CAAC;AAC5C,eAAO,MAAM,eAAe,SAAU,CAAC;AACvC,eAAO,MAAM,WAAW,QAAS,CAAC;AAClC,eAAO,MAAM,YAAY,MAAM,CAAC;AAGhC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,UAAU,UAAU,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VAULT_SEED = exports.STREAM_SEED = exports.POOL_SEED = exports.CONFIG_SEED = exports.MAX_SEGMENTS = exports.MAX_FEE_BPS = exports.BPS_DENOMINATOR = exports.RATE_DECIMALS = exports.PROGRAM_ID = void 0;
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
exports.PROGRAM_ID = new web3_js_1.PublicKey("3T8z77gRqyW6KZQBHf1ah2uKABh9vc5rSTaD595U2wm9");
|
|
6
|
+
exports.RATE_DECIMALS = 1000000000n;
|
|
7
|
+
exports.BPS_DENOMINATOR = 10000n;
|
|
8
|
+
exports.MAX_FEE_BPS = 1000n; // 10%
|
|
9
|
+
exports.MAX_SEGMENTS = 100;
|
|
10
|
+
// Seeds for PDA derivation
|
|
11
|
+
exports.CONFIG_SEED = "config";
|
|
12
|
+
exports.POOL_SEED = "pool";
|
|
13
|
+
exports.STREAM_SEED = "stream";
|
|
14
|
+
exports.VAULT_SEED = "vault";
|
|
15
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE/B,QAAA,UAAU,GAAG,IAAI,mBAAS,CACrC,8CAA8C,CAC/C,CAAC;AAEW,QAAA,aAAa,GAAG,WAAc,CAAC;AAC/B,QAAA,eAAe,GAAG,MAAO,CAAC;AAC1B,QAAA,WAAW,GAAG,KAAM,CAAC,CAAC,MAAM;AAC5B,QAAA,YAAY,GAAG,GAAG,CAAC;AAEhC,2BAA2B;AACd,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,SAAS,GAAG,MAAM,CAAC;AACnB,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,UAAU,GAAG,OAAO,CAAC"}
|