@withwiz/toolkit 0.3.3 → 0.4.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 (43) hide show
  1. package/dist/auth/index.js +6 -6
  2. package/dist/{chunk-E54MAI4I.js → chunk-2F6KNGOD.js} +2 -2
  3. package/dist/{chunk-BKJPYZYO.js → chunk-3YUKCYHI.js} +4 -4
  4. package/dist/{chunk-S54PFAEU.js → chunk-7VTBRP5M.js} +2 -2
  5. package/dist/{chunk-HCF3C3AQ.js → chunk-AKD4YMJU.js} +0 -61
  6. package/dist/{chunk-6MI4XLWC.js → chunk-AQJAY5FA.js} +2 -2
  7. package/dist/{chunk-TQJDNWBL.js → chunk-BJSEYZBH.js} +3 -3
  8. package/dist/{chunk-KXXROUA5.js → chunk-EOEMOXNT.js} +1 -44
  9. package/dist/{chunk-HUDWNKGY.js → chunk-J5AISIJS.js} +2 -2
  10. package/dist/{chunk-Y2JYA2AR.js → chunk-JNJALNRR.js} +2 -2
  11. package/dist/{chunk-2KDLKHTO.js → chunk-L6AU74EI.js} +2 -14
  12. package/dist/{chunk-IYXMGIEP.js → chunk-ON4ENPUS.js} +0 -61
  13. package/dist/{chunk-SNVGJPPX.js → chunk-SNTLJ646.js} +0 -80
  14. package/dist/{chunk-7JWIX5BS.js → chunk-WMJ5M45N.js} +1 -1
  15. package/dist/{chunk-JJ3I57N2.js → chunk-YP5SAHAP.js} +3 -3
  16. package/dist/components/ui/DataTable.js +2 -2
  17. package/dist/components/ui/data-table/DataTable.js +2 -2
  18. package/dist/constants/error-codes.d.ts +0 -78
  19. package/dist/constants/error-codes.js +1 -1
  20. package/dist/constants/index.js +1 -1
  21. package/dist/error/app-error.d.ts +3 -16
  22. package/dist/error/app-error.js +2 -2
  23. package/dist/error/error-display.js +7 -7
  24. package/dist/error/error-handler.d.ts +0 -24
  25. package/dist/error/error-handler.js +3 -3
  26. package/dist/error/friendly-messages-v2.js +5 -5
  27. package/dist/error/friendly-messages.js +1 -15
  28. package/dist/error/index.js +8 -8
  29. package/dist/error/messages/en.js +1 -1
  30. package/dist/error/messages/index.js +3 -3
  31. package/dist/error/messages/ko.js +1 -1
  32. package/dist/middleware/auth.js +3 -3
  33. package/dist/middleware/error-handler.js +7 -7
  34. package/dist/middleware/index.js +10 -10
  35. package/dist/middleware/rate-limit.js +3 -3
  36. package/dist/middleware/wrappers.js +10 -10
  37. package/dist/storage/r2-storage.js +2 -2
  38. package/dist/utils/api-helpers.js +2 -2
  39. package/dist/utils/error-processor.js +3 -3
  40. package/dist/utils/index.js +4 -4
  41. package/dist/utils/optimistic-lock.js +2 -2
  42. package/package.json +1 -1
  43. package/dist/{chunk-HB5GFTFD.js → chunk-LX2EYD74.js} +3 -3
@@ -75,12 +75,6 @@ export declare const ERROR_CODES: {
75
75
  readonly status: 400;
76
76
  readonly message: "Password is too weak.";
77
77
  };
78
- readonly INVALID_ALIAS_FORMAT: {
79
- readonly code: 40008;
80
- readonly key: "INVALID_ALIAS_FORMAT";
81
- readonly status: 400;
82
- readonly message: "Alias can only contain English letters, numbers, -, and _.";
83
- };
84
78
  readonly UNAUTHORIZED: {
85
79
  readonly code: 40101;
86
80
  readonly key: "UNAUTHORIZED";
@@ -105,18 +99,6 @@ export declare const ERROR_CODES: {
105
99
  readonly status: 401;
106
100
  readonly message: "Invalid email or password.";
107
101
  };
108
- readonly LINK_PASSWORD_REQUIRED: {
109
- readonly code: 40104;
110
- readonly key: "LINK_PASSWORD_REQUIRED";
111
- readonly status: 401;
112
- readonly message: "Link password is required.";
113
- };
114
- readonly LINK_PASSWORD_INCORRECT: {
115
- readonly code: 40105;
116
- readonly key: "LINK_PASSWORD_INCORRECT";
117
- readonly status: 401;
118
- readonly message: "Incorrect link password.";
119
- };
120
102
  readonly SESSION_EXPIRED: {
121
103
  readonly code: 40107;
122
104
  readonly key: "SESSION_EXPIRED";
@@ -159,30 +141,6 @@ export declare const ERROR_CODES: {
159
141
  readonly status: 404;
160
142
  readonly message: "User not found.";
161
143
  };
162
- readonly LINK_NOT_FOUND: {
163
- readonly code: 40403;
164
- readonly key: "LINK_NOT_FOUND";
165
- readonly status: 404;
166
- readonly message: "Link not found.";
167
- };
168
- readonly TAG_NOT_FOUND: {
169
- readonly code: 40408;
170
- readonly key: "TAG_NOT_FOUND";
171
- readonly status: 404;
172
- readonly message: "Tag not found.";
173
- };
174
- readonly FAVORITE_NOT_FOUND: {
175
- readonly code: 40409;
176
- readonly key: "FAVORITE_NOT_FOUND";
177
- readonly status: 404;
178
- readonly message: "Favorite not found.";
179
- };
180
- readonly GROUP_NOT_FOUND: {
181
- readonly code: 40410;
182
- readonly key: "GROUP_NOT_FOUND";
183
- readonly status: 404;
184
- readonly message: "Group not found.";
185
- };
186
144
  readonly CONFLICT: {
187
145
  readonly code: 40904;
188
146
  readonly key: "CONFLICT";
@@ -201,12 +159,6 @@ export declare const ERROR_CODES: {
201
159
  readonly status: 409;
202
160
  readonly message: "Email is already registered.";
203
161
  };
204
- readonly ALIAS_ALREADY_EXISTS: {
205
- readonly code: 40907;
206
- readonly key: "ALIAS_ALREADY_EXISTS";
207
- readonly status: 409;
208
- readonly message: "Alias is already in use.";
209
- };
210
162
  readonly BUSINESS_RULE_VIOLATION: {
211
163
  readonly code: 42201;
212
164
  readonly key: "BUSINESS_RULE_VIOLATION";
@@ -225,36 +177,6 @@ export declare const ERROR_CODES: {
225
177
  readonly status: 422;
226
178
  readonly message: "Usage quota exceeded.";
227
179
  };
228
- readonly LINK_EXPIRED: {
229
- readonly code: 42204;
230
- readonly key: "LINK_EXPIRED";
231
- readonly status: 422;
232
- readonly message: "Link has expired.";
233
- };
234
- readonly LINK_INACTIVE: {
235
- readonly code: 42205;
236
- readonly key: "LINK_INACTIVE";
237
- readonly status: 422;
238
- readonly message: "Link is inactive.";
239
- };
240
- readonly RESERVED_WORD_USED: {
241
- readonly code: 42208;
242
- readonly key: "RESERVED_WORD_USED";
243
- readonly status: 422;
244
- readonly message: "Reserved words cannot be used as aliases.";
245
- };
246
- readonly ALREADY_FAVORITED: {
247
- readonly code: 42209;
248
- readonly key: "ALREADY_FAVORITED";
249
- readonly status: 422;
250
- readonly message: "Already added to favorites.";
251
- };
252
- readonly CANNOT_DELETE_OWN_ACCOUNT: {
253
- readonly code: 42210;
254
- readonly key: "CANNOT_DELETE_OWN_ACCOUNT";
255
- readonly status: 422;
256
- readonly message: "You cannot delete your own account.";
257
- };
258
180
  readonly FILE_TOO_LARGE: {
259
181
  readonly code: 42211;
260
182
  readonly key: "FILE_TOO_LARGE";
@@ -11,7 +11,7 @@ import {
11
11
  getErrorInfo,
12
12
  getHttpStatus,
13
13
  getLogLevel
14
- } from "../chunk-SNVGJPPX.js";
14
+ } from "../chunk-SNTLJ646.js";
15
15
  import "../chunk-ORMEWXMH.js";
16
16
  export {
17
17
  ERROR_CODES,
@@ -44,7 +44,7 @@ import {
44
44
  getErrorInfo,
45
45
  getHttpStatus,
46
46
  getLogLevel
47
- } from "../chunk-SNVGJPPX.js";
47
+ } from "../chunk-SNTLJ646.js";
48
48
  import "../chunk-ORMEWXMH.js";
49
49
  export {
50
50
  API_KEY,
@@ -36,13 +36,13 @@ export interface ISerializedError {
36
36
  *
37
37
  * @example
38
38
  * // 에러 코드 키로 생성
39
- * throw AppError.fromKey('NOT_FOUND', '링크를 찾을 수 없습니다');
39
+ * throw AppError.fromKey('NOT_FOUND', '리소스를 찾을 수 없습니다');
40
40
  *
41
41
  * // 직접 생성
42
- * throw new AppError(40403, '링크를 찾을 수 없습니다');
42
+ * throw new AppError(40401, '리소스를 찾을 수 없습니다');
43
43
  *
44
44
  * // 팩토리 메서드 사용
45
- * throw AppError.notFound('링크를 찾을 수 없습니다');
45
+ * throw AppError.notFound('리소스를 찾을 수 없습니다');
46
46
  */
47
47
  export declare class AppError extends Error {
48
48
  readonly code: number;
@@ -92,7 +92,6 @@ export declare class AppError extends Error {
92
92
  static invalidUrl(url?: string): AppError;
93
93
  static invalidEmail(email?: string): AppError;
94
94
  static weakPassword(): AppError;
95
- static invalidAlias(alias?: string): AppError;
96
95
  static unauthorized(message?: string): AppError;
97
96
  static invalidToken(): AppError;
98
97
  static tokenExpired(): AppError;
@@ -104,24 +103,12 @@ export declare class AppError extends Error {
104
103
  static accountLocked(): AppError;
105
104
  static notFound(message?: string): AppError;
106
105
  static userNotFound(): AppError;
107
- static linkNotFound(): AppError;
108
- static tagNotFound(): AppError;
109
- static favoriteNotFound(): AppError;
110
- static groupNotFound(): AppError;
111
106
  static conflict(message?: string): AppError;
112
107
  static duplicate(resourceName?: string): AppError;
113
108
  static emailExists(email?: string): AppError;
114
- static aliasExists(alias?: string): AppError;
115
109
  static businessRule(message?: string, details?: IErrorDetails): AppError;
116
110
  static invalidOperation(message?: string): AppError;
117
111
  static quotaExceeded(quotaType?: string): AppError;
118
- static linkExpired(): AppError;
119
- static linkInactive(): AppError;
120
- static linkPasswordRequired(): AppError;
121
- static linkPasswordIncorrect(): AppError;
122
- static reservedWord(word?: string): AppError;
123
- static alreadyFavorited(): AppError;
124
- static cannotDeleteOwnAccount(): AppError;
125
112
  static fileTooLarge(maxSize?: string): AppError;
126
113
  static unsupportedFileType(fileType?: string): AppError;
127
114
  static rateLimit(retryAfter?: number): AppError;
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AppError,
3
3
  app_error_default
4
- } from "../chunk-KXXROUA5.js";
5
- import "../chunk-SNVGJPPX.js";
4
+ } from "../chunk-EOEMOXNT.js";
5
+ import "../chunk-SNTLJ646.js";
6
6
  import "../chunk-ORMEWXMH.js";
7
7
  export {
8
8
  AppError,
@@ -5,16 +5,16 @@ import {
5
5
  getErrorIcon,
6
6
  handleApiResponse,
7
7
  showFriendlyError
8
- } from "../chunk-TQJDNWBL.js";
9
- import "../chunk-KXXROUA5.js";
8
+ } from "../chunk-BJSEYZBH.js";
9
+ import "../chunk-EOEMOXNT.js";
10
10
  import {
11
11
  getErrorDisplayInfo,
12
12
  getFriendlyMessage
13
- } from "../chunk-S54PFAEU.js";
14
- import "../chunk-Y2JYA2AR.js";
15
- import "../chunk-HCF3C3AQ.js";
16
- import "../chunk-IYXMGIEP.js";
17
- import "../chunk-SNVGJPPX.js";
13
+ } from "../chunk-7VTBRP5M.js";
14
+ import "../chunk-JNJALNRR.js";
15
+ import "../chunk-AKD4YMJU.js";
16
+ import "../chunk-ON4ENPUS.js";
17
+ import "../chunk-SNTLJ646.js";
18
18
  import "../chunk-ORMEWXMH.js";
19
19
  export {
20
20
  extractErrorInfo,
@@ -43,12 +43,9 @@ export declare const ErrorResponse: {
43
43
  invalidUrl: () => NextResponse<IErrorResponse>;
44
44
  invalidEmail: () => NextResponse<IErrorResponse>;
45
45
  weakPassword: () => NextResponse<IErrorResponse>;
46
- invalidAlias: () => NextResponse<IErrorResponse>;
47
46
  unauthorized: (message?: string) => NextResponse<IErrorResponse>;
48
47
  invalidToken: () => NextResponse<IErrorResponse>;
49
48
  tokenExpired: () => NextResponse<IErrorResponse>;
50
- linkPasswordRequired: () => NextResponse<IErrorResponse>;
51
- linkPasswordIncorrect: () => NextResponse<IErrorResponse>;
52
49
  invalidCredentials: () => NextResponse<IErrorResponse>;
53
50
  sessionExpired: () => NextResponse<IErrorResponse>;
54
51
  forbidden: (message?: string) => NextResponse<IErrorResponse>;
@@ -57,21 +54,12 @@ export declare const ErrorResponse: {
57
54
  accountLocked: () => NextResponse<IErrorResponse>;
58
55
  notFound: (message?: string) => NextResponse<IErrorResponse>;
59
56
  userNotFound: () => NextResponse<IErrorResponse>;
60
- linkNotFound: () => NextResponse<IErrorResponse>;
61
- tagNotFound: () => NextResponse<IErrorResponse>;
62
- favoriteNotFound: () => NextResponse<IErrorResponse>;
63
- groupNotFound: () => NextResponse<IErrorResponse>;
64
57
  conflict: (message?: string) => NextResponse<IErrorResponse>;
65
58
  duplicate: (resource?: string) => NextResponse<IErrorResponse>;
66
59
  emailExists: () => NextResponse<IErrorResponse>;
67
- aliasExists: () => NextResponse<IErrorResponse>;
68
60
  businessRule: (message?: string) => NextResponse<IErrorResponse>;
69
61
  invalidOperation: (message?: string) => NextResponse<IErrorResponse>;
70
- linkExpired: () => NextResponse<IErrorResponse>;
71
- linkInactive: () => NextResponse<IErrorResponse>;
72
- reservedWord: () => NextResponse<IErrorResponse>;
73
62
  quotaExceeded: () => NextResponse<IErrorResponse>;
74
- alreadyFavorited: () => NextResponse<IErrorResponse>;
75
63
  fileTooLarge: (maxSize?: string) => NextResponse<IErrorResponse>;
76
64
  unsupportedFileType: (fileType?: string) => NextResponse<IErrorResponse>;
77
65
  rateLimit: () => NextResponse<IErrorResponse>;
@@ -104,12 +92,9 @@ declare const _default: {
104
92
  invalidUrl: () => NextResponse<IErrorResponse>;
105
93
  invalidEmail: () => NextResponse<IErrorResponse>;
106
94
  weakPassword: () => NextResponse<IErrorResponse>;
107
- invalidAlias: () => NextResponse<IErrorResponse>;
108
95
  unauthorized: (message?: string) => NextResponse<IErrorResponse>;
109
96
  invalidToken: () => NextResponse<IErrorResponse>;
110
97
  tokenExpired: () => NextResponse<IErrorResponse>;
111
- linkPasswordRequired: () => NextResponse<IErrorResponse>;
112
- linkPasswordIncorrect: () => NextResponse<IErrorResponse>;
113
98
  invalidCredentials: () => NextResponse<IErrorResponse>;
114
99
  sessionExpired: () => NextResponse<IErrorResponse>;
115
100
  forbidden: (message?: string) => NextResponse<IErrorResponse>;
@@ -118,21 +103,12 @@ declare const _default: {
118
103
  accountLocked: () => NextResponse<IErrorResponse>;
119
104
  notFound: (message?: string) => NextResponse<IErrorResponse>;
120
105
  userNotFound: () => NextResponse<IErrorResponse>;
121
- linkNotFound: () => NextResponse<IErrorResponse>;
122
- tagNotFound: () => NextResponse<IErrorResponse>;
123
- favoriteNotFound: () => NextResponse<IErrorResponse>;
124
- groupNotFound: () => NextResponse<IErrorResponse>;
125
106
  conflict: (message?: string) => NextResponse<IErrorResponse>;
126
107
  duplicate: (resource?: string) => NextResponse<IErrorResponse>;
127
108
  emailExists: () => NextResponse<IErrorResponse>;
128
- aliasExists: () => NextResponse<IErrorResponse>;
129
109
  businessRule: (message?: string) => NextResponse<IErrorResponse>;
130
110
  invalidOperation: (message?: string) => NextResponse<IErrorResponse>;
131
- linkExpired: () => NextResponse<IErrorResponse>;
132
- linkInactive: () => NextResponse<IErrorResponse>;
133
- reservedWord: () => NextResponse<IErrorResponse>;
134
111
  quotaExceeded: () => NextResponse<IErrorResponse>;
135
- alreadyFavorited: () => NextResponse<IErrorResponse>;
136
112
  fileTooLarge: (maxSize?: string) => NextResponse<IErrorResponse>;
137
113
  unsupportedFileType: (fileType?: string) => NextResponse<IErrorResponse>;
138
114
  rateLimit: () => NextResponse<IErrorResponse>;
@@ -5,9 +5,9 @@ import {
5
5
  error_handler_default,
6
6
  processError,
7
7
  withErrorHandler
8
- } from "../chunk-2KDLKHTO.js";
9
- import "../chunk-KXXROUA5.js";
10
- import "../chunk-SNVGJPPX.js";
8
+ } from "../chunk-L6AU74EI.js";
9
+ import "../chunk-EOEMOXNT.js";
10
+ import "../chunk-SNTLJ646.js";
11
11
  import "../chunk-AIH3F7JV.js";
12
12
  import "../chunk-GQVBWZLH.js";
13
13
  import "../chunk-OHBAELPZ.js";
@@ -2,11 +2,11 @@ import {
2
2
  formatFriendlyError,
3
3
  getErrorDisplayInfo,
4
4
  getFriendlyMessage
5
- } from "../chunk-S54PFAEU.js";
6
- import "../chunk-Y2JYA2AR.js";
7
- import "../chunk-HCF3C3AQ.js";
8
- import "../chunk-IYXMGIEP.js";
9
- import "../chunk-SNVGJPPX.js";
5
+ } from "../chunk-7VTBRP5M.js";
6
+ import "../chunk-JNJALNRR.js";
7
+ import "../chunk-AKD4YMJU.js";
8
+ import "../chunk-ON4ENPUS.js";
9
+ import "../chunk-SNTLJ646.js";
10
10
  import "../chunk-ORMEWXMH.js";
11
11
  export {
12
12
  formatFriendlyError,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getErrorCategory
3
- } from "../chunk-SNVGJPPX.js";
3
+ } from "../chunk-SNTLJ646.js";
4
4
  import "../chunk-ORMEWXMH.js";
5
5
 
6
6
  // src/error/friendly-messages.ts
@@ -13,7 +13,6 @@ var koMessages = {
13
13
  40005: { title: "URL \uD615\uC2DD\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694", description: "https://\uB85C \uC2DC\uC791\uD558\uB294 URL\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.", action: "\uC608: https://example.com" },
14
14
  40006: { title: "\uC774\uBA54\uC77C \uD615\uC2DD\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694", description: "\uC62C\uBC14\uB978 \uC774\uBA54\uC77C \uC8FC\uC18C\uAC00 \uC544\uB2D9\uB2C8\uB2E4.", action: "\uC608: user@example.com" },
15
15
  40007: { title: "\uB354 \uC548\uC804\uD55C \uBE44\uBC00\uBC88\uD638\uAC00 \uD544\uC694\uD574\uC694", description: "8\uC790 \uC774\uC0C1, \uC601\uBB38/\uC22B\uC790/\uD2B9\uC218\uBB38\uC790 \uD3EC\uD568", action: "\uB354 \uBCF5\uC7A1\uD55C \uBE44\uBC00\uBC88\uD638\uB97C \uC124\uC815\uD574 \uC8FC\uC138\uC694." },
16
- 40008: { title: "\uBCC4\uCE6D \uD615\uC2DD\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694", description: "\uC601\uBB38, \uC22B\uC790, \uD558\uC774\uD508(-)\uB9CC \uC0AC\uC6A9 \uAC00\uB2A5", action: "\uC608: my-link-123" },
17
16
  // 인증 (401xx)
18
17
  40101: { title: "\uB85C\uADF8\uC778\uC774 \uD544\uC694\uD574\uC694", description: "\uC774 \uAE30\uB2A5\uC740 \uB85C\uADF8\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.", action: "\uB85C\uADF8\uC778 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
19
18
  40102: { title: "\uC778\uC99D \uC815\uBCF4\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694", description: "\uB85C\uADF8\uC778 \uC0C1\uD0DC\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uB85C\uADF8\uC778\uD574 \uC8FC\uC138\uC694." },
@@ -28,27 +27,14 @@ var koMessages = {
28
27
  // 리소스 (404xx)
29
28
  40401: { title: "\uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uC694\uCCAD\uD558\uC2E0 \uD56D\uBAA9\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uC8FC\uC18C\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
30
29
  40402: { title: "\uC0AC\uC6A9\uC790\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uD574\uB2F9 \uC0AC\uC6A9\uC790\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." },
31
- 40403: { title: "\uB9C1\uD06C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uB2E8\uCD95 \uB9C1\uD06C\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uB9C1\uD06C \uC8FC\uC18C\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
32
- 40408: { title: "\uD0DC\uADF8\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uD0DC\uADF8\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." },
33
- 40409: { title: "\uC990\uACA8\uCC3E\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uD56D\uBAA9\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." },
34
- 40410: { title: "\uADF8\uB8F9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694", description: "\uADF8\uB8F9\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4." },
35
30
  // 충돌 (409xx)
36
31
  40904: { title: "\uCDA9\uB3CC\uC774 \uBC1C\uC0DD\uD588\uC5B4\uC694", description: "\uAE30\uC874 \uB370\uC774\uD130\uC640 \uCDA9\uB3CC\uD569\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
37
32
  40905: { title: "\uC774\uBBF8 \uC874\uC7AC\uD574\uC694", description: "\uB3D9\uC77C\uD55C \uD56D\uBAA9\uC774 \uC788\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uB978 \uAC12\uC744 \uC0AC\uC6A9\uD574 \uC8FC\uC138\uC694." },
38
33
  40906: { title: "\uC774\uBBF8 \uB4F1\uB85D\uB41C \uC774\uBA54\uC77C\uC774\uC5D0\uC694", description: "\uB2E4\uB978 \uACC4\uC815\uC5D0\uC11C \uC0AC\uC6A9 \uC911\uC785\uB2C8\uB2E4.", action: "\uB2E4\uB978 \uC774\uBA54\uC77C\uC744 \uC0AC\uC6A9\uD574 \uC8FC\uC138\uC694." },
39
- 40907: { title: "\uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC778 \uBCC4\uCE6D\uC774\uC5D0\uC694", description: "\uB2E4\uB978 \uB9C1\uD06C\uC5D0\uC11C \uC0AC\uC6A9 \uC911\uC785\uB2C8\uB2E4.", action: "\uB2E4\uB978 \uBCC4\uCE6D\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694." },
40
34
  // 비즈니스 (422xx)
41
35
  42201: { title: "\uCC98\uB9AC\uD560 \uC218 \uC5C6\uC5B4\uC694", description: "\uD604\uC7AC \uC0C1\uD0DC\uC5D0\uC11C \uCC98\uB9AC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", action: "\uC870\uAC74\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
42
36
  42202: { title: "\uC9C0\uAE08\uC740 \uD560 \uC218 \uC5C6\uB294 \uC791\uC5C5\uC774\uC5D0\uC694", description: "\uD604\uC7AC \uC0C1\uD0DC\uC5D0\uC11C \uBD88\uAC00\uB2A5\uD569\uB2C8\uB2E4." },
43
37
  42203: { title: "\uC0AC\uC6A9\uB7C9\uC744 \uCD08\uACFC\uD588\uC5B4\uC694", description: "\uD55C\uB3C4\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4.", action: "\uD50C\uB79C \uC5C5\uADF8\uB808\uC774\uB4DC\uB97C \uACE0\uB824\uD574 \uC8FC\uC138\uC694." },
44
- 42204: { title: "\uB9CC\uB8CC\uB41C \uB9C1\uD06C\uC608\uC694", description: "\uC720\uD6A8 \uAE30\uAC04\uC774 \uC9C0\uB0AC\uC2B5\uB2C8\uB2E4.", action: "\uC0C8 \uB9C1\uD06C\uB97C \uC0DD\uC131\uD574 \uC8FC\uC138\uC694." },
45
- 42205: { title: "\uBE44\uD65C\uC131\uD654\uB41C \uB9C1\uD06C\uC608\uC694", description: "\uC0AC\uC6A9\uC774 \uC911\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uC18C\uC720\uC790\uC5D0\uAC8C \uBB38\uC758\uD574 \uC8FC\uC138\uC694." },
46
- // 42206, 42207: 401xx로 이동 (40104, 40105)
47
- 40104: { title: "\uBE44\uBC00\uBC88\uD638\uAC00 \uD544\uC694\uD574\uC694", description: "\uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD574\uC57C \uD569\uB2C8\uB2E4.", action: "\uBE44\uBC00\uBC88\uD638\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694." },
48
- 40105: { title: "\uBE44\uBC00\uBC88\uD638\uAC00 \uD2C0\uB838\uC5B4\uC694", description: "\uBE44\uBC00\uBC88\uD638\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
49
- 42208: { title: "\uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 \uBCC4\uCE6D\uC774\uC5D0\uC694", description: "\uC2DC\uC2A4\uD15C \uC608\uC57D\uC5B4\uC785\uB2C8\uB2E4.", action: "\uB2E4\uB978 \uBCC4\uCE6D\uC744 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694." },
50
- 42209: { title: "\uC774\uBBF8 \uC990\uACA8\uCC3E\uAE30\uC5D0 \uC788\uC5B4\uC694", description: "\uC774\uBBF8 \uCD94\uAC00\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4." },
51
- 42210: { title: "\uC0AD\uC81C\uD560 \uC218 \uC5C6\uC5B4\uC694", description: "\uBCF8\uC778 \uAD00\uB9AC\uC790 \uACC4\uC815\uC740 \uC0AD\uC81C \uBD88\uAC00\uD569\uB2C8\uB2E4." },
52
38
  42211: { title: "\uD30C\uC77C\uC774 \uB108\uBB34 \uCEE4\uC694", description: "\uCD5C\uB300 \uD06C\uAE30\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4.", action: "\uC791\uC740 \uD30C\uC77C\uC744 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694." },
53
39
  42212: { title: "\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD30C\uC77C \uD615\uC2DD\uC774\uC5D0\uC694", description: "\uC5C5\uB85C\uB4DC\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", action: "\uC9C0\uC6D0 \uD615\uC2DD\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
54
40
  // Rate Limit (429xx)
@@ -8,31 +8,31 @@ import {
8
8
  getErrorIcon,
9
9
  handleApiResponse,
10
10
  showFriendlyError
11
- } from "../chunk-TQJDNWBL.js";
11
+ } from "../chunk-BJSEYZBH.js";
12
12
  import {
13
13
  AUTH_ERROR_CODE_MAP,
14
14
  ErrorResponse,
15
15
  errorToResponse,
16
16
  processError,
17
17
  withErrorHandler
18
- } from "../chunk-2KDLKHTO.js";
18
+ } from "../chunk-L6AU74EI.js";
19
19
  import {
20
20
  AppError
21
- } from "../chunk-KXXROUA5.js";
21
+ } from "../chunk-EOEMOXNT.js";
22
22
  import {
23
23
  formatFriendlyError,
24
24
  getErrorDisplayInfo,
25
25
  getFriendlyMessage
26
- } from "../chunk-S54PFAEU.js";
26
+ } from "../chunk-7VTBRP5M.js";
27
27
  import {
28
28
  getAllMessages,
29
29
  getErrorMessage,
30
30
  hasMessage,
31
31
  isLocaleSupported,
32
32
  supportedLocales
33
- } from "../chunk-Y2JYA2AR.js";
34
- import "../chunk-HCF3C3AQ.js";
35
- import "../chunk-IYXMGIEP.js";
33
+ } from "../chunk-JNJALNRR.js";
34
+ import "../chunk-AKD4YMJU.js";
35
+ import "../chunk-ON4ENPUS.js";
36
36
  import {
37
37
  ERROR_CODES,
38
38
  HTTP_STATUS,
@@ -46,7 +46,7 @@ import {
46
46
  getErrorInfo,
47
47
  getHttpStatus,
48
48
  getLogLevel
49
- } from "../chunk-SNVGJPPX.js";
49
+ } from "../chunk-SNTLJ646.js";
50
50
  import "../chunk-AIH3F7JV.js";
51
51
  import "../chunk-GQVBWZLH.js";
52
52
  import "../chunk-OHBAELPZ.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  enMessages
3
- } from "../../chunk-HCF3C3AQ.js";
3
+ } from "../../chunk-AKD4YMJU.js";
4
4
  import "../../chunk-ORMEWXMH.js";
5
5
  export {
6
6
  enMessages
@@ -4,9 +4,9 @@ import {
4
4
  hasMessage,
5
5
  isLocaleSupported,
6
6
  supportedLocales
7
- } from "../../chunk-Y2JYA2AR.js";
8
- import "../../chunk-HCF3C3AQ.js";
9
- import "../../chunk-IYXMGIEP.js";
7
+ } from "../../chunk-JNJALNRR.js";
8
+ import "../../chunk-AKD4YMJU.js";
9
+ import "../../chunk-ON4ENPUS.js";
10
10
  import "../../chunk-ORMEWXMH.js";
11
11
  export {
12
12
  getAllMessages,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  koMessages
3
- } from "../../chunk-IYXMGIEP.js";
3
+ } from "../../chunk-ON4ENPUS.js";
4
4
  import "../../chunk-ORMEWXMH.js";
5
5
  export {
6
6
  koMessages
@@ -4,9 +4,9 @@ import {
4
4
  initializeAuthMiddleware,
5
5
  optionalAuthMiddleware,
6
6
  setAccessTokenBlacklistChecker
7
- } from "../chunk-HUDWNKGY.js";
8
- import "../chunk-KXXROUA5.js";
9
- import "../chunk-SNVGJPPX.js";
7
+ } from "../chunk-J5AISIJS.js";
8
+ import "../chunk-EOEMOXNT.js";
9
+ import "../chunk-SNTLJ646.js";
10
10
  import "../chunk-OZE5KUS3.js";
11
11
  import "../chunk-3GAY2T2A.js";
12
12
  import "../chunk-AJLUPYCQ.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  errorHandlerMiddleware
3
- } from "../chunk-BKJPYZYO.js";
4
- import "../chunk-2KDLKHTO.js";
5
- import "../chunk-KXXROUA5.js";
6
- import "../chunk-Y2JYA2AR.js";
7
- import "../chunk-HCF3C3AQ.js";
8
- import "../chunk-IYXMGIEP.js";
9
- import "../chunk-SNVGJPPX.js";
3
+ } from "../chunk-3YUKCYHI.js";
4
+ import "../chunk-L6AU74EI.js";
5
+ import "../chunk-EOEMOXNT.js";
6
+ import "../chunk-JNJALNRR.js";
7
+ import "../chunk-AKD4YMJU.js";
8
+ import "../chunk-ON4ENPUS.js";
9
+ import "../chunk-SNTLJ646.js";
10
10
  import "../chunk-AIH3F7JV.js";
11
11
  import "../chunk-GQVBWZLH.js";
12
12
  import "../chunk-OHBAELPZ.js";
@@ -4,7 +4,7 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../chunk-JJ3I57N2.js";
7
+ } from "../chunk-YP5SAHAP.js";
8
8
  import {
9
9
  initRequestMiddleware
10
10
  } from "../chunk-62Q7DN5G.js";
@@ -15,7 +15,7 @@ import {
15
15
  createRateLimitMiddleware,
16
16
  rateLimitMiddleware,
17
17
  setRateLimitAdapter
18
- } from "../chunk-6MI4XLWC.js";
18
+ } from "../chunk-AQJAY5FA.js";
19
19
  import {
20
20
  responseLoggerMiddleware
21
21
  } from "../chunk-OIRAH57Y.js";
@@ -30,21 +30,21 @@ import {
30
30
  initializeAuthMiddleware,
31
31
  optionalAuthMiddleware,
32
32
  setAccessTokenBlacklistChecker
33
- } from "../chunk-HUDWNKGY.js";
33
+ } from "../chunk-J5AISIJS.js";
34
34
  import {
35
35
  corsMiddleware,
36
36
  validateCorsConfiguration
37
37
  } from "../chunk-KGHWGLED.js";
38
38
  import {
39
39
  errorHandlerMiddleware
40
- } from "../chunk-BKJPYZYO.js";
40
+ } from "../chunk-3YUKCYHI.js";
41
41
  import "../chunk-XHZ5L4FO.js";
42
- import "../chunk-2KDLKHTO.js";
43
- import "../chunk-KXXROUA5.js";
44
- import "../chunk-Y2JYA2AR.js";
45
- import "../chunk-HCF3C3AQ.js";
46
- import "../chunk-IYXMGIEP.js";
47
- import "../chunk-SNVGJPPX.js";
42
+ import "../chunk-L6AU74EI.js";
43
+ import "../chunk-EOEMOXNT.js";
44
+ import "../chunk-JNJALNRR.js";
45
+ import "../chunk-AKD4YMJU.js";
46
+ import "../chunk-ON4ENPUS.js";
47
+ import "../chunk-SNTLJ646.js";
48
48
  import "../chunk-GFWGLWTS.js";
49
49
  import "../chunk-OZE5KUS3.js";
50
50
  import "../chunk-3GAY2T2A.js";
@@ -2,9 +2,9 @@ import {
2
2
  createRateLimitMiddleware,
3
3
  rateLimitMiddleware,
4
4
  setRateLimitAdapter
5
- } from "../chunk-6MI4XLWC.js";
6
- import "../chunk-KXXROUA5.js";
7
- import "../chunk-SNVGJPPX.js";
5
+ } from "../chunk-AQJAY5FA.js";
6
+ import "../chunk-EOEMOXNT.js";
7
+ import "../chunk-SNTLJ646.js";
8
8
  import "../chunk-GQVBWZLH.js";
9
9
  import "../chunk-OHBAELPZ.js";
10
10
  import "../chunk-SFPMFVSD.js";
@@ -4,22 +4,22 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../chunk-JJ3I57N2.js";
7
+ } from "../chunk-YP5SAHAP.js";
8
8
  import "../chunk-62Q7DN5G.js";
9
9
  import "../chunk-FPESPW6P.js";
10
- import "../chunk-6MI4XLWC.js";
10
+ import "../chunk-AQJAY5FA.js";
11
11
  import "../chunk-OIRAH57Y.js";
12
12
  import "../chunk-WMQE2YK7.js";
13
- import "../chunk-HUDWNKGY.js";
13
+ import "../chunk-J5AISIJS.js";
14
14
  import "../chunk-KGHWGLED.js";
15
- import "../chunk-BKJPYZYO.js";
15
+ import "../chunk-3YUKCYHI.js";
16
16
  import "../chunk-XHZ5L4FO.js";
17
- import "../chunk-2KDLKHTO.js";
18
- import "../chunk-KXXROUA5.js";
19
- import "../chunk-Y2JYA2AR.js";
20
- import "../chunk-HCF3C3AQ.js";
21
- import "../chunk-IYXMGIEP.js";
22
- import "../chunk-SNVGJPPX.js";
17
+ import "../chunk-L6AU74EI.js";
18
+ import "../chunk-EOEMOXNT.js";
19
+ import "../chunk-JNJALNRR.js";
20
+ import "../chunk-AKD4YMJU.js";
21
+ import "../chunk-ON4ENPUS.js";
22
+ import "../chunk-SNTLJ646.js";
23
23
  import "../chunk-GFWGLWTS.js";
24
24
  import "../chunk-OZE5KUS3.js";
25
25
  import "../chunk-3GAY2T2A.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AppError
3
- } from "../chunk-KXXROUA5.js";
4
- import "../chunk-SNVGJPPX.js";
3
+ } from "../chunk-EOEMOXNT.js";
4
+ import "../chunk-SNTLJ646.js";
5
5
  import {
6
6
  getStorageConfig
7
7
  } from "../chunk-AYZJN32D.js";
@@ -11,8 +11,8 @@ import {
11
11
  parseSort,
12
12
  requireAdmin,
13
13
  validateAndParse
14
- } from "../chunk-7JWIX5BS.js";
15
- import "../chunk-SNVGJPPX.js";
14
+ } from "../chunk-WMJ5M45N.js";
15
+ import "../chunk-SNTLJ646.js";
16
16
  import "../chunk-ORMEWXMH.js";
17
17
  export {
18
18
  createPaginatedResponse,
@@ -12,9 +12,9 @@ import {
12
12
  throwUnauthorizedError,
13
13
  throwValidationError,
14
14
  withErrorHandling
15
- } from "../chunk-E54MAI4I.js";
16
- import "../chunk-KXXROUA5.js";
17
- import "../chunk-SNVGJPPX.js";
15
+ } from "../chunk-2F6KNGOD.js";
16
+ import "../chunk-EOEMOXNT.js";
17
+ import "../chunk-SNTLJ646.js";
18
18
  import "../chunk-GQVBWZLH.js";
19
19
  import "../chunk-OHBAELPZ.js";
20
20
  import "../chunk-SFPMFVSD.js";
@@ -47,7 +47,7 @@ import {
47
47
  parseSort,
48
48
  requireAdmin,
49
49
  validateAndParse
50
- } from "../chunk-7JWIX5BS.js";
50
+ } from "../chunk-WMJ5M45N.js";
51
51
  import {
52
52
  getAllowedOrigins,
53
53
  getCorsConfig,
@@ -80,9 +80,9 @@ import {
80
80
  throwUnauthorizedError,
81
81
  throwValidationError,
82
82
  withErrorHandling
83
- } from "../chunk-E54MAI4I.js";
84
- import "../chunk-KXXROUA5.js";
85
- import "../chunk-SNVGJPPX.js";
83
+ } from "../chunk-2F6KNGOD.js";
84
+ import "../chunk-EOEMOXNT.js";
85
+ import "../chunk-SNTLJ646.js";
86
86
  import "../chunk-GFWGLWTS.js";
87
87
  import "../chunk-GQVBWZLH.js";
88
88
  import "../chunk-OHBAELPZ.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AppError
3
- } from "../chunk-KXXROUA5.js";
4
- import "../chunk-SNVGJPPX.js";
3
+ } from "../chunk-EOEMOXNT.js";
4
+ import "../chunk-SNTLJ646.js";
5
5
  import "../chunk-ORMEWXMH.js";
6
6
 
7
7
  // src/utils/optimistic-lock.ts