skailan-core
Version:
Servicio de autenticación y multitenancy para Skailan.
75 lines • 2.21 kB
JavaScript
import { PrismaClient } from "@prisma/client";
/**
* Utility functions for common operations across packages
*/
/**
* Validates if a string is a valid UUID
*/
export const isValidUUID = (uuid) => {
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return uuidRegex.test(uuid);
};
/**
* Generates a safe organization slug from a name
*/
export const generateOrganizationSlug = (name) => {
return name
.toLowerCase()
.trim()
.replace(/[^a-z0-9]/g, "-")
.replace(/-+/g, "-")
.replace(/^-|-$/g, "");
};
/**
* Validates organization slug format
*/
export const isValidOrganizationSlug = (slug) => {
const slugRegex = /^[a-z0-9-]+$/;
return slugRegex.test(slug) && slug.length >= 3 && slug.length <= 50;
};
/**
* Creates a tenant Prisma client with custom configuration
*/
export const createTenantPrismaClient = (organizationSlug, options) => {
const schema = `org_${organizationSlug}`;
const baseUrl = options?.datasourceUrl || process.env.DATABASE_URL;
if (!baseUrl) {
throw new Error("DATABASE_URL environment variable is required");
}
return new PrismaClient({
datasources: {
db: {
url: `${baseUrl}?schema=${schema}`,
},
},
log: options?.log ? ["query", "info", "warn", "error"] : undefined,
});
};
/**
* Validates email format
*/
export const isValidEmail = (email) => {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
};
/**
* Sanitizes user input for safe database operations
*/
export const sanitizeInput = (input) => {
return input
.trim()
.replace(/[<>]/g, "") // Remove potential HTML tags
.substring(0, 1000); // Limit length
};
/**
* Generates a random string for tokens or IDs
*/
export const generateRandomString = (length = 32) => {
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
return result;
};
//# sourceMappingURL=commonUtils.js.map