import { createContext, createElement } from "react" import { AuthApiClient, PortalApiClient, RewardsApiClient } from "./api" import { ONE_SECOND_MS } from "./utils/time" export interface PassportContextValue { authApiClient: AuthApiClient portalApiClient: PortalApiClient rewardsApiClient: RewardsApiClient environment?: Environment accountDataRefetchInterval: number nativeBalanceRefetchInterval: number nativePriceRefetchInterval: number borrowDataRefetchInterval: number } export const PassportContext = createContext( undefined, ) type Environment = "mainnet" | "testnet" type PassportProviderProps = { children: React.ReactNode environment?: Environment authApiUrl?: string portalApiUrl?: string rewardsApiUrl?: string /** Time in milliseconds after which account data (like mats or mezo id) in * dropdown should be re-fetched. Default is 60000 (60 secs) */ accountDataRefetchInterval?: number /** Time in milliseconds after which native token balance in dropdown should * be re-fetched. Default is 60000 (60 secs). */ nativeBalanceRefetchInterval?: number /** Time in milliseconds after which native token price in dropdown should be * re-fetched. Default is 60000 (60 secs). */ nativePriceRefetchInterval?: number /** Time in milliseconds after which borrow data in dropdown should be * re-fetched. Default is 60000 (60 secs) * price. */ borrowDataRefetchInterval?: number } export function PassportProvider({ environment, authApiUrl, portalApiUrl, rewardsApiUrl, children, accountDataRefetchInterval = 60 * ONE_SECOND_MS, nativeBalanceRefetchInterval = 60 * ONE_SECOND_MS, nativePriceRefetchInterval = 60 * ONE_SECOND_MS, borrowDataRefetchInterval = 60 * ONE_SECOND_MS, }: PassportProviderProps) { if (environment && !["mainnet", "testnet"].includes(environment)) { throw new Error("Wrong environment passed to PassportProvider.") } return createElement( PassportContext.Provider, { value: { authApiClient: new AuthApiClient(environment ?? "mainnet", authApiUrl), portalApiClient: new PortalApiClient( environment ?? "mainnet", portalApiUrl, ), rewardsApiClient: new RewardsApiClient( environment ?? "mainnet", rewardsApiUrl, ), environment, accountDataRefetchInterval, nativeBalanceRefetchInterval, nativePriceRefetchInterval, borrowDataRefetchInterval, }, }, children, ) }