fibx 0.1.1 → 0.1.2

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 (113) hide show
  1. package/README.md +2 -26
  2. package/dist/commands/auth/login.d.ts +3 -0
  3. package/dist/commands/auth/login.d.ts.map +1 -0
  4. package/dist/commands/auth/login.js +34 -0
  5. package/dist/commands/auth/login.js.map +1 -0
  6. package/dist/commands/auth/verify.d.ts +3 -0
  7. package/dist/commands/auth/verify.d.ts.map +1 -0
  8. package/dist/commands/auth/verify.js +61 -0
  9. package/dist/commands/auth/verify.js.map +1 -0
  10. package/dist/commands/balance.d.ts.map +1 -1
  11. package/dist/commands/balance.js +27 -8
  12. package/dist/commands/balance.js.map +1 -1
  13. package/dist/commands/trade/status.d.ts +3 -0
  14. package/dist/commands/trade/status.d.ts.map +1 -0
  15. package/dist/commands/trade/status.js +31 -0
  16. package/dist/commands/trade/status.js.map +1 -0
  17. package/dist/commands/trade/swap.d.ts +7 -0
  18. package/dist/commands/trade/swap.d.ts.map +1 -0
  19. package/dist/commands/trade/swap.js +69 -0
  20. package/dist/commands/trade/swap.js.map +1 -0
  21. package/dist/commands/wallet/address.d.ts +3 -0
  22. package/dist/commands/wallet/address.d.ts.map +1 -0
  23. package/dist/commands/wallet/address.js +15 -0
  24. package/dist/commands/wallet/address.js.map +1 -0
  25. package/dist/commands/wallet/balance.d.ts +3 -0
  26. package/dist/commands/wallet/balance.d.ts.map +1 -0
  27. package/dist/commands/wallet/balance.js +48 -0
  28. package/dist/commands/wallet/balance.js.map +1 -0
  29. package/dist/commands/wallet/list.d.ts +3 -0
  30. package/dist/commands/wallet/list.d.ts.map +1 -0
  31. package/dist/commands/wallet/list.js +39 -0
  32. package/dist/commands/wallet/list.js.map +1 -0
  33. package/dist/commands/wallet/send.d.ts +3 -0
  34. package/dist/commands/wallet/send.d.ts.map +1 -0
  35. package/dist/commands/wallet/send.js +58 -0
  36. package/dist/commands/wallet/send.js.map +1 -0
  37. package/dist/fibrous/balances.d.ts +14 -0
  38. package/dist/fibrous/balances.d.ts.map +1 -0
  39. package/dist/fibrous/balances.js +26 -0
  40. package/dist/fibrous/balances.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +85 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lib/cache.d.ts +3 -0
  46. package/dist/lib/cache.d.ts.map +1 -0
  47. package/dist/lib/cache.js +23 -0
  48. package/dist/lib/cache.js.map +1 -0
  49. package/dist/lib/config.d.ts +7 -0
  50. package/dist/lib/config.d.ts.map +1 -0
  51. package/dist/lib/config.js +8 -0
  52. package/dist/lib/config.js.map +1 -0
  53. package/dist/lib/errors.d.ts +22 -0
  54. package/dist/lib/errors.d.ts.map +1 -0
  55. package/dist/lib/errors.js +29 -0
  56. package/dist/lib/errors.js.map +1 -0
  57. package/dist/lib/format.d.ts +8 -0
  58. package/dist/lib/format.d.ts.map +1 -0
  59. package/dist/lib/format.js +69 -0
  60. package/dist/lib/format.js.map +1 -0
  61. package/dist/lib/parseAmount.d.ts +3 -0
  62. package/dist/lib/parseAmount.d.ts.map +1 -0
  63. package/dist/lib/parseAmount.js +10 -0
  64. package/dist/lib/parseAmount.js.map +1 -0
  65. package/dist/lib/validation.d.ts +6 -0
  66. package/dist/lib/validation.d.ts.map +1 -0
  67. package/dist/lib/validation.js +24 -0
  68. package/dist/lib/validation.js.map +1 -0
  69. package/dist/services/auth/policy.d.ts +2 -0
  70. package/dist/services/auth/policy.d.ts.map +1 -0
  71. package/dist/services/auth/policy.js +3 -0
  72. package/dist/services/auth/policy.js.map +1 -0
  73. package/dist/services/auth/session.d.ts +15 -0
  74. package/dist/services/auth/session.d.ts.map +1 -0
  75. package/dist/services/auth/session.js +47 -0
  76. package/dist/services/auth/session.js.map +1 -0
  77. package/dist/services/chain/client.d.ts +24029 -0
  78. package/dist/services/chain/client.d.ts.map +1 -0
  79. package/dist/services/chain/client.js +74 -0
  80. package/dist/services/chain/client.js.map +1 -0
  81. package/dist/services/chain/constants.d.ts +14 -0
  82. package/dist/services/chain/constants.d.ts.map +1 -0
  83. package/dist/services/chain/constants.js +21 -0
  84. package/dist/services/chain/constants.js.map +1 -0
  85. package/dist/services/chain/erc20.d.ts +6 -0
  86. package/dist/services/chain/erc20.d.ts.map +1 -0
  87. package/dist/services/chain/erc20.js +72 -0
  88. package/dist/services/chain/erc20.js.map +1 -0
  89. package/dist/services/fibrous/abi/base.d.ts +768 -0
  90. package/dist/services/fibrous/abi/base.d.ts.map +1 -0
  91. package/dist/services/fibrous/abi/base.js +984 -0
  92. package/dist/services/fibrous/abi/base.js.map +1 -0
  93. package/dist/services/fibrous/balances.d.ts +14 -0
  94. package/dist/services/fibrous/balances.d.ts.map +1 -0
  95. package/dist/services/fibrous/balances.js +26 -0
  96. package/dist/services/fibrous/balances.js.map +1 -0
  97. package/dist/services/fibrous/health.d.ts +11 -0
  98. package/dist/services/fibrous/health.d.ts.map +1 -0
  99. package/dist/services/fibrous/health.js +18 -0
  100. package/dist/services/fibrous/health.js.map +1 -0
  101. package/dist/services/fibrous/route.d.ts +47 -0
  102. package/dist/services/fibrous/route.d.ts.map +1 -0
  103. package/dist/services/fibrous/route.js +60 -0
  104. package/dist/services/fibrous/route.js.map +1 -0
  105. package/dist/services/fibrous/tokens.d.ts +10 -0
  106. package/dist/services/fibrous/tokens.d.ts.map +1 -0
  107. package/dist/services/fibrous/tokens.js +37 -0
  108. package/dist/services/fibrous/tokens.js.map +1 -0
  109. package/dist/services/privy/client.d.ts +15 -0
  110. package/dist/services/privy/client.d.ts.map +1 -0
  111. package/dist/services/privy/client.js +63 -0
  112. package/dist/services/privy/client.js.map +1 -0
  113. package/package.json +4 -4
@@ -0,0 +1,26 @@
1
+ import { FIBROUS_GRAPH_URL, ACTIVE_NETWORK } from "../utils/config.js";
2
+ import { getChainConfig } from "../chain/chains.js";
3
+ import { ErrorCode, FibxError } from "../utils/errors.js";
4
+ const chain = getChainConfig(ACTIVE_NETWORK);
5
+ export async function getBalances(tokens, walletAddress) {
6
+ try {
7
+ const payload = {
8
+ tokenAddresses: tokens.map((t) => ({ address: t.address, decimal: t.decimals })),
9
+ walletAddress,
10
+ };
11
+ const res = await fetch(`${FIBROUS_GRAPH_URL}/${chain.fibrousNetwork}/balances`, {
12
+ method: "POST",
13
+ headers: { "Content-Type": "application/json" },
14
+ body: JSON.stringify(payload),
15
+ });
16
+ if (!res.ok) {
17
+ throw new Error(`HTTP ${res.status} ${res.statusText}`);
18
+ }
19
+ const data = (await res.json());
20
+ return data;
21
+ }
22
+ catch (error) {
23
+ throw new FibxError(ErrorCode.FIBROUS_ERROR, `Failed to fetch balances: ${error instanceof Error ? error.message : String(error)}`);
24
+ }
25
+ }
26
+ //# sourceMappingURL=balances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balances.js","sourceRoot":"","sources":["../../src/fibrous/balances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAiB1D,MAAM,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,MAA+C,EAC/C,aAAqB;IAErB,IAAI,CAAC;QACJ,MAAM,OAAO,GAAmB;YAC/B,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChF,aAAa;SACb,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,iBAAiB,IAAI,KAAK,CAAC,cAAc,WAAW,EAAE;YAChF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsB,CAAC;QACrD,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,SAAS,CAClB,SAAS,CAAC,aAAa,EACvB,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrF,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { statusCommand } from "./commands/trade/status.js";
4
+ import { authLoginCommand } from "./commands/auth/login.js";
5
+ import { authVerifyCommand } from "./commands/auth/verify.js";
6
+ import { addressCommand } from "./commands/wallet/address.js";
7
+ import { balanceCommand } from "./commands/wallet/balance.js";
8
+ import { sendCommand } from "./commands/wallet/send.js";
9
+ import { tradeCommand } from "./commands/trade/swap.js";
10
+ import { walletsCommand } from "./commands/wallet/list.js";
11
+ const program = new Command();
12
+ program
13
+ .name("fibx")
14
+ .description("Fibrous DeFi CLI — wallet, transfer, swap")
15
+ .version("0.1.2")
16
+ .option("--json", "Output results as JSON", false);
17
+ const auth = program.command("auth").description("Authentication commands");
18
+ auth.command("login")
19
+ .description("Initiate email OTP login via Privy")
20
+ .argument("<email>", "Email address for OTP login")
21
+ .action(async (email, _opts, cmd) => {
22
+ const globalOpts = cmd.parent.parent.opts();
23
+ await authLoginCommand(email, { json: globalOpts.json });
24
+ });
25
+ auth.command("verify")
26
+ .description("Verify OTP code and create wallet session")
27
+ .argument("<email>", "Email used for login")
28
+ .argument("<code>", "OTP code from email")
29
+ .action(async (email, code, _opts, cmd) => {
30
+ const globalOpts = cmd.parent.parent.opts();
31
+ await authVerifyCommand(email, code, { json: globalOpts.json });
32
+ });
33
+ program
34
+ .command("status")
35
+ .description("Check auth status and Fibrous health")
36
+ .action(async (_opts, cmd) => {
37
+ const globalOpts = cmd.parent.opts();
38
+ await statusCommand({ json: globalOpts.json });
39
+ });
40
+ program
41
+ .command("wallets")
42
+ .description("List wallets linked to a user email")
43
+ .argument("<email>", "User email address")
44
+ .option("-j, --json", "Output as JSON")
45
+ .action(walletsCommand);
46
+ program
47
+ .command("address")
48
+ .description("Show active wallet address")
49
+ .action(async (_opts, cmd) => {
50
+ const globalOpts = cmd.parent.opts();
51
+ await addressCommand({ json: globalOpts.json });
52
+ });
53
+ program
54
+ .command("balance")
55
+ .description("Show ETH and USDC balances")
56
+ .action(async (_opts, cmd) => {
57
+ const globalOpts = cmd.parent.opts();
58
+ await balanceCommand({ json: globalOpts.json });
59
+ });
60
+ program
61
+ .command("send")
62
+ .description("Send tokens (ETH, USDC, etc.)")
63
+ .argument("<amount>", "Amount to send")
64
+ .argument("<recipient>", "Recipient address (0x...)")
65
+ .argument("[token]", "Token symbol or address", "ETH")
66
+ .action(async (amount, recipient, token, _opts, cmd) => {
67
+ const globalOpts = cmd.parent.opts();
68
+ await sendCommand(amount, recipient, token, { json: globalOpts.json });
69
+ });
70
+ program
71
+ .command("trade")
72
+ .description("Swap tokens via Fibrous")
73
+ .argument("<amount>", "Amount to swap")
74
+ .argument("<from>", "Source token (symbol or address)")
75
+ .argument("<to>", "Destination token (symbol or address)")
76
+ .option("-s, --slippage <number>", "Slippage tolerance", "0.5")
77
+ .action(async (amount, from, to, opts, cmd) => {
78
+ const globalOpts = cmd.parent.opts();
79
+ await tradeCommand(amount, from, to, {
80
+ json: globalOpts.json,
81
+ slippage: parseFloat(opts.slippage),
82
+ });
83
+ });
84
+ program.parseAsync();
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function readCache<T>(key: string, ttlMs?: number): T | null;
2
+ export declare function writeCache(key: string, data: unknown): void;
3
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAaA,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAA2B,GAAG,CAAC,GAAG,IAAI,CAQtF;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAM3D"}
@@ -0,0 +1,23 @@
1
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { paths, TOKEN_CACHE_TTL_MS } from "./config.js";
4
+ function getCachePath(key) {
5
+ return join(paths.cache, `${key}.json`);
6
+ }
7
+ export function readCache(key, ttlMs = TOKEN_CACHE_TTL_MS) {
8
+ try {
9
+ const raw = readFileSync(getCachePath(key), "utf-8");
10
+ const entry = JSON.parse(raw);
11
+ return Date.now() - entry._cachedAt > ttlMs ? null : entry.data;
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export function writeCache(key, data) {
18
+ const filePath = getCachePath(key);
19
+ mkdirSync(dirname(filePath), { recursive: true });
20
+ const entry = { _cachedAt: Date.now(), data };
21
+ writeFileSync(filePath, JSON.stringify(entry, null, 2), "utf-8");
22
+ }
23
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/lib/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOxD,SAAS,YAAY,CAAC,GAAW;IAChC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,GAAW,EAAE,QAAgB,kBAAkB;IAC3E,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,IAAa;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAwB,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;IACnE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const paths: import("env-paths").Paths;
2
+ export declare const ACTIVE_NETWORK = "base";
3
+ export declare const FIBROUS_BASE_URL = "https://api.fibrous.finance";
4
+ export declare const FIBROUS_GRAPH_URL = "https://graph.fibrous.finance";
5
+ export declare const DEFAULT_SLIPPAGE = 0.5;
6
+ export declare const TOKEN_CACHE_TTL_MS: number;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,2BAAmB,CAAC;AAEtC,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AAEjE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,kBAAkB,QAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import envPaths from "env-paths";
2
+ export const paths = envPaths("fibx");
3
+ export const ACTIVE_NETWORK = "base";
4
+ export const FIBROUS_BASE_URL = "https://api.fibrous.finance";
5
+ export const FIBROUS_GRAPH_URL = "https://graph.fibrous.finance";
6
+ export const DEFAULT_SLIPPAGE = 0.5;
7
+ export const TOKEN_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24h
8
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM"}
@@ -0,0 +1,22 @@
1
+ export declare enum ErrorCode {
2
+ NOT_AUTHENTICATED = "NOT_AUTHENTICATED",
3
+ INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE",
4
+ TOKEN_NOT_SUPPORTED = "TOKEN_NOT_SUPPORTED",
5
+ ROUTE_NOT_FOUND = "ROUTE_NOT_FOUND",
6
+ RPC_ERROR = "RPC_ERROR",
7
+ INVALID_ADDRESS = "INVALID_ADDRESS",
8
+ INVALID_AMOUNT = "INVALID_AMOUNT",
9
+ PRIVY_ERROR = "PRIVY_ERROR",
10
+ FIBROUS_ERROR = "FIBROUS_ERROR",
11
+ SESSION_ERROR = "SESSION_ERROR"
12
+ }
13
+ export declare class FibxError extends Error {
14
+ readonly code: ErrorCode;
15
+ constructor(code: ErrorCode, message: string);
16
+ toJSON(): {
17
+ error: boolean;
18
+ code: ErrorCode;
19
+ message: string;
20
+ };
21
+ }
22
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACpB,iBAAiB,sBAAsB;IACvC,oBAAoB,yBAAyB;IAC7C,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,SAAS,cAAc;IACvB,eAAe,oBAAoB;IACnC,cAAc,mBAAmB;IACjC,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;CAC/B;AAED,qBAAa,SAAU,SAAQ,KAAK;IACnC,SAAgB,IAAI,EAAE,SAAS,CAAC;gBAEpB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IAM5C,MAAM;;;;;CAON"}
@@ -0,0 +1,29 @@
1
+ export var ErrorCode;
2
+ (function (ErrorCode) {
3
+ ErrorCode["NOT_AUTHENTICATED"] = "NOT_AUTHENTICATED";
4
+ ErrorCode["INSUFFICIENT_BALANCE"] = "INSUFFICIENT_BALANCE";
5
+ ErrorCode["TOKEN_NOT_SUPPORTED"] = "TOKEN_NOT_SUPPORTED";
6
+ ErrorCode["ROUTE_NOT_FOUND"] = "ROUTE_NOT_FOUND";
7
+ ErrorCode["RPC_ERROR"] = "RPC_ERROR";
8
+ ErrorCode["INVALID_ADDRESS"] = "INVALID_ADDRESS";
9
+ ErrorCode["INVALID_AMOUNT"] = "INVALID_AMOUNT";
10
+ ErrorCode["PRIVY_ERROR"] = "PRIVY_ERROR";
11
+ ErrorCode["FIBROUS_ERROR"] = "FIBROUS_ERROR";
12
+ ErrorCode["SESSION_ERROR"] = "SESSION_ERROR";
13
+ })(ErrorCode || (ErrorCode = {}));
14
+ export class FibxError extends Error {
15
+ code;
16
+ constructor(code, message) {
17
+ super(message);
18
+ this.name = "FibxError";
19
+ this.code = code;
20
+ }
21
+ toJSON() {
22
+ return {
23
+ error: true,
24
+ code: this.code,
25
+ message: this.message,
26
+ };
27
+ }
28
+ }
29
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAWX;AAXD,WAAY,SAAS;IACpB,oDAAuC,CAAA;IACvC,0DAA6C,CAAA;IAC7C,wDAA2C,CAAA;IAC3C,gDAAmC,CAAA;IACnC,oCAAuB,CAAA;IACvB,gDAAmC,CAAA;IACnC,8CAAiC,CAAA;IACjC,wCAA2B,CAAA;IAC3B,4CAA+B,CAAA;IAC/B,4CAA+B,CAAA;AAChC,CAAC,EAXW,SAAS,KAAT,SAAS,QAWpB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IACnB,IAAI,CAAY;IAEhC,YAAY,IAAe,EAAE,OAAe;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM;QACL,OAAO;YACN,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;IACH,CAAC;CACD"}
@@ -0,0 +1,8 @@
1
+ import { type Ora } from "ora";
2
+ export interface OutputOptions {
3
+ json: boolean;
4
+ }
5
+ export declare function outputResult(data: unknown, opts: OutputOptions): void;
6
+ export declare function outputError(error: unknown, opts: OutputOptions): void;
7
+ export declare function withSpinner<T>(label: string, fn: (spinner: Ora) => Promise<T>, opts: OutputOptions): Promise<T>;
8
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAQrE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAgBrE;AAED,wBAAsB,WAAW,CAAC,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,EAChC,IAAI,EAAE,aAAa,GACjB,OAAO,CAAC,CAAC,CAAC,CAYZ"}
@@ -0,0 +1,69 @@
1
+ import chalk from "chalk";
2
+ import ora from "ora";
3
+ import { FibxError } from "./errors.js";
4
+ export function outputResult(data, opts) {
5
+ if (opts.json) {
6
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
7
+ }
8
+ else if (typeof data === "object" && data !== null) {
9
+ formatTable(data);
10
+ }
11
+ else {
12
+ console.log(data);
13
+ }
14
+ }
15
+ export function outputError(error, opts) {
16
+ if (error instanceof FibxError) {
17
+ if (opts.json) {
18
+ process.stdout.write(JSON.stringify(error.toJSON(), null, 2) + "\n");
19
+ }
20
+ else {
21
+ console.error(chalk.red(`✗ [${error.code}] ${error.message}`));
22
+ }
23
+ }
24
+ else {
25
+ const msg = error instanceof Error ? error.message : String(error);
26
+ if (opts.json) {
27
+ process.stdout.write(JSON.stringify({ error: true, message: msg }, null, 2) + "\n");
28
+ }
29
+ else {
30
+ console.error(chalk.red(`✗ ${msg}`));
31
+ }
32
+ }
33
+ process.exitCode = 1;
34
+ }
35
+ export async function withSpinner(label, fn, opts) {
36
+ if (opts.json)
37
+ return fn(ora({ isSilent: true }));
38
+ const spinner = ora(label).start();
39
+ try {
40
+ const result = await fn(spinner);
41
+ spinner.succeed();
42
+ return result;
43
+ }
44
+ catch (error) {
45
+ spinner.fail();
46
+ throw error;
47
+ }
48
+ }
49
+ function formatTable(data) {
50
+ const maxKeyLen = Math.max(...Object.keys(data).map((k) => k.length));
51
+ for (const [key, value] of Object.entries(data)) {
52
+ console.log(` ${chalk.dim(key.padEnd(maxKeyLen))} ${formatValue(value)}`);
53
+ }
54
+ }
55
+ function formatValue(value) {
56
+ if (typeof value === "boolean")
57
+ return value ? chalk.green("✓") : chalk.red("✗");
58
+ if (typeof value === "number")
59
+ return chalk.cyan(value.toString());
60
+ if (typeof value === "string") {
61
+ if (/^0x[a-fA-F0-9]{40}$/.test(value))
62
+ return chalk.yellow(value);
63
+ return chalk.white(value);
64
+ }
65
+ if (typeof value === "object" && value !== null)
66
+ return chalk.dim(JSON.stringify(value));
67
+ return String(value);
68
+ }
69
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function parseAmount(amount: string, decimals: number): bigint;
2
+ export declare function formatAmount(amount: bigint, decimals: number): string;
3
+ //# sourceMappingURL=parseAmount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAmount.d.ts","sourceRoot":"","sources":["../../src/lib/parseAmount.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErE"}
@@ -0,0 +1,10 @@
1
+ import { parseUnits, formatUnits } from "viem";
2
+ export function parseAmount(amount, decimals) {
3
+ // Remove "$" and commas
4
+ const cleanAmount = amount.replace(/[$,]/g, "");
5
+ return parseUnits(cleanAmount, decimals);
6
+ }
7
+ export function formatAmount(amount, decimals) {
8
+ return formatUnits(amount, decimals);
9
+ }
10
+ //# sourceMappingURL=parseAmount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAmount.js","sourceRoot":"","sources":["../../src/lib/parseAmount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,QAAgB;IAC3D,wBAAwB;IACxB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,QAAgB;IAC5D,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ export declare const addressSchema: z.ZodString;
3
+ export declare const amountSchema: z.ZodString;
4
+ export declare function validateAddress(addr: string): string;
5
+ export declare function validateAmount(amount: string): string;
6
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa,aAAiE,CAAC;AAE5F,eAAO,MAAM,YAAY,aAQxB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrD"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { ErrorCode, FibxError } from "./errors.js";
3
+ export const addressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, "Invalid EVM address");
4
+ export const amountSchema = z.string().refine((v) => {
5
+ const clean = v.replace(/[$,]/g, "");
6
+ return !isNaN(Number(clean)) && Number(clean) > 0;
7
+ }, {
8
+ message: "Amount must be a positive number",
9
+ });
10
+ export function validateAddress(addr) {
11
+ const result = addressSchema.safeParse(addr);
12
+ if (!result.success) {
13
+ throw new FibxError(ErrorCode.INVALID_ADDRESS, result.error.message);
14
+ }
15
+ return result.data;
16
+ }
17
+ export function validateAmount(amount) {
18
+ const result = amountSchema.safeParse(amount);
19
+ if (!result.success) {
20
+ throw new FibxError(ErrorCode.INVALID_AMOUNT, result.error.message);
21
+ }
22
+ return result.data;
23
+ }
24
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE;IACL,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC,EACD;IACC,OAAO,EAAE,kCAAkC;CAC3C,CACD,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function createDefaultPolicy(): void;
2
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/services/auth/policy.ts"],"names":[],"mappings":"AACA,wBAAgB,mBAAmB,IAAI,IAAI,CAAG"}
@@ -0,0 +1,3 @@
1
+ // V1 stub — future: spending limits, whitelists.
2
+ export function createDefaultPolicy() { }
3
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/services/auth/policy.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,UAAU,mBAAmB,KAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from "zod";
2
+ declare const sessionSchema: z.ZodObject<{
3
+ userId: z.ZodOptional<z.ZodString>;
4
+ walletId: z.ZodString;
5
+ walletAddress: z.ZodString;
6
+ userJwt: z.ZodOptional<z.ZodString>;
7
+ createdAt: z.ZodString;
8
+ }, z.core.$strip>;
9
+ export type Session = z.infer<typeof sessionSchema>;
10
+ export declare function loadSession(): Session | null;
11
+ export declare function requireSession(): Session;
12
+ export declare function saveSession(session: Session): void;
13
+ export declare function clearSession(): void;
14
+ export {};
15
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/services/auth/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,aAAa;;;;;;iBAMjB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAMpD,wBAAgB,WAAW,IAAI,OAAO,GAAG,IAAI,CAQ5C;AAED,wBAAgB,cAAc,IAAI,OAAO,CASxC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAKlD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAMnC"}
@@ -0,0 +1,47 @@
1
+ import { readFileSync, writeFileSync, unlinkSync, mkdirSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ import { z } from "zod";
4
+ import { paths } from "../../lib/config.js";
5
+ import { ErrorCode, FibxError } from "../../lib/errors.js";
6
+ const sessionSchema = z.object({
7
+ userId: z.string().optional(),
8
+ walletId: z.string(),
9
+ walletAddress: z.string().regex(/^0x[a-fA-F0-9]{40}$/),
10
+ userJwt: z.string().optional(),
11
+ createdAt: z.string(),
12
+ });
13
+ function getSessionPath() {
14
+ return join(paths.config, "session.json");
15
+ }
16
+ export function loadSession() {
17
+ try {
18
+ const raw = readFileSync(getSessionPath(), "utf-8");
19
+ const result = sessionSchema.safeParse(JSON.parse(raw));
20
+ return result.success ? result.data : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ export function requireSession() {
27
+ const session = loadSession();
28
+ if (!session) {
29
+ throw new FibxError(ErrorCode.NOT_AUTHENTICATED, "Not authenticated. Run `fibx auth login <email>` first.");
30
+ }
31
+ return session;
32
+ }
33
+ export function saveSession(session) {
34
+ const filePath = getSessionPath();
35
+ mkdirSync(dirname(filePath), { recursive: true });
36
+ sessionSchema.parse(session);
37
+ writeFileSync(filePath, JSON.stringify(session, null, 2), "utf-8");
38
+ }
39
+ export function clearSession() {
40
+ try {
41
+ unlinkSync(getSessionPath());
42
+ }
43
+ catch {
44
+ // Already cleared
45
+ }
46
+ }
47
+ //# 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,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAIH,SAAS,cAAc;IACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW;IAC1B,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC7B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,SAAS,CAClB,SAAS,CAAC,iBAAiB,EAC3B,yDAAyD,CACzD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC3C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,IAAI,CAAC;QACJ,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,kBAAkB;IACnB,CAAC;AACF,CAAC"}