@andrewkimjoseph/celina-sdk 0.2.12 → 0.4.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 (78) hide show
  1. package/README.md +27 -0
  2. package/build/abis/gooddollar-identity.d.ts +12 -0
  3. package/build/abis/gooddollar-identity.js +7 -0
  4. package/build/abis/gooddollar-identity.js.map +1 -1
  5. package/build/abis/self-registry.d.ts +194 -0
  6. package/build/abis/self-registry.js +120 -0
  7. package/build/abis/self-registry.js.map +1 -0
  8. package/build/abis/ubi-scheme.d.ts +79 -0
  9. package/build/abis/ubi-scheme.js +59 -0
  10. package/build/abis/ubi-scheme.js.map +1 -0
  11. package/build/analytics/amplitude.d.ts +5 -0
  12. package/build/analytics/amplitude.js +56 -0
  13. package/build/analytics/amplitude.js.map +1 -0
  14. package/build/analytics/config.d.ts +7 -0
  15. package/build/analytics/config.js +30 -0
  16. package/build/analytics/config.js.map +1 -0
  17. package/build/analytics/mcp-tool-events.d.ts +5 -0
  18. package/build/analytics/mcp-tool-events.js +56 -0
  19. package/build/analytics/mcp-tool-events.js.map +1 -0
  20. package/build/analytics/wrap-service.d.ts +5 -0
  21. package/build/analytics/wrap-service.js +36 -0
  22. package/build/analytics/wrap-service.js.map +1 -0
  23. package/build/clients/carbon-rest.d.ts +17 -0
  24. package/build/clients/carbon-rest.js +59 -0
  25. package/build/clients/carbon-rest.js.map +1 -0
  26. package/build/clients/carbon-sdk.d.ts +31 -0
  27. package/build/clients/carbon-sdk.js +48 -0
  28. package/build/clients/carbon-sdk.js.map +1 -0
  29. package/build/clients/self-api.d.ts +82 -0
  30. package/build/clients/self-api.js +242 -0
  31. package/build/clients/self-api.js.map +1 -0
  32. package/build/config/carbon.d.ts +12 -0
  33. package/build/config/carbon.js +13 -0
  34. package/build/config/carbon.js.map +1 -0
  35. package/build/config/gooddollar.d.ts +2 -0
  36. package/build/config/gooddollar.js +2 -0
  37. package/build/config/gooddollar.js.map +1 -1
  38. package/build/config/sdk-config.d.ts +14 -0
  39. package/build/config/sdk-config.js +16 -0
  40. package/build/config/sdk-config.js.map +1 -1
  41. package/build/config/self.d.ts +22 -0
  42. package/build/config/self.js +27 -0
  43. package/build/config/self.js.map +1 -0
  44. package/build/index.d.ts +18 -1
  45. package/build/index.js +28 -13
  46. package/build/index.js.map +1 -1
  47. package/build/services/carbon.service.d.ts +68 -0
  48. package/build/services/carbon.service.js +189 -0
  49. package/build/services/carbon.service.js.map +1 -0
  50. package/build/services/gooddollar.service.d.ts +41 -3
  51. package/build/services/gooddollar.service.js +164 -1
  52. package/build/services/gooddollar.service.js.map +1 -1
  53. package/build/services/self-session-store.d.ts +19 -0
  54. package/build/services/self-session-store.js +28 -0
  55. package/build/services/self-session-store.js.map +1 -0
  56. package/build/services/self.service.d.ts +241 -0
  57. package/build/services/self.service.js +692 -0
  58. package/build/services/self.service.js.map +1 -0
  59. package/build/types/carbon.d.ts +31 -0
  60. package/build/types/carbon.js +2 -0
  61. package/build/types/carbon.js.map +1 -0
  62. package/build/utils/carbon-prepared-flow.d.ts +11 -0
  63. package/build/utils/carbon-prepared-flow.js +25 -0
  64. package/build/utils/carbon-prepared-flow.js.map +1 -0
  65. package/build/utils/carbon-rest-adapter.d.ts +8 -0
  66. package/build/utils/carbon-rest-adapter.js +72 -0
  67. package/build/utils/carbon-rest-adapter.js.map +1 -0
  68. package/build/utils/self-format.d.ts +28 -0
  69. package/build/utils/self-format.js +79 -0
  70. package/build/utils/self-format.js.map +1 -0
  71. package/build/utils/self-signing.d.ts +4 -0
  72. package/build/utils/self-signing.js +38 -0
  73. package/build/utils/self-signing.js.map +1 -0
  74. package/package.json +7 -2
  75. package/tests/catalog/domains/carbon.ts +409 -0
  76. package/tests/catalog/domains/defi.ts +43 -0
  77. package/tests/catalog/domains/self.ts +63 -4
  78. package/tests/catalog/operations.ts +2 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Generated by scripts/generate-mcp-analytics-map.mjs — do not edit by hand.
3
+ * Maps SDK method keys (catalog OperationSpec.id) to MCP tool event names.
4
+ */
5
+ export const MCP_TOOL_EVENT_BY_SDK_METHOD = {
6
+ "account.getAccount": "get_account",
7
+ "blockchain.getBlock": "get_block",
8
+ "blockchain.getLatestBlocks": "get_latest_blocks",
9
+ "blockchain.getNetworkStatus": "get_network_status",
10
+ "blockchain.getTransaction": "get_transaction",
11
+ "carbon.explorePair": "explore_carbon_pair",
12
+ "carbon.findOpportunities": "find_carbon_opportunities",
13
+ "carbon.getActivity": "get_carbon_activity",
14
+ "carbon.getPriceHistory": "get_carbon_price_history",
15
+ "carbon.getProtocolStats": "get_carbon_protocol_stats",
16
+ "carbon.getStrategies": "get_carbon_strategies",
17
+ "carbon.getStrategy": "get_carbon_strategy",
18
+ "carbon.getTradeQuote": "get_carbon_trade_quote",
19
+ "carbon.help": "carbon_help",
20
+ "carbon.learn": "carbon_learn",
21
+ "carbon.resolveToken": "resolve_carbon_token",
22
+ "carbon.simulateStrategy": "simulate_carbon_strategy",
23
+ "contract.callFunction": "call_contract_function",
24
+ "contract.estimateGas": "estimate_contract_gas",
25
+ "ens.resolveEns": "resolve_ens",
26
+ "gooddollar.getUbiClaimEligibility": "get_gooddollar_ubi_entitlement",
27
+ "gooddollar.getWhitelistingInfo": "get_gooddollar_whitelisting_info",
28
+ "governance.getGovernanceProposals": "get_governance_proposals",
29
+ "governance.getProposalDetails": "get_proposal_details",
30
+ "mentoFx.estimateFx": "estimate_mento_fx",
31
+ "mentoFx.getFxQuote": "get_mento_fx_quote",
32
+ "nft.getNftBalance": "get_nft_balance",
33
+ "nft.getNftInfo": "get_nft_info",
34
+ "self.authenticatedSelfFetch": "authenticated_self_fetch",
35
+ "self.checkSelfRegistration": "check_self_registration",
36
+ "self.getSelfIdentity": "get_self_identity",
37
+ "self.lookupSelfAgent": "lookup_self_agent",
38
+ "self.signSelfRequest": "sign_self_request",
39
+ "self.verifySelfAgent": "verify_self_agent",
40
+ "self.verifySelfRequest": "verify_self_request",
41
+ "staking.getActivatableStakes": "get_activatable_stakes",
42
+ "staking.getStakingBalances": "get_staking_balances",
43
+ "staking.getTotalStakingInfo": "get_total_staking_info",
44
+ "staking.getValidatorGroupDetails": "get_validator_group_details",
45
+ "staking.getValidatorGroups": "get_validator_groups",
46
+ "token.getBalances": "get_celo_balances",
47
+ "token.getStablecoinBalances": "get_stablecoin_balances",
48
+ "token.getTokenBalance": "get_token_balance",
49
+ "token.getTokenInfo": "get_token_info",
50
+ "transaction.estimateSend": "estimate_send",
51
+ "transaction.estimateTransaction": "estimate_transaction",
52
+ "transaction.getGasFeeData": "get_gas_fee_data",
53
+ "uniswap.estimateSwap": "estimate_uniswap_swap",
54
+ "uniswap.getSwapQuote": "get_uniswap_quote",
55
+ };
56
+ //# sourceMappingURL=mcp-tool-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool-events.js","sourceRoot":"","sources":["../../src/analytics/mcp-tool-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAqC;IAC5E,oBAAoB,EAAE,aAAa;IACnC,qBAAqB,EAAE,WAAW;IAClC,4BAA4B,EAAE,mBAAmB;IACjD,6BAA6B,EAAE,oBAAoB;IACnD,2BAA2B,EAAE,iBAAiB;IAC9C,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;IACvD,oBAAoB,EAAE,qBAAqB;IAC3C,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,oBAAoB,EAAE,qBAAqB;IAC3C,sBAAsB,EAAE,wBAAwB;IAChD,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,cAAc;IAC9B,qBAAqB,EAAE,sBAAsB;IAC7C,yBAAyB,EAAE,0BAA0B;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,sBAAsB,EAAE,uBAAuB;IAC/C,gBAAgB,EAAE,aAAa;IAC/B,mCAAmC,EAAE,gCAAgC;IACrE,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,0BAA0B;IAC/D,+BAA+B,EAAE,sBAAsB;IACvD,oBAAoB,EAAE,mBAAmB;IACzC,oBAAoB,EAAE,oBAAoB;IAC1C,mBAAmB,EAAE,iBAAiB;IACtC,gBAAgB,EAAE,cAAc;IAChC,6BAA6B,EAAE,0BAA0B;IACzD,4BAA4B,EAAE,yBAAyB;IACvD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,wBAAwB;IACxD,4BAA4B,EAAE,sBAAsB;IACpD,6BAA6B,EAAE,wBAAwB;IACvD,kCAAkC,EAAE,6BAA6B;IACjE,4BAA4B,EAAE,sBAAsB;IACpD,mBAAmB,EAAE,mBAAmB;IACxC,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,mBAAmB;IAC5C,oBAAoB,EAAE,gBAAgB;IACtC,0BAA0B,EAAE,eAAe;IAC3C,iCAAiC,EAAE,sBAAsB;IACzD,2BAA2B,EAAE,kBAAkB;IAC/C,sBAAsB,EAAE,uBAAuB;IAC/C,sBAAsB,EAAE,mBAAmB;CACnC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SdkConfig } from "../config/sdk-config.js";
2
+ /**
3
+ * Wrap a domain service so catalog-mapped async reads emit Amplitude events (MCP tool names).
4
+ */
5
+ export declare function wrapServiceForAnalytics<T extends object>(serviceKey: string, service: T, config: SdkConfig): T;
@@ -0,0 +1,36 @@
1
+ import { trackMcpTool } from "./amplitude.js";
2
+ import { isAnalyticsEnabled } from "./config.js";
3
+ import { MCP_TOOL_EVENT_BY_SDK_METHOD } from "./mcp-tool-events.js";
4
+ /**
5
+ * Wrap a domain service so catalog-mapped async reads emit Amplitude events (MCP tool names).
6
+ */
7
+ export function wrapServiceForAnalytics(serviceKey, service, config) {
8
+ if (!isAnalyticsEnabled(config)) {
9
+ return service;
10
+ }
11
+ return new Proxy(service, {
12
+ get(target, prop, receiver) {
13
+ const value = Reflect.get(target, prop, receiver);
14
+ if (typeof prop !== "string" || typeof value !== "function") {
15
+ return value;
16
+ }
17
+ const eventName = MCP_TOOL_EVENT_BY_SDK_METHOD[`${serviceKey}.${prop}`];
18
+ if (!eventName) {
19
+ return value.bind(target);
20
+ }
21
+ const fn = value;
22
+ return (...args) => {
23
+ const result = fn.apply(target, args);
24
+ if (result !== null && typeof result === "object" && "then" in result) {
25
+ return result.then((resolved) => {
26
+ trackMcpTool(eventName, config);
27
+ return resolved;
28
+ });
29
+ }
30
+ trackMcpTool(eventName, config);
31
+ return result;
32
+ };
33
+ },
34
+ });
35
+ }
36
+ //# sourceMappingURL=wrap-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-service.js","sourceRoot":"","sources":["../../src/analytics/wrap-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,OAAU,EACV,MAAiB;IAEjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,SAAS,GAAG,4BAA4B,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAED,MAAM,EAAE,GAAG,KAAwC,CAAC;YACpD,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;oBACtE,OAAQ,MAA2B,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;wBACpD,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;wBAChC,OAAO,QAAQ,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CarbonRestSuccess } from "../types/carbon.js";
2
+ export declare class CarbonRestError extends Error {
3
+ readonly toolName: string;
4
+ readonly statusCode?: number | undefined;
5
+ constructor(message: string, toolName: string, statusCode?: number | undefined);
6
+ }
7
+ export type CarbonRestBody = Record<string, unknown>;
8
+ export declare class CarbonRestClient {
9
+ private readonly baseUrl;
10
+ private readonly timeoutMs;
11
+ constructor(baseUrl?: string, timeoutMs?: number);
12
+ private url;
13
+ /**
14
+ * POST to Carbon MCP REST. Always injects `chain: celo` unless caller overrides.
15
+ */
16
+ postTool<T extends CarbonRestSuccess = CarbonRestSuccess>(toolName: string, body?: CarbonRestBody): Promise<T>;
17
+ }
@@ -0,0 +1,59 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,31 @@
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 {};
@@ -0,0 +1,48 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbon-sdk.js","sourceRoot":"","sources":["../../src/clients/carbon-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { type SelfRegistrationMode } from "../config/self.js";
2
+ export declare class SelfApiError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare class SelfExpiredSessionError extends Error {
6
+ constructor(message?: string);
7
+ }
8
+ export interface SelfRegistrationDisclosures {
9
+ minimumAge?: number;
10
+ ofac?: boolean;
11
+ }
12
+ export interface SelfRegistrationResult {
13
+ agentId: number;
14
+ agentAddress: string;
15
+ credentials?: unknown;
16
+ txHash?: string;
17
+ }
18
+ export interface SelfRefreshResult {
19
+ proofExpiresAt: Date;
20
+ }
21
+ export interface SelfRegistrationSession {
22
+ sessionToken: string;
23
+ stage: string;
24
+ deepLink: string;
25
+ scanUrl?: string;
26
+ agentAddress: string;
27
+ expiresAt: string;
28
+ timeRemainingMs?: number;
29
+ humanInstructions: string[];
30
+ waitForCompletion(opts?: {
31
+ timeoutMs?: number;
32
+ pollIntervalMs?: number;
33
+ }): Promise<SelfRegistrationResult>;
34
+ exportKey(): Promise<string>;
35
+ }
36
+ export interface SelfRefreshSession {
37
+ sessionToken: string;
38
+ stage: string;
39
+ deepLink: string;
40
+ scanUrl?: string;
41
+ expiresAt: string;
42
+ timeRemainingMs?: number;
43
+ humanInstructions: string[];
44
+ waitForCompletion(opts?: {
45
+ timeoutMs?: number;
46
+ pollIntervalMs?: number;
47
+ }): Promise<SelfRefreshResult>;
48
+ }
49
+ export interface SelfDeregistrationSession {
50
+ sessionToken: string;
51
+ stage: string;
52
+ deepLink: string;
53
+ scanUrl?: string;
54
+ expiresAt: string;
55
+ timeRemainingMs?: number;
56
+ humanInstructions: string[];
57
+ waitForCompletion(opts?: {
58
+ timeoutMs?: number;
59
+ pollIntervalMs?: number;
60
+ }): Promise<void>;
61
+ }
62
+ export declare function requestRegistration(opts: {
63
+ mode?: SelfRegistrationMode;
64
+ disclosures?: SelfRegistrationDisclosures;
65
+ humanAddress?: string;
66
+ agentName?: string;
67
+ agentDescription?: string;
68
+ apiBase?: string;
69
+ }): Promise<SelfRegistrationSession>;
70
+ export declare function requestDeregistration(opts: {
71
+ agentAddress: string;
72
+ disclosures?: SelfRegistrationDisclosures;
73
+ apiBase?: string;
74
+ }): Promise<SelfDeregistrationSession>;
75
+ export declare function requestProofRefresh(opts: {
76
+ agentId: number;
77
+ disclosures?: SelfRegistrationDisclosures;
78
+ apiBase?: string;
79
+ }): Promise<SelfRefreshSession>;
80
+ export declare function getAgentInfo(agentId: number, apiBase?: string): Promise<Record<string, unknown>>;
81
+ export declare function getAgentsForHuman(address: string, apiBase?: string): Promise<Record<string, unknown>>;
82
+ export declare function selfQrUrl(sessionToken: string, apiBase?: string): string;
@@ -0,0 +1,242 @@
1
+ import { SELF_API_BASE, SELF_API_NETWORK, SELF_CHAIN_ID, } from "../config/self.js";
2
+ const DEFAULT_POLL_INTERVAL_MS = 5000;
3
+ const DEFAULT_TIMEOUT_MS = 30 * 60 * 1000;
4
+ export class SelfApiError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "SelfApiError";
8
+ }
9
+ }
10
+ export class SelfExpiredSessionError extends Error {
11
+ constructor(message = "Session expired. Start a new registration flow.") {
12
+ super(message);
13
+ this.name = "SelfExpiredSessionError";
14
+ }
15
+ }
16
+ function resolveApiBase(apiBase) {
17
+ return (apiBase ?? process.env.SELF_AGENT_API_BASE ?? SELF_API_BASE).replace(/\/+$/, "");
18
+ }
19
+ function sleep(ms) {
20
+ return new Promise((resolve) => setTimeout(resolve, ms));
21
+ }
22
+ async function apiFetch(url, init) {
23
+ const res = await fetch(url, init);
24
+ const body = (await res.json());
25
+ if (!res.ok) {
26
+ const errorMsg = typeof body.error === "string" ? body.error : `HTTP ${res.status}`;
27
+ throw new SelfApiError(errorMsg);
28
+ }
29
+ return body;
30
+ }
31
+ function sessionAuthHeaders(sessionToken) {
32
+ return { Authorization: `Bearer ${sessionToken}` };
33
+ }
34
+ async function fetchSessionStatus(apiBase, path, sessionToken) {
35
+ return apiFetch(`${apiBase}${path}?token=${encodeURIComponent(sessionToken)}`, { headers: sessionAuthHeaders(sessionToken) });
36
+ }
37
+ function handleSessionStatusError(error, expiredMessage) {
38
+ if (error instanceof SelfApiError &&
39
+ error.message.toLowerCase().includes("expired")) {
40
+ throw new SelfExpiredSessionError(expiredMessage);
41
+ }
42
+ throw error;
43
+ }
44
+ function optionalScanUrl(data) {
45
+ return typeof data.scanUrl === "string" ? data.scanUrl : undefined;
46
+ }
47
+ function buildRegistrationSession(data, apiBase) {
48
+ let currentToken = String(data.sessionToken);
49
+ return {
50
+ sessionToken: currentToken,
51
+ stage: String(data.stage),
52
+ deepLink: String(data.deepLink),
53
+ scanUrl: optionalScanUrl(data),
54
+ agentAddress: String(data.agentAddress),
55
+ expiresAt: String(data.expiresAt),
56
+ timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
57
+ humanInstructions: Array.isArray(data.humanInstructions)
58
+ ? data.humanInstructions.map(String)
59
+ : [],
60
+ async waitForCompletion(opts) {
61
+ const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
62
+ const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
63
+ const deadline = Date.now() + timeout;
64
+ while (Date.now() < deadline) {
65
+ await sleep(interval);
66
+ let status;
67
+ try {
68
+ status = await fetchSessionStatus(apiBase, "/api/agent/register/status", currentToken);
69
+ }
70
+ catch (error) {
71
+ handleSessionStatusError(error, "Session expired. Start a new registration flow.");
72
+ }
73
+ currentToken = String(status.sessionToken);
74
+ if (status.stage === "completed") {
75
+ return {
76
+ agentId: Number(status.agentId),
77
+ agentAddress: String(status.agentAddress ?? data.agentAddress),
78
+ credentials: status.credentials,
79
+ txHash: typeof status.txHash === "string" ? status.txHash : undefined,
80
+ };
81
+ }
82
+ if (status.stage === "failed") {
83
+ throw new SelfApiError("Registration failed on-chain.");
84
+ }
85
+ if (status.stage === "expired") {
86
+ throw new SelfExpiredSessionError();
87
+ }
88
+ }
89
+ throw new SelfApiError(`Registration did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
90
+ },
91
+ async exportKey() {
92
+ const result = await apiFetch(`${apiBase}/api/agent/register/export`, {
93
+ method: "POST",
94
+ headers: {
95
+ "Content-Type": "application/json",
96
+ ...sessionAuthHeaders(currentToken),
97
+ },
98
+ body: JSON.stringify({ token: currentToken }),
99
+ });
100
+ return result.privateKey;
101
+ },
102
+ };
103
+ }
104
+ function buildRefreshSession(data, apiBase) {
105
+ let currentToken = String(data.sessionToken);
106
+ return {
107
+ sessionToken: currentToken,
108
+ stage: String(data.stage),
109
+ deepLink: String(data.deepLink),
110
+ scanUrl: optionalScanUrl(data),
111
+ expiresAt: String(data.expiresAt),
112
+ timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
113
+ humanInstructions: Array.isArray(data.humanInstructions)
114
+ ? data.humanInstructions.map(String)
115
+ : [],
116
+ async waitForCompletion(opts) {
117
+ const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
118
+ const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
119
+ const deadline = Date.now() + timeout;
120
+ while (Date.now() < deadline) {
121
+ await sleep(interval);
122
+ let status;
123
+ try {
124
+ status = await fetchSessionStatus(apiBase, "/api/agent/refresh/status", currentToken);
125
+ }
126
+ catch (error) {
127
+ handleSessionStatusError(error, "Proof refresh session expired. Call refresh_self_proof to start a new session.");
128
+ }
129
+ currentToken = String(status.sessionToken);
130
+ if (status.stage === "completed") {
131
+ const expiresAtRaw = status.proofExpiresAt;
132
+ const proofExpiresAt = typeof expiresAtRaw === "string" || typeof expiresAtRaw === "number"
133
+ ? new Date(expiresAtRaw)
134
+ : new Date(Date.now() + 365 * 24 * 60 * 60 * 1000);
135
+ return { proofExpiresAt };
136
+ }
137
+ if (status.stage === "failed") {
138
+ throw new SelfApiError("Proof refresh failed on-chain.");
139
+ }
140
+ if (status.stage === "expired") {
141
+ throw new SelfExpiredSessionError("Proof refresh session expired. Call refresh_self_proof to start a new session.");
142
+ }
143
+ }
144
+ throw new SelfApiError(`Proof refresh did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
145
+ },
146
+ };
147
+ }
148
+ function buildDeregistrationSession(data, apiBase) {
149
+ let currentToken = String(data.sessionToken);
150
+ return {
151
+ sessionToken: currentToken,
152
+ stage: String(data.stage),
153
+ deepLink: String(data.deepLink),
154
+ scanUrl: optionalScanUrl(data),
155
+ expiresAt: String(data.expiresAt),
156
+ timeRemainingMs: typeof data.timeRemainingMs === "number" ? data.timeRemainingMs : undefined,
157
+ humanInstructions: Array.isArray(data.humanInstructions)
158
+ ? data.humanInstructions.map(String)
159
+ : [],
160
+ async waitForCompletion(opts) {
161
+ const timeout = opts?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
162
+ const interval = opts?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
163
+ const deadline = Date.now() + timeout;
164
+ while (Date.now() < deadline) {
165
+ await sleep(interval);
166
+ let status;
167
+ try {
168
+ status = await fetchSessionStatus(apiBase, "/api/agent/deregister/status", currentToken);
169
+ }
170
+ catch (error) {
171
+ handleSessionStatusError(error, "Deregistration session expired. Call deregister_self_agent to start a new session.");
172
+ }
173
+ currentToken = String(status.sessionToken);
174
+ if (status.stage === "completed") {
175
+ return;
176
+ }
177
+ if (status.stage === "failed") {
178
+ throw new SelfApiError("Deregistration failed on-chain.");
179
+ }
180
+ if (status.stage === "expired") {
181
+ throw new SelfExpiredSessionError("Deregistration session expired. Call deregister_self_agent to start a new session.");
182
+ }
183
+ }
184
+ throw new SelfApiError(`Deregistration did not complete within ${timeout}ms. Call check_self_registration again to resume polling.`);
185
+ },
186
+ };
187
+ }
188
+ export async function requestRegistration(opts) {
189
+ const base = resolveApiBase(opts.apiBase);
190
+ const payload = {
191
+ mode: opts.mode ?? "wallet-free",
192
+ network: SELF_API_NETWORK,
193
+ disclosures: opts.disclosures,
194
+ humanAddress: opts.humanAddress,
195
+ agentName: opts.agentName,
196
+ agentDescription: opts.agentDescription,
197
+ };
198
+ const data = await apiFetch(`${base}/api/agent/register`, {
199
+ method: "POST",
200
+ headers: { "Content-Type": "application/json" },
201
+ body: JSON.stringify(payload),
202
+ });
203
+ return buildRegistrationSession(data, base);
204
+ }
205
+ export async function requestDeregistration(opts) {
206
+ const base = resolveApiBase(opts.apiBase);
207
+ const data = await apiFetch(`${base}/api/agent/deregister`, {
208
+ method: "POST",
209
+ headers: { "Content-Type": "application/json" },
210
+ body: JSON.stringify({
211
+ network: SELF_API_NETWORK,
212
+ agentAddress: opts.agentAddress,
213
+ disclosures: opts.disclosures,
214
+ }),
215
+ });
216
+ return buildDeregistrationSession(data, base);
217
+ }
218
+ export async function requestProofRefresh(opts) {
219
+ const base = resolveApiBase(opts.apiBase);
220
+ const data = await apiFetch(`${base}/api/agent/refresh`, {
221
+ method: "POST",
222
+ headers: { "Content-Type": "application/json" },
223
+ body: JSON.stringify({
224
+ agentId: opts.agentId,
225
+ network: SELF_API_NETWORK,
226
+ disclosures: opts.disclosures,
227
+ }),
228
+ });
229
+ return buildRefreshSession(data, base);
230
+ }
231
+ export async function getAgentInfo(agentId, apiBase) {
232
+ const base = resolveApiBase(apiBase);
233
+ return apiFetch(`${base}/api/agent/info/${SELF_CHAIN_ID}/${agentId}`);
234
+ }
235
+ export async function getAgentsForHuman(address, apiBase) {
236
+ const base = resolveApiBase(apiBase);
237
+ return apiFetch(`${base}/api/agent/agents/${SELF_CHAIN_ID}/${address}`);
238
+ }
239
+ export function selfQrUrl(sessionToken, apiBase) {
240
+ return `${resolveApiBase(apiBase)}/scan/${sessionToken}`;
241
+ }
242
+ //# sourceMappingURL=self-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-api.js","sourceRoot":"","sources":["../../src/clients/self-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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;
@@ -0,0 +1,13 @@
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
+ //# sourceMappingURL=carbon.js.map