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/node

Configuracion

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' });
  }
});