next-auth-pubkey
Version:
A light-weight Lightning and Nostr auth provider for your Next.js app that's entirely self-hosted and plugs seamlessly into the next-auth framework.
69 lines (68 loc) • 1.99 kB
JavaScript
import { z } from "zod";
const leadingSlashRegex = new RegExp("^(/+)");
export const configValidation = z
.object({
// required
baseUrl: z.string().min(5),
secret: z.string().min(10),
storage: z
.object({
set: z.function(),
get: z.function(),
update: z.function(),
delete: z.function(),
})
.strict(),
generateQr: z.function(),
// optional
generateAvatar: z.function().optional(),
generateName: z.function().optional(),
pages: z
.object({
lightningSignIn: z.string().regex(leadingSlashRegex).min(1).optional(),
nostrSignIn: z.string().regex(leadingSlashRegex).min(1).optional(),
error: z.string().regex(leadingSlashRegex).min(1).optional(),
})
.strict()
.nullish(),
flags: z
.object({
diagnostics: z.boolean().optional(),
logs: z.boolean().optional(),
})
.strict()
.nullish(),
theme: z
.object({
colorScheme: z
.union([z.literal("light"), z.literal("dark")])
.optional(),
background: z.string().min(1).optional(),
backgroundCard: z.string().min(1).optional(),
text: z.string().min(1).optional(),
error: z.string().min(1).optional(),
signInButtonBackground: z.string().min(1).optional(),
signInButtonText: z.string().min(1).optional(),
qrBackground: z.string().min(1).optional(),
qrForeground: z.string().min(1).optional(),
qrMargin: z.number().positive().max(10).optional(),
})
.strict()
.nullish(),
intervals: z
.object({
poll: z
.number()
.min(500) // 0.5s
.max(5000) // 5s
.optional(),
create: z
.number()
.min(30 * 1000) // 30s
.max(60 * 60 * 1000) // 1h
.optional(),
})
.strict()
.nullish(),
})
.strict();