SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.3 KB · 32 lines typescript
Raw Blame History
1import { z } from 'zod';2import { passwordStrength } from './password-strength';34export const emailSchema = z.string().trim().toLowerCase().email('Enter a valid e-mail address').max(254);56export const passwordSchema = z7  .string()8  .min(10, 'Use at least 10 characters')9  .max(200, 'Password is too long')10  .refine((p) => passwordStrength(p).score >= 1, 'That password is too common or too simple');1112export const codeSchema = z13  .string()14  .transform((s) => s.replace(/\D/g, ''))15  .pipe(z.string().length(6, 'Enter the 6-digit code'));1617export const handleSchema = z18  .string()19  .trim()20  .toLowerCase()21  .min(3, 'At least 3 characters')22  .max(24, 'At most 24 characters')23  .regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/, 'Letters, numbers and hyphens only');2425const RESERVED = new Set(['admin', 'rareindex', 'api', 'support', 'help', 'about', 'login', 'signup', 'account', 'collections', 'watchlist', 'root', 'system', 'null', 'undefined']);26export function isReservedHandle(h: string): boolean {27  return RESERVED.has(h);28}2930export const signupSchema = z.object({ email: emailSchema, password: passwordSchema, name: z.string().trim().max(80).optional().or(z.literal('')) });31export const loginSchema = z.object({ email: emailSchema, password: z.string().min(1, 'Enter your password').max(200), remember: z.boolean().optional() });32