-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrespond.ts
90 lines (76 loc) · 2.98 KB
/
respond.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// TODO: turn this into @ergodark/next-respond npm package along with the types
import type { NextApiResponse } from 'next'
import type {
HttpStatusCode,
SuccessJsonResponse,
ErrorJsonResponse
} from 'types/global'
export function sendGenericHttpResponse(res: NextApiResponse, statusCode: HttpStatusCode, responseJson?: Record<string, unknown>) {
res.status(statusCode).send(responseJson || {});
}
export function sendHttpSuccessResponse(res: NextApiResponse, statusCode: HttpStatusCode, responseJson?: Omit<SuccessJsonResponse, 'success'>) {
const json: SuccessJsonResponse = { ...responseJson, success: true };
sendGenericHttpResponse(res, statusCode, json);
return json;
}
export function sendHttpErrorResponse(res: NextApiResponse, statusCode: HttpStatusCode, responseJson?: ErrorJsonResponse) {
sendGenericHttpResponse(res, statusCode, responseJson);
return responseJson;
}
export function sendHttpOk(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpSuccessResponse(res, 200, responseJson);
}
export function sendHttpBadRequest(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 400, {
error: 'request was malformed or otherwise bad',
...responseJson
});
}
export function sendHttpUnauthenticated(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 401, {
error: 'session is not authenticated',
...responseJson
});
}
export function sendHttpUnauthorized(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 403, {
error: 'session is not authorized',
...responseJson
});
}
export function sendHttpNotFound(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 404, {
error: 'resource was not found',
...responseJson
});
}
export function sendHttpBadMethod(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 405, {
error: 'bad method',
...responseJson
});
}
export function sendHttpTooLarge(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 413, {
error: 'request body is too large',
...responseJson
});
}
export function sendHttpRateLimited(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 429, {
error: 'session is rate limited',
...responseJson
});
}
export function sendHttpError(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 500, {
error: '🤯 something unexpected happened on our end 🤯',
...responseJson
});
}
export function sendNotImplementedError(res: NextApiResponse, responseJson?: Record<string, unknown>) {
sendHttpErrorResponse(res, 501, {
error: 'this endpoint has not yet been implemented',
...responseJson
});
}