dn-react-router-toolkit 0.1.12 → 0.2.1
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.
- package/dist/auth/apple_auth.d.mts +38 -0
- package/dist/auth/apple_auth.d.ts +38 -0
- package/dist/{auth-kit → auth}/apple_auth.js +31 -18
- package/dist/auth/apple_auth.mjs +63 -0
- package/dist/{auth-kit/repository.d.mts → auth/auth_repository.d.mts} +10 -11
- package/dist/{auth-kit/repository.d.ts → auth/auth_repository.d.ts} +10 -11
- package/dist/{file-kit/repository.js → auth/auth_repository.js} +3 -3
- package/dist/{auth-kit → auth}/auth_service.d.mts +12 -23
- package/dist/{auth-kit → auth}/auth_service.d.ts +12 -23
- package/dist/{auth-kit → auth}/auth_service.js +24 -77
- package/dist/{auth-kit → auth}/auth_service.mjs +24 -77
- package/dist/auth/client/google_login_button.d.mts +7 -0
- package/dist/auth/client/google_login_button.d.ts +7 -0
- package/dist/{auth-kit → auth}/client/google_login_button.js +24 -19
- package/dist/auth/client/google_login_button.mjs +37 -0
- package/dist/auth/client/provider.d.mts +26 -0
- package/dist/auth/client/provider.d.ts +26 -0
- package/dist/auth/client/provider.js +152 -0
- package/dist/auth/client/provider.mjs +116 -0
- package/dist/{auth-kit → auth}/client/redirect_page.js +1 -1
- package/dist/{auth-kit → auth}/client/redirect_page.mjs +1 -1
- package/dist/auth/google_auth.d.mts +33 -0
- package/dist/auth/google_auth.d.ts +33 -0
- package/dist/{auth-kit → auth}/google_auth.js +23 -32
- package/dist/{auth-kit → auth}/google_auth.mjs +22 -31
- package/dist/auth/handlers/find_auth.d.mts +13 -0
- package/dist/auth/handlers/find_auth.d.ts +13 -0
- package/dist/{route/api/auth/route.js → auth/handlers/find_auth.js} +10 -10
- package/dist/{route/api/auth/route.mjs → auth/handlers/find_auth.mjs} +5 -5
- package/dist/auth/handlers/login.d.mts +13 -0
- package/dist/auth/handlers/login.d.ts +13 -0
- package/dist/{route/api/auth/login/route.js → auth/handlers/login.js} +17 -17
- package/dist/{route/api/auth/login/route.mjs → auth/handlers/login.mjs} +12 -12
- package/dist/auth/handlers/login_with_thirdparty.d.mts +15 -0
- package/dist/auth/handlers/login_with_thirdparty.d.ts +15 -0
- package/dist/{route/api/auth/login/[provider]/route.js → auth/handlers/login_with_thirdparty.js} +12 -27
- package/dist/{route/api/auth/login/[provider]/route.mjs → auth/handlers/login_with_thirdparty.mjs} +7 -22
- package/dist/auth/handlers/logout.d.mts +13 -0
- package/dist/auth/handlers/logout.d.ts +13 -0
- package/dist/{route/api/auth/logout/route.js → auth/handlers/logout.js} +15 -11
- package/dist/{route/api/auth/logout/route.mjs → auth/handlers/logout.mjs} +11 -7
- package/dist/auth/handlers/refresh.d.mts +13 -0
- package/dist/auth/handlers/refresh.d.ts +13 -0
- package/dist/{route/api/auth/refresh/route.js → auth/handlers/refresh.js} +12 -12
- package/dist/{route/api/auth/refresh/route.mjs → auth/handlers/refresh.mjs} +7 -7
- package/dist/auth/handlers/request_password_reset.d.mts +10 -0
- package/dist/auth/handlers/request_password_reset.d.ts +10 -0
- package/dist/auth/handlers/request_password_reset.js +87 -0
- package/dist/auth/handlers/request_password_reset.mjs +60 -0
- package/dist/auth/handlers/reset_password.d.mts +10 -0
- package/dist/auth/handlers/reset_password.d.ts +10 -0
- package/dist/auth/handlers/reset_password.js +88 -0
- package/dist/auth/handlers/reset_password.mjs +61 -0
- package/dist/auth/handlers/signup.d.mts +15 -0
- package/dist/auth/handlers/signup.d.ts +15 -0
- package/dist/auth/handlers/signup.js +147 -0
- package/dist/auth/handlers/signup.mjs +112 -0
- package/dist/auth/handlers/signup_with_thirdparty.d.mts +17 -0
- package/dist/auth/handlers/signup_with_thirdparty.d.ts +17 -0
- package/dist/auth/handlers/signup_with_thirdparty.js +123 -0
- package/dist/auth/handlers/signup_with_thirdparty.mjs +98 -0
- package/dist/auth/handlers/thirdparty_auth_callback.d.mts +16 -0
- package/dist/auth/handlers/thirdparty_auth_callback.d.ts +16 -0
- package/dist/{route/auth/callback/[provider]/route.js → auth/handlers/thirdparty_auth_callback.js} +54 -45
- package/dist/{route/auth/callback/[provider]/route.mjs → auth/handlers/thirdparty_auth_callback.mjs} +49 -40
- package/dist/{auth-kit/jwt.d.mts → auth/jwt_manager.d.mts} +11 -1
- package/dist/{auth-kit/jwt.d.ts → auth/jwt_manager.d.ts} +11 -1
- package/dist/{auth-kit/jwt.js → auth/jwt_manager.js} +25 -11
- package/dist/{auth-kit/jwt.mjs → auth/jwt_manager.mjs} +22 -8
- package/dist/auth/kakao_auth.d.mts +27 -0
- package/dist/auth/kakao_auth.d.ts +27 -0
- package/dist/auth/kakao_auth.js +56 -0
- package/dist/auth/kakao_auth.mjs +31 -0
- package/dist/auth/password_recovery.d.mts +34 -0
- package/dist/auth/password_recovery.d.ts +34 -0
- package/dist/auth/password_recovery.js +169 -0
- package/dist/auth/password_recovery.mjs +134 -0
- package/dist/auth/thirdparty_auth.d.mts +41 -0
- package/dist/auth/thirdparty_auth.d.ts +41 -0
- package/dist/{auth-kit/kakao_auth.js → auth/thirdparty_auth.js} +31 -33
- package/dist/{auth-kit/kakao_auth.mjs → auth/thirdparty_auth.mjs} +26 -28
- package/dist/{auth-kit → auth}/with_auth.d.mts +5 -6
- package/dist/{auth-kit → auth}/with_auth.d.ts +5 -6
- package/dist/{auth-kit → auth}/with_auth.js +26 -10
- package/dist/auth/with_auth.mjs +63 -0
- package/dist/date.d.mts +2 -0
- package/dist/date.d.ts +2 -0
- package/dist/date.js +4 -2
- package/dist/date.mjs +2 -1
- package/dist/{file-kit → file}/cdn.js +1 -1
- package/dist/{file-kit → file}/cdn.mjs +1 -1
- package/dist/{file-kit → file}/client/drop_file_input.js +3 -3
- package/dist/{file-kit → file}/client/drop_file_input.mjs +3 -3
- package/dist/{file-kit → file}/client/file_upload_button.js +1 -1
- package/dist/{file-kit → file}/client/file_upload_button.mjs +1 -1
- package/dist/{file-kit → file}/client/file_uploader.js +3 -3
- package/dist/{file-kit → file}/client/file_uploader.mjs +2 -2
- package/dist/{file-kit → file}/client/format_size.js +1 -1
- package/dist/{file-kit → file}/client/format_size.mjs +1 -1
- package/dist/{file-kit → file}/client/metadata.js +1 -1
- package/dist/{file-kit → file}/client/metadata.mjs +1 -1
- package/dist/{file-kit/repository.d.mts → file/file_repository.d.mts} +4 -4
- package/dist/{file-kit/repository.d.ts → file/file_repository.d.ts} +4 -4
- package/dist/{auth-kit/repository.js → file/file_repository.js} +3 -3
- package/dist/file/file_service.d.mts +32 -0
- package/dist/file/file_service.d.ts +32 -0
- package/dist/{file-kit → file}/file_service.js +27 -21
- package/dist/file/file_service.mjs +41 -0
- package/dist/file/handlers/delete_file.d.mts +17 -0
- package/dist/file/handlers/delete_file.d.ts +17 -0
- package/dist/{route/api/files/[fileId]/route.js → file/handlers/delete_file.js} +15 -15
- package/dist/{route/api/files/[fileId]/route.mjs → file/handlers/delete_file.mjs} +10 -10
- package/dist/file/handlers/upload_file.d.mts +16 -0
- package/dist/file/handlers/upload_file.d.ts +16 -0
- package/dist/{route/api/files/route.js → file/handlers/upload_file.js} +13 -13
- package/dist/{route/api/files/route.mjs → file/handlers/upload_file.mjs} +8 -8
- package/dist/{file-kit → file}/object_storage.d.mts +3 -1
- package/dist/{file-kit → file}/object_storage.d.ts +3 -1
- package/dist/{file-kit → file}/object_storage.js +2 -2
- package/dist/{file-kit → file}/object_storage.mjs +2 -2
- package/dist/{file-kit → file}/responsive_image.d.mts +4 -4
- package/dist/{file-kit → file}/responsive_image.d.ts +4 -4
- package/dist/{file-kit → file}/responsive_image.js +18 -9
- package/dist/{file-kit → file}/responsive_image.mjs +18 -9
- package/dist/{http-kit → http}/index.js +5 -5
- package/dist/{http-kit → http}/index.mjs +1 -1
- package/dist/{http-kit → http}/response.js +1 -1
- package/dist/{http-kit → http}/response.mjs +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.mjs +1 -0
- package/dist/route/api.d.mts +17 -25
- package/dist/route/api.d.ts +17 -25
- package/dist/route/api.js +367 -178
- package/dist/route/api.mjs +356 -177
- package/dist/{seo-kit → seo}/seo.js +1 -1
- package/dist/{seo-kit → seo}/seo.mjs +1 -1
- package/package.json +76 -74
- package/dist/auth-kit/apple_auth.d.mts +0 -24
- package/dist/auth-kit/apple_auth.d.ts +0 -24
- package/dist/auth-kit/apple_auth.mjs +0 -50
- package/dist/auth-kit/client/google_login_button.d.mts +0 -9
- package/dist/auth-kit/client/google_login_button.d.ts +0 -9
- package/dist/auth-kit/client/google_login_button.mjs +0 -32
- package/dist/auth-kit/client/logout.d.mts +0 -3
- package/dist/auth-kit/client/logout.d.ts +0 -3
- package/dist/auth-kit/client/logout.js +0 -49
- package/dist/auth-kit/client/logout.mjs +0 -24
- package/dist/auth-kit/google_auth.d.mts +0 -27
- package/dist/auth-kit/google_auth.d.ts +0 -27
- package/dist/auth-kit/kakao_auth.d.mts +0 -24
- package/dist/auth-kit/kakao_auth.d.ts +0 -24
- package/dist/auth-kit/with_auth.mjs +0 -47
- package/dist/file-kit/file_service.d.mts +0 -26
- package/dist/file-kit/file_service.d.ts +0 -26
- package/dist/file-kit/file_service.mjs +0 -35
- package/dist/route/api/auth/login/_provider_/route.d.mts +0 -20
- package/dist/route/api/auth/login/_provider_/route.d.ts +0 -20
- package/dist/route/api/auth/login/route.d.mts +0 -14
- package/dist/route/api/auth/login/route.d.ts +0 -14
- package/dist/route/api/auth/logout/route.d.mts +0 -14
- package/dist/route/api/auth/logout/route.d.ts +0 -14
- package/dist/route/api/auth/refresh/route.d.mts +0 -13
- package/dist/route/api/auth/refresh/route.d.ts +0 -13
- package/dist/route/api/auth/route.d.mts +0 -13
- package/dist/route/api/auth/route.d.ts +0 -13
- package/dist/route/api/files/_fileId_/route.d.mts +0 -17
- package/dist/route/api/files/_fileId_/route.d.ts +0 -17
- package/dist/route/api/files/route.d.mts +0 -16
- package/dist/route/api/files/route.d.ts +0 -16
- package/dist/route/auth/callback/_provider_/route.d.mts +0 -20
- package/dist/route/auth/callback/_provider_/route.d.ts +0 -20
- /package/dist/{auth-kit/repository.mjs → auth/auth_repository.mjs} +0 -0
- /package/dist/{auth-kit → auth}/client/redirect_page.d.mts +0 -0
- /package/dist/{auth-kit → auth}/client/redirect_page.d.ts +0 -0
- /package/dist/{file-kit → file}/cdn.d.mts +0 -0
- /package/dist/{file-kit → file}/cdn.d.ts +0 -0
- /package/dist/{file-kit → file}/client/drop_file_input.d.mts +0 -0
- /package/dist/{file-kit → file}/client/drop_file_input.d.ts +0 -0
- /package/dist/{file-kit → file}/client/file_upload_button.d.mts +0 -0
- /package/dist/{file-kit → file}/client/file_upload_button.d.ts +0 -0
- /package/dist/{file-kit → file}/client/file_uploader.d.mts +0 -0
- /package/dist/{file-kit → file}/client/file_uploader.d.ts +0 -0
- /package/dist/{file-kit → file}/client/format_size.d.mts +0 -0
- /package/dist/{file-kit → file}/client/format_size.d.ts +0 -0
- /package/dist/{file-kit → file}/client/metadata.d.mts +0 -0
- /package/dist/{file-kit → file}/client/metadata.d.ts +0 -0
- /package/dist/{file-kit/repository.mjs → file/file_repository.mjs} +0 -0
- /package/dist/{http-kit → http}/index.d.mts +0 -0
- /package/dist/{http-kit → http}/index.d.ts +0 -0
- /package/dist/{http-kit → http}/response.d.mts +0 -0
- /package/dist/{http-kit → http}/response.d.ts +0 -0
- /package/dist/{seo-kit → seo}/seo.d.mts +0 -0
- /package/dist/{seo-kit → seo}/seo.d.ts +0 -0
package/dist/route/api.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/http
|
|
1
|
+
// src/http/response.ts
|
|
2
2
|
var createJsonResponse = (status) => {
|
|
3
3
|
return (data = {}, init) => {
|
|
4
4
|
return Response.json(data, { status, ...init });
|
|
@@ -48,59 +48,68 @@ var INTERNAL_SERVER_ERROR = createException(
|
|
|
48
48
|
"\uC608\uAE30\uCE58 \uBABB\uD55C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4."
|
|
49
49
|
);
|
|
50
50
|
|
|
51
|
-
// src/
|
|
52
|
-
var
|
|
53
|
-
provider
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
GOOGLE_AUTH,
|
|
57
|
-
APPLE_AUTH,
|
|
58
|
-
SITE_ORIGIN
|
|
51
|
+
// src/auth/handlers/thirdparty_auth_callback.tsx
|
|
52
|
+
var thirdpartyAuthCallbackHandler = async (request, {
|
|
53
|
+
provider,
|
|
54
|
+
authService,
|
|
55
|
+
getThirdPartyAuth
|
|
59
56
|
}) => {
|
|
60
57
|
const url = new URL(request.url);
|
|
61
58
|
const code = url.searchParams.get("code");
|
|
62
59
|
if (!code) {
|
|
63
60
|
throw BAD_REQUEST("\uCF54\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.");
|
|
64
61
|
}
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
62
|
+
try {
|
|
63
|
+
const { accessToken, refreshToken } = await getThirdPartyAuth(
|
|
64
|
+
provider
|
|
65
|
+
).login(code);
|
|
66
|
+
const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
|
|
67
|
+
authService.getAccessTokenSetCookie(accessToken),
|
|
68
|
+
authService.getRefreshTokenSetCookie(refreshToken)
|
|
69
|
+
]);
|
|
70
|
+
const headers = new Headers();
|
|
71
|
+
headers.append("Set-Cookie", accessTokenSetCookie);
|
|
72
|
+
headers.append("Set-Cookie", refreshTokenSetCookie);
|
|
73
|
+
const redirectUrl = url.searchParams.get("state") || "/";
|
|
74
|
+
return new Response("Temporary Redirect", {
|
|
75
|
+
status: 307,
|
|
76
|
+
headers: {
|
|
77
|
+
...headers,
|
|
78
|
+
Location: new URL(
|
|
79
|
+
`/r?redirectUrl=${encodeURIComponent(redirectUrl)}`,
|
|
80
|
+
request.url
|
|
81
|
+
).toString()
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
} catch (error) {
|
|
85
|
+
if (error instanceof Response) {
|
|
86
|
+
if (error.status == 404) {
|
|
87
|
+
const body = await error.json();
|
|
88
|
+
const token = body.token;
|
|
89
|
+
return new Response(
|
|
90
|
+
"Temporary Redirect",
|
|
91
|
+
{
|
|
92
|
+
status: 307,
|
|
93
|
+
headers: {
|
|
94
|
+
Location: new URL(
|
|
95
|
+
`/signup?token=${token}`,
|
|
96
|
+
request.url
|
|
97
|
+
).toString()
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
}
|
|
94
102
|
}
|
|
95
|
-
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
96
105
|
};
|
|
97
106
|
|
|
98
|
-
// src/
|
|
99
|
-
var
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
// src/file/handlers/upload_file.ts
|
|
108
|
+
var uploadFileHandler = async (request, {
|
|
109
|
+
authService,
|
|
110
|
+
fileService
|
|
102
111
|
}) => {
|
|
103
|
-
const auth = await
|
|
112
|
+
const auth = await authService.verifyOrRefresh(request);
|
|
104
113
|
const { name, type, size, metadata } = await request.json();
|
|
105
114
|
const headers = {
|
|
106
115
|
"Access-Control-Allow-Origin": "*"
|
|
@@ -112,7 +121,7 @@ var fileUploadHandler = async (request, {
|
|
|
112
121
|
return BAD_REQUEST("\uD30C\uC77C \uD0C0\uC785\uC774 \uD544\uC694\uD574\uC694.", { headers });
|
|
113
122
|
}
|
|
114
123
|
try {
|
|
115
|
-
const result = await
|
|
124
|
+
const result = await fileService.generateSignedUrl({
|
|
116
125
|
userId: auth?.userId,
|
|
117
126
|
name,
|
|
118
127
|
type,
|
|
@@ -128,63 +137,48 @@ var fileUploadHandler = async (request, {
|
|
|
128
137
|
}
|
|
129
138
|
};
|
|
130
139
|
|
|
131
|
-
// src/
|
|
132
|
-
var
|
|
133
|
-
|
|
134
|
-
|
|
140
|
+
// src/file/handlers/delete_file.ts
|
|
141
|
+
var deleteFileHandler = async (request, { fileId }, {
|
|
142
|
+
authService,
|
|
143
|
+
fileRepository
|
|
135
144
|
}) => {
|
|
136
|
-
const auth = await
|
|
137
|
-
const file = await
|
|
145
|
+
const auth = await authService.verifyOrRefresh(request);
|
|
146
|
+
const file = await fileRepository.findFileById(fileId);
|
|
138
147
|
const headers = {
|
|
139
148
|
"Access-Control-Allow-Origin": "*"
|
|
140
149
|
};
|
|
141
150
|
if (!file) {
|
|
142
151
|
return NOT_FOUND("\uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", { headers });
|
|
143
152
|
}
|
|
144
|
-
if (!
|
|
153
|
+
if (!fileRepository.hasPermission(file, auth?.userId)) {
|
|
145
154
|
return FORBIDDEN("\uD30C\uC77C\uC744 \uC0AD\uC81C\uD560 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", { headers });
|
|
146
155
|
}
|
|
147
|
-
await
|
|
156
|
+
await fileRepository.deleteFile(fileId);
|
|
148
157
|
return NO_CONTENT({ headers });
|
|
149
158
|
};
|
|
150
159
|
|
|
151
|
-
// src/
|
|
152
|
-
var
|
|
153
|
-
const auth = await
|
|
160
|
+
// src/auth/handlers/find_auth.ts
|
|
161
|
+
var findAuthHandler = async (request, { authService }) => {
|
|
162
|
+
const auth = await authService.verifyOrRefresh(request);
|
|
154
163
|
if (!auth) {
|
|
155
164
|
return UNAUTHORIZED();
|
|
156
165
|
}
|
|
157
166
|
return OK(auth);
|
|
158
167
|
};
|
|
159
168
|
|
|
160
|
-
// src/
|
|
161
|
-
var
|
|
162
|
-
provider
|
|
163
|
-
|
|
164
|
-
GOOGLE_AUTH,
|
|
165
|
-
APPLE_AUTH,
|
|
166
|
-
KAKAO_AUTH
|
|
169
|
+
// src/auth/handlers/login_with_thirdparty.ts
|
|
170
|
+
var loginWithThirdPartyHandler = async (request, {
|
|
171
|
+
provider,
|
|
172
|
+
getThirdPartyAuth
|
|
167
173
|
}) => {
|
|
168
174
|
const { code } = await request.json();
|
|
169
175
|
if (!code) {
|
|
170
176
|
return BAD_REQUEST("\uCF54\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.");
|
|
171
177
|
}
|
|
172
|
-
const getThirdPartyAuth = (provider2) => {
|
|
173
|
-
switch (provider2) {
|
|
174
|
-
case "google":
|
|
175
|
-
return GOOGLE_AUTH;
|
|
176
|
-
case "apple":
|
|
177
|
-
return APPLE_AUTH;
|
|
178
|
-
case "kakao":
|
|
179
|
-
return KAKAO_AUTH;
|
|
180
|
-
default:
|
|
181
|
-
throw BAD_REQUEST("\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC778\uC99D \uC81C\uACF5\uC790\uC785\uB2C8\uB2E4.");
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
178
|
try {
|
|
185
179
|
const { accessToken, refreshToken } = await getThirdPartyAuth(
|
|
186
180
|
provider
|
|
187
|
-
).
|
|
181
|
+
).login(code);
|
|
188
182
|
return CREATED({
|
|
189
183
|
accessToken,
|
|
190
184
|
refreshToken
|
|
@@ -197,26 +191,26 @@ var loginThirdPartyHandler = async (request, {
|
|
|
197
191
|
}
|
|
198
192
|
};
|
|
199
193
|
|
|
200
|
-
// src/
|
|
201
|
-
var
|
|
202
|
-
|
|
203
|
-
JWT_MANAGER
|
|
194
|
+
// src/auth/handlers/login.ts
|
|
195
|
+
var loginHandler = async (request, {
|
|
196
|
+
authService
|
|
204
197
|
}) => {
|
|
205
|
-
const searchParams = new URL(request.url).searchParams;
|
|
206
198
|
const { id, password } = await request.json();
|
|
207
199
|
try {
|
|
208
|
-
const { accessToken, refreshToken } = await
|
|
200
|
+
const { accessToken, refreshToken } = await authService.login({
|
|
209
201
|
id,
|
|
210
202
|
password
|
|
211
203
|
});
|
|
212
|
-
|
|
204
|
+
const searchParams = new URL(request.url).searchParams;
|
|
205
|
+
const type = searchParams.get("type");
|
|
206
|
+
if (type === "json") {
|
|
213
207
|
return CREATED({ accessToken, refreshToken });
|
|
214
208
|
}
|
|
215
209
|
const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
|
|
216
|
-
|
|
217
|
-
|
|
210
|
+
authService.getAccessTokenSetCookie(accessToken),
|
|
211
|
+
authService.getRefreshTokenSetCookie(refreshToken)
|
|
218
212
|
]);
|
|
219
|
-
const payload =
|
|
213
|
+
const payload = authService.jwtManager.decode(accessToken);
|
|
220
214
|
const headers = new Headers();
|
|
221
215
|
headers.append("Set-Cookie", accessTokenSetCookie);
|
|
222
216
|
headers.append("Set-Cookie", refreshTokenSetCookie);
|
|
@@ -231,17 +225,21 @@ var loginCredentialHandler = async (request, {
|
|
|
231
225
|
}
|
|
232
226
|
};
|
|
233
227
|
|
|
234
|
-
// src/
|
|
235
|
-
var logoutHandler = async (request, {
|
|
236
|
-
const auth = await
|
|
228
|
+
// src/auth/handlers/logout.ts
|
|
229
|
+
var logoutHandler = async (request, { authService }) => {
|
|
230
|
+
const auth = await authService.verifyOrRefresh(request);
|
|
237
231
|
if (!auth) {
|
|
238
232
|
return UNAUTHORIZED();
|
|
239
233
|
}
|
|
240
|
-
await
|
|
234
|
+
await authService.authRepository.updateUserRefreshToken(auth.userId, null);
|
|
235
|
+
const type = new URL(request.url).searchParams.get("type");
|
|
236
|
+
if (type === "json") {
|
|
237
|
+
return NO_CONTENT();
|
|
238
|
+
}
|
|
241
239
|
const headers = new Headers();
|
|
242
240
|
const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
|
|
243
|
-
|
|
244
|
-
|
|
241
|
+
authService.getAccessTokenSetCookie(null),
|
|
242
|
+
authService.getRefreshTokenSetCookie(null)
|
|
245
243
|
]);
|
|
246
244
|
headers.append("Set-Cookie", accessTokenSetCookie);
|
|
247
245
|
headers.append("Set-Cookie", refreshTokenSetCookie);
|
|
@@ -250,16 +248,16 @@ var logoutHandler = async (request, { AUTH, repository }) => {
|
|
|
250
248
|
});
|
|
251
249
|
};
|
|
252
250
|
|
|
253
|
-
// src/
|
|
254
|
-
var
|
|
255
|
-
|
|
251
|
+
// src/auth/handlers/refresh.ts
|
|
252
|
+
var refreshHandler = async (request, {
|
|
253
|
+
authService
|
|
256
254
|
}) => {
|
|
257
|
-
const refreshToken = request?.headers.get("Authorization")?.replace("Bearer ", "") || await
|
|
255
|
+
const refreshToken = request?.headers.get("Authorization")?.replace("Bearer ", "") || await authService.getRefreshTokenFromCookies(request);
|
|
258
256
|
if (!refreshToken) {
|
|
259
257
|
return BAD_REQUEST();
|
|
260
258
|
}
|
|
261
259
|
try {
|
|
262
|
-
const accessToken = await
|
|
260
|
+
const accessToken = await authService.refreshAccessToken(refreshToken);
|
|
263
261
|
return CREATED({ accessToken });
|
|
264
262
|
} catch (e) {
|
|
265
263
|
if (e instanceof Error) {
|
|
@@ -269,100 +267,281 @@ var authRefreshHandler = async (request, {
|
|
|
269
267
|
}
|
|
270
268
|
};
|
|
271
269
|
|
|
272
|
-
// src/
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
KAKAO_AUTH,
|
|
278
|
-
JWT_MANAGER,
|
|
279
|
-
FILE_SERVICE,
|
|
280
|
-
SITE_ORIGIN,
|
|
281
|
-
authRepository,
|
|
270
|
+
// src/auth/handlers/signup.ts
|
|
271
|
+
import { v5 } from "uuid";
|
|
272
|
+
import * as bcrypt from "bcryptjs";
|
|
273
|
+
var signupHandler = async (request, {
|
|
274
|
+
authService,
|
|
282
275
|
fileRepository
|
|
283
276
|
}) => {
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
277
|
+
const body = await request.json();
|
|
278
|
+
const {
|
|
279
|
+
email,
|
|
280
|
+
password,
|
|
281
|
+
passwordConfirm,
|
|
282
|
+
name,
|
|
283
|
+
profileImageId
|
|
284
|
+
} = body;
|
|
285
|
+
if (!email) {
|
|
286
|
+
return BAD_REQUEST("\uC774\uBA54\uC77C\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694.");
|
|
287
|
+
}
|
|
288
|
+
if (!password) {
|
|
289
|
+
return BAD_REQUEST("\uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.");
|
|
290
|
+
}
|
|
291
|
+
if (!passwordConfirm) {
|
|
292
|
+
return BAD_REQUEST("\uBE44\uBC00\uBC88\uD638 \uD655\uC778\uC744 \uC785\uB825\uD574\uC8FC\uC138\uC694.");
|
|
293
|
+
}
|
|
294
|
+
const existing = await authService.authRepository.findCredentialById(email);
|
|
295
|
+
if (existing) {
|
|
296
|
+
return CONFLICT("\uC774\uBBF8 \uAC00\uC785\uD55C \uC774\uBA54\uC77C\uC785\uB2C8\uB2E4.");
|
|
297
|
+
}
|
|
298
|
+
if (password !== passwordConfirm) {
|
|
299
|
+
return BAD_REQUEST("\uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.");
|
|
300
|
+
}
|
|
301
|
+
const profileImage = profileImageId ? await fileRepository.findFileById(profileImageId) : void 0;
|
|
302
|
+
const userId = v5(email, v5.DNS);
|
|
303
|
+
const user = await authService.authRepository.createUser({
|
|
304
|
+
id: userId,
|
|
305
|
+
name,
|
|
306
|
+
role: "user",
|
|
307
|
+
email,
|
|
308
|
+
profileImage
|
|
309
|
+
});
|
|
310
|
+
await authService.authRepository.createCredential({
|
|
311
|
+
id: email,
|
|
312
|
+
userId,
|
|
313
|
+
password: bcrypt.hashSync(password, 10)
|
|
314
|
+
});
|
|
315
|
+
const { accessToken, refreshToken } = await authService.issueTokenPair(user);
|
|
316
|
+
const searchParams = new URL(request.url).searchParams;
|
|
317
|
+
const type = searchParams.get("type");
|
|
318
|
+
if (type === "json") {
|
|
319
|
+
return CREATED({ accessToken, refreshToken });
|
|
320
|
+
}
|
|
321
|
+
const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
|
|
322
|
+
authService.getAccessTokenSetCookie(accessToken),
|
|
323
|
+
authService.getRefreshTokenSetCookie(refreshToken)
|
|
324
|
+
]);
|
|
325
|
+
const payload = authService.jwtManager.decode(accessToken);
|
|
326
|
+
const headers = new Headers();
|
|
327
|
+
headers.append("Set-Cookie", accessTokenSetCookie);
|
|
328
|
+
headers.append("Set-Cookie", refreshTokenSetCookie);
|
|
329
|
+
return CREATED(payload, {
|
|
330
|
+
headers
|
|
331
|
+
});
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
// src/auth/handlers/signup_with_thirdparty.ts
|
|
335
|
+
import { v5 as v52 } from "uuid";
|
|
336
|
+
var signUpWithThirdpartyHandler = async (request, {
|
|
337
|
+
authService,
|
|
338
|
+
fileService,
|
|
339
|
+
signupTokenSecret
|
|
340
|
+
}) => {
|
|
341
|
+
const body = await request.json();
|
|
342
|
+
const {
|
|
343
|
+
token
|
|
344
|
+
} = body;
|
|
345
|
+
const payload = await authService.jwtManager.verify(token, signupTokenSecret);
|
|
346
|
+
const { provider, id: thirdpartyId, email, name, picture } = payload;
|
|
347
|
+
const existing = await authService.authRepository.findThirdPartyAuth(
|
|
348
|
+
provider,
|
|
349
|
+
thirdpartyId
|
|
350
|
+
);
|
|
351
|
+
if (existing) {
|
|
352
|
+
return CONFLICT("\uC774\uBBF8 \uAC00\uC785\uB41C \uC81C3\uC790 \uC778\uC99D \uC815\uBCF4\uC785\uB2C8\uB2E4.");
|
|
353
|
+
}
|
|
354
|
+
const userId = v52(thirdpartyId, v52.DNS);
|
|
355
|
+
const profileImage = await (async () => {
|
|
356
|
+
if (!picture) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
const arrayBuffer = await fetch(picture).then((res) => res.arrayBuffer());
|
|
360
|
+
const { file } = await fileService.putFile(Buffer.from(arrayBuffer), {
|
|
361
|
+
userId,
|
|
362
|
+
name: "profile.jpg",
|
|
363
|
+
type: "image/jpeg",
|
|
364
|
+
size: arrayBuffer.byteLength
|
|
365
|
+
});
|
|
366
|
+
return file;
|
|
367
|
+
})();
|
|
368
|
+
const user = await authService.authRepository.createUser({
|
|
369
|
+
id: userId,
|
|
370
|
+
name,
|
|
371
|
+
role: "user",
|
|
372
|
+
email,
|
|
373
|
+
profileImage
|
|
374
|
+
});
|
|
375
|
+
await authService.authRepository.createThirdPartyAuth({
|
|
376
|
+
id: thirdpartyId,
|
|
377
|
+
provider,
|
|
378
|
+
userId
|
|
379
|
+
});
|
|
380
|
+
const { accessToken, refreshToken } = await authService.issueTokenPair(user);
|
|
381
|
+
return CREATED({ accessToken, refreshToken });
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
// src/auth/handlers/request_password_reset.ts
|
|
385
|
+
var requestPasswordResetHandler = async (request, {
|
|
386
|
+
passwordRecoveryService
|
|
387
|
+
}) => {
|
|
388
|
+
const { email } = await request.json();
|
|
389
|
+
try {
|
|
390
|
+
await passwordRecoveryService.requestPasswordReset(email);
|
|
391
|
+
return CREATED({ message: "\uBE44\uBC00\uBC88\uD638 \uC7AC\uC124\uC815 \uC774\uBA54\uC77C\uC744 \uC804\uC1A1\uD588\uC2B5\uB2C8\uB2E4." });
|
|
392
|
+
} catch (error) {
|
|
393
|
+
console.error(error);
|
|
394
|
+
return INTERNAL_SERVER_ERROR("\uC774\uBA54\uC77C \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.");
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
|
|
398
|
+
// src/auth/handlers/reset_password.ts
|
|
399
|
+
var resetPasswordHandler = async (request, {
|
|
400
|
+
passwordRecoveryService
|
|
401
|
+
}) => {
|
|
402
|
+
const { token, password, passwordConfirm } = await request.json();
|
|
403
|
+
await passwordRecoveryService.resetPassword(token, password, passwordConfirm);
|
|
404
|
+
return NO_CONTENT();
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
// src/route/api.ts
|
|
408
|
+
var createAPIHandler = ({
|
|
409
|
+
authService,
|
|
410
|
+
fileService,
|
|
411
|
+
passwordRecoveryService,
|
|
412
|
+
getThirdPartyAuth,
|
|
413
|
+
signupTokenSecret
|
|
414
|
+
}) => {
|
|
415
|
+
const handler = async ({ request, params }) => {
|
|
288
416
|
const method = request.method.toUpperCase();
|
|
289
|
-
const slug = params["*"].split("/");
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (method === "POST") {
|
|
300
|
-
return loginThirdPartyHandler(
|
|
301
|
-
request,
|
|
302
|
-
{ provider },
|
|
303
|
-
{ GOOGLE_AUTH, KAKAO_AUTH, APPLE_AUTH }
|
|
304
|
-
);
|
|
417
|
+
const slug = params["*"] ? params["*"].split("/") : [];
|
|
418
|
+
switch (slug[0]) {
|
|
419
|
+
case "auth": {
|
|
420
|
+
switch (slug[1]) {
|
|
421
|
+
case void 0: {
|
|
422
|
+
switch (method) {
|
|
423
|
+
case "GET": {
|
|
424
|
+
return findAuthHandler(request, { authService });
|
|
425
|
+
}
|
|
426
|
+
}
|
|
305
427
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
if (slug[1] === "callback") {
|
|
328
|
-
if (slug[2]) {
|
|
329
|
-
const provider = slug[2];
|
|
330
|
-
if (method === "GET") {
|
|
331
|
-
return thirdPartyAuthCallbackHandler(
|
|
332
|
-
request,
|
|
333
|
-
{ provider },
|
|
334
|
-
{
|
|
335
|
-
AUTH,
|
|
336
|
-
GOOGLE_AUTH,
|
|
337
|
-
APPLE_AUTH,
|
|
338
|
-
SITE_ORIGIN
|
|
428
|
+
case "login": {
|
|
429
|
+
switch (slug[2]) {
|
|
430
|
+
case void 0: {
|
|
431
|
+
switch (method) {
|
|
432
|
+
case "POST": {
|
|
433
|
+
return loginHandler(request, {
|
|
434
|
+
authService
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
default: {
|
|
440
|
+
const provider = slug[2];
|
|
441
|
+
switch (method) {
|
|
442
|
+
case "POST": {
|
|
443
|
+
return loginWithThirdPartyHandler(
|
|
444
|
+
request,
|
|
445
|
+
{ provider, getThirdPartyAuth }
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
339
449
|
}
|
|
340
|
-
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
case "logout": {
|
|
453
|
+
switch (method) {
|
|
454
|
+
case "POST": {
|
|
455
|
+
return logoutHandler(request, {
|
|
456
|
+
authService
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
case "refresh": {
|
|
462
|
+
switch (method) {
|
|
463
|
+
case "GET": {
|
|
464
|
+
return refreshHandler(request, { authService });
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
case "signup": {
|
|
469
|
+
switch (slug[2]) {
|
|
470
|
+
case void 0: {
|
|
471
|
+
switch (method) {
|
|
472
|
+
case "POST": {
|
|
473
|
+
return signupHandler(request, {
|
|
474
|
+
authService,
|
|
475
|
+
fileRepository: fileService.fileRepository
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
default: {
|
|
481
|
+
switch (method) {
|
|
482
|
+
case "POST": {
|
|
483
|
+
return signUpWithThirdpartyHandler(
|
|
484
|
+
request,
|
|
485
|
+
{ authService, fileService, signupTokenSecret }
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
case "callback": {
|
|
493
|
+
if (slug[2]) {
|
|
494
|
+
const provider = slug[2];
|
|
495
|
+
if (method === "GET") {
|
|
496
|
+
return thirdpartyAuthCallbackHandler(
|
|
497
|
+
request,
|
|
498
|
+
{
|
|
499
|
+
provider,
|
|
500
|
+
authService,
|
|
501
|
+
getThirdPartyAuth
|
|
502
|
+
}
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
case "request-password-reset": {
|
|
508
|
+
return requestPasswordResetHandler(request, { passwordRecoveryService });
|
|
509
|
+
}
|
|
510
|
+
case "reset-password": {
|
|
511
|
+
return resetPasswordHandler(request, { passwordRecoveryService });
|
|
341
512
|
}
|
|
342
513
|
}
|
|
343
514
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
515
|
+
case "files": {
|
|
516
|
+
switch (slug[1]) {
|
|
517
|
+
case void 0: {
|
|
518
|
+
switch (method) {
|
|
519
|
+
case "POST": {
|
|
520
|
+
return uploadFileHandler(request, { authService, fileService });
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
default: {
|
|
525
|
+
switch (method) {
|
|
526
|
+
case "DELETE": {
|
|
527
|
+
const fileId = slug[1];
|
|
528
|
+
return deleteFileHandler(
|
|
529
|
+
request,
|
|
530
|
+
{ fileId },
|
|
531
|
+
{ authService, fileRepository: fileService.fileRepository }
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
349
536
|
}
|
|
350
537
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
const fileId = slug[1];
|
|
354
|
-
return fileDeleteHandler(
|
|
355
|
-
request,
|
|
356
|
-
{ fileId },
|
|
357
|
-
{ AUTH, repository: fileRepository }
|
|
358
|
-
);
|
|
359
|
-
}
|
|
538
|
+
default: {
|
|
539
|
+
return NOT_FOUND();
|
|
360
540
|
}
|
|
361
541
|
}
|
|
362
|
-
return new Response("Not Found", { status: 404 });
|
|
363
542
|
};
|
|
364
543
|
return handler;
|
|
365
544
|
};
|
|
366
545
|
export {
|
|
367
|
-
|
|
546
|
+
createAPIHandler
|
|
368
547
|
};
|
|
@@ -27,7 +27,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
|
-
// src/seo
|
|
30
|
+
// src/seo/seo.tsx
|
|
31
31
|
var seo_exports = {};
|
|
32
32
|
__export(seo_exports, {
|
|
33
33
|
configSEO: () => configSEO
|