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.
- package/README.md +1 -0
- package/dist/cjs/auth-kit/apple_auth.js +60 -0
- package/dist/cjs/auth-kit/auth_service.js +204 -0
- package/dist/cjs/auth-kit/client/google_login_button.js +25 -0
- package/dist/cjs/auth-kit/client/redirect_page.js +21 -0
- package/dist/cjs/auth-kit/google_auth.js +65 -0
- package/dist/cjs/auth-kit/jwt.js +53 -0
- package/dist/cjs/auth-kit/kakao_auth.js +38 -0
- package/dist/cjs/auth-kit/repository.js +2 -0
- package/dist/cjs/auth-kit/with_auth.js +46 -0
- package/dist/cjs/cn.js +6 -0
- package/dist/cjs/components/index.js +18 -0
- package/dist/cjs/components/modal/fullscreen_container.js +64 -0
- package/dist/cjs/components/modal/hooks.js +78 -0
- package/dist/cjs/components/modal/index.js +19 -0
- package/dist/cjs/components/modal/modal.js +91 -0
- package/dist/cjs/components/styles.js +10 -0
- package/dist/cjs/date.js +31 -0
- package/dist/cjs/file-kit/cdn.js +9 -0
- package/dist/cjs/file-kit/client/drop_file_input.js +195 -0
- package/dist/cjs/file-kit/client/file_uploader.js +78 -0
- package/dist/cjs/file-kit/file_service.js +29 -0
- package/dist/cjs/file-kit/object_storage.js +50 -0
- package/dist/cjs/file-kit/repository.js +2 -0
- package/dist/cjs/file-kit/responsive_image.js +78 -0
- package/dist/cjs/http-kit/index.js +17 -0
- package/dist/cjs/http-kit/response.js +34 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/route/api/auth/login/[provider]/route.js +36 -0
- package/dist/cjs/route/api/auth/login/route.js +35 -0
- package/dist/cjs/route/api/auth/logout/route.js +22 -0
- package/dist/cjs/route/api/auth/refresh/route.js +23 -0
- package/dist/cjs/route/api/auth/route.js +12 -0
- package/dist/cjs/route/api/files/[fileId]/route.js +20 -0
- package/dist/cjs/route/api/files/route.js +34 -0
- package/dist/cjs/route/auth/callback/[provider]/route.js +35 -0
- package/dist/cjs/route/index.js +80 -0
- package/dist/cjs/seo-kit/index.js +19 -0
- package/dist/cjs/seo-kit/loader.js +17 -0
- package/dist/cjs/seo-kit/seo.js +286 -0
- package/dist/cjs/seo-kit/seo_loader.js +19 -0
- package/dist/cjs/singleton.js +12 -0
- package/dist/cjs/slug.js +10 -0
- package/dist/esm/auth-kit/apple_auth.d.ts +15 -0
- package/dist/esm/auth-kit/apple_auth.js +56 -0
- package/dist/esm/auth-kit/auth_service.d.ts +67 -0
- package/dist/esm/auth-kit/auth_service.js +197 -0
- package/dist/esm/auth-kit/client/google_login_button.d.ts +6 -0
- package/dist/esm/auth-kit/client/google_login_button.js +19 -0
- package/dist/esm/auth-kit/client/redirect_page.d.ts +2 -0
- package/dist/esm/auth-kit/client/redirect_page.js +15 -0
- package/dist/esm/auth-kit/google_auth.d.ts +18 -0
- package/dist/esm/auth-kit/google_auth.js +61 -0
- package/dist/esm/auth-kit/jwt.d.ts +15 -0
- package/dist/esm/auth-kit/jwt.js +49 -0
- package/dist/esm/auth-kit/kakao_auth.d.ts +15 -0
- package/dist/esm/auth-kit/kakao_auth.js +34 -0
- package/dist/esm/auth-kit/repository.d.ts +40 -0
- package/dist/esm/auth-kit/repository.js +1 -0
- package/dist/esm/auth-kit/with_auth.d.ts +12 -0
- package/dist/esm/auth-kit/with_auth.js +43 -0
- package/dist/esm/cn.d.ts +1 -0
- package/dist/esm/cn.js +3 -0
- package/dist/esm/components/index.d.ts +2 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/modal/fullscreen_container.d.ts +5 -0
- package/dist/esm/components/modal/fullscreen_container.js +57 -0
- package/dist/esm/components/modal/hooks.d.ts +15 -0
- package/dist/esm/components/modal/hooks.js +69 -0
- package/dist/esm/components/modal/index.d.ts +3 -0
- package/dist/esm/components/modal/index.js +3 -0
- package/dist/esm/components/modal/modal.d.ts +10 -0
- package/dist/esm/components/modal/modal.js +55 -0
- package/dist/esm/components/styles.d.ts +7 -0
- package/dist/esm/components/styles.js +7 -0
- package/dist/esm/date.d.ts +1 -0
- package/dist/esm/date.js +24 -0
- package/dist/esm/file-kit/cdn.d.ts +3 -0
- package/dist/esm/file-kit/cdn.js +5 -0
- package/dist/esm/file-kit/client/drop_file_input.d.ts +31 -0
- package/dist/esm/file-kit/client/drop_file_input.js +158 -0
- package/dist/esm/file-kit/client/file_uploader.d.ts +11 -0
- package/dist/esm/file-kit/client/file_uploader.js +74 -0
- package/dist/esm/file-kit/file_service.d.ts +23 -0
- package/dist/esm/file-kit/file_service.js +25 -0
- package/dist/esm/file-kit/object_storage.d.ts +13 -0
- package/dist/esm/file-kit/object_storage.js +46 -0
- package/dist/esm/file-kit/repository.d.ts +14 -0
- package/dist/esm/file-kit/repository.js +1 -0
- package/dist/esm/file-kit/responsive_image.d.ts +17 -0
- package/dist/esm/file-kit/responsive_image.js +70 -0
- package/dist/esm/http-kit/index.d.ts +1 -0
- package/dist/esm/http-kit/index.js +1 -0
- package/dist/esm/http-kit/response.d.ts +17 -0
- package/dist/esm/http-kit/response.js +28 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/route/api/auth/login/[provider]/route.d.ts +10 -0
- package/dist/esm/route/api/auth/login/[provider]/route.js +32 -0
- package/dist/esm/route/api/auth/login/route.d.ts +6 -0
- package/dist/esm/route/api/auth/login/route.js +31 -0
- package/dist/esm/route/api/auth/logout/route.d.ts +6 -0
- package/dist/esm/route/api/auth/logout/route.js +18 -0
- package/dist/esm/route/api/auth/refresh/route.d.ts +4 -0
- package/dist/esm/route/api/auth/refresh/route.js +19 -0
- package/dist/esm/route/api/auth/route.d.ts +4 -0
- package/dist/esm/route/api/auth/route.js +8 -0
- package/dist/esm/route/api/files/[fileId]/route.d.ts +8 -0
- package/dist/esm/route/api/files/[fileId]/route.js +16 -0
- package/dist/esm/route/api/files/route.d.ts +6 -0
- package/dist/esm/route/api/files/route.js +30 -0
- package/dist/esm/route/auth/callback/[provider]/route.d.ts +11 -0
- package/dist/esm/route/auth/callback/[provider]/route.js +31 -0
- package/dist/esm/route/index.d.ts +22 -0
- package/dist/esm/route/index.js +76 -0
- package/dist/esm/seo-kit/index.d.ts +3 -0
- package/dist/esm/seo-kit/index.js +3 -0
- package/dist/esm/seo-kit/loader.d.ts +5 -0
- package/dist/esm/seo-kit/loader.js +14 -0
- package/dist/esm/seo-kit/seo.d.ts +100 -0
- package/dist/esm/seo-kit/seo.js +280 -0
- package/dist/esm/seo-kit/seo_loader.d.ts +12 -0
- package/dist/esm/seo-kit/seo_loader.js +13 -0
- package/dist/esm/singleton.d.ts +1 -0
- package/dist/esm/singleton.js +9 -0
- package/dist/esm/slug.d.ts +1 -0
- package/dist/esm/slug.js +6 -0
- 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
|
+
}
|