@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.
- package/README.md +51 -3
- package/dist/common/async-status-tracker.d.ts +62 -0
- package/dist/common/async-status-tracker.d.ts.map +1 -0
- package/dist/common/async-status-tracker.js +30 -0
- package/dist/common/async-status-tracker.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/jito-staking/config.d.ts +41 -0
- package/dist/providers/jito-staking/config.d.ts.map +1 -0
- package/dist/providers/jito-staking/config.js +50 -0
- package/dist/providers/jito-staking/config.js.map +1 -0
- package/dist/providers/jito-staking/epoch-tracker.d.ts +22 -0
- package/dist/providers/jito-staking/epoch-tracker.d.ts.map +1 -0
- package/dist/providers/jito-staking/epoch-tracker.js +48 -0
- package/dist/providers/jito-staking/epoch-tracker.js.map +1 -0
- package/dist/providers/jito-staking/index.d.ts +12 -0
- package/dist/providers/jito-staking/index.d.ts.map +1 -0
- package/dist/providers/jito-staking/index.js +89 -0
- package/dist/providers/jito-staking/index.js.map +1 -0
- package/dist/providers/jito-staking/jito-stake-pool.d.ts +100 -0
- package/dist/providers/jito-staking/jito-stake-pool.d.ts.map +1 -0
- package/dist/providers/jito-staking/jito-stake-pool.js +355 -0
- package/dist/providers/jito-staking/jito-stake-pool.js.map +1 -0
- package/dist/providers/lido-staking/config.d.ts +29 -0
- package/dist/providers/lido-staking/config.d.ts.map +1 -0
- package/dist/providers/lido-staking/config.js +40 -0
- package/dist/providers/lido-staking/config.js.map +1 -0
- package/dist/providers/lido-staking/index.d.ts +12 -0
- package/dist/providers/lido-staking/index.d.ts.map +1 -0
- package/dist/providers/lido-staking/index.js +129 -0
- package/dist/providers/lido-staking/index.js.map +1 -0
- package/dist/providers/lido-staking/lido-contract.d.ts +43 -0
- package/dist/providers/lido-staking/lido-contract.d.ts.map +1 -0
- package/dist/providers/lido-staking/lido-contract.js +83 -0
- package/dist/providers/lido-staking/lido-contract.js.map +1 -0
- package/dist/providers/lido-staking/withdrawal-tracker.d.ts +21 -0
- package/dist/providers/lido-staking/withdrawal-tracker.d.ts.map +1 -0
- package/dist/providers/lido-staking/withdrawal-tracker.js +46 -0
- package/dist/providers/lido-staking/withdrawal-tracker.js.map +1 -0
- package/dist/providers/lifi/bridge-status-tracker.d.ts +37 -0
- package/dist/providers/lifi/bridge-status-tracker.d.ts.map +1 -0
- package/dist/providers/lifi/bridge-status-tracker.js +111 -0
- package/dist/providers/lifi/bridge-status-tracker.js.map +1 -0
- package/dist/providers/lifi/config.d.ts +27 -0
- package/dist/providers/lifi/config.d.ts.map +1 -0
- package/dist/providers/lifi/config.js +50 -0
- package/dist/providers/lifi/config.js.map +1 -0
- package/dist/providers/lifi/index.d.ts +16 -0
- package/dist/providers/lifi/index.d.ts.map +1 -0
- package/dist/providers/lifi/index.js +121 -0
- package/dist/providers/lifi/index.js.map +1 -0
- package/dist/providers/lifi/lifi-api-client.d.ts +29 -0
- package/dist/providers/lifi/lifi-api-client.d.ts.map +1 -0
- package/dist/providers/lifi/lifi-api-client.js +42 -0
- package/dist/providers/lifi/lifi-api-client.js.map +1 -0
- package/dist/providers/lifi/schemas.d.ts +713 -0
- package/dist/providers/lifi/schemas.d.ts.map +1 -0
- package/dist/providers/lifi/schemas.js +91 -0
- package/dist/providers/lifi/schemas.js.map +1 -0
- 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
|
|
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
|
|
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
|
-
>
|
|
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;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,
|
|
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":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;
|
|
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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"}
|