@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.
@@ -0,0 +1,5 @@
1
+ export { FlowcraftClient, IDL } from "./client";
2
+ export { Config, Pool, Stream, Segment, PoolInfo, StreamInfo, SegmentInfo, PoolAggregateStats, StreamWithAddress, CreatePoolParams, SubscribeParams, AddSegmentParams, ClaimParams, CancelSegmentParams, UpgradeSegmentParams, } from "./types";
3
+ export { PROGRAM_ID, RATE_DECIMALS, BPS_DENOMINATOR, MAX_FEE_BPS, MAX_SEGMENTS, CONFIG_SEED, POOL_SEED, STREAM_SEED, VAULT_SEED, } from "./constants";
4
+ export { getConfigPda, getPoolPda, getStreamPda, getVaultPda, calculateFee, calculateNetAmount, calculateRate, calculateRemainingDuration, calculateUpgradeCost, calculateSegmentVested, calculateStreamVesting, bnToNumber, numberToBn, formatTokenAmount, toBN, } from "./utils";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,EACL,MAAM,EACN,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,IAAI,GACL,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toBN = exports.formatTokenAmount = exports.numberToBn = exports.bnToNumber = exports.calculateStreamVesting = exports.calculateSegmentVested = exports.calculateUpgradeCost = exports.calculateRemainingDuration = exports.calculateRate = exports.calculateNetAmount = exports.calculateFee = exports.getVaultPda = exports.getStreamPda = exports.getPoolPda = exports.getConfigPda = 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 = exports.IDL = exports.FlowcraftClient = void 0;
4
+ // Main client
5
+ var client_1 = require("./client");
6
+ Object.defineProperty(exports, "FlowcraftClient", { enumerable: true, get: function () { return client_1.FlowcraftClient; } });
7
+ Object.defineProperty(exports, "IDL", { enumerable: true, get: function () { return client_1.IDL; } });
8
+ // Constants
9
+ var constants_1 = require("./constants");
10
+ Object.defineProperty(exports, "PROGRAM_ID", { enumerable: true, get: function () { return constants_1.PROGRAM_ID; } });
11
+ Object.defineProperty(exports, "RATE_DECIMALS", { enumerable: true, get: function () { return constants_1.RATE_DECIMALS; } });
12
+ Object.defineProperty(exports, "BPS_DENOMINATOR", { enumerable: true, get: function () { return constants_1.BPS_DENOMINATOR; } });
13
+ Object.defineProperty(exports, "MAX_FEE_BPS", { enumerable: true, get: function () { return constants_1.MAX_FEE_BPS; } });
14
+ Object.defineProperty(exports, "MAX_SEGMENTS", { enumerable: true, get: function () { return constants_1.MAX_SEGMENTS; } });
15
+ Object.defineProperty(exports, "CONFIG_SEED", { enumerable: true, get: function () { return constants_1.CONFIG_SEED; } });
16
+ Object.defineProperty(exports, "POOL_SEED", { enumerable: true, get: function () { return constants_1.POOL_SEED; } });
17
+ Object.defineProperty(exports, "STREAM_SEED", { enumerable: true, get: function () { return constants_1.STREAM_SEED; } });
18
+ Object.defineProperty(exports, "VAULT_SEED", { enumerable: true, get: function () { return constants_1.VAULT_SEED; } });
19
+ // Utilities
20
+ var utils_1 = require("./utils");
21
+ Object.defineProperty(exports, "getConfigPda", { enumerable: true, get: function () { return utils_1.getConfigPda; } });
22
+ Object.defineProperty(exports, "getPoolPda", { enumerable: true, get: function () { return utils_1.getPoolPda; } });
23
+ Object.defineProperty(exports, "getStreamPda", { enumerable: true, get: function () { return utils_1.getStreamPda; } });
24
+ Object.defineProperty(exports, "getVaultPda", { enumerable: true, get: function () { return utils_1.getVaultPda; } });
25
+ Object.defineProperty(exports, "calculateFee", { enumerable: true, get: function () { return utils_1.calculateFee; } });
26
+ Object.defineProperty(exports, "calculateNetAmount", { enumerable: true, get: function () { return utils_1.calculateNetAmount; } });
27
+ Object.defineProperty(exports, "calculateRate", { enumerable: true, get: function () { return utils_1.calculateRate; } });
28
+ Object.defineProperty(exports, "calculateRemainingDuration", { enumerable: true, get: function () { return utils_1.calculateRemainingDuration; } });
29
+ Object.defineProperty(exports, "calculateUpgradeCost", { enumerable: true, get: function () { return utils_1.calculateUpgradeCost; } });
30
+ Object.defineProperty(exports, "calculateSegmentVested", { enumerable: true, get: function () { return utils_1.calculateSegmentVested; } });
31
+ Object.defineProperty(exports, "calculateStreamVesting", { enumerable: true, get: function () { return utils_1.calculateStreamVesting; } });
32
+ Object.defineProperty(exports, "bnToNumber", { enumerable: true, get: function () { return utils_1.bnToNumber; } });
33
+ Object.defineProperty(exports, "numberToBn", { enumerable: true, get: function () { return utils_1.numberToBn; } });
34
+ Object.defineProperty(exports, "formatTokenAmount", { enumerable: true, get: function () { return utils_1.formatTokenAmount; } });
35
+ Object.defineProperty(exports, "toBN", { enumerable: true, get: function () { return utils_1.toBN; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,mCAAgD;AAAvC,yGAAA,eAAe,OAAA;AAAE,6FAAA,GAAG,OAAA;AAqB7B,YAAY;AACZ,yCAUqB;AATnB,uGAAA,UAAU,OAAA;AACV,0GAAA,aAAa,OAAA;AACb,4GAAA,eAAe,OAAA;AACf,wGAAA,WAAW,OAAA;AACX,yGAAA,YAAY,OAAA;AACZ,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,wGAAA,WAAW,OAAA;AACX,uGAAA,UAAU,OAAA;AAGZ,YAAY;AACZ,iCAgBiB;AAff,qGAAA,YAAY,OAAA;AACZ,mGAAA,UAAU,OAAA;AACV,qGAAA,YAAY,OAAA;AACZ,oGAAA,WAAW,OAAA;AACX,qGAAA,YAAY,OAAA;AACZ,2GAAA,kBAAkB,OAAA;AAClB,sGAAA,aAAa,OAAA;AACb,mHAAA,0BAA0B,OAAA;AAC1B,6GAAA,oBAAoB,OAAA;AACpB,+GAAA,sBAAsB,OAAA;AACtB,+GAAA,sBAAsB,OAAA;AACtB,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,0GAAA,iBAAiB,OAAA;AACjB,6FAAA,IAAI,OAAA"}
@@ -0,0 +1,135 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { BN } from "@coral-xyz/anchor";
3
+ export interface Config {
4
+ admin: PublicKey;
5
+ treasury: PublicKey;
6
+ feeBps: BN;
7
+ bump: number;
8
+ }
9
+ export interface Pool {
10
+ owner: PublicKey;
11
+ mint: PublicKey;
12
+ name: string;
13
+ totalSubscribers: BN;
14
+ totalDeposited: BN;
15
+ totalWithdrawn: BN;
16
+ totalRefunded: BN;
17
+ createdAt: BN;
18
+ bump: number;
19
+ }
20
+ export interface Segment {
21
+ tier: string;
22
+ payer: PublicKey;
23
+ ratePerSecond: BN;
24
+ amount: BN;
25
+ vested: BN;
26
+ cancelled: boolean;
27
+ }
28
+ export interface Stream {
29
+ pool: PublicKey;
30
+ subscriber: PublicKey;
31
+ startTime: BN;
32
+ lastUpdateTime: BN;
33
+ archivedCount: BN;
34
+ archivedAmount: BN;
35
+ archivedVested: BN;
36
+ totalWithdrawn: BN;
37
+ currentSegmentIndex: number;
38
+ bump: number;
39
+ segments: Segment[];
40
+ }
41
+ export interface CreatePoolParams {
42
+ name: string;
43
+ mint: PublicKey;
44
+ }
45
+ export interface SubscribeParams {
46
+ pool: PublicKey;
47
+ tier: string;
48
+ amount: BN | number;
49
+ durationSeconds: BN | number;
50
+ subscriberTokenAccount: PublicKey;
51
+ treasuryTokenAccount: PublicKey;
52
+ }
53
+ export interface AddSegmentParams {
54
+ pool: PublicKey;
55
+ stream: PublicKey;
56
+ tier: string;
57
+ amount: BN | number;
58
+ durationSeconds: BN | number;
59
+ payerTokenAccount: PublicKey;
60
+ treasuryTokenAccount: PublicKey;
61
+ }
62
+ export interface ClaimParams {
63
+ pool: PublicKey;
64
+ stream: PublicKey;
65
+ ownerTokenAccount: PublicKey;
66
+ }
67
+ export interface CancelSegmentParams {
68
+ pool: PublicKey;
69
+ stream: PublicKey;
70
+ segmentIndex: number;
71
+ refundTokenAccount: PublicKey;
72
+ }
73
+ export interface UpgradeSegmentParams {
74
+ pool: PublicKey;
75
+ stream: PublicKey;
76
+ subscriber: PublicKey;
77
+ segmentIndex: number;
78
+ newAmount: BN | number;
79
+ newDuration: BN | number;
80
+ callerTokenAccount: PublicKey;
81
+ payerTokenAccount: PublicKey;
82
+ }
83
+ export interface PoolInfo {
84
+ address: PublicKey;
85
+ owner: PublicKey;
86
+ mint: PublicKey;
87
+ name: string;
88
+ totalSubscribers: number;
89
+ totalDeposited: BN;
90
+ totalWithdrawn: BN;
91
+ totalRefunded: BN;
92
+ createdAt: Date;
93
+ }
94
+ export interface StreamInfo {
95
+ address: PublicKey;
96
+ pool: PublicKey;
97
+ subscriber: PublicKey;
98
+ startTime: Date;
99
+ totalDeposited: BN;
100
+ totalVested: BN;
101
+ totalWithdrawn: BN;
102
+ claimable: BN;
103
+ activeSegments: number;
104
+ cancelledSegments: number;
105
+ isExpired: boolean;
106
+ segments: SegmentInfo[];
107
+ }
108
+ export interface SegmentInfo {
109
+ index: number;
110
+ tier: string;
111
+ payer: PublicKey;
112
+ amount: BN;
113
+ vested: BN;
114
+ unvested: BN;
115
+ ratePerSecond: BN;
116
+ cancelled: boolean;
117
+ isComplete: boolean;
118
+ }
119
+ export interface PoolAggregateStats {
120
+ pool: PublicKey;
121
+ totalStreams: number;
122
+ activeStreams: number;
123
+ expiredStreams: number;
124
+ totalDeposited: BN;
125
+ totalVested: BN;
126
+ totalWithdrawn: BN;
127
+ totalClaimable: BN;
128
+ totalUnvested: BN;
129
+ calculatedAt: Date;
130
+ }
131
+ export interface StreamWithAddress {
132
+ address: PublicKey;
133
+ stream: Stream;
134
+ }
135
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { BN } from "@coral-xyz/anchor";
3
+ /**
4
+ * Derive the config PDA
5
+ */
6
+ export declare function getConfigPda(programId?: PublicKey): [PublicKey, number];
7
+ /**
8
+ * Derive the pool PDA for an owner and pool name
9
+ */
10
+ export declare function getPoolPda(owner: PublicKey, name: string, programId?: PublicKey): [PublicKey, number];
11
+ /**
12
+ * Derive the stream PDA for a pool and subscriber
13
+ */
14
+ export declare function getStreamPda(pool: PublicKey, subscriber: PublicKey, programId?: PublicKey): [PublicKey, number];
15
+ /**
16
+ * Derive the vault PDA for a pool
17
+ */
18
+ export declare function getVaultPda(pool: PublicKey, programId?: PublicKey): [PublicKey, number];
19
+ /**
20
+ * Calculate fee amount from gross amount
21
+ */
22
+ export declare function calculateFee(amount: BN, feeBps: BN): BN;
23
+ /**
24
+ * Calculate net amount after fee deduction
25
+ */
26
+ export declare function calculateNetAmount(amount: BN, feeBps: BN): BN;
27
+ /**
28
+ * Calculate rate per second from amount and duration
29
+ */
30
+ export declare function calculateRate(amount: BN, durationSeconds: BN): BN;
31
+ /**
32
+ * Calculate remaining duration from unvested amount and rate
33
+ */
34
+ export declare function calculateRemainingDuration(unvested: BN, ratePerSecond: BN): BN;
35
+ /**
36
+ * Calculate new cost at a different rate for remaining duration
37
+ */
38
+ export declare function calculateUpgradeCost(unvested: BN, currentRate: BN, newRate: BN): {
39
+ newCost: BN;
40
+ difference: BN;
41
+ isUpgrade: boolean;
42
+ };
43
+ /**
44
+ * Convert BN to number (for display purposes)
45
+ */
46
+ export declare function bnToNumber(bn: BN, decimals?: number): number;
47
+ /**
48
+ * Convert number to BN with decimals
49
+ */
50
+ export declare function numberToBn(num: number, decimals?: number): BN;
51
+ /**
52
+ * Format token amount with decimals
53
+ */
54
+ export declare function formatTokenAmount(amount: BN, decimals: number): string;
55
+ /**
56
+ * Ensure value is BN
57
+ */
58
+ export declare function toBN(value: BN | number): BN;
59
+ /**
60
+ * Calculate real-time vested amount for a segment based on current time
61
+ */
62
+ export declare function calculateSegmentVested(segment: {
63
+ amount: BN;
64
+ vested: BN;
65
+ ratePerSecond: BN;
66
+ cancelled: boolean;
67
+ }, lastUpdateTime: BN, currentTime: number): BN;
68
+ /**
69
+ * Calculate real-time vesting for an entire stream
70
+ * Returns { totalVested, totalUnvested, claimable, isExpired }
71
+ */
72
+ export declare function calculateStreamVesting(stream: {
73
+ segments: Array<{
74
+ amount: BN;
75
+ vested: BN;
76
+ ratePerSecond: BN;
77
+ cancelled: boolean;
78
+ }>;
79
+ lastUpdateTime: BN;
80
+ archivedVested: BN;
81
+ archivedAmount: BN;
82
+ totalWithdrawn: BN;
83
+ }, currentTime?: number): {
84
+ totalDeposited: BN;
85
+ totalVested: BN;
86
+ totalUnvested: BN;
87
+ claimable: BN;
88
+ isExpired: boolean;
89
+ };
90
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js ADDED
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfigPda = getConfigPda;
4
+ exports.getPoolPda = getPoolPda;
5
+ exports.getStreamPda = getStreamPda;
6
+ exports.getVaultPda = getVaultPda;
7
+ exports.calculateFee = calculateFee;
8
+ exports.calculateNetAmount = calculateNetAmount;
9
+ exports.calculateRate = calculateRate;
10
+ exports.calculateRemainingDuration = calculateRemainingDuration;
11
+ exports.calculateUpgradeCost = calculateUpgradeCost;
12
+ exports.bnToNumber = bnToNumber;
13
+ exports.numberToBn = numberToBn;
14
+ exports.formatTokenAmount = formatTokenAmount;
15
+ exports.toBN = toBN;
16
+ exports.calculateSegmentVested = calculateSegmentVested;
17
+ exports.calculateStreamVesting = calculateStreamVesting;
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const anchor_1 = require("@coral-xyz/anchor");
20
+ const constants_1 = require("./constants");
21
+ /**
22
+ * Derive the config PDA
23
+ */
24
+ function getConfigPda(programId = constants_1.PROGRAM_ID) {
25
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.CONFIG_SEED)], programId);
26
+ }
27
+ /**
28
+ * Derive the pool PDA for an owner and pool name
29
+ */
30
+ function getPoolPda(owner, name, programId = constants_1.PROGRAM_ID) {
31
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.POOL_SEED), owner.toBuffer(), Buffer.from(name)], programId);
32
+ }
33
+ /**
34
+ * Derive the stream PDA for a pool and subscriber
35
+ */
36
+ function getStreamPda(pool, subscriber, programId = constants_1.PROGRAM_ID) {
37
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.STREAM_SEED), pool.toBuffer(), subscriber.toBuffer()], programId);
38
+ }
39
+ /**
40
+ * Derive the vault PDA for a pool
41
+ */
42
+ function getVaultPda(pool, programId = constants_1.PROGRAM_ID) {
43
+ return web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.VAULT_SEED), pool.toBuffer()], programId);
44
+ }
45
+ /**
46
+ * Calculate fee amount from gross amount
47
+ */
48
+ function calculateFee(amount, feeBps) {
49
+ return amount.mul(feeBps).div(new anchor_1.BN(constants_1.BPS_DENOMINATOR.toString()));
50
+ }
51
+ /**
52
+ * Calculate net amount after fee deduction
53
+ */
54
+ function calculateNetAmount(amount, feeBps) {
55
+ const fee = calculateFee(amount, feeBps);
56
+ return amount.sub(fee);
57
+ }
58
+ /**
59
+ * Calculate rate per second from amount and duration
60
+ */
61
+ function calculateRate(amount, durationSeconds) {
62
+ return amount
63
+ .mul(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()))
64
+ .div(durationSeconds);
65
+ }
66
+ /**
67
+ * Calculate remaining duration from unvested amount and rate
68
+ */
69
+ function calculateRemainingDuration(unvested, ratePerSecond) {
70
+ return unvested
71
+ .mul(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()))
72
+ .div(ratePerSecond);
73
+ }
74
+ /**
75
+ * Calculate new cost at a different rate for remaining duration
76
+ */
77
+ function calculateUpgradeCost(unvested, currentRate, newRate) {
78
+ const remainingDuration = calculateRemainingDuration(unvested, currentRate);
79
+ const newCost = remainingDuration
80
+ .mul(newRate)
81
+ .div(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()));
82
+ const isUpgrade = newCost.gt(unvested);
83
+ const difference = isUpgrade
84
+ ? newCost.sub(unvested)
85
+ : unvested.sub(newCost);
86
+ return { newCost, difference, isUpgrade };
87
+ }
88
+ /**
89
+ * Convert BN to number (for display purposes)
90
+ */
91
+ function bnToNumber(bn, decimals = 0) {
92
+ if (decimals === 0)
93
+ return bn.toNumber();
94
+ return bn.toNumber() / Math.pow(10, decimals);
95
+ }
96
+ /**
97
+ * Convert number to BN with decimals
98
+ */
99
+ function numberToBn(num, decimals = 0) {
100
+ return new anchor_1.BN(Math.floor(num * Math.pow(10, decimals)));
101
+ }
102
+ /**
103
+ * Format token amount with decimals
104
+ */
105
+ function formatTokenAmount(amount, decimals) {
106
+ const str = amount.toString().padStart(decimals + 1, "0");
107
+ const intPart = str.slice(0, -decimals) || "0";
108
+ const decPart = str.slice(-decimals);
109
+ return `${intPart}.${decPart}`;
110
+ }
111
+ /**
112
+ * Ensure value is BN
113
+ */
114
+ function toBN(value) {
115
+ return typeof value === "number" ? new anchor_1.BN(value) : value;
116
+ }
117
+ /**
118
+ * Calculate real-time vested amount for a segment based on current time
119
+ */
120
+ function calculateSegmentVested(segment, lastUpdateTime, currentTime) {
121
+ if (segment.cancelled) {
122
+ return segment.vested;
123
+ }
124
+ const elapsed = new anchor_1.BN(currentTime).sub(lastUpdateTime);
125
+ if (elapsed.lten(0)) {
126
+ return segment.vested;
127
+ }
128
+ const additionalVested = elapsed
129
+ .mul(segment.ratePerSecond)
130
+ .div(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()));
131
+ const unvested = segment.amount.sub(segment.vested);
132
+ const newVested = anchor_1.BN.min(additionalVested, unvested);
133
+ return segment.vested.add(newVested);
134
+ }
135
+ /**
136
+ * Calculate real-time vesting for an entire stream
137
+ * Returns { totalVested, totalUnvested, claimable, isExpired }
138
+ */
139
+ function calculateStreamVesting(stream, currentTime = Math.floor(Date.now() / 1000)) {
140
+ let totalDeposited = stream.archivedAmount;
141
+ let totalVested = stream.archivedVested;
142
+ let remainingTime = new anchor_1.BN(currentTime).sub(stream.lastUpdateTime);
143
+ let allComplete = true;
144
+ for (const segment of stream.segments) {
145
+ totalDeposited = totalDeposited.add(segment.amount);
146
+ if (segment.cancelled) {
147
+ totalVested = totalVested.add(segment.vested);
148
+ continue;
149
+ }
150
+ const unvested = segment.amount.sub(segment.vested);
151
+ if (unvested.gtn(0)) {
152
+ // Calculate how much time this segment needs
153
+ const timeNeeded = unvested
154
+ .mul(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()))
155
+ .div(segment.ratePerSecond);
156
+ if (remainingTime.gte(timeNeeded)) {
157
+ // Segment fully vests
158
+ totalVested = totalVested.add(segment.amount);
159
+ remainingTime = remainingTime.sub(timeNeeded);
160
+ }
161
+ else {
162
+ // Partial vesting
163
+ const additionalVested = remainingTime
164
+ .mul(segment.ratePerSecond)
165
+ .div(new anchor_1.BN(constants_1.RATE_DECIMALS.toString()));
166
+ totalVested = totalVested.add(segment.vested).add(additionalVested);
167
+ remainingTime = new anchor_1.BN(0);
168
+ allComplete = false;
169
+ }
170
+ }
171
+ else {
172
+ totalVested = totalVested.add(segment.vested);
173
+ }
174
+ }
175
+ const totalUnvested = totalDeposited.sub(totalVested);
176
+ const claimable = totalVested.sub(stream.totalWithdrawn);
177
+ return {
178
+ totalDeposited,
179
+ totalVested,
180
+ totalUnvested,
181
+ claimable: claimable.gtn(0) ? claimable : new anchor_1.BN(0),
182
+ isExpired: allComplete && totalUnvested.eqn(0),
183
+ };
184
+ }
185
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@craftec/flowcraft-sdk",
3
+ "version": "0.1.0",
4
+ "description": "SDK for Flowcraft subscription streaming protocol on Solana",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "clean": "rm -rf dist",
14
+ "prepublishOnly": "npm run clean && npm run build"
15
+ },
16
+ "keywords": [
17
+ "solana",
18
+ "subscription",
19
+ "streaming",
20
+ "payments",
21
+ "anchor",
22
+ "web3",
23
+ "blockchain",
24
+ "defi"
25
+ ],
26
+ "author": "Flowcraft",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/handcraftdev/flowcraft.git",
31
+ "directory": "sdk"
32
+ },
33
+ "homepage": "https://github.com/handcraftdev/flowcraft#readme",
34
+ "bugs": {
35
+ "url": "https://github.com/handcraftdev/flowcraft/issues"
36
+ },
37
+ "dependencies": {
38
+ "@coral-xyz/anchor": "^0.32.1",
39
+ "@solana/web3.js": "^1.98.0",
40
+ "@solana/spl-token": "^0.4.13"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^5.0.0"
44
+ },
45
+ "peerDependencies": {
46
+ "@coral-xyz/anchor": ">=0.30.0",
47
+ "@solana/web3.js": ">=1.90.0"
48
+ },
49
+ "engines": {
50
+ "node": ">=18.0.0"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ }
55
+ }