keecli 1.0.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 (47) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +104 -0
  3. package/dist/commands/balance.d.ts +5 -0
  4. package/dist/commands/balance.d.ts.map +1 -0
  5. package/dist/commands/balance.js +85 -0
  6. package/dist/commands/balance.js.map +1 -0
  7. package/dist/commands/faucet.d.ts +5 -0
  8. package/dist/commands/faucet.d.ts.map +1 -0
  9. package/dist/commands/faucet.js +41 -0
  10. package/dist/commands/faucet.js.map +1 -0
  11. package/dist/commands/list-conversions.d.ts +5 -0
  12. package/dist/commands/list-conversions.d.ts.map +1 -0
  13. package/dist/commands/list-conversions.js +60 -0
  14. package/dist/commands/list-conversions.js.map +1 -0
  15. package/dist/commands/list-tokens.d.ts +5 -0
  16. package/dist/commands/list-tokens.d.ts.map +1 -0
  17. package/dist/commands/list-tokens.js +43 -0
  18. package/dist/commands/list-tokens.js.map +1 -0
  19. package/dist/commands/receive.d.ts +5 -0
  20. package/dist/commands/receive.d.ts.map +1 -0
  21. package/dist/commands/receive.js +29 -0
  22. package/dist/commands/receive.js.map +1 -0
  23. package/dist/commands/send.d.ts +5 -0
  24. package/dist/commands/send.d.ts.map +1 -0
  25. package/dist/commands/send.js +78 -0
  26. package/dist/commands/send.js.map +1 -0
  27. package/dist/commands/swap.d.ts +5 -0
  28. package/dist/commands/swap.d.ts.map +1 -0
  29. package/dist/commands/swap.js +74 -0
  30. package/dist/commands/swap.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +60 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/lib/account.d.ts +14 -0
  36. package/dist/lib/account.d.ts.map +1 -0
  37. package/dist/lib/account.js +22 -0
  38. package/dist/lib/account.js.map +1 -0
  39. package/dist/lib/faucet.d.ts +24 -0
  40. package/dist/lib/faucet.d.ts.map +1 -0
  41. package/dist/lib/faucet.js +108 -0
  42. package/dist/lib/faucet.js.map +1 -0
  43. package/dist/lib/fx-client.d.ts +56 -0
  44. package/dist/lib/fx-client.d.ts.map +1 -0
  45. package/dist/lib/fx-client.js +112 -0
  46. package/dist/lib/fx-client.js.map +1 -0
  47. package/package.json +52 -0
@@ -0,0 +1,56 @@
1
+ import * as KeetaNet from "@keetanetwork/keetanet-client";
2
+ export interface FXClientOptions {
3
+ resolverAccount?: any;
4
+ userClient: KeetaNet.UserClient;
5
+ }
6
+ export interface TokenInfo {
7
+ currency: string;
8
+ token: string;
9
+ }
10
+ export interface SwapEstimate {
11
+ from: string;
12
+ to: string;
13
+ amount: string;
14
+ convertedAmount: string;
15
+ getQuote: () => Promise<any>;
16
+ }
17
+ export interface SwapResult {
18
+ exchangeID: string;
19
+ estimate: SwapEstimate;
20
+ }
21
+ export declare class FXClient {
22
+ private fxClient;
23
+ private userClient;
24
+ constructor(options: FXClientOptions);
25
+ /**
26
+ * List all available tokens from the resolver
27
+ */
28
+ listTokens(): Promise<TokenInfo[]>;
29
+ /**
30
+ * Get possible conversions from a specific token
31
+ */
32
+ listConversions(fromToken: string): Promise<any[]>;
33
+ /**
34
+ * Get price estimates for a swap
35
+ */
36
+ getEstimates(params: {
37
+ from: string;
38
+ to: string;
39
+ amount: string;
40
+ affinity?: "from" | "to";
41
+ }): Promise<SwapEstimate[]>;
42
+ /**
43
+ * Execute a swap using the first available estimate
44
+ */
45
+ executeSwap(params: {
46
+ from: string;
47
+ to: string;
48
+ amount: string;
49
+ affinity?: "from" | "to";
50
+ }): Promise<SwapResult>;
51
+ }
52
+ /**
53
+ * Create FX client from resolver string and user client
54
+ */
55
+ export declare function createFXClient(resolverString: string | undefined, userClient: KeetaNet.UserClient): FXClient;
56
+ //# sourceMappingURL=fx-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-client.d.ts","sourceRoot":"","sources":["../../src/lib/fx-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAC;AAM1D,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAsB;gBAE5B,OAAO,EAAE,eAAe;IAQpC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAaxC;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAaxD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4B3B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,OAAO,CAAC,UAAU,CAAC;CAoCxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,UAAU,EAAE,QAAQ,CAAC,UAAU,GAC9B,QAAQ,CASV"}
@@ -0,0 +1,112 @@
1
+ import * as AnchorClient from "@keetanetwork/anchor/client/index.js";
2
+ import * as KeetaNet from "@keetanetwork/keetanet-client";
3
+ export class FXClient {
4
+ fxClient;
5
+ userClient;
6
+ constructor(options) {
7
+ this.userClient = options.userClient;
8
+ this.fxClient = new AnchorClient.FX.Client(options.userClient, options.resolverAccount ? { root: options.resolverAccount } : {});
9
+ }
10
+ /**
11
+ * List all available tokens from the resolver
12
+ */
13
+ async listTokens() {
14
+ try {
15
+ const tokenList = await this.fxClient.resolver.listTokens();
16
+ return tokenList.map((t) => ({
17
+ currency: t.currency,
18
+ token: t.token,
19
+ }));
20
+ }
21
+ catch (error) {
22
+ console.error("Error listing tokens:", error);
23
+ return [];
24
+ }
25
+ }
26
+ /**
27
+ * Get possible conversions from a specific token
28
+ */
29
+ async listConversions(fromToken) {
30
+ try {
31
+ const response = await this.fxClient.listPossibleConversions({
32
+ from: fromToken,
33
+ });
34
+ // Extract the conversions array from the response object
35
+ return response.conversions || [];
36
+ }
37
+ catch (error) {
38
+ console.error(`Error getting conversions for ${fromToken}:`, error);
39
+ return [];
40
+ }
41
+ }
42
+ /**
43
+ * Get price estimates for a swap
44
+ */
45
+ async getEstimates(params) {
46
+ try {
47
+ const estimates = await this.fxClient.getEstimates({
48
+ affinity: params.affinity || "from",
49
+ amount: params.amount,
50
+ from: params.from,
51
+ to: params.to,
52
+ });
53
+ if (!estimates || estimates.length === 0) {
54
+ throw new Error(`No estimates available for ${params.from} -> ${params.to}`);
55
+ }
56
+ return estimates.map((est) => ({
57
+ from: params.from,
58
+ to: params.to,
59
+ amount: params.amount,
60
+ convertedAmount: est.estimate.convertedAmount,
61
+ getQuote: () => est.getQuote(),
62
+ }));
63
+ }
64
+ catch (error) {
65
+ console.error("Error getting estimates:", error);
66
+ throw error;
67
+ }
68
+ }
69
+ /**
70
+ * Execute a swap using the first available estimate
71
+ */
72
+ async executeSwap(params) {
73
+ console.log(`\n--- Executing Swap: ${params.amount} ${params.from} -> ${params.to} ---`);
74
+ // Get estimates
75
+ console.log("1. Getting price estimates...");
76
+ const estimates = await this.getEstimates(params);
77
+ const firstEstimate = estimates[0];
78
+ if (!firstEstimate) {
79
+ throw new Error("No estimates available for this swap");
80
+ }
81
+ console.log(` ↳ Estimate: ${firstEstimate.convertedAmount} ${params.to}`);
82
+ // Get quote
83
+ console.log("2. Requesting firm quote...");
84
+ const quoteWithProvider = await firstEstimate.getQuote();
85
+ const quote = quoteWithProvider.quote;
86
+ console.log(` ↳ Quote signed by ${quote.account}`);
87
+ console.log(` ↳ Guaranteed conversion: ${quote.convertedAmount}`);
88
+ // Execute swap
89
+ console.log("3. Creating exchange...");
90
+ const exchangeWithProvider = await quoteWithProvider.createExchange();
91
+ const exchangeID = exchangeWithProvider.exchange.exchangeID;
92
+ console.log(" ↳ Exchange accepted!");
93
+ console.log(` ↳ Transaction ID: ${exchangeID}`);
94
+ return {
95
+ exchangeID,
96
+ estimate: firstEstimate,
97
+ };
98
+ }
99
+ }
100
+ /**
101
+ * Create FX client from resolver string and user client
102
+ */
103
+ export function createFXClient(resolverString, userClient) {
104
+ const resolverAccount = resolverString
105
+ ? KeetaNet.lib.Account.fromPublicKeyString(resolverString)
106
+ : undefined;
107
+ return new FXClient({
108
+ resolverAccount,
109
+ userClient,
110
+ });
111
+ }
112
+ //# sourceMappingURL=fx-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fx-client.js","sourceRoot":"","sources":["../../src/lib/fx-client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "keecli",
3
+ "version": "1.0.0",
4
+ "description": "KeeCLI - Trading CLI for KeetaNetwork",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "keecli": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "dev": "tsc && node dist/index.js",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "fx",
18
+ "trading",
19
+ "cli",
20
+ "keetanetwork",
21
+ "keecli",
22
+ "cryptocurrency",
23
+ "blockchain",
24
+ "swap",
25
+ "defi"
26
+ ],
27
+ "files": [
28
+ "dist/",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "author": "xescure",
33
+ "license": "ISC",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/xescure/keecli.git"
37
+ },
38
+ "homepage": "https://github.com/xescure/keecli#readme",
39
+ "bugs": {
40
+ "url": "https://github.com/xescure/keecli/issues"
41
+ },
42
+ "dependencies": {
43
+ "@keetanetwork/anchor": "^0.0.12",
44
+ "@keetanetwork/keetanet-client": "^0.14.8",
45
+ "yargs": "^17.7.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^24.6.2",
49
+ "typescript": "^5.0.0",
50
+ "@types/yargs": "^17.0.0"
51
+ }
52
+ }