@irondome/auth
v0.1.3
Published
Authentication + Session adapters for Irondome
Readme
@irondome/auth
Autenticação e identidade — bcrypt, JWT e adapters para o mesmo
Subjectque o PBAC consome.
Pilar: quem é o utilizador? Produz tokens e mapeia sessões externas para Subject (@irondome/core).
Parte do monorepo Irondome — alinhado ao README principal: auth próprio, NextAuth e Clerk.
O que é?
@irondome/auth fornece login email/senha (bcrypt + jose), createOwnAuth, verificação de JWT, subpath @irondome/auth/jwt só com jose (Edge/middleware), adapters nextAuthToSubject e clerkToSubject, e schema Drizzle PostgreSQL (irondome_users).
Autenticação ≠ autorização — as regras ficam em @irondome/core + @irondome/next.
Instalação
pnpm add @irondome/auth @irondome/coreDependências
| Tipo | Pacotes |
|------|---------|
| Peer | @irondome/core (obrigatório), drizzle-orm (opcional — só para schema PG) |
| Incluídos | bcryptjs, jose |
O que inclui
| Área | Conteúdo |
|------|----------|
| Auth próprio | createOwnAuth, signIn, getSubjectFromToken, hashPassword, verifyPassword |
| JWT (Edge) | import { verifyToken } from "@irondome/auth/jwt" — sem bcrypt |
| NextAuth | nextAuthToSubject |
| Clerk | clerkToSubject |
| Utilitário | toSubject |
| Schema | @irondome/auth/schema/pg → irondomeUsers |
Exemplo rápido (auth próprio)
import { createOwnAuth } from "@irondome/auth";
import { db } from "@/server/db";
import { irondomeUsers } from "@irondome/auth/schema/pg";
import { eq } from "drizzle-orm";
export const ownAuth = createOwnAuth({
jwtSecret: process.env.JWT_SECRET!,
getUserByEmail: (email) =>
db.query.irondomeUsers.findFirst({ where: eq(irondomeUsers.email, email) }),
});// app/api/auth/signin/route.ts
import { ownAuth } from "@/lib/irondome/own-auth";
import { NextResponse } from "next/server";
export async function POST(req: Request) {
const { email, password } = await req.json();
const result = await ownAuth.signIn(email, password);
if (!result.ok) return NextResponse.json({ error: "Credenciais inválidas" }, { status: 401 });
const res = NextResponse.json({ ok: true });
res.cookies.set(ownAuth.cookieName, result.token, { httpOnly: true, sameSite: "lax" });
return res;
}(Mesmo fluxo descrito no README do monorepo, secção Auth próprio.)
Middleware (Edge) — só JWT
import { verifyToken } from "@irondome/auth/jwt";
const payload = await verifyToken(token, process.env.JWT_SECRET!);
// Subject: { id: payload.sub, roles: payload.roles, orgId: payload.orgId }Não importes bcrypt no Edge.
Adapters (NextAuth / Clerk)
import { nextAuthToSubject } from "@irondome/auth";
const subject = nextAuthToSubject(session, { getRoles: (s) => s.user?.roles ?? ["user"] });
import { clerkToSubject } from "@irondome/auth";
const subject = clerkToSubject(await auth());Relação com outros pacotes
| Pacote | Função |
|--------|--------|
| @irondome/core | Avalia can(subject, …) — precisa do Subject que este pacote fornece |
| @irondome/next | Lê cookies / chama verifyToken no middleware e expõe guards |
Variáveis de ambiente
JWT_SECRET=mínimo-32-chars-aleatórios
DATABASE_URL=postgresql://... # se usares Drizzle + schema PGDocumentação
| Recurso | Ligação | |---------|---------| | Monorepo | README Irondome | | Quatro pilares (Auth) | Guia dos pilares | | Publicar no npm | npm-publish |
Licença
MIT © rbxyz
