auth-api.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { z } from "zod";
  2. class authApi {
  3. // /auth/registration
  4. public ZRegistration = {
  5. req: z.object({
  6. email: z.string().email(),
  7. }),
  8. res: z.object({
  9. code: z.enum(["pinIsSent", "pinIsNotSent", "alreadyExists"]),
  10. transactionId: z.string().uuid().optional(),
  11. }),
  12. };
  13. // /auth/confirm-registration
  14. public ZConfirmRegistration = {
  15. req: z.object({
  16. password: z.string(),
  17. name: z.string(),
  18. transactionId: z.string().uuid(),
  19. confirmPin: z.number().min(1000).max(9999),
  20. }),
  21. res: z.discriminatedUnion("code", [
  22. z.object({
  23. code: z.literal("registered"),
  24. userData: z.object({
  25. accessToken: z.string(),
  26. refreshToken: z.string(),
  27. email: z.string().email(),
  28. userId: z.string().uuid(),
  29. }),
  30. }),
  31. z.object({ code: z.literal("pinIsWrong"), triesRemained: z.number() }),
  32. z.object({ code: z.literal("pinIsRotten") }),
  33. z.object({ code: z.literal("tooManyTries") }),
  34. ]),
  35. };
  36. // /auth/login
  37. public ZLogin = {
  38. req: z.object({
  39. email: z.string().email(),
  40. password: z.string(),
  41. }),
  42. res: z.object({
  43. code: z.enum(["userNotFound", "passIsWrong", "tooManyTries", "success"]),
  44. triesRemained: z.number().optional(),
  45. userData: z
  46. .object({
  47. accessToken: z.string(),
  48. refreshToken: z.string(),
  49. email: z.string().email(),
  50. userId: z.string().uuid(),
  51. })
  52. .optional(),
  53. }),
  54. };
  55. // /auth/logout
  56. public ZLogout = {
  57. res: z.object({
  58. code: z.enum(["success"]),
  59. }),
  60. };
  61. // /auth/logout-all-devices
  62. public ZLogoutAllDevices = {
  63. res: z.object({
  64. code: z.enum(["success"]),
  65. }),
  66. };
  67. // /auth/refresh
  68. public ZRefresh = {
  69. res: z.object({
  70. code: z.enum(["success"]),
  71. userData: z.object({
  72. accessToken: z.string(),
  73. refreshToken: z.string(),
  74. email: z.string().email(),
  75. userId: z.string().uuid(),
  76. }),
  77. }),
  78. };
  79. }
  80. export const AuthApi = new authApi();