UNPKG

@0xsplits/splits-sdk-react

Version:

React wrapper for the 0xSplits SDK

453 lines (361 loc) 12.4 kB
import { Log } from 'viem' import { useCallback, useContext, useState } from 'react' import { CreateSwapperConfig, UniV3FlashSwapConfig, SwapperExecCallsConfig, SwapperPauseConfig, SwapperSetBeneficiaryConfig, SwapperSetTokenToBeneficiaryConfig, SwapperSetOracleConfig, SwapperSetDefaultScaledOfferFactorConfig, SwapperSetScaledOfferFactorOverridesConfig, } from '@0xsplits/splits-sdk' import { SplitsContext } from '../context' import { ContractExecutionStatus, RequestError } from '../types' import { getSplitsClient } from '../utils' export const useCreateSwapper = (): { createSwapper: (arg0: CreateSwapperConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const createSwapper = useCallback( async (argsDict: CreateSwapperConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitCreateSwapperTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.createSwapper, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { createSwapper, status, txHash, error } } export const useUniV3FlashSwap = (): { uniV3FlashSwap: (arg0: UniV3FlashSwapConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const uniV3FlashSwap = useCallback( async (argsDict: UniV3FlashSwapConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitUniV3FlashSwapTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.uniV3FlashSwap, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { uniV3FlashSwap, status, txHash, error } } export const useSwapperExecCalls = (): { execCalls: (arg0: SwapperExecCallsConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const execCalls = useCallback( async (argsDict: SwapperExecCallsConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitExecCallsTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.execCalls, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { execCalls, status, txHash, error } } export const useSwapperPause = (): { setPaused: (arg0: SwapperPauseConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setPaused = useCallback( async (argsDict: SwapperPauseConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetPausedTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setPaused, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setPaused, status, txHash, error } } export const useSwapperSetBeneficiary = (): { setBeneficiary: ( arg0: SwapperSetBeneficiaryConfig, ) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setBeneficiary = useCallback( async (argsDict: SwapperSetBeneficiaryConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetBeneficiaryTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setBeneficiary, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setBeneficiary, status, txHash, error } } export const useSwapperSetTokenToBeneficiary = (): { setTokenToBeneficiary: ( arg0: SwapperSetTokenToBeneficiaryConfig, ) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setTokenToBeneficiary = useCallback( async (argsDict: SwapperSetTokenToBeneficiaryConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetTokenToBeneficiaryTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setTokenToBeneficiary, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setTokenToBeneficiary, status, txHash, error } } export const useSwapperSetOracle = (): { setOracle: (arg0: SwapperSetOracleConfig) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setOracle = useCallback( async (argsDict: SwapperSetOracleConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetOracleTransaction(argsDict) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setOracle, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setOracle, status, txHash, error } } export const useSwapperSetDefaultScaledOfferFactor = (): { setDefaultScaledOfferFactor: ( arg0: SwapperSetDefaultScaledOfferFactorConfig, ) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setDefaultScaledOfferFactor = useCallback( async (argsDict: SwapperSetDefaultScaledOfferFactorConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetDefaultScaledOfferFactorTransaction( argsDict, ) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setDefaultScaledOfferFactor, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setDefaultScaledOfferFactor, status, txHash, error } } export const useSwapperSetScaledOfferFactorOverrides = (): { setScaledOfferFactorOverrides: ( arg0: SwapperSetScaledOfferFactorOverridesConfig, ) => Promise<Log[] | undefined> status?: ContractExecutionStatus txHash?: string error?: RequestError } => { const context = useContext(SplitsContext) const splitsClient = getSplitsClient(context).swapper const [status, setStatus] = useState<ContractExecutionStatus>() const [txHash, setTxHash] = useState<string>() const [error, setError] = useState<RequestError>() const setScaledOfferFactorOverrides = useCallback( async (argsDict: SwapperSetScaledOfferFactorOverridesConfig) => { if (!splitsClient) throw new Error('Invalid chain id for swapper') try { setStatus('pendingApproval') setError(undefined) setTxHash(undefined) const { txHash: hash } = await splitsClient._submitSetScaledOfferFactorOverridesTransaction( argsDict, ) setStatus('txInProgress') setTxHash(hash) const events = await splitsClient.getTransactionEvents({ txHash: hash, eventTopics: splitsClient.eventTopics.setScaledOfferFactorOverrides, }) setStatus('complete') return events } catch (e) { setStatus('error') setError(e) } }, [splitsClient], ) return { setScaledOfferFactorOverrides, status, txHash, error } }