@openocean.finance/widget-types
Version:
Types for the OpenOcean Widget
159 lines (136 loc) • 3.49 kB
text/typescript
import type { TransactionRequest, TypedData } from './api.js'
import type { Token } from './tokens/index.js'
export interface FeeCost {
name: string
description: string
percentage: string
token: Token
amount: string
amountUSD: string
included: boolean
}
export interface GasCost {
type: 'SUM' | 'APPROVE' | 'SEND' | 'FEE'
price: string // suggested current standard price for chain
estimate: string // estimate how much gas will be needed
limit: string // suggested gas limit (estimate +25%)
amount: string // estimate * price = amount of tokens that will be needed
amountUSD: string // usd value of token amount
token: Token // the used gas token
}
// ACTION
export interface Action {
fromChainId: number
fromAmount: string
fromToken: Token
fromAddress?: string
toChainId: number
toToken: Token
toAddress?: string
slippage?: number
}
// ESTIMATE
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 used at the moment
gasCosts?: GasCost[]
// estimated duration in seconds
executionDuration: number
}
// STEP
export const _StepType = [
'openocean',
'swap',
'cross',
'protocol',
'custom',
] as const
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
relatedOpenOceanStep?: string[]
}
export interface StepBase {
id: string
type: StepType
tool: StepTool
toolDetails: StepToolDetails
integrator?: string
referrer?: string
action: Action
estimate?: Estimate
transactionRequest?: TransactionRequest
/**
* 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 OpenOceanStep extends Omit<Step, 'type'> {
type: 'swap' | 'bridge' | 'custom'
includedSteps: Step[]
}
export function isSwapStep(step: Step): step is SwapStep {
return step.type === 'swap'
}
export function isCrossStep(step: Step): step is CrossStep {
return step.type === 'cross'
}
export function isProtocolStep(step: Step): step is ProtocolStep {
return step.type === 'protocol'
}
export function isCustomStep(step: Step): step is CustomStep {
return step.type === 'custom'
}