fibx 0.2.3 → 0.2.6

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 (149) hide show
  1. package/README.md +58 -18
  2. package/dist/commands/defi/aave.d.ts.map +1 -1
  3. package/dist/commands/defi/aave.js +6 -6
  4. package/dist/commands/defi/aave.js.map +1 -1
  5. package/dist/commands/trade/swap.d.ts.map +1 -1
  6. package/dist/commands/trade/swap.js +1 -2
  7. package/dist/commands/trade/swap.js.map +1 -1
  8. package/dist/commands/wallet/balance.js +1 -1
  9. package/dist/commands/wallet/balance.js.map +1 -1
  10. package/dist/commands/wallet/send.d.ts.map +1 -1
  11. package/dist/commands/wallet/send.js +5 -4
  12. package/dist/commands/wallet/send.js.map +1 -1
  13. package/dist/index.js +10 -6
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/errors.d.ts +6 -2
  16. package/dist/lib/errors.d.ts.map +1 -1
  17. package/dist/lib/errors.js +4 -2
  18. package/dist/lib/errors.js.map +1 -1
  19. package/dist/services/chain/client.d.ts +16 -16
  20. package/dist/services/chain/constants.d.ts +7 -8
  21. package/dist/services/chain/constants.d.ts.map +1 -1
  22. package/dist/services/chain/constants.js +10 -7
  23. package/dist/services/chain/constants.js.map +1 -1
  24. package/dist/services/chain/nonceManager.d.ts +0 -1
  25. package/dist/services/chain/nonceManager.d.ts.map +1 -1
  26. package/dist/services/chain/nonceManager.js +2 -4
  27. package/dist/services/chain/nonceManager.js.map +1 -1
  28. package/dist/services/defi/aave.d.ts +3 -1
  29. package/dist/services/defi/aave.d.ts.map +1 -1
  30. package/dist/services/defi/aave.js +25 -26
  31. package/dist/services/defi/aave.js.map +1 -1
  32. package/dist/services/defi/constants.d.ts +0 -2
  33. package/dist/services/defi/constants.d.ts.map +1 -1
  34. package/dist/services/defi/constants.js +0 -2
  35. package/dist/services/defi/constants.js.map +1 -1
  36. package/dist/services/fibrous/abi/citrea.d.ts +772 -63
  37. package/dist/services/fibrous/abi/citrea.d.ts.map +1 -1
  38. package/dist/services/fibrous/abi/citrea.js.map +1 -1
  39. package/dist/services/fibrous/abi/hyperevm.d.ts +772 -63
  40. package/dist/services/fibrous/abi/hyperevm.d.ts.map +1 -1
  41. package/dist/services/fibrous/abi/hyperevm.js.map +1 -1
  42. package/dist/services/fibrous/abi/monad.d.ts +772 -63
  43. package/dist/services/fibrous/abi/monad.d.ts.map +1 -1
  44. package/dist/services/fibrous/abi/monad.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/chain/chains.d.ts +0 -14
  47. package/dist/chain/chains.d.ts.map +0 -1
  48. package/dist/chain/chains.js +0 -21
  49. package/dist/chain/chains.js.map +0 -1
  50. package/dist/chain/erc20.d.ts +0 -6
  51. package/dist/chain/erc20.d.ts.map +0 -1
  52. package/dist/chain/erc20.js +0 -72
  53. package/dist/chain/erc20.js.map +0 -1
  54. package/dist/chain/viem.d.ts +0 -24029
  55. package/dist/chain/viem.d.ts.map +0 -1
  56. package/dist/chain/viem.js +0 -74
  57. package/dist/chain/viem.js.map +0 -1
  58. package/dist/cli.d.ts +0 -3
  59. package/dist/cli.d.ts.map +0 -1
  60. package/dist/cli.js +0 -85
  61. package/dist/cli.js.map +0 -1
  62. package/dist/commands/address.d.ts +0 -3
  63. package/dist/commands/address.d.ts.map +0 -1
  64. package/dist/commands/address.js +0 -15
  65. package/dist/commands/address.js.map +0 -1
  66. package/dist/commands/auth-login.d.ts +0 -3
  67. package/dist/commands/auth-login.d.ts.map +0 -1
  68. package/dist/commands/auth-login.js +0 -34
  69. package/dist/commands/auth-login.js.map +0 -1
  70. package/dist/commands/auth-verify.d.ts +0 -3
  71. package/dist/commands/auth-verify.d.ts.map +0 -1
  72. package/dist/commands/auth-verify.js +0 -64
  73. package/dist/commands/auth-verify.js.map +0 -1
  74. package/dist/commands/balance.d.ts +0 -3
  75. package/dist/commands/balance.d.ts.map +0 -1
  76. package/dist/commands/balance.js +0 -55
  77. package/dist/commands/balance.js.map +0 -1
  78. package/dist/commands/send.d.ts +0 -3
  79. package/dist/commands/send.d.ts.map +0 -1
  80. package/dist/commands/send.js +0 -58
  81. package/dist/commands/send.js.map +0 -1
  82. package/dist/commands/status.d.ts +0 -3
  83. package/dist/commands/status.d.ts.map +0 -1
  84. package/dist/commands/status.js +0 -31
  85. package/dist/commands/status.js.map +0 -1
  86. package/dist/commands/trade.d.ts +0 -7
  87. package/dist/commands/trade.d.ts.map +0 -1
  88. package/dist/commands/trade.js +0 -69
  89. package/dist/commands/trade.js.map +0 -1
  90. package/dist/commands/wallets.d.ts +0 -3
  91. package/dist/commands/wallets.d.ts.map +0 -1
  92. package/dist/commands/wallets.js +0 -39
  93. package/dist/commands/wallets.js.map +0 -1
  94. package/dist/fibrous/abi/base.d.ts +0 -768
  95. package/dist/fibrous/abi/base.d.ts.map +0 -1
  96. package/dist/fibrous/abi/base.js +0 -984
  97. package/dist/fibrous/abi/base.js.map +0 -1
  98. package/dist/fibrous/balances.d.ts +0 -14
  99. package/dist/fibrous/balances.d.ts.map +0 -1
  100. package/dist/fibrous/balances.js +0 -26
  101. package/dist/fibrous/balances.js.map +0 -1
  102. package/dist/fibrous/health.d.ts +0 -11
  103. package/dist/fibrous/health.d.ts.map +0 -1
  104. package/dist/fibrous/health.js +0 -18
  105. package/dist/fibrous/health.js.map +0 -1
  106. package/dist/fibrous/route.d.ts +0 -47
  107. package/dist/fibrous/route.d.ts.map +0 -1
  108. package/dist/fibrous/route.js +0 -60
  109. package/dist/fibrous/route.js.map +0 -1
  110. package/dist/fibrous/tokens.d.ts +0 -10
  111. package/dist/fibrous/tokens.d.ts.map +0 -1
  112. package/dist/fibrous/tokens.js +0 -37
  113. package/dist/fibrous/tokens.js.map +0 -1
  114. package/dist/format/output.d.ts +0 -8
  115. package/dist/format/output.d.ts.map +0 -1
  116. package/dist/format/output.js +0 -69
  117. package/dist/format/output.js.map +0 -1
  118. package/dist/utils/cache.d.ts +0 -3
  119. package/dist/utils/cache.d.ts.map +0 -1
  120. package/dist/utils/cache.js +0 -23
  121. package/dist/utils/cache.js.map +0 -1
  122. package/dist/utils/config.d.ts +0 -7
  123. package/dist/utils/config.d.ts.map +0 -1
  124. package/dist/utils/config.js +0 -8
  125. package/dist/utils/config.js.map +0 -1
  126. package/dist/utils/errors.d.ts +0 -22
  127. package/dist/utils/errors.d.ts.map +0 -1
  128. package/dist/utils/errors.js +0 -29
  129. package/dist/utils/errors.js.map +0 -1
  130. package/dist/utils/parseAmount.d.ts +0 -3
  131. package/dist/utils/parseAmount.d.ts.map +0 -1
  132. package/dist/utils/parseAmount.js +0 -10
  133. package/dist/utils/parseAmount.js.map +0 -1
  134. package/dist/utils/validation.d.ts +0 -6
  135. package/dist/utils/validation.d.ts.map +0 -1
  136. package/dist/utils/validation.js +0 -24
  137. package/dist/utils/validation.js.map +0 -1
  138. package/dist/wallet/policy.d.ts +0 -2
  139. package/dist/wallet/policy.d.ts.map +0 -1
  140. package/dist/wallet/policy.js +0 -3
  141. package/dist/wallet/policy.js.map +0 -1
  142. package/dist/wallet/privy.d.ts +0 -15
  143. package/dist/wallet/privy.d.ts.map +0 -1
  144. package/dist/wallet/privy.js +0 -63
  145. package/dist/wallet/privy.js.map +0 -1
  146. package/dist/wallet/session.d.ts +0 -15
  147. package/dist/wallet/session.d.ts.map +0 -1
  148. package/dist/wallet/session.js +0 -47
  149. package/dist/wallet/session.js.map +0 -1
@@ -1,15 +0,0 @@
1
- import { PrivyClient } from "@privy-io/node";
2
- export declare function getPrivyClient(): PrivyClient;
3
- export declare function findExistingWallet(privy: PrivyClient, email: string): Promise<{
4
- id: string;
5
- address: string;
6
- } | null>;
7
- export declare function createAgentWallet(privy: PrivyClient, owner?: {
8
- userId?: string;
9
- publicKey?: string;
10
- }): Promise<{
11
- id: string;
12
- address: string;
13
- }>;
14
- export declare function saveWalletIdToUser(privy: PrivyClient, userId: string, walletId: string): Promise<void>;
15
- //# sourceMappingURL=privy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"privy.d.ts","sourceRoot":"","sources":["../../src/wallet/privy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,cAAc,IAAI,WAAW,CAY5C;AAED,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkBjD;AAED,wBAAsB,iBAAiB,CACtC,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;GAuB/C;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAa5F"}
@@ -1,63 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"privy.js","sourceRoot":"","sources":["../../src/wallet/privy.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,47 +0,0 @@
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
@@ -1 +0,0 @@
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"}