starkfi 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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/commands/auth/import.d.ts +3 -0
  4. package/dist/commands/auth/import.d.ts.map +1 -0
  5. package/dist/commands/auth/import.js +56 -0
  6. package/dist/commands/auth/import.js.map +1 -0
  7. package/dist/commands/auth/login.d.ts +3 -0
  8. package/dist/commands/auth/login.d.ts.map +1 -0
  9. package/dist/commands/auth/login.js +23 -0
  10. package/dist/commands/auth/login.js.map +1 -0
  11. package/dist/commands/auth/logout.d.ts +3 -0
  12. package/dist/commands/auth/logout.d.ts.map +1 -0
  13. package/dist/commands/auth/logout.js +14 -0
  14. package/dist/commands/auth/logout.js.map +1 -0
  15. package/dist/commands/auth/verify.d.ts +3 -0
  16. package/dist/commands/auth/verify.d.ts.map +1 -0
  17. package/dist/commands/auth/verify.js +64 -0
  18. package/dist/commands/auth/verify.js.map +1 -0
  19. package/dist/commands/chain/tx-status.d.ts +3 -0
  20. package/dist/commands/chain/tx-status.d.ts.map +1 -0
  21. package/dist/commands/chain/tx-status.js +39 -0
  22. package/dist/commands/chain/tx-status.js.map +1 -0
  23. package/dist/commands/config/config.d.ts +3 -0
  24. package/dist/commands/config/config.d.ts.map +1 -0
  25. package/dist/commands/config/config.js +122 -0
  26. package/dist/commands/config/config.js.map +1 -0
  27. package/dist/commands/lending/lending.d.ts +8 -0
  28. package/dist/commands/lending/lending.d.ts.map +1 -0
  29. package/dist/commands/lending/lending.js +201 -0
  30. package/dist/commands/lending/lending.js.map +1 -0
  31. package/dist/commands/staking/staking.d.ts +8 -0
  32. package/dist/commands/staking/staking.d.ts.map +1 -0
  33. package/dist/commands/staking/staking.js +272 -0
  34. package/dist/commands/staking/staking.js.map +1 -0
  35. package/dist/commands/trade/status.d.ts +3 -0
  36. package/dist/commands/trade/status.d.ts.map +1 -0
  37. package/dist/commands/trade/status.js +41 -0
  38. package/dist/commands/trade/status.js.map +1 -0
  39. package/dist/commands/trade/swap.d.ts +3 -0
  40. package/dist/commands/trade/swap.d.ts.map +1 -0
  41. package/dist/commands/trade/swap.js +65 -0
  42. package/dist/commands/trade/swap.js.map +1 -0
  43. package/dist/commands/wallet/address.d.ts +3 -0
  44. package/dist/commands/wallet/address.d.ts.map +1 -0
  45. package/dist/commands/wallet/address.js +20 -0
  46. package/dist/commands/wallet/address.js.map +1 -0
  47. package/dist/commands/wallet/balance.d.ts +3 -0
  48. package/dist/commands/wallet/balance.d.ts.map +1 -0
  49. package/dist/commands/wallet/balance.js +46 -0
  50. package/dist/commands/wallet/balance.js.map +1 -0
  51. package/dist/commands/wallet/deploy.d.ts +3 -0
  52. package/dist/commands/wallet/deploy.d.ts.map +1 -0
  53. package/dist/commands/wallet/deploy.js +73 -0
  54. package/dist/commands/wallet/deploy.js.map +1 -0
  55. package/dist/commands/wallet/send.d.ts +3 -0
  56. package/dist/commands/wallet/send.d.ts.map +1 -0
  57. package/dist/commands/wallet/send.js +51 -0
  58. package/dist/commands/wallet/send.js.map +1 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +62 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/lib/cache.d.ts +3 -0
  64. package/dist/lib/cache.d.ts.map +1 -0
  65. package/dist/lib/cache.js +33 -0
  66. package/dist/lib/cache.js.map +1 -0
  67. package/dist/lib/command.d.ts +3 -0
  68. package/dist/lib/command.d.ts.map +1 -0
  69. package/dist/lib/command.js +6 -0
  70. package/dist/lib/command.js.map +1 -0
  71. package/dist/lib/config.d.ts +16 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +30 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/errors.d.ts +39 -0
  76. package/dist/lib/errors.d.ts.map +1 -0
  77. package/dist/lib/errors.js +45 -0
  78. package/dist/lib/errors.js.map +1 -0
  79. package/dist/lib/format.d.ts +10 -0
  80. package/dist/lib/format.d.ts.map +1 -0
  81. package/dist/lib/format.js +45 -0
  82. package/dist/lib/format.js.map +1 -0
  83. package/dist/lib/validation.d.ts +14 -0
  84. package/dist/lib/validation.d.ts.map +1 -0
  85. package/dist/lib/validation.js +28 -0
  86. package/dist/lib/validation.js.map +1 -0
  87. package/dist/mcp/handlers/auth.d.ts +7 -0
  88. package/dist/mcp/handlers/auth.d.ts.map +1 -0
  89. package/dist/mcp/handlers/auth.js +22 -0
  90. package/dist/mcp/handlers/auth.js.map +1 -0
  91. package/dist/mcp/handlers/config.d.ts +10 -0
  92. package/dist/mcp/handlers/config.d.ts.map +1 -0
  93. package/dist/mcp/handlers/config.js +79 -0
  94. package/dist/mcp/handlers/config.js.map +1 -0
  95. package/dist/mcp/handlers/index.d.ts +7 -0
  96. package/dist/mcp/handlers/index.d.ts.map +1 -0
  97. package/dist/mcp/handlers/index.js +7 -0
  98. package/dist/mcp/handlers/index.js.map +1 -0
  99. package/dist/mcp/handlers/lending.d.ts +62 -0
  100. package/dist/mcp/handlers/lending.d.ts.map +1 -0
  101. package/dist/mcp/handlers/lending.js +101 -0
  102. package/dist/mcp/handlers/lending.js.map +1 -0
  103. package/dist/mcp/handlers/staking.d.ts +56 -0
  104. package/dist/mcp/handlers/staking.d.ts.map +1 -0
  105. package/dist/mcp/handlers/staking.js +110 -0
  106. package/dist/mcp/handlers/staking.js.map +1 -0
  107. package/dist/mcp/handlers/trade.d.ts +22 -0
  108. package/dist/mcp/handlers/trade.d.ts.map +1 -0
  109. package/dist/mcp/handlers/trade.js +57 -0
  110. package/dist/mcp/handlers/trade.js.map +1 -0
  111. package/dist/mcp/handlers/utils.d.ts +13 -0
  112. package/dist/mcp/handlers/utils.d.ts.map +1 -0
  113. package/dist/mcp/handlers/utils.js +7 -0
  114. package/dist/mcp/handlers/utils.js.map +1 -0
  115. package/dist/mcp/handlers/wallet.d.ts +33 -0
  116. package/dist/mcp/handlers/wallet.d.ts.map +1 -0
  117. package/dist/mcp/handlers/wallet.js +83 -0
  118. package/dist/mcp/handlers/wallet.js.map +1 -0
  119. package/dist/mcp/handlers.d.ts +108 -0
  120. package/dist/mcp/handlers.d.ts.map +1 -0
  121. package/dist/mcp/handlers.js +325 -0
  122. package/dist/mcp/handlers.js.map +1 -0
  123. package/dist/mcp/server.d.ts +2 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +13 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/mcp/tools.d.ts +3 -0
  128. package/dist/mcp/tools.d.ts.map +1 -0
  129. package/dist/mcp/tools.js +156 -0
  130. package/dist/mcp/tools.js.map +1 -0
  131. package/dist/services/api/client.d.ts +26 -0
  132. package/dist/services/api/client.d.ts.map +1 -0
  133. package/dist/services/api/client.js +59 -0
  134. package/dist/services/api/client.js.map +1 -0
  135. package/dist/services/auth/session.d.ts +22 -0
  136. package/dist/services/auth/session.d.ts.map +1 -0
  137. package/dist/services/auth/session.js +36 -0
  138. package/dist/services/auth/session.js.map +1 -0
  139. package/dist/services/config/config.d.ts +20 -0
  140. package/dist/services/config/config.d.ts.map +1 -0
  141. package/dist/services/config/config.js +49 -0
  142. package/dist/services/config/config.js.map +1 -0
  143. package/dist/services/fibrous/balances.d.ts +8 -0
  144. package/dist/services/fibrous/balances.d.ts.map +1 -0
  145. package/dist/services/fibrous/balances.js +23 -0
  146. package/dist/services/fibrous/balances.js.map +1 -0
  147. package/dist/services/fibrous/health.d.ts +5 -0
  148. package/dist/services/fibrous/health.d.ts.map +1 -0
  149. package/dist/services/fibrous/health.js +24 -0
  150. package/dist/services/fibrous/health.js.map +1 -0
  151. package/dist/services/fibrous/route.d.ts +42 -0
  152. package/dist/services/fibrous/route.d.ts.map +1 -0
  153. package/dist/services/fibrous/route.js +41 -0
  154. package/dist/services/fibrous/route.js.map +1 -0
  155. package/dist/services/fibrous/tokens.d.ts +6 -0
  156. package/dist/services/fibrous/tokens.d.ts.map +1 -0
  157. package/dist/services/fibrous/tokens.js +34 -0
  158. package/dist/services/fibrous/tokens.js.map +1 -0
  159. package/dist/services/staking/staking.d.ts +70 -0
  160. package/dist/services/staking/staking.d.ts.map +1 -0
  161. package/dist/services/staking/staking.js +170 -0
  162. package/dist/services/staking/staking.js.map +1 -0
  163. package/dist/services/staking/validators.d.ts +6 -0
  164. package/dist/services/staking/validators.d.ts.map +1 -0
  165. package/dist/services/staking/validators.js +14 -0
  166. package/dist/services/staking/validators.js.map +1 -0
  167. package/dist/services/starkzap/client.d.ts +18 -0
  168. package/dist/services/starkzap/client.d.ts.map +1 -0
  169. package/dist/services/starkzap/client.js +65 -0
  170. package/dist/services/starkzap/client.js.map +1 -0
  171. package/dist/services/tokens/balances.d.ts +8 -0
  172. package/dist/services/tokens/balances.d.ts.map +1 -0
  173. package/dist/services/tokens/balances.js +23 -0
  174. package/dist/services/tokens/balances.js.map +1 -0
  175. package/dist/services/tokens/tokens.d.ts +5 -0
  176. package/dist/services/tokens/tokens.d.ts.map +1 -0
  177. package/dist/services/tokens/tokens.js +24 -0
  178. package/dist/services/tokens/tokens.js.map +1 -0
  179. package/dist/services/vesu/index.d.ts +3 -0
  180. package/dist/services/vesu/index.d.ts.map +1 -0
  181. package/dist/services/vesu/index.js +3 -0
  182. package/dist/services/vesu/index.js.map +1 -0
  183. package/dist/services/vesu/lending.d.ts +17 -0
  184. package/dist/services/vesu/lending.d.ts.map +1 -0
  185. package/dist/services/vesu/lending.js +153 -0
  186. package/dist/services/vesu/lending.js.map +1 -0
  187. package/dist/services/vesu/pools.d.ts +13 -0
  188. package/dist/services/vesu/pools.d.ts.map +1 -0
  189. package/dist/services/vesu/pools.js +35 -0
  190. package/dist/services/vesu/pools.js.map +1 -0
  191. package/package.json +83 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface PrivySession {
2
+ type: "privy";
3
+ network: "mainnet" | "sepolia";
4
+ address: string;
5
+ userId: string;
6
+ walletId: string;
7
+ publicKey: string;
8
+ token: string;
9
+ serverUrl: string;
10
+ }
11
+ export interface LocalSession {
12
+ type: "local";
13
+ network: "mainnet" | "sepolia";
14
+ address: string;
15
+ privateKey: string;
16
+ }
17
+ export type Session = PrivySession | LocalSession;
18
+ export declare function loadSession(): Session | null;
19
+ export declare function saveSession(session: Session): void;
20
+ export declare function clearSession(): void;
21
+ export declare function requireSession(): Session;
22
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/services/auth/session.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AAIlD,wBAAgB,WAAW,IAAI,OAAO,GAAG,IAAI,CAS5C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAMlD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,cAAc,IAAI,OAAO,CASxC"}
@@ -0,0 +1,36 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { DATA_DIR } from "../../lib/config.js";
4
+ import { ErrorCode, StarkfiError } from "../../lib/errors.js";
5
+ const SESSION_FILE = join(DATA_DIR, "session.json");
6
+ export function loadSession() {
7
+ if (!existsSync(SESSION_FILE))
8
+ return null;
9
+ try {
10
+ const raw = readFileSync(SESSION_FILE, "utf-8");
11
+ return JSON.parse(raw);
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export function saveSession(session) {
18
+ const dir = DATA_DIR;
19
+ if (!existsSync(dir)) {
20
+ mkdirSync(dir, { recursive: true });
21
+ }
22
+ writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2), "utf-8");
23
+ }
24
+ export function clearSession() {
25
+ if (existsSync(SESSION_FILE)) {
26
+ unlinkSync(SESSION_FILE);
27
+ }
28
+ }
29
+ export function requireSession() {
30
+ const session = loadSession();
31
+ if (!session) {
32
+ throw new StarkfiError(ErrorCode.AUTH_REQUIRED, "Not authenticated. Run 'starkfi auth login <email>' or 'starkfi auth import' first.");
33
+ }
34
+ return session;
35
+ }
36
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/auth/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAsB9D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAEpD,MAAM,UAAU,WAAW;IAC1B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC;IACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,aAAa,EACvB,qFAAqF,CACrF,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface StarkfiConfig {
2
+ rpcUrl?: string;
3
+ network?: "mainnet" | "sepolia";
4
+ gasfreeMode?: boolean;
5
+ gasToken?: string;
6
+ [key: string]: unknown;
7
+ }
8
+ export declare class ConfigService {
9
+ private static instance;
10
+ private config;
11
+ private constructor();
12
+ static getInstance(): ConfigService;
13
+ get(key: string): unknown;
14
+ set(key: string, value: unknown): void;
15
+ delete(key: string): void;
16
+ getAll(): StarkfiConfig;
17
+ private load;
18
+ private save;
19
+ }
20
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/config/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAEhC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAID,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKtC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKzB,MAAM,IAAI,aAAa;IAIvB,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;CAMZ"}
@@ -0,0 +1,49 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { CONFIG_DIR } from "../../lib/config.js";
4
+ const CONFIG_FILE = join(CONFIG_DIR, "config.json");
5
+ export class ConfigService {
6
+ static instance;
7
+ config;
8
+ constructor() {
9
+ this.config = this.load();
10
+ }
11
+ static getInstance() {
12
+ if (!ConfigService.instance) {
13
+ ConfigService.instance = new ConfigService();
14
+ }
15
+ return ConfigService.instance;
16
+ }
17
+ get(key) {
18
+ return this.config[key];
19
+ }
20
+ set(key, value) {
21
+ this.config[key] = value;
22
+ this.save();
23
+ }
24
+ delete(key) {
25
+ delete this.config[key];
26
+ this.save();
27
+ }
28
+ getAll() {
29
+ return { ...this.config };
30
+ }
31
+ load() {
32
+ if (!existsSync(CONFIG_FILE))
33
+ return {};
34
+ try {
35
+ const raw = readFileSync(CONFIG_FILE, "utf-8");
36
+ return JSON.parse(raw);
37
+ }
38
+ catch {
39
+ return {};
40
+ }
41
+ }
42
+ save() {
43
+ if (!existsSync(CONFIG_DIR)) {
44
+ mkdirSync(CONFIG_DIR, { recursive: true });
45
+ }
46
+ writeFileSync(CONFIG_FILE, JSON.stringify(this.config, null, 2), "utf-8");
47
+ }
48
+ }
49
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/services/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAYjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,OAAO,aAAa;IACjB,MAAM,CAAC,QAAQ,CAAgB;IAC/B,MAAM,CAAgB;IAE9B;QACC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,WAAW;QACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAc;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,MAAM,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,MAAM;QACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,CAAC;QAExC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import type { WalletInterface } from "starkzap";
2
+ export interface TokenBalance {
3
+ symbol: string;
4
+ name: string;
5
+ balance: string;
6
+ }
7
+ export declare function getBalances(wallet: WalletInterface): Promise<TokenBalance[]>;
8
+ //# sourceMappingURL=balances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../src/services/fibrous/balances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAsBlF"}
@@ -0,0 +1,23 @@
1
+ import { fetchTokens } from "./tokens.js";
2
+ export async function getBalances(wallet) {
3
+ const tokens = await fetchTokens();
4
+ const results = [];
5
+ const balancePromises = tokens.map(async (token) => {
6
+ try {
7
+ const amount = await wallet.balanceOf(token);
8
+ if (amount.isPositive()) {
9
+ results.push({
10
+ symbol: token.symbol,
11
+ name: token.name,
12
+ balance: amount.toUnit(),
13
+ });
14
+ }
15
+ }
16
+ catch {
17
+ // Silently fail for individual token checks that might error due to contract issues.
18
+ }
19
+ });
20
+ await Promise.all(balancePromises);
21
+ return results;
22
+ }
23
+ //# sourceMappingURL=balances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/services/fibrous/balances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAuB;IACxD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAClD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;iBACxB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,qFAAqF;QACtF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function checkFibrousHealth(): Promise<{
2
+ ok: boolean;
3
+ message: string;
4
+ }>;
5
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/services/fibrous/health.ts"],"names":[],"mappings":"AAEA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IACnD,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC,CA0BD"}
@@ -0,0 +1,24 @@
1
+ import { FIBROUS_BASE_URL } from "../../lib/config.js";
2
+ export async function checkFibrousHealth() {
3
+ try {
4
+ const response = await fetch(`${FIBROUS_BASE_URL}/healthCheck`);
5
+ if (!response.ok) {
6
+ return {
7
+ ok: false,
8
+ message: `Fibrous API returned ${response.status}`,
9
+ };
10
+ }
11
+ const data = (await response.json());
12
+ return {
13
+ ok: data.staus === 200,
14
+ message: data.message,
15
+ };
16
+ }
17
+ catch (error) {
18
+ return {
19
+ ok: false,
20
+ message: `Failed to reach Fibrous API: ${error instanceof Error ? error.message : String(error)}`,
21
+ };
22
+ }
23
+ }
24
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/services/fibrous/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,kBAAkB;IAIvC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,cAAc,CAAC,CAAC;QAEhE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,wBAAwB,QAAQ,CAAC,MAAM,EAAE;aAClD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAC;QAEF,OAAO;YACN,EAAE,EAAE,IAAI,CAAC,KAAK,KAAK,GAAG;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO;YACN,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACjG,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { Token } from "starkzap";
2
+ export interface RouteToken {
3
+ name: string;
4
+ address: string;
5
+ decimals: number;
6
+ price: string;
7
+ symbol?: string;
8
+ native?: boolean;
9
+ base?: boolean;
10
+ }
11
+ export interface RouteSwap {
12
+ protocol: number;
13
+ poolName: string;
14
+ poolAddress: string;
15
+ fromTokenAddress: string;
16
+ toTokenAddress: string;
17
+ percent: string;
18
+ extraData?: Record<string, unknown>;
19
+ }
20
+ export interface RouteResponse {
21
+ success: boolean;
22
+ routeId?: string;
23
+ inputToken: RouteToken;
24
+ inputAmount: string;
25
+ outputToken: RouteToken;
26
+ outputAmount: string;
27
+ estimatedGasUsed?: string;
28
+ estimatedGasUsedInUsd?: number;
29
+ route: Array<{
30
+ percent: string;
31
+ swaps: RouteSwap[][];
32
+ }>;
33
+ time?: number;
34
+ errorMessage?: string;
35
+ }
36
+ export interface CalldataResponse {
37
+ route: RouteResponse;
38
+ calldata: string[];
39
+ }
40
+ export declare function getRoute(tokenIn: Token, tokenOut: Token, amount: string): Promise<RouteResponse>;
41
+ export declare function getCalldata(tokenIn: Token, tokenOut: Token, amount: string, slippage?: number, destination?: string): Promise<CalldataResponse>;
42
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/services/fibrous/route.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;KACrB,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAED,wBAAsB,WAAW,CAChC,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAyB,EACnC,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAgC3B"}
@@ -0,0 +1,41 @@
1
+ import { FIBROUS_BASE_URL, DEFAULT_SLIPPAGE } from "../../lib/config.js";
2
+ import { ErrorCode, StarkfiError } from "../../lib/errors.js";
3
+ export async function getRoute(tokenIn, tokenOut, amount // raw amount (in base units, e.g. wei)
4
+ ) {
5
+ const params = new URLSearchParams({
6
+ amount,
7
+ tokenInAddress: tokenIn.address,
8
+ tokenOutAddress: tokenOut.address,
9
+ });
10
+ const response = await fetch(`${FIBROUS_BASE_URL}/route?${params.toString()}`);
11
+ if (!response.ok) {
12
+ throw new StarkfiError(ErrorCode.NO_ROUTE_FOUND, `Fibrous route API error: ${response.status}`);
13
+ }
14
+ const data = (await response.json());
15
+ if (!data.success) {
16
+ throw new StarkfiError(ErrorCode.NO_ROUTE_FOUND, data.errorMessage || "No route found for this swap");
17
+ }
18
+ return data;
19
+ }
20
+ export async function getCalldata(tokenIn, tokenOut, amount, slippage = DEFAULT_SLIPPAGE, destination) {
21
+ const params = new URLSearchParams({
22
+ amount,
23
+ tokenInAddress: tokenIn.address,
24
+ tokenOutAddress: tokenOut.address,
25
+ slippage: slippage.toString(),
26
+ });
27
+ if (destination) {
28
+ params.append("destination", destination);
29
+ }
30
+ const response = await fetch(`${FIBROUS_BASE_URL}/calldata?${params.toString()}`);
31
+ if (!response.ok) {
32
+ const errorText = await response.text().catch(() => "");
33
+ throw new StarkfiError(ErrorCode.SWAP_FAILED, `Fibrous calldata API error: ${response.status} ${errorText}`);
34
+ }
35
+ const data = (await response.json());
36
+ if (!data.route?.success) {
37
+ throw new StarkfiError(ErrorCode.NO_ROUTE_FOUND, "Failed to generate calldata: no valid route");
38
+ }
39
+ return data;
40
+ }
41
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/services/fibrous/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA6C9D,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,OAAc,EACd,QAAe,EACf,MAAc,CAAC,uCAAuC;;IAEtD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAClC,MAAM;QACN,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO;KACjC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,UAAU,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE/E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,cAAc,EACxB,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAC7C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;IAEtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,cAAc,EACxB,IAAI,CAAC,YAAY,IAAI,8BAA8B,CACnD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,OAAc,EACd,QAAe,EACf,MAAc,EACd,WAAmB,gBAAgB,EACnC,WAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QAClC,MAAM;QACN,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAElF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,WAAW,EACrB,+BAA+B,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAC7D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB,CAAC;IAEzD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,cAAc,EACxB,6CAA6C,CAC7C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type Token } from "starkzap";
2
+ export declare function fetchTokens(): Promise<Token[]>;
3
+ export declare function resolveToken(symbol: string): Promise<Token>;
4
+ export declare function resolveTokenByAddress(address: string): Promise<Token | null>;
5
+ export declare function resolveTokenPreset(symbol: string): Promise<Token | null>;
6
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/services/fibrous/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAG3D,wBAAsB,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAIpD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAiBjE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAGlF;AAID,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAM9E"}
@@ -0,0 +1,34 @@
1
+ import { ChainId, getPresets } from "starkzap";
2
+ import { ErrorCode, StarkfiError } from "../../lib/errors.js";
3
+ export async function fetchTokens() {
4
+ // getPresets returns a Record<string, Token>. We convert it to an array.
5
+ const presetTokens = getPresets(ChainId.MAINNET);
6
+ return Object.values(presetTokens);
7
+ }
8
+ export async function resolveToken(symbol) {
9
+ const tokens = await fetchTokens();
10
+ const upperSymbol = symbol.toUpperCase();
11
+ const token = tokens.find((t) => t.symbol.toUpperCase() === upperSymbol);
12
+ if (!token) {
13
+ throw new StarkfiError(ErrorCode.NO_ROUTE_FOUND, `Token not found: ${symbol}. Available tokens: ${tokens
14
+ .slice(0, 15)
15
+ .map((t) => t.symbol)
16
+ .join(", ")}...`);
17
+ }
18
+ return token;
19
+ }
20
+ export async function resolveTokenByAddress(address) {
21
+ const tokens = await fetchTokens();
22
+ return tokens.find((t) => t.address.toLowerCase() === address.toLowerCase()) ?? null;
23
+ }
24
+ // Keep this around for backwards compatibility with any remaining callers
25
+ // It just passes the starkzap Token through since the types now match
26
+ export async function resolveTokenPreset(symbol) {
27
+ try {
28
+ return await resolveToken(symbol);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/services/fibrous/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,WAAW;IAChC,yEAAyE;IACzE,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAChD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;IAEzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,cAAc,EACxB,oBAAoB,MAAM,uBAAuB,MAAM;aACrD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC;AACtF,CAAC;AAED,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc;IACtD,IAAI,CAAC;QACJ,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { type StarkZap } from "starkzap";
2
+ import type { StarkZapWallet } from "../starkzap/client.js";
3
+ export interface ValidatorInfo {
4
+ name: string;
5
+ address: string;
6
+ }
7
+ export interface PoolInfo {
8
+ poolContract: string;
9
+ tokenSymbol: string;
10
+ amount: string;
11
+ commission?: number;
12
+ }
13
+ export interface PositionInfo {
14
+ staked: string;
15
+ rewards: string;
16
+ total: string;
17
+ unpooling: string;
18
+ unpoolTime?: Date;
19
+ commissionPercent: number;
20
+ }
21
+ export interface StakingOverviewPosition {
22
+ validator: string;
23
+ pool: string;
24
+ staked: string;
25
+ rewards: string;
26
+ total: string;
27
+ unpooling: string;
28
+ cooldownEndsAt: string | null;
29
+ commission: string;
30
+ }
31
+ export interface StakingOverview {
32
+ network: string;
33
+ address: string;
34
+ totalStaked: string;
35
+ totalRewards: string;
36
+ totalValue: string;
37
+ totalUnpooling: string;
38
+ positions: StakingOverviewPosition[];
39
+ }
40
+ export declare function getStakeableTokens(sdk: StarkZap): Promise<Array<{
41
+ name: string;
42
+ symbol: string;
43
+ address: string;
44
+ }>>;
45
+ export declare function getValidatorPools(sdk: StarkZap, validatorAddress: string, wallet?: StarkZapWallet): Promise<PoolInfo[]>;
46
+ export declare function stake(wallet: StarkZapWallet, poolAddress: string, amount: string): Promise<{
47
+ hash: string;
48
+ explorerUrl: string;
49
+ }>;
50
+ export declare function claimRewards(wallet: StarkZapWallet, poolAddress: string): Promise<{
51
+ hash: string;
52
+ explorerUrl: string;
53
+ }>;
54
+ export declare function compoundRewards(wallet: StarkZapWallet, poolAddress: string): Promise<{
55
+ hash: string;
56
+ explorerUrl: string;
57
+ compounded: string;
58
+ }>;
59
+ export declare function exitPoolIntent(wallet: StarkZapWallet, poolAddress: string, amount: string): Promise<{
60
+ hash: string;
61
+ explorerUrl: string;
62
+ }>;
63
+ export declare function exitPool(wallet: StarkZapWallet, poolAddress: string): Promise<{
64
+ hash: string;
65
+ explorerUrl: string;
66
+ }>;
67
+ export declare function getPosition(wallet: StarkZapWallet, poolAddress: string): Promise<PositionInfo | null>;
68
+ export declare function isPoolMember(wallet: StarkZapWallet, poolAddress: string): Promise<boolean>;
69
+ export declare function getStakingOverview(sdk: StarkZap, wallet: StarkZapWallet, network: string, address: string): Promise<StakingOverview>;
70
+ //# sourceMappingURL=staking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../../src/services/staking/staking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { Amount, fromAddress } from "starkzap";
2
+ import { resolveToken } from "../tokens/tokens.js";
3
+ // Resolve STRK once — only token stakeable on Starknet mainnet.
4
+ async function resolveStrkToken() {
5
+ return resolveToken("STRK");
6
+ }
7
+ export async function getStakeableTokens(sdk) {
8
+ const tokens = await sdk.stakingTokens();
9
+ return tokens.map((t) => ({
10
+ name: t.name,
11
+ symbol: t.symbol,
12
+ address: t.address.toString(),
13
+ }));
14
+ }
15
+ export async function getValidatorPools(sdk, validatorAddress, wallet) {
16
+ const pools = await sdk.getStakerPools(fromAddress(validatorAddress));
17
+ return Promise.all(pools.map(async (p) => {
18
+ const commission = wallet ? await wallet.getPoolCommission(p.poolContract) : undefined;
19
+ return {
20
+ poolContract: p.poolContract.toString(),
21
+ tokenSymbol: p.token.symbol,
22
+ amount: p.amount.toFormatted(true),
23
+ commission,
24
+ };
25
+ }));
26
+ }
27
+ // Smart stake: auto-detects enter vs. add_to_delegation_pool.
28
+ export async function stake(wallet, poolAddress, amount) {
29
+ const token = await resolveStrkToken();
30
+ const parsedAmount = Amount.parse(amount, token);
31
+ const tx = await wallet.stake(fromAddress(poolAddress), parsedAmount);
32
+ return {
33
+ hash: tx.hash,
34
+ explorerUrl: tx.explorerUrl,
35
+ };
36
+ }
37
+ export async function claimRewards(wallet, poolAddress) {
38
+ const position = await wallet.getPoolPosition(fromAddress(poolAddress));
39
+ if (!position || position.rewards.isZero()) {
40
+ throw new Error("No rewards to claim for this pool.");
41
+ }
42
+ const tx = await wallet.claimPoolRewards(fromAddress(poolAddress));
43
+ return {
44
+ hash: tx.hash,
45
+ explorerUrl: tx.explorerUrl,
46
+ };
47
+ }
48
+ // Compound: claim rewards and re-stake them atomically in a single tx.
49
+ export async function compoundRewards(wallet, poolAddress) {
50
+ const position = await wallet.getPoolPosition(fromAddress(poolAddress));
51
+ if (!position || position.rewards.isZero()) {
52
+ throw new Error("No rewards to compound for this pool.");
53
+ }
54
+ const compounded = position.rewards.toFormatted(true);
55
+ const tx = await wallet
56
+ .tx()
57
+ .claimPoolRewards(fromAddress(poolAddress))
58
+ .stake(fromAddress(poolAddress), position.rewards)
59
+ .send();
60
+ await tx.wait();
61
+ return {
62
+ hash: tx.hash,
63
+ explorerUrl: tx.explorerUrl,
64
+ compounded,
65
+ };
66
+ }
67
+ // Step 1 of 2-step exit: declare intent, then wait for cooldown.
68
+ export async function exitPoolIntent(wallet, poolAddress, amount) {
69
+ const token = await resolveStrkToken();
70
+ const parsedAmount = Amount.parse(amount, token);
71
+ const tx = await wallet.exitPoolIntent(fromAddress(poolAddress), parsedAmount);
72
+ return {
73
+ hash: tx.hash,
74
+ explorerUrl: tx.explorerUrl,
75
+ };
76
+ }
77
+ // Step 2 of 2-step exit: complete withdrawal after cooldown.
78
+ export async function exitPool(wallet, poolAddress) {
79
+ const position = await wallet.getPoolPosition(fromAddress(poolAddress));
80
+ if (!position) {
81
+ throw new Error("Not a member of this pool.");
82
+ }
83
+ if (position.unpooling.isZero()) {
84
+ throw new Error("No exit intent declared. Call 'unstake intent' first.");
85
+ }
86
+ if (position.unpoolTime && new Date() < position.unpoolTime) {
87
+ throw new Error(`Cooldown period is still active. Please wait until ${position.unpoolTime.toLocaleString()}`);
88
+ }
89
+ const tx = await wallet.exitPool(fromAddress(poolAddress));
90
+ return {
91
+ hash: tx.hash,
92
+ explorerUrl: tx.explorerUrl,
93
+ };
94
+ }
95
+ export async function getPosition(wallet, poolAddress) {
96
+ const position = await wallet.getPoolPosition(fromAddress(poolAddress));
97
+ if (!position)
98
+ return null;
99
+ return {
100
+ staked: position.staked.toFormatted(true),
101
+ rewards: position.rewards.toFormatted(true),
102
+ total: position.total.toFormatted(true),
103
+ unpooling: position.unpooling.toFormatted(true),
104
+ unpoolTime: position.unpoolTime ?? undefined,
105
+ commissionPercent: position.commissionPercent,
106
+ };
107
+ }
108
+ export async function isPoolMember(wallet, poolAddress) {
109
+ return wallet.isPoolMember(fromAddress(poolAddress));
110
+ }
111
+ // Scan all known validators & pools to build a consolidated staking dashboard.
112
+ export async function getStakingOverview(sdk, wallet, network, address) {
113
+ const { getValidators } = await import("./validators.js");
114
+ const validators = getValidators(network);
115
+ // Discover all pools across all validators concurrently.
116
+ const validatorPools = await Promise.all(validators.map(async (v) => {
117
+ const pools = await sdk.getStakerPools(v.stakerAddress);
118
+ return pools.map((p) => ({ validator: v.name, pool: p }));
119
+ }));
120
+ const allPools = validatorPools.flat();
121
+ // Query positions for all discovered pools concurrently.
122
+ const results = await Promise.all(allPools.map(async ({ validator, pool: p }) => {
123
+ const position = await wallet.getPoolPosition(p.poolContract);
124
+ if (!position)
125
+ return null;
126
+ return {
127
+ validator,
128
+ pool: p.poolContract.toString(),
129
+ staked: position.staked,
130
+ rewards: position.rewards,
131
+ total: position.total,
132
+ unpooling: position.unpooling,
133
+ unpoolTime: position.unpoolTime ?? null,
134
+ commissionPercent: position.commissionPercent,
135
+ };
136
+ }));
137
+ const activePositions = results.filter((r) => r !== null);
138
+ // Aggregate totals using raw Amount arithmetic.
139
+ const strk = await resolveStrkToken();
140
+ let totalStaked = Amount.parse("0", strk);
141
+ let totalRewards = Amount.parse("0", strk);
142
+ let totalValue = Amount.parse("0", strk);
143
+ let totalUnpooling = Amount.parse("0", strk);
144
+ const positions = activePositions.map((p) => {
145
+ totalStaked = totalStaked.add(p.staked);
146
+ totalRewards = totalRewards.add(p.rewards);
147
+ totalValue = totalValue.add(p.total);
148
+ totalUnpooling = totalUnpooling.add(p.unpooling);
149
+ return {
150
+ validator: p.validator,
151
+ pool: p.pool,
152
+ staked: p.staked.toFormatted(true),
153
+ rewards: p.rewards.toFormatted(true),
154
+ total: p.total.toFormatted(true),
155
+ unpooling: p.unpooling.toFormatted(true),
156
+ cooldownEndsAt: p.unpoolTime ? p.unpoolTime.toISOString() : null,
157
+ commission: `${p.commissionPercent}%`,
158
+ };
159
+ });
160
+ return {
161
+ network,
162
+ address,
163
+ totalStaked: totalStaked.toFormatted(true),
164
+ totalRewards: totalRewards.toFormatted(true),
165
+ totalValue: totalValue.toFormatted(true),
166
+ totalUnpooling: totalUnpooling.toFormatted(true),
167
+ positions,
168
+ };
169
+ }
170
+ //# sourceMappingURL=staking.js.map