@orderly.network/vaults 2.6.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pages/index.tsx","../src/store/vaultsStore.ts","../src/api/request.ts","../src/api/api.ts","../src/components/all-vaults/all-vaults.desktop.tsx","../src/components/vault-card/vaultCard.script.ts","../src/api/env.ts","../src/hooks/useSVAPIUrl.ts","../src/components/vault-operation/depositAndWithdraw/index.tsx","../src/components/vault-operation/deposit/vault-deposit-form.script.ts","../src/types/vault.ts","../src/components/vault-operation/depositAndWithdraw/operation.script.ts","../src/contract/index.ts","../src/utils/operationPayload.ts","../src/components/vault-operation/depositAndWithdraw/latest.script.ts","../src/components/vault-operation/deposit/vault-deposit-form.ui.tsx","../src/components/vault-operation/latest-deposit/latest-deposit.script.ts","../src/components/vault-operation/latest-deposit/latest-deposit.ui.tsx","../src/utils/getOperationStatusColor.ts","../src/components/vault-operation/latest-deposit/latest-deposit.widget.tsx","../src/components/vault-operation/deposit/vault-deposit-form.widget.tsx","../src/components/vault-operation/withdraw/vault-withdraw-form.script.ts","../src/components/vault-operation/withdraw/vault-withdraw-form.ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-script.ts","../src/components/vault-operation/latest-withdraw/latest-withdraw-ui.tsx","../src/components/vault-operation/withdraw/withdraw-process.ui.tsx","../src/components/vault-operation/latest-withdraw/latest-withdraw-widget.tsx","../src/components/vault-operation/withdraw/vault-withdraw-form.widget.tsx","../src/components/vault-card/constants.ts","../src/components/vault-card/vaultCard.ui.tsx","../src/components/vault-card/vaultCard.widget.tsx","../src/components/all-vaults/all-vaults.widget.tsx","../src/components/provider/vaults-provider.tsx","../src/components/vaults-header/vaults-header.desktop.tsx","../src/components/vaults-header/vaults-header.script.ts","../src/components/vaults-header/vaults-header.widget.tsx","../src/components/vaults-introduction/vaults-introduction.desktop.tsx","../src/components/vaults-introduction/vaults-introduction.script.ts","../src/components/vaults-introduction/vaults-introduction.widget.tsx"],"names":["cn","create","VaultsApiError","message","code","status","response","buildQueryString","params","filteredParams","filterUndefinedParams","searchParams","key","value","filtered","objKey","objValue","appendQueryParams","url","queryString","separator","RequestClient","interceptor","timeout","controller","defaultHeaders","customHeaders","ms","resolve","config","processedConfig","fullUrl","timeoutController","retry","retryDelay","validateStatus","baseURL","data","method","fetchOptions","finalFetchOptions","lastError","attempt","errorMessage","errorCode","errorData","responseData","processedData","apiResponse","error","defaultClient","request_default","getVaultInfo","baseUrl","getVaultLpPerformance","getVaultLpInfo","useVaultsStore","set","get","state","useVaultInfoState","useVaultLpPerformanceState","useVaultLpInfoState","useVaultInfoActions","useVaultLpPerformanceActions","useVaultLpInfoActions","useVaultLpPerformanceById","vaultId","useVaultLpInfoById","useVaultLpPerformanceIds","useVaultLpInfoIds","useVaultLpPerformanceArray","useVaultLpInfoArray","useTranslation","useEffect","useMemo","useAccount","useCollateral","useGetEnv","modal","VAULTS_API_URLS","VAULTS_WEBSITE_URLS","useSVApiUrl","env","useState","ArrowDownSquareFillIcon","ArrowUpSquareFillIcon","registerSimpleDialog","registerSimpleSheet","TabPanel","Tabs","useTokenInfo","Decimal","RoleType","OperationType","useMutation","toast","VAULTS_CONTRACT_ADDRESSES","getToAccountPayloadType","type","role","usePrivateQuery","useLatestOperationScript","props","operationHistory","mutateOperationHistory","useOperationScript","account","verifyingContract","postVaultOperation","refetchOperationHistory","amount","requestParams","signatured","res","useVaultDepositFormScript","quantity","setQuantity","vaultInfo","handleOperation","holding","availableBalance","h","sharePrice","v","shares","handleDeposit","token","sourceToken","Box","Text","Button","BrokerWallet","QuantityInput","AvailableQuantity","useLatestDepositScript","latestOperation","TokenIcon","getOperationStatusColor","jsx","jsxs","LatestDepositUI","t","LatestDepositWidget","VaultDepositForm","onQuantityChange","maxQuantity","VaultDepositWidget","useVaultWithdrawFormScript","vaultLpInfo","receivingAmount","SimpleDialog","useModal","useLatestWithdrawScript","Fragment","ProcessDot","ProcessLine","ProcessText","children","className","WithdrawProcess","WithdrawProcessWidget","LatestWithdrawUI","LatestWithdrawWidget","VaultWithdrawForm","handleWithdraw","handleInitialWithdraw","WithdrawInitialDialog","WithdrawKVItem","label","suffix","currency","visible","hide","onOpenChange","VaultWithdrawWidget","VaultDepositAndWithdrawWithDialogId","VaultDepositAndWithdrawWithSheetId","VaultDepositAndWithdraw","activeTab","setActiveTab","ORDERLY_ICON","ORDERLY_VAULT_TITLE","ORDERLY_VAULT_DESCRIPTION","useVaultCardScript","vault","fetchVaultLpInfo","svApiUrl","memoizedAvailableBalance","lpInfo","info","isEVMConnected","isWrongNetwork","openDepositAndWithdraw","openVaultWebsite","ArrowRightUpSquareFillIcon","AuthGuard","VaultCard","title","description","supportVaultsList","chain","index","VaultInfoItem","LpInfoItem","VaultCardOperation","textProps","VaultCardWidget","AllVaultsDesktop","vaults","AllVaultsWidget","vaultsInfo","VaultsProvider","fetchVaultInfo","setVaultsPageConfig","useConfig","VaultsHeaderDesktop","supportVaults","headerImage","brokerName","headerImageElement","uniqBy","useVaultsHeaderScript","vaultsPageConfig","array","item","VaultsHeaderWidget","Divider","VaultsIntroductionDesktop","VaultsIntroductionItem","useVaultsIntroductionScript","tvl","acc","lpCount","VaultsIntroductionWidget","VaultsPage"],"mappings":"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","sourcesContent":["import { FC } from \"react\";\nimport { cn } from \"@orderly.network/ui\";\nimport { AllVaultsWidget } from \"../components/all-vaults/all-vaults.widget\";\nimport { VaultsProvider } from \"../components/provider/vaults-provider\";\nimport { VaultsHeaderWidget } from \"../components/vaults-header\";\nimport { VaultsIntroductionWidget } from \"../components/vaults-introduction\";\nimport { VaultsPageConfig } from \"../types/vault\";\n\nexport type VaultsPageProps = {\n className?: string;\n config?: VaultsPageConfig;\n};\n\nexport const VaultsPage: FC<VaultsPageProps> = (props) => {\n return (\n <VaultsProvider {...props}>\n <div\n className={cn(\n \"oui-relative oui-min-h-screen oui-px-6 oui-py-12\",\n \"oui-bg-base-10\",\n props?.className,\n )}\n >\n <div\n id=\"vaults-content\"\n className=\"oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col oui-gap-[48px]\"\n >\n <VaultsHeaderWidget />\n <VaultsIntroductionWidget />\n <AllVaultsWidget />\n </div>\n </div>\n </VaultsProvider>\n );\n};\n","import { create } from \"zustand\";\nimport {\n getVaultInfo,\n getVaultLpPerformance,\n getVaultLpInfo,\n} from \"../api/api\";\nimport type {\n VaultInfoResponse,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n} from \"../api/api\";\nimport type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultsPageConfig,\n} from \"../types/vault\";\n\n// Store state interface\ninterface VaultsState {\n // Base URL for API requests\n baseUrl: string;\n\n // Vault info state\n vaultInfo: {\n data: VaultInfo[];\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n };\n\n // Vault LP performance state\n vaultLpPerformance: {\n data: Record<string, VaultLpPerformance[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultPerformanceParams | null;\n };\n\n // Vault LP info state\n vaultLpInfo: {\n data: Record<string, VaultLpInfo[]>;\n loading: boolean;\n error: string | null;\n lastUpdated: number | null;\n params: VaultLpInfoParams | null;\n };\n\n // Vaults page config state\n vaultsPageConfig: VaultsPageConfig | null;\n\n // Actions\n setBaseUrl: (baseUrl: string) => void;\n fetchVaultInfo: (baseUrl?: string) => Promise<void>;\n refreshVaultInfo: () => Promise<void>;\n\n fetchVaultLpPerformance: (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpPerformance: () => Promise<void>;\n\n fetchVaultLpInfo: (\n params: VaultLpInfoParams,\n baseUrl?: string,\n ) => Promise<void>;\n refreshVaultLpInfo: () => Promise<void>;\n\n setVaultsPageConfig: (config: VaultsPageConfig) => void;\n}\n\n// Create the store\nexport const useVaultsStore = create<VaultsState>((set, get) => ({\n // Initial state\n baseUrl: \"\",\n\n vaultInfo: {\n data: [],\n loading: false,\n error: null,\n lastUpdated: null,\n },\n\n vaultLpPerformance: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultLpInfo: {\n data: {},\n loading: false,\n error: null,\n lastUpdated: null,\n params: null,\n },\n\n vaultsPageConfig: null,\n\n // Set base URL\n setBaseUrl: (baseUrl: string) => {\n set({ baseUrl });\n },\n\n // Vault info actions\n fetchVaultInfo: async (baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultInfo: {\n ...state.vaultInfo,\n loading: true,\n error: null,\n },\n }));\n\n try {\n const response: VaultInfoResponse = await getVaultInfo(url);\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n data: response.rows,\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultInfo: {\n ...state.vaultInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault info\",\n },\n }));\n }\n },\n\n refreshVaultInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data and have baseUrl\n if (state.vaultInfo.lastUpdated && state.baseUrl) {\n await state.fetchVaultInfo();\n }\n },\n\n // Vault LP performance actions\n fetchVaultLpPerformance: async (\n params: VaultPerformanceParams,\n baseUrl?: string,\n ) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpPerformanceResponse = await getVaultLpPerformance(\n url,\n params,\n );\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n data: {\n ...state.vaultLpPerformance.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpPerformance: {\n ...state.vaultLpPerformance,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP performance\",\n },\n }));\n }\n },\n\n refreshVaultLpPerformance: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpPerformance.lastUpdated &&\n state.vaultLpPerformance.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpPerformance(state.vaultLpPerformance.params);\n }\n },\n\n // Vault LP info actions\n fetchVaultLpInfo: async (params: VaultLpInfoParams, baseUrl?: string) => {\n const state = get();\n const url = baseUrl || state.baseUrl;\n\n if (!url) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n error: \"Base URL is required\",\n },\n }));\n return;\n }\n\n set((state) => ({\n baseUrl: baseUrl || state.baseUrl,\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: true,\n error: null,\n params,\n },\n }));\n\n try {\n const response: VaultLpInfoResponse = await getVaultLpInfo(url, params);\n\n // Store the rows array with vault_id as key\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n data: {\n ...state.vaultLpInfo.data,\n [params.vault_id]: response.rows,\n },\n loading: false,\n error: null,\n lastUpdated: Date.now(),\n },\n }));\n } catch (error) {\n set((state) => ({\n vaultLpInfo: {\n ...state.vaultLpInfo,\n loading: false,\n error:\n error instanceof Error\n ? error.message\n : \"Failed to fetch vault LP info\",\n },\n }));\n }\n },\n\n refreshVaultLpInfo: async () => {\n const state = get();\n // Only refresh if we have previously fetched data, have params, and have baseUrl\n if (\n state.vaultLpInfo.lastUpdated &&\n state.vaultLpInfo.params &&\n state.baseUrl\n ) {\n await state.fetchVaultLpInfo(state.vaultLpInfo.params);\n }\n },\n\n setVaultsPageConfig: (config: VaultsPageConfig) => {\n set({ vaultsPageConfig: config });\n },\n}));\n\n// Selector hooks for easier access to specific parts of the state\nexport const useVaultInfoState = () =>\n useVaultsStore((state) => state.vaultInfo);\nexport const useVaultLpPerformanceState = () =>\n useVaultsStore((state) => state.vaultLpPerformance);\nexport const useVaultLpInfoState = () =>\n useVaultsStore((state) => state.vaultLpInfo);\n\n// Action hooks for easier access to actions\nexport const useVaultInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultInfo: state.fetchVaultInfo,\n refreshVaultInfo: state.refreshVaultInfo,\n }));\n\nexport const useVaultLpPerformanceActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpPerformance: state.fetchVaultLpPerformance,\n refreshVaultLpPerformance: state.refreshVaultLpPerformance,\n }));\n\nexport const useVaultLpInfoActions = () =>\n useVaultsStore((state) => ({\n fetchVaultLpInfo: state.fetchVaultLpInfo,\n refreshVaultLpInfo: state.refreshVaultLpInfo,\n }));\n\n// Selector hooks for accessing data by vault_id\nexport const useVaultLpPerformanceById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpPerformance.data[vaultId]);\n\nexport const useVaultLpInfoById = (vaultId: string) =>\n useVaultsStore((state) => state.vaultLpInfo.data[vaultId]);\n\n// Selector hooks for getting all vault_ids that have data\nexport const useVaultLpPerformanceIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpPerformance.data));\n\nexport const useVaultLpInfoIds = () =>\n useVaultsStore((state) => Object.keys(state.vaultLpInfo.data));\n\n// Selector hooks for getting all data as flat arrays (for backward compatibility)\nexport const useVaultLpPerformanceArray = () =>\n useVaultsStore((state) =>\n Object.values(state.vaultLpPerformance.data).flat(),\n );\n\nexport const useVaultLpInfoArray = () =>\n useVaultsStore((state) => Object.values(state.vaultLpInfo.data).flat());\n","// API response interface for consistent response structure\nexport interface ApiResponse<T = unknown> {\n success: boolean;\n data: T;\n message?: string;\n code?: string | number;\n}\n\n// Query parameters type - flexible to accept any parameter object\nexport type QueryParams = Record<string, any>;\n\n// Request interceptor function type\nexport type RequestInterceptor = (\n config: SimpleRequestConfig,\n) => SimpleRequestConfig | Promise<SimpleRequestConfig>;\n\n// Response interceptor function type\nexport type ResponseInterceptor<T = unknown> = (\n response: Response,\n data: unknown,\n) => T | Promise<T>;\n\n// Error class for API errors\nexport class VaultsApiError extends Error {\n constructor(\n message: string,\n public readonly code?: string | number,\n public readonly status?: number,\n public readonly response?: Response,\n ) {\n super(message);\n this.name = \"VaultsApiError\";\n }\n}\n\n// Utility functions for query parameter handling\nfunction buildQueryString(params: QueryParams): string {\n const filteredParams = filterUndefinedParams(params);\n const searchParams = new URLSearchParams();\n\n Object.entries(filteredParams).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n\n return searchParams.toString();\n}\n\nfunction filterUndefinedParams(\n params: QueryParams,\n): Record<string, string | number | boolean> {\n const filtered: Record<string, string | number | boolean> = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle different value types\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n filtered[key] = value;\n } else if (typeof value === \"object\" && value !== null) {\n // For objects, flatten their properties into the query string\n const objEntries = Object.entries(value as Record<string, unknown>);\n objEntries.forEach(([objKey, objValue]) => {\n if (\n objValue !== undefined &&\n objValue !== null &&\n (typeof objValue === \"string\" ||\n typeof objValue === \"number\" ||\n typeof objValue === \"boolean\")\n ) {\n filtered[objKey] = objValue;\n }\n });\n }\n }\n });\n\n return filtered;\n}\n\nfunction appendQueryParams(url: string, params?: QueryParams): string {\n if (!params || Object.keys(params).length === 0) {\n return url;\n }\n\n const queryString = buildQueryString(params);\n if (!queryString) {\n return url;\n }\n\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}${queryString}`;\n}\n\n// Simplified config interface for all requests\nexport interface SimpleRequestConfig extends Omit<RequestInit, \"method\"> {\n baseURL?: string;\n params?: QueryParams;\n timeout?: number;\n retry?: number;\n retryDelay?: number;\n validateStatus?: (status: number) => boolean;\n data?: unknown;\n method?: string; // Allow method to be set internally\n}\n\n// Request client class for better organization and configurability\nclass RequestClient {\n private requestInterceptors: RequestInterceptor[] = [];\n private responseInterceptors: ResponseInterceptor[] = [];\n private defaultConfig: SimpleRequestConfig = {\n timeout: 10000,\n retry: 3,\n retryDelay: 1000,\n validateStatus: (status) => status >= 200 && status < 300,\n // mode: 'cors',\n // credentials: 'include',\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n\n // Add request interceptor\n addRequestInterceptor(interceptor: RequestInterceptor): void {\n this.requestInterceptors.push(interceptor);\n }\n\n // Add response interceptor\n addResponseInterceptor(interceptor: ResponseInterceptor): void {\n this.responseInterceptors.push(interceptor);\n }\n\n // Create timeout controller\n private createTimeoutController(timeout: number): AbortController {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), timeout);\n return controller;\n }\n\n // Merge headers\n private mergeHeaders(\n defaultHeaders: HeadersInit = {},\n customHeaders: HeadersInit = {},\n ): HeadersInit {\n return {\n ...defaultHeaders,\n ...customHeaders,\n };\n }\n\n // Sleep utility for retry delay\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Main request method\n async request<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n // Merge configurations\n const finalConfig: SimpleRequestConfig = {\n ...this.defaultConfig,\n ...config,\n headers: this.mergeHeaders(this.defaultConfig.headers, config.headers),\n };\n\n // Apply request interceptors\n let processedConfig = finalConfig;\n for (const interceptor of this.requestInterceptors) {\n processedConfig = await interceptor(processedConfig);\n }\n\n // Construct full URL if baseURL is provided\n let fullUrl = url;\n if (\n typeof url === \"string\" &&\n !url.startsWith(\"http\") &&\n processedConfig.baseURL\n ) {\n fullUrl = `${processedConfig.baseURL}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // Handle query parameters for GET requests or when params are provided\n if (processedConfig.params) {\n fullUrl =\n typeof fullUrl === \"string\"\n ? appendQueryParams(fullUrl, processedConfig.params)\n : fullUrl;\n }\n\n // Setup timeout if specified\n let timeoutController: AbortController | undefined;\n if (processedConfig.timeout && processedConfig.timeout > 0) {\n timeoutController = this.createTimeoutController(processedConfig.timeout);\n processedConfig.signal = timeoutController.signal;\n }\n\n // Extract custom config options and pass only standard RequestInit options to fetch\n\n const {\n retry = 0,\n retryDelay = 1000,\n validateStatus,\n params,\n baseURL,\n timeout,\n data,\n method,\n ...fetchOptions\n } = processedConfig;\n\n // Prepare final fetch options\n const finalFetchOptions: RequestInit = {\n ...fetchOptions,\n method,\n };\n\n // Handle data for POST/PUT/PATCH requests\n if (data !== undefined) {\n finalFetchOptions.body =\n typeof data === \"string\" ? data : JSON.stringify(data);\n }\n\n let lastError: Error;\n\n // Retry logic\n for (let attempt = 0; attempt <= retry; attempt++) {\n try {\n const response = await fetch(fullUrl, finalFetchOptions);\n\n // Check if status is valid\n if (!validateStatus!(response.status)) {\n let errorMessage = response.statusText;\n let errorCode: string | number | undefined;\n\n try {\n const errorData = await response.json();\n errorMessage = errorData.message || errorData.code || errorMessage;\n errorCode = errorData.code;\n } catch {\n // If can't parse JSON, use status text\n }\n\n throw new VaultsApiError(\n errorMessage,\n errorCode,\n response.status,\n response,\n );\n }\n\n // Parse JSON response\n let responseData: unknown;\n try {\n responseData = await response.json();\n } catch {\n throw new VaultsApiError(\n \"Invalid JSON response\",\n \"PARSE_ERROR\",\n response.status,\n response,\n );\n }\n\n // Apply response interceptors\n let processedData = responseData;\n for (const interceptor of this.responseInterceptors) {\n processedData = await interceptor(response, processedData);\n }\n\n // Handle API response format\n if (typeof processedData === \"object\" && processedData !== null) {\n if (\"success\" in processedData) {\n const apiResponse = processedData as ApiResponse<T>;\n if (apiResponse.success) {\n return apiResponse.data;\n } else {\n throw new VaultsApiError(\n apiResponse.message || \"API request failed\",\n apiResponse.code,\n response.status,\n response,\n );\n }\n }\n }\n\n // Return processed data directly if no success field\n return processedData as T;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Don't retry on certain errors\n if (\n error instanceof VaultsApiError ||\n (error as Error)?.name === \"AbortError\" ||\n attempt === retry\n ) {\n throw lastError;\n }\n\n // Wait before retry\n if (attempt < retry) {\n await this.sleep(retryDelay);\n }\n } finally {\n // Clean up timeout controller\n timeoutController?.abort();\n }\n }\n\n throw lastError!;\n }\n\n // Simplified HTTP methods - all accept a single config object\n async get<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"GET\" });\n }\n\n async post<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"POST\" });\n }\n\n async put<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PUT\" });\n }\n\n async delete<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"DELETE\" });\n }\n\n async patch<T>(\n url: RequestInfo | URL,\n config: SimpleRequestConfig = {},\n ): Promise<T> {\n return this.request<T>(url, { ...config, method: \"PATCH\" });\n }\n}\n\n// Create default instance\nconst defaultClient = new RequestClient();\n\n// Export the default request function\nexport async function request<T>(\n url: RequestInfo | URL,\n config?: SimpleRequestConfig,\n): Promise<T> {\n return defaultClient.request<T>(url, config);\n}\n\n// Export the client class for advanced usage\nexport { RequestClient };\n\n// Export default client instance\nexport default defaultClient;\n","import type {\n VaultInfo,\n VaultLpPerformance,\n VaultLpInfo,\n VaultTimeRange,\n} from \"../types/vault\";\nimport requestClient from \"./request\";\n\n// API response wrapper interfaces\ninterface VaultInfoResponse {\n rows: VaultInfo[];\n}\n\ninterface VaultLpPerformanceResponse {\n rows: VaultLpPerformance[];\n}\n\ninterface VaultLpInfoResponse {\n rows: VaultLpInfo[];\n}\n\n// API parameters interfaces\ninterface VaultPerformanceParams {\n vault_id: string;\n time_range?: VaultTimeRange;\n}\n\ninterface VaultLpInfoParams {\n vault_id: string;\n wallet_address: string;\n}\n\ninterface VaultOperationMessage {\n payloadType: string;\n nonce: string;\n receiver: string;\n amount: string;\n vaultId: string;\n token: string;\n dexBrokerId: string;\n chainId?: string;\n chainType?: string;\n}\n\ntype VaultOperationRequest = {\n message: VaultOperationMessage;\n signature: string;\n userAddress: string;\n verifyingContract: string;\n};\n\n/**\n * Get vault information\n * @param baseUrl - The base URL for the API endpoints\n * @returns Promise<VaultInfoResponse> - Array of vault information\n */\nexport async function getVaultInfo(\n baseUrl: string,\n): Promise<VaultInfoResponse> {\n return requestClient.get<VaultInfoResponse>(\n \"/v1/public/strategy_vault/vault/info\",\n {\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP performance data\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and time_range\n * @returns Promise<VaultLpPerformanceResponse> - Array of vault LP performance data\n */\nexport async function getVaultLpPerformance(\n baseUrl: string,\n params: VaultPerformanceParams,\n): Promise<VaultLpPerformanceResponse> {\n return requestClient.get<VaultLpPerformanceResponse>(\n \"/v1/public/strategy_vault/vault/performance\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n/**\n * Get vault LP information\n * @param baseUrl - The base URL for the API endpoints\n * @param params - Parameters including vault_id and wallet_address\n * @returns Promise<VaultLpInfoResponse> - Array of vault LP information\n */\nexport async function getVaultLpInfo(\n baseUrl: string,\n params: VaultLpInfoParams,\n): Promise<VaultLpInfoResponse> {\n return requestClient.get<VaultLpInfoResponse>(\n \"/v1/public/strategy_vault/lp/info\",\n {\n params,\n baseURL: baseUrl,\n },\n );\n}\n\n// export async function getVaultNonce(\n// baseUrl: string,\n// ) {\n// return requestClient.get(\n// '/v1/public/sv_nonce',\n// {\n// baseURL: baseUrl,\n// }\n// );\n// }\n\n// export async function postVaultOperation(\n// baseUrl: string,\n// data: VaultOperationRequest\n// ) {\n// return requestClient.post(\n// '/v1/public/sv_operation',\n// {\n// baseURL: baseUrl,\n// data,\n// }\n// );\n// }\n\n// Export types for external usage\nexport type {\n VaultInfoResponse,\n VaultLpPerformanceResponse,\n VaultLpInfoResponse,\n VaultPerformanceParams,\n VaultLpInfoParams,\n VaultOperationRequest,\n VaultOperationMessage,\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultCardWidget } from \"../vault-card\";\n\nexport const AllVaultsDesktop: FC<{ vaults: VaultInfo[] }> = (props) => {\n const { vaults } = props;\n const { t } = useTranslation();\n\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-6\">\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast\">\n {t(\"vaults.allVaults\")}\n </div>\n <div className=\"oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3\">\n {vaults.map((vault) => (\n <VaultCardWidget key={vault.vault_id} vault={vault} />\n ))}\n </div>\n </div>\n );\n};\n","import { useEffect, useMemo } from \"react\";\nimport { useAccount, useCollateral, useGetEnv } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { modal } from \"@orderly.network/ui\";\nimport { VAULTS_WEBSITE_URLS } from \"../../api/env\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { useVaultLpInfoById, useVaultsStore } from \"../../store/vaultsStore\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { VaultDepositAndWithdrawWithDialogId } from \"../vault-operation/depositAndWithdraw\";\nimport { ORDERLY_ICON } from \"./constants\";\n\nexport const useVaultCardScript = (vault: VaultInfo) => {\n const { t } = useTranslation();\n const vaultLpInfo = useVaultLpInfoById(vault.vault_id);\n const { fetchVaultLpInfo } = useVaultsStore();\n const env = useGetEnv();\n\n const { state } = useAccount();\n const svApiUrl = useSVApiUrl();\n\n const { holding } = useCollateral();\n\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n\n useEffect(() => {\n if (!state.address || !svApiUrl || !vault.vault_id) {\n return;\n }\n\n // fetchVaultLpPerformance({ vault_id: vault.vault_id }, svApiUrl);\n fetchVaultLpInfo(\n { vault_id: vault.vault_id, wallet_address: state.address },\n svApiUrl,\n );\n }, [vault.vault_id, state.address, svApiUrl]);\n\n const memoizedAvailableBalance = useMemo(() => {\n return availableBalance;\n }, [availableBalance]);\n\n const lpInfo = useMemo(() => {\n const info = vaultLpInfo?.[0];\n if (!info) {\n return {\n deposits: \"--\",\n earnings: \"--\",\n };\n }\n return {\n deposits: info.lp_tvl - info.potential_pnl,\n earnings: info.potential_pnl,\n };\n }, [vaultLpInfo]);\n\n const isEVMConnected = useMemo(() => {\n return state.chainNamespace === \"EVM\";\n }, [state.chainNamespace]);\n\n const isWrongNetwork = useMemo(() => {\n return (\n state.chainNamespace !== \"EVM\" && state.accountId !== state.mainAccountId\n );\n }, [state.chainNamespace, state.accountId, state.mainAccountId]);\n\n const openDepositAndWithdraw = (activeTab: \"deposit\" | \"withdraw\") => {\n modal.show(VaultDepositAndWithdrawWithDialogId, {\n activeTab,\n vaultId: vault.vault_id,\n });\n };\n\n const openVaultWebsite = () => {\n const url = VAULTS_WEBSITE_URLS[env as keyof typeof VAULTS_WEBSITE_URLS];\n window.open(`${url}/vaults`, \"_blank\");\n };\n\n return {\n title: t(\"vaults.card.orderly.title\"),\n description: t(\"vaults.card.orderly.description\"),\n icon: ORDERLY_ICON,\n vaultInfo: vault,\n lpInfo,\n isEVMConnected,\n openDepositAndWithdraw,\n availableBalance: memoizedAvailableBalance,\n openVaultWebsite,\n isWrongNetwork,\n };\n};\n\nexport type VaultCardScript = ReturnType<typeof useVaultCardScript>;\n","type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_API_URLS: Record<Env, string> = {\n prod: \"https://api-sv.orderly.org\",\n staging: \"https://testnet-api-sv.orderly.org\",\n qa: \"https://qa-api-sv-aliyun.orderly.org\",\n dev: \"https://dev-api-sv.orderly.org\",\n};\n\nexport const VAULTS_WEBSITE_URLS: Record<Env, string> = {\n prod: \"https://app.orderly.network\",\n staging: \"https://staging-app.orderly.network\",\n qa: \"https://qa-app.orderly.network\",\n dev: \"https://dev-app.orderly.network\",\n};\n","import { useMemo } from \"react\";\nimport { useGetEnv } from \"@orderly.network/hooks\";\nimport { VAULTS_API_URLS } from \"../api/env\";\n\nexport function useSVApiUrl() {\n const env = useGetEnv();\n\n const apiUrl = useMemo(() => {\n return VAULTS_API_URLS[env as keyof typeof VAULTS_API_URLS];\n }, [env]);\n\n return apiUrl;\n}\n","import { FC, useState } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n ArrowDownSquareFillIcon,\n ArrowUpSquareFillIcon,\n registerSimpleDialog,\n registerSimpleSheet,\n TabPanel,\n Tabs,\n} from \"@orderly.network/ui\";\nimport { VaultDepositWidget } from \"../deposit\";\nimport { VaultWithdrawWidget } from \"../withdraw\";\n\nexport const VaultDepositAndWithdrawWithDialogId =\n \"VaultDepositAndWithdrawWithDialogId\";\nexport const VaultDepositAndWithdrawWithSheetId =\n \"VaultDepositAndWithdrawWithSheetId\";\n\nexport type VaultDepositAndWithdrawProps = {\n activeTab?: \"deposit\" | \"withdraw\";\n close?: () => void;\n vaultId: string;\n};\n\nexport const VaultDepositAndWithdraw: FC<VaultDepositAndWithdrawProps> = (\n props,\n) => {\n const [activeTab, setActiveTab] = useState<string>(\n props.activeTab || \"deposit\",\n );\n const { vaultId } = props;\n const { t } = useTranslation();\n\n return (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n variant=\"contained\"\n size=\"lg\"\n classNames={{\n tabsList: \"oui-px-0\",\n tabsContent: \"oui-pt-5\",\n }}\n >\n <TabPanel\n title={t(\"common.deposit\")}\n icon={<ArrowDownSquareFillIcon />}\n value=\"deposit\"\n >\n <VaultDepositWidget vaultId={vaultId} />\n </TabPanel>\n <TabPanel\n title={t(\"common.withdraw\")}\n icon={<ArrowUpSquareFillIcon />}\n value=\"withdraw\"\n >\n <VaultWithdrawWidget vaultId={vaultId} />\n </TabPanel>\n </Tabs>\n );\n};\n\nregisterSimpleDialog(\n VaultDepositAndWithdrawWithDialogId,\n VaultDepositAndWithdraw,\n {\n size: \"md\",\n classNames: {\n content: \"oui-border oui-border-line-6\",\n },\n },\n);\n\nregisterSimpleSheet(\n VaultDepositAndWithdrawWithSheetId,\n VaultDepositAndWithdraw,\n);\n","import { useMemo, useState } from \"react\";\nimport { useTokenInfo, useCollateral } from \"@orderly.network/hooks\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useVaultsStore } from \"../../../store/vaultsStore\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const useVaultDepositFormScript = (props: VaultDepositWidgetProps) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { vaultInfo } = useVaultsStore();\n const { handleOperation } = useOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n const { holding } = useCollateral();\n\n const availableBalance = useMemo(() => {\n return holding?.find((h) => h.token === \"USDC\")?.holding || 0;\n }, [holding]);\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price;\n }, [vaultInfo.data, vaultId]);\n\n const shares = useMemo(() => {\n if (!sharePrice || !quantity) {\n return \"-\";\n }\n return new Decimal(quantity).div(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleDeposit = async () => {\n if (!shares || shares === \"-\") {\n return;\n }\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n setQuantity(\"\");\n };\n\n const token = useTokenInfo(\"USDC\");\n\n const sourceToken = useMemo(() => {\n return {\n ...token,\n display_name: token?.token,\n symbol: token?.token,\n };\n }, [token]);\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(availableBalance)) {\n setQuantity(availableBalance.toString());\n return;\n }\n setQuantity(value);\n };\n\n return {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity: availableBalance,\n sharePrice,\n shares,\n handleDeposit,\n vaultId,\n };\n};\n\nexport type VaultDepositFormScript = ReturnType<\n typeof useVaultDepositFormScript\n>;\n","export interface VaultSupportedChain {\n chain_id: string;\n chain_name: string;\n}\n\nexport type VaultTimeRange = \"24h\" | \"7d\" | \"30d\" | \"all_time\";\n\nexport interface VaultInfo {\n vault_id: string;\n vault_address: string;\n vault_type: string;\n performance_fee_rate: number;\n supported_chains: VaultSupportedChain[];\n tvl: number;\n apr30_d: number;\n vault_lifetime_net_pnl: number;\n lp_counts: number;\n total_main_shares: number;\n est_main_share_price: number;\n gate_threshold_pct: number;\n gate_triggered: boolean;\n lock_duration: number;\n broker_id: string;\n \"30d_apr\": number;\n \"30d_apy\": number;\n}\n\nexport interface VaultLpPerformance {\n time_range: VaultTimeRange;\n tvl_max_drawdown: number;\n incremental_net_pnl: number;\n pnl_max_drawdown: number;\n}\n\nexport interface VaultLpInfo {\n vault_id: string;\n lp_nav: number;\n lp_tvl: number;\n total_main_shares: number;\n available_main_shares: number;\n potential_pnl: number;\n}\n\nexport interface VaultOperation {\n type: OperationType;\n vault_id: string;\n amount_change: number;\n created_time: string;\n status: string;\n}\n\nexport enum RoleType {\n LP = \"lp\",\n SP = \"sp\",\n}\n\nexport enum OperationType {\n DEPOSIT = \"deposit\",\n WITHDRAWAL = \"withdrawal\",\n}\n\nexport type VaultsPageConfig = {\n headerImage?: string | React.ReactNode;\n};\n","import { useMemo } from \"react\";\nimport { useAccount, useGetEnv } from \"@orderly.network/hooks\";\nimport { useMutation } from \"@orderly.network/hooks\";\nimport { toast } from \"@orderly.network/ui\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { VAULTS_CONTRACT_ADDRESSES } from \"../../../contract\";\nimport { OperationType, RoleType } from \"../../../types/vault\";\nimport { getToAccountPayloadType } from \"../../../utils/operationPayload\";\nimport { useLatestOperationScript } from \"./latest.script\";\n\ntype OperationScript = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useOperationScript = (props: OperationScript) => {\n const { account, state } = useAccount();\n const env = useGetEnv();\n const verifyingContract = useMemo(() => {\n return VAULTS_CONTRACT_ADDRESSES[\n env as keyof typeof VAULTS_CONTRACT_ADDRESSES\n ].vaultPvLedger;\n }, [env]);\n const [postVaultOperation] = useMutation(\"/v1/sv_operation_request\");\n const { refetch: refetchOperationHistory } = useLatestOperationScript({\n type: props.type,\n vaultId: props.vaultId,\n });\n\n const handleOperation = async ({\n amount,\n vaultId,\n }: {\n amount: string;\n vaultId: string;\n }) => {\n if (state.accountId !== state.mainAccountId) {\n toast.error(\n \"Please switch to the main account to perform this operation.\",\n );\n return;\n }\n\n if (props.type === OperationType.DEPOSIT) {\n if (new Decimal(amount).lt(10)) {\n toast.error(\"Deposit amount is less than the minimum 10 USDC.\");\n return;\n }\n }\n\n // if (props.type === OperationType.WITHDRAWAL) {\n // if (new Decimal(amount).lt(0.000001)) {\n // toast.error(\"Withdrawal shares is less than minimum 0.000001.\");\n // return;\n // }\n // }\n\n const payloadType = getToAccountPayloadType(props.type, RoleType.LP);\n const requestParams = {\n payloadType,\n amount: new Decimal(Number(amount)).mul(10 ** 6).toString(),\n vaultId,\n token: \"USDC\",\n domain: {\n name: \"Orderly\",\n version: \"1\",\n chainId: state.connectWallet?.chainId as number,\n verifyingContract,\n },\n };\n\n const { message, signatured } =\n await account.generateDexRequest(requestParams);\n\n try {\n const res = await postVaultOperation({\n message: {\n ...message,\n chainId: state.connectWallet?.chainId as number,\n },\n signature: signatured,\n userAddress: state.address,\n verifyingContract,\n });\n\n if (!res.success) {\n toast.error(res.message);\n return;\n }\n\n await refetchOperationHistory();\n\n toast.success(`${props.type} successful`);\n } catch (error: any) {\n toast.error(error.message);\n console.error(error);\n }\n };\n\n return {\n handleOperation,\n };\n};\n","type Env = \"prod\" | \"staging\" | \"qa\" | \"dev\";\n\nexport const VAULTS_CONTRACT_ADDRESSES: Record<Env, Record<string, string>> = {\n prod: {\n vaultProtocol: \"0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991\",\n vaultCrossChainManager: \"0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B\",\n vaultPvLedger: \"0xB7E792f0da9104A27288421583748215AefFFd78\",\n vaultId:\n \"0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2\",\n spAddress: \"0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22\",\n },\n staging: {\n vaultProtocol: \"0x6B6059259B4096ea6420Eb5e08a22214d2303aE9\",\n vaultCrossChainManager: \"0x510dD61a988797114A9a51b0d228E894037BD9cb\",\n vaultPvLedger: \"0x20AFe57C75D1C548A9Da265fBFC5416c43783589\",\n vaultId:\n \"0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n qa: {\n vaultProtocol: \"0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38\",\n vaultCrossChainManager: \"0xB8a3245407571804b4db5219cBe8D9F2EA1828DE\",\n vaultPvLedger: \"0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n dev: {\n vaultProtocol: \"0xA292E1126703F804FBD5671F034c7226538C54C7\",\n vaultCrossChainManager: \"0x7568ACC147Af12b02713143C3177D7e89C28A9A6\",\n vaultPvLedger: \"0x2a5909498d85650744dD5CF964F2136962e5AE6E\",\n vaultId:\n \"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099\",\n spAddress: \"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41\",\n },\n};\n","import { OperationType, RoleType } from \"../types/vault\";\n\nexport const getToAccountPayloadType = (\n type: OperationType,\n role: RoleType,\n) => {\n if (type === OperationType.DEPOSIT && role === RoleType.LP) {\n return 0;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.LP) {\n return 1;\n }\n if (type === OperationType.DEPOSIT && role === RoleType.SP) {\n return 2;\n }\n if (type === OperationType.WITHDRAWAL && role === RoleType.SP) {\n return 3;\n }\n return 1;\n};\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"@orderly.network/hooks\";\nimport { OperationType, VaultOperation } from \"../../../types/vault\";\n\ntype LatestOperationScriptProps = {\n type: OperationType;\n vaultId: string;\n};\n\nexport const useLatestOperationScript = (props: LatestOperationScriptProps) => {\n const { type, vaultId } = props;\n const { data: operationHistory, mutate: mutateOperationHistory } =\n usePrivateQuery<VaultOperation[]>(\n `/v1/account_sv_transaction_history?type=${type}&vault_id=${vaultId}&size=1`,\n {\n formatter: (response: { rows: VaultOperation[] }) => {\n return response?.rows || [];\n },\n revalidateOnFocus: false,\n },\n );\n\n const latestOperation = useMemo(() => {\n return operationHistory?.[0];\n }, [operationHistory]);\n\n return {\n latestOperation,\n refetch: mutateOperationHistory,\n };\n};\n\nexport type LatestOperationScript = ReturnType<typeof useLatestOperationScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Box, Text, Button } from \"@orderly.network/ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@orderly.network/ui-transfer\";\nimport { LatestDepositWidget } from \"../latest-deposit/latest-deposit.widget\";\nimport { VaultDepositFormScript } from \"./vault-deposit-form.script\";\n\nexport const VaultDepositForm: FC<VaultDepositFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n sourceToken,\n maxQuantity,\n shares,\n handleDeposit,\n vaultId,\n } = props;\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ ...sourceToken, precision: 6 } as any}\n testId=\"oui-testid-vault-deposit-dialog-quantity-input\"\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity?.toString() || \"0\"}\n onClick={() => {\n onQuantityChange(maxQuantity?.toString() || \"0\");\n }}\n />\n <Box\n mt={5}\n mb={1}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.estShares\")}</div>\n <Text.numeral\n dp={6}\n padding={false}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">\n {t(\"vaults.deposit.shares\")}\n </span>\n }\n >\n {shares}\n </Text.numeral>\n </Box>\n <Box\n mb={1}\n className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\"\n >\n <div>{t(\"vaults.deposit.lockupDuration\")}</div>\n <Text.numeral\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-54\">hrs</span>\n }\n >\n 48\n </Text.numeral>\n </Box>\n <Button\n fullWidth\n color=\"primary\"\n disabled={!quantity || quantity === \"0\"}\n className=\"oui-mt-8\"\n onClick={handleDeposit}\n >\n {t(\"common.deposit\")}\n </Button>\n <LatestDepositWidget vaultId={vaultId} />\n </div>\n );\n};\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestDepositScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.DEPOSIT,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestDepositScript = ReturnType<typeof useLatestDepositScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\n\nexport type LatestDepositUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestDepositUI: FC<LatestDepositUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n\n if (!latestOperation) {\n return null;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.deposit.latestDeposit\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","export const getOperationStatusColor = (status: string) => {\n if (status === \"completed\") {\n return \"success\";\n }\n if (status === \"rejected\") {\n return \"danger\";\n }\n return \"primary\";\n};\n","import { FC } from \"react\";\nimport { useLatestDepositScript } from \"./latest-deposit.script\";\nimport { LatestDepositUI } from \"./latest-deposit.ui\";\n\nexport type LatestDepositWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestDepositWidget: FC<LatestDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestDepositScript({ vaultId });\n return <LatestDepositUI {...state} />;\n};\n","import { FC } from \"react\";\nimport {\n useVaultDepositFormScript,\n VaultDepositWidgetProps,\n} from \"./vault-deposit-form.script\";\nimport { VaultDepositForm } from \"./vault-deposit-form.ui\";\n\nexport const VaultDepositWidget: FC<VaultDepositWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultDepositFormScript({ vaultId });\n return <VaultDepositForm {...state} />;\n};\n","import { useMemo, useState } from \"react\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useVaultLpInfoById, useVaultsStore } from \"../../../store\";\nimport { OperationType } from \"../../../types/vault\";\nimport { useOperationScript } from \"../depositAndWithdraw/operation.script\";\n\nexport type VaultWithdrawFormScriptProps = {\n vaultId: string;\n};\n\nexport const useVaultWithdrawFormScript = (\n props: VaultWithdrawFormScriptProps,\n) => {\n const { vaultId } = props;\n const [quantity, setQuantity] = useState<string>(\"\");\n const { handleOperation } = useOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n const vaultLpInfo = useVaultLpInfoById(vaultId);\n const { vaultInfo } = useVaultsStore();\n\n const sharePrice = useMemo(() => {\n const vault = vaultInfo.data.find((v) => v.vault_id === vaultId);\n return vault?.est_main_share_price || 0;\n }, [vaultInfo.data, vaultId]);\n\n const maxQuantity = vaultLpInfo?.[0]?.available_main_shares || 0;\n\n const receivingAmount = useMemo(() => {\n if (!quantity || !sharePrice) {\n return \"-\";\n }\n return new Decimal(quantity).mul(sharePrice).toString();\n }, [quantity, sharePrice]);\n\n const handleWithdraw = async () => {\n await handleOperation({\n amount: quantity,\n vaultId,\n });\n };\n\n const onQuantityChange = (value: string) => {\n if (value && new Decimal(value).gt(maxQuantity)) {\n setQuantity(maxQuantity.toString());\n } else {\n setQuantity(value);\n }\n };\n\n return {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n };\n};\n\nexport type VaultWithdrawFormScript = ReturnType<\n typeof useVaultWithdrawFormScript\n>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Box,\n Text,\n Button,\n modal,\n SimpleDialog,\n useModal,\n cn,\n} from \"@orderly.network/ui\";\nimport {\n BrokerWallet,\n QuantityInput,\n AvailableQuantity,\n} from \"@orderly.network/ui-transfer\";\nimport { LatestWithdrawWidget } from \"../latest-withdraw\";\nimport { VaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { WithdrawProcessWidget } from \"./withdraw-process.ui\";\n\nexport const VaultWithdrawForm: FC<VaultWithdrawFormScript> = (props) => {\n const {\n quantity,\n onQuantityChange,\n maxQuantity,\n handleWithdraw,\n vaultId,\n sharePrice,\n receivingAmount,\n } = props;\n\n const handleInitialWithdraw = () => {\n modal.show(WithdrawInitialDialog, {\n quantity,\n receivingAmount,\n handleWithdraw,\n });\n };\n\n const { t } = useTranslation();\n return (\n <div>\n <BrokerWallet />\n <Box mt={3} mb={1}>\n <QuantityInput\n value={quantity}\n onValueChange={onQuantityChange}\n token={{ display_name: \"Shares\", precision: 6 } as any}\n testId=\"oui-testid-vault-withdraw-dialog-quantity-input\"\n />\n </Box>\n <AvailableQuantity\n maxQuantity={maxQuantity}\n onClick={() => {\n onQuantityChange(maxQuantity.toString());\n }}\n />\n\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estPricePerShare\")}\n currency=\"$\"\n value={sharePrice || \"-\"}\n className=\"oui-mb-1 oui-mt-5\"\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.estReceivingAmount\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mb-1\"\n />\n\n <Button\n fullWidth\n color=\"primary\"\n disabled={!quantity || quantity === \"0\"}\n className=\"oui-mt-8\"\n onClick={handleInitialWithdraw}\n >\n {t(\"common.withdraw\")}\n </Button>\n <div className=\"oui-mt-3\">\n <LatestWithdrawWidget vaultId={vaultId} />\n </div>\n </div>\n );\n};\n\ntype WithdrawKVItemProps = {\n label: string;\n value: string | number;\n suffix?: React.ReactNode;\n currency?: string;\n className?: string;\n};\nconst WithdrawKVItem = ({\n label,\n value,\n suffix,\n currency,\n className,\n}: WithdrawKVItemProps) => {\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\",\n className,\n )}\n >\n <div>{label}</div>\n <Text.numeral\n currency={currency}\n className=\"oui-text-base-contrast\"\n suffix={suffix}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\nconst WithdrawInitialDialog = modal.create(\n ({\n quantity,\n receivingAmount,\n handleWithdraw,\n }: {\n quantity: string;\n receivingAmount: string;\n handleWithdraw: () => void;\n }) => {\n const { visible, hide, onOpenChange } = useModal();\n const { t } = useTranslation();\n return (\n <SimpleDialog\n title={t(\"vaults.withdraw.dialog.title\")}\n open={visible}\n onOpenChange={onOpenChange}\n >\n <div className=\"oui-flex oui-flex-col\">\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.withdrawalAmount\")}\n value={quantity}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">Shares</span>\n }\n />\n <WithdrawKVItem\n label={t(\"vaults.withdraw.dialog.estimatedReceiving\")}\n value={receivingAmount}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n className=\"oui-mt-1\"\n />\n <Text\n color=\"warning\"\n className=\"oui-my-5 oui-text-sm oui-font-semibold\"\n >\n {t(\"vaults.withdraw.dialog.note\")}\n </Text>\n <WithdrawProcessWidget />\n <Button\n fullWidth\n color=\"primary\"\n className=\"oui-mt-5\"\n onClick={async () => {\n await handleWithdraw();\n hide();\n }}\n >\n {t(\"vaults.withdraw.dialog.initiateWithdrawal\")}\n </Button>\n </div>\n </SimpleDialog>\n );\n },\n);\n","import { OperationType } from \"../../../types/vault\";\nimport { useLatestOperationScript } from \"../depositAndWithdraw/latest.script\";\n\nexport const useLatestWithdrawScript = ({ vaultId }: { vaultId: string }) => {\n const { latestOperation } = useLatestOperationScript({\n type: OperationType.WITHDRAWAL,\n vaultId,\n });\n return {\n latestOperation,\n };\n};\n\nexport type LatestWithdrawScript = ReturnType<typeof useLatestWithdrawScript>;\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { cn, Text, TokenIcon } from \"@orderly.network/ui\";\nimport { VaultOperation } from \"../../../types/vault\";\nimport { getOperationStatusColor } from \"../../../utils/getOperationStatusColor\";\nimport { WithdrawProcessWidget } from \"../withdraw/withdraw-process.ui\";\n\nexport type LatestWithdrawUIProps = {\n latestOperation: VaultOperation | undefined;\n};\n\nexport const LatestWithdrawUI: FC<LatestWithdrawUIProps> = (props) => {\n const { latestOperation } = props;\n const { t } = useTranslation();\n if (!latestOperation) {\n return <WithdrawProcessWidget />;\n }\n\n return (\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-gap-2\">\n <div className=\"oui-text-xs oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.withdraw.latestWithdraw\")}\n </div>\n <div className=\"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center\">\n <div\n className={cn(\n \"oui-mr-1 oui-size-1 oui-rounded-full\",\n latestOperation.status === \"completed\" && \"oui-bg-success\",\n latestOperation.status === \"rejected\" && \"oui-bg-danger\",\n (latestOperation.status === \"pending\" ||\n latestOperation.status === \"new\") &&\n \"oui-bg-primary\",\n )}\n />\n <Text\n color={getOperationStatusColor(latestOperation.status)}\n className=\"oui-text-xs oui-font-normal\"\n >\n {latestOperation.status.slice(0, 1).toUpperCase() +\n latestOperation.status.slice(1)}\n </Text>\n <TokenIcon name=\"USDC\" className=\"oui-ml-auto oui-mr-1 oui-size-4\" />\n <Text.numeral className=\"oui-text-sm oui-font-semibold oui-text-base-contrast-80\">\n {latestOperation.amount_change || \"-\"}\n </Text.numeral>\n </div>\n </div>\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text, cn } from \"@orderly.network/ui\";\n\nconst ProcessDot = () => {\n return <div className=\"oui-size-2 oui-rounded-full oui-bg-white/[0.54]\" />;\n};\n\nconst ProcessLine = () => {\n return <div className=\"oui-h-px oui-flex-1 oui-bg-white/[0.2]\" />;\n};\n\nconst ProcessText = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => {\n return (\n <div\n className={cn(\n \"oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80\",\n className,\n )}\n >\n {children}\n </div>\n );\n};\n\nconst WithdrawProcess: FC = () => {\n const { t } = useTranslation();\n return (\n <>\n <div className=\"oui-flex oui-items-center\">\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n <div className=\"oui-flex-1\">\n <ProcessLine />\n </div>\n <ProcessDot />\n </div>\n <div className=\"oui-mt-1 oui-flex oui-justify-between\">\n <ProcessText>{t(\"vaults.withdraw.process.initiate\")}</ProcessText>\n <ProcessText className=\"oui-text-center\">\n {t(\"vaults.withdraw.process.vaultProcess\")}\n </ProcessText>\n <ProcessText className=\"oui-text-right\">\n {t(\"vaults.withdraw.process.transferred\")}\n </ProcessText>\n </div>\n </>\n );\n};\n\nexport const WithdrawProcessWidget: FC = () => {\n const { t } = useTranslation();\n return (\n <div className=\"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3\">\n <div className=\"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54\">\n <div>{t(\"vaults.withdraw.process.withdrawProcess\")}</div>\n <Text color=\"primary\">{t(\"vaults.withdraw.process.upTo\")}</Text>\n </div>\n <WithdrawProcess />\n </div>\n );\n};\n","import { FC } from \"react\";\nimport { useLatestWithdrawScript } from \"./latest-withdraw-script\";\nimport { LatestWithdrawUI } from \"./latest-withdraw-ui\";\n\nexport type LatestWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const LatestWithdrawWidget: FC<LatestWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useLatestWithdrawScript({ vaultId });\n return <LatestWithdrawUI {...state} />;\n};\n","import { FC } from \"react\";\nimport { useVaultWithdrawFormScript } from \"./vault-withdraw-form.script\";\nimport { VaultWithdrawForm } from \"./vault-withdraw-form.ui\";\n\nexport type VaultWithdrawWidgetProps = {\n vaultId: string;\n};\n\nexport const VaultWithdrawWidget: FC<VaultWithdrawWidgetProps> = (props) => {\n const { vaultId } = props;\n const state = useVaultWithdrawFormScript({ vaultId });\n return <VaultWithdrawForm {...state} />;\n};\n","export const ORDERLY_ICON =\n \"https://oss.orderly.network/static/symbol_logo/ORDER.png\";\n\nexport const ORDERLY_VAULT_TITLE = \"Orderly OmniVault\";\n\nexport const ORDERLY_VAULT_DESCRIPTION =\n \"Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.\";\n","import { FC, useMemo } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport {\n Text,\n cn,\n Button,\n ArrowRightUpSquareFillIcon,\n} from \"@orderly.network/ui\";\nimport { AuthGuard } from \"@orderly.network/ui-connector\";\nimport { VaultCardScript } from \"./vaultCard.script\";\n\nexport const VaultCard: FC<VaultCardScript> = (props) => {\n const {\n title,\n vaultInfo,\n lpInfo,\n description,\n isEVMConnected,\n openDepositAndWithdraw,\n availableBalance,\n openVaultWebsite,\n } = props;\n\n const { t } = useTranslation();\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {vaultInfo.supported_chains.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-5\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: vaultInfo.supported_chains.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [vaultInfo.supported_chains]);\n\n return (\n <div\n style={{\n height: \"388px\",\n }}\n className=\"oui-relative oui-h-[388px] oui-overflow-hidden oui-rounded-2xl oui-bg-base-9\"\n >\n <div\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"100%\",\n height: \"180px\",\n backdropFilter: \"blur(2px)\",\n zIndex: 1,\n background:\n \"linear-gradient(180deg, rgba(44, 5, 69, 0.80) 0%, rgba(19, 21, 25, 0.80) 63.46%, #131519 100%)\",\n }}\n ></div>\n <img\n src=\"/vaults/orderly_vault_card_bg.png\"\n alt=\"\"\n style={{\n position: \"absolute\",\n top: 0,\n right: 0,\n width: \"100%\",\n height: \"180px\",\n zIndex: 0,\n }}\n />\n\n <div className=\"oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-flex oui-flex-col oui-gap-3 oui-p-6\">\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <img\n src=\"https://oss.orderly.network/static/symbol_logo/ORDER.png\"\n alt=\"\"\n className=\"oui-size-8\"\n />\n <div className=\"oui-text-[18px] oui-font-semibold oui-text-white\">\n {title}\n </div>\n {supportVaultsList}\n <div\n className=\"oui-z-50 oui-ml-auto oui-cursor-pointer\"\n onClick={openVaultWebsite}\n >\n <ArrowRightUpSquareFillIcon\n color=\"white\"\n width={18}\n height={18}\n viewBox=\"0 0 18 18\"\n />\n </div>\n </div>\n\n <div className=\"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54\">\n {description}\n </div>\n\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <VaultInfoItem\n label={t(\"vaults.card.tvl\")}\n value={vaultInfo.tvl}\n textProps={{\n currency: \"$\",\n dp: 0,\n type: \"numeral\",\n }}\n />\n <VaultInfoItem\n label={t(\"vaults.card.apy\")}\n value={(vaultInfo[\"30d_apy\"] * 100).toFixed(2) + \"%\"}\n textProps={{\n color: \"brand\",\n type: \"gradient\",\n }}\n />\n </div>\n\n <div className=\"oui-mt-3 oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3\">\n <LpInfoItem\n label={t(\"vaults.card.myDeposits\")}\n value={lpInfo.deposits}\n />\n <LpInfoItem\n label={t(\"vaults.card.myEarnings\")}\n value={lpInfo.earnings}\n />\n </div>\n\n <LpInfoItem\n label={t(\"vaults.card.accountBalance\")}\n value={availableBalance}\n />\n\n <VaultCardOperation\n isEVMConnected={isEVMConnected}\n openDepositAndWithdraw={openDepositAndWithdraw}\n />\n </div>\n </div>\n );\n};\n\nconst VaultInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n}> = (props) => {\n const { label, value, textProps } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2\",\n \"oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]\",\n )}\n >\n <div className=\"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54\">\n {label}\n </div>\n {textProps.type === \"gradient\" ? (\n <Text.gradient\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.gradient>\n ) : (\n <Text.numeral\n className=\"oui-text-base oui-font-semibold\"\n {...textProps}\n >\n {value}\n </Text.numeral>\n )}\n </div>\n );\n};\n\nconst LpInfoItem: FC<{\n label: string;\n value: string | number;\n textProps?: any;\n}> = (props) => {\n const { label, value, textProps } = props;\n\n return (\n <div className=\"oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal\">\n <div className=\"oui-text-base-contrast-54\">{label}</div>\n <Text.numeral\n className=\"oui-text-base-contrast-80\"\n {...textProps}\n dp={2}\n suffix={\n <span className=\"oui-ml-1 oui-text-base-contrast-36\">USDC</span>\n }\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n\ntype VaultCardOperationProps = {\n isEVMConnected: boolean;\n openDepositAndWithdraw: (activeTab: \"deposit\" | \"withdraw\") => void;\n};\n\nconst VaultCardOperation: FC<VaultCardOperationProps> = (props) => {\n const { isEVMConnected, openDepositAndWithdraw } = props;\n const { t } = useTranslation();\n\n return (\n <AuthGuard buttonProps={{ size: \"md\", fullWidth: true }}>\n {isEVMConnected ? (\n <div className=\"oui-flex oui-items-center oui-gap-2\">\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n onClick={() => openDepositAndWithdraw(\"deposit\")}\n >\n {t(\"common.deposit\")}\n </Button>\n <Button\n className=\"oui-flex-1\"\n size=\"md\"\n color=\"secondary\"\n onClick={() => openDepositAndWithdraw(\"withdraw\")}\n >\n {t(\"common.withdraw\")}\n </Button>\n </div>\n ) : (\n <Button size=\"md\" color=\"warning\">\n {t(\"connector.wrongNetwork\")}\n </Button>\n )}\n </AuthGuard>\n );\n};\n","import { FC } from \"react\";\nimport { VaultInfo } from \"../../types/vault\";\nimport { useVaultCardScript } from \"./vaultCard.script\";\nimport { VaultCard } from \"./vaultCard.ui\";\n\nexport type VaultCardWidgetProps = {\n vault: VaultInfo;\n};\n\nexport const VaultCardWidget: FC<VaultCardWidgetProps> = (props) => {\n const { vault } = props;\n const state = useVaultCardScript(vault);\n\n return <VaultCard {...state} />;\n};\n","import { FC } from \"react\";\nimport { useVaultInfoState } from \"../../store/vaultsStore\";\nimport { AllVaultsDesktop } from \"./all-vaults.desktop\";\n\nexport const AllVaultsWidget: FC = () => {\n const vaultsInfo = useVaultInfoState().data;\n\n return <AllVaultsDesktop vaults={vaultsInfo} />;\n};\n","import { FC, PropsWithChildren, useEffect } from \"react\";\nimport { useSVApiUrl } from \"../../hooks/useSVAPIUrl\";\nimport { VaultsPageProps } from \"../../pages\";\nimport { useVaultsStore } from \"../../store\";\n\nexport const VaultsProvider: FC<PropsWithChildren<VaultsPageProps>> = (\n props,\n) => {\n const svApiUrl = useSVApiUrl();\n const { fetchVaultInfo, setVaultsPageConfig } = useVaultsStore();\n\n useEffect(() => {\n if (props.config) {\n setVaultsPageConfig(props.config);\n }\n }, [props.config]);\n\n useEffect(() => {\n if (!svApiUrl) {\n return;\n }\n fetchVaultInfo(svApiUrl);\n }, [svApiUrl]);\n\n return <div>{props.children}</div>;\n};\n","import { FC, useMemo } from \"react\";\nimport { useConfig } from \"@orderly.network/hooks\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { VaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderDesktop: FC<VaultsHeaderScript> = (props) => {\n const { supportVaults, headerImage } = props;\n const { t } = useTranslation();\n const brokerName = useConfig(\"brokerName\");\n\n const supportVaultsList = useMemo(() => {\n return (\n <div className=\"oui-flex oui-items-center\">\n {supportVaults.map((chain, index) => (\n <img\n key={chain.chain_id}\n src={`https://oss.orderly.network/static/network_logo/${chain.chain_id}.png`}\n alt={chain.chain_id}\n className=\"oui-relative oui-size-5\"\n style={{\n marginLeft: index > 0 ? \"-4px\" : \"0\",\n zIndex: supportVaults.length - index,\n }}\n />\n ))}\n </div>\n );\n }, [supportVaults]);\n\n const headerImageElement = useMemo(() => {\n if (typeof headerImage === \"string\") {\n return (\n <img\n src={headerImage}\n alt=\"header\"\n className=\"oui-bg-contain oui-bg-center oui-bg-no-repeat\"\n />\n );\n }\n return headerImage;\n }, [headerImage]);\n\n return (\n <div className=\"oui-flex oui-items-center oui-justify-between\">\n <div className=\"oui-flex oui-max-w-[726px] oui-flex-col\">\n <div className=\"oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.availableOn\")} {supportVaultsList}\n </div>\n <div className=\"oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast\">\n {t(\"vaults.header.title\")}\n </div>\n <div className=\"oui-text-xl oui-font-normal oui-text-base-contrast-54\">\n {t(\"vaults.header.description\", { brokerName })}\n </div>\n </div>\n <div className=\"oui-h-[238px] oui-w-[360px]\">{headerImageElement}</div>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { uniqBy } from \"ramda\";\nimport { useVaultsStore } from \"../../store\";\nimport { VaultSupportedChain } from \"../../types/vault\";\n\nexport const useVaultsHeaderScript = () => {\n const { vaultInfo, vaultsPageConfig } = useVaultsStore();\n\n const supportVaults = useMemo(() => {\n const array: VaultSupportedChain[] = [];\n vaultInfo.data.forEach((vault) => {\n array.push(...vault.supported_chains);\n });\n\n return uniqBy((item) => item.chain_id, array);\n }, [vaultInfo.data]);\n\n console.log(\"vaultsPageConfig\", vaultsPageConfig);\n\n return {\n supportVaults,\n headerImage: vaultsPageConfig?.headerImage,\n };\n};\n\nexport type VaultsHeaderScript = ReturnType<typeof useVaultsHeaderScript>;\n","import { FC } from \"react\";\nimport { VaultsHeaderDesktop } from \"./vaults-header.desktop\";\nimport { useVaultsHeaderScript } from \"./vaults-header.script\";\n\nexport const VaultsHeaderWidget: FC = () => {\n const state = useVaultsHeaderScript();\n\n return <VaultsHeaderDesktop {...state} />;\n};\n","import { FC } from \"react\";\nimport { useTranslation } from \"@orderly.network/i18n\";\nimport { Text, Divider, cn, TextProps } from \"@orderly.network/ui\";\nimport { VaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionDesktop: FC<VaultsIntroductionScript> = (\n props,\n) => {\n const { t } = useTranslation();\n const { vaultsInfo } = props;\n\n return (\n <div\n className={cn(\n \"oui-flex oui-items-center oui-gap-6 oui-rounded-2xl oui-p-6\",\n // \"oui-bg-gradient-to-r oui-from-[rgba(var(--oui-gradient-primary-end)/0.12)] oui-to-[rgba(var(--oui-gradient-primary-start)/0.12)]\"\n // \"oui-via-21.6% oui-via-83.23% oui-bg-gradient-to-r oui-from-[rgba(var(--oui-gradient-neutral-end)/1)] oui-to-[rgba(var(--oui-gradient-neutral-start)/1)]\"\n )}\n style={{\n background: \"linear-gradient(28.29deg, #1B1D22 21.6%, #26292E 83.23%)\",\n }}\n >\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.tvl\")}\n value={vaultsInfo.tvl}\n textProps={{ currency: \"$\" } as any}\n />\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[64px] oui-bg-white/[0.12]\"\n />\n <VaultsIntroductionItem\n title={t(\"common.vaults\")}\n value={vaultsInfo.vaultsCount}\n />\n <Divider\n direction=\"vertical\"\n className=\"oui-h-[64px] oui-bg-white/[0.12]\"\n />\n <VaultsIntroductionItem\n title={t(\"vaults.introduction.depositors\")}\n value={vaultsInfo.lpCount}\n />\n </div>\n );\n};\n\nconst VaultsIntroductionItem: FC<{\n title: string;\n value: number;\n textProps?: TextProps;\n}> = (props) => {\n const { title, value, textProps } = props;\n\n return (\n <div className=\"oui-flex oui-flex-1 oui-flex-col oui-items-center oui-gap-3 oui-rounded-2xl\">\n <div className=\"oui-text-base oui-font-normal oui-text-base-contrast-54\">\n {title}\n </div>\n <Text.numeral\n className=\"oui-text-xl oui-font-semibold\"\n dp={0}\n {...textProps}\n >\n {value}\n </Text.numeral>\n </div>\n );\n};\n","import { useMemo } from \"react\";\nimport { useVaultsStore } from \"../../store\";\n\nexport const useVaultsIntroductionScript = () => {\n const { vaultInfo } = useVaultsStore();\n\n const vaultsInfo = useMemo(() => {\n const tvl = vaultInfo.data.reduce((acc, vault) => {\n return acc + vault.tvl;\n }, 0);\n const lpCount = vaultInfo.data.reduce((acc, vault) => {\n return acc + vault.lp_counts;\n }, 0);\n\n return {\n tvl,\n lpCount,\n vaultsCount: vaultInfo.data.length,\n };\n }, [vaultInfo.data]);\n\n return {\n vaultsInfo,\n };\n};\n\nexport type VaultsIntroductionScript = ReturnType<\n typeof useVaultsIntroductionScript\n>;\n","import { FC } from \"react\";\nimport { VaultsIntroductionDesktop } from \"./vaults-introduction.desktop\";\nimport { useVaultsIntroductionScript } from \"./vaults-introduction.script\";\n\nexport const VaultsIntroductionWidget: FC = () => {\n const state = useVaultsIntroductionScript();\n\n return <VaultsIntroductionDesktop {...state} />;\n};\n"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,16 @@
1
+ import { modal, useModal, SimpleDialog, Text, Button, registerSimpleDialog, registerSimpleSheet, cn, Tabs, TabPanel, ArrowDownSquareFillIcon, ArrowUpSquareFillIcon, Box, toast, TokenIcon, ArrowRightUpSquareFillIcon, Divider } from '@orderly.network/ui';
2
+ import { create } from 'zustand';
3
+ import { useTranslation } from '@orderly.network/i18n';
4
+ import { useState, useMemo, useEffect } from 'react';
5
+ import { useCollateral, useTokenInfo, useAccount, useGetEnv, useMutation, usePrivateQuery, useConfig } from '@orderly.network/hooks';
6
+ import { Decimal } from '@orderly.network/utils';
7
+ import { BrokerWallet, QuantityInput, AvailableQuantity } from '@orderly.network/ui-transfer';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+ import { AuthGuard } from '@orderly.network/ui-connector';
10
+ import { uniqBy } from 'ramda';
11
+
12
+ var R=class extends Error{constructor(o,r,s,i){super(o);this.code=r;this.status=s;this.response=i;this.name="VaultsApiError";}};function me(t){let e=fe(t),o=new URLSearchParams;return Object.entries(e).forEach(([r,s])=>{s!=null&&o.append(r,String(s));}),o.toString()}function fe(t){let e={};return Object.entries(t).forEach(([o,r])=>{r!=null&&(typeof r=="string"||typeof r=="number"||typeof r=="boolean"?e[o]=r:typeof r=="object"&&r!==null&&Object.entries(r).forEach(([i,a])=>{a!=null&&(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(e[i]=a);}));}),e}function ge(t,e){if(!e||Object.keys(e).length===0)return t;let o=me(e);if(!o)return t;let r=t.includes("?")?"&":"?";return `${t}${r}${o}`}var Y=class{constructor(){this.requestInterceptors=[];this.responseInterceptors=[];this.defaultConfig={timeout:1e4,retry:3,retryDelay:1e3,validateStatus:e=>e>=200&&e<300,headers:{"Content-Type":"application/json"}};}addRequestInterceptor(e){this.requestInterceptors.push(e);}addResponseInterceptor(e){this.responseInterceptors.push(e);}createTimeoutController(e){let o=new AbortController;return setTimeout(()=>o.abort(),e),o}mergeHeaders(e={},o={}){return {...e,...o}}sleep(e){return new Promise(o=>setTimeout(o,e))}async request(e,o={}){let s={...this.defaultConfig,...o,headers:this.mergeHeaders(this.defaultConfig.headers,o.headers)};for(let T of this.requestInterceptors)s=await T(s);let i=e;typeof e=="string"&&!e.startsWith("http")&&s.baseURL&&(i=`${s.baseURL}${e.startsWith("/")?"":"/"}${e}`),s.params&&(i=typeof i=="string"?ge(i,s.params):i);let a;s.timeout&&s.timeout>0&&(a=this.createTimeoutController(s.timeout),s.signal=a.signal);let{retry:n=0,retryDelay:u=1e3,validateStatus:c,params:V,baseURL:v,timeout:h,data:y,method:g,...x}=s,ut={...x,method:g};y!==void 0&&(ut.body=typeof y=="string"?y:JSON.stringify(y));let $;for(let T=0;T<=n;T++)try{let m=await fetch(i,ut);if(!c(m.status)){let I=m.statusText,pt;try{let G=await m.json();I=G.message||G.code||I,pt=G.code;}catch{}throw new R(I,pt,m.status,m)}let lt;try{lt=await m.json();}catch{throw new R("Invalid JSON response","PARSE_ERROR",m.status,m)}let w=lt;for(let I of this.responseInterceptors)w=await I(m,w);if(typeof w=="object"&&w!==null&&"success"in w){let I=w;if(I.success)return I.data;throw new R(I.message||"API request failed",I.code,m.status,m)}return w}catch(m){if($=m instanceof Error?m:new Error(String(m)),m instanceof R||m?.name==="AbortError"||T===n)throw $;T<n&&await this.sleep(u);}finally{a?.abort();}throw $}async get(e,o={}){return this.request(e,{...o,method:"GET"})}async post(e,o={}){return this.request(e,{...o,method:"POST"})}async put(e,o={}){return this.request(e,{...o,method:"PUT"})}async delete(e,o={}){return this.request(e,{...o,method:"DELETE"})}async patch(e,o={}){return this.request(e,{...o,method:"PATCH"})}},ve=new Y;var E=ve;async function ct(t){return E.get("/v1/public/strategy_vault/vault/info",{baseURL:t})}async function dt(t,e){return E.get("/v1/public/strategy_vault/vault/performance",{params:e,baseURL:t})}async function mt(t,e){return E.get("/v1/public/strategy_vault/lp/info",{params:e,baseURL:t})}var p=create((t,e)=>({baseUrl:"",vaultInfo:{data:[],loading:false,error:null,lastUpdated:null},vaultLpPerformance:{data:{},loading:false,error:null,lastUpdated:null,params:null},vaultLpInfo:{data:{},loading:false,error:null,lastUpdated:null,params:null},vaultsPageConfig:null,setBaseUrl:o=>{t({baseUrl:o});},fetchVaultInfo:async o=>{let r=e(),s=o||r.baseUrl;if(!s){t(i=>({vaultInfo:{...i.vaultInfo,error:"Base URL is required"}}));return}t(i=>({baseUrl:o||i.baseUrl,vaultInfo:{...i.vaultInfo,loading:true,error:null}}));try{let i=await ct(s);t(a=>({vaultInfo:{...a.vaultInfo,data:i.rows,loading:!1,error:null,lastUpdated:Date.now()}}));}catch(i){t(a=>({vaultInfo:{...a.vaultInfo,loading:false,error:i instanceof Error?i.message:"Failed to fetch vault info"}}));}},refreshVaultInfo:async()=>{let o=e();o.vaultInfo.lastUpdated&&o.baseUrl&&await o.fetchVaultInfo();},fetchVaultLpPerformance:async(o,r)=>{let s=e(),i=r||s.baseUrl;if(!i){t(a=>({vaultLpPerformance:{...a.vaultLpPerformance,error:"Base URL is required"}}));return}t(a=>({baseUrl:r||a.baseUrl,vaultLpPerformance:{...a.vaultLpPerformance,loading:true,error:null,params:o}}));try{let a=await dt(i,o);t(n=>({vaultLpPerformance:{...n.vaultLpPerformance,data:{...n.vaultLpPerformance.data,[o.vault_id]:a.rows},loading:!1,error:null,lastUpdated:Date.now()}}));}catch(a){t(n=>({vaultLpPerformance:{...n.vaultLpPerformance,loading:false,error:a instanceof Error?a.message:"Failed to fetch vault LP performance"}}));}},refreshVaultLpPerformance:async()=>{let o=e();o.vaultLpPerformance.lastUpdated&&o.vaultLpPerformance.params&&o.baseUrl&&await o.fetchVaultLpPerformance(o.vaultLpPerformance.params);},fetchVaultLpInfo:async(o,r)=>{let s=e(),i=r||s.baseUrl;if(!i){t(a=>({vaultLpInfo:{...a.vaultLpInfo,error:"Base URL is required"}}));return}t(a=>({baseUrl:r||a.baseUrl,vaultLpInfo:{...a.vaultLpInfo,loading:true,error:null,params:o}}));try{let a=await mt(i,o);t(n=>({vaultLpInfo:{...n.vaultLpInfo,data:{...n.vaultLpInfo.data,[o.vault_id]:a.rows},loading:!1,error:null,lastUpdated:Date.now()}}));}catch(a){t(n=>({vaultLpInfo:{...n.vaultLpInfo,loading:false,error:a instanceof Error?a.message:"Failed to fetch vault LP info"}}));}},refreshVaultLpInfo:async()=>{let o=e();o.vaultLpInfo.lastUpdated&&o.vaultLpInfo.params&&o.baseUrl&&await o.fetchVaultLpInfo(o.vaultLpInfo.params);},setVaultsPageConfig:o=>{t({vaultsPageConfig:o});}})),ft=()=>p(t=>t.vaultInfo),$o=()=>p(t=>t.vaultLpPerformance),Go=()=>p(t=>t.vaultLpInfo),Yo=()=>p(t=>({fetchVaultInfo:t.fetchVaultInfo,refreshVaultInfo:t.refreshVaultInfo})),Ko=()=>p(t=>({fetchVaultLpPerformance:t.fetchVaultLpPerformance,refreshVaultLpPerformance:t.refreshVaultLpPerformance})),Jo=()=>p(t=>({fetchVaultLpInfo:t.fetchVaultLpInfo,refreshVaultLpInfo:t.refreshVaultLpInfo})),jo=t=>p(e=>e.vaultLpPerformance.data[t]),k=t=>p(e=>e.vaultLpInfo.data[t]),Xo=()=>p(t=>Object.keys(t.vaultLpPerformance.data)),Zo=()=>p(t=>Object.keys(t.vaultLpInfo.data)),tr=()=>p(t=>Object.values(t.vaultLpPerformance.data).flat()),er=()=>p(t=>Object.values(t.vaultLpInfo.data).flat());var gt={prod:"https://api-sv.orderly.org",staging:"https://testnet-api-sv.orderly.org",qa:"https://qa-api-sv-aliyun.orderly.org",dev:"https://dev-api-sv.orderly.org"},vt={prod:"https://app.orderly.network",staging:"https://staging-app.orderly.network",qa:"https://qa-app.orderly.network",dev:"https://dev-app.orderly.network"};function q(){let t=useGetEnv();return useMemo(()=>gt[t],[t])}var K=(o=>(o.LP="lp",o.SP="sp",o))(K||{}),L=(o=>(o.DEPOSIT="deposit",o.WITHDRAWAL="withdrawal",o))(L||{});var ht={prod:{vaultProtocol:"0x70Fe7d65Ac7c1a1732f64d2E6fC0E33622D0C991",vaultCrossChainManager:"0x58c9747ccAAE56182C7d9c814F5eaca395D8c93B",vaultPvLedger:"0xB7E792f0da9104A27288421583748215AefFFd78",vaultId:"0xa3426a1cef4052c056fced18099be899d93f1427d13b9a1df1806b91fad3d0c2",spAddress:"0x8bAA309D93FFFB54A64444FD98E10d92D4d9Eb22"},staging:{vaultProtocol:"0x6B6059259B4096ea6420Eb5e08a22214d2303aE9",vaultCrossChainManager:"0x510dD61a988797114A9a51b0d228E894037BD9cb",vaultPvLedger:"0x20AFe57C75D1C548A9Da265fBFC5416c43783589",vaultId:"0x95514fb145354f07bb889f711e856481b5ed52fce52200148aa834b3b29544c8",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"},qa:{vaultProtocol:"0xF5b12d5F1db6DAB8C7c0561152b5e4bb8fD5eb38",vaultCrossChainManager:"0xB8a3245407571804b4db5219cBe8D9F2EA1828DE",vaultPvLedger:"0x15c9B5705CaCB4eb140dfd7a8c651E18027e5146",vaultId:"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"},dev:{vaultProtocol:"0xA292E1126703F804FBD5671F034c7226538C54C7",vaultCrossChainManager:"0x7568ACC147Af12b02713143C3177D7e89C28A9A6",vaultPvLedger:"0x2a5909498d85650744dD5CF964F2136962e5AE6E",vaultId:"0x4812cbb88f4025372a3e2acd10d02b5f680d7d1fe78091f6cfde80122c861099",spAddress:"0xbddfd22ef902a4898147a1ca5b985d03c62a8c41"}};var xt=(t,e)=>t==="deposit"&&e==="lp"?0:t==="withdrawal"&&e==="lp"?1:1;var _=t=>{let{type:e,vaultId:o}=t,{data:r,mutate:s}=usePrivateQuery(`/v1/account_sv_transaction_history?type=${e}&vault_id=${o}&size=1`,{formatter:a=>a?.rows||[],revalidateOnFocus:false});return {latestOperation:useMemo(()=>r?.[0],[r]),refetch:s}};var B=t=>{let{account:e,state:o}=useAccount(),r=useGetEnv(),s=useMemo(()=>ht[r].vaultPvLedger,[r]),[i]=useMutation("/v1/sv_operation_request"),{refetch:a}=_({type:t.type,vaultId:t.vaultId});return {handleOperation:async({amount:u,vaultId:c})=>{if(o.accountId!==o.mainAccountId){toast.error("Please switch to the main account to perform this operation.");return}if(t.type==="deposit"&&new Decimal(u).lt(10)){toast.error("Deposit amount is less than the minimum 10 USDC.");return}let v={payloadType:xt(t.type,"lp"),amount:new Decimal(Number(u)).mul(10**6).toString(),vaultId:c,token:"USDC",domain:{name:"Orderly",version:"1",chainId:o.connectWallet?.chainId,verifyingContract:s}},{message:h,signatured:y}=await e.generateDexRequest(v);try{let g=await i({message:{...h,chainId:o.connectWallet?.chainId},signature:y,userAddress:o.address,verifyingContract:s});if(!g.success){toast.error(g.message);return}await a(),toast.success(`${t.type} successful`);}catch(g){toast.error(g.message);}}}};var It=t=>{let{vaultId:e}=t,[o,r]=useState(""),{vaultInfo:s}=p(),{handleOperation:i}=B({type:"deposit",vaultId:e}),{holding:a}=useCollateral(),n=useMemo(()=>a?.find(g=>g.token==="USDC")?.holding||0,[a]),u=useMemo(()=>s.data.find(x=>x.vault_id===e)?.est_main_share_price,[s.data,e]),c=useMemo(()=>!u||!o?"-":new Decimal(o).div(u).toString(),[o,u]),V=async()=>{!c||c==="-"||(await i({amount:o,vaultId:e}),r(""));},v=useTokenInfo("USDC"),h=useMemo(()=>({...v,display_name:v?.token,symbol:v?.token}),[v]);return {quantity:o,onQuantityChange:g=>{if(g&&new Decimal(g).gt(n)){r(n.toString());return}r(g);},sourceToken:h,maxQuantity:n,sharePrice:u,shares:c,handleDeposit:V,vaultId:e}};var Vt=({vaultId:t})=>{let{latestOperation:e}=_({type:"deposit",vaultId:t});return {latestOperation:e}};var Q=t=>t==="completed"?"success":t==="rejected"?"danger":"primary";var Lt=t=>{let{latestOperation:e}=t,{t:o}=useTranslation();return e?jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-gap-2",children:[jsx("div",{className:"oui-text-xs oui-font-normal oui-text-base-contrast-54",children:o("vaults.deposit.latestDeposit")}),jsx("div",{className:"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3",children:jsxs("div",{className:"oui-flex oui-items-center",children:[jsx("div",{className:cn("oui-mr-1 oui-size-1 oui-rounded-full",e.status==="completed"&&"oui-bg-success",e.status==="rejected"&&"oui-bg-danger",(e.status==="pending"||e.status==="new")&&"oui-bg-primary")}),jsx(Text,{color:Q(e.status),className:"oui-text-xs oui-font-normal",children:e.status.slice(0,1).toUpperCase()+e.status.slice(1)}),jsx(TokenIcon,{name:"USDC",className:"oui-ml-auto oui-mr-1 oui-size-4"}),jsx(Text.numeral,{className:"oui-text-sm oui-font-semibold oui-text-base-contrast-80",children:e.amount_change})]})})]}):null};var Ct=t=>{let{vaultId:e}=t,o=Vt({vaultId:e});return jsx(Lt,{...o})};var Tt=t=>{let{quantity:e,onQuantityChange:o,sourceToken:r,maxQuantity:s,shares:i,handleDeposit:a,vaultId:n}=t,{t:u}=useTranslation();return jsxs("div",{children:[jsx(BrokerWallet,{}),jsx(Box,{mt:3,mb:1,children:jsx(QuantityInput,{value:e,onValueChange:o,token:{...r,precision:6},testId:"oui-testid-vault-deposit-dialog-quantity-input"})}),jsx(AvailableQuantity,{maxQuantity:s?.toString()||"0",onClick:()=>{o(s?.toString()||"0");}}),jsxs(Box,{mt:5,mb:1,className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:u("vaults.deposit.estShares")}),jsx(Text.numeral,{dp:6,padding:false,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-54",children:u("vaults.deposit.shares")}),children:i})]}),jsxs(Box,{mb:1,className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:u("vaults.deposit.lockupDuration")}),jsx(Text.numeral,{suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-54",children:"hrs"}),children:"48"})]}),jsx(Button,{fullWidth:true,color:"primary",disabled:!e||e==="0",className:"oui-mt-8",onClick:a,children:u("common.deposit")}),jsx(Ct,{vaultId:n})]})};var Rt=t=>{let{vaultId:e}=t,o=It({vaultId:e});return jsx(Tt,{...o})};var Wt=t=>{let{vaultId:e}=t,[o,r]=useState(""),{handleOperation:s}=B({type:"withdrawal",vaultId:e}),i=k(e),{vaultInfo:a}=p(),n=useMemo(()=>a.data.find(y=>y.vault_id===e)?.est_main_share_price||0,[a.data,e]),u=i?.[0]?.available_main_shares||0,c=useMemo(()=>!o||!n?"-":new Decimal(o).mul(n).toString(),[o,n]);return {quantity:o,onQuantityChange:h=>{h&&new Decimal(h).gt(u)?r(u.toString()):r(h);},maxQuantity:u,handleWithdraw:async()=>{await s({amount:o,vaultId:e});},vaultId:e,sharePrice:n,receivingAmount:c}};var Nt=({vaultId:t})=>{let{latestOperation:e}=_({type:"withdrawal",vaultId:t});return {latestOperation:e}};var X=()=>jsx("div",{className:"oui-size-2 oui-rounded-full oui-bg-white/[0.54]"}),At=()=>jsx("div",{className:"oui-h-px oui-flex-1 oui-bg-white/[0.2]"}),Z=({children:t,className:e})=>jsx("div",{className:cn("oui-flex-1 oui-text-2xs oui-font-normal oui-text-base-contrast-80",e),children:t}),Me=()=>{let{t}=useTranslation();return jsxs(Fragment,{children:[jsxs("div",{className:"oui-flex oui-items-center",children:[jsx(X,{}),jsx("div",{className:"oui-flex-1",children:jsx(At,{})}),jsx(X,{}),jsx("div",{className:"oui-flex-1",children:jsx(At,{})}),jsx(X,{})]}),jsxs("div",{className:"oui-mt-1 oui-flex oui-justify-between",children:[jsx(Z,{children:t("vaults.withdraw.process.initiate")}),jsx(Z,{className:"oui-text-center",children:t("vaults.withdraw.process.vaultProcess")}),jsx(Z,{className:"oui-text-right",children:t("vaults.withdraw.process.transferred")})]})]})},H=()=>{let{t}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col oui-gap-2 oui-rounded-xl oui-border oui-border-white/[0.12] oui-p-3",children:[jsxs("div",{className:"oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",children:[jsx("div",{children:t("vaults.withdraw.process.withdrawProcess")}),jsx(Text,{color:"primary",children:t("vaults.withdraw.process.upTo")})]}),jsx(Me,{})]})};var Et=t=>{let{latestOperation:e}=t,{t:o}=useTranslation();return e?jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-gap-2",children:[jsx("div",{className:"oui-text-xs oui-font-normal oui-text-base-contrast-54",children:o("vaults.withdraw.latestWithdraw")}),jsx("div",{className:"oui-h-[44px] oui-rounded-lg oui-border oui-border-white/[0.12] oui-p-3",children:jsxs("div",{className:"oui-flex oui-items-center",children:[jsx("div",{className:cn("oui-mr-1 oui-size-1 oui-rounded-full",e.status==="completed"&&"oui-bg-success",e.status==="rejected"&&"oui-bg-danger",(e.status==="pending"||e.status==="new")&&"oui-bg-primary")}),jsx(Text,{color:Q(e.status),className:"oui-text-xs oui-font-normal",children:e.status.slice(0,1).toUpperCase()+e.status.slice(1)}),jsx(TokenIcon,{name:"USDC",className:"oui-ml-auto oui-mr-1 oui-size-4"}),jsx(Text.numeral,{className:"oui-text-sm oui-font-semibold oui-text-base-contrast-80",children:e.amount_change||"-"})]})})]}):jsx(H,{})};var kt=t=>{let{vaultId:e}=t,o=Nt({vaultId:e});return jsx(Et,{...o})};var Ht=t=>{let{quantity:e,onQuantityChange:o,maxQuantity:r,handleWithdraw:s,vaultId:i,sharePrice:a,receivingAmount:n}=t,u=()=>{modal.show(eo,{quantity:e,receivingAmount:n,handleWithdraw:s});},{t:c}=useTranslation();return jsxs("div",{children:[jsx(BrokerWallet,{}),jsx(Box,{mt:3,mb:1,children:jsx(QuantityInput,{value:e,onValueChange:o,token:{display_name:"Shares",precision:6},testId:"oui-testid-vault-withdraw-dialog-quantity-input"})}),jsx(AvailableQuantity,{maxQuantity:r,onClick:()=>{o(r.toString());}}),jsx(z,{label:c("vaults.withdraw.estPricePerShare"),currency:"$",value:a||"-",className:"oui-mb-1 oui-mt-5"}),jsx(z,{label:c("vaults.withdraw.estReceivingAmount"),value:n,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),className:"oui-mb-1"}),jsx(Button,{fullWidth:true,color:"primary",disabled:!e||e==="0",className:"oui-mt-8",onClick:u,children:c("common.withdraw")}),jsx("div",{className:"oui-mt-3",children:jsx(kt,{vaultId:i})})]})},z=({label:t,value:e,suffix:o,currency:r,className:s})=>jsxs("div",{className:cn("oui-flex oui-items-center oui-justify-between oui-text-sm oui-font-semibold oui-text-base-contrast-54",s),children:[jsx("div",{children:t}),jsx(Text.numeral,{currency:r,className:"oui-text-base-contrast",suffix:o,children:e})]}),eo=modal.create(({quantity:t,receivingAmount:e,handleWithdraw:o})=>{let{visible:r,hide:s,onOpenChange:i}=useModal(),{t:a}=useTranslation();return jsx(SimpleDialog,{title:a("vaults.withdraw.dialog.title"),open:r,onOpenChange:i,children:jsxs("div",{className:"oui-flex oui-flex-col",children:[jsx(z,{label:a("vaults.withdraw.dialog.withdrawalAmount"),value:t,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"Shares"})}),jsx(z,{label:a("vaults.withdraw.dialog.estimatedReceiving"),value:e,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),className:"oui-mt-1"}),jsx(Text,{color:"warning",className:"oui-my-5 oui-text-sm oui-font-semibold",children:a("vaults.withdraw.dialog.note")}),jsx(H,{}),jsx(Button,{fullWidth:true,color:"primary",className:"oui-mt-5",onClick:async()=>{await o(),s();},children:a("vaults.withdraw.dialog.initiateWithdrawal")})]})})});var zt=t=>{let{vaultId:e}=t,o=Wt({vaultId:e});return jsx(Ht,{...o})};var et="VaultDepositAndWithdrawWithDialogId",po="VaultDepositAndWithdrawWithSheetId",Gt=t=>{let[e,o]=useState(t.activeTab||"deposit"),{vaultId:r}=t,{t:s}=useTranslation();return jsxs(Tabs,{value:e,onValueChange:o,variant:"contained",size:"lg",classNames:{tabsList:"oui-px-0",tabsContent:"oui-pt-5"},children:[jsx(TabPanel,{title:s("common.deposit"),icon:jsx(ArrowDownSquareFillIcon,{}),value:"deposit",children:jsx(Rt,{vaultId:r})}),jsx(TabPanel,{title:s("common.withdraw"),icon:jsx(ArrowUpSquareFillIcon,{}),value:"withdraw",children:jsx(zt,{vaultId:r})})]})};registerSimpleDialog(et,Gt,{size:"md",classNames:{content:"oui-border oui-border-line-6"}});registerSimpleSheet(po,Gt);var Yt="https://oss.orderly.network/static/symbol_logo/ORDER.png",Xa="Orderly OmniVault",Za="Earn passive yields effortlessly, no trading expertise required. OmniVault deploys market-making strategies, taking on liquidations, and accrue platform fees.";var Kt=t=>{let{t:e}=useTranslation(),o=k(t.vault_id),{fetchVaultLpInfo:r}=p(),s=useGetEnv(),{state:i}=useAccount(),a=q(),{holding:n}=useCollateral(),u=useMemo(()=>n?.find(x=>x.token==="USDC")?.holding||0,[n]);useEffect(()=>{!i.address||!a||!t.vault_id||r({vault_id:t.vault_id,wallet_address:i.address},a);},[t.vault_id,i.address,a]);let c=useMemo(()=>u,[u]),V=useMemo(()=>{let x=o?.[0];return x?{deposits:x.lp_tvl-x.potential_pnl,earnings:x.potential_pnl}:{deposits:"--",earnings:"--"}},[o]),v=useMemo(()=>i.chainNamespace==="EVM",[i.chainNamespace]),h=useMemo(()=>i.chainNamespace!=="EVM"&&i.accountId!==i.mainAccountId,[i.chainNamespace,i.accountId,i.mainAccountId]),y=x=>{modal.show(et,{activeTab:x,vaultId:t.vault_id});},g=()=>{let x=vt[s];window.open(`${x}/vaults`,"_blank");};return {title:e("vaults.card.orderly.title"),description:e("vaults.card.orderly.description"),icon:Yt,vaultInfo:t,lpInfo:V,isEVMConnected:v,openDepositAndWithdraw:y,availableBalance:c,openVaultWebsite:g,isWrongNetwork:h}};var Xt=t=>{let{title:e,vaultInfo:o,lpInfo:r,description:s,isEVMConnected:i,openDepositAndWithdraw:a,availableBalance:n,openVaultWebsite:u}=t,{t:c}=useTranslation(),V=useMemo(()=>jsx("div",{className:"oui-flex oui-items-center",children:o.supported_chains.map((v,h)=>jsx("img",{src:`https://oss.orderly.network/static/network_logo/${v.chain_id}.png`,alt:v.chain_id,className:"oui-relative oui-size-5",style:{marginLeft:h>0?"-4px":"0",zIndex:o.supported_chains.length-h}},v.chain_id))}),[o.supported_chains]);return jsxs("div",{style:{height:"388px"},className:"oui-relative oui-h-[388px] oui-overflow-hidden oui-rounded-2xl oui-bg-base-9",children:[jsx("div",{style:{position:"absolute",top:0,right:0,width:"100%",height:"180px",backdropFilter:"blur(2px)",zIndex:1,background:"linear-gradient(180deg, rgba(44, 5, 69, 0.80) 0%, rgba(19, 21, 25, 0.80) 63.46%, #131519 100%)"}}),jsx("img",{src:"/vaults/orderly_vault_card_bg.png",alt:"",style:{position:"absolute",top:0,right:0,width:"100%",height:"180px",zIndex:0}}),jsxs("div",{className:"oui-absolute oui-left-0 oui-top-0 oui-z-20 oui-flex oui-flex-col oui-gap-3 oui-p-6",children:[jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx("img",{src:"https://oss.orderly.network/static/symbol_logo/ORDER.png",alt:"",className:"oui-size-8"}),jsx("div",{className:"oui-text-[18px] oui-font-semibold oui-text-white",children:e}),V,jsx("div",{className:"oui-z-50 oui-ml-auto oui-cursor-pointer",onClick:u,children:jsx(ArrowRightUpSquareFillIcon,{color:"white",width:18,height:18,viewBox:"0 0 18 18"})})]}),jsx("div",{className:"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54",children:s}),jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx(Jt,{label:c("vaults.card.tvl"),value:o.tvl,textProps:{currency:"$",dp:0,type:"numeral"}}),jsx(Jt,{label:c("vaults.card.apy"),value:(o["30d_apy"]*100).toFixed(2)+"%",textProps:{color:"brand",type:"gradient"}})]}),jsxs("div",{className:"oui-mt-3 oui-flex oui-flex-col oui-items-center oui-gap-2 oui-rounded-lg oui-bg-white/[0.06] oui-p-3",children:[jsx(rt,{label:c("vaults.card.myDeposits"),value:r.deposits}),jsx(rt,{label:c("vaults.card.myEarnings"),value:r.earnings})]}),jsx(rt,{label:c("vaults.card.accountBalance"),value:n}),jsx(Po,{isEVMConnected:i,openDepositAndWithdraw:a})]})]})},Jt=t=>{let{label:e,value:o,textProps:r}=t;return jsxs("div",{className:cn("oui-flex oui-flex-1 oui-flex-col oui-items-center oui-justify-center oui-px-3 oui-py-2","oui-rounded-lg oui-border oui-border-solid oui-border-white/[0.12]"),children:[jsx("div",{className:"oui-text-2xs oui-font-normal oui-leading-[18px] oui-text-base-contrast-54",children:e}),r.type==="gradient"?jsx(Text.gradient,{className:"oui-text-base oui-font-semibold",...r,children:o}):jsx(Text.numeral,{className:"oui-text-base oui-font-semibold",...r,children:o})]})},rt=t=>{let{label:e,value:o,textProps:r}=t;return jsxs("div",{className:"oui-flex oui-w-full oui-items-center oui-justify-between oui-text-2xs oui-font-normal",children:[jsx("div",{className:"oui-text-base-contrast-54",children:e}),jsx(Text.numeral,{className:"oui-text-base-contrast-80",...r,dp:2,suffix:jsx("span",{className:"oui-ml-1 oui-text-base-contrast-36",children:"USDC"}),children:o})]})},Po=t=>{let{isEVMConnected:e,openDepositAndWithdraw:o}=t,{t:r}=useTranslation();return jsx(AuthGuard,{buttonProps:{size:"md",fullWidth:true},children:e?jsxs("div",{className:"oui-flex oui-items-center oui-gap-2",children:[jsx(Button,{className:"oui-flex-1",size:"md",onClick:()=>o("deposit"),children:r("common.deposit")}),jsx(Button,{className:"oui-flex-1",size:"md",color:"secondary",onClick:()=>o("withdraw"),children:r("common.withdraw")})]}):jsx(Button,{size:"md",color:"warning",children:r("connector.wrongNetwork")})})};var Zt=t=>{let{vault:e}=t,o=Kt(e);return jsx(Xt,{...o})};var te=t=>{let{vaults:e}=t,{t:o}=useTranslation();return jsxs("div",{className:"oui-flex oui-flex-col oui-gap-6",children:[jsx("div",{className:"oui-text-xl oui-font-normal oui-text-base-contrast",children:o("vaults.allVaults")}),jsx("div",{className:"oui-grid oui-grid-cols-3 oui-gap-4 min-[1024px]:oui-grid-cols-3",children:e.map(r=>jsx(Zt,{vault:r},r.vault_id))})]})};var ee=()=>{let t=ft().data;return jsx(te,{vaults:t})};var re=t=>{let e=q(),{fetchVaultInfo:o,setVaultsPageConfig:r}=p();return useEffect(()=>{t.config&&r(t.config);},[t.config]),useEffect(()=>{e&&o(e);},[e]),jsx("div",{children:t.children})};var se=t=>{let{supportVaults:e,headerImage:o}=t,{t:r}=useTranslation(),s=useConfig("brokerName"),i=useMemo(()=>jsx("div",{className:"oui-flex oui-items-center",children:e.map((n,u)=>jsx("img",{src:`https://oss.orderly.network/static/network_logo/${n.chain_id}.png`,alt:n.chain_id,className:"oui-relative oui-size-5",style:{marginLeft:u>0?"-4px":"0",zIndex:e.length-u}},n.chain_id))}),[e]),a=useMemo(()=>typeof o=="string"?jsx("img",{src:o,alt:"header",className:"oui-bg-contain oui-bg-center oui-bg-no-repeat"}):o,[o]);return jsxs("div",{className:"oui-flex oui-items-center oui-justify-between",children:[jsxs("div",{className:"oui-flex oui-max-w-[726px] oui-flex-col",children:[jsxs("div",{className:"oui-flex oui-items-center oui-gap-1 oui-text-[18px] oui-font-normal oui-text-base-contrast-54",children:[r("vaults.availableOn")," ",i]}),jsx("div",{className:"oui-mb-6 oui-mt-8 oui-text-5xl oui-font-bold oui-leading-[44px] oui-text-base-contrast",children:r("vaults.header.title")}),jsx("div",{className:"oui-text-xl oui-font-normal oui-text-base-contrast-54",children:r("vaults.header.description",{brokerName:s})})]}),jsx("div",{className:"oui-h-[238px] oui-w-[360px]",children:a})]})};var ie=()=>{let{vaultInfo:t,vaultsPageConfig:e}=p();return {supportVaults:useMemo(()=>{let r=[];return t.data.forEach(s=>{r.push(...s.supported_chains);}),uniqBy(s=>s.chain_id,r)},[t.data]),headerImage:e?.headerImage}};var ne=()=>{let t=ie();return jsx(se,{...t})};var le=t=>{let{t:e}=useTranslation(),{vaultsInfo:o}=t;return jsxs("div",{className:cn("oui-flex oui-items-center oui-gap-6 oui-rounded-2xl oui-p-6"),style:{background:"linear-gradient(28.29deg, #1B1D22 21.6%, #26292E 83.23%)"},children:[jsx(nt,{title:e("vaults.introduction.tvl"),value:o.tvl,textProps:{currency:"$"}}),jsx(Divider,{direction:"vertical",className:"oui-h-[64px] oui-bg-white/[0.12]"}),jsx(nt,{title:e("common.vaults"),value:o.vaultsCount}),jsx(Divider,{direction:"vertical",className:"oui-h-[64px] oui-bg-white/[0.12]"}),jsx(nt,{title:e("vaults.introduction.depositors"),value:o.lpCount})]})},nt=t=>{let{title:e,value:o,textProps:r}=t;return jsxs("div",{className:"oui-flex oui-flex-1 oui-flex-col oui-items-center oui-gap-3 oui-rounded-2xl",children:[jsx("div",{className:"oui-text-base oui-font-normal oui-text-base-contrast-54",children:e}),jsx(Text.numeral,{className:"oui-text-xl oui-font-semibold",dp:0,...r,children:o})]})};var ce=()=>{let{vaultInfo:t}=p();return {vaultsInfo:useMemo(()=>{let o=t.data.reduce((s,i)=>s+i.tvl,0),r=t.data.reduce((s,i)=>s+i.lp_counts,0);return {tvl:o,lpCount:r,vaultsCount:t.data.length}},[t.data])}};var de=()=>{let t=ce();return jsx(le,{...t})};var Li=t=>jsx(re,{...t,children:jsx("div",{className:cn("oui-relative oui-min-h-screen oui-px-6 oui-py-12","oui-bg-base-10",t?.className),children:jsxs("div",{id:"vaults-content",className:"oui-mx-auto oui-flex oui-max-w-[1200px] oui-flex-col oui-gap-[48px]",children:[jsx(ne,{}),jsx(de,{}),jsx(ee,{})]})})});
13
+
14
+ export { te as AllVaultsDesktop, ee as AllVaultsWidget, Ct as LatestDepositWidget, kt as LatestWithdrawWidget, Yt as ORDERLY_ICON, Za as ORDERLY_VAULT_DESCRIPTION, Xa as ORDERLY_VAULT_TITLE, L as OperationType, K as RoleType, Xt as VaultCard, Zt as VaultCardWidget, Gt as VaultDepositAndWithdraw, et as VaultDepositAndWithdrawWithDialogId, po as VaultDepositAndWithdrawWithSheetId, Rt as VaultDepositWidget, zt as VaultWithdrawWidget, se as VaultsHeaderDesktop, ne as VaultsHeaderWidget, de as VaultsIntroductionWidget, Li as VaultsPage, ct as getVaultInfo, mt as getVaultLpInfo, dt as getVaultLpPerformance, Kt as useVaultCardScript, Yo as useVaultInfoActions, ft as useVaultInfoState, Jo as useVaultLpInfoActions, er as useVaultLpInfoArray, k as useVaultLpInfoById, Zo as useVaultLpInfoIds, Go as useVaultLpInfoState, Ko as useVaultLpPerformanceActions, tr as useVaultLpPerformanceArray, jo as useVaultLpPerformanceById, Xo as useVaultLpPerformanceIds, $o as useVaultLpPerformanceState, ie as useVaultsHeaderScript, p as useVaultsStore };
15
+ //# sourceMappingURL=out.js.map
16
+ //# sourceMappingURL=index.mjs.map