DisposableGuard

Nuxt (Vue)

// server/api/signup.post.ts
export default defineEventHandler(async (event) => {
  const body = await readBody(event);
  const { email } = body;

  try {
    const r = await fetch(
      `https://api.disposableguard.com/v1/check?email=${encodeURIComponent(email)}`,
      {
        headers: {
          Authorization: `Bearer ${process.env.DG_KEY}`,
        },
      }
    );
    if (r.ok) {
      const data = await r.json();
      if (data.is_disposable) {
        throw createError({
          statusCode: 400,
          message: "Please use a real email address.",
        });
      }
    }
  } catch (e: any) {
    if (e.statusCode) throw e;
    // fail-open for network errors
  }

  // ...signup logic
  return { ok: true };
});

Notes

Add `DG_KEY` to `.env`. The server API route runs on the server side.