fibx 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 (102) hide show
  1. package/README.md +159 -0
  2. package/dist/chain/chains.d.ts +14 -0
  3. package/dist/chain/chains.d.ts.map +1 -0
  4. package/dist/chain/chains.js +21 -0
  5. package/dist/chain/chains.js.map +1 -0
  6. package/dist/chain/erc20.d.ts +6 -0
  7. package/dist/chain/erc20.d.ts.map +1 -0
  8. package/dist/chain/erc20.js +72 -0
  9. package/dist/chain/erc20.js.map +1 -0
  10. package/dist/chain/viem.d.ts +24029 -0
  11. package/dist/chain/viem.d.ts.map +1 -0
  12. package/dist/chain/viem.js +74 -0
  13. package/dist/chain/viem.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +85 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/commands/address.d.ts +3 -0
  19. package/dist/commands/address.d.ts.map +1 -0
  20. package/dist/commands/address.js +15 -0
  21. package/dist/commands/address.js.map +1 -0
  22. package/dist/commands/auth-login.d.ts +3 -0
  23. package/dist/commands/auth-login.d.ts.map +1 -0
  24. package/dist/commands/auth-login.js +34 -0
  25. package/dist/commands/auth-login.js.map +1 -0
  26. package/dist/commands/auth-verify.d.ts +3 -0
  27. package/dist/commands/auth-verify.d.ts.map +1 -0
  28. package/dist/commands/auth-verify.js +64 -0
  29. package/dist/commands/auth-verify.js.map +1 -0
  30. package/dist/commands/balance.d.ts +3 -0
  31. package/dist/commands/balance.d.ts.map +1 -0
  32. package/dist/commands/balance.js +36 -0
  33. package/dist/commands/balance.js.map +1 -0
  34. package/dist/commands/send.d.ts +3 -0
  35. package/dist/commands/send.d.ts.map +1 -0
  36. package/dist/commands/send.js +58 -0
  37. package/dist/commands/send.js.map +1 -0
  38. package/dist/commands/status.d.ts +3 -0
  39. package/dist/commands/status.d.ts.map +1 -0
  40. package/dist/commands/status.js +31 -0
  41. package/dist/commands/status.js.map +1 -0
  42. package/dist/commands/trade.d.ts +7 -0
  43. package/dist/commands/trade.d.ts.map +1 -0
  44. package/dist/commands/trade.js +69 -0
  45. package/dist/commands/trade.js.map +1 -0
  46. package/dist/commands/wallets.d.ts +3 -0
  47. package/dist/commands/wallets.d.ts.map +1 -0
  48. package/dist/commands/wallets.js +39 -0
  49. package/dist/commands/wallets.js.map +1 -0
  50. package/dist/fibrous/abi/base.d.ts +768 -0
  51. package/dist/fibrous/abi/base.d.ts.map +1 -0
  52. package/dist/fibrous/abi/base.js +984 -0
  53. package/dist/fibrous/abi/base.js.map +1 -0
  54. package/dist/fibrous/health.d.ts +11 -0
  55. package/dist/fibrous/health.d.ts.map +1 -0
  56. package/dist/fibrous/health.js +18 -0
  57. package/dist/fibrous/health.js.map +1 -0
  58. package/dist/fibrous/route.d.ts +47 -0
  59. package/dist/fibrous/route.d.ts.map +1 -0
  60. package/dist/fibrous/route.js +60 -0
  61. package/dist/fibrous/route.js.map +1 -0
  62. package/dist/fibrous/tokens.d.ts +10 -0
  63. package/dist/fibrous/tokens.d.ts.map +1 -0
  64. package/dist/fibrous/tokens.js +37 -0
  65. package/dist/fibrous/tokens.js.map +1 -0
  66. package/dist/format/output.d.ts +8 -0
  67. package/dist/format/output.d.ts.map +1 -0
  68. package/dist/format/output.js +69 -0
  69. package/dist/format/output.js.map +1 -0
  70. package/dist/utils/cache.d.ts +3 -0
  71. package/dist/utils/cache.d.ts.map +1 -0
  72. package/dist/utils/cache.js +23 -0
  73. package/dist/utils/cache.js.map +1 -0
  74. package/dist/utils/config.d.ts +7 -0
  75. package/dist/utils/config.d.ts.map +1 -0
  76. package/dist/utils/config.js +8 -0
  77. package/dist/utils/config.js.map +1 -0
  78. package/dist/utils/errors.d.ts +22 -0
  79. package/dist/utils/errors.d.ts.map +1 -0
  80. package/dist/utils/errors.js +29 -0
  81. package/dist/utils/errors.js.map +1 -0
  82. package/dist/utils/parseAmount.d.ts +3 -0
  83. package/dist/utils/parseAmount.d.ts.map +1 -0
  84. package/dist/utils/parseAmount.js +10 -0
  85. package/dist/utils/parseAmount.js.map +1 -0
  86. package/dist/utils/validation.d.ts +6 -0
  87. package/dist/utils/validation.d.ts.map +1 -0
  88. package/dist/utils/validation.js +24 -0
  89. package/dist/utils/validation.js.map +1 -0
  90. package/dist/wallet/policy.d.ts +2 -0
  91. package/dist/wallet/policy.d.ts.map +1 -0
  92. package/dist/wallet/policy.js +3 -0
  93. package/dist/wallet/policy.js.map +1 -0
  94. package/dist/wallet/privy.d.ts +15 -0
  95. package/dist/wallet/privy.d.ts.map +1 -0
  96. package/dist/wallet/privy.js +63 -0
  97. package/dist/wallet/privy.js.map +1 -0
  98. package/dist/wallet/session.d.ts +15 -0
  99. package/dist/wallet/session.d.ts.map +1 -0
  100. package/dist/wallet/session.js +47 -0
  101. package/dist/wallet/session.js.map +1 -0
  102. package/package.json +57 -0
@@ -0,0 +1,63 @@
1
+ import { PrivyClient } from "@privy-io/node";
2
+ import { ErrorCode, FibxError } from "../utils/errors.js";
3
+ export function getPrivyClient() {
4
+ const appId = process.env.PRIVY_APP_ID;
5
+ const appSecret = process.env.PRIVY_APP_SECRET;
6
+ if (!appId || !appSecret) {
7
+ throw new FibxError(ErrorCode.PRIVY_ERROR, "PRIVY_APP_ID and PRIVY_APP_SECRET env vars are required");
8
+ }
9
+ return new PrivyClient({ appId, appSecret });
10
+ }
11
+ export async function findExistingWallet(privy, email) {
12
+ try {
13
+ const user = await privy.users().getByEmailAddress({ address: email });
14
+ const serverWalletId = user.custom_metadata?.server_wallet_id;
15
+ if (serverWalletId) {
16
+ try {
17
+ const wallet = await privy.wallets().get(serverWalletId);
18
+ return { id: wallet.id, address: wallet.address };
19
+ }
20
+ catch {
21
+ // Server wallet ID exists in metadata but wallet not found (deleted?)
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ export async function createAgentWallet(privy, owner) {
31
+ try {
32
+ let walletOwner;
33
+ if (owner) {
34
+ walletOwner = owner.userId
35
+ ? { user_id: owner.userId }
36
+ : { public_key: owner.publicKey };
37
+ }
38
+ else {
39
+ walletOwner = null;
40
+ }
41
+ const wallet = await privy.wallets().create({
42
+ chain_type: "ethereum",
43
+ owner: walletOwner,
44
+ });
45
+ return { id: wallet.id, address: wallet.address };
46
+ }
47
+ catch (error) {
48
+ throw new FibxError(ErrorCode.PRIVY_ERROR, `Failed to create wallet: ${error instanceof Error ? error.message : String(error)}`);
49
+ }
50
+ }
51
+ export async function saveWalletIdToUser(privy, userId, walletId) {
52
+ try {
53
+ await privy.users().setCustomMetadata(userId, {
54
+ custom_metadata: {
55
+ server_wallet_id: walletId,
56
+ },
57
+ });
58
+ }
59
+ catch (error) {
60
+ throw new FibxError(ErrorCode.PRIVY_ERROR, `Failed to save wallet ID to user metadata: ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ }
63
+ //# sourceMappingURL=privy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy.js","sourceRoot":"","sources":["../../src/wallet/privy.ts"],"names":[],"mappings":"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"}
@@ -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/wallet/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 "../utils/config.js";
5
+ import { ErrorCode, FibxError } from "../utils/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/wallet/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,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "fibx",
3
+ "version": "0.1.0",
4
+ "description": "Fibrous DeFi CLI for Base — wallet, transfer, swap",
5
+ "type": "module",
6
+ "bin": {
7
+ "fibx": "dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "node --env-file=.env --import tsx/esm src/cli.ts",
15
+ "start": "node dist/cli.js",
16
+ "typecheck": "tsc --noEmit",
17
+ "lint": "eslint src/",
18
+ "lint:fix": "eslint src/ --fix",
19
+ "format": "prettier --write .",
20
+ "format:check": "prettier --check .",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@privy-io/node": "^0.8.0",
25
+ "chalk": "^5.6.2",
26
+ "commander": "^14.0.3",
27
+ "env-paths": "^3.0.0",
28
+ "ora": "^9.3.0",
29
+ "viem": "^2.45.1",
30
+ "zod": "^4.3.6"
31
+ },
32
+ "devDependencies": {
33
+ "@eslint/js": "^9.39.2",
34
+ "@types/node": "^22.13.4",
35
+ "eslint": "^9.39.2",
36
+ "eslint-config-prettier": "^10.1.8",
37
+ "globals": "^17.3.0",
38
+ "prettier": "^3.8.1",
39
+ "tsx": "^4.21.0",
40
+ "typescript": "^5.9.3",
41
+ "typescript-eslint": "^8.55.0"
42
+ },
43
+ "engines": {
44
+ "node": ">=18"
45
+ },
46
+ "keywords": [
47
+ "wallet",
48
+ "fibrous",
49
+ "crypto",
50
+ "defi",
51
+ "base",
52
+ "cli",
53
+ "swap",
54
+ "usdc"
55
+ ],
56
+ "license": "MIT"
57
+ }