@unifiedflow/cli 1.0.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 (35) hide show
  1. package/README.md +85 -0
  2. package/dist/idl/unified_flow.json +1889 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +443 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/services/backfill.d.ts +2 -0
  8. package/dist/services/backfill.d.ts.map +1 -0
  9. package/dist/services/backfill.js +358 -0
  10. package/dist/services/backfill.js.map +1 -0
  11. package/dist/services/csvDiff.d.ts +68 -0
  12. package/dist/services/csvDiff.d.ts.map +1 -0
  13. package/dist/services/csvDiff.js +318 -0
  14. package/dist/services/csvDiff.js.map +1 -0
  15. package/dist/services/decoder.d.ts +3 -0
  16. package/dist/services/decoder.d.ts.map +1 -0
  17. package/dist/services/decoder.js +43 -0
  18. package/dist/services/decoder.js.map +1 -0
  19. package/dist/services/eventNormalizer.d.ts +63 -0
  20. package/dist/services/eventNormalizer.d.ts.map +1 -0
  21. package/dist/services/eventNormalizer.js +212 -0
  22. package/dist/services/eventNormalizer.js.map +1 -0
  23. package/dist/services/eventParser.d.ts +7 -0
  24. package/dist/services/eventParser.d.ts.map +1 -0
  25. package/dist/services/eventParser.js +130 -0
  26. package/dist/services/eventParser.js.map +1 -0
  27. package/dist/services/rpc.d.ts +10 -0
  28. package/dist/services/rpc.d.ts.map +1 -0
  29. package/dist/services/rpc.js +203 -0
  30. package/dist/services/rpc.js.map +1 -0
  31. package/dist/services/streamIndexer.d.ts +2 -0
  32. package/dist/services/streamIndexer.d.ts.map +1 -0
  33. package/dist/services/streamIndexer.js +367 -0
  34. package/dist/services/streamIndexer.js.map +1 -0
  35. package/package.json +42 -0
@@ -0,0 +1,367 @@
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.startIndexer = startIndexer;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ const web3_js_1 = require("@solana/web3.js");
9
+ const anchor_1 = require("@coral-xyz/anchor");
10
+ const web3_js_2 = require("@solana/web3.js");
11
+ const rpc_1 = require("./rpc");
12
+ const prisma_1 = __importDefault(require("../db/prisma"));
13
+ const eventParser_1 = require("./eventParser");
14
+ const eventNormalizer_1 = require("./eventNormalizer");
15
+ const unified_flow_json_1 = __importDefault(require("../idl/unified_flow.json"));
16
+ dotenv_1.default.config();
17
+ const PROGRAM_ID = new web3_js_1.PublicKey(process.env.PROGRAM_ID);
18
+ const PROGRAM_IDL = unified_flow_json_1.default;
19
+ async function startIndexer() {
20
+ console.log("Starting indexer...");
21
+ rpc_1.connection.onLogs(PROGRAM_ID, async (logInfo) => {
22
+ try {
23
+ console.log("TX:", logInfo.signature);
24
+ // =========================
25
+ // GET TX
26
+ // =========================
27
+ const tx = await rpc_1.connection.getTransaction(logInfo.signature, {
28
+ commitment: "confirmed",
29
+ maxSupportedTransactionVersion: 0,
30
+ });
31
+ if (!tx)
32
+ return;
33
+ const logs = tx.meta?.logMessages || [];
34
+ // =========================
35
+ // PARSE EVENTS
36
+ // =========================
37
+ const events = (0, eventParser_1.parseEventsSafely)(logs);
38
+ console.log("EVENTS:", events);
39
+ // =========================
40
+ // HANDLE EVENTS
41
+ // =========================
42
+ for (const event of events) {
43
+ console.log("EVENT:", event.name);
44
+ if (event.name === "StreamCreated") {
45
+ await handleStreamCreated(event.data, tx, logInfo.signature);
46
+ }
47
+ else if (event.name === "TokensClaimed") {
48
+ await handleTokensClaimed(event.data, tx, logInfo.signature);
49
+ }
50
+ else if (event.name === "MilestoneUnlocked") {
51
+ await handleMilestoneUnlocked(event.data, tx, logInfo.signature);
52
+ }
53
+ else if (event.name === "StreamCancelled") {
54
+ await handleStreamCancelled(event.data, tx, logInfo.signature);
55
+ }
56
+ else if (event.name === "MilestoneEdited") {
57
+ await handleMilestoneEdited(event.data, tx, logInfo.signature);
58
+ }
59
+ else if (event.name === "LinearEdited") {
60
+ await handleLinearEdited(event.data, tx, logInfo.signature);
61
+ }
62
+ else if (event.name === "CliffEdited") {
63
+ await handleCliffEdited(event.data, tx, logInfo.signature);
64
+ }
65
+ }
66
+ }
67
+ catch (err) {
68
+ console.error("Error in indexing transaction log logs:", err);
69
+ }
70
+ }, "confirmed");
71
+ }
72
+ async function handleStreamCreated(event, tx, signature) {
73
+ console.log("STREAM CREATED:", event);
74
+ const normalized = (0, eventNormalizer_1.normalizeStreamCreated)(event);
75
+ if (!normalized) {
76
+ console.warn("Skipping StreamCreated event with missing fields:", event);
77
+ return;
78
+ }
79
+ const streamId = normalized.stream;
80
+ const milestoneCount = normalized.milestoneCount;
81
+ // Fetch milestones FIRST before upsert to avoid empty milestones window
82
+ let milestonesStr = "";
83
+ if (milestoneCount > 0) {
84
+ try {
85
+ const provider = new anchor_1.AnchorProvider(rpc_1.connection, { publicKey: web3_js_2.Keypair.generate().publicKey, signTransaction: async () => { throw new Error("Read-only"); }, signAllTransactions: async () => { throw new Error("Read-only"); } }, { commitment: "confirmed" });
86
+ const program = new anchor_1.Program(PROGRAM_IDL, provider);
87
+ const amounts = [];
88
+ for (let i = 0; i < milestoneCount; i++) {
89
+ const [milestonePda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("milestone"), new web3_js_1.PublicKey(streamId).toBuffer(), Buffer.from([i])], PROGRAM_ID);
90
+ const account = await program.account.milestoneAccount.fetch(milestonePda);
91
+ amounts.push(account.amount.toString());
92
+ }
93
+ milestonesStr = amounts.join(";");
94
+ console.log(`Fetched ${milestoneCount} milestones for stream ${streamId}`);
95
+ }
96
+ catch (error) {
97
+ console.error(`Error fetching milestones for stream ${streamId}:`, error);
98
+ }
99
+ }
100
+ await prisma_1.default.stream.upsert({
101
+ where: { id: streamId },
102
+ update: {
103
+ // Only update milestones if we fetched them successfully
104
+ // Never overwrite isCsvCreated — mark-origin may have already set it
105
+ ...(milestonesStr ? { milestones: milestonesStr } : {}),
106
+ },
107
+ create: {
108
+ id: streamId,
109
+ creator: normalized.creator,
110
+ recipient: normalized.recipient,
111
+ mint: normalized.mint,
112
+ vault: normalized.vault,
113
+ totalAmount: normalized.totalAmount,
114
+ withdrawn: BigInt(0),
115
+ startTs: normalized.startTs,
116
+ cliffTs: normalized.cliffTs,
117
+ endTs: normalized.endTs,
118
+ vestingType: normalized.vestingType,
119
+ status: 1,
120
+ cancelable: normalized.cancelable,
121
+ milestoneCount: normalized.milestoneCount,
122
+ milestones: milestonesStr,
123
+ nonce: normalized.nonce,
124
+ bump: 0,
125
+ isCsvCreated: false, // default; mark-origin will update after frontend deploy
126
+ }
127
+ });
128
+ await prisma_1.default.transaction.upsert({
129
+ where: { signature },
130
+ update: {},
131
+ create: {
132
+ id: signature,
133
+ signature,
134
+ slot: BigInt(tx.slot),
135
+ streamId: streamId,
136
+ type: "CREATE_STREAM",
137
+ raw: JSON.parse(JSON.stringify(tx)),
138
+ },
139
+ });
140
+ console.log("Indexed stream:", streamId);
141
+ }
142
+ async function handleTokensClaimed(event, tx, signature) {
143
+ console.log("TOKENS CLAIMED:", event);
144
+ const normalized = (0, eventNormalizer_1.normalizeTokensClaimed)(event);
145
+ if (!normalized) {
146
+ console.warn("Skipping TokensClaimed event with missing fields:", event);
147
+ return;
148
+ }
149
+ const streamId = normalized.stream;
150
+ const withdrawnTotal = normalized.withdrawnTotal;
151
+ // Fetch stream totalAmount to check if it's completed
152
+ const stream = await prisma_1.default.stream.findUnique({
153
+ where: { id: streamId }
154
+ });
155
+ if (stream) {
156
+ let newStatus = 1; // ACTIVE
157
+ if (withdrawnTotal >= stream.totalAmount) {
158
+ newStatus = 2; // COMPLETED
159
+ }
160
+ await prisma_1.default.stream.update({
161
+ where: { id: streamId },
162
+ data: {
163
+ withdrawn: withdrawnTotal,
164
+ status: newStatus
165
+ }
166
+ });
167
+ }
168
+ else {
169
+ console.log(`Stream ${streamId} not found in database, skipping balance update.`);
170
+ }
171
+ await prisma_1.default.transaction.upsert({
172
+ where: { signature },
173
+ update: {},
174
+ create: {
175
+ id: signature,
176
+ signature,
177
+ slot: BigInt(tx.slot),
178
+ streamId: stream ? streamId : null,
179
+ type: "WITHDRAW",
180
+ raw: JSON.parse(JSON.stringify(tx)),
181
+ }
182
+ });
183
+ console.log(`Indexed withdrawal for stream ${streamId}: ${normalized.claimable.toString()} tokens`);
184
+ }
185
+ async function handleMilestoneUnlocked(event, tx, signature) {
186
+ console.log("MILESTONE UNLOCKED:", event);
187
+ const normalized = (0, eventNormalizer_1.normalizeMilestoneUnlocked)(event);
188
+ if (!normalized) {
189
+ console.warn("Skipping MilestoneUnlocked event with missing fields:", event);
190
+ return;
191
+ }
192
+ const streamId = normalized.stream;
193
+ const milestoneAmount = normalized.amount;
194
+ const unlockTs = normalized.unlockTs;
195
+ const completionTs = unlockTs ?? (tx.blockTime !== null && tx.blockTime !== undefined ? BigInt(tx.blockTime) : null);
196
+ // Fetch stream to update its unlockedAmount
197
+ const stream = await prisma_1.default.stream.findUnique({
198
+ where: { id: streamId }
199
+ });
200
+ if (stream) {
201
+ const currentUnlocked = stream.unlockedAmount || BigInt(0);
202
+ const updatedUnlocked = currentUnlocked + milestoneAmount;
203
+ const completed = updatedUnlocked >= stream.totalAmount;
204
+ await prisma_1.default.stream.update({
205
+ where: { id: streamId },
206
+ data: {
207
+ unlockedAmount: updatedUnlocked,
208
+ status: completed ? 2 : stream.status,
209
+ completedAt: completed && completionTs !== null ? completionTs : stream.completedAt,
210
+ }
211
+ });
212
+ }
213
+ else {
214
+ console.log(`Stream ${streamId} not found in database during milestone unlock, skipping.`);
215
+ }
216
+ await prisma_1.default.transaction.upsert({
217
+ where: { signature },
218
+ update: {},
219
+ create: {
220
+ id: signature,
221
+ signature,
222
+ slot: BigInt(tx.slot),
223
+ streamId: stream ? streamId : null,
224
+ type: "MILESTONE_UNLOCKED",
225
+ raw: JSON.parse(JSON.stringify(tx)),
226
+ }
227
+ });
228
+ console.log(`Indexed milestone unlock for stream ${streamId}: unlocked ${milestoneAmount.toString()} tokens`);
229
+ }
230
+ async function handleStreamCancelled(event, tx, signature) {
231
+ console.log("STREAM CANCELLED:", event);
232
+ const normalized = (0, eventNormalizer_1.normalizeStreamCancelled)(event);
233
+ if (!normalized) {
234
+ console.warn("Skipping StreamCancelled event with missing fields:", event);
235
+ return;
236
+ }
237
+ const streamId = normalized.stream;
238
+ const stream = await prisma_1.default.stream.findUnique({
239
+ where: { id: streamId }
240
+ });
241
+ if (stream) {
242
+ const nextWithdrawn = stream.withdrawn + normalized.claimableForRecipient;
243
+ await prisma_1.default.stream.update({
244
+ where: { id: streamId },
245
+ data: {
246
+ withdrawn: nextWithdrawn,
247
+ status: 3,
248
+ }
249
+ });
250
+ }
251
+ else {
252
+ console.log(`Stream ${streamId} not found in database, skipping cancel update.`);
253
+ }
254
+ await prisma_1.default.transaction.upsert({
255
+ where: { signature },
256
+ update: {},
257
+ create: {
258
+ id: signature,
259
+ signature,
260
+ slot: BigInt(tx.slot),
261
+ streamId: stream ? streamId : null,
262
+ type: "CANCEL",
263
+ raw: JSON.parse(JSON.stringify(tx)),
264
+ }
265
+ });
266
+ console.log(`Indexed cancel for stream ${streamId}: vested ${normalized.vestedAmount.toString()} tokens`);
267
+ }
268
+ async function handleMilestoneEdited(event, tx, signature) {
269
+ console.log("MILESTONE EDITED:", event);
270
+ const normalized = (0, eventNormalizer_1.normalizeMilestoneEdited)(event);
271
+ if (!normalized) {
272
+ console.warn("Skipping MilestoneEdited event with missing fields:", event);
273
+ return;
274
+ }
275
+ const streamId = normalized.stream;
276
+ const stream = await prisma_1.default.stream.findUnique({ where: { id: streamId } });
277
+ if (stream) {
278
+ const diff = normalized.newAmount - normalized.oldAmount;
279
+ const updatedTotal = stream.totalAmount + diff;
280
+ let milestonesArr = stream.milestones ? stream.milestones.split(";") : [];
281
+ while (milestonesArr.length <= normalized.index) {
282
+ milestonesArr.push("0");
283
+ }
284
+ milestonesArr[normalized.index] = normalized.newAmount.toString();
285
+ await prisma_1.default.stream.update({
286
+ where: { id: streamId },
287
+ data: {
288
+ totalAmount: updatedTotal,
289
+ milestones: milestonesArr.join(";"),
290
+ }
291
+ });
292
+ }
293
+ await prisma_1.default.transaction.upsert({
294
+ where: { signature },
295
+ update: {},
296
+ create: {
297
+ id: signature,
298
+ signature,
299
+ slot: BigInt(tx.slot),
300
+ streamId: stream ? streamId : null,
301
+ type: "MILESTONE_EDITED",
302
+ raw: JSON.parse(JSON.stringify(tx)),
303
+ }
304
+ });
305
+ }
306
+ async function handleLinearEdited(event, tx, signature) {
307
+ console.log("LINEAR EDITED:", event);
308
+ const normalized = (0, eventNormalizer_1.normalizeLinearEdited)(event);
309
+ if (!normalized) {
310
+ console.warn("Skipping LinearEdited event with missing fields:", event);
311
+ return;
312
+ }
313
+ const streamId = normalized.stream;
314
+ const stream = await prisma_1.default.stream.findUnique({ where: { id: streamId } });
315
+ if (stream) {
316
+ await prisma_1.default.stream.update({
317
+ where: { id: streamId },
318
+ data: {
319
+ endTs: normalized.newEndTs,
320
+ totalAmount: normalized.newTotalAmount,
321
+ }
322
+ });
323
+ }
324
+ await prisma_1.default.transaction.upsert({
325
+ where: { signature },
326
+ update: {},
327
+ create: {
328
+ id: signature,
329
+ signature,
330
+ slot: BigInt(tx.slot),
331
+ streamId: stream ? streamId : null,
332
+ type: "LINEAR_EDITED",
333
+ raw: JSON.parse(JSON.stringify(tx)),
334
+ }
335
+ });
336
+ }
337
+ async function handleCliffEdited(event, tx, signature) {
338
+ console.log("CLIFF EDITED:", event);
339
+ const normalized = (0, eventNormalizer_1.normalizeCliffEdited)(event);
340
+ if (!normalized) {
341
+ console.warn("Skipping CliffEdited event with missing fields:", event);
342
+ return;
343
+ }
344
+ const streamId = normalized.stream;
345
+ const stream = await prisma_1.default.stream.findUnique({ where: { id: streamId } });
346
+ if (stream) {
347
+ await prisma_1.default.stream.update({
348
+ where: { id: streamId },
349
+ data: {
350
+ cliffTs: normalized.newCliffTs,
351
+ }
352
+ });
353
+ }
354
+ await prisma_1.default.transaction.upsert({
355
+ where: { signature },
356
+ update: {},
357
+ create: {
358
+ id: signature,
359
+ signature,
360
+ slot: BigInt(tx.slot),
361
+ streamId: stream ? streamId : null,
362
+ type: "CLIFF_EDITED",
363
+ raw: JSON.parse(JSON.stringify(tx)),
364
+ }
365
+ });
366
+ }
367
+ //# sourceMappingURL=streamIndexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamIndexer.js","sourceRoot":"","sources":["../../src/services/streamIndexer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@unifiedflow/cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool for Unified Flow token distribution protocol",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "unifiedflow": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "prepublishOnly": "npm run build",
16
+ "start": "node dist/index.js"
17
+ },
18
+ "keywords": [
19
+ "solana",
20
+ "token",
21
+ "vesting",
22
+ "distribution",
23
+ "cli",
24
+ "blockchain"
25
+ ],
26
+ "author": "",
27
+ "license": "ISC",
28
+ "dependencies": {
29
+ "@coral-xyz/anchor": "^0.32.1",
30
+ "@solana/spl-token": "^0.4.14",
31
+ "@solana/web3.js": "^1.98.4",
32
+ "bs58": "^6.0.0",
33
+ "dotenv": "^16.6.1"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^20.19.41",
37
+ "typescript": "^5.9.3"
38
+ },
39
+ "engines": {
40
+ "node": ">=16.0.0"
41
+ }
42
+ }