Aerostack
security

sec-cors-validate Edge Function — Security

Security

Validates a request Origin against an allow list and returns the correct CORS response headers to set — supports wildcards and credentials.

navin @navin verified
Updated Mar 12, 2026
GitHub

Edge function sec-cors-validate Validates a request Origin against an allow list and returns the correct CORS response headers to set — supports wildcards and credentials.. Deployed on Cloudflare Workers — zero cold starts, globally distributed. Mount it via your Aerostack workspace to call it from any AI agent.

terminal — aerostack cli
$ npx aerostack add navin/sec-cors-validate
smart_toy

Use with AI Assistants

MCP

Connect Claude, Cursor, or any MCP-compatible client — then call this function by slug

① Add MCP Server

Add this once — access all Aerostack functions from your AI tool.

claude_desktop_config.json
{
  "mcpServers": {
    "aerostack": {
      "url": "https://mcp.aerostack.dev",
      "type": "http"
    }
  }
}

② Call this function

Ask your AI to use the call_function tool with this slug:

call_function
call_function({
  slug: "sec-cors-validate",
  args: {
    "origin": "example_origin",
    "allowList": null,
    "allowCredentials": false
  }
})

sec-cors-validate — Validate CORS origins

Checks a request's Origin header against your allow list and returns the exact CORS headers to set. Supports exact matches, wildcard subdomains, and credential-bearing requests.


API

POST /api/sec-cors-validate

Request body

Field Type Required Default Description
origin string The Origin header value from the incoming request
allowList string[] Allowed origins — exact, wildcard (*.example.com), or *
allowCredentials boolean false Whether to allow cookies/credentials

Success response (200)

{
  "success": true,
  "data": {
    "allowed": true,
    "headers": {
      "Access-Control-Allow-Origin": "https://app.example.com",
      "Vary": "Origin",
      "Access-Control-Allow-Credentials": "true"
    }
  }
}

Error responses

Code HTTP When
INVALID_INPUT 400 Missing origin or allowList
INTERNAL_ERROR 500 Unexpected error

Usage

cURL
curl -X POST "$FUNCTION_URL" \
  -H "Content-Type: application/json" \
  -d '{"origin": "https://app.example.com", "allowList": ["*.example.com"], "allowCredentials": true}'
TypeScript / JavaScript (HTTP)
const response = await fetch(FUNCTION_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    origin: request.headers.get('origin') ?? '',
    allowList: ['https://app.example.com', '*.staging.example.com'],
  }),
});
const { data } = await response.json();
if (data.allowed) {
  for (const [key, value] of Object.entries(data.headers)) {
    response.headers.set(key, value);
  }
}
Direct import (Node / Bun / Deno)
import { corsValidate } from '@aerostack/functions/sec-cors-validate';

const { allowed, headers } = corsValidate({
  origin: req.headers.origin ?? '',
  allowList: ['https://example.com', '*.example.com'],
});

Use Cases

  • Implementing dynamic CORS middleware that reads allowed origins from a database or config
  • Handling multi-tenant SaaS where each tenant has their own allowed origins
  • Building API gateways that need to enforce per-endpoint CORS policies
  • Validating preflight OPTIONS requests before allowing the actual request

Notes

  • Wildcard pattern *.example.com matches app.example.com but NOT example.com itself
  • The global wildcard * matches any origin — do NOT combine with allowCredentials: true (browsers will reject this)
  • When allowed=false, headers is an empty object — do not set any CORS headers
  • Always set the Vary: Origin header (included automatically) to prevent caching issues

Metadata

upgrade Version 1.0.0
gavel License MIT
language Language typescript
cloud Provider aerostack

Tags

security
deployed_code

Build and publish your own functions

Write a TypeScript function, deploy it to the edge, and share it with thousands of developers — in minutes.

More Security Functions

Browse Security Functions →

Frequently asked questions

What does the sec-cors-validate function do? +

sec-cors-validate is a serverless edge function for security automation written in aerostack. Deploy it to Cloudflare Workers via your Aerostack workspace.

How do I deploy the sec-cors-validate function? +

Install the Aerostack CLI and run: ```bash aerostack deploy function @navin/sec-cors-validate ``` It will be live on Cloudflare Workers in seconds.

What runtime does sec-cors-validate use? +

sec-cors-validate runs on aerostack on the Cloudflare Workers edge runtime — zero cold starts, globally distributed.

Can I customise the sec-cors-validate function? +

Yes. Fork the function from your Aerostack dashboard, modify the source, and redeploy. All changes are version-controlled.