@waiaas/actions 2.6.0-rc.7 → 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 +20 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -7
- 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/dist/providers/zerox-swap/config.d.ts +31 -0
- package/dist/providers/zerox-swap/config.d.ts.map +1 -0
- package/dist/providers/zerox-swap/config.js +70 -0
- package/dist/providers/zerox-swap/config.js.map +1 -0
- package/dist/providers/zerox-swap/index.d.ts +10 -0
- package/dist/providers/zerox-swap/index.d.ts.map +1 -0
- package/dist/providers/zerox-swap/index.js +131 -0
- package/dist/providers/zerox-swap/index.js.map +1 -0
- package/dist/providers/zerox-swap/schemas.d.ts +641 -0
- package/dist/providers/zerox-swap/schemas.d.ts.map +1 -0
- package/dist/providers/zerox-swap/schemas.js +59 -0
- package/dist/providers/zerox-swap/schemas.js.map +1 -0
- package/dist/providers/zerox-swap/zerox-api-client.d.ts +29 -0
- package/dist/providers/zerox-swap/zerox-api-client.d.ts.map +1 -0
- package/dist/providers/zerox-swap/zerox-api-client.js +43 -0
- package/dist/providers/zerox-swap/zerox-api-client.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
|
@@ -8,17 +8,33 @@ import type { IActionProvider } from '@waiaas/core';
|
|
|
8
8
|
export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
9
9
|
export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
|
|
10
10
|
export type { JupiterSwapConfig } from './providers/jupiter-swap/config.js';
|
|
11
|
+
export { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
12
|
+
export { ALLOWANCE_HOLDER_ADDRESSES, ZEROX_SWAP_DEFAULTS, CHAIN_ID_MAP, getAllowanceHolderAddress } from './providers/zerox-swap/config.js';
|
|
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';
|
|
11
19
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
12
20
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
13
21
|
export type { SlippageBps, SlippagePct } from './common/slippage.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
export { BRIDGE_STATUS_VALUES, BridgeStatusEnum, } from './common/async-status-tracker.js';
|
|
23
|
+
export type { IAsyncStatusTracker, AsyncTrackingResult, BridgeStatus, } from './common/async-status-tracker.js';
|
|
24
|
+
/** Minimal settings reader interface compatible with SettingsService.get(). */
|
|
25
|
+
export interface SettingsReader {
|
|
26
|
+
get(key: string): string;
|
|
17
27
|
}
|
|
18
28
|
interface ProviderRegistry {
|
|
19
29
|
register(provider: IActionProvider): void;
|
|
20
30
|
}
|
|
21
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Register built-in DeFi action providers from Admin Settings.
|
|
33
|
+
*
|
|
34
|
+
* Reads provider config from SettingsReader (DB > config.toml > default fallback chain).
|
|
35
|
+
* Each provider is registered when its `actions.{name}_enabled` setting is 'true'.
|
|
36
|
+
*/
|
|
37
|
+
export declare function registerBuiltInProviders(registry: ProviderRegistry, settingsReader: SettingsReader): {
|
|
22
38
|
loaded: string[];
|
|
23
39
|
skipped: string[];
|
|
24
40
|
};
|
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,25 +1,88 @@
|
|
|
1
1
|
import { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
2
|
+
import { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
3
|
+
import { LiFiActionProvider } from './providers/lifi/index.js';
|
|
2
4
|
// Re-export provider classes
|
|
3
5
|
export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
|
|
4
6
|
export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
|
|
7
|
+
export { ZeroExSwapActionProvider } from './providers/zerox-swap/index.js';
|
|
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';
|
|
5
13
|
// Re-export common utilities
|
|
6
14
|
export { ActionApiClient } from './common/action-api-client.js';
|
|
7
15
|
export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
|
|
8
|
-
export
|
|
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';
|
|
18
|
+
/**
|
|
19
|
+
* Register built-in DeFi action providers from Admin Settings.
|
|
20
|
+
*
|
|
21
|
+
* Reads provider config from SettingsReader (DB > config.toml > default fallback chain).
|
|
22
|
+
* Each provider is registered when its `actions.{name}_enabled` setting is 'true'.
|
|
23
|
+
*/
|
|
24
|
+
export function registerBuiltInProviders(registry, settingsReader) {
|
|
9
25
|
const loaded = [];
|
|
10
26
|
const skipped = [];
|
|
11
27
|
const providers = [
|
|
12
28
|
{
|
|
13
29
|
key: 'jupiter_swap',
|
|
14
|
-
|
|
30
|
+
enabledKey: 'actions.jupiter_swap_enabled',
|
|
31
|
+
factory: () => {
|
|
32
|
+
const config = {
|
|
33
|
+
enabled: true,
|
|
34
|
+
apiBaseUrl: settingsReader.get('actions.jupiter_swap_api_base_url'),
|
|
35
|
+
apiKey: settingsReader.get('actions.jupiter_swap_api_key'),
|
|
36
|
+
defaultSlippageBps: Number(settingsReader.get('actions.jupiter_swap_default_slippage_bps')),
|
|
37
|
+
maxSlippageBps: Number(settingsReader.get('actions.jupiter_swap_max_slippage_bps')),
|
|
38
|
+
maxPriceImpactPct: Number(settingsReader.get('actions.jupiter_swap_max_price_impact_pct')),
|
|
39
|
+
jitoTipLamports: Number(settingsReader.get('actions.jupiter_swap_jito_tip_lamports')),
|
|
40
|
+
requestTimeoutMs: Number(settingsReader.get('actions.jupiter_swap_request_timeout_ms')),
|
|
41
|
+
};
|
|
42
|
+
return new JupiterSwapActionProvider(config);
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: 'zerox_swap',
|
|
47
|
+
enabledKey: 'actions.zerox_swap_enabled',
|
|
48
|
+
factory: () => {
|
|
49
|
+
const config = {
|
|
50
|
+
enabled: true,
|
|
51
|
+
apiKey: settingsReader.get('actions.zerox_swap_api_key'),
|
|
52
|
+
defaultSlippageBps: Number(settingsReader.get('actions.zerox_swap_default_slippage_bps')),
|
|
53
|
+
maxSlippageBps: Number(settingsReader.get('actions.zerox_swap_max_slippage_bps')),
|
|
54
|
+
requestTimeoutMs: Number(settingsReader.get('actions.zerox_swap_request_timeout_ms')),
|
|
55
|
+
};
|
|
56
|
+
return new ZeroExSwapActionProvider(config);
|
|
57
|
+
},
|
|
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
|
+
},
|
|
15
73
|
},
|
|
16
74
|
];
|
|
17
|
-
for (const { key, factory } of providers) {
|
|
18
|
-
|
|
19
|
-
if (cfg?.enabled) {
|
|
75
|
+
for (const { key, enabledKey, factory } of providers) {
|
|
76
|
+
if (settingsReader.get(enabledKey) === 'true') {
|
|
20
77
|
try {
|
|
21
|
-
|
|
22
|
-
|
|
78
|
+
const provider = factory();
|
|
79
|
+
if (provider) {
|
|
80
|
+
registry.register(provider);
|
|
81
|
+
loaded.push(key);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
skipped.push(key);
|
|
85
|
+
}
|
|
23
86
|
}
|
|
24
87
|
catch (err) {
|
|
25
88
|
console.warn(`Built-in provider '${key}' registration failed:`, err);
|
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;
|
|
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"}
|