# Edge & Serverless

Integrate disposable email checks in serverless functions. Choose Node.js, Deno or portable Fetch clients for Supabase, Vercel and Workers.

Choose the JavaScript transport that matches your runtime. All checks use `https://api.irondome.dev`; keep credentials in server-side secrets.

## Choose by runtime

| Runtime | Client entry | Connection owner |
| --- | --- | --- |
| Cloudflare Workers | `@irondome-dev/sdk` | Platform Fetch |
| Vercel Node.js Functions | `@irondome-dev/sdk/node` | SDK HTTPS pool |
| Vercel Edge Functions | `@irondome-dev/sdk` | Platform Fetch |
| Standalone Deno with native HTTP client support | `npm:@irondome-dev/sdk@0.2.0/deno` | SDK native HTTP client |
| Supabase Edge Functions | `npm:@irondome-dev/sdk@0.2.0` | Platform Fetch |

For Supabase Auth user creation, prefer the signed [Before User Created hook](/docs/guides/supabase). It does not require you to deploy an Edge Function or expose an email-check proxy.

A runtime using Deno does not necessarily expose `Deno.createHttpClient`. Choose portable Fetch in restricted hosted environments; use the native Deno adapter only when that API is available.

## Install the package

For the platform helpers using the published JavaScript package:

```sh
npm install @irondome-dev/sdk@0.2.0
```

These helpers set `baseUrl` explicitly to `https://api.irondome.dev`. For installation and the client API, see the [JavaScript guide](/docs/guides/node#availability). Pin dependencies in your deployment and verify resolution in staging.

## Configure server secrets

Set `IRONDOME_API_KEY` in your platform's secret manager. If the integration uses `IRONDOME_BASE_URL`, set it to `https://api.irondome.dev`. Do not accept either value from request input.

Your authorized plan determines quota and billing. See [plans and limits](/docs/plans) and [manage your plan](/docs/guides/migrate).

## Enforce the signup decision

Run the check inside your protected backend flow after input validation and rate limiting, before creating an account or sending a verification message. Await the result.

Reject disposable addresses according to your policy. Handle authentication, quota, timeout, and service failures separately from classifications. A check failure must not become an allowed-email result.

## Keep work within the runtime lifecycle

Reuse a module-scoped Node.js or native Deno client within a warm instance. Close owned pools at shutdown after work drains, not after each request. Portable clients delegate sockets to platform Fetch; follow the platform's invocation rules.

Optional warmup sends an unauthenticated health request without consuming a check. Another invocation can use another instance, so it cannot guarantee a prepared connection for signup. Do not detach a check that controls account creation or add a health request before every check.

Continue with [Workers](/docs/guides/workers), [Vercel](/docs/guides/vercel), [Deno](/docs/guides/deno), or [connection reuse](/docs/guides/performance).
