@andrewkimjoseph/celina-sdk 0.4.6 → 0.4.8

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 CHANGED
@@ -1,9 +1,21 @@
1
1
  # Celina SDK
2
2
 
3
- Celina-linked mainnet library for frontend apps: **reads** and **unsigned transaction preparation** (no private keys).
3
+ **`@andrewkimjoseph/celina-sdk@0.4.7`** — Celo mainnet library for frontend apps and agents: **reads** and **unsigned transaction preparation** (no private keys).
4
4
 
5
5
  Pair with [wagmi](https://wagmi.sh) / viem — users sign prepared transactions in their wallet.
6
6
 
7
+ ## Stack
8
+
9
+ Celina is layered from chain logic through agent tooling:
10
+
11
+ | Layer | Package | Role |
12
+ |-------|---------|------|
13
+ | **SDK** | `@andrewkimjoseph/celina-sdk` | Reads, gas estimates, `prepare*` flows, Carbon REST + SDK hybrid |
14
+ | **MCP** | `@andrewkimjoseph/celina-mcp` | MCP tools for Cursor / Claude / LM Studio — stdio writes or hosted reads + Carbon prepare |
15
+ | **MCP host** | `celina-mcp-host` | Vercel Streamable HTTP — hosted reads + Carbon prepare (71 tools); no server-key writes or `execute_carbon_*` |
16
+
17
+ This repo is the **SDK**. Downstream packages depend on published npm semver (no local `file:` links in production).
18
+
7
19
  ## Install
8
20
 
9
21
  ```bash
@@ -17,12 +29,13 @@ Requires Node.js ≥ 20.
17
29
  **Full docs:** [celina-sdk on GitBook](https://andrewkimjoseph.gitbook.io/celina-sdk)
18
30
 
19
31
  - [Quick start](https://andrewkimjoseph.gitbook.io/celina-sdk/getting-started/quick-start)
32
+ - [Architecture](docs/concepts/architecture.md) — client composition and stack
33
+ - [Prepared flows](docs/concepts/prepared-flows.md) — `SerializedPreparedFlow`, CELINA calldata tag
20
34
  - [wagmi integration](https://andrewkimjoseph.gitbook.io/celina-sdk/guides/wagmi-integration)
21
- - [Aave](https://andrewkimjoseph.gitbook.io/celina-sdk/guides/aave)
22
- - [GoodDollar UBI](docs/guides/gooddollar.md) — whitelist, daily entitlement, `prepareClaimUbi` on Celo
23
- - [Carbon DeFi on Celo](docs/guides/carbon.md) — hybrid Carbon REST + `@bancor/carbon-sdk` (25 operations)
24
- - [Self Agent ID](docs/guides/self-agent-id.md) — verify, register, and refresh human-backed agents on Celo
25
- - [Telemetry](docs/guides/telemetry.md) — optional Amplitude read metrics (opt out with `CELINA_ANALYTICS_DISABLED=1`)
35
+ - [Carbon DeFi on Celo](docs/guides/carbon.md) — hybrid REST + `@bancor/carbon-sdk` (25 operations)
36
+ - [GoodDollar UBI](docs/guides/gooddollar.md) — whitelist, daily entitlement, `prepareClaimUbi`
37
+ - [Self Agent ID](docs/guides/self-agent-id.md) — verify, register, refresh human-backed agents
38
+ - [Telemetry](docs/guides/telemetry.md) — optional Amplitude read metrics (`CELINA_ANALYTICS_DISABLED=1`)
26
39
  - [API reference](https://andrewkimjoseph.gitbook.io/celina-sdk/api-reference)
27
40
 
28
41
  Docs source lives in [`docs/`](docs/) in this repository.
@@ -37,7 +50,7 @@ const celina = createCelinaClient();
37
50
  await celina.token.getStablecoinBalances("0xYourAddress");
38
51
 
39
52
  const flow = await celina.transaction.prepareSend("0xFrom", "0xTo", "USDm", "10");
40
- // flow.steps → pass to wagmi sendTransaction
53
+ // flow.steps → pass to wagmi sendTransaction (calldata includes CELINA attribution suffix)
41
54
 
42
55
  // Carbon DeFi (reads + unsigned strategy/trade prep)
43
56
  const strategies = await celina.carbon.getStrategies("0xYourAddress");
@@ -49,40 +62,57 @@ const prepared = await celina.carbon.prepareLimitOrder({
49
62
  price: 0.5,
50
63
  budget: 100,
51
64
  });
52
- // prepared.preparedFlow?.steps same signing flow; check prepared.warnings
65
+ // prepared.preparedFlow?.steps controller + approve steps, all tagged
66
+ // prepared.deep_link — Carbon trade UI reference (optional)
67
+ // prepared.warnings — always surface to the user
53
68
 
54
69
  // GoodDollar UBI (reads + unsigned claim)
55
70
  const eligibility = await celina.gooddollar.getUbiClaimEligibility("0xYourAddress");
56
71
  const ubiFlow = await celina.gooddollar.prepareClaimUbi("0xYourAddress");
57
- // ubiFlow.steps → wagmi sendTransaction (G$ to signer, gas in CELO)
58
72
  ```
59
73
 
60
- ## GoodDollar UBI
74
+ ## Prepared flows and calldata tagging
61
75
 
62
- Identity whitelist reads, daily entitlement checks, and unsigned `UBISchemeV2.claim()` preparation on Celo mainnet. One claim per verified identity per day; connected wallets resolve via `getWhitelistedRoot`.
76
+ All `prepare*` methods return a **`SerializedPreparedFlow`**: ordered unsigned steps for the user's wallet.
63
77
 
64
- | Reads (`celina.gooddollar`) | Prepare (unsigned) |
65
- |-----------------------------|-------------------|
66
- | `getWhitelistingInfo`, `getUbiClaimEligibility` | `prepareClaimUbi` |
78
+ Every step with calldata gets a **CELINA attribution suffix** (`appendCelinaCalldataTag`) sends, Mento FX, Uniswap, Aave, GoodDollar, and **Carbon controller transactions** (not just ERC-20 approvals). Pass `step.data` to wagmi unchanged.
67
79
 
68
- MCP tools: `get_gooddollar_whitelisting_info`, `get_gooddollar_ubi_entitlement` (read); `claim_daily_gooddollar_ubi` (stdio write with server key). Full workflow: [GoodDollar guide](docs/guides/gooddollar.md).
80
+ See [Prepared flows](docs/concepts/prepared-flows.md).
69
81
 
70
82
  ## Carbon DeFi
71
83
 
72
- Hybrid **Carbon REST** (`https://mcp.carbondefi.xyz`) plus **`@bancor/carbon-sdk`** fallback for trade quotes and taker swaps when REST is unavailable. All 25 operations target Celo mainnet; no private keys — `prepare*` returns unsigned flows for the user’s wallet.
84
+ Hybrid **Carbon REST** (`https://mcp.carbondefi.xyz`) plus **`@bancor/carbon-sdk`** fallback for trade quotes and taker swaps when REST is unavailable. All 25 operations target Celo mainnet.
73
85
 
74
86
  | Reads (`celina.carbon`) | Prepare (unsigned) |
75
87
  |-------------------------|-------------------|
76
- | `getStrategies`, `getStrategy`, `getTradeQuote`, `explorePair`, `resolveToken`, `getActivity`, `findOpportunities`, `getProtocolStats`, `getPriceHistory`, `simulateStrategy`, `help`, `learn` | `prepareLimitOrder`, `prepareRangeOrder`, `prepareRecurringStrategy`, `prepareConcentratedStrategy`, `prepareFullRangeStrategy`, `prepareRepriceStrategy`, `prepareEditStrategy`, `prepareDepositBudget`, `prepareWithdrawBudget`, `preparePauseStrategy`, `prepareResumeStrategy`, `prepareDeleteStrategy`, `prepareTrade` |
88
+ | `getStrategies`, `getStrategy`, `getTradeQuote`, `explorePair`, `resolveToken`, `getActivity`, `findOpportunities`, `getProtocolStats`, `getPriceHistory`, `simulateStrategy`, `help`, `learn` | 13 `prepare*` methods limit/range/recurring/concentrated/full-range orders, edit/reprice/deposit/withdraw/pause/resume/delete, taker `prepareTrade` |
89
+
90
+ - Token symbols are **normalized to `0x` addresses** before Carbon REST (avoids ENS resolution errors on Celo).
91
+ - **`finalizeCarbonPrepare(carbon, wallet, prepared, orderMeta)`** — merges ERC-20 approve steps via `buildExecutionSteps` into `preparedFlow.steps` (used by MCP `prepare_carbon_*` and browser apps).
92
+ - **`deep_link`** on prepare responses — Carbon REST trade/disposable UI URL (reference only; signing is via your wallet flow).
93
+ - **`carbonActivityDeepLink(wallet)`** — post-execution activity explorer on [celo.carbondefi.xyz](https://celo.carbondefi.xyz).
94
+
95
+ Set `CARBON_API_BASE_URL` to override the REST base. Hosted MCP exposes **12 read + 13 prepare** tools (71 total); `execute_carbon_*` requires local stdio with `CELO_PRIVATE_KEY`.
96
+
97
+ Full workflow: [Carbon DeFi guide](docs/guides/carbon.md).
98
+
99
+ ## GoodDollar UBI
100
+
101
+ Identity whitelist reads, daily entitlement checks, and unsigned `UBISchemeV2.claim()` preparation. One claim per verified identity per day.
102
+
103
+ | Reads | Prepare |
104
+ |-------|---------|
105
+ | `getWhitelistingInfo`, `getUbiClaimEligibility` | `prepareClaimUbi` |
77
106
 
78
- Set `CARBON_API_BASE_URL` to override the REST base. Hosted [celina-mcp](https://mcp.usecelina.xyz/api/mcp) exposes the 12 read tools only; use this SDK or local MCP stdio for all `prepare*` methods.
107
+ MCP: `get_gooddollar_whitelisting_info`, `get_gooddollar_ubi_entitlement` (read); `claim_daily_gooddollar_ubi` (stdio write with server key). Browser apps: `prepareClaimUbi` + wagmi.
79
108
 
80
- Full workflow, MCP tool names, and env vars: [Carbon DeFi guide](docs/guides/carbon.md).
109
+ [GoodDollar guide](docs/guides/gooddollar.md)
81
110
 
82
111
  ## Related packages
83
112
 
84
- - [`@andrewkimjoseph/celina-mcp`](https://www.npmjs.com/package/@andrewkimjoseph/celina-mcp) — MCP server for IDE/CLI agents
85
- - [`@selfxyz/agent-sdk`](https://www.npmjs.com/package/@selfxyz/agent-sdk) — Self Agent ID
113
+ - [`@andrewkimjoseph/celina-mcp`](https://www.npmjs.com/package/@andrewkimjoseph/celina-mcp) `@0.8.4` — MCP server (38 Carbon tools on stdio; hosted: 12 read + 13 prepare)
114
+ - [`celina-mcp-host`](../celina-mcp-host/) — Vercel-hosted MCP endpoint (`https://mcp.usecelina.xyz/api/mcp`) — reads + Carbon prepare
115
+ - [`@selfxyz/agent-sdk`](https://www.npmjs.com/package/@selfxyz/agent-sdk) — Self Agent ID browser flows
86
116
 
87
117
  ## License
88
118
 
@@ -4,6 +4,7 @@
4
4
  */
5
5
  export const MCP_TOOL_EVENT_BY_SDK_METHOD = {
6
6
  "account.getAccount": "get_account",
7
+ "account.getWalletAddress": "get_wallet_address",
7
8
  "blockchain.getBlock": "get_block",
8
9
  "blockchain.getLatestBlocks": "get_latest_blocks",
9
10
  "blockchain.getNetworkStatus": "get_network_status",
@@ -1 +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"}
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,0BAA0B,EAAE,oBAAoB;IAChD,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"}
package/build/index.d.ts CHANGED
@@ -87,6 +87,7 @@ export type { CarbonWriteBody } from "./services/carbon.service.js";
87
87
  export { CARBON_APP_BASE_URL, CARBON_CHAIN, CELO_CARBON_CONTRACTS, DEFAULT_CARBON_REST_BASE_URL, carbonActivityDeepLink, } from "./config/carbon.js";
88
88
  export { resolveCarbonTokenAddress, normalizeCarbonWriteBody, CARBON_WRITE_TOKEN_FIELDS, } from "./utils/carbon-token.js";
89
89
  export { buildCarbonExecutionSteps } from "./utils/carbon-execution.js";
90
+ export { finalizeCarbonPrepare, type FinalizedCarbonPrepareFlow, } from "./utils/finalize-carbon-prepare.js";
90
91
  export { CarbonRestError } from "./clients/carbon-rest.js";
91
92
  export { SelfService, type VerifySelfAgentParams, type VerifySelfRequestParams, type RegisterSelfAgentParams, } from "./services/self.service.js";
92
93
  export { SelfApiError, SelfExpiredSessionError, } from "./clients/self-api.js";
package/build/index.js CHANGED
@@ -60,6 +60,7 @@ export { GOODDOLLAR_IDENTITY_ADDRESS, GOODDOLLAR_UBI_SCHEME_ADDRESS, } from "./c
60
60
  export { CARBON_APP_BASE_URL, CARBON_CHAIN, CELO_CARBON_CONTRACTS, DEFAULT_CARBON_REST_BASE_URL, carbonActivityDeepLink, } from "./config/carbon.js";
61
61
  export { resolveCarbonTokenAddress, normalizeCarbonWriteBody, CARBON_WRITE_TOKEN_FIELDS, } from "./utils/carbon-token.js";
62
62
  export { buildCarbonExecutionSteps } from "./utils/carbon-execution.js";
63
+ export { finalizeCarbonPrepare, } from "./utils/finalize-carbon-prepare.js";
63
64
  export { CarbonRestError } from "./clients/carbon-rest.js";
64
65
  export { SelfService, } from "./services/self.service.js";
65
66
  export { SelfApiError, SelfExpiredSessionError, } from "./clients/self-api.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAuCtE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAmB,GAAW,EAAE,OAAU,EAAE,EAAE,CACzD,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhD,OAAO;QACL,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3D,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;QAClD,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACpE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAClD,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,cAAc,CAAC,aAAa,CAAC,CAAC;QAC3D,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,aAAa,CAAC,CAAC;QAC/C,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAC9E,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAYD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAa5D,6DAA6D;AAC7D,OAAO,EACL,SAAS,EACT,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,WAAW,GAIZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,GAE9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { CarbonService } from "../services/carbon.service.js";
2
+ import type { CarbonPrepareResult } from "../types/carbon.js";
3
+ import type { SerializedPreparedFlow } from "../types/prepared.js";
4
+ export type FinalizedCarbonPrepareFlow = SerializedPreparedFlow & {
5
+ deep_link?: string;
6
+ warnings?: string[];
7
+ strategyPreview?: unknown;
8
+ };
9
+ /** Merge Carbon REST prepare + ERC-20 approve steps for external wallet signing. */
10
+ export declare function finalizeCarbonPrepare(carbon: Pick<CarbonService, "buildExecutionSteps">, from: `0x${string}`, prepared: CarbonPrepareResult, orderMeta: Record<string, unknown>): Promise<FinalizedCarbonPrepareFlow>;
@@ -0,0 +1,17 @@
1
+ /** Merge Carbon REST prepare + ERC-20 approve steps for external wallet signing. */
2
+ export async function finalizeCarbonPrepare(carbon, from, prepared, orderMeta) {
3
+ const steps = await carbon.buildExecutionSteps(from, prepared, orderMeta);
4
+ if (!prepared.preparedFlow) {
5
+ throw new Error("Carbon prepare returned no transaction steps.");
6
+ }
7
+ return {
8
+ ...prepared.preparedFlow,
9
+ steps,
10
+ ...(prepared.deep_link ? { deep_link: String(prepared.deep_link) } : {}),
11
+ ...(prepared.warnings?.length ? { warnings: prepared.warnings } : {}),
12
+ ...(prepared.strategyPreview !== undefined
13
+ ? { strategyPreview: prepared.strategyPreview }
14
+ : {}),
15
+ };
16
+ }
17
+ //# sourceMappingURL=finalize-carbon-prepare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalize-carbon-prepare.js","sourceRoot":"","sources":["../../src/utils/finalize-carbon-prepare.ts"],"names":[],"mappings":"AAUA,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAkD,EAClD,IAAmB,EACnB,QAA6B,EAC7B,SAAkC;IAElC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,GAAG,QAAQ,CAAC,YAAY;QACxB,KAAK;QACL,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,eAAe,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@andrewkimjoseph/celina-sdk",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "description": "Celina SDK — Celo mainnet reads and unsigned transaction preparation for frontend apps.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -88,4 +88,22 @@ export const blockchainOperations: OperationSpec[] = [
88
88
  assertHasKeys(result, ["address", "balanceWei"]);
89
89
  },
90
90
  },
91
+ {
92
+ id: "account.getWalletAddress",
93
+ domain: "blockchain",
94
+ layer: "read",
95
+ requiresEnv: ["CELO_PRIVATE_KEY"],
96
+ mcp: {
97
+ tool: "get_wallet_address",
98
+ arguments: () => ({}),
99
+ },
100
+ assert: (result, fx) => {
101
+ const obj = assertHasKeys(result, ["wallet_address", "has_wallet", "source"]);
102
+ expect(obj.has_wallet).toBe(true);
103
+ expect(String(obj.wallet_address).toLowerCase()).toBe(
104
+ fx.wallet.toLowerCase(),
105
+ );
106
+ expect(obj.source).toBe("CELO_PRIVATE_KEY");
107
+ },
108
+ },
91
109
  ];
@@ -40,6 +40,23 @@ function carbonPrepare(
40
40
  };
41
41
  }
42
42
 
43
+ function carbonExecute(
44
+ id: string,
45
+ tool: string,
46
+ args: () => Record<string, unknown>,
47
+ ): OperationSpec {
48
+ return {
49
+ id,
50
+ domain: "carbon",
51
+ layer: "write",
52
+ requiresEnv: ["CELO_PRIVATE_KEY"],
53
+ requiresWrites: true,
54
+ mcp: { tool, arguments: args },
55
+ assert: (result) => assertHasKeys(result, ["hash", "from"]),
56
+ skip: () => "Set CELINA_TEST_WRITES=1 to run on-chain Carbon execute tests",
57
+ };
58
+ }
59
+
43
60
  export const carbonOperations: OperationSpec[] = [
44
61
  carbonRead(
45
62
  "carbon.getStrategies",
@@ -406,4 +423,125 @@ export const carbonOperations: OperationSpec[] = [
406
423
  min_return: "0",
407
424
  }),
408
425
  ),
426
+ carbonExecute(
427
+ "carbon.executeLimitOrder",
428
+ "execute_carbon_limit_order",
429
+ () => ({
430
+ base_token: CELO,
431
+ quote_token: USDC,
432
+ direction: "buy",
433
+ price: 0.5,
434
+ budget: 1,
435
+ }),
436
+ ),
437
+ carbonExecute(
438
+ "carbon.executeRangeOrder",
439
+ "execute_carbon_range_order",
440
+ () => ({
441
+ base_token: CELO,
442
+ quote_token: USDC,
443
+ direction: "buy",
444
+ price: 0.5,
445
+ budget: 1,
446
+ }),
447
+ ),
448
+ carbonExecute(
449
+ "carbon.executeRecurringStrategy",
450
+ "execute_carbon_recurring_strategy",
451
+ () => ({
452
+ base_token: CELO,
453
+ quote_token: USDC,
454
+ direction: "buy",
455
+ price: 0.5,
456
+ budget: 1,
457
+ }),
458
+ ),
459
+ carbonExecute(
460
+ "carbon.executeConcentratedStrategy",
461
+ "execute_carbon_concentrated_strategy",
462
+ () => ({
463
+ base_token: CELO,
464
+ quote_token: USDC,
465
+ budget: 1,
466
+ }),
467
+ ),
468
+ carbonExecute(
469
+ "carbon.executeFullRangeStrategy",
470
+ "execute_carbon_full_range_strategy",
471
+ () => ({
472
+ base_token: CELO,
473
+ quote_token: USDC,
474
+ budget: 1,
475
+ }),
476
+ ),
477
+ carbonExecute(
478
+ "carbon.executeRepriceStrategy",
479
+ "execute_carbon_reprice_strategy",
480
+ () => ({
481
+ wallet_address: CARBON_WALLET,
482
+ strategy_id: "1",
483
+ price: 0.5,
484
+ }),
485
+ ),
486
+ carbonExecute(
487
+ "carbon.executeEditStrategy",
488
+ "execute_carbon_edit_strategy",
489
+ () => ({
490
+ wallet_address: CARBON_WALLET,
491
+ strategy_id: "1",
492
+ price: 0.5,
493
+ }),
494
+ ),
495
+ carbonExecute(
496
+ "carbon.executeDepositBudget",
497
+ "execute_carbon_deposit_budget",
498
+ () => ({
499
+ wallet_address: CARBON_WALLET,
500
+ strategy_id: "1",
501
+ budget: 1,
502
+ }),
503
+ ),
504
+ carbonExecute(
505
+ "carbon.executeWithdrawBudget",
506
+ "execute_carbon_withdraw_budget",
507
+ () => ({
508
+ wallet_address: CARBON_WALLET,
509
+ strategy_id: "1",
510
+ budget: 1,
511
+ }),
512
+ ),
513
+ carbonExecute(
514
+ "carbon.executePauseStrategy",
515
+ "execute_carbon_pause_strategy",
516
+ () => ({
517
+ wallet_address: CARBON_WALLET,
518
+ strategy_id: "1",
519
+ }),
520
+ ),
521
+ carbonExecute(
522
+ "carbon.executeResumeStrategy",
523
+ "execute_carbon_resume_strategy",
524
+ () => ({
525
+ wallet_address: CARBON_WALLET,
526
+ strategy_id: "1",
527
+ }),
528
+ ),
529
+ carbonExecute(
530
+ "carbon.executeDeleteStrategy",
531
+ "execute_carbon_delete_strategy",
532
+ () => ({
533
+ wallet_address: CARBON_WALLET,
534
+ strategy_id: "1",
535
+ }),
536
+ ),
537
+ carbonExecute(
538
+ "carbon.executeTrade",
539
+ "execute_carbon_trade",
540
+ () => ({
541
+ source_token: CELO,
542
+ target_token: USDC,
543
+ amount: "1",
544
+ min_return: "0",
545
+ }),
546
+ ),
409
547
  ];