Saxo connector

This commit is contained in:
OpenSquared
2026-07-18 17:14:13 +02:00
parent 91054979ec
commit bff2f70781
10 changed files with 826 additions and 2 deletions

View File

@@ -1664,3 +1664,59 @@ export const useDeleteSavedStrategy = () => {
onSuccess: () => qc.invalidateQueries({ queryKey: ['saved-strategies'] }),
})
}
// ── Saxo connection ───────────────────────────────────────────────────────────
export type SaxoStatus = {
connected: boolean; configured: boolean; environment: string
expires_at?: string; refresh_expires_at?: string
}
export const useSaxoStatus = () =>
useQuery<SaxoStatus>({
queryKey: ['saxo-status'],
queryFn: () => api.get('/saxo/status').then(r => r.data),
refetchInterval: 60_000,
})
export const useDisconnectSaxo = () => {
const qc = useQueryClient()
return useMutation({
mutationFn: () => api.post('/saxo/disconnect').then(r => r.data),
onSuccess: () => qc.invalidateQueries({ queryKey: ['saxo-status'] }),
})
}
export const useSaxoWatchlist = () =>
useQuery<{ symbols: string[] }>({
queryKey: ['saxo-watchlist'],
queryFn: () => api.get('/saxo/watchlist').then(r => r.data),
})
export const useUpdateSaxoWatchlist = () => {
const qc = useQueryClient()
return useMutation({
mutationFn: (symbols: string[]) => api.put('/saxo/watchlist', { symbols }).then(r => r.data),
onSuccess: () => qc.invalidateQueries({ queryKey: ['saxo-watchlist'] }),
})
}
export const useSnapshotSaxoNow = () =>
useMutation({
mutationFn: (symbol: string) => api.post(`/saxo/snapshot-now/${encodeURIComponent(symbol)}`).then(r => r.data),
})
export type SaxoSnapshotRow = {
id: string; symbol: string; snapshot_date: string; spot: number | null
expiry_date: string; strike: number; option_type: 'call' | 'put'
bid: number | null; ask: number | null; mid: number | null; volatility_pct: number | null
delta: number | null; gamma: number | null; theta: number | null; vega: number | null
created_at: string
}
export const useSaxoHistory = (symbol?: string) =>
useQuery<SaxoSnapshotRow[]>({
queryKey: ['saxo-history', symbol],
queryFn: () => api.get('/saxo/history', { params: symbol ? { symbol } : {} }).then(r => r.data),
enabled: !!symbol,
})