dn-react-router-toolkit 0.1.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.
Files changed (128) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/auth-kit/apple_auth.js +60 -0
  3. package/dist/cjs/auth-kit/auth_service.js +204 -0
  4. package/dist/cjs/auth-kit/client/google_login_button.js +25 -0
  5. package/dist/cjs/auth-kit/client/redirect_page.js +21 -0
  6. package/dist/cjs/auth-kit/google_auth.js +65 -0
  7. package/dist/cjs/auth-kit/jwt.js +53 -0
  8. package/dist/cjs/auth-kit/kakao_auth.js +38 -0
  9. package/dist/cjs/auth-kit/repository.js +2 -0
  10. package/dist/cjs/auth-kit/with_auth.js +46 -0
  11. package/dist/cjs/cn.js +6 -0
  12. package/dist/cjs/components/index.js +18 -0
  13. package/dist/cjs/components/modal/fullscreen_container.js +64 -0
  14. package/dist/cjs/components/modal/hooks.js +78 -0
  15. package/dist/cjs/components/modal/index.js +19 -0
  16. package/dist/cjs/components/modal/modal.js +91 -0
  17. package/dist/cjs/components/styles.js +10 -0
  18. package/dist/cjs/date.js +31 -0
  19. package/dist/cjs/file-kit/cdn.js +9 -0
  20. package/dist/cjs/file-kit/client/drop_file_input.js +195 -0
  21. package/dist/cjs/file-kit/client/file_uploader.js +78 -0
  22. package/dist/cjs/file-kit/file_service.js +29 -0
  23. package/dist/cjs/file-kit/object_storage.js +50 -0
  24. package/dist/cjs/file-kit/repository.js +2 -0
  25. package/dist/cjs/file-kit/responsive_image.js +78 -0
  26. package/dist/cjs/http-kit/index.js +17 -0
  27. package/dist/cjs/http-kit/response.js +34 -0
  28. package/dist/cjs/index.js +20 -0
  29. package/dist/cjs/route/api/auth/login/[provider]/route.js +36 -0
  30. package/dist/cjs/route/api/auth/login/route.js +35 -0
  31. package/dist/cjs/route/api/auth/logout/route.js +22 -0
  32. package/dist/cjs/route/api/auth/refresh/route.js +23 -0
  33. package/dist/cjs/route/api/auth/route.js +12 -0
  34. package/dist/cjs/route/api/files/[fileId]/route.js +20 -0
  35. package/dist/cjs/route/api/files/route.js +34 -0
  36. package/dist/cjs/route/auth/callback/[provider]/route.js +35 -0
  37. package/dist/cjs/route/index.js +80 -0
  38. package/dist/cjs/seo-kit/index.js +19 -0
  39. package/dist/cjs/seo-kit/loader.js +17 -0
  40. package/dist/cjs/seo-kit/seo.js +286 -0
  41. package/dist/cjs/seo-kit/seo_loader.js +19 -0
  42. package/dist/cjs/singleton.js +12 -0
  43. package/dist/cjs/slug.js +10 -0
  44. package/dist/esm/auth-kit/apple_auth.d.ts +15 -0
  45. package/dist/esm/auth-kit/apple_auth.js +56 -0
  46. package/dist/esm/auth-kit/auth_service.d.ts +67 -0
  47. package/dist/esm/auth-kit/auth_service.js +197 -0
  48. package/dist/esm/auth-kit/client/google_login_button.d.ts +6 -0
  49. package/dist/esm/auth-kit/client/google_login_button.js +19 -0
  50. package/dist/esm/auth-kit/client/redirect_page.d.ts +2 -0
  51. package/dist/esm/auth-kit/client/redirect_page.js +15 -0
  52. package/dist/esm/auth-kit/google_auth.d.ts +18 -0
  53. package/dist/esm/auth-kit/google_auth.js +61 -0
  54. package/dist/esm/auth-kit/jwt.d.ts +15 -0
  55. package/dist/esm/auth-kit/jwt.js +49 -0
  56. package/dist/esm/auth-kit/kakao_auth.d.ts +15 -0
  57. package/dist/esm/auth-kit/kakao_auth.js +34 -0
  58. package/dist/esm/auth-kit/repository.d.ts +40 -0
  59. package/dist/esm/auth-kit/repository.js +1 -0
  60. package/dist/esm/auth-kit/with_auth.d.ts +12 -0
  61. package/dist/esm/auth-kit/with_auth.js +43 -0
  62. package/dist/esm/cn.d.ts +1 -0
  63. package/dist/esm/cn.js +3 -0
  64. package/dist/esm/components/index.d.ts +2 -0
  65. package/dist/esm/components/index.js +2 -0
  66. package/dist/esm/components/modal/fullscreen_container.d.ts +5 -0
  67. package/dist/esm/components/modal/fullscreen_container.js +57 -0
  68. package/dist/esm/components/modal/hooks.d.ts +15 -0
  69. package/dist/esm/components/modal/hooks.js +69 -0
  70. package/dist/esm/components/modal/index.d.ts +3 -0
  71. package/dist/esm/components/modal/index.js +3 -0
  72. package/dist/esm/components/modal/modal.d.ts +10 -0
  73. package/dist/esm/components/modal/modal.js +55 -0
  74. package/dist/esm/components/styles.d.ts +7 -0
  75. package/dist/esm/components/styles.js +7 -0
  76. package/dist/esm/date.d.ts +1 -0
  77. package/dist/esm/date.js +24 -0
  78. package/dist/esm/file-kit/cdn.d.ts +3 -0
  79. package/dist/esm/file-kit/cdn.js +5 -0
  80. package/dist/esm/file-kit/client/drop_file_input.d.ts +31 -0
  81. package/dist/esm/file-kit/client/drop_file_input.js +158 -0
  82. package/dist/esm/file-kit/client/file_uploader.d.ts +11 -0
  83. package/dist/esm/file-kit/client/file_uploader.js +74 -0
  84. package/dist/esm/file-kit/file_service.d.ts +23 -0
  85. package/dist/esm/file-kit/file_service.js +25 -0
  86. package/dist/esm/file-kit/object_storage.d.ts +13 -0
  87. package/dist/esm/file-kit/object_storage.js +46 -0
  88. package/dist/esm/file-kit/repository.d.ts +14 -0
  89. package/dist/esm/file-kit/repository.js +1 -0
  90. package/dist/esm/file-kit/responsive_image.d.ts +17 -0
  91. package/dist/esm/file-kit/responsive_image.js +70 -0
  92. package/dist/esm/http-kit/index.d.ts +1 -0
  93. package/dist/esm/http-kit/index.js +1 -0
  94. package/dist/esm/http-kit/response.d.ts +17 -0
  95. package/dist/esm/http-kit/response.js +28 -0
  96. package/dist/esm/index.d.ts +4 -0
  97. package/dist/esm/index.js +4 -0
  98. package/dist/esm/route/api/auth/login/[provider]/route.d.ts +10 -0
  99. package/dist/esm/route/api/auth/login/[provider]/route.js +32 -0
  100. package/dist/esm/route/api/auth/login/route.d.ts +6 -0
  101. package/dist/esm/route/api/auth/login/route.js +31 -0
  102. package/dist/esm/route/api/auth/logout/route.d.ts +6 -0
  103. package/dist/esm/route/api/auth/logout/route.js +18 -0
  104. package/dist/esm/route/api/auth/refresh/route.d.ts +4 -0
  105. package/dist/esm/route/api/auth/refresh/route.js +19 -0
  106. package/dist/esm/route/api/auth/route.d.ts +4 -0
  107. package/dist/esm/route/api/auth/route.js +8 -0
  108. package/dist/esm/route/api/files/[fileId]/route.d.ts +8 -0
  109. package/dist/esm/route/api/files/[fileId]/route.js +16 -0
  110. package/dist/esm/route/api/files/route.d.ts +6 -0
  111. package/dist/esm/route/api/files/route.js +30 -0
  112. package/dist/esm/route/auth/callback/[provider]/route.d.ts +11 -0
  113. package/dist/esm/route/auth/callback/[provider]/route.js +31 -0
  114. package/dist/esm/route/index.d.ts +22 -0
  115. package/dist/esm/route/index.js +76 -0
  116. package/dist/esm/seo-kit/index.d.ts +3 -0
  117. package/dist/esm/seo-kit/index.js +3 -0
  118. package/dist/esm/seo-kit/loader.d.ts +5 -0
  119. package/dist/esm/seo-kit/loader.js +14 -0
  120. package/dist/esm/seo-kit/seo.d.ts +100 -0
  121. package/dist/esm/seo-kit/seo.js +280 -0
  122. package/dist/esm/seo-kit/seo_loader.d.ts +12 -0
  123. package/dist/esm/seo-kit/seo_loader.js +13 -0
  124. package/dist/esm/singleton.d.ts +1 -0
  125. package/dist/esm/singleton.js +9 -0
  126. package/dist/esm/slug.d.ts +1 -0
  127. package/dist/esm/slug.js +6 -0
  128. package/package.json +81 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.createResponsiveImage = void 0;
18
+ exports.generateSrcSet = generateSrcSet;
19
+ const react_1 = __importDefault(require("react"));
20
+ const sizes = [
21
+ 64, 128, 256, 320, 480, 640, 768, 1080, 1200, 1536, 1920, 2560, 3840,
22
+ ];
23
+ const createResponsiveImage = (cdn) => {
24
+ const Component = (_a) => {
25
+ var { alt, file, ratio } = _a, props = __rest(_a, ["alt", "file", "ratio"]);
26
+ const src = cdn(file === null || file === void 0 ? void 0 : file.key) || props.src || "#";
27
+ return (react_1.default.createElement("img", Object.assign({}, props, { src: src, alt: alt, srcSet: generateSrcSet(src, ratio, props) })));
28
+ };
29
+ return Component;
30
+ };
31
+ exports.createResponsiveImage = createResponsiveImage;
32
+ exports.default = exports.createResponsiveImage;
33
+ const generateSrc = (src, width, height, ratio, image = {}) => {
34
+ const searchParams = new URLSearchParams();
35
+ if (image.width) {
36
+ searchParams.set("w", image.width.toString());
37
+ }
38
+ if (width) {
39
+ searchParams.set("w", width.toString());
40
+ if (ratio) {
41
+ searchParams.set("h", Math.round(width / ratio).toString());
42
+ }
43
+ }
44
+ if (image.height) {
45
+ searchParams.set("h", image.height.toString());
46
+ }
47
+ if (height) {
48
+ searchParams.set("h", height.toString());
49
+ }
50
+ const search = searchParams.toString() ? `?${searchParams.toString()}` : "";
51
+ const origin = process.env.NEXT_PUBLIC_CDN_ORIGIN || "";
52
+ if (!src.includes(origin)) {
53
+ return src;
54
+ }
55
+ return `${encodeURI(decodeURI(src))}${search}`;
56
+ };
57
+ function generateSrcSet(image, ratio, props = {}) {
58
+ const src = typeof image === "string" ? image : image.src;
59
+ const isGif = src.endsWith(".gif");
60
+ if (isGif) {
61
+ return undefined;
62
+ }
63
+ if (props.width) {
64
+ return [1, 2, 3]
65
+ .map((scale) => {
66
+ const genWidth = Number(props.width) * scale;
67
+ return `${generateSrc(src, genWidth, props.height
68
+ ? Number(props.height) * scale
69
+ : ratio
70
+ ? Math.round(genWidth / ratio)
71
+ : undefined)} ${scale}x`;
72
+ })
73
+ .join(", ");
74
+ }
75
+ return sizes
76
+ .map((size) => `${generateSrc(src, size, undefined, ratio, props)} ${size}w`)
77
+ .join(", ");
78
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./response"), exports);
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INTERNAL_SERVER_ERROR = exports.TOO_MANY_REQUESTS = exports.UNPROCESSABLE_ENTITY = exports.CONFLICT = exports.REQUEST_TIMEOUT = exports.NOT_ACCEPTABLE = exports.METHOD_NOT_ALLOWED = exports.NOT_FOUND = exports.FORBIDDEN = exports.UNAUTHORIZED = exports.BAD_REQUEST = exports.createException = exports.NO_CONTENT = exports.ACCEPTED = exports.CREATED = exports.OK = exports.createJsonResponse = void 0;
4
+ const createJsonResponse = (status) => {
5
+ return (data = {}, init) => {
6
+ return Response.json(data, Object.assign({ status }, init));
7
+ };
8
+ };
9
+ exports.createJsonResponse = createJsonResponse;
10
+ Response;
11
+ exports.OK = (0, exports.createJsonResponse)(200);
12
+ exports.CREATED = (0, exports.createJsonResponse)(201);
13
+ exports.ACCEPTED = (0, exports.createJsonResponse)(202);
14
+ const NO_CONTENT = (init) => {
15
+ return new Response(null, Object.assign(Object.assign({}, init), { status: 204 }));
16
+ };
17
+ exports.NO_CONTENT = NO_CONTENT;
18
+ const createException = (status, defaultMessage = "오류가 발생했습니다.") => {
19
+ return (message = defaultMessage, init) => {
20
+ return (0, exports.createJsonResponse)(status)({ message }, init);
21
+ };
22
+ };
23
+ exports.createException = createException;
24
+ exports.BAD_REQUEST = (0, exports.createException)(400, "요청이 올바르지 않습니다.");
25
+ exports.UNAUTHORIZED = (0, exports.createException)(401, "인증이 필요합니다.");
26
+ exports.FORBIDDEN = (0, exports.createException)(403, "권한이 없습니다.");
27
+ exports.NOT_FOUND = (0, exports.createException)(404, "요청한 리소스를 찾을 수 없습니다.");
28
+ exports.METHOD_NOT_ALLOWED = (0, exports.createException)(405, "메서드를 사용할 수 없습니다.");
29
+ exports.NOT_ACCEPTABLE = (0, exports.createException)(406, "요청한 형식을 사용할 수 없습니다.");
30
+ exports.REQUEST_TIMEOUT = (0, exports.createException)(408, "요청 시간이 초과되었습니다.");
31
+ exports.CONFLICT = (0, exports.createException)(409, "요청이 충돌했습니다.");
32
+ exports.UNPROCESSABLE_ENTITY = (0, exports.createException)(422, "처리할 수 없는 엔티티입니다.");
33
+ exports.TOO_MANY_REQUESTS = (0, exports.createException)(429, "요청이 너무 많습니다.");
34
+ exports.INTERNAL_SERVER_ERROR = (0, exports.createException)(500, "예기치 못한 오류가 발생했습니다.");
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cn"), exports);
18
+ __exportStar(require("./date"), exports);
19
+ __exportStar(require("./singleton"), exports);
20
+ __exportStar(require("./slug"), exports);
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loginThirdPartyHandler = void 0;
4
+ const http_kit_1 = require("../../../../../http-kit");
5
+ const loginThirdPartyHandler = async (request, { provider, }, { GOOGLE_AUTH, APPLE_AUTH, KAKAO_AUTH, }) => {
6
+ const { code } = await request.json();
7
+ if (!code) {
8
+ return (0, http_kit_1.BAD_REQUEST)("코드가 없습니다.");
9
+ }
10
+ const getThirdPartyAuth = (provider) => {
11
+ switch (provider) {
12
+ case "google":
13
+ return GOOGLE_AUTH;
14
+ case "apple":
15
+ return APPLE_AUTH;
16
+ case "kakao":
17
+ return KAKAO_AUTH;
18
+ default:
19
+ throw (0, http_kit_1.BAD_REQUEST)("지원하지 않는 인증 제공자입니다.");
20
+ }
21
+ };
22
+ try {
23
+ const { accessToken, refreshToken } = await getThirdPartyAuth(provider).signIn(code);
24
+ return (0, http_kit_1.CREATED)({
25
+ accessToken,
26
+ refreshToken,
27
+ });
28
+ }
29
+ catch (error) {
30
+ if (error instanceof Response) {
31
+ return error;
32
+ }
33
+ throw (0, http_kit_1.INTERNAL_SERVER_ERROR)();
34
+ }
35
+ };
36
+ exports.loginThirdPartyHandler = loginThirdPartyHandler;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loginCredentialHandler = void 0;
4
+ const http_kit_1 = require("../../../../http-kit");
5
+ const loginCredentialHandler = async (request, { AUTH, JWT_MANAGER, }) => {
6
+ const searchParams = new URL(request.url).searchParams;
7
+ const { id, password } = await request.json();
8
+ try {
9
+ const { accessToken, refreshToken } = await AUTH.signIn({
10
+ id,
11
+ password,
12
+ });
13
+ if (searchParams.get("type") === "json") {
14
+ return (0, http_kit_1.CREATED)({ accessToken, refreshToken });
15
+ }
16
+ const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
17
+ AUTH.getAccessTokenSetCookie(accessToken),
18
+ AUTH.getRefreshTokenSetCookie(refreshToken),
19
+ ]);
20
+ const payload = JWT_MANAGER.decode(accessToken);
21
+ const headers = new Headers();
22
+ headers.append("Set-Cookie", accessTokenSetCookie);
23
+ headers.append("Set-Cookie", refreshTokenSetCookie);
24
+ return (0, http_kit_1.CREATED)(payload, {
25
+ headers,
26
+ });
27
+ }
28
+ catch (e) {
29
+ if (e instanceof Error) {
30
+ return (0, http_kit_1.UNAUTHORIZED)(e.message);
31
+ }
32
+ throw e;
33
+ }
34
+ };
35
+ exports.loginCredentialHandler = loginCredentialHandler;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logoutHandler = void 0;
4
+ const http_kit_1 = require("../../../../http-kit");
5
+ const logoutHandler = async (request, { AUTH, repository }) => {
6
+ const auth = await AUTH.verifyOrRefresh(request);
7
+ if (!auth) {
8
+ return (0, http_kit_1.UNAUTHORIZED)();
9
+ }
10
+ await repository.updateUserRefreshToken(auth.userId, null);
11
+ const headers = new Headers();
12
+ const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
13
+ AUTH.getAccessTokenSetCookie(null),
14
+ AUTH.getRefreshTokenSetCookie(null),
15
+ ]);
16
+ headers.append("Set-Cookie", accessTokenSetCookie);
17
+ headers.append("Set-Cookie", refreshTokenSetCookie);
18
+ return (0, http_kit_1.NO_CONTENT)({
19
+ headers,
20
+ });
21
+ };
22
+ exports.logoutHandler = logoutHandler;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authRefreshHandler = void 0;
4
+ const http_kit_1 = require("../../../../http-kit");
5
+ const authRefreshHandler = async (request, { AUTH, }) => {
6
+ var _a;
7
+ const refreshToken = ((_a = request === null || request === void 0 ? void 0 : request.headers.get("Authorization")) === null || _a === void 0 ? void 0 : _a.replace("Bearer ", "")) ||
8
+ (await AUTH.getRefreshTokenFromCookies(request));
9
+ if (!refreshToken) {
10
+ return (0, http_kit_1.BAD_REQUEST)();
11
+ }
12
+ try {
13
+ const accessToken = await AUTH.refreshAccessToken(refreshToken);
14
+ return (0, http_kit_1.CREATED)({ accessToken });
15
+ }
16
+ catch (e) {
17
+ if (e instanceof Error) {
18
+ return (0, http_kit_1.UNAUTHORIZED)(e.message);
19
+ }
20
+ throw e;
21
+ }
22
+ };
23
+ exports.authRefreshHandler = authRefreshHandler;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAuthHandler = void 0;
4
+ const http_kit_1 = require("../../../http-kit");
5
+ const getAuthHandler = async (request, { AUTH }) => {
6
+ const auth = await AUTH.verifyOrRefresh(request);
7
+ if (!auth) {
8
+ return (0, http_kit_1.UNAUTHORIZED)();
9
+ }
10
+ return (0, http_kit_1.OK)(auth);
11
+ };
12
+ exports.getAuthHandler = getAuthHandler;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fileDeleteHandler = void 0;
4
+ const http_kit_1 = require("../../../../http-kit");
5
+ const fileDeleteHandler = async (request, { fileId }, { AUTH, repository, }) => {
6
+ const auth = await AUTH.verifyOrRefresh(request);
7
+ const file = await repository.findFileById(fileId);
8
+ const headers = {
9
+ "Access-Control-Allow-Origin": "*",
10
+ };
11
+ if (!file) {
12
+ return (0, http_kit_1.NOT_FOUND)("파일을 찾을 수 없습니다.", { headers });
13
+ }
14
+ if (!repository.hasPermission(file, auth === null || auth === void 0 ? void 0 : auth.userId)) {
15
+ return (0, http_kit_1.FORBIDDEN)("파일을 삭제할 권한이 없습니다.", { headers });
16
+ }
17
+ await repository.deleteFile(fileId);
18
+ return (0, http_kit_1.NO_CONTENT)({ headers });
19
+ };
20
+ exports.fileDeleteHandler = fileDeleteHandler;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fileUploadHandler = void 0;
4
+ const http_kit_1 = require("../../../http-kit");
5
+ const fileUploadHandler = async (request, { AUTH, FILE_SERVICE, }) => {
6
+ const auth = await AUTH.verifyOrRefresh(request);
7
+ const { name, type, size, metadata } = await request.json();
8
+ const headers = {
9
+ "Access-Control-Allow-Origin": "*",
10
+ };
11
+ if (typeof name !== "string") {
12
+ return (0, http_kit_1.BAD_REQUEST)("파일 이름이 필요해요.", { headers });
13
+ }
14
+ if (typeof type !== "string") {
15
+ return (0, http_kit_1.BAD_REQUEST)("파일 타입이 필요해요.", { headers });
16
+ }
17
+ try {
18
+ const result = await FILE_SERVICE.generateSignedUrl({
19
+ userId: auth === null || auth === void 0 ? void 0 : auth.userId,
20
+ name,
21
+ type,
22
+ size,
23
+ metadata,
24
+ });
25
+ return (0, http_kit_1.CREATED)(result, { headers });
26
+ }
27
+ catch (e) {
28
+ if (e instanceof Error) {
29
+ return (0, http_kit_1.INTERNAL_SERVER_ERROR)(e.message, { headers });
30
+ }
31
+ return (0, http_kit_1.INTERNAL_SERVER_ERROR)(e, { headers });
32
+ }
33
+ };
34
+ exports.fileUploadHandler = fileUploadHandler;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.thirdPartyAuthCallbackHandler = void 0;
4
+ const http_kit_1 = require("../../../../http-kit");
5
+ const thirdPartyAuthCallbackHandler = async (request, { provider, }, { AUTH, GOOGLE_AUTH, APPLE_AUTH, SITE_ORIGIN, }) => {
6
+ const url = new URL(request.url);
7
+ const code = url.searchParams.get("code");
8
+ if (!code) {
9
+ throw (0, http_kit_1.BAD_REQUEST)("코드가 없습니다.");
10
+ }
11
+ const getThirdPartyAuth = (provider) => {
12
+ switch (provider) {
13
+ case "google":
14
+ return GOOGLE_AUTH;
15
+ case "apple":
16
+ return APPLE_AUTH;
17
+ default:
18
+ throw (0, http_kit_1.BAD_REQUEST)("지원하지 않는 인증 제공자입니다.");
19
+ }
20
+ };
21
+ const { accessToken, refreshToken } = await getThirdPartyAuth(provider).signIn(code);
22
+ const [accessTokenSetCookie, refreshTokenSetCookie] = await Promise.all([
23
+ AUTH.getAccessTokenSetCookie(accessToken),
24
+ AUTH.getRefreshTokenSetCookie(refreshToken),
25
+ ]);
26
+ const headers = new Headers();
27
+ headers.append("Set-Cookie", accessTokenSetCookie);
28
+ headers.append("Set-Cookie", refreshTokenSetCookie);
29
+ const redirectUrl = url.searchParams.get("state") || SITE_ORIGIN;
30
+ return new Response("Temporary Redirect", {
31
+ status: 307,
32
+ headers: Object.assign(Object.assign({}, headers), { Location: new URL(`/r?redirectUrl=${encodeURIComponent(redirectUrl)}`, request.url).toString() }),
33
+ });
34
+ };
35
+ exports.thirdPartyAuthCallbackHandler = thirdPartyAuthCallbackHandler;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuthAPIHandler = void 0;
4
+ const route_1 = require("./auth/callback/[provider]/route");
5
+ const route_2 = require("./api/files/route");
6
+ const route_3 = require("./api/files/[fileId]/route");
7
+ const route_4 = require("./api/auth/route");
8
+ const route_5 = require("./api/auth/login/[provider]/route");
9
+ const route_6 = require("./api/auth/login/route");
10
+ const route_7 = require("./api/auth/logout/route");
11
+ const route_8 = require("./api/auth/refresh/route");
12
+ const createAuthAPIHandler = ({ AUTH, GOOGLE_AUTH, APPLE_AUTH, KAKAO_AUTH, JWT_MANAGER, FILE_SERVICE, SITE_ORIGIN, authRepository, fileRepository, }) => {
13
+ const handler = async ({ request, params, }) => {
14
+ const method = request.method.toUpperCase();
15
+ const slug = params["*"].split("/");
16
+ if (slug[0] === "auth") {
17
+ if (!slug[1]) {
18
+ if (method === "GET") {
19
+ return (0, route_4.getAuthHandler)(request, { AUTH });
20
+ }
21
+ }
22
+ if (slug[1] === "login") {
23
+ if (slug[2]) {
24
+ const provider = slug[2];
25
+ if (method === "POST") {
26
+ return (0, route_5.loginThirdPartyHandler)(request, { provider }, { GOOGLE_AUTH, KAKAO_AUTH, APPLE_AUTH });
27
+ }
28
+ }
29
+ if (method === "POST") {
30
+ return (0, route_6.loginCredentialHandler)(request, {
31
+ AUTH,
32
+ JWT_MANAGER,
33
+ });
34
+ }
35
+ }
36
+ if (slug[1] === "logout") {
37
+ if (method === "POST") {
38
+ return (0, route_7.logoutHandler)(request, {
39
+ AUTH,
40
+ repository: authRepository,
41
+ });
42
+ }
43
+ }
44
+ if (slug[1] === "refresh") {
45
+ if (method === "GET") {
46
+ return (0, route_8.authRefreshHandler)(request, { AUTH });
47
+ }
48
+ }
49
+ if (slug[1] === "callback") {
50
+ if (slug[2]) {
51
+ const provider = slug[2];
52
+ if (method === "GET") {
53
+ return (0, route_1.thirdPartyAuthCallbackHandler)(request, { provider }, {
54
+ AUTH,
55
+ GOOGLE_AUTH,
56
+ APPLE_AUTH,
57
+ SITE_ORIGIN,
58
+ });
59
+ }
60
+ }
61
+ }
62
+ }
63
+ if (slug[0] === "files") {
64
+ if (!slug[1]) {
65
+ if (method === "POST") {
66
+ return (0, route_2.fileUploadHandler)(request, { AUTH, FILE_SERVICE });
67
+ }
68
+ }
69
+ if (slug[1]) {
70
+ if (method === "DELETE") {
71
+ const fileId = slug[1];
72
+ return (0, route_3.fileDeleteHandler)(request, { fileId }, { AUTH, repository: fileRepository });
73
+ }
74
+ }
75
+ }
76
+ return new Response("Not Found", { status: 404 });
77
+ };
78
+ return handler;
79
+ };
80
+ exports.createAuthAPIHandler = createAuthAPIHandler;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./loader"), exports);
18
+ __exportStar(require("./seo_loader"), exports);
19
+ __exportStar(require("./seo"), exports);
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLoader = createLoader;
4
+ function createLoader(fn = () => ({})) {
5
+ let loadedData;
6
+ return {
7
+ getData() {
8
+ return loadedData;
9
+ },
10
+ wrap(mapper) {
11
+ return async function Thing(props) {
12
+ loadedData = await fn(props);
13
+ return mapper(loadedData);
14
+ };
15
+ },
16
+ };
17
+ }