@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.
Files changed (45) hide show
  1. package/dist/common/async-status-tracker.d.ts +62 -0
  2. package/dist/common/async-status-tracker.d.ts.map +1 -0
  3. package/dist/common/async-status-tracker.js +30 -0
  4. package/dist/common/async-status-tracker.js.map +1 -0
  5. package/dist/index.d.ts +20 -4
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +70 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/providers/lifi/bridge-status-tracker.d.ts +37 -0
  10. package/dist/providers/lifi/bridge-status-tracker.d.ts.map +1 -0
  11. package/dist/providers/lifi/bridge-status-tracker.js +111 -0
  12. package/dist/providers/lifi/bridge-status-tracker.js.map +1 -0
  13. package/dist/providers/lifi/config.d.ts +27 -0
  14. package/dist/providers/lifi/config.d.ts.map +1 -0
  15. package/dist/providers/lifi/config.js +50 -0
  16. package/dist/providers/lifi/config.js.map +1 -0
  17. package/dist/providers/lifi/index.d.ts +16 -0
  18. package/dist/providers/lifi/index.d.ts.map +1 -0
  19. package/dist/providers/lifi/index.js +121 -0
  20. package/dist/providers/lifi/index.js.map +1 -0
  21. package/dist/providers/lifi/lifi-api-client.d.ts +29 -0
  22. package/dist/providers/lifi/lifi-api-client.d.ts.map +1 -0
  23. package/dist/providers/lifi/lifi-api-client.js +42 -0
  24. package/dist/providers/lifi/lifi-api-client.js.map +1 -0
  25. package/dist/providers/lifi/schemas.d.ts +713 -0
  26. package/dist/providers/lifi/schemas.d.ts.map +1 -0
  27. package/dist/providers/lifi/schemas.js +91 -0
  28. package/dist/providers/lifi/schemas.js.map +1 -0
  29. package/dist/providers/zerox-swap/config.d.ts +31 -0
  30. package/dist/providers/zerox-swap/config.d.ts.map +1 -0
  31. package/dist/providers/zerox-swap/config.js +70 -0
  32. package/dist/providers/zerox-swap/config.js.map +1 -0
  33. package/dist/providers/zerox-swap/index.d.ts +10 -0
  34. package/dist/providers/zerox-swap/index.d.ts.map +1 -0
  35. package/dist/providers/zerox-swap/index.js +131 -0
  36. package/dist/providers/zerox-swap/index.js.map +1 -0
  37. package/dist/providers/zerox-swap/schemas.d.ts +641 -0
  38. package/dist/providers/zerox-swap/schemas.d.ts.map +1 -0
  39. package/dist/providers/zerox-swap/schemas.js +59 -0
  40. package/dist/providers/zerox-swap/schemas.js.map +1 -0
  41. package/dist/providers/zerox-swap/zerox-api-client.d.ts +29 -0
  42. package/dist/providers/zerox-swap/zerox-api-client.d.ts.map +1 -0
  43. package/dist/providers/zerox-swap/zerox-api-client.js +43 -0
  44. package/dist/providers/zerox-swap/zerox-api-client.js.map +1 -0
  45. 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
- interface ActionsConfig {
15
- jupiter_swap?: Partial<import('./providers/jupiter-swap/config.js').JupiterSwapConfig>;
16
- [key: string]: unknown;
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
- export declare function registerBuiltInProviders(registry: ProviderRegistry, actionsConfig?: ActionsConfig): {
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
  };
@@ -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;AAIpD,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;AAG5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMrE,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,oCAAoC,EAAE,iBAAiB,CAAC,CAAC;IACvF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,aAAa,GAC5B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BzC"}
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 function registerBuiltInProviders(registry, actionsConfig) {
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
- factory: () => new JupiterSwapActionProvider(actionsConfig?.jupiter_swap),
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
- const cfg = actionsConfig?.[key];
19
- if (cfg?.enabled) {
75
+ for (const { key, enabledKey, factory } of providers) {
76
+ if (settingsReader.get(enabledKey) === 'true') {
20
77
  try {
21
- registry.register(factory());
22
- loaded.push(key);
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;AAE9E,6BAA6B;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG/F,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB1F,MAAM,UAAU,wBAAwB,CACtC,QAA0B,EAC1B,aAA6B;IAE7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,SAAS,GAA2D;QACxE;YACE,GAAG,EAAE,cAAc;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,aAAa,EAAE,YAAY,CAAC;SAC1E;KACF,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,GAAG,CAAsC,CAAC;QACtE,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,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"}