clerk-tools.ts•3.09 kB
import 'dotenv/config';
import { config } from 'dotenv';
import { createClerkClient } from '@clerk/backend';
import { z } from 'zod';
// Carregar variáveis de ambiente do .env.local
config({ path: '.env.local' });
// Inicializar o cliente Clerk
const clerk = createClerkClient({
secretKey: process.env.CLERK_SECRET_KEY!
});
// Schema de validação para listar usuários
export const listUsersSchema = {
limit: z.number().min(1).max(100).optional().default(10),
offset: z.number().min(0).optional().default(0),
orderBy: z.enum(['created_at', 'updated_at']).optional().default('created_at')
};
// Schema de validação para deletar usuário
export const deleteUserSchema = {
userId: z.string().min(1)
};
// Schema de validação para bloquear usuário
export const lockUserSchema = {
userId: z.string().min(1)
};
// Ferramenta: Listar Usuários
export async function listUsers(params: {
limit?: number;
offset?: number;
orderBy?: 'created_at' | 'updated_at';
}) {
try {
const { limit = 10, offset = 0, orderBy = 'created_at' } = params;
const response = await clerk.users.getUserList({
limit,
offset,
orderBy: orderBy === 'created_at' ? '-created_at' : '-updated_at'
});
const users = response.data.map(user => ({
id: user.id,
email: user.emailAddresses[0]?.emailAddress || null,
firstName: user.firstName,
lastName: user.lastName,
username: user.username,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
locked: user.locked,
banned: user.banned
}));
return {
success: true,
data: {
users,
total: response.totalCount,
limit,
offset
}
};
} catch (error: any) {
return {
success: false,
error: error.message || 'Erro ao listar usuários'
};
}
}
// Ferramenta: Deletar Usuário
export async function deleteUser(params: { userId: string }) {
try {
const { userId } = params;
await clerk.users.deleteUser(userId);
return {
success: true,
message: `Usuário ${userId} deletado com sucesso`
};
} catch (error: any) {
return {
success: false,
error: error.message || 'Erro ao deletar usuário'
};
}
}
// Ferramenta: Bloquear Usuário
export async function lockUser(params: { userId: string }) {
try {
const { userId } = params;
await clerk.users.lockUser(userId);
return {
success: true,
message: `Usuário ${userId} bloqueado com sucesso`
};
} catch (error: any) {
return {
success: false,
error: error.message || 'Erro ao bloquear usuário'
};
}
}
// Ferramenta: Desbloquear Usuário (bônus)
export async function unlockUser(params: { userId: string }) {
try {
const { userId } = params;
await clerk.users.unlockUser(userId);
return {
success: true,
message: `Usuário ${userId} desbloqueado com sucesso`
};
} catch (error: any) {
return {
success: false,
error: error.message || 'Erro ao desbloquear usuário'
};
}
}