@withwiz/toolkit 0.2.3 → 0.2.5

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 (102) hide show
  1. package/dist/auth/core/jwt/index.d.ts +1 -1
  2. package/dist/auth/core/jwt/index.js +1 -1
  3. package/dist/auth/index.js +19 -19
  4. package/dist/cache/cache-config.js +3 -3
  5. package/dist/cache/cache-env.js +2 -2
  6. package/dist/cache/cache-factory.js +9 -9
  7. package/dist/cache/cache-invalidation.js +10 -10
  8. package/dist/cache/cache-redis.js +3 -3
  9. package/dist/cache/cache-wrapper.js +10 -10
  10. package/dist/cache/cache.js +11 -11
  11. package/dist/cache/hybrid-cache-manager.js +5 -5
  12. package/dist/cache/index.js +11 -11
  13. package/dist/cache/inmemory-cache-manager.js +2 -2
  14. package/dist/cache/noop-cache-manager.js +4 -4
  15. package/dist/cache/redis-cache-manager.js +4 -4
  16. package/dist/{chunk-T3LJYAMO.js → chunk-2ATBAIRL.js} +5 -9
  17. package/dist/{chunk-XPASCCUA.js → chunk-45PS6FPL.js} +3 -3
  18. package/dist/{chunk-4KJXENRM.js → chunk-56BKKJOG.js} +1 -1
  19. package/dist/{chunk-HV3DGSSH.js → chunk-6FDDVTJY.js} +4 -4
  20. package/dist/{chunk-2KAPUVIS.js → chunk-7JWIX5BS.js} +1 -1
  21. package/dist/{chunk-TMVS4F7E.js → chunk-7T6EAU4I.js} +33 -8
  22. package/dist/{chunk-26Y7VEYG.js → chunk-BCCXV7VY.js} +1 -1
  23. package/dist/{chunk-6LTZCXNC.js → chunk-BYQ6VG44.js} +2 -2
  24. package/dist/{chunk-Q7IP4JMW.js → chunk-DM6ANZVI.js} +2 -2
  25. package/dist/chunk-ELD6UH57.js +68 -0
  26. package/dist/{chunk-KAWVMIRJ.js → chunk-GJGLG2MN.js} +1 -1
  27. package/dist/{chunk-4DPSCTX4.js → chunk-HC7574TB.js} +2 -2
  28. package/dist/{chunk-N4YGR5WH.js → chunk-HCF3C3AQ.js} +11 -10
  29. package/dist/{chunk-EZR55KV2.js → chunk-HJIKCR6I.js} +1 -1
  30. package/dist/{chunk-I47QEDTX.js → chunk-HJL63P7P.js} +1 -1
  31. package/dist/{chunk-YBSHN67U.js → chunk-HWIINS3Q.js} +4 -4
  32. package/dist/{chunk-3DZA6AGS.js → chunk-IJCVFLEY.js} +11 -4
  33. package/dist/{chunk-AIHQBQ3E.js → chunk-IVL62PFY.js} +8 -8
  34. package/dist/{chunk-KXAWBFJN.js → chunk-IYXMGIEP.js} +11 -10
  35. package/dist/{chunk-GPBOMJSZ.js → chunk-JVDJKMEF.js} +75 -17
  36. package/dist/{chunk-MLGO3HLS.js → chunk-KXXROUA5.js} +20 -5
  37. package/dist/{chunk-TXGNSECL.js → chunk-L26D4FDX.js} +1 -1
  38. package/dist/{chunk-G4NI37NN.js → chunk-L7AJJ3LC.js} +2 -2
  39. package/dist/{chunk-UXQRU3EM.js → chunk-MNORDAW2.js} +4 -4
  40. package/dist/{chunk-BKGVSC6S.js → chunk-MP66AGW5.js} +1 -1
  41. package/dist/{chunk-KWTBD4CM.js → chunk-P62T7AWY.js} +1 -1
  42. package/dist/{chunk-SLG26KHZ.js → chunk-PDQCJR4E.js} +10 -10
  43. package/dist/{chunk-WHR7HPWF.js → chunk-PJMXRAHZ.js} +2 -2
  44. package/dist/{chunk-Z4D4CMDA.js → chunk-PQ6GH2RP.js} +1 -1
  45. package/dist/{chunk-POKGHK3L.js → chunk-S54PFAEU.js} +2 -2
  46. package/dist/{chunk-WSQMXMTL.js → chunk-SKCYXBDR.js} +6 -2
  47. package/dist/{chunk-Y3OTJH2S.js → chunk-SNVGJPPX.js} +36 -13
  48. package/dist/{chunk-TZAP5T4N.js → chunk-T7J2OS63.js} +1 -1
  49. package/dist/{chunk-H5I5GWAA.js → chunk-UZDNS7TE.js} +3 -3
  50. package/dist/{chunk-GL2NANFH.js → chunk-VK23K5W7.js} +3 -3
  51. package/dist/{chunk-65LHDFU3.js → chunk-VQCW6FKJ.js} +2 -2
  52. package/dist/{chunk-L76O3X3D.js → chunk-WVPCER6E.js} +2 -2
  53. package/dist/{chunk-EEUBKZV4.js → chunk-Y2JYA2AR.js} +2 -2
  54. package/dist/{chunk-4ODT3Q4A.js → chunk-YGZBEEW2.js} +1 -1
  55. package/dist/constants/error-codes.d.ts +19 -12
  56. package/dist/constants/error-codes.js +3 -1
  57. package/dist/constants/index.js +3 -1
  58. package/dist/error/app-error.d.ts +1 -0
  59. package/dist/error/app-error.js +2 -2
  60. package/dist/error/error-display.d.ts +1 -1
  61. package/dist/error/error-display.js +7 -3
  62. package/dist/error/error-handler.d.ts +51 -12
  63. package/dist/error/error-handler.js +7 -4
  64. package/dist/error/friendly-messages-v2.js +5 -5
  65. package/dist/error/friendly-messages.d.ts +3 -0
  66. package/dist/error/friendly-messages.js +113 -5
  67. package/dist/error/index.js +23 -21
  68. package/dist/error/messages/en.js +1 -1
  69. package/dist/error/messages/index.js +3 -3
  70. package/dist/error/messages/ko.js +1 -1
  71. package/dist/geolocation/batch-processor.js +2 -2
  72. package/dist/geolocation/index.js +2 -2
  73. package/dist/logger/logger.js +1 -1
  74. package/dist/middleware/auth.js +5 -5
  75. package/dist/middleware/cors.d.ts +39 -6
  76. package/dist/middleware/cors.js +4 -2
  77. package/dist/middleware/error-handler.js +9 -7
  78. package/dist/middleware/index.js +19 -18
  79. package/dist/middleware/middleware-chain.js +2 -2
  80. package/dist/middleware/rate-limit.js +4 -4
  81. package/dist/middleware/response-logger.js +2 -2
  82. package/dist/middleware/security.js +2 -1
  83. package/dist/middleware/wrappers.js +16 -15
  84. package/dist/storage/r2-storage.js +7 -3
  85. package/dist/system/cpu.js +3 -3
  86. package/dist/system/disk.js +3 -3
  87. package/dist/system/environment.js +3 -3
  88. package/dist/system/health-check.js +3 -3
  89. package/dist/system/index.js +10 -10
  90. package/dist/system/memory.js +3 -3
  91. package/dist/system/network.js +3 -3
  92. package/dist/system/utils.js +2 -2
  93. package/dist/utils/api-helpers.js +2 -2
  94. package/dist/utils/csv-export.js +2 -2
  95. package/dist/utils/error-processor.js +4 -4
  96. package/dist/utils/index.js +19 -19
  97. package/dist/utils/input-validation.d.ts +2 -0
  98. package/dist/utils/input-validation.js +4 -5
  99. package/dist/utils/optimistic-lock.js +2 -2
  100. package/package.json +2 -1
  101. package/dist/chunk-2DVWSDST.js +0 -119
  102. package/dist/chunk-FOKAATUQ.js +0 -62
@@ -1,10 +1,118 @@
1
1
  import {
2
- formatFriendlyError,
3
- getErrorDisplayInfo,
4
- getFriendlyMessage
5
- } from "../chunk-2DVWSDST.js";
6
- import "../chunk-Y3OTJH2S.js";
2
+ getErrorCategory
3
+ } from "../chunk-SNVGJPPX.js";
7
4
  import "../chunk-ORMEWXMH.js";
5
+
6
+ // src/error/friendly-messages.ts
7
+ var koMessages = {
8
+ // 검증 (400xx)
9
+ 40001: { title: "\uC785\uB825 \uC815\uBCF4\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694", description: "\uC785\uB825\uD558\uC2E0 \uC815\uBCF4 \uC911 \uC77C\uBD80\uAC00 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uC785\uB825 \uB0B4\uC6A9\uC744 \uB2E4\uC2DC \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
10
+ 40002: { title: "\uC694\uCCAD\uC744 \uCC98\uB9AC\uD560 \uC218 \uC5C6\uC5B4\uC694", description: "\uC694\uCCAD \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD574 \uC8FC\uC138\uC694." },
11
+ 40003: { title: "\uC785\uB825\uAC12\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC544\uC694", description: "\uD5C8\uC6A9\uB418\uC9C0 \uC54A\uB294 \uD615\uC2DD\uC785\uB2C8\uB2E4.", action: "\uC62C\uBC14\uB978 \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694." },
12
+ 40004: { title: "\uD544\uC218 \uC815\uBCF4\uAC00 \uBE60\uC84C\uC5B4\uC694", description: "\uD544\uC218 \uD56D\uBAA9\uC774 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.", action: "\uBAA8\uB4E0 \uD544\uC218 \uD56D\uBAA9\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694." },
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
+ 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
+ 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
+ // 인증 (401xx)
18
+ 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
+ 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." },
20
+ 40103: { title: "\uB85C\uADF8\uC778\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC5B4\uC694", description: "\uBCF4\uC548\uC744 \uC704\uD574 \uC138\uC158\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uB85C\uADF8\uC778\uD574 \uC8FC\uC138\uC694." },
21
+ 40106: { title: "\uB85C\uADF8\uC778\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694", description: "\uC774\uBA54\uC77C \uB610\uB294 \uBE44\uBC00\uBC88\uD638\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
22
+ 40107: { title: "\uC138\uC158\uC774 \uC885\uB8CC\uB418\uC5C8\uC5B4\uC694", description: "\uC790\uB3D9 \uB85C\uADF8\uC544\uC6C3\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uB85C\uADF8\uC778\uD574 \uC8FC\uC138\uC694." },
23
+ // 권한 (403xx)
24
+ 40304: { title: "\uC811\uADFC \uAD8C\uD55C\uC774 \uC5C6\uC5B4\uC694", description: "\uC774 \uAE30\uB2A5\uC5D0 \uB300\uD55C \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", action: "\uAD00\uB9AC\uC790\uC5D0\uAC8C \uBB38\uC758\uD574 \uC8FC\uC138\uC694." },
25
+ 40305: { title: "\uC774\uBA54\uC77C \uC778\uC99D\uC774 \uD544\uC694\uD574\uC694", description: "\uC774\uBA54\uC77C \uC778\uC99D\uC744 \uBA3C\uC800 \uC644\uB8CC\uD574 \uC8FC\uC138\uC694.", action: "\uBA54\uC77C\uD568\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694." },
26
+ 40308: { title: "\uACC4\uC815\uC774 \uBE44\uD65C\uC131\uD654\uB418\uC5C8\uC5B4\uC694", description: "\uC11C\uBE44\uC2A4\uB97C \uC774\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.", action: "\uACE0\uAC1D\uC13C\uD130\uB85C \uBB38\uC758\uD574 \uC8FC\uC138\uC694." },
27
+ 40309: { title: "\uACC4\uC815\uC774 \uC7A0\uAE08\uB418\uC5C8\uC5B4\uC694", description: "\uB85C\uADF8\uC778 \uC2E4\uD328\uB85C \uACC4\uC815\uC774 \uC7A0\uACBC\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
28
+ // 리소스 (404xx)
29
+ 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
+ 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
+ // 충돌 (409xx)
36
+ 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
+ 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
+ 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
+ // 비즈니스 (422xx)
41
+ 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
+ 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
+ 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
+ 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
+ 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
+ // Rate Limit (429xx)
55
+ 42901: { title: "\uC7A0\uC2DC \uC26C\uC5B4\uAC00\uC138\uC694", description: "\uC694\uCCAD\uC774 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
56
+ 42902: { title: "\uC624\uB298 \uC0AC\uC6A9\uB7C9\uC744 \uBAA8\uB450 \uC0AC\uC6A9\uD588\uC5B4\uC694", description: "\uC77C\uC77C \uD55C\uB3C4\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4.", action: "\uB0B4\uC77C \uB2E4\uC2DC \uC774\uC6A9\uD574 \uC8FC\uC138\uC694." },
57
+ 42903: { title: "API \uD560\uB2F9\uB7C9\uC744 \uCD08\uACFC\uD588\uC5B4\uC694", description: "API \uD55C\uB3C4\uB97C \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4.", action: "\uD50C\uB79C \uC5C5\uADF8\uB808\uC774\uB4DC\uB97C \uACE0\uB824\uD574 \uC8FC\uC138\uC694." },
58
+ // 서버 (500xx)
59
+ 50001: { title: "\uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694", description: "\uC11C\uBC84 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
60
+ 50002: { title: "\uC77C\uC2DC\uC801\uC778 \uC624\uB958\uC608\uC694", description: "\uACE7 \uBCF5\uAD6C\uB429\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
61
+ 50003: { title: "\uB370\uC774\uD130 \uCC98\uB9AC \uC624\uB958\uC608\uC694", description: "\uB370\uC774\uD130 \uCC98\uB9AC \uC911 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
62
+ 50006: { title: "\uC774\uBA54\uC77C\uC744 \uBCF4\uB0B4\uC9C0 \uBABB\uD588\uC5B4\uC694", description: "\uC774\uBA54\uC77C \uC804\uC1A1\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
63
+ 50007: { title: "\uC77C\uC2DC\uC801\uC778 \uC624\uB958\uC608\uC694", description: "\uCE90\uC2DC \uCC98\uB9AC \uC911 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4.", action: "\uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD574 \uC8FC\uC138\uC694." },
64
+ 50008: { title: "\uD30C\uC77C \uC5C5\uB85C\uB4DC\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694", description: "\uD30C\uC77C \uC800\uC7A5 \uC911 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4.", action: "\uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
65
+ // 서비스 불가 (503xx)
66
+ 50304: { title: "\uC678\uBD80 \uC11C\uBE44\uC2A4 \uC5F0\uACB0 \uC2E4\uD328", description: "\uC678\uBD80 \uC11C\uBE44\uC2A4\uAC00 \uC751\uB2F5\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
67
+ 50305: { title: "\uC11C\uBE44\uC2A4 \uC810\uAC80 \uC911\uC774\uC5D0\uC694", description: "\uC810\uAC80 \uC911\uC785\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uBC29\uBB38\uD574 \uC8FC\uC138\uC694." },
68
+ // 보안 (403xx - 71~79)
69
+ 40371: { title: "\uC811\uADFC\uC774 \uCC28\uB2E8\uB418\uC5C8\uC5B4\uC694", description: "\uBCF4\uC548 \uC815\uCC45\uC73C\uB85C \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uC815\uC0C1\uC801\uC778 \uBC29\uBC95\uC73C\uB85C \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
70
+ 40372: { title: "\uBCF4\uC548 \uAC80\uC99D \uC2E4\uD328", description: "\uBCF4\uC548 \uD1A0\uD070\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uD398\uC774\uC9C0\uB97C \uC0C8\uB85C\uACE0\uCE68\uD574 \uC8FC\uC138\uC694." },
71
+ 40373: { title: "\uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 URL\uC774\uC5D0\uC694", description: "\uBCF4\uC548\uC0C1 \uCC28\uB2E8\uB41C URL\uC785\uB2C8\uB2E4.", action: "\uB2E4\uB978 URL\uC744 \uC0AC\uC6A9\uD574 \uC8FC\uC138\uC694." },
72
+ 40374: { title: "\uBE44\uC815\uC0C1 \uD65C\uB3D9 \uAC10\uC9C0", description: "\uC77C\uC2DC\uC801\uC73C\uB85C \uC81C\uD55C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uACE0\uAC1D\uC13C\uD130\uB85C \uBB38\uC758\uD574 \uC8FC\uC138\uC694." },
73
+ 40375: { title: "IP\uAC00 \uCC28\uB2E8\uB418\uC5C8\uC5B4\uC694", description: "\uBCF4\uC548 \uC815\uCC45\uC5D0 \uC758\uD574 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", action: "\uACE0\uAC1D\uC13C\uD130\uB85C \uBB38\uC758\uD574 \uC8FC\uC138\uC694." },
74
+ 40376: { title: "CORS \uC815\uCC45 \uC704\uBC18\uC774\uC5D0\uC694", description: "\uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC740 \uCD9C\uCC98\uC5D0\uC11C\uC758 \uC694\uCCAD\uC785\uB2C8\uB2E4.", action: "\uC62C\uBC14\uB978 \uC8FC\uC18C\uB85C \uC811\uC18D\uD574 \uC8FC\uC138\uC694." }
75
+ };
76
+ var defaultMessages = {
77
+ ko: { title: "\uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694", description: "\uC608\uC0C1\uCE58 \uBABB\uD55C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.", action: "\uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694." },
78
+ en: { title: "Something went wrong", description: "An unexpected error occurred.", action: "Please try again later." }
79
+ };
80
+ var categoryIcons = {
81
+ validation: "\u26A0\uFE0F",
82
+ auth: "\u{1F510}",
83
+ permission: "\u{1F6AB}",
84
+ resource: "\u{1F50D}",
85
+ conflict: "\u26A1",
86
+ business: "\u{1F4CB}",
87
+ rateLimit: "\u23F1\uFE0F",
88
+ server: "\u{1F527}",
89
+ security: "\u{1F6E1}\uFE0F",
90
+ unknown: "\u274C"
91
+ };
92
+ var categorySeverity = {
93
+ validation: "warning",
94
+ auth: "warning",
95
+ permission: "warning",
96
+ resource: "info",
97
+ conflict: "warning",
98
+ business: "warning",
99
+ rateLimit: "warning",
100
+ server: "error",
101
+ security: "critical",
102
+ unknown: "error"
103
+ };
104
+ function getFriendlyMessage(code, locale = "ko") {
105
+ return koMessages[code] || defaultMessages[locale];
106
+ }
107
+ function getErrorDisplayInfo(code, locale = "ko") {
108
+ const message = getFriendlyMessage(code, locale);
109
+ const category = getErrorCategory(code);
110
+ return { code, title: message.title, description: message.description, action: message.action, icon: categoryIcons[category], severity: categorySeverity[category] };
111
+ }
112
+ function formatFriendlyError(code, locale = "ko") {
113
+ const { title, description } = getFriendlyMessage(code, locale);
114
+ return `${title} - ${description} [${code}]`;
115
+ }
8
116
  export {
9
117
  formatFriendlyError,
10
118
  getErrorDisplayInfo,
@@ -2,42 +2,41 @@ import {
2
2
  LocaleDetector
3
3
  } from "../chunk-XHZ5L4FO.js";
4
4
  import {
5
+ AUTH_ERROR_CODE_MAP,
5
6
  ErrorResponse,
6
7
  errorToResponse,
7
8
  processError,
8
9
  withErrorHandler
9
- } from "../chunk-GPBOMJSZ.js";
10
+ } from "../chunk-JVDJKMEF.js";
11
+ import {
12
+ extractErrorInfo,
13
+ formatInlineError,
14
+ getDefaultErrorCode,
15
+ getErrorIcon,
16
+ handleApiResponse,
17
+ showFriendlyError
18
+ } from "../chunk-IJCVFLEY.js";
10
19
  import {
11
20
  formatFriendlyError,
12
- getErrorDisplayInfo as getErrorDisplayInfo2,
21
+ getErrorDisplayInfo,
13
22
  getFriendlyMessage
14
- } from "../chunk-POKGHK3L.js";
23
+ } from "../chunk-S54PFAEU.js";
15
24
  import {
16
25
  getAllMessages,
17
26
  getErrorMessage,
18
27
  hasMessage,
19
28
  isLocaleSupported,
20
29
  supportedLocales
21
- } from "../chunk-EEUBKZV4.js";
22
- import "../chunk-N4YGR5WH.js";
23
- import "../chunk-KXAWBFJN.js";
30
+ } from "../chunk-Y2JYA2AR.js";
31
+ import "../chunk-HCF3C3AQ.js";
32
+ import "../chunk-IYXMGIEP.js";
24
33
  import {
25
34
  AppError
26
- } from "../chunk-MLGO3HLS.js";
27
- import {
28
- extractErrorInfo,
29
- formatInlineError,
30
- getDefaultErrorCode,
31
- getErrorIcon,
32
- handleApiResponse,
33
- showFriendlyError
34
- } from "../chunk-3DZA6AGS.js";
35
- import {
36
- getErrorDisplayInfo
37
- } from "../chunk-2DVWSDST.js";
35
+ } from "../chunk-KXXROUA5.js";
38
36
  import {
39
37
  ERROR_CODES,
40
38
  HTTP_STATUS,
39
+ classifyError,
41
40
  formatErrorMessage,
42
41
  getAllErrorCodes,
43
42
  getDefaultErrorMessage,
@@ -47,8 +46,9 @@ import {
47
46
  getErrorInfo,
48
47
  getHttpStatus,
49
48
  getLogLevel
50
- } from "../chunk-Y3OTJH2S.js";
51
- import "../chunk-EZR55KV2.js";
49
+ } from "../chunk-SNVGJPPX.js";
50
+ import "../chunk-AIH3F7JV.js";
51
+ import "../chunk-HJIKCR6I.js";
52
52
  import "../chunk-ORMEWXMH.js";
53
53
 
54
54
  // src/error/ErrorBoundary.tsx
@@ -184,6 +184,7 @@ function InlineError({
184
184
  ] });
185
185
  }
186
186
  export {
187
+ AUTH_ERROR_CODE_MAP,
187
188
  AppError,
188
189
  ERROR_CODES,
189
190
  ErrorBoundary,
@@ -192,6 +193,7 @@ export {
192
193
  HTTP_STATUS,
193
194
  InlineError,
194
195
  LocaleDetector,
196
+ classifyError,
195
197
  errorToResponse,
196
198
  extractErrorInfo,
197
199
  formatErrorMessage,
@@ -204,7 +206,7 @@ export {
204
206
  getErrorByCode,
205
207
  getErrorCategory,
206
208
  getErrorCodesByCategory,
207
- getErrorDisplayInfo2 as getErrorDisplayInfo,
209
+ getErrorDisplayInfo,
208
210
  getErrorIcon,
209
211
  getErrorInfo,
210
212
  getErrorMessage,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  enMessages
3
- } from "../../chunk-N4YGR5WH.js";
3
+ } from "../../chunk-HCF3C3AQ.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-EEUBKZV4.js";
8
- import "../../chunk-N4YGR5WH.js";
9
- import "../../chunk-KXAWBFJN.js";
7
+ } from "../../chunk-Y2JYA2AR.js";
8
+ import "../../chunk-HCF3C3AQ.js";
9
+ import "../../chunk-IYXMGIEP.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-KXAWBFJN.js";
3
+ } from "../../chunk-IYXMGIEP.js";
4
4
  import "../../chunk-ORMEWXMH.js";
5
5
  export {
6
6
  koMessages
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  BatchProcessor,
3
3
  createBatchProcessor
4
- } from "../chunk-TZAP5T4N.js";
5
- import "../chunk-EZR55KV2.js";
4
+ } from "../chunk-T7J2OS63.js";
5
+ import "../chunk-HJIKCR6I.js";
6
6
  import "../chunk-ORMEWXMH.js";
7
7
  export {
8
8
  BatchProcessor,
@@ -20,8 +20,8 @@ import {
20
20
  import {
21
21
  BatchProcessor,
22
22
  createBatchProcessor
23
- } from "../chunk-TZAP5T4N.js";
24
- import "../chunk-EZR55KV2.js";
23
+ } from "../chunk-T7J2OS63.js";
24
+ import "../chunk-HJIKCR6I.js";
25
25
  import "../chunk-ORMEWXMH.js";
26
26
  export {
27
27
  BaseGeoIPProvider,
@@ -5,7 +5,7 @@ import {
5
5
  logError,
6
6
  logInfo,
7
7
  logger
8
- } from "../chunk-EZR55KV2.js";
8
+ } from "../chunk-HJIKCR6I.js";
9
9
  import "../chunk-ORMEWXMH.js";
10
10
  export {
11
11
  logApiRequest,
@@ -4,12 +4,12 @@ import {
4
4
  initializeAuthMiddleware,
5
5
  optionalAuthMiddleware,
6
6
  setAccessTokenBlacklistChecker
7
- } from "../chunk-UXQRU3EM.js";
8
- import "../chunk-MLGO3HLS.js";
9
- import "../chunk-Y3OTJH2S.js";
10
- import "../chunk-T3LJYAMO.js";
7
+ } from "../chunk-MNORDAW2.js";
8
+ import "../chunk-KXXROUA5.js";
9
+ import "../chunk-SNVGJPPX.js";
10
+ import "../chunk-2ATBAIRL.js";
11
11
  import "../chunk-AIH3F7JV.js";
12
- import "../chunk-EZR55KV2.js";
12
+ import "../chunk-HJIKCR6I.js";
13
13
  import "../chunk-ORMEWXMH.js";
14
14
  export {
15
15
  adminMiddleware,
@@ -5,11 +5,40 @@
5
5
  */
6
6
  import type { TApiMiddleware } from './types';
7
7
  /**
8
- * CORS 미들웨어
8
+ * CORS 미들웨어 설정
9
+ */
10
+ export interface CorsMiddlewareConfig {
11
+ /** 허용할 Origin 목록 (예: ['https://example.com', 'https://app.example.com']) */
12
+ allowedOrigins: string[];
13
+ /** 크레덴셜 허용 여부 (기본값: true) */
14
+ allowCredentials?: boolean;
15
+ /** 허용할 HTTP 메서드 (기본값: GET, POST, PUT, DELETE, PATCH, OPTIONS) */
16
+ allowedMethods?: string;
17
+ /** 허용할 헤더 (기본값: Content-Type, Authorization, X-Requested-With, X-API-Key) */
18
+ allowedHeaders?: string;
19
+ /** preflight 캐시 시간(초) (기본값: 86400 = 24시간) */
20
+ maxAge?: number;
21
+ }
22
+ /**
23
+ * CORS 미들웨어 팩토리
24
+ *
25
+ * 설정 기반으로 CORS 미들웨어를 생성합니다.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const cors = createCorsMiddleware({
30
+ * allowedOrigins: ['https://example.com', 'https://app.example.com'],
31
+ * });
32
+ * ```
33
+ */
34
+ export declare function createCorsMiddleware(config: CorsMiddlewareConfig): TApiMiddleware;
35
+ /**
36
+ * 기본 CORS 미들웨어 (환경변수 기반)
37
+ *
38
+ * ALLOWED_ORIGINS 환경변수에서 콤마 구분 Origin 목록을 읽습니다.
39
+ * 설정이 없으면 빈 배열(모든 Origin 차단)을 사용합니다.
9
40
  *
10
- * - Origin 검증 CORS 헤더 설정
11
- * - OPTIONS preflight 요청 처리
12
- * - 크레덴셜 허용 설정
41
+ * @deprecated createCorsMiddleware()를 사용하여 명시적으로 설정하세요.
13
42
  */
14
43
  export declare const corsMiddleware: TApiMiddleware;
15
44
  /**
@@ -17,14 +46,18 @@ export declare const corsMiddleware: TApiMiddleware;
17
46
  *
18
47
  * instrumentation.ts에서 서버 시작 시 호출하여 CORS 설정을 검증하고 로그를 출력합니다.
19
48
  *
49
+ * @param config - 검증할 CORS 설정 (생략 시 환경변수 기반)
50
+ *
20
51
  * @example
21
52
  * ```typescript
22
53
  * // instrumentation.ts
23
54
  * import { validateCorsConfiguration } from '@withwiz/middleware/cors';
24
55
  *
25
56
  * export async function register() {
26
- * validateCorsConfiguration();
57
+ * validateCorsConfiguration({
58
+ * allowedOrigins: ['https://example.com'],
59
+ * });
27
60
  * }
28
61
  * ```
29
62
  */
30
- export declare function validateCorsConfiguration(): void;
63
+ export declare function validateCorsConfiguration(config?: Pick<CorsMiddlewareConfig, 'allowedOrigins'>): void;
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  corsMiddleware,
3
+ createCorsMiddleware,
3
4
  validateCorsConfiguration
4
- } from "../chunk-FOKAATUQ.js";
5
- import "../chunk-EZR55KV2.js";
5
+ } from "../chunk-ELD6UH57.js";
6
+ import "../chunk-HJIKCR6I.js";
6
7
  import "../chunk-ORMEWXMH.js";
7
8
  export {
8
9
  corsMiddleware,
10
+ createCorsMiddleware,
9
11
  validateCorsConfiguration
10
12
  };
@@ -1,12 +1,14 @@
1
1
  import {
2
2
  errorHandlerMiddleware
3
- } from "../chunk-TMVS4F7E.js";
4
- import "../chunk-EEUBKZV4.js";
5
- import "../chunk-N4YGR5WH.js";
6
- import "../chunk-KXAWBFJN.js";
7
- import "../chunk-MLGO3HLS.js";
8
- import "../chunk-Y3OTJH2S.js";
9
- import "../chunk-EZR55KV2.js";
3
+ } from "../chunk-7T6EAU4I.js";
4
+ import "../chunk-JVDJKMEF.js";
5
+ import "../chunk-Y2JYA2AR.js";
6
+ import "../chunk-HCF3C3AQ.js";
7
+ import "../chunk-IYXMGIEP.js";
8
+ import "../chunk-KXXROUA5.js";
9
+ import "../chunk-SNVGJPPX.js";
10
+ import "../chunk-AIH3F7JV.js";
11
+ import "../chunk-HJIKCR6I.js";
10
12
  import "../chunk-ORMEWXMH.js";
11
13
  export {
12
14
  errorHandlerMiddleware
@@ -4,48 +4,49 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../chunk-SLG26KHZ.js";
7
+ } from "../chunk-PDQCJR4E.js";
8
+ import {
9
+ initRequestMiddleware
10
+ } from "../chunk-62Q7DN5G.js";
8
11
  import {
9
12
  MiddlewareChain
10
- } from "../chunk-4ODT3Q4A.js";
13
+ } from "../chunk-YGZBEEW2.js";
11
14
  import {
12
15
  createRateLimitMiddleware,
13
16
  rateLimitMiddleware,
14
17
  setRateLimitAdapter
15
- } from "../chunk-H5I5GWAA.js";
18
+ } from "../chunk-UZDNS7TE.js";
16
19
  import {
17
20
  responseLoggerMiddleware
18
- } from "../chunk-KAWVMIRJ.js";
21
+ } from "../chunk-GJGLG2MN.js";
19
22
  import {
20
23
  securityMiddleware,
21
24
  validateSecurityConfiguration
22
- } from "../chunk-WSQMXMTL.js";
25
+ } from "../chunk-SKCYXBDR.js";
23
26
  import {
24
27
  adminMiddleware,
25
28
  authMiddleware,
26
29
  initializeAuthMiddleware,
27
30
  optionalAuthMiddleware,
28
31
  setAccessTokenBlacklistChecker
29
- } from "../chunk-UXQRU3EM.js";
32
+ } from "../chunk-MNORDAW2.js";
30
33
  import {
31
34
  corsMiddleware,
32
35
  validateCorsConfiguration
33
- } from "../chunk-FOKAATUQ.js";
36
+ } from "../chunk-ELD6UH57.js";
34
37
  import {
35
38
  errorHandlerMiddleware
36
- } from "../chunk-TMVS4F7E.js";
37
- import {
38
- initRequestMiddleware
39
- } from "../chunk-62Q7DN5G.js";
39
+ } from "../chunk-7T6EAU4I.js";
40
40
  import "../chunk-XHZ5L4FO.js";
41
- import "../chunk-EEUBKZV4.js";
42
- import "../chunk-N4YGR5WH.js";
43
- import "../chunk-KXAWBFJN.js";
44
- import "../chunk-MLGO3HLS.js";
45
- import "../chunk-Y3OTJH2S.js";
46
- import "../chunk-T3LJYAMO.js";
41
+ import "../chunk-JVDJKMEF.js";
42
+ import "../chunk-Y2JYA2AR.js";
43
+ import "../chunk-HCF3C3AQ.js";
44
+ import "../chunk-IYXMGIEP.js";
45
+ import "../chunk-KXXROUA5.js";
46
+ import "../chunk-SNVGJPPX.js";
47
+ import "../chunk-2ATBAIRL.js";
47
48
  import "../chunk-AIH3F7JV.js";
48
- import "../chunk-EZR55KV2.js";
49
+ import "../chunk-HJIKCR6I.js";
49
50
  import "../chunk-ORMEWXMH.js";
50
51
  export {
51
52
  MiddlewareChain,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MiddlewareChain
3
- } from "../chunk-4ODT3Q4A.js";
4
- import "../chunk-EZR55KV2.js";
3
+ } from "../chunk-YGZBEEW2.js";
4
+ import "../chunk-HJIKCR6I.js";
5
5
  import "../chunk-ORMEWXMH.js";
6
6
  export {
7
7
  MiddlewareChain
@@ -2,10 +2,10 @@ import {
2
2
  createRateLimitMiddleware,
3
3
  rateLimitMiddleware,
4
4
  setRateLimitAdapter
5
- } from "../chunk-H5I5GWAA.js";
6
- import "../chunk-MLGO3HLS.js";
7
- import "../chunk-Y3OTJH2S.js";
8
- import "../chunk-EZR55KV2.js";
5
+ } from "../chunk-UZDNS7TE.js";
6
+ import "../chunk-KXXROUA5.js";
7
+ import "../chunk-SNVGJPPX.js";
8
+ import "../chunk-HJIKCR6I.js";
9
9
  import "../chunk-ORMEWXMH.js";
10
10
  export {
11
11
  createRateLimitMiddleware,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  responseLoggerMiddleware
3
- } from "../chunk-KAWVMIRJ.js";
4
- import "../chunk-EZR55KV2.js";
3
+ } from "../chunk-GJGLG2MN.js";
4
+ import "../chunk-HJIKCR6I.js";
5
5
  import "../chunk-ORMEWXMH.js";
6
6
  export {
7
7
  responseLoggerMiddleware
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  securityMiddleware,
3
3
  validateSecurityConfiguration
4
- } from "../chunk-WSQMXMTL.js";
4
+ } from "../chunk-SKCYXBDR.js";
5
+ import "../chunk-HJIKCR6I.js";
5
6
  import "../chunk-ORMEWXMH.js";
6
7
  export {
7
8
  securityMiddleware,
@@ -4,24 +4,25 @@ import {
4
4
  withCustomApi,
5
5
  withOptionalAuthApi,
6
6
  withPublicApi
7
- } from "../chunk-SLG26KHZ.js";
8
- import "../chunk-4ODT3Q4A.js";
9
- import "../chunk-H5I5GWAA.js";
10
- import "../chunk-KAWVMIRJ.js";
11
- import "../chunk-WSQMXMTL.js";
12
- import "../chunk-UXQRU3EM.js";
13
- import "../chunk-FOKAATUQ.js";
14
- import "../chunk-TMVS4F7E.js";
7
+ } from "../chunk-PDQCJR4E.js";
15
8
  import "../chunk-62Q7DN5G.js";
9
+ import "../chunk-YGZBEEW2.js";
10
+ import "../chunk-UZDNS7TE.js";
11
+ import "../chunk-GJGLG2MN.js";
12
+ import "../chunk-SKCYXBDR.js";
13
+ import "../chunk-MNORDAW2.js";
14
+ import "../chunk-ELD6UH57.js";
15
+ import "../chunk-7T6EAU4I.js";
16
16
  import "../chunk-XHZ5L4FO.js";
17
- import "../chunk-EEUBKZV4.js";
18
- import "../chunk-N4YGR5WH.js";
19
- import "../chunk-KXAWBFJN.js";
20
- import "../chunk-MLGO3HLS.js";
21
- import "../chunk-Y3OTJH2S.js";
22
- import "../chunk-T3LJYAMO.js";
17
+ import "../chunk-JVDJKMEF.js";
18
+ import "../chunk-Y2JYA2AR.js";
19
+ import "../chunk-HCF3C3AQ.js";
20
+ import "../chunk-IYXMGIEP.js";
21
+ import "../chunk-KXXROUA5.js";
22
+ import "../chunk-SNVGJPPX.js";
23
+ import "../chunk-2ATBAIRL.js";
23
24
  import "../chunk-AIH3F7JV.js";
24
- import "../chunk-EZR55KV2.js";
25
+ import "../chunk-HJIKCR6I.js";
25
26
  import "../chunk-ORMEWXMH.js";
26
27
  export {
27
28
  withAdminApi,
@@ -1,3 +1,7 @@
1
+ import {
2
+ AppError
3
+ } from "../chunk-KXXROUA5.js";
4
+ import "../chunk-SNVGJPPX.js";
1
5
  import "../chunk-ORMEWXMH.js";
2
6
 
3
7
  // src/storage/r2-storage.ts
@@ -44,7 +48,7 @@ async function uploadToR2(key, body, contentType) {
44
48
  const client = getClient();
45
49
  const config = getConfig();
46
50
  if (!client || !config) {
47
- throw new Error("R2 storage is not configured");
51
+ throw AppError.serviceUnavailable("R2 storage is not configured");
48
52
  }
49
53
  await client.send(
50
54
  new PutObjectCommand({
@@ -65,7 +69,7 @@ async function deleteFromR2(key) {
65
69
  const client = getClient();
66
70
  const config = getConfig();
67
71
  if (!client || !config) {
68
- throw new Error("R2 storage is not configured");
72
+ throw AppError.serviceUnavailable("R2 storage is not configured");
69
73
  }
70
74
  await client.send(
71
75
  new DeleteObjectCommand({
@@ -78,7 +82,7 @@ async function getFromR2(key) {
78
82
  const client = getClient();
79
83
  const config = getConfig();
80
84
  if (!client || !config) {
81
- throw new Error("R2 storage is not configured");
85
+ throw AppError.serviceUnavailable("R2 storage is not configured");
82
86
  }
83
87
  try {
84
88
  const response = await client.send(
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  getCpuInfo
3
- } from "../chunk-L76O3X3D.js";
4
- import "../chunk-KWTBD4CM.js";
5
- import "../chunk-EZR55KV2.js";
3
+ } from "../chunk-WVPCER6E.js";
4
+ import "../chunk-P62T7AWY.js";
5
+ import "../chunk-HJIKCR6I.js";
6
6
  import "../chunk-ORMEWXMH.js";
7
7
  export {
8
8
  getCpuInfo
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  getDiskInfo
3
- } from "../chunk-4DPSCTX4.js";
4
- import "../chunk-KWTBD4CM.js";
5
- import "../chunk-EZR55KV2.js";
3
+ } from "../chunk-HC7574TB.js";
4
+ import "../chunk-P62T7AWY.js";
5
+ import "../chunk-HJIKCR6I.js";
6
6
  import "../chunk-ORMEWXMH.js";
7
7
  export {
8
8
  getDiskInfo