Node.js SDK
SDK de Auris para backends Node.js con Express, Fastify, Hono y mas.
Instalacion
npm install @auris/node
# o
yarn add @auris/node
# o
pnpm add @auris/nodeConfiguracion
import { Auris } from '@auris/node';
const auris = new Auris({
apiKey: process.env.AURIS_API_KEY,
});Verificar tokens
Valida el JWT enviado por el cliente:
import { verifyToken } from '@auris/node';
// En tu middleware
async function authMiddleware(req, res, next) {
const token = req.headers.authorization?.replace('Bearer ', '');
if (!token) {
return res.status(401).json({ error: 'Token requerido' });
}
try {
const session = await verifyToken(token);
req.auth = {
userId: session.userId,
sessionId: session.sessionId,
orgId: session.orgId,
};
next();
} catch (error) {
return res.status(401).json({ error: 'Token invalido' });
}
}Express
import express from 'express';
import { Auris, requireAuth } from '@auris/node';
const app = express();
const auris = new Auris({ apiKey: process.env.AURIS_API_KEY });
// Middleware de autenticacion
app.use('/api', requireAuth());
// Ruta protegida
app.get('/api/me', async (req, res) => {
const { userId } = req.auth;
const user = await auris.users.get(userId);
res.json(user);
});
// Ruta publica
app.get('/api/health', (req, res) => {
res.json({ status: 'ok' });
});
app.listen(3000);Fastify
import Fastify from 'fastify';
import { aurisPlugin } from '@auris/node/fastify';
const fastify = Fastify();
// Registrar plugin
await fastify.register(aurisPlugin, {
apiKey: process.env.AURIS_API_KEY,
});
// Ruta protegida
fastify.get('/api/me', {
preHandler: fastify.requireAuth,
}, async (request, reply) => {
const { userId } = request.auth;
const user = await fastify.auris.users.get(userId);
return user;
});
await fastify.listen({ port: 3000 });Hono
import { Hono } from 'hono';
import { aurisMiddleware } from '@auris/node/hono';
const app = new Hono();
// Aplicar middleware a rutas /api/*
app.use('/api/*', aurisMiddleware({
apiKey: process.env.AURIS_API_KEY,
}));
app.get('/api/me', async (c) => {
const { userId } = c.get('auth');
// ...
});
export default app;Gestion de Usuarios
Obtener usuario
const user = await auris.users.get('user_xxxxx');
console.log(user.email, user.firstName);Listar usuarios
const { data, totalCount } = await auris.users.list({
limit: 10,
offset: 0,
orderBy: '-createdAt',
});
for (const user of data) {
console.log(user.email);
}Actualizar usuario
const user = await auris.users.update('user_xxxxx', {
firstName: 'Juan',
lastName: 'Perez',
publicMetadata: {
role: 'admin',
},
});Eliminar usuario
await auris.users.delete('user_xxxxx');Banear/Desbanear usuario
// Banear
await auris.users.ban('user_xxxxx');
// Desbanear
await auris.users.unban('user_xxxxx');Organizaciones
Crear organizacion
const org = await auris.organizations.create({
name: 'Mi Empresa',
slug: 'mi-empresa',
createdBy: 'user_xxxxx',
});Agregar miembro
await auris.organizations.addMember('org_xxxxx', {
userId: 'user_yyyyy',
role: 'member', // 'admin' | 'member'
});Listar miembros
const members = await auris.organizations.listMembers('org_xxxxx');
for (const member of members) {
console.log(member.user.email, member.role);
}Sesiones
Listar sesiones de usuario
const sessions = await auris.sessions.list({
userId: 'user_xxxxx',
});
for (const session of sessions) {
console.log(session.id, session.lastActiveAt);
}Revocar sesion
await auris.sessions.revoke('session_xxxxx');Revocar todas las sesiones
await auris.users.revokeSessions('user_xxxxx');Webhooks
Verificar la firma de webhooks entrantes:
import { verifyWebhook } from '@auris/node';
app.post('/api/webhooks/auris', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['auris-signature'];
try {
const event = verifyWebhook(
req.body,
signature,
process.env.AURIS_WEBHOOK_SECRET
);
switch (event.type) {
case 'user.created':
console.log('Nuevo usuario:', event.data.email);
break;
case 'user.deleted':
console.log('Usuario eliminado:', event.data.id);
break;
case 'session.created':
console.log('Nueva sesion:', event.data.userId);
break;
}
res.json({ received: true });
} catch (error) {
console.error('Webhook invalido:', error);
res.status(400).json({ error: 'Firma invalida' });
}
});