import { type BUTTON_POSITION_TYPE } from "@toruslabs/base-controllers"; import { type SmartAccountType } from "@toruslabs/ethereum-controllers"; import { AuthConnectionConfigItem, type WhiteLabelData } from "@web3auth/auth"; import { type ChainNamespaceType, type CustomChainConfig } from "./chain/IChainInterface"; import { LOGIN_MODE, MODAL_SIGN_IN_METHODS, SMART_ACCOUNT_WALLET_SCOPE, WIDGET_TYPE } from "./constants"; import { WALLET_CONNECTOR_TYPE } from "./wallet"; export interface WhitelistResponse { urls: string[]; signed_urls: Record; } export interface IWeb3AuthState { cachedConnector: string | null; connectedConnectorName: WALLET_CONNECTOR_TYPE | null; currentChainId: string; idToken: string | null; } export type ChainsConfig = CustomChainConfig[]; export interface ExternalWalletsConfig { disableAllRecommendedWallets?: boolean; disableAllOtherWallets?: boolean; disabledWallets?: string[]; } export type SmartAccountWalletScope = (typeof SMART_ACCOUNT_WALLET_SCOPE)[keyof typeof SMART_ACCOUNT_WALLET_SCOPE]; export interface SmartAccountsConfig { smartAccountType: SmartAccountType; walletScope: SmartAccountWalletScope; chains: { chainId: string; bundlerConfig: { url: string; }; paymasterConfig?: { url: string; }; }[]; } export interface WalletUiConfig { enablePortfolioWidget?: boolean; enableConfirmationModal?: boolean; enableWalletConnect?: boolean; enableTokenDisplay?: boolean; enableNftDisplay?: boolean; enableShowAllTokensButton?: boolean; enableBuyButton?: boolean; enableSendButton?: boolean; enableSwapButton?: boolean; enableReceiveButton?: boolean; enableDefiPositionsDisplay?: boolean; portfolioWidgetPosition?: BUTTON_POSITION_TYPE; defaultPortfolio?: "token" | "nft" | "defi"; } export type ModalSignInMethodType = (typeof MODAL_SIGN_IN_METHODS)[keyof typeof MODAL_SIGN_IN_METHODS]; export type WidgetType = (typeof WIDGET_TYPE)[keyof typeof WIDGET_TYPE]; export interface LoginModalConfig { widgetType?: WidgetType; logoAlignment?: "left" | "center"; borderRadiusType?: "small" | "medium" | "large"; buttonRadiusType?: "pill" | "rounded" | "square"; signInMethods?: ModalSignInMethodType[]; addPreviousLoginHint?: boolean; displayInstalledExternalWallets?: boolean; displayExternalWalletsCount?: boolean; } export interface ProjectConfig { teamId: number; userDataIncludedInToken?: boolean; sessionTime?: number; enableKeyExport?: boolean; walletConnectProjectId?: string; whitelist?: WhitelistResponse; chains?: ChainsConfig; smartAccounts?: SmartAccountsConfig; walletUi?: WalletUiConfig; externalWalletAuth?: ExternalWalletsConfig; embeddedWalletAuth?: (AuthConnectionConfigItem & { isDefault?: boolean; })[]; whitelabel?: WhiteLabelData; loginModal?: LoginModalConfig; } export interface WalletRegistryItem { name: string; chains: string[]; walletConnect?: { sdks: string[]; }; app?: { browser?: string; android?: string; ios?: string; chrome?: string; firefox?: string; edge?: string; }; mobile?: { native?: string; universal?: string; inAppBrowser?: string; }; primaryColor?: string; injected?: { namespace: ChainNamespaceType; injected_id: string; }[]; imgExtension?: string; } export type LoginModeType = (typeof LOGIN_MODE)[keyof typeof LOGIN_MODE]; export type WalletRegistry = { others: Record; default: Record; };