UNPKG

@lifi/types

Version:
194 lines 7.25 kB
import type { TypedData, TransactionRequest, SignedTypedData, ExecutionType } from './api.js'; import type { Token } from './tokens/index.js'; /** * How a fee was calculated / the role of the recipient in the split. * * - `FIXED` — a fixed LI.FI cut applied alongside the integrator's own fee. * - `SHARED` — a single shared pool divided between LI.FI and the integrator. * - `DYNAMIC` — fee resolved at quote time from configured rules (e.g. dynamic * stablecoin pricing). * - `INTERMEDIARY` — a third-party recipient that carves a configured share * from the integrator pool (e.g. a widget or aggregator). * - `DISTRIBUTION` — a partner-specified extra recipient added in parallel to * the integrator/intermediary split via the `distributionFees` request param. * * The union is expected to grow over time. When pattern-matching with a * `switch`, always include a `default` branch so adding a new value remains * a non-breaking minor for consumers. */ export type FeeSplitType = 'FIXED' | 'SHARED' | 'DYNAMIC' | 'INTERMEDIARY' | 'DISTRIBUTION'; export interface FeeRecipient { /** Recipient identifier. Polymorphic — interpret in conjunction with `type`: * - `'lifi'` for the LI.FI platform recipient, * - the integrator id (e.g. `'jumper'`) for the integrator recipient, * - the intermediary id (e.g. `'mesh'`) when `type === 'INTERMEDIARY'`, * - the recipient wallet address when `type === 'DISTRIBUTION'`. * * Do not display this value directly in user-facing UI without * `type`-aware formatting — for `DISTRIBUTION` rows the value is a * raw hex address. */ name: string; /** Absolute fee amount, a big number in source token base units (string-encoded). */ fee: string; /** Fee calculation type. Absent when not statically determinable (e.g. * an integrator entry whose `feeType` could not be resolved from the * matching planned fee cost). Consumers should null-check before reading. */ type?: FeeSplitType; /** Recipient wallet address on the source chain. */ walletAddress?: string; } export interface FeeSplit { /** LI.FI's slice of THIS `FeeCost.amount`. */ lifiFee: string; /** The integrator's slice of THIS `FeeCost.amount` — the integrator's * portion only, NOT including any intermediary or distribution amounts. */ integratorFee: string; /** The intermediary's slice of THIS `FeeCost.amount` when an intermediary * participates in the split. Absent otherwise. */ intermediaryFee?: string; /** Per-recipient breakdown of THIS `FeeCost.amount`. Source of truth for * new consumers — the aggregate fields above are disjoint slices kept * for backward compatibility with 2-recipient consumers. * * Note: partner-specified distribution recipients are emitted as * separate `FeeCost` entries (one per receiver, `name: "Fee Forward"`) * at quote/route estimation time. At status-response time the same * recipients may appear merged on the integrator's `FeeCost` for * compactness. Iterate `estimate.feeCosts[]` to discover all * recipients across both shapes. */ recipients?: FeeRecipient[]; } export interface FeeCost { name: string; description: string; percentage: string; token: Token; amount: string; amountUSD: string; included: boolean; feeSplit?: FeeSplit; } export interface GasCost { type: 'SUM' | 'APPROVE' | 'SEND' | 'FEE'; price: string; estimate: string; limit: string; amount: string; amountUSD: string; token: Token; } export interface Action { fromChainId: number; fromAmount: string; fromToken: Token; fromAddress?: string; toChainId: number; toToken: Token; toAddress?: string; slippage?: number; } export interface Estimate { tool: string; fromAmount: string; fromAmountUSD?: string; toAmount: string; toAmountMin: string; toAmountUSD?: string; approvalAddress: string; feeCosts?: FeeCost[]; /** This is a list to account for approval gas costs and transaction gas costs. However, approval gas costs are not integrated yet. */ gasCosts?: GasCost[]; /** Estimated duration in seconds */ executionDuration: number; /** Optional flag to indicate approval reset requirement for legacy ERC-20 tokens */ approvalReset?: boolean; /** Optional flag to skip approval in the cases where we only need to sign the message (e.g. Hyperliquid)*/ skipApproval?: boolean; /** Optional flag to skip permit usage when the tx doesn't include diamond interaction (some HyperEVM txs) */ skipPermit?: boolean; } export declare const _StepType: readonly ["lifi", "swap", "cross", "protocol", "custom"]; export type StepType = (typeof _StepType)[number]; export type StepTool = string; export type StepToolDetails = { key: string; name: string; logoURI: string; }; type StepInformationBase = { tool: string; type: string; action: Action; estimate: Estimate; }; export type StepInformation = StepInformationBase & { createdAt: Date; gasLimit: string; stepId: string; transactionId: string; intermediateActions: StepInformationBase[]; integrator?: string; relatedLifiSteps?: string[]; }; export interface StepBase { id: string; type: StepType; tool: StepTool; toolDetails: StepToolDetails; integrator?: string; /** Intermediary identifier set when the route was generated with a multi-party fee split. * Threaded through to /stepTransaction so the same split can be reproduced at tx-generation time. */ intermediary?: string; referrer?: string; action: Action; estimate?: Estimate; executionType?: ExecutionType; transactionRequest?: TransactionRequest; transactionId?: string; /** * EIP-712 Typed Data * @link https://eips.ethereum.org/EIPS/eip-712 */ typedData?: TypedData[]; } export interface DestinationCallInfo { toContractAddress: string; toContractCallData: string; toFallbackAddress: string; callDataGasLimit: string; } export type CallAction = Action & DestinationCallInfo; export interface SwapStep extends StepBase { type: 'swap'; action: Action; estimate: Estimate; } export interface CrossStep extends StepBase { type: 'cross'; action: Action; estimate: Estimate; } export interface ProtocolStep extends StepBase { type: 'protocol'; action: Action; estimate: Estimate; } export interface CustomStep extends StepBase { type: 'custom'; action: CallAction; estimate: Estimate; } export type Step = SwapStep | CrossStep | CustomStep | ProtocolStep; export interface LiFiStep extends Omit<Step, 'type'> { type: 'lifi'; includedSteps: Step[]; } export interface SignedLiFiStep extends LiFiStep { typedData: SignedTypedData[]; } export declare function isSwapStep(step: Step): step is SwapStep; export declare function isCrossStep(step: Step): step is CrossStep; export declare function isProtocolStep(step: Step): step is ProtocolStep; export declare function isCustomStep(step: Step): step is CustomStep; export {}; //# sourceMappingURL=step.d.ts.map