summaryrefslogtreecommitdiff
path: root/apps/web/lib/rate-limit.ts
blob: 45c3a7f9441d8ae5853a3a51addae53e5ad57352 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { createSupabaseAdminClient } from "@/lib/supabase/admin"

export async function rateLimit(
  identifier: string,
  limit: number,
  windowMilliseconds: number
): Promise<{ success: boolean; remaining: number }> {
  const windowSeconds = Math.max(Math.floor(windowMilliseconds / 1000), 1)
  const adminClient = createSupabaseAdminClient()

  const { data, error } = await adminClient.rpc("check_rate_limit", {
    p_identifier: identifier,
    p_limit: limit,
    p_window_seconds: windowSeconds,
  })

  if (error) {
    console.error("rate limit check failed:", error)
    return { success: false, remaining: 0 }
  }

  return {
    success: data.success as boolean,
    remaining: data.remaining as number,
  }
}