validation.ts 969 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import { PublicKey } from '@solana/web3.js'
  2. import { z } from 'zod'
  3. function isValidSolanaAddress(address: string): boolean {
  4. try {
  5. new PublicKey(address)
  6. return true
  7. } catch {
  8. return false
  9. }
  10. }
  11. const solanaAddress = z.string().refine(isValidSolanaAddress, {
  12. message: 'Invalid Solana address',
  13. })
  14. export const addWalletSchema = z.object({
  15. address: solanaAddress,
  16. label: z.string().max(100).optional(),
  17. })
  18. export const updateWalletSchema = z.object({
  19. label: z.string().max(100).optional(),
  20. isActive: z.boolean().optional(),
  21. })
  22. export const settingsSchema = z.object({
  23. copyRatio: z.number().min(0.01).max(100).optional(),
  24. maxPositionSizeSol: z.number().min(0.001).max(10000).optional(),
  25. slippageBps: z.number().int().min(1).max(10000).optional(),
  26. autoCopyEnabled: z.boolean().optional(),
  27. })
  28. export const paginationSchema = z.object({
  29. page: z.coerce.number().int().min(1).default(1),
  30. limit: z.coerce.number().int().min(1).max(100).default(20),
  31. })