38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
|
|
import { NextRequest, NextResponse } from 'next/server'
|
||
|
|
|
||
|
|
// Proxies aladhan.com — free, no API key required
|
||
|
|
export async function GET(req: NextRequest) {
|
||
|
|
const { searchParams } = new URL(req.url)
|
||
|
|
const lat = searchParams.get('lat')
|
||
|
|
const lng = searchParams.get('lng')
|
||
|
|
const method = searchParams.get('method') || '3' // MWL
|
||
|
|
|
||
|
|
if (!lat || !lng) return NextResponse.json({ error: 'lat and lng required' }, { status: 400 })
|
||
|
|
|
||
|
|
try {
|
||
|
|
const res = await fetch(
|
||
|
|
`https://api.aladhan.com/v1/timings?latitude=${lat}&longitude=${lng}&method=${method}`,
|
||
|
|
{ signal: AbortSignal.timeout(8000) }
|
||
|
|
)
|
||
|
|
if (!res.ok) return NextResponse.json({ error: 'Prayer times unavailable' }, { status: 502 })
|
||
|
|
const data = await res.json()
|
||
|
|
const timings = data.data?.timings
|
||
|
|
const date = data.data?.date
|
||
|
|
|
||
|
|
return NextResponse.json({
|
||
|
|
timings: {
|
||
|
|
Fajr: timings?.Fajr,
|
||
|
|
Sunrise: timings?.Sunrise,
|
||
|
|
Dhuhr: timings?.Dhuhr,
|
||
|
|
Asr: timings?.Asr,
|
||
|
|
Maghrib: timings?.Maghrib,
|
||
|
|
Isha: timings?.Isha,
|
||
|
|
},
|
||
|
|
hijri: date?.hijri,
|
||
|
|
gregorian: date?.gregorian,
|
||
|
|
})
|
||
|
|
} catch {
|
||
|
|
return NextResponse.json({ error: 'Prayer times unavailable' }, { status: 502 })
|
||
|
|
}
|
||
|
|
}
|