@waiaas/actions 2.6.0-rc.8 → 2.6.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 (62) hide show
  1. package/README.md +51 -3
  2. package/dist/common/async-status-tracker.d.ts +62 -0
  3. package/dist/common/async-status-tracker.d.ts.map +1 -0
  4. package/dist/common/async-status-tracker.js +30 -0
  5. package/dist/common/async-status-tracker.js.map +1 -0
  6. package/dist/index.d.ts +15 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +70 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/providers/jito-staking/config.d.ts +41 -0
  11. package/dist/providers/jito-staking/config.d.ts.map +1 -0
  12. package/dist/providers/jito-staking/config.js +50 -0
  13. package/dist/providers/jito-staking/config.js.map +1 -0
  14. package/dist/providers/jito-staking/epoch-tracker.d.ts +22 -0
  15. package/dist/providers/jito-staking/epoch-tracker.d.ts.map +1 -0
  16. package/dist/providers/jito-staking/epoch-tracker.js +48 -0
  17. package/dist/providers/jito-staking/epoch-tracker.js.map +1 -0
  18. package/dist/providers/jito-staking/index.d.ts +12 -0
  19. package/dist/providers/jito-staking/index.d.ts.map +1 -0
  20. package/dist/providers/jito-staking/index.js +89 -0
  21. package/dist/providers/jito-staking/index.js.map +1 -0
  22. package/dist/providers/jito-staking/jito-stake-pool.d.ts +100 -0
  23. package/dist/providers/jito-staking/jito-stake-pool.d.ts.map +1 -0
  24. package/dist/providers/jito-staking/jito-stake-pool.js +355 -0
  25. package/dist/providers/jito-staking/jito-stake-pool.js.map +1 -0
  26. package/dist/providers/lido-staking/config.d.ts +29 -0
  27. package/dist/providers/lido-staking/config.d.ts.map +1 -0
  28. package/dist/providers/lido-staking/config.js +40 -0
  29. package/dist/providers/lido-staking/config.js.map +1 -0
  30. package/dist/providers/lido-staking/index.d.ts +12 -0
  31. package/dist/providers/lido-staking/index.d.ts.map +1 -0
  32. package/dist/providers/lido-staking/index.js +129 -0
  33. package/dist/providers/lido-staking/index.js.map +1 -0
  34. package/dist/providers/lido-staking/lido-contract.d.ts +43 -0
  35. package/dist/providers/lido-staking/lido-contract.d.ts.map +1 -0
  36. package/dist/providers/lido-staking/lido-contract.js +83 -0
  37. package/dist/providers/lido-staking/lido-contract.js.map +1 -0
  38. package/dist/providers/lido-staking/withdrawal-tracker.d.ts +21 -0
  39. package/dist/providers/lido-staking/withdrawal-tracker.d.ts.map +1 -0
  40. package/dist/providers/lido-staking/withdrawal-tracker.js +46 -0
  41. package/dist/providers/lido-staking/withdrawal-tracker.js.map +1 -0
  42. package/dist/providers/lifi/bridge-status-tracker.d.ts +37 -0
  43. package/dist/providers/lifi/bridge-status-tracker.d.ts.map +1 -0
  44. package/dist/providers/lifi/bridge-status-tracker.js +111 -0
  45. package/dist/providers/lifi/bridge-status-tracker.js.map +1 -0
  46. package/dist/providers/lifi/config.d.ts +27 -0
  47. package/dist/providers/lifi/config.d.ts.map +1 -0
  48. package/dist/providers/lifi/config.js +50 -0
  49. package/dist/providers/lifi/config.js.map +1 -0
  50. package/dist/providers/lifi/index.d.ts +16 -0
  51. package/dist/providers/lifi/index.d.ts.map +1 -0
  52. package/dist/providers/lifi/index.js +121 -0
  53. package/dist/providers/lifi/index.js.map +1 -0
  54. package/dist/providers/lifi/lifi-api-client.d.ts +29 -0
  55. package/dist/providers/lifi/lifi-api-client.d.ts.map +1 -0
  56. package/dist/providers/lifi/lifi-api-client.js +42 -0
  57. package/dist/providers/lifi/lifi-api-client.js.map +1 -0
  58. package/dist/providers/lifi/schemas.d.ts +713 -0
  59. package/dist/providers/lifi/schemas.d.ts.map +1 -0
  60. package/dist/providers/lifi/schemas.js +91 -0
  61. package/dist/providers/lifi/schemas.js.map +1 -0
  62. package/package.json +2 -2
package/README.md CHANGED
@@ -25,22 +25,69 @@ WAIaaS is a local daemon that sits between your AI agent and the blockchain:
25
25
 
26
26
  See [Security Model](docs/security-model.md) for full details.
27
27
 
28
+ ## Architecture
29
+
30
+ ```mermaid
31
+ graph LR
32
+ subgraph Interfaces
33
+ SDK["TypeScript SDK"]
34
+ MCP["MCP Server"]
35
+ CLI["CLI"]
36
+ Admin["Admin UI"]
37
+ Skills["Skill Files"]
38
+ WalletSDK["Wallet SDK"]
39
+ end
40
+
41
+ subgraph Daemon
42
+ API["API Layer<br>(Hono + Middleware)"]
43
+ Services["Service Layer<br>(Policy, Notifications, Kill Switch)"]
44
+ Pipeline["Transaction Pipeline<br>(6-stage + 8-state)"]
45
+ Infra["Infrastructure<br>(SQLite, Keystore, Config)"]
46
+ end
47
+
48
+ subgraph Blockchain
49
+ Solana["Solana"]
50
+ EVM["EVM Chains"]
51
+ end
52
+
53
+ SDK & MCP & CLI & Admin & Skills & WalletSDK --> API
54
+ API --> Services --> Pipeline --> Infra
55
+ Infra --> Solana & EVM
56
+ ```
57
+
58
+ **12 packages** in a monorepo:
59
+
60
+ - **@waiaas/core** — Shared types, Zod schemas, enums, and interfaces
61
+ - **@waiaas/daemon** — Self-hosted wallet daemon (Hono HTTP server)
62
+ - **@waiaas/adapter-solana** — Solana chain adapter (SPL / Token-2022)
63
+ - **@waiaas/adapter-evm** — EVM chain adapter (ERC-20 via viem)
64
+ - **@waiaas/actions** — DeFi Action Providers (Jupiter, 0x, LI.FI, Lido, Jito)
65
+ - **@waiaas/sdk** — TypeScript client library
66
+ - **@waiaas/mcp** — Model Context Protocol server for AI agents
67
+ - **@waiaas/cli** — Command-line interface
68
+ - **@waiaas/admin** — Preact-based Admin Web UI
69
+ - **@waiaas/wallet-sdk** — Wallet Signing SDK for wallet app integration
70
+ - **@waiaas/push-relay** — Push Relay Server (ntfy → push services)
71
+ - **@waiaas/skills** — Pre-built `.skill.md` instruction files for AI agents
72
+
73
+ See [Architecture](docs/architecture.md) for the full technical deep-dive.
74
+
28
75
  ## Quick Start
29
76
 
30
77
  ```bash
31
78
  npm install -g @waiaas/cli
32
79
  waiaas init # Create data directory + config.toml
33
80
  waiaas start # Start daemon (sets master password on first run)
34
- waiaas quickset --mode testnet # Create wallets + MCP sessions in one step
81
+ waiaas quickset --mode mainnet # Create wallets + MCP sessions in one step
35
82
  ```
36
83
 
37
84
  The `quickset` command does everything you need to get started:
38
85
 
39
- 1. Creates **Solana Devnet + EVM Sepolia** wallets automatically
86
+ 1. Creates **Solana Mainnet + EVM Ethereum Mainnet** wallets automatically
40
87
  2. Issues **MCP session tokens** for each wallet
41
88
  3. Outputs a **Claude Desktop MCP config** snippet -- just copy and paste
42
89
 
43
- > Starting with mainnet? Use `waiaas quickset --mode mainnet` to create Solana Mainnet + EVM Ethereum Mainnet wallets instead. Mainnet mode recommends configuring spending limits and registering an owner wallet for high-value transaction approval.
90
+ > We recommend configuring spending limits and registering an owner wallet for high-value transaction approval. For testing, use `waiaas quickset --mode testnet` to create Solana Devnet + EVM Sepolia wallets instead.
44
91
 
45
92
  ### Admin UI
46
93
 
@@ -143,6 +190,7 @@ Enabled by default (`admin_ui = true` in config.toml).
143
190
 
144
191
  | Document | Description |
145
192
  |----------|-------------|
193
+ | [Architecture](docs/architecture.md) | System overview, package structure, pipeline, chain adapters |
146
194
  | [Security Model](docs/security-model.md) | Authentication, policy engine, Kill Switch, AutoStop |
147
195
  | [Deployment Guide](docs/deployment.md) | Docker, npm, configuration reference |
148
196
  | [API Reference](docs/api-reference.md) | REST API endpoints and authentication |
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Async Status Tracker interface and types for DeFi async operations.
3
+ *
4
+ * IAsyncStatusTracker defines the contract for polling-based status tracking
5
+ * of asynchronous blockchain operations (bridge transfers, unstaking, gas conditions).
6
+ *
7
+ * AsyncPollingService (daemon) uses these interfaces to generically poll
8
+ * registered trackers at configurable intervals.
9
+ *
10
+ * @see internal/objectives/m28-00-defi-basic-protocol-design.md (DEFI-04 ASNC-01)
11
+ */
12
+ import { z } from 'zod';
13
+ /**
14
+ * All possible bridge_status values for the transactions table.
15
+ * Used as SSoT for DB CHECK constraint and Zod schema.
16
+ */
17
+ export declare const BRIDGE_STATUS_VALUES: readonly ["PENDING", "COMPLETED", "FAILED", "BRIDGE_MONITORING", "TIMEOUT", "REFUNDED"];
18
+ /** Bridge status type derived from BRIDGE_STATUS_VALUES SSoT array. */
19
+ export type BridgeStatus = (typeof BRIDGE_STATUS_VALUES)[number];
20
+ /** Zod schema for bridge status validation (SSoT pattern). */
21
+ export declare const BridgeStatusEnum: z.ZodEnum<["PENDING", "COMPLETED", "FAILED", "BRIDGE_MONITORING", "TIMEOUT", "REFUNDED"]>;
22
+ /**
23
+ * Result returned by IAsyncStatusTracker.checkStatus().
24
+ *
25
+ * - state: current tracking state (PENDING continues polling, others are terminal or timeout)
26
+ * - details: optional tracker-specific metadata merged into bridge_metadata
27
+ * - nextIntervalOverride: optional override for next poll interval (ms)
28
+ */
29
+ export interface AsyncTrackingResult {
30
+ state: 'PENDING' | 'COMPLETED' | 'FAILED' | 'TIMEOUT';
31
+ details?: Record<string, unknown>;
32
+ nextIntervalOverride?: number;
33
+ }
34
+ /**
35
+ * Contract for async status tracking implementations.
36
+ *
37
+ * Each tracker monitors a specific type of async operation:
38
+ * - BridgeStatusTracker: cross-chain bridge transfer completion
39
+ * - UnstakeStatusTracker: staking withdrawal completion
40
+ * - GasConditionTracker: gas price condition satisfaction
41
+ *
42
+ * Trackers are registered with AsyncPollingService which calls checkStatus()
43
+ * at pollIntervalMs intervals, up to maxAttempts times.
44
+ */
45
+ export interface IAsyncStatusTracker {
46
+ /** Check the current status of an async operation. */
47
+ checkStatus(txId: string, metadata: Record<string, unknown>): Promise<AsyncTrackingResult>;
48
+ /** Tracker name used for registration and lookup (e.g., 'bridge', 'unstake', 'gas-condition'). */
49
+ readonly name: string;
50
+ /** Maximum number of poll attempts before timeout transition. */
51
+ readonly maxAttempts: number;
52
+ /** Polling interval in milliseconds between checkStatus() calls. */
53
+ readonly pollIntervalMs: number;
54
+ /**
55
+ * State transition when maxAttempts is exceeded:
56
+ * - 'TIMEOUT': Mark bridge_status as TIMEOUT (terminal)
57
+ * - 'BRIDGE_MONITORING': Transition to reduced-frequency monitoring
58
+ * - 'CANCELLED': Cancel the transaction (for GAS_WAITING timeout)
59
+ */
60
+ readonly timeoutTransition: 'TIMEOUT' | 'BRIDGE_MONITORING' | 'CANCELLED';
61
+ }
62
+ //# sourceMappingURL=async-status-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-status-tracker.d.ts","sourceRoot":"","sources":["../../src/common/async-status-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,yFAOvB,CAAC;AAEX,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,2FAA+B,CAAC;AAM7D;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE3F,kGAAkG;IAClG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oEAAoE;IACpE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,EAAE,SAAS,GAAG,mBAAmB,GAAG,WAAW,CAAC;CAC3E"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Async Status Tracker interface and types for DeFi async operations.
3
+ *
4
+ * IAsyncStatusTracker defines the contract for polling-based status tracking
5
+ * of asynchronous blockchain operations (bridge transfers, unstaking, gas conditions).
6
+ *
7
+ * AsyncPollingService (daemon) uses these interfaces to generically poll
8
+ * registered trackers at configurable intervals.
9
+ *
10
+ * @see internal/objectives/m28-00-defi-basic-protocol-design.md (DEFI-04 ASNC-01)
11
+ */
12
+ import { z } from 'zod';
13
+ // ---------------------------------------------------------------------------
14
+ // Bridge status values (6-value enum for transactions.bridge_status column)
15
+ // ---------------------------------------------------------------------------
16
+ /**
17
+ * All possible bridge_status values for the transactions table.
18
+ * Used as SSoT for DB CHECK constraint and Zod schema.
19
+ */
20
+ export const BRIDGE_STATUS_VALUES = [
21
+ 'PENDING',
22
+ 'COMPLETED',
23
+ 'FAILED',
24
+ 'BRIDGE_MONITORING',
25
+ 'TIMEOUT',
26
+ 'REFUNDED',
27
+ ];
28
+ /** Zod schema for bridge status validation (SSoT pattern). */
29
+ export const BridgeStatusEnum = z.enum(BRIDGE_STATUS_VALUES);
30
+ //# sourceMappingURL=async-status-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-status-tracker.js","sourceRoot":"","sources":["../../src/common/async-status-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS;IACT,WAAW;IACX,QAAQ;IACR,mBAAmB;IACnB,SAAS;IACT,UAAU;CACF,CAAC;AAKX,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,9 +11,24 @@ export type { JupiterSwapConfig } from './providers/jupiter-swap/config.js';
11
11
  export { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
12
12
  export { ALLOWANCE_HOLDER_ADDRESSES, ZEROX_SWAP_DEFAULTS, CHAIN_ID_MAP, getAllowanceHolderAddress } from './providers/zerox-swap/config.js';
13
13
  export type { ZeroExSwapConfig } from './providers/zerox-swap/config.js';
14
+ export { LiFiActionProvider } from './providers/lifi/index.js';
15
+ export { LIFI_DEFAULTS, LIFI_CHAIN_MAP, getLiFiChainId } from './providers/lifi/config.js';
16
+ export type { LiFiConfig } from './providers/lifi/config.js';
17
+ export { LiFiApiClient } from './providers/lifi/lifi-api-client.js';
18
+ export { BridgeStatusTracker, BridgeMonitoringTracker } from './providers/lifi/bridge-status-tracker.js';
19
+ export { LidoStakingActionProvider } from './providers/lido-staking/index.js';
20
+ export { LIDO_STAKING_DEFAULTS, LIDO_MAINNET_ADDRESSES, LIDO_TESTNET_ADDRESSES, getLidoAddresses } from './providers/lido-staking/config.js';
21
+ export type { LidoStakingConfig } from './providers/lido-staking/config.js';
22
+ export { LidoWithdrawalTracker } from './providers/lido-staking/withdrawal-tracker.js';
23
+ export { JitoStakingActionProvider } from './providers/jito-staking/index.js';
24
+ export { JITO_STAKING_DEFAULTS, JITO_MAINNET_ADDRESSES, getJitoAddresses } from './providers/jito-staking/config.js';
25
+ export type { JitoStakingConfig } from './providers/jito-staking/config.js';
26
+ export { JitoEpochTracker } from './providers/jito-staking/epoch-tracker.js';
14
27
  export { ActionApiClient } from './common/action-api-client.js';
15
28
  export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
16
29
  export type { SlippageBps, SlippagePct } from './common/slippage.js';
30
+ export { BRIDGE_STATUS_VALUES, BridgeStatusEnum, } from './common/async-status-tracker.js';
31
+ export type { IAsyncStatusTracker, AsyncTrackingResult, BridgeStatus, } from './common/async-status-tracker.js';
17
32
  /** Minimal settings reader interface compatible with SettingsService.get(). */
18
33
  export interface SettingsReader {
19
34
  get(key: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC5I,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMrE,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,cAAc,GAC7B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA8DzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,cAAc,CAAC;AAWjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC5I,YAAY,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC7I,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAEvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACrH,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAM1C,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,cAAc,EAAE,cAAc,GAC7B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAsHzC"}
package/dist/index.js CHANGED
@@ -1,13 +1,31 @@
1
+ import { deriveEnvironment } from '@waiaas/core';
1
2
  import { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
2
3
  import { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
4
+ import { LiFiActionProvider } from './providers/lifi/index.js';
5
+ import { LidoStakingActionProvider } from './providers/lido-staking/index.js';
6
+ import { getLidoAddresses } from './providers/lido-staking/config.js';
7
+ import { JitoStakingActionProvider } from './providers/jito-staking/index.js';
8
+ import { getJitoAddresses } from './providers/jito-staking/config.js';
3
9
  // Re-export provider classes
4
10
  export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
5
11
  export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
6
12
  export { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
7
13
  export { ALLOWANCE_HOLDER_ADDRESSES, ZEROX_SWAP_DEFAULTS, CHAIN_ID_MAP, getAllowanceHolderAddress } from './providers/zerox-swap/config.js';
14
+ export { LiFiActionProvider } from './providers/lifi/index.js';
15
+ export { LIFI_DEFAULTS, LIFI_CHAIN_MAP, getLiFiChainId } from './providers/lifi/config.js';
16
+ export { LiFiApiClient } from './providers/lifi/lifi-api-client.js';
17
+ export { BridgeStatusTracker, BridgeMonitoringTracker } from './providers/lifi/bridge-status-tracker.js';
18
+ export { LidoStakingActionProvider } from './providers/lido-staking/index.js';
19
+ export { LIDO_STAKING_DEFAULTS, LIDO_MAINNET_ADDRESSES, LIDO_TESTNET_ADDRESSES, getLidoAddresses } from './providers/lido-staking/config.js';
20
+ export { LidoWithdrawalTracker } from './providers/lido-staking/withdrawal-tracker.js';
21
+ export { JitoStakingActionProvider } from './providers/jito-staking/index.js';
22
+ export { JITO_STAKING_DEFAULTS, JITO_MAINNET_ADDRESSES, getJitoAddresses } from './providers/jito-staking/config.js';
23
+ export { JitoEpochTracker } from './providers/jito-staking/epoch-tracker.js';
8
24
  // Re-export common utilities
9
25
  export { ActionApiClient } from './common/action-api-client.js';
10
26
  export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
27
+ // Re-export async status tracker interface and types (v28.3 DEFI-04)
28
+ export { BRIDGE_STATUS_VALUES, BridgeStatusEnum, } from './common/async-status-tracker.js';
11
29
  /**
12
30
  * Register built-in DeFi action providers from Admin Settings.
13
31
  *
@@ -49,6 +67,58 @@ export function registerBuiltInProviders(registry, settingsReader) {
49
67
  return new ZeroExSwapActionProvider(config);
50
68
  },
51
69
  },
70
+ {
71
+ key: 'lifi',
72
+ enabledKey: 'actions.lifi_enabled',
73
+ factory: () => {
74
+ const config = {
75
+ enabled: true,
76
+ apiBaseUrl: settingsReader.get('actions.lifi_api_base_url'),
77
+ apiKey: settingsReader.get('actions.lifi_api_key'),
78
+ defaultSlippagePct: Number(settingsReader.get('actions.lifi_default_slippage_pct')),
79
+ maxSlippagePct: Number(settingsReader.get('actions.lifi_max_slippage_pct')),
80
+ requestTimeoutMs: 15_000,
81
+ };
82
+ return new LiFiActionProvider(config);
83
+ },
84
+ },
85
+ {
86
+ key: 'lido_staking',
87
+ enabledKey: 'actions.lido_staking_enabled',
88
+ factory: () => {
89
+ // Resolve environment from registered rpc.evm_default_network setting
90
+ const evmNetwork = settingsReader.get('rpc.evm_default_network') || 'ethereum-mainnet';
91
+ const isTestnet = deriveEnvironment(evmNetwork) === 'testnet';
92
+ const addresses = getLidoAddresses(isTestnet ? 'testnet' : 'mainnet');
93
+ // Admin Settings overrides individual addresses; empty string falls back to environment default
94
+ const stethOverride = settingsReader.get('actions.lido_staking_steth_address');
95
+ const withdrawalOverride = settingsReader.get('actions.lido_staking_withdrawal_queue_address');
96
+ const config = {
97
+ enabled: true,
98
+ stethAddress: stethOverride || addresses.stethAddress,
99
+ withdrawalQueueAddress: withdrawalOverride || addresses.withdrawalQueueAddress,
100
+ };
101
+ return new LidoStakingActionProvider(config);
102
+ },
103
+ },
104
+ {
105
+ key: 'jito_staking',
106
+ enabledKey: 'actions.jito_staking_enabled',
107
+ factory: () => {
108
+ // Jito is mainnet-only -- no testnet pool exists.
109
+ // Read admin override addresses; empty string falls back to mainnet defaults.
110
+ const stakePoolOverride = settingsReader.get('actions.jito_staking_stake_pool_address');
111
+ const jitosolMintOverride = settingsReader.get('actions.jito_staking_jitosol_mint');
112
+ const addresses = getJitoAddresses('mainnet');
113
+ const config = {
114
+ enabled: true,
115
+ stakePoolAddress: stakePoolOverride || addresses.stakePoolAddress,
116
+ jitosolMint: jitosolMintOverride || addresses.jitosolMint,
117
+ stakePoolProgram: addresses.stakePoolProgram,
118
+ };
119
+ return new JitoStakingActionProvider(config);
120
+ },
121
+ },
52
122
  ];
53
123
  for (const { key, enabledKey, factory } of providers) {
54
124
  if (settingsReader.get(enabledKey) === 'true') {
package/dist/index.js.map CHANGED
@@ -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":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Jito Staking configuration type, defaults, and address maps.
3
+ *
4
+ * Supports Solana mainnet only (Jito has no official devnet/testnet deployment).
5
+ * See: https://www.jito.network/
6
+ */
7
+ export interface JitoStakingConfig {
8
+ enabled: boolean;
9
+ stakePoolAddress: string;
10
+ jitosolMint: string;
11
+ stakePoolProgram: string;
12
+ }
13
+ export declare const JITO_MAINNET_ADDRESSES: {
14
+ readonly stakePoolAddress: "Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb";
15
+ readonly jitosolMint: "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
16
+ readonly stakePoolProgram: "SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy";
17
+ };
18
+ /** Stake Pool withdraw authority (PDA derived from stake pool address). */
19
+ export declare const JITO_WITHDRAW_AUTHORITY = "6iQKfEyhr3bZMotVkW6beNZz5CPAkiwvgV2CTje9pVSS";
20
+ /** Reserve stake account for the Jito Stake Pool. */
21
+ export declare const JITO_RESERVE_STAKE = "BgKUXdS2jFbByBaPQRf6eSCjMH3mRLDPH1MCVLhEAD3c";
22
+ /** Manager fee account for the Jito Stake Pool. */
23
+ export declare const JITO_MANAGER_FEE = "B1aLzaNMeFVAyQ6f3XbbUyKcH2YPHu2fqiEagmiF23VR";
24
+ /** SPL Token Program. */
25
+ export declare const SPL_TOKEN_PROGRAM = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
26
+ /** System Program. */
27
+ export declare const SYSTEM_PROGRAM = "11111111111111111111111111111111";
28
+ export declare const JITO_STAKING_DEFAULTS: JitoStakingConfig;
29
+ /**
30
+ * Get Jito addresses for a given environment type.
31
+ *
32
+ * Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
33
+ *
34
+ * @param environment - 'mainnet' or 'testnet'
35
+ */
36
+ export declare function getJitoAddresses(environment: 'mainnet' | 'testnet'): {
37
+ stakePoolAddress: string;
38
+ jitosolMint: string;
39
+ stakePoolProgram: string;
40
+ };
41
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAMX,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AAEtF,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,iDAAiD,CAAC;AAEjF,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,iDAAiD,CAAC;AAE/E,yBAAyB;AACzB,eAAO,MAAM,iBAAiB,gDAAgD,CAAC;AAE/E,sBAAsB;AACtB,eAAO,MAAM,cAAc,qCAAqC,CAAC;AAMjE,eAAO,MAAM,qBAAqB,EAAE,iBAGnC,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,SAAS,GAAG,SAAS,GACjC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAI7E"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Jito Staking configuration type, defaults, and address maps.
3
+ *
4
+ * Supports Solana mainnet only (Jito has no official devnet/testnet deployment).
5
+ * See: https://www.jito.network/
6
+ */
7
+ // ---------------------------------------------------------------------------
8
+ // Mainnet addresses (Solana)
9
+ // ---------------------------------------------------------------------------
10
+ export const JITO_MAINNET_ADDRESSES = {
11
+ stakePoolAddress: 'Jito4APyf642JPZPx3hGc6WWJ8zPKtRbRs4P815Awbb',
12
+ jitosolMint: 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn',
13
+ stakePoolProgram: 'SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy',
14
+ };
15
+ // ---------------------------------------------------------------------------
16
+ // Well-known PDA and program addresses
17
+ // ---------------------------------------------------------------------------
18
+ /** Stake Pool withdraw authority (PDA derived from stake pool address). */
19
+ export const JITO_WITHDRAW_AUTHORITY = '6iQKfEyhr3bZMotVkW6beNZz5CPAkiwvgV2CTje9pVSS';
20
+ /** Reserve stake account for the Jito Stake Pool. */
21
+ export const JITO_RESERVE_STAKE = 'BgKUXdS2jFbByBaPQRf6eSCjMH3mRLDPH1MCVLhEAD3c';
22
+ /** Manager fee account for the Jito Stake Pool. */
23
+ export const JITO_MANAGER_FEE = 'B1aLzaNMeFVAyQ6f3XbbUyKcH2YPHu2fqiEagmiF23VR';
24
+ /** SPL Token Program. */
25
+ export const SPL_TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
26
+ /** System Program. */
27
+ export const SYSTEM_PROGRAM = '11111111111111111111111111111111';
28
+ // ---------------------------------------------------------------------------
29
+ // Defaults (disabled, mainnet addresses)
30
+ // ---------------------------------------------------------------------------
31
+ export const JITO_STAKING_DEFAULTS = {
32
+ enabled: false,
33
+ ...JITO_MAINNET_ADDRESSES,
34
+ };
35
+ // ---------------------------------------------------------------------------
36
+ // Helper to select addresses by environment
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Get Jito addresses for a given environment type.
40
+ *
41
+ * Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
42
+ *
43
+ * @param environment - 'mainnet' or 'testnet'
44
+ */
45
+ export function getJitoAddresses(environment) {
46
+ // Jito Stake Pool is mainnet-only. Testnet falls back to mainnet addresses.
47
+ void environment;
48
+ return { ...JITO_MAINNET_ADDRESSES };
49
+ }
50
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,gBAAgB,EAAE,6CAA6C;IAC/D,WAAW,EAAE,8CAA8C;IAC3D,gBAAgB,EAAE,6CAA6C;CACvD,CAAC;AAEX,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAEtF,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,8CAA8C,CAAC;AAEjF,mDAAmD;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAE/E,yBAAyB;AACzB,MAAM,CAAC,MAAM,iBAAiB,GAAG,6CAA6C,CAAC;AAE/E,sBAAsB;AACtB,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAEjE,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,OAAO,EAAE,KAAK;IACd,GAAG,sBAAsB;CAC1B,CAAC;AAEF,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAkC;IAElC,4EAA4E;IAC5E,KAAK,WAAW,CAAC;IACjB,OAAO,EAAE,GAAG,sBAAsB,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * JitoEpochTracker - IAsyncStatusTracker for Jito SOL unstake epoch boundary.
3
+ *
4
+ * Tracks Jito unstake requests via metadata-based polling (v1 implementation).
5
+ * Active polling: 30s x 240 = 2 hours, then TIMEOUT (terminal).
6
+ *
7
+ * Solana epoch boundaries occur every ~2-3 days. Jito unstake deactivates
8
+ * the stake account, and cooldown completes at the next epoch boundary.
9
+ * This tracker monitors metadata state and emits STAKING_UNSTAKE_COMPLETED
10
+ * or STAKING_UNSTAKE_TIMEOUT notifications.
11
+ *
12
+ * @see packages/actions/src/common/async-status-tracker.ts
13
+ */
14
+ import type { IAsyncStatusTracker, AsyncTrackingResult } from '../../common/async-status-tracker.js';
15
+ export declare class JitoEpochTracker implements IAsyncStatusTracker {
16
+ readonly name = "jito-epoch";
17
+ readonly maxAttempts = 240;
18
+ readonly pollIntervalMs = 30000;
19
+ readonly timeoutTransition: "TIMEOUT";
20
+ checkStatus(_txId: string, metadata: Record<string, unknown>): Promise<AsyncTrackingResult>;
21
+ }
22
+ //# sourceMappingURL=epoch-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epoch-tracker.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/epoch-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAKrG,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,OAAO;IAC3B,QAAQ,CAAC,cAAc,SAAU;IACjC,QAAQ,CAAC,iBAAiB,EAAG,SAAS,CAAU;IAE1C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA4BlG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * JitoEpochTracker - IAsyncStatusTracker for Jito SOL unstake epoch boundary.
3
+ *
4
+ * Tracks Jito unstake requests via metadata-based polling (v1 implementation).
5
+ * Active polling: 30s x 240 = 2 hours, then TIMEOUT (terminal).
6
+ *
7
+ * Solana epoch boundaries occur every ~2-3 days. Jito unstake deactivates
8
+ * the stake account, and cooldown completes at the next epoch boundary.
9
+ * This tracker monitors metadata state and emits STAKING_UNSTAKE_COMPLETED
10
+ * or STAKING_UNSTAKE_TIMEOUT notifications.
11
+ *
12
+ * @see packages/actions/src/common/async-status-tracker.ts
13
+ */
14
+ /** Expected days for Solana epoch boundary (~2-3 days). */
15
+ const JITO_EXPECTED_DAYS = 3;
16
+ export class JitoEpochTracker {
17
+ name = 'jito-epoch';
18
+ maxAttempts = 240; // 240 x 30s = 2 hours active polling
19
+ pollIntervalMs = 30_000; // 30 seconds
20
+ timeoutTransition = 'TIMEOUT';
21
+ async checkStatus(_txId, metadata) {
22
+ // If metadata.status is 'deactivated', unstake is complete
23
+ if (metadata.status === 'deactivated') {
24
+ return {
25
+ state: 'COMPLETED',
26
+ details: {
27
+ completedAt: Date.now(),
28
+ protocol: 'jito',
29
+ notificationEvent: 'STAKING_UNSTAKE_COMPLETED',
30
+ },
31
+ };
32
+ }
33
+ // Calculate estimated days remaining based on unstake request time
34
+ const requestedAt = metadata.unstakeRequestedAt;
35
+ const estimatedDaysRemaining = requestedAt
36
+ ? Math.max(0, JITO_EXPECTED_DAYS - (Date.now() - requestedAt) / (1000 * 60 * 60 * 24))
37
+ : JITO_EXPECTED_DAYS;
38
+ return {
39
+ state: 'PENDING',
40
+ details: {
41
+ estimatedDaysRemaining: Math.round(estimatedDaysRemaining * 10) / 10,
42
+ protocol: 'jito',
43
+ targetEpoch: metadata.targetEpoch ?? null,
44
+ },
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=epoch-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epoch-tracker.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/epoch-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,GAAG,CAAC,CAAU,qCAAqC;IACjE,cAAc,GAAG,MAAM,CAAC,CAAI,aAAa;IACzC,iBAAiB,GAAG,SAAkB,CAAC;IAEhD,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,QAAiC;QAChE,2DAA2D;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACtC,OAAO;gBACL,KAAK,EAAE,WAAW;gBAClB,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;oBACvB,QAAQ,EAAE,MAAM;oBAChB,iBAAiB,EAAE,2BAA2B;iBAC/C;aACF,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAwC,CAAC;QACtE,MAAM,sBAAsB,GAAG,WAAW;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACtF,CAAC,CAAC,kBAAkB,CAAC;QAEvB,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE;gBACP,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,EAAE,CAAC,GAAG,EAAE;gBACpE,QAAQ,EAAE,MAAM;gBAChB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;aAC1C;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { IActionProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest } from '@waiaas/core';
2
+ import { type JitoStakingConfig } from './config.js';
3
+ export declare class JitoStakingActionProvider implements IActionProvider {
4
+ readonly metadata: ActionProviderMetadata;
5
+ readonly actions: readonly ActionDefinition[];
6
+ private readonly config;
7
+ constructor(config?: Partial<JitoStakingConfig>);
8
+ resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<ContractCallRequest>;
9
+ private resolveStake;
10
+ private resolveUnstake;
11
+ }
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/jito-staking/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AAuB5E,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAiCzC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,CAAC;YAkBjB,YAAY;YAcZ,cAAc;CAS7B"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Jito Staking Action Provider.
3
+ *
4
+ * Implements IActionProvider to resolve Jito liquid staking requests
5
+ * into ContractCallRequest objects for the sequential pipeline.
6
+ *
7
+ * Actions:
8
+ * - stake: SOL -> JitoSOL via SPL Stake Pool depositSol
9
+ * - unstake: JitoSOL -> SOL via SPL Stake Pool withdrawSol
10
+ */
11
+ import { z } from 'zod';
12
+ import { ChainError } from '@waiaas/core';
13
+ import { JITO_STAKING_DEFAULTS } from './config.js';
14
+ import { buildDepositSolRequest, buildWithdrawSolRequest, parseSolAmount, } from './jito-stake-pool.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Input schemas (Zod SSoT)
17
+ // ---------------------------------------------------------------------------
18
+ const JitoStakeInputSchema = z.object({
19
+ amount: z.string().min(1, 'amount is required (SOL, e.g. "1.0")'),
20
+ });
21
+ const JitoUnstakeInputSchema = z.object({
22
+ amount: z.string().min(1, 'amount is required (JitoSOL, e.g. "1.0")'),
23
+ });
24
+ // ---------------------------------------------------------------------------
25
+ // Provider implementation
26
+ // ---------------------------------------------------------------------------
27
+ export class JitoStakingActionProvider {
28
+ metadata;
29
+ actions;
30
+ config;
31
+ constructor(config) {
32
+ this.config = { ...JITO_STAKING_DEFAULTS, ...config };
33
+ this.metadata = {
34
+ name: 'jito_staking',
35
+ description: 'Jito liquid staking protocol for SOL to JitoSOL conversion via SPL Stake Pool',
36
+ version: '1.0.0',
37
+ chains: ['solana'],
38
+ mcpExpose: true,
39
+ requiresApiKey: false,
40
+ requiredApis: [],
41
+ };
42
+ this.actions = [
43
+ {
44
+ name: 'stake',
45
+ description: 'Stake SOL to receive JitoSOL via Jito Stake Pool (DepositSol). Immediate, no lock-up.',
46
+ chain: 'solana',
47
+ inputSchema: JitoStakeInputSchema,
48
+ riskLevel: 'medium',
49
+ defaultTier: 'DELAY',
50
+ },
51
+ {
52
+ name: 'unstake',
53
+ description: 'Withdraw SOL from Jito Stake Pool by burning JitoSOL (WithdrawSol). Epoch boundary delay.',
54
+ chain: 'solana',
55
+ inputSchema: JitoUnstakeInputSchema,
56
+ riskLevel: 'medium',
57
+ defaultTier: 'DELAY',
58
+ },
59
+ ];
60
+ }
61
+ async resolve(actionName, params, context) {
62
+ if (actionName === 'stake') {
63
+ return this.resolveStake(params, context);
64
+ }
65
+ if (actionName === 'unstake') {
66
+ return this.resolveUnstake(params, context);
67
+ }
68
+ throw new ChainError('INVALID_INSTRUCTION', 'solana', {
69
+ message: `Unknown action: ${actionName}`,
70
+ });
71
+ }
72
+ // -------------------------------------------------------------------------
73
+ // Stake: SOL -> JitoSOL via DepositSol
74
+ // -------------------------------------------------------------------------
75
+ async resolveStake(params, context) {
76
+ const input = JitoStakeInputSchema.parse(params);
77
+ const amountLamports = await parseSolAmount(input.amount);
78
+ return buildDepositSolRequest(this.config, amountLamports, context.walletAddress);
79
+ }
80
+ // -------------------------------------------------------------------------
81
+ // Unstake: JitoSOL -> SOL via WithdrawSol
82
+ // -------------------------------------------------------------------------
83
+ async resolveUnstake(params, context) {
84
+ const input = JitoUnstakeInputSchema.parse(params);
85
+ const amountLamports = await parseSolAmount(input.amount);
86
+ return buildWithdrawSolRequest(this.config, amountLamports, context.walletAddress);
87
+ }
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/jito-staking/index.ts"],"names":[],"mappings":"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"}