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.
- package/LICENSE +373 -0
- package/README.md +104 -0
- package/dist/commands/balance.d.ts +5 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +85 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/faucet.d.ts +5 -0
- package/dist/commands/faucet.d.ts.map +1 -0
- package/dist/commands/faucet.js +41 -0
- package/dist/commands/faucet.js.map +1 -0
- package/dist/commands/list-conversions.d.ts +5 -0
- package/dist/commands/list-conversions.d.ts.map +1 -0
- package/dist/commands/list-conversions.js +60 -0
- package/dist/commands/list-conversions.js.map +1 -0
- package/dist/commands/list-tokens.d.ts +5 -0
- package/dist/commands/list-tokens.d.ts.map +1 -0
- package/dist/commands/list-tokens.js +43 -0
- package/dist/commands/list-tokens.js.map +1 -0
- package/dist/commands/receive.d.ts +5 -0
- package/dist/commands/receive.d.ts.map +1 -0
- package/dist/commands/receive.js +29 -0
- package/dist/commands/receive.js.map +1 -0
- package/dist/commands/send.d.ts +5 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +78 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/swap.d.ts +5 -0
- package/dist/commands/swap.d.ts.map +1 -0
- package/dist/commands/swap.js +74 -0
- package/dist/commands/swap.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/account.d.ts +14 -0
- package/dist/lib/account.d.ts.map +1 -0
- package/dist/lib/account.js +22 -0
- package/dist/lib/account.js.map +1 -0
- package/dist/lib/faucet.d.ts +24 -0
- package/dist/lib/faucet.d.ts.map +1 -0
- package/dist/lib/faucet.js +108 -0
- package/dist/lib/faucet.js.map +1 -0
- package/dist/lib/fx-client.d.ts +56 -0
- package/dist/lib/fx-client.d.ts.map +1 -0
- package/dist/lib/fx-client.js +112 -0
- package/dist/lib/fx-client.js.map +1 -0
- 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":"AAAA,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAC;AA6B1D,MAAM,OAAO,QAAQ;IACX,QAAQ,CAAM;IACd,UAAU,CAAsB;IAExC,YAAY,OAAwB;QAClC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,MAAM,CACxC,OAAO,CAAC,UAAiB,EACzB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,eAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC5D,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAC3D,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;YACH,yDAAyD;YACzD,OAAO,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAKlB;QACC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM;gBACnC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CACb,8BAA8B,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,CAC5D,CAAC;YACJ,CAAC;YAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,eAAe,EAAE,GAAG,CAAC,QAAQ,CAAC,eAAe;gBAC7C,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE;aAC/B,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAKjB;QACC,OAAO,CAAC,GAAG,CACT,yBAAyB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,MAAM,CAC5E,CAAC;QAEF,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,CAAC,eAAe,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE5E,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;QAEpE,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM,oBAAoB,GAAG,MAAM,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACtE,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC;QAE5D,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,UAAU;YACV,QAAQ,EAAE,aAAa;SACxB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,cAAkC,EAClC,UAA+B;IAE/B,MAAM,eAAe,GAAG,cAAc;QACpC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC;QAC1D,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,IAAI,QAAQ,CAAC;QAClB,eAAe;QACf,UAAU;KACX,CAAC,CAAC;AACL,CAAC"}
|
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
|
+
}
|