@waiaas/actions 2.6.0-rc.8 → 2.6.0-rc.9
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/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 +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- 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
|
@@ -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,16 @@ 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';
|
|
14
19
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
15
20
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
16
21
|
export type { SlippageBps, SlippagePct } from './common/slippage.js';
|
|
22
|
+
export { BRIDGE_STATUS_VALUES, BridgeStatusEnum, } from './common/async-status-tracker.js';
|
|
23
|
+
export type { IAsyncStatusTracker, AsyncTrackingResult, BridgeStatus, } from './common/async-status-tracker.js';
|
|
17
24
|
/** Minimal settings reader interface compatible with SettingsService.get(). */
|
|
18
25
|
export interface SettingsReader {
|
|
19
26
|
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,EAAE,MAAM,cAAc,CAAC;
|
|
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;AAMpD,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;AAGzG,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,CA6EzC"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
2
2
|
import { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
3
|
+
import { LiFiActionProvider } from './providers/lifi/index.js';
|
|
3
4
|
// Re-export provider classes
|
|
4
5
|
export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
5
6
|
export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
|
|
6
7
|
export { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
7
8
|
export { ALLOWANCE_HOLDER_ADDRESSES, ZEROX_SWAP_DEFAULTS, CHAIN_ID_MAP, getAllowanceHolderAddress } from './providers/zerox-swap/config.js';
|
|
9
|
+
export { LiFiActionProvider } from './providers/lifi/index.js';
|
|
10
|
+
export { LIFI_DEFAULTS, LIFI_CHAIN_MAP, getLiFiChainId } from './providers/lifi/config.js';
|
|
11
|
+
export { LiFiApiClient } from './providers/lifi/lifi-api-client.js';
|
|
12
|
+
export { BridgeStatusTracker, BridgeMonitoringTracker } from './providers/lifi/bridge-status-tracker.js';
|
|
8
13
|
// Re-export common utilities
|
|
9
14
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
10
15
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
16
|
+
// Re-export async status tracker interface and types (v28.3 DEFI-04)
|
|
17
|
+
export { BRIDGE_STATUS_VALUES, BridgeStatusEnum, } from './common/async-status-tracker.js';
|
|
11
18
|
/**
|
|
12
19
|
* Register built-in DeFi action providers from Admin Settings.
|
|
13
20
|
*
|
|
@@ -49,6 +56,21 @@ export function registerBuiltInProviders(registry, settingsReader) {
|
|
|
49
56
|
return new ZeroExSwapActionProvider(config);
|
|
50
57
|
},
|
|
51
58
|
},
|
|
59
|
+
{
|
|
60
|
+
key: 'lifi',
|
|
61
|
+
enabledKey: 'actions.lifi_enabled',
|
|
62
|
+
factory: () => {
|
|
63
|
+
const config = {
|
|
64
|
+
enabled: true,
|
|
65
|
+
apiBaseUrl: settingsReader.get('actions.lifi_api_base_url'),
|
|
66
|
+
apiKey: settingsReader.get('actions.lifi_api_key'),
|
|
67
|
+
defaultSlippagePct: Number(settingsReader.get('actions.lifi_default_slippage_pct')),
|
|
68
|
+
maxSlippagePct: Number(settingsReader.get('actions.lifi_max_slippage_pct')),
|
|
69
|
+
requestTimeoutMs: 15_000,
|
|
70
|
+
};
|
|
71
|
+
return new LiFiActionProvider(config);
|
|
72
|
+
},
|
|
73
|
+
},
|
|
52
74
|
];
|
|
53
75
|
for (const { key, enabledKey, factory } of providers) {
|
|
54
76
|
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,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LI.FI Bridge Status Trackers — two-phase polling implementation.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1: BridgeStatusTracker (active) — 30s x 240 = 2 hours
|
|
5
|
+
* Phase 2: BridgeMonitoringTracker (reduced) — 5min x 264 = 22 hours
|
|
6
|
+
*
|
|
7
|
+
* When active phase times out (240 attempts), timeoutTransition='BRIDGE_MONITORING'
|
|
8
|
+
* causes AsyncPollingService to transition the TX to the reduced-frequency phase.
|
|
9
|
+
*
|
|
10
|
+
* When the reduced phase also times out (264 attempts), timeoutTransition='TIMEOUT'
|
|
11
|
+
* marks the TX as terminal timeout — manual verification required.
|
|
12
|
+
*
|
|
13
|
+
* Total monitoring: 2h active + 22h reduced = 24 hours maximum.
|
|
14
|
+
*
|
|
15
|
+
* @see internal/objectives/m28-03-lifi-crosschain-bridge.md (DEFI-04)
|
|
16
|
+
*/
|
|
17
|
+
import type { IAsyncStatusTracker, AsyncTrackingResult } from '../../common/async-status-tracker.js';
|
|
18
|
+
import type { LiFiConfig } from './config.js';
|
|
19
|
+
export declare class BridgeStatusTracker implements IAsyncStatusTracker {
|
|
20
|
+
readonly name = "bridge";
|
|
21
|
+
readonly maxAttempts = 240;
|
|
22
|
+
readonly pollIntervalMs = 30000;
|
|
23
|
+
readonly timeoutTransition: "BRIDGE_MONITORING";
|
|
24
|
+
private readonly apiClient;
|
|
25
|
+
constructor(config: LiFiConfig);
|
|
26
|
+
checkStatus(_txId: string, metadata: Record<string, unknown>): Promise<AsyncTrackingResult>;
|
|
27
|
+
}
|
|
28
|
+
export declare class BridgeMonitoringTracker implements IAsyncStatusTracker {
|
|
29
|
+
readonly name = "bridge-monitoring";
|
|
30
|
+
readonly maxAttempts = 264;
|
|
31
|
+
readonly pollIntervalMs = 300000;
|
|
32
|
+
readonly timeoutTransition: "TIMEOUT";
|
|
33
|
+
private readonly apiClient;
|
|
34
|
+
constructor(config: LiFiConfig);
|
|
35
|
+
checkStatus(_txId: string, metadata: Record<string, unknown>): Promise<AsyncTrackingResult>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=bridge-status-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-status-tracker.d.ts","sourceRoot":"","sources":["../../../src/providers/lifi/bridge-status-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AACrG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwE9C,qBAAa,mBAAoB,YAAW,mBAAmB;IAC7D,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,OAAO;IAC3B,QAAQ,CAAC,cAAc,SAAU;IACjC,QAAQ,CAAC,iBAAiB,EAAG,mBAAmB,CAAU;IAE1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,MAAM,EAAE,UAAU;IAIxB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAelG;AAMD,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,QAAQ,CAAC,IAAI,uBAAuB;IACpC,QAAQ,CAAC,WAAW,OAAO;IAC3B,QAAQ,CAAC,cAAc,UAAW;IAClC,QAAQ,CAAC,iBAAiB,EAAG,SAAS,CAAU;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAE9B,MAAM,EAAE,UAAU;IAIxB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAelG"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { LiFiApiClient } from './lifi-api-client.js';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Shared status mapping
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* Map LI.FI status response to AsyncTrackingResult.
|
|
7
|
+
* Shared by both BridgeStatusTracker and BridgeMonitoringTracker.
|
|
8
|
+
*/
|
|
9
|
+
function mapLiFiStatus(response) {
|
|
10
|
+
switch (response.status) {
|
|
11
|
+
case 'DONE':
|
|
12
|
+
return {
|
|
13
|
+
state: 'COMPLETED',
|
|
14
|
+
details: {
|
|
15
|
+
destTxHash: response.receiving?.txHash ?? null,
|
|
16
|
+
destChainId: response.receiving?.chainId ?? null,
|
|
17
|
+
lifiExplorerLink: response.lifiExplorerLink ?? null,
|
|
18
|
+
tool: response.tool ?? null,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
case 'FAILED': {
|
|
22
|
+
// Check for refund via substatus
|
|
23
|
+
const isRefunded = response.substatus === 'REFUNDED' ||
|
|
24
|
+
response.substatusMessage?.toLowerCase().includes('refund');
|
|
25
|
+
if (isRefunded) {
|
|
26
|
+
return {
|
|
27
|
+
state: 'COMPLETED', // Treated as terminal (not PENDING)
|
|
28
|
+
details: {
|
|
29
|
+
refunded: true,
|
|
30
|
+
substatusMessage: response.substatusMessage ?? 'Refunded',
|
|
31
|
+
lifiExplorerLink: response.lifiExplorerLink ?? null,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
state: 'FAILED',
|
|
37
|
+
details: {
|
|
38
|
+
substatusMessage: response.substatusMessage ?? 'Bridge transfer failed',
|
|
39
|
+
substatus: response.substatus ?? null,
|
|
40
|
+
lifiExplorerLink: response.lifiExplorerLink ?? null,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
case 'NOT_FOUND':
|
|
45
|
+
case 'INVALID':
|
|
46
|
+
// Not yet tracked by LI.FI — keep polling
|
|
47
|
+
return { state: 'PENDING' };
|
|
48
|
+
case 'PENDING':
|
|
49
|
+
default:
|
|
50
|
+
return {
|
|
51
|
+
state: 'PENDING',
|
|
52
|
+
details: {
|
|
53
|
+
substatus: response.substatus ?? null,
|
|
54
|
+
substatusMessage: response.substatusMessage ?? null,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Phase 1: Active tracker (30s x 240 = 2 hours)
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
export class BridgeStatusTracker {
|
|
63
|
+
name = 'bridge';
|
|
64
|
+
maxAttempts = 240; // 240 x 30s = 2 hours
|
|
65
|
+
pollIntervalMs = 30_000; // 30 seconds
|
|
66
|
+
timeoutTransition = 'BRIDGE_MONITORING';
|
|
67
|
+
apiClient;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
this.apiClient = new LiFiApiClient(config);
|
|
70
|
+
}
|
|
71
|
+
async checkStatus(_txId, metadata) {
|
|
72
|
+
const txHash = metadata.txHash;
|
|
73
|
+
if (!txHash) {
|
|
74
|
+
return { state: 'PENDING', details: { error: 'No txHash in metadata' } };
|
|
75
|
+
}
|
|
76
|
+
const response = await this.apiClient.getStatus({
|
|
77
|
+
txHash,
|
|
78
|
+
bridge: metadata.bridge,
|
|
79
|
+
fromChain: metadata.fromChainId,
|
|
80
|
+
toChain: metadata.toChainId,
|
|
81
|
+
});
|
|
82
|
+
return mapLiFiStatus(response);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Phase 2: Reduced-frequency tracker (5min x 264 = 22 hours)
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
export class BridgeMonitoringTracker {
|
|
89
|
+
name = 'bridge-monitoring';
|
|
90
|
+
maxAttempts = 264; // 264 x 5min = 22 hours
|
|
91
|
+
pollIntervalMs = 300_000; // 5 minutes
|
|
92
|
+
timeoutTransition = 'TIMEOUT';
|
|
93
|
+
apiClient;
|
|
94
|
+
constructor(config) {
|
|
95
|
+
this.apiClient = new LiFiApiClient(config);
|
|
96
|
+
}
|
|
97
|
+
async checkStatus(_txId, metadata) {
|
|
98
|
+
const txHash = metadata.txHash;
|
|
99
|
+
if (!txHash) {
|
|
100
|
+
return { state: 'PENDING', details: { error: 'No txHash in metadata' } };
|
|
101
|
+
}
|
|
102
|
+
const response = await this.apiClient.getStatus({
|
|
103
|
+
txHash,
|
|
104
|
+
bridge: metadata.bridge,
|
|
105
|
+
fromChain: metadata.fromChainId,
|
|
106
|
+
toChain: metadata.toChainId,
|
|
107
|
+
});
|
|
108
|
+
return mapLiFiStatus(response);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=bridge-status-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-status-tracker.js","sourceRoot":"","sources":["../../../src/providers/lifi/bridge-status-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LI.FI cross-chain bridge configuration type, defaults, and chain ID mapping.
|
|
3
|
+
*
|
|
4
|
+
* Uses LI.FI API v1 for cross-chain bridge and swap aggregation.
|
|
5
|
+
* See: https://docs.li.fi/li.fi-api/get-a-quote
|
|
6
|
+
*/
|
|
7
|
+
export interface LiFiConfig {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
apiBaseUrl: string;
|
|
10
|
+
apiKey: string;
|
|
11
|
+
defaultSlippagePct: number;
|
|
12
|
+
maxSlippagePct: number;
|
|
13
|
+
requestTimeoutMs: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const LIFI_DEFAULTS: LiFiConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Maps WAIaaS chain/network names to LI.FI chain IDs.
|
|
18
|
+
* LI.FI uses numeric chain IDs for EVM and special numeric IDs for non-EVM.
|
|
19
|
+
* See: https://docs.li.fi/list-chains-bridges-dexs-solvers
|
|
20
|
+
*/
|
|
21
|
+
export declare const LIFI_CHAIN_MAP: ReadonlyMap<string, number>;
|
|
22
|
+
/**
|
|
23
|
+
* Get LI.FI chain ID for a WAIaaS chain name.
|
|
24
|
+
* @throws Error if chain is not supported by LI.FI integration.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getLiFiChainId(chain: string): number;
|
|
27
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/lifi/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa,EAAE,UAO3B,CAAC;AAMF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAerD,CAAC;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LI.FI cross-chain bridge configuration type, defaults, and chain ID mapping.
|
|
3
|
+
*
|
|
4
|
+
* Uses LI.FI API v1 for cross-chain bridge and swap aggregation.
|
|
5
|
+
* See: https://docs.li.fi/li.fi-api/get-a-quote
|
|
6
|
+
*/
|
|
7
|
+
export const LIFI_DEFAULTS = {
|
|
8
|
+
enabled: false,
|
|
9
|
+
apiBaseUrl: 'https://li.quest/v1',
|
|
10
|
+
apiKey: '',
|
|
11
|
+
defaultSlippagePct: 0.03, // 3% (cross-chain needs higher slippage)
|
|
12
|
+
maxSlippagePct: 0.05, // 5%
|
|
13
|
+
requestTimeoutMs: 15_000, // LI.FI route computation is slower than single-chain
|
|
14
|
+
};
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Chain ID mapping: WAIaaS chain names -> LI.FI chain IDs
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Maps WAIaaS chain/network names to LI.FI chain IDs.
|
|
20
|
+
* LI.FI uses numeric chain IDs for EVM and special numeric IDs for non-EVM.
|
|
21
|
+
* See: https://docs.li.fi/list-chains-bridges-dexs-solvers
|
|
22
|
+
*/
|
|
23
|
+
export const LIFI_CHAIN_MAP = new Map([
|
|
24
|
+
// Solana
|
|
25
|
+
['solana', 1151111081099710],
|
|
26
|
+
['solana-mainnet', 1151111081099710],
|
|
27
|
+
// EVM
|
|
28
|
+
['ethereum', 1],
|
|
29
|
+
['ethereum-mainnet', 1],
|
|
30
|
+
['polygon', 137],
|
|
31
|
+
['polygon-mainnet', 137],
|
|
32
|
+
['arbitrum', 42161],
|
|
33
|
+
['arbitrum-mainnet', 42161],
|
|
34
|
+
['optimism', 10],
|
|
35
|
+
['optimism-mainnet', 10],
|
|
36
|
+
['base', 8453],
|
|
37
|
+
['base-mainnet', 8453],
|
|
38
|
+
]);
|
|
39
|
+
/**
|
|
40
|
+
* Get LI.FI chain ID for a WAIaaS chain name.
|
|
41
|
+
* @throws Error if chain is not supported by LI.FI integration.
|
|
42
|
+
*/
|
|
43
|
+
export function getLiFiChainId(chain) {
|
|
44
|
+
const id = LIFI_CHAIN_MAP.get(chain.toLowerCase());
|
|
45
|
+
if (id === undefined) {
|
|
46
|
+
throw new Error(`Unsupported chain '${chain}' for LI.FI. Supported: ${[...LIFI_CHAIN_MAP.keys()].filter((k) => !k.includes('-')).join(', ')}`);
|
|
47
|
+
}
|
|
48
|
+
return id;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/lifi/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,qBAAqB;IACjC,MAAM,EAAE,EAAE;IACV,kBAAkB,EAAE,IAAI,EAAM,yCAAyC;IACvE,cAAc,EAAE,IAAI,EAAU,KAAK;IACnC,gBAAgB,EAAE,MAAM,EAAM,sDAAsD;CACrF,CAAC;AAEF,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgC,IAAI,GAAG,CAAC;IACjE,SAAS;IACT,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC5B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,MAAM;IACN,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACvB,CAAC,SAAS,EAAE,GAAG,CAAC;IAChB,CAAC,iBAAiB,EAAE,GAAG,CAAC;IACxB,CAAC,UAAU,EAAE,KAAK,CAAC;IACnB,CAAC,kBAAkB,EAAE,KAAK,CAAC;IAC3B,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACxB,CAAC,MAAM,EAAE,IAAI,CAAC;IACd,CAAC,cAAc,EAAE,IAAI,CAAC;CACvB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,sBAAsB,KAAK,2BAA2B,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9H,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IActionProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest } from '@waiaas/core';
|
|
2
|
+
import { type LiFiConfig } from './config.js';
|
|
3
|
+
export declare class LiFiActionProvider implements IActionProvider {
|
|
4
|
+
readonly metadata: ActionProviderMetadata;
|
|
5
|
+
readonly actions: readonly ActionDefinition[];
|
|
6
|
+
private readonly config;
|
|
7
|
+
constructor(config?: Partial<LiFiConfig>);
|
|
8
|
+
resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<ContractCallRequest[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Clamp slippage to [defaultSlippagePct, maxSlippagePct].
|
|
11
|
+
* Input is decimal (0.03 = 3%). If not provided or <= 0, use default.
|
|
12
|
+
* If > max, clamp to max.
|
|
13
|
+
*/
|
|
14
|
+
private clampSlippage;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/lifi/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,UAAU,EAAiC,MAAM,aAAa,CAAC;AAoB7E,qBAAa,kBAAmB,YAAW,eAAe;IACxD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC;IAiClC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoDjC;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAItB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LI.FI Cross-Chain Bridge Action Provider.
|
|
3
|
+
*
|
|
4
|
+
* Implements IActionProvider to resolve cross-chain bridge and swap requests
|
|
5
|
+
* into ContractCallRequest arrays via LI.FI /quote API.
|
|
6
|
+
*
|
|
7
|
+
* Both 'cross_swap' and 'bridge' actions use the same resolve logic —
|
|
8
|
+
* LI.FI /quote handles both cases. The distinction is semantic for AI agents:
|
|
9
|
+
* - bridge = same token across chains (e.g., USDC Ethereum -> USDC Base)
|
|
10
|
+
* - cross_swap = different tokens across chains (e.g., ETH -> Base USDC)
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { ChainError } from '@waiaas/core';
|
|
14
|
+
import { LiFiApiClient } from './lifi-api-client.js';
|
|
15
|
+
import { LIFI_DEFAULTS, getLiFiChainId } from './config.js';
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Input schema for cross_swap and bridge actions
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const LiFiCrossSwapInputSchema = z.object({
|
|
20
|
+
fromChain: z.string().min(1, 'fromChain is required (e.g., solana, ethereum, base)'),
|
|
21
|
+
toChain: z.string().min(1, 'toChain is required'),
|
|
22
|
+
fromToken: z.string().min(1, 'fromToken address or symbol is required'),
|
|
23
|
+
toToken: z.string().min(1, 'toToken address or symbol is required'),
|
|
24
|
+
fromAmount: z.string().min(1, 'fromAmount is required (in smallest units)'),
|
|
25
|
+
slippage: z.number().min(0).max(1).optional(), // decimal, e.g. 0.03 = 3%
|
|
26
|
+
toAddress: z.string().optional(), // defaults to fromAddress (context.walletAddress)
|
|
27
|
+
});
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Provider implementation
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export class LiFiActionProvider {
|
|
32
|
+
metadata;
|
|
33
|
+
actions;
|
|
34
|
+
config;
|
|
35
|
+
constructor(config) {
|
|
36
|
+
this.config = { ...LIFI_DEFAULTS, ...config };
|
|
37
|
+
this.metadata = {
|
|
38
|
+
name: 'lifi',
|
|
39
|
+
description: 'LI.FI cross-chain bridge and swap aggregator (100+ bridges, 40+ chains)',
|
|
40
|
+
version: '1.0.0',
|
|
41
|
+
chains: ['ethereum', 'solana'], // multi-chain provider
|
|
42
|
+
mcpExpose: true,
|
|
43
|
+
requiresApiKey: false, // LI.FI works without API key (rate limited)
|
|
44
|
+
requiredApis: ['lifi'],
|
|
45
|
+
};
|
|
46
|
+
this.actions = [
|
|
47
|
+
{
|
|
48
|
+
name: 'cross_swap',
|
|
49
|
+
description: 'Cross-chain bridge and swap via LI.FI aggregator. Moves tokens between different chains (e.g., SOL to Base USDC)',
|
|
50
|
+
chain: 'ethereum', // primary chain indicator (multi-chain works via fromChain/toChain params)
|
|
51
|
+
inputSchema: LiFiCrossSwapInputSchema,
|
|
52
|
+
riskLevel: 'high', // cross-chain operations are higher risk
|
|
53
|
+
defaultTier: 'DELAY',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'bridge',
|
|
57
|
+
description: 'Simple cross-chain bridge via LI.FI. Transfers same token between chains (e.g., USDC from Ethereum to Arbitrum)',
|
|
58
|
+
chain: 'ethereum',
|
|
59
|
+
inputSchema: LiFiCrossSwapInputSchema, // same schema
|
|
60
|
+
riskLevel: 'high',
|
|
61
|
+
defaultTier: 'DELAY',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
async resolve(actionName, params, context) {
|
|
66
|
+
// Validate action name
|
|
67
|
+
if (actionName !== 'cross_swap' && actionName !== 'bridge') {
|
|
68
|
+
throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
|
|
69
|
+
message: `Unknown action: ${actionName}. Supported: cross_swap, bridge`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Parse and validate input
|
|
73
|
+
const input = LiFiCrossSwapInputSchema.parse(params);
|
|
74
|
+
// Resolve LI.FI chain IDs (throws descriptive error for unsupported chains)
|
|
75
|
+
let fromChainId;
|
|
76
|
+
let toChainId;
|
|
77
|
+
try {
|
|
78
|
+
fromChainId = getLiFiChainId(input.fromChain);
|
|
79
|
+
toChainId = getLiFiChainId(input.toChain);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
throw new ChainError('INVALID_INSTRUCTION', 'ethereum', {
|
|
83
|
+
message: err.message,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Clamp slippage: default 3%, max 5% (decimal values for LI.FI API)
|
|
87
|
+
const slippage = this.clampSlippage(input.slippage);
|
|
88
|
+
// Create API client
|
|
89
|
+
const apiClient = new LiFiApiClient(this.config);
|
|
90
|
+
// Get quote from LI.FI /quote
|
|
91
|
+
const quote = await apiClient.getQuote({
|
|
92
|
+
fromChain: fromChainId,
|
|
93
|
+
toChain: toChainId,
|
|
94
|
+
fromToken: input.fromToken,
|
|
95
|
+
toToken: input.toToken,
|
|
96
|
+
fromAmount: input.fromAmount,
|
|
97
|
+
fromAddress: context.walletAddress,
|
|
98
|
+
slippage,
|
|
99
|
+
toAddress: input.toAddress,
|
|
100
|
+
});
|
|
101
|
+
// Build ContractCallRequest from the transactionRequest
|
|
102
|
+
const request = {
|
|
103
|
+
type: 'CONTRACT_CALL',
|
|
104
|
+
to: quote.transactionRequest.to,
|
|
105
|
+
calldata: quote.transactionRequest.data,
|
|
106
|
+
value: quote.transactionRequest.value,
|
|
107
|
+
};
|
|
108
|
+
return [request];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clamp slippage to [defaultSlippagePct, maxSlippagePct].
|
|
112
|
+
* Input is decimal (0.03 = 3%). If not provided or <= 0, use default.
|
|
113
|
+
* If > max, clamp to max.
|
|
114
|
+
*/
|
|
115
|
+
clampSlippage(input) {
|
|
116
|
+
if (!input || input <= 0)
|
|
117
|
+
return this.config.defaultSlippagePct;
|
|
118
|
+
return Math.min(input, this.config.maxSlippagePct);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/lifi/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LI.FI REST API client (v1).
|
|
3
|
+
* Wraps /quote and /status endpoints for cross-chain bridge operations.
|
|
4
|
+
*
|
|
5
|
+
* Auth is via x-lifi-api-key header (optional, relaxes rate limits).
|
|
6
|
+
*/
|
|
7
|
+
import { ActionApiClient } from '../../common/action-api-client.js';
|
|
8
|
+
import type { LiFiQuoteResponse, LiFiStatusResponse } from './schemas.js';
|
|
9
|
+
import type { LiFiConfig } from './config.js';
|
|
10
|
+
export declare class LiFiApiClient extends ActionApiClient {
|
|
11
|
+
constructor(config: LiFiConfig);
|
|
12
|
+
getQuote(params: {
|
|
13
|
+
fromChain: number;
|
|
14
|
+
toChain: number;
|
|
15
|
+
fromToken: string;
|
|
16
|
+
toToken: string;
|
|
17
|
+
fromAmount: string;
|
|
18
|
+
fromAddress: string;
|
|
19
|
+
slippage: number;
|
|
20
|
+
toAddress?: string;
|
|
21
|
+
}): Promise<LiFiQuoteResponse>;
|
|
22
|
+
getStatus(params: {
|
|
23
|
+
txHash: string;
|
|
24
|
+
bridge?: string;
|
|
25
|
+
fromChain?: number;
|
|
26
|
+
toChain?: number;
|
|
27
|
+
}): Promise<LiFiStatusResponse>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=lifi-api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifi-api-client.d.ts","sourceRoot":"","sources":["../../../src/providers/lifi/lifi-api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,aAAc,SAAQ,eAAe;gBACpC,MAAM,EAAE,UAAU;IAQxB,QAAQ,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAaxB,SAAS,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAUhC"}
|