@euler-edu/schema 0.0.0-stage → 7.0.1-beta1
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/lib/.tsbuildinfo +1 -0
- package/lib/auths/index.d.ts +49 -0
- package/lib/auths/index.js +49 -0
- package/lib/auths/index.js.map +1 -0
- package/lib/configs/index.d.ts +2 -0
- package/lib/configs/index.js +19 -0
- package/lib/configs/index.js.map +1 -0
- package/lib/configs/oj-envConfig/index.d.ts +143 -0
- package/lib/configs/oj-envConfig/index.js +35 -0
- package/lib/configs/oj-envConfig/index.js.map +1 -0
- package/lib/configs/style/index.d.ts +53 -0
- package/lib/configs/style/index.js +46 -0
- package/lib/configs/style/index.js.map +1 -0
- package/lib/endpoints/hq-api/index.d.ts +37 -0
- package/lib/endpoints/hq-api/index.js +14 -0
- package/lib/endpoints/hq-api/index.js.map +1 -0
- package/lib/endpoints/hq-api/serviceUptime.atom.d.ts +12 -0
- package/lib/endpoints/hq-api/serviceUptime.atom.js +18 -0
- package/lib/endpoints/hq-api/serviceUptime.atom.js.map +1 -0
- package/lib/endpoints/hq-api/serviceUptime.endpoint.d.ts +23 -0
- package/lib/endpoints/hq-api/serviceUptime.endpoint.js +23 -0
- package/lib/endpoints/hq-api/serviceUptime.endpoint.js.map +1 -0
- package/lib/endpoints/index.d.ts +2622 -0
- package/lib/endpoints/index.js +12 -0
- package/lib/endpoints/index.js.map +1 -0
- package/lib/endpoints/oj-api/auth.atom.d.ts +10 -0
- package/lib/endpoints/oj-api/auth.atom.js +26 -0
- package/lib/endpoints/oj-api/auth.atom.js.map +1 -0
- package/lib/endpoints/oj-api/auth.endpoint.d.ts +105 -0
- package/lib/endpoints/oj-api/auth.endpoint.js +118 -0
- package/lib/endpoints/oj-api/auth.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/contest.atom.d.ts +23 -0
- package/lib/endpoints/oj-api/contest.atom.js +20 -0
- package/lib/endpoints/oj-api/contest.atom.js.map +1 -0
- package/lib/endpoints/oj-api/contest.endpoint.d.ts +53 -0
- package/lib/endpoints/oj-api/contest.endpoint.js +49 -0
- package/lib/endpoints/oj-api/contest.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/index.d.ts +2523 -0
- package/lib/endpoints/oj-api/index.js +58 -0
- package/lib/endpoints/oj-api/index.js.map +1 -0
- package/lib/endpoints/oj-api/mail.atom.d.ts +12 -0
- package/lib/endpoints/oj-api/mail.atom.js +14 -0
- package/lib/endpoints/oj-api/mail.atom.js.map +1 -0
- package/lib/endpoints/oj-api/mail.endpoint.d.ts +48 -0
- package/lib/endpoints/oj-api/mail.endpoint.js +51 -0
- package/lib/endpoints/oj-api/mail.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/problem.atom.d.ts +120 -0
- package/lib/endpoints/oj-api/problem.atom.js +164 -0
- package/lib/endpoints/oj-api/problem.atom.js.map +1 -0
- package/lib/endpoints/oj-api/problem.endpoint.d.ts +291 -0
- package/lib/endpoints/oj-api/problem.endpoint.js +199 -0
- package/lib/endpoints/oj-api/problem.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/rank.atom.d.ts +5 -0
- package/lib/endpoints/oj-api/rank.atom.js +9 -0
- package/lib/endpoints/oj-api/rank.atom.js.map +1 -0
- package/lib/endpoints/oj-api/rank.endpoint.d.ts +54 -0
- package/lib/endpoints/oj-api/rank.endpoint.js +59 -0
- package/lib/endpoints/oj-api/rank.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/record.atom.d.ts +31 -0
- package/lib/endpoints/oj-api/record.atom.js +12 -0
- package/lib/endpoints/oj-api/record.atom.js.map +1 -0
- package/lib/endpoints/oj-api/record.endpoint.d.ts +107 -0
- package/lib/endpoints/oj-api/record.endpoint.js +87 -0
- package/lib/endpoints/oj-api/record.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/run.atom.d.ts +29 -0
- package/lib/endpoints/oj-api/run.atom.js +22 -0
- package/lib/endpoints/oj-api/run.atom.js.map +1 -0
- package/lib/endpoints/oj-api/run.endpoint.d.ts +59 -0
- package/lib/endpoints/oj-api/run.endpoint.js +50 -0
- package/lib/endpoints/oj-api/run.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/scoringRequest.atom.d.ts +24 -0
- package/lib/endpoints/oj-api/scoringRequest.atom.js +21 -0
- package/lib/endpoints/oj-api/scoringRequest.atom.js.map +1 -0
- package/lib/endpoints/oj-api/scoringRequest.endpoint.d.ts +47 -0
- package/lib/endpoints/oj-api/scoringRequest.endpoint.js +37 -0
- package/lib/endpoints/oj-api/scoringRequest.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/scoringServer.atom.d.ts +10 -0
- package/lib/endpoints/oj-api/scoringServer.atom.js +18 -0
- package/lib/endpoints/oj-api/scoringServer.atom.js.map +1 -0
- package/lib/endpoints/oj-api/scoringServer.endpoint.d.ts +21 -0
- package/lib/endpoints/oj-api/scoringServer.endpoint.js +25 -0
- package/lib/endpoints/oj-api/scoringServer.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/source.atom.d.ts +10 -0
- package/lib/endpoints/oj-api/source.atom.js +22 -0
- package/lib/endpoints/oj-api/source.atom.js.map +1 -0
- package/lib/endpoints/oj-api/source.endpoint.d.ts +98 -0
- package/lib/endpoints/oj-api/source.endpoint.js +72 -0
- package/lib/endpoints/oj-api/source.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/submit.atom.d.ts +62 -0
- package/lib/endpoints/oj-api/submit.atom.js +40 -0
- package/lib/endpoints/oj-api/submit.atom.js.map +1 -0
- package/lib/endpoints/oj-api/submit.endpoint.d.ts +236 -0
- package/lib/endpoints/oj-api/submit.endpoint.js +162 -0
- package/lib/endpoints/oj-api/submit.endpoint.js.map +1 -0
- package/lib/endpoints/oj-api/user.atom.d.ts +220 -0
- package/lib/endpoints/oj-api/user.atom.js +74 -0
- package/lib/endpoints/oj-api/user.atom.js.map +1 -0
- package/lib/endpoints/oj-api/user.endpoint.d.ts +879 -0
- package/lib/endpoints/oj-api/user.endpoint.js +502 -0
- package/lib/endpoints/oj-api/user.endpoint.js.map +1 -0
- package/lib/endpoints/oj-archives/index.d.ts +51 -0
- package/lib/endpoints/oj-archives/index.js +47 -0
- package/lib/endpoints/oj-archives/index.js.map +1 -0
- package/lib/endpoints/oj-problemContents/index.d.ts +15 -0
- package/lib/endpoints/oj-problemContents/index.js +17 -0
- package/lib/endpoints/oj-problemContents/index.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/queues/index.d.ts +12 -0
- package/lib/queues/index.js +11 -0
- package/lib/queues/index.js.map +1 -0
- package/lib/queues/oj-clientSocketEventQueue.d.ts +12 -0
- package/lib/queues/oj-clientSocketEventQueue.js +16 -0
- package/lib/queues/oj-clientSocketEventQueue.js.map +1 -0
- package/lib/sockets/index.d.ts +34 -0
- package/lib/sockets/index.js +13 -0
- package/lib/sockets/index.js.map +1 -0
- package/lib/sockets/oj-socket/index.d.ts +18 -0
- package/lib/sockets/oj-socket/index.js +21 -0
- package/lib/sockets/oj-socket/index.js.map +1 -0
- package/lib/sockets/oj-web/index.d.ts +18 -0
- package/lib/sockets/oj-web/index.js +21 -0
- package/lib/sockets/oj-web/index.js.map +1 -0
- package/lib/types/index.d.ts +28 -0
- package/lib/types/index.js +3 -0
- package/lib/types/index.js.map +1 -0
- package/package.json +29 -3
- package/README.md +0 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.endpoints = void 0;
|
|
7
|
+
const hq_api_1 = __importDefault(require("./hq-api"));
|
|
8
|
+
const oj_api_1 = __importDefault(require("./oj-api"));
|
|
9
|
+
const oj_archives_1 = __importDefault(require("./oj-archives"));
|
|
10
|
+
const oj_problemContents_1 = __importDefault(require("./oj-problemContents"));
|
|
11
|
+
exports.endpoints = { hqApi: hq_api_1.default, ojApi: oj_api_1.default, ojArchives: oj_archives_1.default, ojProblemContents: oj_problemContents_1.default };
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,sDAA6B;AAC7B,gEAAuC;AACvC,8EAAqD;AAExC,QAAA,SAAS,GAAG,EAAE,KAAK,EAAL,gBAAK,EAAE,KAAK,EAAL,gBAAK,EAAE,UAAU,EAAV,qBAAU,EAAE,iBAAiB,EAAjB,4BAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authAtom = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.authAtom = {
|
|
6
|
+
prefix: '/auth',
|
|
7
|
+
id: zod_1.z.string().trim().min(1).max(30).describe('로그인을 위한 ID'),
|
|
8
|
+
password: zod_1.z.string().trim().min(1).max(50).describe('로그인을 위한 비밀번호'),
|
|
9
|
+
accessToken: zod_1.z
|
|
10
|
+
.string()
|
|
11
|
+
.trim()
|
|
12
|
+
.min(1)
|
|
13
|
+
.describe('로그인 후 발급되는 Access Token'),
|
|
14
|
+
refreshToken: zod_1.z
|
|
15
|
+
.string()
|
|
16
|
+
.trim()
|
|
17
|
+
.min(1)
|
|
18
|
+
.describe('로그인 후 발급되는 Refresh Token'),
|
|
19
|
+
tempAccessToken: zod_1.z
|
|
20
|
+
.string()
|
|
21
|
+
.trim()
|
|
22
|
+
.min(1)
|
|
23
|
+
.describe('로그인이 불가한 상태에서 발급되는 임시 Access Token'),
|
|
24
|
+
accessTokenExpiredAt: zod_1.z.iso.datetime({ offset: true }),
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=auth.atom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.atom.js","sourceRoot":"","sources":["../../../src/endpoints/oj-api/auth.atom.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,QAAQ,GAAG;IACtB,MAAM,EAAE,OAAO;IACf,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC3D,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;IACnE,WAAW,EAAE,OAAC;SACX,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yBAAyB,CAAC;IACtC,YAAY,EAAE,OAAC;SACZ,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0BAA0B,CAAC;IACvC,eAAe,EAAE,OAAC;SACf,MAAM,EAAE;SACR,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,oCAAoC,CAAC;IACjD,oBAAoB,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CACvD,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
readonly postAccessToken: {
|
|
4
|
+
readonly prefix: string;
|
|
5
|
+
readonly operation: {
|
|
6
|
+
readonly summary: "accessToken 발급";
|
|
7
|
+
readonly description: "로그인 시, 아이디와 비밀번호로 accessToken를 발급합니다. 일부 사유로 발급 실패 시, tempAccessToken를 발급합니다.";
|
|
8
|
+
};
|
|
9
|
+
readonly auth: {
|
|
10
|
+
readonly temp: 0;
|
|
11
|
+
};
|
|
12
|
+
readonly base: "oj-api";
|
|
13
|
+
readonly method: "post";
|
|
14
|
+
readonly path: () => string;
|
|
15
|
+
readonly body: z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
password: z.ZodString;
|
|
18
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
19
|
+
naverCode: z.ZodString;
|
|
20
|
+
state: z.ZodString;
|
|
21
|
+
}, z.core.$strip>]>, z.ZodObject<{
|
|
22
|
+
googleCode: z.ZodString;
|
|
23
|
+
state: z.ZodString;
|
|
24
|
+
}, z.core.$strip>]>, z.ZodObject<{
|
|
25
|
+
kakaoCode: z.ZodString;
|
|
26
|
+
state: z.ZodString;
|
|
27
|
+
}, z.core.$strip>]>, z.ZodObject<{
|
|
28
|
+
googleIdToken: z.ZodString;
|
|
29
|
+
}, z.core.$strip>]>;
|
|
30
|
+
readonly data: z.ZodUnion<[z.ZodObject<{
|
|
31
|
+
accessToken: z.ZodString;
|
|
32
|
+
accessTokenExpiredAt: z.ZodISODateTime;
|
|
33
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
34
|
+
tempAccessToken: z.ZodString;
|
|
35
|
+
tempAccessTokenType: z.ZodEnum<{
|
|
36
|
+
SOCIAL_SIGNUP_REQUIRED: "SOCIAL_SIGNUP_REQUIRED";
|
|
37
|
+
EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED";
|
|
38
|
+
TERMS_NOT_AGREED: "TERMS_NOT_AGREED";
|
|
39
|
+
}>;
|
|
40
|
+
}, z.core.$strip>]>;
|
|
41
|
+
};
|
|
42
|
+
readonly putAccessToken: {
|
|
43
|
+
readonly prefix: string;
|
|
44
|
+
readonly operation: {
|
|
45
|
+
readonly summary: "accessToken 갱신";
|
|
46
|
+
readonly description: "refreshToken으로 accessToken를 갱신합니다";
|
|
47
|
+
};
|
|
48
|
+
readonly base: "oj-api";
|
|
49
|
+
readonly method: "put";
|
|
50
|
+
readonly path: () => string;
|
|
51
|
+
readonly data: z.ZodObject<{
|
|
52
|
+
accessToken: z.ZodString;
|
|
53
|
+
accessTokenExpiredAt: z.ZodISODateTime;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
};
|
|
56
|
+
readonly getRefreshTokenByMe: {
|
|
57
|
+
readonly prefix: string;
|
|
58
|
+
readonly operation: {
|
|
59
|
+
readonly summary: "refreshToken 조회";
|
|
60
|
+
readonly description: "현재 유효한 refreshToken를 조회합니다";
|
|
61
|
+
};
|
|
62
|
+
readonly auth: {
|
|
63
|
+
readonly requiredLevel: 1;
|
|
64
|
+
};
|
|
65
|
+
readonly base: "oj-api";
|
|
66
|
+
readonly method: "get";
|
|
67
|
+
readonly path: () => string;
|
|
68
|
+
readonly data: z.ZodArray<z.ZodObject<{
|
|
69
|
+
deviceId: z.ZodString;
|
|
70
|
+
issuedBy: z.ZodString;
|
|
71
|
+
issuedAt: z.ZodISODateTime;
|
|
72
|
+
expiredAt: z.ZodISODateTime;
|
|
73
|
+
clientMetadata: z.ZodOptional<z.ZodObject<{
|
|
74
|
+
ip: z.ZodOptional<z.ZodString>;
|
|
75
|
+
location: z.ZodOptional<z.ZodString>;
|
|
76
|
+
browser: z.ZodOptional<z.ZodString>;
|
|
77
|
+
os: z.ZodOptional<z.ZodString>;
|
|
78
|
+
device: z.ZodOptional<z.ZodString>;
|
|
79
|
+
}, z.core.$strip>>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
};
|
|
82
|
+
readonly deleteRefreshToken: {
|
|
83
|
+
readonly prefix: string;
|
|
84
|
+
readonly operation: {
|
|
85
|
+
readonly summary: "refreshToken 삭제";
|
|
86
|
+
readonly description: "로그아웃 시, refreshToken를 삭제합니다";
|
|
87
|
+
};
|
|
88
|
+
readonly base: "oj-api";
|
|
89
|
+
readonly method: "delete";
|
|
90
|
+
readonly path: () => string;
|
|
91
|
+
};
|
|
92
|
+
readonly deleteRefreshTokenByDeviceId: {
|
|
93
|
+
readonly prefix: string;
|
|
94
|
+
readonly operation: {
|
|
95
|
+
readonly summary: "refreshToken 삭제";
|
|
96
|
+
};
|
|
97
|
+
readonly auth: {
|
|
98
|
+
readonly requiredLevel: 1;
|
|
99
|
+
};
|
|
100
|
+
readonly base: "oj-api";
|
|
101
|
+
readonly method: "delete";
|
|
102
|
+
readonly path: (deviceId: string) => string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
export default _default;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const auth_atom_1 = require("./auth.atom");
|
|
5
|
+
const { prefix } = auth_atom_1.authAtom;
|
|
6
|
+
exports.default = {
|
|
7
|
+
postAccessToken: {
|
|
8
|
+
prefix,
|
|
9
|
+
operation: {
|
|
10
|
+
summary: 'accessToken 발급',
|
|
11
|
+
description: '로그인 시, 아이디와 비밀번호로 accessToken를 발급합니다. 일부 사유로 발급 실패 시, tempAccessToken를 발급합니다.',
|
|
12
|
+
},
|
|
13
|
+
auth: {
|
|
14
|
+
temp: 0,
|
|
15
|
+
},
|
|
16
|
+
base: 'oj-api',
|
|
17
|
+
method: 'post',
|
|
18
|
+
path: () => `/accessToken`,
|
|
19
|
+
body: zod_1.z
|
|
20
|
+
.object({
|
|
21
|
+
id: auth_atom_1.authAtom.id,
|
|
22
|
+
password: auth_atom_1.authAtom.password,
|
|
23
|
+
})
|
|
24
|
+
.or(zod_1.z.object({
|
|
25
|
+
naverCode: zod_1.z.string().trim().min(1),
|
|
26
|
+
state: zod_1.z.string().trim().min(1),
|
|
27
|
+
}))
|
|
28
|
+
.or(zod_1.z.object({
|
|
29
|
+
googleCode: zod_1.z.string().trim().min(1),
|
|
30
|
+
state: zod_1.z.string().trim().min(1),
|
|
31
|
+
}))
|
|
32
|
+
.or(zod_1.z.object({
|
|
33
|
+
kakaoCode: zod_1.z.string().trim().min(1),
|
|
34
|
+
state: zod_1.z.string().trim().min(1),
|
|
35
|
+
}))
|
|
36
|
+
.or(zod_1.z.object({
|
|
37
|
+
googleIdToken: zod_1.z.string().trim().min(1),
|
|
38
|
+
})),
|
|
39
|
+
data: zod_1.z
|
|
40
|
+
.object({
|
|
41
|
+
accessToken: auth_atom_1.authAtom.accessToken,
|
|
42
|
+
accessTokenExpiredAt: auth_atom_1.authAtom.accessTokenExpiredAt,
|
|
43
|
+
})
|
|
44
|
+
.or(zod_1.z.object({
|
|
45
|
+
tempAccessToken: auth_atom_1.authAtom.tempAccessToken,
|
|
46
|
+
tempAccessTokenType: zod_1.z.enum([
|
|
47
|
+
'SOCIAL_SIGNUP_REQUIRED',
|
|
48
|
+
'EMAIL_NOT_VERIFIED',
|
|
49
|
+
'TERMS_NOT_AGREED',
|
|
50
|
+
]),
|
|
51
|
+
})),
|
|
52
|
+
},
|
|
53
|
+
putAccessToken: {
|
|
54
|
+
prefix,
|
|
55
|
+
operation: {
|
|
56
|
+
summary: 'accessToken 갱신',
|
|
57
|
+
description: 'refreshToken으로 accessToken를 갱신합니다',
|
|
58
|
+
},
|
|
59
|
+
base: 'oj-api',
|
|
60
|
+
method: 'put',
|
|
61
|
+
path: () => `/accessToken`,
|
|
62
|
+
data: zod_1.z.object({
|
|
63
|
+
accessToken: auth_atom_1.authAtom.accessToken,
|
|
64
|
+
accessTokenExpiredAt: auth_atom_1.authAtom.accessTokenExpiredAt,
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
getRefreshTokenByMe: {
|
|
68
|
+
prefix,
|
|
69
|
+
operation: {
|
|
70
|
+
summary: 'refreshToken 조회',
|
|
71
|
+
description: '현재 유효한 refreshToken를 조회합니다',
|
|
72
|
+
},
|
|
73
|
+
auth: {
|
|
74
|
+
requiredLevel: 1,
|
|
75
|
+
},
|
|
76
|
+
base: 'oj-api',
|
|
77
|
+
method: 'get',
|
|
78
|
+
path: () => `/refreshToken/byMe`,
|
|
79
|
+
data: zod_1.z.array(zod_1.z.object({
|
|
80
|
+
deviceId: zod_1.z.string().trim().min(1),
|
|
81
|
+
issuedBy: zod_1.z.string().trim().min(1),
|
|
82
|
+
issuedAt: zod_1.z.iso.datetime({ offset: true }),
|
|
83
|
+
expiredAt: zod_1.z.iso.datetime({ offset: true }),
|
|
84
|
+
clientMetadata: zod_1.z
|
|
85
|
+
.object({
|
|
86
|
+
ip: zod_1.z.string().trim().min(1).optional(),
|
|
87
|
+
location: zod_1.z.string().trim().min(1).optional(),
|
|
88
|
+
browser: zod_1.z.string().trim().min(1).optional(),
|
|
89
|
+
os: zod_1.z.string().trim().min(1).optional(),
|
|
90
|
+
device: zod_1.z.string().trim().min(1).optional(),
|
|
91
|
+
})
|
|
92
|
+
.optional(),
|
|
93
|
+
})),
|
|
94
|
+
},
|
|
95
|
+
deleteRefreshToken: {
|
|
96
|
+
prefix,
|
|
97
|
+
operation: {
|
|
98
|
+
summary: 'refreshToken 삭제',
|
|
99
|
+
description: '로그아웃 시, refreshToken를 삭제합니다',
|
|
100
|
+
},
|
|
101
|
+
base: 'oj-api',
|
|
102
|
+
method: 'delete',
|
|
103
|
+
path: () => `/refreshToken`,
|
|
104
|
+
},
|
|
105
|
+
deleteRefreshTokenByDeviceId: {
|
|
106
|
+
prefix,
|
|
107
|
+
operation: {
|
|
108
|
+
summary: 'refreshToken 삭제',
|
|
109
|
+
},
|
|
110
|
+
auth: {
|
|
111
|
+
requiredLevel: 1,
|
|
112
|
+
},
|
|
113
|
+
base: 'oj-api',
|
|
114
|
+
method: 'delete',
|
|
115
|
+
path: (deviceId) => `/refreshToken/byDeviceId/${deviceId}`,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=auth.endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.endpoint.js","sourceRoot":"","sources":["../../../src/endpoints/oj-api/auth.endpoint.ts"],"names":[],"mappings":";;AACA,6BAAwB;AAExB,2CAAuC;AAEvC,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAQ,CAAC;AAE5B,kBAAe;IACb,eAAe,EAAE;QACf,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,gBAAgB;YACzB,WAAW,EACT,+EAA+E;SAClF;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,CAAC;SACR;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,MAAe;QACvB,IAAI,EAAE,GAAG,EAAE,CAAC,cAAc;QAC1B,IAAI,EAAE,OAAC;aACJ,MAAM,CAAC;YACN,EAAE,EAAE,oBAAQ,CAAC,EAAE;YACf,QAAQ,EAAE,oBAAQ,CAAC,QAAQ;SAC5B,CAAC;aACD,EAAE,CACD,OAAC,CAAC,MAAM,CAAC;YACP,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC,CACH;aACA,EAAE,CACD,OAAC,CAAC,MAAM,CAAC;YACP,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC,CACH;aACA,EAAE,CACD,OAAC,CAAC,MAAM,CAAC;YACP,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC,CACH;aACA,EAAE,CACD,OAAC,CAAC,MAAM,CAAC;YACP,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SACxC,CAAC,CACH;QACH,IAAI,EAAE,OAAC;aACJ,MAAM,CAAC;YACN,WAAW,EAAE,oBAAQ,CAAC,WAAW;YACjC,oBAAoB,EAAE,oBAAQ,CAAC,oBAAoB;SACpD,CAAC;aACD,EAAE,CACD,OAAC,CAAC,MAAM,CAAC;YACP,eAAe,EAAE,oBAAQ,CAAC,eAAe;YACzC,mBAAmB,EAAE,OAAC,CAAC,IAAI,CAAC;gBAC1B,wBAAwB;gBACxB,oBAAoB;gBACpB,kBAAkB;aACnB,CAAC;SACH,CAAC,CACH;KACJ;IACD,cAAc,EAAE;QACd,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,mCAAmC;SACjD;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,KAAc;QACtB,IAAI,EAAE,GAAG,EAAE,CAAC,cAAc;QAC1B,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;YACb,WAAW,EAAE,oBAAQ,CAAC,WAAW;YACjC,oBAAoB,EAAE,oBAAQ,CAAC,oBAAoB;SACpD,CAAC;KACH;IACD,mBAAmB,EAAE;QACnB,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,4BAA4B;SAC1C;QACD,IAAI,EAAE;YACJ,aAAa,EAAE,CAAC;SACjB;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,KAAc;QACtB,IAAI,EAAE,GAAG,EAAE,CAAC,oBAAoB;QAChC,IAAI,EAAE,OAAC,CAAC,KAAK,CACX,OAAC,CAAC,MAAM,CAAC;YACP,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,QAAQ,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC1C,SAAS,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC3C,cAAc,EAAE,OAAC;iBACd,MAAM,CAAC;gBACN,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACvC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAC7C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBAC5C,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC5C,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC,CACH;KACF;IACD,kBAAkB,EAAE;QAClB,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,6BAA6B;SAC3C;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,QAAiB;QACzB,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe;KAC5B;IACD,4BAA4B,EAAE;QAC5B,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,iBAAiB;SAC3B;QACD,IAAI,EAAE;YACJ,aAAa,EAAE,CAAC;SACjB;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,QAAiB;QACzB,IAAI,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,4BAA4B,QAAQ,EAAE;KACnE;CAC0C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const contestAtom: {
|
|
3
|
+
prefix: string;
|
|
4
|
+
id: z.ZodString;
|
|
5
|
+
pastContestId: z.ZodString;
|
|
6
|
+
title: z.ZodString;
|
|
7
|
+
rankType: z.ZodEnum<{
|
|
8
|
+
"acm-icpc": "acm-icpc";
|
|
9
|
+
}>;
|
|
10
|
+
joinType: z.ZodEnum<{
|
|
11
|
+
public: "public";
|
|
12
|
+
}>;
|
|
13
|
+
participantsCount: z.ZodNumber;
|
|
14
|
+
timeStart: z.ZodISODateTime;
|
|
15
|
+
timeEnd: z.ZodISODateTime;
|
|
16
|
+
tag: z.ZodEnum<{
|
|
17
|
+
end: "end";
|
|
18
|
+
ready: "ready";
|
|
19
|
+
ongoing: "ongoing";
|
|
20
|
+
joined: "joined";
|
|
21
|
+
manager: "manager";
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.contestAtom = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const oj_contest_1 = require("@euler-edu/constant/oj-contest");
|
|
6
|
+
exports.contestAtom = {
|
|
7
|
+
prefix: '/contest',
|
|
8
|
+
id: zod_1.z.string().trim().min(1).describe('대회 아이디'),
|
|
9
|
+
pastContestId: zod_1.z.string().trim().min(1).describe('아카이브 대회 아이디'),
|
|
10
|
+
title: zod_1.z.string().trim().min(1).describe('대회 제목'),
|
|
11
|
+
rankType: zod_1.z.enum(oj_contest_1.ojContest.rankTypes).describe('대회 순위 타입'),
|
|
12
|
+
joinType: zod_1.z.enum(oj_contest_1.ojContest.joinTypes).describe('대회 참여 타입'),
|
|
13
|
+
participantsCount: zod_1.z.number().min(0).describe('참가자 수'),
|
|
14
|
+
timeStart: zod_1.z.iso.datetime({ offset: true }).describe('대회 시작 시간'),
|
|
15
|
+
timeEnd: zod_1.z.iso.datetime({ offset: true }).describe('대회 종료 시간'),
|
|
16
|
+
tag: zod_1.z
|
|
17
|
+
.enum(['end', 'ready', 'ongoing', 'joined', 'manager'])
|
|
18
|
+
.describe('대회 태그'),
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=contest.atom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contest.atom.js","sourceRoot":"","sources":["../../../src/endpoints/oj-api/contest.atom.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,+DAA2D;AAE9C,QAAA,WAAW,GAAG;IACzB,MAAM,EAAE,UAAU;IAClB,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC/C,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IACjD,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC1D,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC1D,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtD,SAAS,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChE,OAAO,EAAE,OAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC9D,GAAG,EAAE,OAAC;SACH,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;SACtD,QAAQ,CAAC,OAAO,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const _default: {
|
|
3
|
+
readonly get: {
|
|
4
|
+
readonly prefix: string;
|
|
5
|
+
readonly operation: {
|
|
6
|
+
readonly summary: "대회 조회";
|
|
7
|
+
};
|
|
8
|
+
readonly auth: {
|
|
9
|
+
readonly requiredLevel: 0;
|
|
10
|
+
};
|
|
11
|
+
readonly base: "oj-api";
|
|
12
|
+
readonly method: "get";
|
|
13
|
+
readonly path: () => string;
|
|
14
|
+
readonly data: z.ZodObject<{
|
|
15
|
+
contests: z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
title: z.ZodString;
|
|
18
|
+
rankType: z.ZodEnum<{
|
|
19
|
+
"acm-icpc": "acm-icpc";
|
|
20
|
+
}>;
|
|
21
|
+
joinType: z.ZodEnum<{
|
|
22
|
+
public: "public";
|
|
23
|
+
}>;
|
|
24
|
+
participantsCount: z.ZodNumber;
|
|
25
|
+
timeStart: z.ZodISODateTime;
|
|
26
|
+
timeEnd: z.ZodISODateTime;
|
|
27
|
+
tags: z.ZodArray<z.ZodEnum<{
|
|
28
|
+
end: "end";
|
|
29
|
+
ready: "ready";
|
|
30
|
+
ongoing: "ongoing";
|
|
31
|
+
joined: "joined";
|
|
32
|
+
manager: "manager";
|
|
33
|
+
}>>;
|
|
34
|
+
}, z.core.$strip>>;
|
|
35
|
+
page: z.ZodNumber;
|
|
36
|
+
maxPage: z.ZodNumber;
|
|
37
|
+
count: z.ZodNumber;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
readonly query: z.ZodObject<{
|
|
40
|
+
tags: z.ZodOptional<z.ZodString>;
|
|
41
|
+
search: z.ZodOptional<z.ZodString>;
|
|
42
|
+
sort: z.ZodOptional<z.ZodEnum<{
|
|
43
|
+
"timeStart-asc": "timeStart-asc";
|
|
44
|
+
"timeStart-desc": "timeStart-desc";
|
|
45
|
+
"timeEnd-asc": "timeEnd-asc";
|
|
46
|
+
"timeEnd-desc": "timeEnd-desc";
|
|
47
|
+
}>>;
|
|
48
|
+
page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
49
|
+
onePageLength: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
export default _default;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const contest_atom_1 = require("./contest.atom");
|
|
5
|
+
const { prefix } = contest_atom_1.contestAtom;
|
|
6
|
+
exports.default = {
|
|
7
|
+
get: {
|
|
8
|
+
prefix,
|
|
9
|
+
operation: {
|
|
10
|
+
summary: '대회 조회',
|
|
11
|
+
},
|
|
12
|
+
auth: {
|
|
13
|
+
requiredLevel: 0,
|
|
14
|
+
},
|
|
15
|
+
base: 'oj-api',
|
|
16
|
+
method: 'get',
|
|
17
|
+
path: () => `/`,
|
|
18
|
+
data: zod_1.z.object({
|
|
19
|
+
contests: zod_1.z.array(zod_1.z.object({
|
|
20
|
+
id: contest_atom_1.contestAtom.id,
|
|
21
|
+
title: contest_atom_1.contestAtom.title,
|
|
22
|
+
rankType: contest_atom_1.contestAtom.rankType,
|
|
23
|
+
joinType: contest_atom_1.contestAtom.joinType,
|
|
24
|
+
participantsCount: contest_atom_1.contestAtom.participantsCount,
|
|
25
|
+
timeStart: contest_atom_1.contestAtom.timeStart,
|
|
26
|
+
timeEnd: contest_atom_1.contestAtom.timeEnd,
|
|
27
|
+
tags: zod_1.z.array(contest_atom_1.contestAtom.tag),
|
|
28
|
+
})),
|
|
29
|
+
page: zod_1.z.number().int().positive(),
|
|
30
|
+
maxPage: zod_1.z.number().int().positive(),
|
|
31
|
+
count: zod_1.z.number().int().nonnegative(),
|
|
32
|
+
}),
|
|
33
|
+
query: zod_1.z.object({
|
|
34
|
+
tags: zod_1.z.string().trim().optional(),
|
|
35
|
+
search: zod_1.z.string().trim().optional(),
|
|
36
|
+
sort: zod_1.z
|
|
37
|
+
.enum([
|
|
38
|
+
'timeStart-asc',
|
|
39
|
+
'timeStart-desc',
|
|
40
|
+
'timeEnd-asc',
|
|
41
|
+
'timeEnd-desc',
|
|
42
|
+
])
|
|
43
|
+
.optional(),
|
|
44
|
+
page: zod_1.z.coerce.number().int().positive().default(1),
|
|
45
|
+
onePageLength: zod_1.z.coerce.number().int().positive().max(200).default(100),
|
|
46
|
+
}),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=contest.endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contest.endpoint.js","sourceRoot":"","sources":["../../../src/endpoints/oj-api/contest.endpoint.ts"],"names":[],"mappings":";;AACA,6BAAwB;AAExB,iDAA6C;AAE7C,MAAM,EAAE,MAAM,EAAE,GAAG,0BAAW,CAAC;AAE/B,kBAAe;IACb,GAAG,EAAE;QACH,MAAM;QACN,SAAS,EAAE;YACT,OAAO,EAAE,OAAO;SACjB;QACD,IAAI,EAAE;YACJ,aAAa,EAAE,CAAC;SACjB;QACD,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,KAAc;QACtB,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG;QACf,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;YACb,QAAQ,EAAE,OAAC,CAAC,KAAK,CACf,OAAC,CAAC,MAAM,CAAC;gBACP,EAAE,EAAE,0BAAW,CAAC,EAAE;gBAClB,KAAK,EAAE,0BAAW,CAAC,KAAK;gBACxB,QAAQ,EAAE,0BAAW,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,0BAAW,CAAC,QAAQ;gBAC9B,iBAAiB,EAAE,0BAAW,CAAC,iBAAiB;gBAChD,SAAS,EAAE,0BAAW,CAAC,SAAS;gBAChC,OAAO,EAAE,0BAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,0BAAW,CAAC,GAAG,CAAC;aAC/B,CAAC,CACH;YACD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACjC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YACpC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QACF,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAClC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YACpC,IAAI,EAAE,OAAC;iBACJ,IAAI,CAAC;gBACJ,eAAe;gBACf,gBAAgB;gBAChB,aAAa;gBACb,cAAc;aACf,CAAC;iBACD,QAAQ,EAAE;YACb,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACnD,aAAa,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;SACxE,CAAC;KACH;CAC0C,CAAC"}
|