@darco2903/auth-api 2.0.4-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,163 @@
1
+ import { initContract, ZodErrorSchema } from "@ts-rest/core";
2
+ import z from "zod";
3
+ import { apiError, apiSuccess } from "../types.js";
4
+ import { authHeaderSchema, accessTokenDataDecodedSchema, accessRefreshSchema, emailCredentialSchema, emailSchema, passwordCredentialSchema, passwordSchema, turnstileSchema, usernameSchema, totpCodeSchema, } from "../types/index.js";
5
+ const c = initContract();
6
+ export default c.router({
7
+ auth: {
8
+ method: "POST",
9
+ path: "/auth/check",
10
+ headers: authHeaderSchema,
11
+ body: c.noBody(),
12
+ responses: {
13
+ 200: apiSuccess(z.union([
14
+ z.object({
15
+ result: z.literal(true),
16
+ data: accessTokenDataDecodedSchema,
17
+ }),
18
+ z.object({
19
+ result: z.literal(false),
20
+ data: z.undefined(),
21
+ }),
22
+ ])),
23
+ },
24
+ },
25
+ login: {
26
+ method: "POST",
27
+ path: "/login",
28
+ body: z.object({
29
+ email: emailCredentialSchema,
30
+ password: passwordCredentialSchema,
31
+ turnstile: turnstileSchema,
32
+ }),
33
+ responses: {
34
+ 200: apiSuccess(accessRefreshSchema),
35
+ 400: ZodErrorSchema,
36
+ 401: z.union([
37
+ apiError(z.literal("CREDENTIALS_INVALID"), z.literal("Invalid Credentials")),
38
+ apiError(z.literal("INVALID_TURNSTILE"), z.literal("Invalid Turnstile")),
39
+ ]),
40
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
41
+ },
42
+ },
43
+ refresh: {
44
+ method: "POST",
45
+ path: "/refresh",
46
+ body: z
47
+ .object({
48
+ refreshToken: z.string(),
49
+ })
50
+ .optional(),
51
+ responses: {
52
+ 200: apiSuccess(accessRefreshSchema),
53
+ 400: z.union([
54
+ apiError(z.literal("INVALID_REQUEST"), z.literal("Missing refresh token")),
55
+ ZodErrorSchema,
56
+ ]),
57
+ 401: apiError(z.literal("UNAUTHORIZED"), z.literal("Unauthorized")),
58
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
59
+ },
60
+ },
61
+ totpSetup: {
62
+ method: "POST",
63
+ path: "/totp/setup",
64
+ headers: authHeaderSchema,
65
+ body: c.noBody(),
66
+ responses: {
67
+ 200: apiSuccess(z.object({
68
+ secret: z.string(),
69
+ otpauthUrl: z.string(),
70
+ })),
71
+ 400: z.union([
72
+ ZodErrorSchema,
73
+ apiError(z.literal("TOTP_ALREADY_SETUP"), z.string()),
74
+ ]),
75
+ 401: apiError(z.literal("UNAUTHORIZED"), z.literal("Unauthorized")),
76
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
77
+ },
78
+ },
79
+ totpSetupConfirm: {
80
+ method: "POST",
81
+ path: "/totp/setup/confirm",
82
+ headers: authHeaderSchema,
83
+ body: z.object({
84
+ totpCode: totpCodeSchema,
85
+ }),
86
+ responses: {
87
+ 200: apiSuccess(c.noBody()),
88
+ 400: z.union([
89
+ ZodErrorSchema,
90
+ apiError(z.literal("TOTP_NOT_SETUP"), z.string()),
91
+ apiError(z.literal("TOTP_INVALID"), z.string()),
92
+ ]),
93
+ 401: apiError(z.literal("UNAUTHORIZED"), z.literal("Unauthorized")),
94
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
95
+ },
96
+ },
97
+ totpVerify: {
98
+ method: "POST",
99
+ path: "/totp/verify",
100
+ headers: authHeaderSchema,
101
+ body: z.object({
102
+ totpCode: totpCodeSchema,
103
+ }),
104
+ responses: {
105
+ 200: apiSuccess(c.noBody()),
106
+ 400: z.union([
107
+ ZodErrorSchema,
108
+ apiError(z.literal("TOTP_NOT_SETUP"), z.string()),
109
+ apiError(z.literal("TOTP_NOT_REQUIRED"), z.string()),
110
+ apiError(z.literal("TOTP_INVALID"), z.string()),
111
+ ]),
112
+ 401: apiError(z.literal("UNAUTHORIZED"), z.literal("Unauthorized")),
113
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
114
+ },
115
+ },
116
+ totpDisable: {
117
+ method: "POST",
118
+ path: "/totp/disable",
119
+ headers: authHeaderSchema,
120
+ body: z.object({
121
+ totpCode: totpCodeSchema,
122
+ }),
123
+ responses: {
124
+ 200: apiSuccess(c.noBody()),
125
+ 400: z.union([
126
+ ZodErrorSchema,
127
+ apiError(z.literal("TOTP_NOT_SETUP"), z.string()),
128
+ apiError(z.literal("TOTP_INVALID"), z.string()),
129
+ ]),
130
+ 401: apiError(z.literal("UNAUTHORIZED"), z.literal("Unauthorized")),
131
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
132
+ },
133
+ },
134
+ logout: {
135
+ method: "POST",
136
+ path: "/logout",
137
+ body: z
138
+ .object({
139
+ refreshToken: z.string(),
140
+ })
141
+ .optional(),
142
+ responses: {
143
+ 200: apiSuccess(c.noBody()),
144
+ },
145
+ },
146
+ register: {
147
+ method: "POST",
148
+ path: "/register",
149
+ body: z.object({
150
+ username: usernameSchema,
151
+ email: emailSchema,
152
+ password: passwordSchema,
153
+ turnstile: turnstileSchema,
154
+ }),
155
+ responses: {
156
+ 200: apiSuccess(c.noBody()),
157
+ 400: ZodErrorSchema,
158
+ 401: apiError(z.literal("INVALID_TURNSTILE"), z.literal("Invalid Turnstile")),
159
+ 409: apiError(z.literal("USER_EXISTS"), z.literal("User with this email already exists")),
160
+ 500: apiError(z.literal("INTERNAL_SERVER_ERROR"), z.string()),
161
+ },
162
+ },
163
+ });