@andrewkimjoseph/celina-sdk 0.7.13 → 0.8.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/README.md +6 -39
- package/build/analytics/mcp-tool-events.js +0 -12
- package/build/analytics/mcp-tool-events.js.map +1 -1
- package/build/analytics/wallet-extract.js +0 -2
- package/build/analytics/wallet-extract.js.map +1 -1
- package/build/config/sdk-config.d.ts +0 -4
- package/build/config/sdk-config.js +0 -4
- package/build/config/sdk-config.js.map +1 -1
- package/build/index.d.ts +0 -10
- package/build/index.js +0 -7
- package/build/index.js.map +1 -1
- package/build/tools/domains/index.js +0 -2
- package/build/tools/domains/index.js.map +1 -1
- package/build/tools/filter.js +0 -8
- package/build/tools/filter.js.map +1 -1
- package/build/tools/index.d.ts +0 -1
- package/build/tools/index.js +0 -1
- package/build/tools/index.js.map +1 -1
- package/build/tools/schemas/common.d.ts +0 -10
- package/build/tools/schemas/common.js +0 -6
- package/build/tools/schemas/common.js.map +1 -1
- package/build/tools/schemas/wallet-params.d.ts +2 -0
- package/build/tools/schemas/wallet-params.js +27 -1
- package/build/tools/schemas/wallet-params.js.map +1 -1
- package/build/tools/types.d.ts +0 -26
- package/package.json +1 -2
- package/tests/catalog/operations.ts +2 -7
- package/build/clients/carbon-rest.d.ts +0 -17
- package/build/clients/carbon-rest.js +0 -59
- package/build/clients/carbon-rest.js.map +0 -1
- package/build/clients/carbon-sdk.d.ts +0 -31
- package/build/clients/carbon-sdk.js +0 -48
- package/build/clients/carbon-sdk.js.map +0 -1
- package/build/config/carbon.d.ts +0 -15
- package/build/config/carbon.js +0 -18
- package/build/config/carbon.js.map +0 -1
- package/build/services/carbon.service.d.ts +0 -73
- package/build/services/carbon.service.js +0 -204
- package/build/services/carbon.service.js.map +0 -1
- package/build/tools/domains/carbon.d.ts +0 -2
- package/build/tools/domains/carbon.js +0 -187
- package/build/tools/domains/carbon.js.map +0 -1
- package/build/tools/utils/carbon-prepare-handler.d.ts +0 -6
- package/build/tools/utils/carbon-prepare-handler.js +0 -17
- package/build/tools/utils/carbon-prepare-handler.js.map +0 -1
- package/build/types/carbon.d.ts +0 -31
- package/build/types/carbon.js +0 -2
- package/build/types/carbon.js.map +0 -1
- package/build/utils/carbon-execution.d.ts +0 -11
- package/build/utils/carbon-execution.js +0 -106
- package/build/utils/carbon-execution.js.map +0 -1
- package/build/utils/carbon-prepared-flow.d.ts +0 -11
- package/build/utils/carbon-prepared-flow.js +0 -28
- package/build/utils/carbon-prepared-flow.js.map +0 -1
- package/build/utils/carbon-rest-adapter.d.ts +0 -8
- package/build/utils/carbon-rest-adapter.js +0 -79
- package/build/utils/carbon-rest-adapter.js.map +0 -1
- package/build/utils/carbon-step-labels.d.ts +0 -12
- package/build/utils/carbon-step-labels.js +0 -180
- package/build/utils/carbon-step-labels.js.map +0 -1
- package/build/utils/carbon-token.d.ts +0 -10
- package/build/utils/carbon-token.js +0 -39
- package/build/utils/carbon-token.js.map +0 -1
- package/build/utils/finalize-carbon-prepare.d.ts +0 -10
- package/build/utils/finalize-carbon-prepare.js +0 -17
- package/build/utils/finalize-carbon-prepare.js.map +0 -1
- package/tests/catalog/domains/carbon.ts +0 -547
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { CARBON_CHAIN, DEFAULT_CARBON_REST_BASE_URL } from "../config/carbon.js";
|
|
2
|
-
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
3
|
-
export class CarbonRestError extends Error {
|
|
4
|
-
toolName;
|
|
5
|
-
statusCode;
|
|
6
|
-
constructor(message, toolName, statusCode) {
|
|
7
|
-
super(message);
|
|
8
|
-
this.toolName = toolName;
|
|
9
|
-
this.statusCode = statusCode;
|
|
10
|
-
this.name = "CarbonRestError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export class CarbonRestClient {
|
|
14
|
-
baseUrl;
|
|
15
|
-
timeoutMs;
|
|
16
|
-
constructor(baseUrl = DEFAULT_CARBON_REST_BASE_URL, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
17
|
-
this.baseUrl = baseUrl;
|
|
18
|
-
this.timeoutMs = timeoutMs;
|
|
19
|
-
}
|
|
20
|
-
url(toolName) {
|
|
21
|
-
const base = this.baseUrl.replace(/\/$/, "");
|
|
22
|
-
return `${base}/tools/${toolName}`;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* POST to Carbon MCP REST. Always injects `chain: celo` unless caller overrides.
|
|
26
|
-
*/
|
|
27
|
-
async postTool(toolName, body = {}) {
|
|
28
|
-
const payload = {
|
|
29
|
-
chain: CARBON_CHAIN,
|
|
30
|
-
...body,
|
|
31
|
-
};
|
|
32
|
-
const response = await fetch(this.url(toolName), {
|
|
33
|
-
method: "POST",
|
|
34
|
-
headers: { "Content-Type": "application/json" },
|
|
35
|
-
body: JSON.stringify(payload),
|
|
36
|
-
signal: AbortSignal.timeout(this.timeoutMs),
|
|
37
|
-
});
|
|
38
|
-
const text = await response.text();
|
|
39
|
-
let json;
|
|
40
|
-
try {
|
|
41
|
-
json = text ? JSON.parse(text) : {};
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
throw new CarbonRestError(`Carbon API returned non-JSON (${response.status})`, toolName, response.status);
|
|
45
|
-
}
|
|
46
|
-
if (json.error && typeof json.error === "string") {
|
|
47
|
-
throw new CarbonRestError(json.error, toolName, response.status);
|
|
48
|
-
}
|
|
49
|
-
if (json.status === "not_found") {
|
|
50
|
-
const msg = typeof json.message === "string" ? json.message : "Carbon API not found";
|
|
51
|
-
throw new CarbonRestError(msg, toolName, response.status);
|
|
52
|
-
}
|
|
53
|
-
if (!response.ok) {
|
|
54
|
-
throw new CarbonRestError(`Carbon API HTTP ${response.status}`, toolName, response.status);
|
|
55
|
-
}
|
|
56
|
-
return json;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=carbon-rest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"carbon-rest.js","sourceRoot":"","sources":["../../src/clients/carbon-rest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAGjF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAG7B;IACA;IAHX,YACE,OAAe,EACN,QAAgB,EAChB,UAAmB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAS;QAG5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAID,MAAM,OAAO,gBAAgB;IAER;IACA;IAFnB,YACmB,UAAkB,4BAA4B,EAC9C,YAAoB,kBAAkB;QADtC,YAAO,GAAP,OAAO,CAAuC;QAC9C,cAAS,GAAT,SAAS,CAA6B;IACtD,CAAC;IAEI,GAAG,CAAC,QAAgB;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,GAAG,IAAI,UAAU,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,QAAgB,EAChB,OAAuB,EAAE;QAEzB,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,YAAY;YACnB,GAAG,IAAI;SACR,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,eAAe,CACvB,iCAAiC,QAAQ,CAAC,MAAM,GAAG,EACnD,QAAQ,EACR,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACjD,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,MAAM,GAAG,GACP,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAC3E,MAAM,IAAI,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,eAAe,CACvB,mBAAmB,QAAQ,CAAC,MAAM,EAAE,EACpC,QAAQ,EACR,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;QAED,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { SerializedPreparedFlow } from "../types/prepared.js";
|
|
2
|
-
/** Minimal Toolkit surface used for trade fallback. */
|
|
3
|
-
type CarbonToolkit = {
|
|
4
|
-
getTradeData: (sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean) => Promise<{
|
|
5
|
-
tradeActions: unknown[];
|
|
6
|
-
totalSourceAmount: string;
|
|
7
|
-
totalTargetAmount: string;
|
|
8
|
-
}>;
|
|
9
|
-
composeTradeBySourceTransaction: (sourceToken: string, targetToken: string, tradeActions: unknown[], deadline: string, minReturn: string) => Promise<{
|
|
10
|
-
to?: string | null;
|
|
11
|
-
data?: string | null;
|
|
12
|
-
value?: bigint | null;
|
|
13
|
-
}>;
|
|
14
|
-
};
|
|
15
|
-
export declare class CarbonSdkClient {
|
|
16
|
-
private readonly rpcUrl;
|
|
17
|
-
private toolkit;
|
|
18
|
-
private initPromise;
|
|
19
|
-
constructor(rpcUrl: string);
|
|
20
|
-
getToolkit(): Promise<CarbonToolkit>;
|
|
21
|
-
private initialize;
|
|
22
|
-
getTradeQuoteFallback(sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean): Promise<{
|
|
23
|
-
tradeData: {
|
|
24
|
-
tradeActions: unknown[];
|
|
25
|
-
totalSourceAmount: string;
|
|
26
|
-
totalTargetAmount: string;
|
|
27
|
-
};
|
|
28
|
-
}>;
|
|
29
|
-
prepareTradeFallback(from: `0x${string}`, sourceToken: string, targetToken: string, amount: string, isTradeByTarget: boolean, minReturnOrMaxInput: string, deadlineMinutes?: number): Promise<SerializedPreparedFlow>;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { JsonRpcProvider } from "ethers";
|
|
2
|
-
import { ContractsApi } from "@bancor/carbon-sdk/contracts-api";
|
|
3
|
-
import { initSyncedCache } from "@bancor/carbon-sdk/chain-cache";
|
|
4
|
-
import { CELO_CARBON_CONTRACTS, CELO_CHAIN_ID, } from "../config/carbon.js";
|
|
5
|
-
import { populatedTransactionToPreparedFlow } from "../utils/carbon-prepared-flow.js";
|
|
6
|
-
const MAX_BLOCK_AGE = 2000;
|
|
7
|
-
export class CarbonSdkClient {
|
|
8
|
-
rpcUrl;
|
|
9
|
-
toolkit = null;
|
|
10
|
-
initPromise = null;
|
|
11
|
-
constructor(rpcUrl) {
|
|
12
|
-
this.rpcUrl = rpcUrl;
|
|
13
|
-
}
|
|
14
|
-
async getToolkit() {
|
|
15
|
-
if (this.toolkit)
|
|
16
|
-
return this.toolkit;
|
|
17
|
-
if (!this.initPromise) {
|
|
18
|
-
this.initPromise = this.initialize();
|
|
19
|
-
}
|
|
20
|
-
this.toolkit = await this.initPromise;
|
|
21
|
-
return this.toolkit;
|
|
22
|
-
}
|
|
23
|
-
async initialize() {
|
|
24
|
-
const strategyMod = (await import("@bancor/carbon-sdk/strategy-management"));
|
|
25
|
-
const { Toolkit } = strategyMod;
|
|
26
|
-
const provider = new JsonRpcProvider(this.rpcUrl, CELO_CHAIN_ID, {
|
|
27
|
-
staticNetwork: true,
|
|
28
|
-
});
|
|
29
|
-
const api = new ContractsApi(provider, CELO_CARBON_CONTRACTS);
|
|
30
|
-
const { cache, startDataSync } = initSyncedCache(api.reader, undefined, MAX_BLOCK_AGE);
|
|
31
|
-
const toolkit = new Toolkit(api, cache);
|
|
32
|
-
await startDataSync();
|
|
33
|
-
return toolkit;
|
|
34
|
-
}
|
|
35
|
-
async getTradeQuoteFallback(sourceToken, targetToken, amount, isTradeByTarget) {
|
|
36
|
-
const toolkit = await this.getToolkit();
|
|
37
|
-
const tradeData = await toolkit.getTradeData(sourceToken, targetToken, amount, isTradeByTarget);
|
|
38
|
-
return { tradeData };
|
|
39
|
-
}
|
|
40
|
-
async prepareTradeFallback(from, sourceToken, targetToken, amount, isTradeByTarget, minReturnOrMaxInput, deadlineMinutes = 5) {
|
|
41
|
-
const toolkit = await this.getToolkit();
|
|
42
|
-
const tradeData = await toolkit.getTradeData(sourceToken, targetToken, amount, isTradeByTarget);
|
|
43
|
-
const deadline = String(Math.floor(Date.now() / 1000) + deadlineMinutes * 60);
|
|
44
|
-
const tx = await toolkit.composeTradeBySourceTransaction(sourceToken, targetToken, tradeData.tradeActions, deadline, minReturnOrMaxInput);
|
|
45
|
-
return populatedTransactionToPreparedFlow(from, tx, `Carbon swap ${sourceToken} → ${targetToken}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=carbon-sdk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"carbon-sdk.js","sourceRoot":"","sources":["../../src/clients/carbon-sdk.ts"],"names":[],"mappings":"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"}
|
package/build/config/carbon.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/** Carbon DeFi on Celo mainnet — contract addresses and API defaults. */
|
|
2
|
-
export declare const CARBON_CHAIN: "celo";
|
|
3
|
-
export declare const DEFAULT_CARBON_REST_BASE_URL = "https://mcp.carbondefi.xyz";
|
|
4
|
-
/** Matches @bancor/carbon-sdk `ContractsConfig` for Celo (carbon-contracts deployments). */
|
|
5
|
-
export declare const CELO_CARBON_CONTRACTS: {
|
|
6
|
-
readonly carbonControllerAddress: "0x6619871118D144c1c28eC3b23036FC1f0829ed3a";
|
|
7
|
-
readonly voucherAddress: "0x5E994Ac7d65d81f51a76e0bB5a236C6fDA8dBF9A";
|
|
8
|
-
/** Multicall3 on Celo mainnet. */
|
|
9
|
-
readonly multiCallAddress: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
10
|
-
readonly carbonBatcherAddress: "0xa977879684EecE2015AE879DC120c8a1C00718f7";
|
|
11
|
-
};
|
|
12
|
-
export declare const CELO_CHAIN_ID = 42220;
|
|
13
|
-
export declare const CARBON_APP_BASE_URL = "https://celo.carbondefi.xyz";
|
|
14
|
-
/** Post-execution activity explorer for a wallet on Carbon DeFi (Celo). */
|
|
15
|
-
export declare function carbonActivityDeepLink(walletAddress: string): string;
|
package/build/config/carbon.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/** Carbon DeFi on Celo mainnet — contract addresses and API defaults. */
|
|
2
|
-
export const CARBON_CHAIN = "celo";
|
|
3
|
-
export const DEFAULT_CARBON_REST_BASE_URL = "https://mcp.carbondefi.xyz";
|
|
4
|
-
/** Matches @bancor/carbon-sdk `ContractsConfig` for Celo (carbon-contracts deployments). */
|
|
5
|
-
export const CELO_CARBON_CONTRACTS = {
|
|
6
|
-
carbonControllerAddress: "0x6619871118D144c1c28eC3b23036FC1f0829ed3a",
|
|
7
|
-
voucherAddress: "0x5E994Ac7d65d81f51a76e0bB5a236C6fDA8dBF9A",
|
|
8
|
-
/** Multicall3 on Celo mainnet. */
|
|
9
|
-
multiCallAddress: "0xcA11bde05977b3631167028862bE2a173976CA11",
|
|
10
|
-
carbonBatcherAddress: "0xa977879684EecE2015AE879DC120c8a1C00718f7",
|
|
11
|
-
};
|
|
12
|
-
export const CELO_CHAIN_ID = 42220;
|
|
13
|
-
export const CARBON_APP_BASE_URL = "https://celo.carbondefi.xyz";
|
|
14
|
-
/** Post-execution activity explorer for a wallet on Carbon DeFi (Celo). */
|
|
15
|
-
export function carbonActivityDeepLink(walletAddress) {
|
|
16
|
-
return `${CARBON_APP_BASE_URL}/explore/activity?search=${walletAddress}`;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=carbon.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"carbon.js","sourceRoot":"","sources":["../../src/config/carbon.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AAEzE,4FAA4F;AAC5F,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,uBAAuB,EAAE,4CAA4C;IACrE,cAAc,EAAE,4CAA4C;IAC5D,kCAAkC;IAClC,gBAAgB,EAAE,4CAA4C;IAC9D,oBAAoB,EAAE,4CAA4C;CAC1D,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAEjE,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAC1D,OAAO,GAAG,mBAAmB,4BAA4B,aAAa,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Carbon DeFi on Celo — hybrid @bancor/carbon-sdk + Carbon REST (mcp.carbondefi.xyz).
|
|
3
|
-
* REST is primary for all 25 MCP tools; SDK is fallback for quotes/trades when REST fails.
|
|
4
|
-
*/
|
|
5
|
-
import type { SdkConfig } from "../config/sdk-config.js";
|
|
6
|
-
import type { CeloClientFactory } from "../clients/celo-client.js";
|
|
7
|
-
import type { CarbonPrepareResult, CarbonRestSuccess } from "../types/carbon.js";
|
|
8
|
-
import type { TokenService } from "./token.service.js";
|
|
9
|
-
import type { PreparedTx } from "../types/prepared.js";
|
|
10
|
-
export type CarbonWriteBody = Record<string, unknown> & {
|
|
11
|
-
wallet_address: `0x${string}`;
|
|
12
|
-
};
|
|
13
|
-
export declare class CarbonService {
|
|
14
|
-
private readonly tokenService;
|
|
15
|
-
private readonly clientFactory;
|
|
16
|
-
private readonly rest;
|
|
17
|
-
private readonly sdk;
|
|
18
|
-
constructor(config: SdkConfig, tokenService: TokenService, clientFactory: CeloClientFactory);
|
|
19
|
-
private restRead;
|
|
20
|
-
private restPrepare;
|
|
21
|
-
/** Build full on-chain steps (approvals + Carbon tx) for MCP local signing. */
|
|
22
|
-
buildExecutionSteps(from: `0x${string}`, prepared: CarbonPrepareResult, orderMeta: Record<string, unknown>): Promise<PreparedTx[]>;
|
|
23
|
-
private withSdkFallback;
|
|
24
|
-
getStrategies(walletAddress: `0x${string}`): Promise<CarbonRestSuccess & {
|
|
25
|
-
warnings: string[];
|
|
26
|
-
}>;
|
|
27
|
-
getStrategy(strategyId: string): Promise<CarbonRestSuccess & {
|
|
28
|
-
warnings: string[];
|
|
29
|
-
}>;
|
|
30
|
-
prepareLimitOrder(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
31
|
-
prepareRangeOrder(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
32
|
-
prepareRecurringStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
33
|
-
prepareConcentratedStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
34
|
-
prepareFullRangeStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
35
|
-
prepareRepriceStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
36
|
-
prepareEditStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
37
|
-
prepareDepositBudget(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
38
|
-
prepareWithdrawBudget(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
39
|
-
preparePauseStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
40
|
-
prepareResumeStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
41
|
-
prepareDeleteStrategy(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
42
|
-
getTradeQuote(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
43
|
-
warnings: string[];
|
|
44
|
-
}>;
|
|
45
|
-
prepareTrade(body: CarbonWriteBody): Promise<CarbonPrepareResult>;
|
|
46
|
-
explorePair(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
47
|
-
warnings: string[];
|
|
48
|
-
}>;
|
|
49
|
-
resolveToken(symbolOrName: string): Promise<CarbonRestSuccess & {
|
|
50
|
-
warnings: string[];
|
|
51
|
-
}>;
|
|
52
|
-
getActivity(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
53
|
-
warnings: string[];
|
|
54
|
-
}>;
|
|
55
|
-
findOpportunities(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
56
|
-
warnings: string[];
|
|
57
|
-
}>;
|
|
58
|
-
getProtocolStats(body?: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
59
|
-
warnings: string[];
|
|
60
|
-
}>;
|
|
61
|
-
getPriceHistory(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
62
|
-
warnings: string[];
|
|
63
|
-
}>;
|
|
64
|
-
simulateStrategy(body: Record<string, unknown>): Promise<CarbonRestSuccess & {
|
|
65
|
-
warnings: string[];
|
|
66
|
-
}>;
|
|
67
|
-
help(topic?: string): Promise<CarbonRestSuccess & {
|
|
68
|
-
warnings: string[];
|
|
69
|
-
}>;
|
|
70
|
-
learn(topic?: string): Promise<CarbonRestSuccess & {
|
|
71
|
-
warnings: string[];
|
|
72
|
-
}>;
|
|
73
|
-
}
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { MENTO_CELO_ADDRESS } from "../config/chains.js";
|
|
2
|
-
import { CarbonRestClient } from "../clients/carbon-rest.js";
|
|
3
|
-
import { CarbonSdkClient } from "../clients/carbon-sdk.js";
|
|
4
|
-
import { extractWarnings, normalizeCarbonPrepareResult, } from "../utils/carbon-rest-adapter.js";
|
|
5
|
-
import { buildCarbonExecutionSteps } from "../utils/carbon-execution.js";
|
|
6
|
-
import { normalizeCarbonWriteBody, resolveCarbonTokenAddress, } from "../utils/carbon-token.js";
|
|
7
|
-
function walletAddress(value) {
|
|
8
|
-
return value;
|
|
9
|
-
}
|
|
10
|
-
export class CarbonService {
|
|
11
|
-
tokenService;
|
|
12
|
-
clientFactory;
|
|
13
|
-
rest;
|
|
14
|
-
sdk;
|
|
15
|
-
constructor(config, tokenService, clientFactory) {
|
|
16
|
-
this.tokenService = tokenService;
|
|
17
|
-
this.clientFactory = clientFactory;
|
|
18
|
-
this.rest = new CarbonRestClient(config.carbonRestBaseUrl);
|
|
19
|
-
this.sdk =
|
|
20
|
-
config.carbonSdkFallback !== false
|
|
21
|
-
? new CarbonSdkClient(config.rpcUrl)
|
|
22
|
-
: null;
|
|
23
|
-
}
|
|
24
|
-
async restRead(tool, body = {}) {
|
|
25
|
-
const result = await this.rest.postTool(tool, body);
|
|
26
|
-
return { ...result, warnings: extractWarnings(result) };
|
|
27
|
-
}
|
|
28
|
-
async restPrepare(tool, body, summary) {
|
|
29
|
-
const from = walletAddress(body.wallet_address);
|
|
30
|
-
const normalized = normalizeCarbonWriteBody(this.tokenService, body);
|
|
31
|
-
const result = await this.rest.postTool(tool, normalized);
|
|
32
|
-
return normalizeCarbonPrepareResult(from, result, summary);
|
|
33
|
-
}
|
|
34
|
-
/** Build full on-chain steps (approvals + Carbon tx) for MCP local signing. */
|
|
35
|
-
async buildExecutionSteps(from, prepared, orderMeta) {
|
|
36
|
-
return buildCarbonExecutionSteps(from, prepared, orderMeta, {
|
|
37
|
-
tokenService: this.tokenService,
|
|
38
|
-
clientFactory: this.clientFactory,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
async withSdkFallback(restFn, fallbackFn) {
|
|
42
|
-
try {
|
|
43
|
-
return await restFn();
|
|
44
|
-
}
|
|
45
|
-
catch (primary) {
|
|
46
|
-
if (!this.sdk)
|
|
47
|
-
throw primary;
|
|
48
|
-
return fallbackFn();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// --- Read (2) ---
|
|
52
|
-
async getStrategies(walletAddress) {
|
|
53
|
-
return this.restRead("get_strategies", { wallet_address: walletAddress });
|
|
54
|
-
}
|
|
55
|
-
async getStrategy(strategyId) {
|
|
56
|
-
return this.restRead("get_strategy", { strategy_id: strategyId });
|
|
57
|
-
}
|
|
58
|
-
// --- Create (5) ---
|
|
59
|
-
async prepareLimitOrder(body) {
|
|
60
|
-
return this.restPrepare("create_limit_order", body, "Carbon limit order");
|
|
61
|
-
}
|
|
62
|
-
async prepareRangeOrder(body) {
|
|
63
|
-
return this.restPrepare("create_range_order", body, "Carbon range order");
|
|
64
|
-
}
|
|
65
|
-
async prepareRecurringStrategy(body) {
|
|
66
|
-
return this.restPrepare("create_recurring_strategy", body, "Carbon recurring strategy");
|
|
67
|
-
}
|
|
68
|
-
async prepareConcentratedStrategy(body) {
|
|
69
|
-
return this.restPrepare("create_concentrated_strategy", body, "Carbon concentrated strategy");
|
|
70
|
-
}
|
|
71
|
-
async prepareFullRangeStrategy(body) {
|
|
72
|
-
return this.restPrepare("create_full_range_strategy", body, "Carbon full-range strategy");
|
|
73
|
-
}
|
|
74
|
-
// --- Manage (7) ---
|
|
75
|
-
async prepareRepriceStrategy(body) {
|
|
76
|
-
return this.restPrepare("reprice_strategy", body, "Carbon reprice strategy");
|
|
77
|
-
}
|
|
78
|
-
async prepareEditStrategy(body) {
|
|
79
|
-
return this.restPrepare("edit_strategy", body, "Carbon edit strategy");
|
|
80
|
-
}
|
|
81
|
-
async prepareDepositBudget(body) {
|
|
82
|
-
return this.restPrepare("deposit_budget", body, "Carbon deposit budget");
|
|
83
|
-
}
|
|
84
|
-
async prepareWithdrawBudget(body) {
|
|
85
|
-
return this.restPrepare("withdraw_budget", body, "Carbon withdraw budget");
|
|
86
|
-
}
|
|
87
|
-
async preparePauseStrategy(body) {
|
|
88
|
-
return this.restPrepare("pause_strategy", body, "Carbon pause strategy");
|
|
89
|
-
}
|
|
90
|
-
async prepareResumeStrategy(body) {
|
|
91
|
-
return this.restPrepare("resume_strategy", body, "Carbon resume strategy");
|
|
92
|
-
}
|
|
93
|
-
async prepareDeleteStrategy(body) {
|
|
94
|
-
return this.restPrepare("delete_strategy", body, "Carbon delete strategy");
|
|
95
|
-
}
|
|
96
|
-
// --- Trade (2) ---
|
|
97
|
-
async getTradeQuote(body) {
|
|
98
|
-
const amount = typeof body.amount === "string" ? Number(body.amount) : body.amount;
|
|
99
|
-
const normalized = normalizeCarbonWriteBody(this.tokenService, {
|
|
100
|
-
...body,
|
|
101
|
-
amount,
|
|
102
|
-
...(body.is_trade_by_target !== undefined
|
|
103
|
-
? { by_target: body.is_trade_by_target }
|
|
104
|
-
: {}),
|
|
105
|
-
});
|
|
106
|
-
return this.withSdkFallback(() => this.restRead("get_trade_quote", normalized), async () => {
|
|
107
|
-
if (!this.sdk)
|
|
108
|
-
throw new Error("Carbon SDK fallback unavailable");
|
|
109
|
-
const sourceToken = resolveCarbonTokenAddress(this.tokenService, String(normalized.source_token ?? normalized.token_in));
|
|
110
|
-
const targetToken = resolveCarbonTokenAddress(this.tokenService, String(normalized.target_token ?? normalized.token_out));
|
|
111
|
-
const amountStr = String(amount);
|
|
112
|
-
const isTradeByTarget = Boolean(body.is_trade_by_target ?? body.by_target);
|
|
113
|
-
const { tradeData } = await this.sdk.getTradeQuoteFallback(sourceToken, targetToken, amountStr, isTradeByTarget);
|
|
114
|
-
return {
|
|
115
|
-
status: "ok",
|
|
116
|
-
warnings: [],
|
|
117
|
-
source: "sdk_fallback",
|
|
118
|
-
...tradeData,
|
|
119
|
-
};
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
async prepareTrade(body) {
|
|
123
|
-
const normalized = normalizeCarbonWriteBody(this.tokenService, body);
|
|
124
|
-
try {
|
|
125
|
-
return await this.restPrepare("execute_trade", normalized, "Carbon taker swap");
|
|
126
|
-
}
|
|
127
|
-
catch (primary) {
|
|
128
|
-
if (!this.sdk)
|
|
129
|
-
throw primary;
|
|
130
|
-
const sourceToken = resolveCarbonTokenAddress(this.tokenService, String(normalized.source_token ?? normalized.token_in));
|
|
131
|
-
const targetToken = resolveCarbonTokenAddress(this.tokenService, String(normalized.target_token ?? normalized.token_out));
|
|
132
|
-
const amount = String(normalized.amount);
|
|
133
|
-
const minReturn = String(normalized.min_return ?? "0");
|
|
134
|
-
const preparedFlow = await this.sdk.prepareTradeFallback(walletAddress(normalized.wallet_address), sourceToken, targetToken, amount, false, minReturn);
|
|
135
|
-
return {
|
|
136
|
-
status: "ok",
|
|
137
|
-
warnings: [],
|
|
138
|
-
preparedFlow,
|
|
139
|
-
source: "sdk_fallback",
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
// --- Explore (8) ---
|
|
144
|
-
async explorePair(body) {
|
|
145
|
-
return this.restRead("explore_pair", body);
|
|
146
|
-
}
|
|
147
|
-
async resolveToken(symbolOrName) {
|
|
148
|
-
try {
|
|
149
|
-
return await this.restRead("resolve_token", {
|
|
150
|
-
token: symbolOrName,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
const resolved = this.tokenService.resolveToken(symbolOrName);
|
|
155
|
-
const address = resolved.address === "native" ? MENTO_CELO_ADDRESS : resolved.address;
|
|
156
|
-
return {
|
|
157
|
-
status: "ok",
|
|
158
|
-
warnings: [],
|
|
159
|
-
symbol: resolved.symbol,
|
|
160
|
-
address,
|
|
161
|
-
decimals: resolved.decimals,
|
|
162
|
-
source: "celina_registry",
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
async getActivity(body) {
|
|
167
|
-
return this.restRead("get_activity", body);
|
|
168
|
-
}
|
|
169
|
-
async findOpportunities(body) {
|
|
170
|
-
return this.restRead("find_opportunities", body);
|
|
171
|
-
}
|
|
172
|
-
async getProtocolStats(body = {}) {
|
|
173
|
-
const { period_days, ...rest } = body;
|
|
174
|
-
return this.restRead("get_protocol_stats", {
|
|
175
|
-
...rest,
|
|
176
|
-
...(period_days !== undefined ? { days: period_days } : {}),
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
async getPriceHistory(body) {
|
|
180
|
-
const { period_days, days, ...rest } = body;
|
|
181
|
-
const lookback = days ?? period_days;
|
|
182
|
-
return this.restRead("get_price_history", {
|
|
183
|
-
...rest,
|
|
184
|
-
...(lookback !== undefined ? { days: lookback } : {}),
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
async simulateStrategy(body) {
|
|
188
|
-
const { days, ...rest } = body;
|
|
189
|
-
if (rest.start === undefined && rest.end === undefined && days !== undefined) {
|
|
190
|
-
const end = Math.floor(Date.now() / 1000);
|
|
191
|
-
const start = end - Number(days) * 86_400;
|
|
192
|
-
return this.restRead("simulate_strategy", { ...rest, start, end });
|
|
193
|
-
}
|
|
194
|
-
return this.restRead("simulate_strategy", body);
|
|
195
|
-
}
|
|
196
|
-
// --- Help (2) ---
|
|
197
|
-
async help(topic) {
|
|
198
|
-
return this.restRead("help", topic ? { topic } : {});
|
|
199
|
-
}
|
|
200
|
-
async learn(topic) {
|
|
201
|
-
return this.restRead("learn", topic ? { topic } : {});
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=carbon.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"carbon.service.js","sourceRoot":"","sources":["../../src/services/carbon.service.ts"],"names":[],"mappings":"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"}
|