@serafort/cloudflare-workers
v0.1.0
Published
Cloudflare Workers middleware, KV token caching, edge tenant routing, and local JWKS validation for Serafort IAM.
Readme
@serafort/cloudflare-workers
Enterprise IAM, Edge Tenant Routing, KV Token Caching, and Web Crypto JWT validation for Cloudflare Workers.
Features
- ⚡ Zero-Dependency Web Crypto: Local JWKS token validation in microseconds at the Cloudflare Edge using standard Web APIs.
- 🏢 Edge Tenant Routing: Subdomain (
tenant.example.com) and header (X-Tenant-ID) resolution with cross-tenant boundary verification before reaching origin servers. - 🛡️ Edge Middleware Wrapper:
withSerafortAuth(handler, protectOptions, config)with wildcard RBAC (org:*), route exemptions, and automated 302 redirects or 401 JSON responses. - 🗄️ Cloudflare KV Caching:
KVCacheAdapterfor fast caching of M2M tokens across globally distributed edge datacenters. - 🔀 Header Decoration: Injects
x-serafort-user-id,x-serafort-tenant-id, andx-serafort-rolesheaders for origin microservices.
Installation
npm install @serafort/cloudflare-workers @serafort/coreQuick Start
// src/index.ts
import { withSerafortAuth, type WorkerAuthContext } from '@serafort/cloudflare-workers';
interface Env {
SERAFORT_ENDPOINT: string;
}
export default {
fetch: withSerafortAuth<Env>(
async (request, env, ctx, auth: WorkerAuthContext) => {
return new Response(JSON.stringify({
message: 'Hello from Cloudflare Edge!',
userId: auth.user?.userId,
tenantId: auth.tenantId,
}), {
headers: { 'Content-Type': 'application/json' },
});
},
{
roles: ['admin'],
permissions: ['org:*'],
},
{
endpoint: 'https://api.serafort.com',
publicRoutes: ['/health', '/api/public/*'],
tenantSubdomain: true,
loginUrl: 'https://app.serafort.com/login',
}
),
};Contributing
Before committing, changes are checked with pnpm run type-check.
This is wired up two ways — pick whichever fits your setup:
- Husky (npm-idiomatic, default for contributors who run
pnpm install): thepreparescript installs a Husky hook automatically, so once you've runpnpm installin a git checkout,git commitruns the check for you. .githooks/(portable, no Husky/Node required to install): rungit config core.hooksPath .githooksonce to point git directly at the checked-in.githooks/pre-commitscript, which runs the same check.
Both hooks run the same command, so pick one — you don't need both active at once.
CI (.github/workflows/ci.yml) runs type-check, test, and build on
every push to main and on every pull request.
License
MIT — see LICENSE.
