@@ -23,6 +23,57 @@ export interface VaultSummary {
2323 strategy : StrategyMetadata ;
2424}
2525
26+ export interface VaultHistoryPoint {
27+ date : string ;
28+ /** Normalized share price index (100 = baseline). */
29+ value : number ;
30+ }
31+
32+ function isValidHistory ( data : unknown ) : data is VaultHistoryPoint [ ] {
33+ return (
34+ Array . isArray ( data ) &&
35+ data . length > 0 &&
36+ data . every (
37+ ( p ) =>
38+ p !== null &&
39+ typeof p === "object" &&
40+ typeof ( p as VaultHistoryPoint ) . date === "string" &&
41+ typeof ( p as VaultHistoryPoint ) . value === "number" ,
42+ )
43+ ) ;
44+ }
45+
46+ /** Mock series when the API returns no points or is unreachable. */
47+ const MOCK_VAULT_HISTORY : VaultHistoryPoint [ ] = [
48+ { date : "2025-09-24" , value : 100 } ,
49+ { date : "2025-10-01" , value : 100.32 } ,
50+ { date : "2025-10-08" , value : 100.41 } ,
51+ { date : "2025-10-15" , value : 100.58 } ,
52+ { date : "2025-10-22" , value : 100.72 } ,
53+ { date : "2025-10-29" , value : 100.89 } ,
54+ { date : "2025-11-05" , value : 101.02 } ,
55+ { date : "2025-11-12" , value : 101.15 } ,
56+ { date : "2025-11-19" , value : 101.28 } ,
57+ { date : "2025-11-26" , value : 101.44 } ,
58+ { date : "2025-12-03" , value : 101.58 } ,
59+ { date : "2025-12-10" , value : 101.71 } ,
60+ { date : "2025-12-17" , value : 101.85 } ,
61+ { date : "2025-12-24" , value : 101.98 } ,
62+ { date : "2025-12-31" , value : 102.12 } ,
63+ { date : "2026-01-07" , value : 102.28 } ,
64+ { date : "2026-01-14" , value : 102.41 } ,
65+ { date : "2026-01-21" , value : 102.55 } ,
66+ { date : "2026-01-28" , value : 102.68 } ,
67+ { date : "2026-02-04" , value : 102.82 } ,
68+ { date : "2026-02-11" , value : 102.95 } ,
69+ { date : "2026-02-18" , value : 103.08 } ,
70+ { date : "2026-02-25" , value : 103.22 } ,
71+ { date : "2026-03-04" , value : 103.35 } ,
72+ { date : "2026-03-11" , value : 103.48 } ,
73+ { date : "2026-03-18" , value : 103.61 } ,
74+ { date : "2026-03-25" , value : 103.75 } ,
75+ ] ;
76+
2677const apiClient = createApiClient ( {
2778 baseUrl : import . meta. env . VITE_API_BASE_URL ,
2879 headers : {
@@ -33,3 +84,15 @@ const apiClient = createApiClient({
3384export async function getVaultSummary ( ) {
3485 return apiClient . get < VaultSummary > ( "/mock-api/vault-summary.json" ) ;
3586}
87+
88+ export async function getVaultHistory ( ) : Promise < VaultHistoryPoint [ ] > {
89+ try {
90+ const data = await apiClient . get < unknown > ( "/mock-api/vault-history.json" ) ;
91+ if ( isValidHistory ( data ) ) {
92+ return data ;
93+ }
94+ } catch {
95+ // Use mock below
96+ }
97+ return MOCK_VAULT_HISTORY ;
98+ }
0 commit comments