@withwiz/toolkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +162 -0
  2. package/dist/auth/adapters/prisma/index.d.ts +43 -0
  3. package/dist/auth/adapters/prisma/index.js +284 -0
  4. package/dist/auth/core/email/token-generator.d.ts +43 -0
  5. package/dist/auth/core/email/token-generator.js +7 -0
  6. package/dist/auth/core/jwt/client.d.ts +87 -0
  7. package/dist/auth/core/jwt/client.js +36 -0
  8. package/dist/auth/core/jwt/index.d.ts +110 -0
  9. package/dist/auth/core/jwt/index.js +10 -0
  10. package/dist/auth/core/jwt/types.d.ts +6 -0
  11. package/dist/auth/core/jwt/types.js +13 -0
  12. package/dist/auth/core/oauth/index.d.ts +51 -0
  13. package/dist/auth/core/oauth/index.js +12 -0
  14. package/dist/auth/core/password/client-helper.d.ts +44 -0
  15. package/dist/auth/core/password/client-helper.js +28 -0
  16. package/dist/auth/core/password/index.d.ts +71 -0
  17. package/dist/auth/core/password/index.js +14 -0
  18. package/dist/auth/errors/index.d.ts +49 -0
  19. package/dist/auth/errors/index.js +17 -0
  20. package/dist/auth/index.d.ts +21 -0
  21. package/dist/auth/index.js +97 -0
  22. package/dist/auth/types/index.d.ts +213 -0
  23. package/dist/auth/types/index.js +13 -0
  24. package/dist/cache/cache-config.d.ts +73 -0
  25. package/dist/cache/cache-config.js +12 -0
  26. package/dist/cache/cache-defaults.d.ts +141 -0
  27. package/dist/cache/cache-defaults.js +33 -0
  28. package/dist/cache/cache-env.d.ts +75 -0
  29. package/dist/cache/cache-env.js +25 -0
  30. package/dist/cache/cache-factory.d.ts +34 -0
  31. package/dist/cache/cache-factory.js +28 -0
  32. package/dist/cache/cache-invalidation.d.ts +90 -0
  33. package/dist/cache/cache-invalidation.js +24 -0
  34. package/dist/cache/cache-keys-legacy.d.ts +35 -0
  35. package/dist/cache/cache-keys-legacy.js +7 -0
  36. package/dist/cache/cache-redis.d.ts +74 -0
  37. package/dist/cache/cache-redis.js +24 -0
  38. package/dist/cache/cache-types.d.ts +151 -0
  39. package/dist/cache/cache-types.js +9 -0
  40. package/dist/cache/cache-wrapper.d.ts +27 -0
  41. package/dist/cache/cache-wrapper.js +22 -0
  42. package/dist/cache/cache.d.ts +14 -0
  43. package/dist/cache/cache.js +112 -0
  44. package/dist/cache/hybrid-cache-manager.d.ts +148 -0
  45. package/dist/cache/hybrid-cache-manager.js +13 -0
  46. package/dist/cache/index.d.ts +21 -0
  47. package/dist/cache/index.js +112 -0
  48. package/dist/cache/inmemory-cache-manager.d.ts +163 -0
  49. package/dist/cache/inmemory-cache-manager.js +9 -0
  50. package/dist/cache/noop-cache-manager.d.ts +36 -0
  51. package/dist/cache/noop-cache-manager.js +11 -0
  52. package/dist/cache/redis-cache-manager.d.ts +34 -0
  53. package/dist/cache/redis-cache-manager.js +11 -0
  54. package/dist/chunk-26Y7VEYG.js +93 -0
  55. package/dist/chunk-2DVWSDST.js +119 -0
  56. package/dist/chunk-2KAPUVIS.js +155 -0
  57. package/dist/chunk-2TO7WUKK.js +93 -0
  58. package/dist/chunk-34WAGUT5.js +117 -0
  59. package/dist/chunk-3DZA6AGS.js +120 -0
  60. package/dist/chunk-4DPSCTX4.js +212 -0
  61. package/dist/chunk-4KJXENRM.js +64 -0
  62. package/dist/chunk-4NWJ3WCZ.js +28 -0
  63. package/dist/chunk-4ODT3Q4A.js +86 -0
  64. package/dist/chunk-5ATB5D6S.js +40 -0
  65. package/dist/chunk-62FLBG6B.js +34 -0
  66. package/dist/chunk-62Q7DN5G.js +25 -0
  67. package/dist/chunk-65LHDFU3.js +242 -0
  68. package/dist/chunk-6C7HQIX4.js +13 -0
  69. package/dist/chunk-6D3HHYER.js +32 -0
  70. package/dist/chunk-6LTZCXNC.js +326 -0
  71. package/dist/chunk-7VJNLGAS.js +110 -0
  72. package/dist/chunk-7XFHGAJP.js +0 -0
  73. package/dist/chunk-A6EAAWMK.js +50 -0
  74. package/dist/chunk-AHDPGRXS.js +51 -0
  75. package/dist/chunk-AIH3F7JV.js +76 -0
  76. package/dist/chunk-AIHQBQ3E.js +109 -0
  77. package/dist/chunk-BKGVSC6S.js +152 -0
  78. package/dist/chunk-COK4ZXNG.js +0 -0
  79. package/dist/chunk-DEEJBDJE.js +47 -0
  80. package/dist/chunk-DH2ZHGW2.js +53 -0
  81. package/dist/chunk-EBUEBEJX.js +0 -0
  82. package/dist/chunk-EEUBKZV4.js +54 -0
  83. package/dist/chunk-EQYTE7WD.js +139 -0
  84. package/dist/chunk-EUQATJLI.js +180 -0
  85. package/dist/chunk-EZC6ETFW.js +80 -0
  86. package/dist/chunk-EZR55KV2.js +249 -0
  87. package/dist/chunk-F6LCSFSU.js +31 -0
  88. package/dist/chunk-FOKAATUQ.js +62 -0
  89. package/dist/chunk-FW3IEJ7H.js +71 -0
  90. package/dist/chunk-G26T2PRQ.js +53 -0
  91. package/dist/chunk-G4NI37NN.js +257 -0
  92. package/dist/chunk-GCZOXUDV.js +132 -0
  93. package/dist/chunk-GDWEDUHO.js +55 -0
  94. package/dist/chunk-GL2NANFH.js +434 -0
  95. package/dist/chunk-GPBOMJSZ.js +136 -0
  96. package/dist/chunk-H5I5GWAA.js +94 -0
  97. package/dist/chunk-HGC4CCKB.js +29 -0
  98. package/dist/chunk-HV3DGSSH.js +447 -0
  99. package/dist/chunk-I47QEDTX.js +193 -0
  100. package/dist/chunk-IAJNC34M.js +102 -0
  101. package/dist/chunk-IHXRF3BH.js +215 -0
  102. package/dist/chunk-IJEZ7G7S.js +26 -0
  103. package/dist/chunk-IQQKKUAV.js +151 -0
  104. package/dist/chunk-JBCDEAMW.js +35 -0
  105. package/dist/chunk-JLLMTTQ4.js +75 -0
  106. package/dist/chunk-JS5VI3OW.js +143 -0
  107. package/dist/chunk-KAWVMIRJ.js +44 -0
  108. package/dist/chunk-KMCJIL57.js +214 -0
  109. package/dist/chunk-KWTBD4CM.js +145 -0
  110. package/dist/chunk-KXAWBFJN.js +310 -0
  111. package/dist/chunk-L25BNU3E.js +56 -0
  112. package/dist/chunk-L76O3X3D.js +197 -0
  113. package/dist/chunk-LNV2E4I6.js +63 -0
  114. package/dist/chunk-MLGO3HLS.js +329 -0
  115. package/dist/chunk-MRJE6OX5.js +22 -0
  116. package/dist/chunk-MYLGYX4K.js +57 -0
  117. package/dist/chunk-N4YGR5WH.js +310 -0
  118. package/dist/chunk-OIVXOT2X.js +80 -0
  119. package/dist/chunk-ORMEWXMH.js +37 -0
  120. package/dist/chunk-POKGHK3L.js +57 -0
  121. package/dist/chunk-Q7IP4JMW.js +69 -0
  122. package/dist/chunk-RJUVBBZG.js +27 -0
  123. package/dist/chunk-S73334QY.js +89 -0
  124. package/dist/chunk-SLG26KHZ.js +101 -0
  125. package/dist/chunk-SR65BF6X.js +82 -0
  126. package/dist/chunk-SS56XFLI.js +19 -0
  127. package/dist/chunk-T3LJYAMO.js +277 -0
  128. package/dist/chunk-TDZJ6SAI.js +34 -0
  129. package/dist/chunk-TEIYA7U4.js +72 -0
  130. package/dist/chunk-TMVS4F7E.js +88 -0
  131. package/dist/chunk-TRBKJ7JT.js +137 -0
  132. package/dist/chunk-TXGNSECL.js +84 -0
  133. package/dist/chunk-TZAP5T4N.js +188 -0
  134. package/dist/chunk-UCYQNHST.js +24 -0
  135. package/dist/chunk-ULF5RDDX.js +0 -0
  136. package/dist/chunk-UXQRU3EM.js +167 -0
  137. package/dist/chunk-V5K5FYU7.js +200 -0
  138. package/dist/chunk-VDXB5DCY.js +68 -0
  139. package/dist/chunk-VSGKVZB4.js +47 -0
  140. package/dist/chunk-VWODEQ5C.js +204 -0
  141. package/dist/chunk-WDUFQFDP.js +193 -0
  142. package/dist/chunk-WHR7HPWF.js +126 -0
  143. package/dist/chunk-WSQMXMTL.js +122 -0
  144. package/dist/chunk-XHZ5L4FO.js +103 -0
  145. package/dist/chunk-XPASCCUA.js +404 -0
  146. package/dist/chunk-XRRPEBKB.js +231 -0
  147. package/dist/chunk-Y2TUZFCP.js +0 -0
  148. package/dist/chunk-Y3OTJH2S.js +473 -0
  149. package/dist/chunk-YBSHN67U.js +161 -0
  150. package/dist/chunk-YJ3TLEW3.js +100 -0
  151. package/dist/chunk-YJWLWUFK.js +105 -0
  152. package/dist/chunk-Z4D4CMDA.js +488 -0
  153. package/dist/chunk-ZHVUK5OY.js +314 -0
  154. package/dist/chunk-ZTN4X5FN.js +29 -0
  155. package/dist/chunk-ZZIKRBJU.js +96 -0
  156. package/dist/components/ui/Alert.d.ts +12 -0
  157. package/dist/components/ui/Alert.js +10 -0
  158. package/dist/components/ui/Badge.d.ts +7 -0
  159. package/dist/components/ui/Badge.js +8 -0
  160. package/dist/components/ui/Button.d.ts +7 -0
  161. package/dist/components/ui/Button.js +8 -0
  162. package/dist/components/ui/DataTable.d.ts +103 -0
  163. package/dist/components/ui/DataTable.js +606 -0
  164. package/dist/components/ui/DomainDisplay.d.ts +12 -0
  165. package/dist/components/ui/DomainDisplay.js +31 -0
  166. package/dist/components/ui/Input.d.ts +5 -0
  167. package/dist/components/ui/Input.js +8 -0
  168. package/dist/components/ui/Label.d.ts +5 -0
  169. package/dist/components/ui/Label.js +8 -0
  170. package/dist/components/ui/Pagination.d.ts +42 -0
  171. package/dist/components/ui/Pagination.js +20 -0
  172. package/dist/components/ui/Select.d.ts +15 -0
  173. package/dist/components/ui/Select.js +27 -0
  174. package/dist/components/ui/Skeleton.d.ts +6 -0
  175. package/dist/components/ui/Skeleton.js +8 -0
  176. package/dist/components/ui/TimezoneDisplay.d.ts +22 -0
  177. package/dist/components/ui/TimezoneDisplay.js +83 -0
  178. package/dist/components/ui/Tooltip.d.ts +21 -0
  179. package/dist/components/ui/Tooltip.js +94 -0
  180. package/dist/components/ui/WorldMapChart.d.ts +17 -0
  181. package/dist/components/ui/WorldMapChart.js +250 -0
  182. package/dist/components/ui/loading-bar.d.ts +20 -0
  183. package/dist/components/ui/loading-bar.js +15 -0
  184. package/dist/constants/error-codes.d.ts +389 -0
  185. package/dist/constants/error-codes.js +27 -0
  186. package/dist/constants/index.d.ts +11 -0
  187. package/dist/constants/index.js +85 -0
  188. package/dist/constants/messages.d.ts +83 -0
  189. package/dist/constants/messages.js +13 -0
  190. package/dist/constants/pagination.d.ts +43 -0
  191. package/dist/constants/pagination.js +15 -0
  192. package/dist/constants/security.d.ts +66 -0
  193. package/dist/constants/security.js +23 -0
  194. package/dist/constants/validation.d.ts +60 -0
  195. package/dist/constants/validation.js +19 -0
  196. package/dist/error/ErrorBoundary.d.ts +47 -0
  197. package/dist/error/app-error.d.ts +144 -0
  198. package/dist/error/app-error.js +10 -0
  199. package/dist/error/components/EmptyState.d.ts +50 -0
  200. package/dist/error/components/ErrorAlert.d.ts +50 -0
  201. package/dist/error/components/ErrorPage.d.ts +39 -0
  202. package/dist/error/components/LoadingState.d.ts +37 -0
  203. package/dist/error/components/index.d.ts +13 -0
  204. package/dist/error/components/index.js +18 -0
  205. package/dist/error/core/locale-detector.d.ts +44 -0
  206. package/dist/error/core/locale-detector.js +9 -0
  207. package/dist/error/error-display.d.ts +55 -0
  208. package/dist/error/error-display.js +24 -0
  209. package/dist/error/error-handler.d.ts +118 -0
  210. package/dist/error/error-handler.js +18 -0
  211. package/dist/error/friendly-messages-v2.d.ts +46 -0
  212. package/dist/error/friendly-messages-v2.js +15 -0
  213. package/dist/error/friendly-messages.d.ts +22 -0
  214. package/dist/error/friendly-messages.js +12 -0
  215. package/dist/error/hooks/index.d.ts +7 -0
  216. package/dist/error/hooks/index.js +14 -0
  217. package/dist/error/hooks/useErrorHandler.d.ts +67 -0
  218. package/dist/error/hooks/useErrorHandler.js +14 -0
  219. package/dist/error/index.d.ts +26 -0
  220. package/dist/error/index.js +289 -0
  221. package/dist/error/logging/error-logger.d.ts +77 -0
  222. package/dist/error/logging/error-logger.js +10 -0
  223. package/dist/error/logging/index.d.ts +9 -0
  224. package/dist/error/logging/index.js +35 -0
  225. package/dist/error/logging/transports/base.d.ts +30 -0
  226. package/dist/error/logging/transports/base.js +7 -0
  227. package/dist/error/logging/transports/console.d.ts +40 -0
  228. package/dist/error/logging/transports/console.js +9 -0
  229. package/dist/error/logging/transports/file.d.ts +49 -0
  230. package/dist/error/logging/transports/file.js +8 -0
  231. package/dist/error/logging/transports/index.d.ts +12 -0
  232. package/dist/error/logging/transports/index.js +25 -0
  233. package/dist/error/logging/transports/sentry.d.ts +44 -0
  234. package/dist/error/logging/transports/sentry.js +9 -0
  235. package/dist/error/logging/transports/slack.d.ts +51 -0
  236. package/dist/error/logging/transports/slack.js +9 -0
  237. package/dist/error/logging/types.d.ts +83 -0
  238. package/dist/error/logging/types.js +7 -0
  239. package/dist/error/messages/en.d.ts +5 -0
  240. package/dist/error/messages/en.js +7 -0
  241. package/dist/error/messages/index.d.ts +40 -0
  242. package/dist/error/messages/index.js +17 -0
  243. package/dist/error/messages/ko.d.ts +5 -0
  244. package/dist/error/messages/ko.js +7 -0
  245. package/dist/error/messages/types.d.ts +30 -0
  246. package/dist/error/messages/types.js +0 -0
  247. package/dist/error/recovery/circuit-breaker.d.ts +85 -0
  248. package/dist/error/recovery/circuit-breaker.js +9 -0
  249. package/dist/error/recovery/degradation.d.ts +56 -0
  250. package/dist/error/recovery/degradation.js +7 -0
  251. package/dist/error/recovery/fallback.d.ts +55 -0
  252. package/dist/error/recovery/fallback.js +11 -0
  253. package/dist/error/recovery/index.d.ts +12 -0
  254. package/dist/error/recovery/index.js +26 -0
  255. package/dist/error/recovery/retry.d.ts +44 -0
  256. package/dist/error/recovery/retry.js +7 -0
  257. package/dist/geolocation/batch-processor.d.ts +33 -0
  258. package/dist/geolocation/batch-processor.js +10 -0
  259. package/dist/geolocation/index.d.ts +14 -0
  260. package/dist/geolocation/index.js +36 -0
  261. package/dist/geolocation/providers/base-provider.d.ts +33 -0
  262. package/dist/geolocation/providers/base-provider.js +9 -0
  263. package/dist/geolocation/providers/index.d.ts +54 -0
  264. package/dist/geolocation/providers/index.js +29 -0
  265. package/dist/geolocation/providers/ip-api-provider.d.ts +17 -0
  266. package/dist/geolocation/providers/ip-api-provider.js +8 -0
  267. package/dist/geolocation/providers/ipapi-co-provider.d.ts +17 -0
  268. package/dist/geolocation/providers/ipapi-co-provider.js +8 -0
  269. package/dist/geolocation/providers/ipgeolocation-provider.d.ts +18 -0
  270. package/dist/geolocation/providers/ipgeolocation-provider.js +8 -0
  271. package/dist/geolocation/providers/maxmind-provider.d.ts +18 -0
  272. package/dist/geolocation/providers/maxmind-provider.js +8 -0
  273. package/dist/hooks/useDataTable.d.ts +51 -0
  274. package/dist/hooks/useDataTable.js +149 -0
  275. package/dist/hooks/useDebounce.d.ts +7 -0
  276. package/dist/hooks/useDebounce.js +7 -0
  277. package/dist/hooks/useExitIntent.d.ts +35 -0
  278. package/dist/hooks/useExitIntent.js +72 -0
  279. package/dist/hooks/useTimezone.d.ts +19 -0
  280. package/dist/hooks/useTimezone.js +11 -0
  281. package/dist/logger/logger.d.ts +11 -0
  282. package/dist/logger/logger.js +17 -0
  283. package/dist/middleware/auth.d.ts +87 -0
  284. package/dist/middleware/auth.js +20 -0
  285. package/dist/middleware/cors.d.ts +30 -0
  286. package/dist/middleware/cors.js +10 -0
  287. package/dist/middleware/error-handler.d.ts +23 -0
  288. package/dist/middleware/error-handler.js +13 -0
  289. package/dist/middleware/index.d.ts +16 -0
  290. package/dist/middleware/index.js +72 -0
  291. package/dist/middleware/init-request.d.ts +18 -0
  292. package/dist/middleware/init-request.js +8 -0
  293. package/dist/middleware/middleware-chain.d.ts +53 -0
  294. package/dist/middleware/middleware-chain.js +8 -0
  295. package/dist/middleware/rate-limit.d.ts +82 -0
  296. package/dist/middleware/rate-limit.js +14 -0
  297. package/dist/middleware/response-logger.d.ts +22 -0
  298. package/dist/middleware/response-logger.js +8 -0
  299. package/dist/middleware/security.d.ts +31 -0
  300. package/dist/middleware/security.js +9 -0
  301. package/dist/middleware/types.d.ts +45 -0
  302. package/dist/middleware/types.js +0 -0
  303. package/dist/middleware/wrappers.d.ts +91 -0
  304. package/dist/middleware/wrappers.js +32 -0
  305. package/dist/storage/r2-storage.d.ts +38 -0
  306. package/dist/storage/r2-storage.js +105 -0
  307. package/dist/system/cpu.d.ts +2 -0
  308. package/dist/system/cpu.js +9 -0
  309. package/dist/system/disk.d.ts +2 -0
  310. package/dist/system/disk.js +9 -0
  311. package/dist/system/environment.d.ts +8 -0
  312. package/dist/system/environment.js +9 -0
  313. package/dist/system/health-check.d.ts +26 -0
  314. package/dist/system/health-check.js +10 -0
  315. package/dist/system/index.d.ts +51 -0
  316. package/dist/system/index.js +194 -0
  317. package/dist/system/memory.d.ts +2 -0
  318. package/dist/system/memory.js +9 -0
  319. package/dist/system/network.d.ts +2 -0
  320. package/dist/system/network.js +9 -0
  321. package/dist/system/types.d.ts +93 -0
  322. package/dist/system/types.js +0 -0
  323. package/dist/system/utils.d.ts +12 -0
  324. package/dist/system/utils.js +26 -0
  325. package/dist/types/api.d.ts +80 -0
  326. package/dist/types/api.js +0 -0
  327. package/dist/types/database.d.ts +38 -0
  328. package/dist/types/database.js +0 -0
  329. package/dist/types/env.d.ts +105 -0
  330. package/dist/types/env.js +0 -0
  331. package/dist/types/geoip.d.ts +152 -0
  332. package/dist/types/geoip.js +0 -0
  333. package/dist/types/i18n.d.ts +11 -0
  334. package/dist/types/i18n.js +0 -0
  335. package/dist/types/qr-code.d.ts +139 -0
  336. package/dist/types/qr-code.js +75 -0
  337. package/dist/types/user.d.ts +54 -0
  338. package/dist/types/user.js +0 -0
  339. package/dist/utils/api-helpers.d.ts +147 -0
  340. package/dist/utils/api-helpers.js +30 -0
  341. package/dist/utils/client/client-utils.d.ts +3 -0
  342. package/dist/utils/client/client-utils.js +9 -0
  343. package/dist/utils/client/qr-code.d.ts +16 -0
  344. package/dist/utils/client/qr-code.js +215 -0
  345. package/dist/utils/cors.d.ts +40 -0
  346. package/dist/utils/cors.js +21 -0
  347. package/dist/utils/csv-export.d.ts +97 -0
  348. package/dist/utils/csv-export.js +20 -0
  349. package/dist/utils/error-message-formatter.d.ts +17 -0
  350. package/dist/utils/error-message-formatter.js +11 -0
  351. package/dist/utils/error-processor.d.ts +70 -0
  352. package/dist/utils/error-processor.js +34 -0
  353. package/dist/utils/format-number.d.ts +17 -0
  354. package/dist/utils/format-number.js +9 -0
  355. package/dist/utils/index.d.ts +13 -0
  356. package/dist/utils/index.js +160 -0
  357. package/dist/utils/input-validation.d.ts +88 -0
  358. package/dist/utils/input-validation.js +223 -0
  359. package/dist/utils/ip-utils.d.ts +15 -0
  360. package/dist/utils/ip-utils.js +91 -0
  361. package/dist/utils/optimistic-lock.d.ts +27 -0
  362. package/dist/utils/optimistic-lock.js +16 -0
  363. package/dist/utils/sanitizer.d.ts +72 -0
  364. package/dist/utils/sanitizer.js +19 -0
  365. package/dist/utils/shared-utils.d.ts +25 -0
  366. package/dist/utils/shared-utils.js +43 -0
  367. package/dist/utils/short-code-generator.d.ts +24 -0
  368. package/dist/utils/short-code-generator.js +9 -0
  369. package/dist/utils/timezone.d.ts +56 -0
  370. package/dist/utils/timezone.js +29 -0
  371. package/dist/utils/type-guards.d.ts +164 -0
  372. package/dist/utils/type-guards.js +59 -0
  373. package/dist/utils/url-normalizer.d.ts +53 -0
  374. package/dist/utils/url-normalizer.js +21 -0
  375. package/dist/validators/index.d.ts +7 -0
  376. package/dist/validators/index.js +13 -0
  377. package/dist/validators/password-validator.d.ts +86 -0
  378. package/dist/validators/password-validator.js +13 -0
  379. package/dist/world_countries-C2WUL2CQ.js +279 -0
  380. package/package.json +129 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 인증 미들웨어
3
+ *
4
+ * - JWT 토큰 검증
5
+ * - Access Token 블랙리스트 체크
6
+ * - 사용자 정보 context에 추가
7
+ * - 인증 실패 시 401 에러
8
+ *
9
+ * 완전 독립적 패키지:
10
+ * @withwiz/auth/core/jwt를 사용하여 비즈니스 로직에 의존하지 않음
11
+ */
12
+ import type { TApiMiddleware } from "./types";
13
+ /**
14
+ * Access Token 블랙리스트 체커 인터페이스
15
+ * src/lib/services/auth/refreshTokenService에서 구현체 주입
16
+ */
17
+ export interface IAccessTokenBlacklistChecker {
18
+ isAccessTokenRevoked(token: string): Promise<boolean>;
19
+ }
20
+ declare global {
21
+ var __accessTokenBlacklistChecker: IAccessTokenBlacklistChecker | undefined;
22
+ }
23
+ /**
24
+ * Access Token 블랙리스트 체커 설정
25
+ * 애플리케이션 시작 시 refreshTokenService를 주입
26
+ */
27
+ export declare function setAccessTokenBlacklistChecker(checker: IAccessTokenBlacklistChecker): void;
28
+ /**
29
+ * Auth Middleware 명시적 초기화
30
+ *
31
+ * instrumentation.ts에서 서버 시작 시 호출하여 JWT Manager를 미리 초기화합니다.
32
+ *
33
+ * @returns {boolean} 초기화 성공 여부
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // instrumentation.ts
38
+ * import { initializeAuthMiddleware } from '@withwiz/middleware/auth';
39
+ *
40
+ * export async function register() {
41
+ * initializeAuthMiddleware();
42
+ * }
43
+ * ```
44
+ */
45
+ export declare function initializeAuthMiddleware(): boolean;
46
+ /**
47
+ * 인증 미들웨어
48
+ *
49
+ * Authorization 헤더에서 JWT 토큰을 추출하고 검증합니다.
50
+ * 검증된 사용자 정보를 context.user에 추가합니다.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const chain = new MiddlewareChain()
55
+ * .use(authMiddleware);
56
+ * ```
57
+ */
58
+ export declare const authMiddleware: TApiMiddleware;
59
+ /**
60
+ * 선택적 인증 미들웨어
61
+ *
62
+ * Authorization 헤더가 있으면 JWT 토큰을 검증하고 context.user를 설정합니다.
63
+ * 토큰이 없거나 유효하지 않아도 에러를 발생시키지 않고 계속 진행합니다.
64
+ * 공개 API이지만 로그인 사용자를 선택적으로 인식해야 하는 경우에 사용합니다.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const chain = new MiddlewareChain()
69
+ * .use(optionalAuthMiddleware);
70
+ * // context.user가 설정되면 로그인 사용자, 아니면 비로그인
71
+ * ```
72
+ */
73
+ export declare const optionalAuthMiddleware: TApiMiddleware;
74
+ /**
75
+ * 관리자 권한 검증 미들웨어
76
+ *
77
+ * authMiddleware 이후에 실행되어야 합니다.
78
+ * context.user가 없거나 role이 admin이 아니면 403 에러를 발생시킵니다.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const chain = new MiddlewareChain()
83
+ * .use(authMiddleware)
84
+ * .use(adminMiddleware);
85
+ * ```
86
+ */
87
+ export declare const adminMiddleware: TApiMiddleware;
@@ -0,0 +1,20 @@
1
+ import {
2
+ adminMiddleware,
3
+ authMiddleware,
4
+ initializeAuthMiddleware,
5
+ optionalAuthMiddleware,
6
+ setAccessTokenBlacklistChecker
7
+ } from "../chunk-UXQRU3EM.js";
8
+ import "../chunk-MLGO3HLS.js";
9
+ import "../chunk-Y3OTJH2S.js";
10
+ import "../chunk-T3LJYAMO.js";
11
+ import "../chunk-AIH3F7JV.js";
12
+ import "../chunk-EZR55KV2.js";
13
+ import "../chunk-ORMEWXMH.js";
14
+ export {
15
+ adminMiddleware,
16
+ authMiddleware,
17
+ initializeAuthMiddleware,
18
+ optionalAuthMiddleware,
19
+ setAccessTokenBlacklistChecker
20
+ };
@@ -0,0 +1,30 @@
1
+ /**
2
+ * CORS 미들웨어
3
+ *
4
+ * Cross-Origin Resource Sharing 헤더를 설정합니다.
5
+ */
6
+ import type { TApiMiddleware } from './types';
7
+ /**
8
+ * CORS 미들웨어
9
+ *
10
+ * - Origin 검증 및 CORS 헤더 설정
11
+ * - OPTIONS preflight 요청 처리
12
+ * - 크레덴셜 허용 설정
13
+ */
14
+ export declare const corsMiddleware: TApiMiddleware;
15
+ /**
16
+ * CORS 설정 검증 및 초기화
17
+ *
18
+ * instrumentation.ts에서 서버 시작 시 호출하여 CORS 설정을 검증하고 로그를 출력합니다.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * // instrumentation.ts
23
+ * import { validateCorsConfiguration } from '@withwiz/middleware/cors';
24
+ *
25
+ * export async function register() {
26
+ * validateCorsConfiguration();
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function validateCorsConfiguration(): void;
@@ -0,0 +1,10 @@
1
+ import {
2
+ corsMiddleware,
3
+ validateCorsConfiguration
4
+ } from "../chunk-FOKAATUQ.js";
5
+ import "../chunk-EZR55KV2.js";
6
+ import "../chunk-ORMEWXMH.js";
7
+ export {
8
+ corsMiddleware,
9
+ validateCorsConfiguration
10
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 에러 핸들러 미들웨어
3
+ *
4
+ * - 모든 에러를 잡아서 표준 형식의 JSON 응답으로 변환
5
+ * - AppError를 감지하여 적절한 HTTP 상태 코드 반환
6
+ * - ZodError를 감지하여 400 Bad Request 반환
7
+ * - 다중 언어 메시지 지원
8
+ */
9
+ import type { TApiMiddleware } from './types';
10
+ /**
11
+ * 에러 핸들러 미들웨어
12
+ *
13
+ * 체인의 최상위에 배치하여 모든 에러를 캐치합니다.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const chain = new MiddlewareChain()
18
+ * .use(errorHandlerMiddleware) // 가장 먼저
19
+ * .use(initRequestMiddleware)
20
+ * .use(authMiddleware);
21
+ * ```
22
+ */
23
+ export declare const errorHandlerMiddleware: TApiMiddleware;
@@ -0,0 +1,13 @@
1
+ import {
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";
10
+ import "../chunk-ORMEWXMH.js";
11
+ export {
12
+ errorHandlerMiddleware
13
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * API 미들웨어 시스템
3
+ *
4
+ * 통합 에러 처리 시스템의 API 레이어
5
+ */
6
+ export type { IApiContext, IUser, TApiHandler, TApiMiddleware, IMiddlewareChainOptions, } from './types';
7
+ export { MiddlewareChain } from './middleware-chain';
8
+ export { initRequestMiddleware } from './init-request';
9
+ export { authMiddleware, optionalAuthMiddleware, adminMiddleware, initializeAuthMiddleware, setAccessTokenBlacklistChecker } from './auth';
10
+ export type { IAccessTokenBlacklistChecker } from './auth';
11
+ export { rateLimitMiddleware, createRateLimitMiddleware, setRateLimitAdapter } from './rate-limit';
12
+ export { errorHandlerMiddleware } from './error-handler';
13
+ export { responseLoggerMiddleware } from './response-logger';
14
+ export { corsMiddleware, validateCorsConfiguration } from './cors';
15
+ export { securityMiddleware, validateSecurityConfiguration } from './security';
16
+ export { withPublicApi, withAuthApi, withAdminApi, withOptionalAuthApi, withCustomApi, } from './wrappers';
@@ -0,0 +1,72 @@
1
+ import {
2
+ withAdminApi,
3
+ withAuthApi,
4
+ withCustomApi,
5
+ withOptionalAuthApi,
6
+ withPublicApi
7
+ } from "../chunk-SLG26KHZ.js";
8
+ import {
9
+ MiddlewareChain
10
+ } from "../chunk-4ODT3Q4A.js";
11
+ import {
12
+ createRateLimitMiddleware,
13
+ rateLimitMiddleware,
14
+ setRateLimitAdapter
15
+ } from "../chunk-H5I5GWAA.js";
16
+ import {
17
+ responseLoggerMiddleware
18
+ } from "../chunk-KAWVMIRJ.js";
19
+ import {
20
+ securityMiddleware,
21
+ validateSecurityConfiguration
22
+ } from "../chunk-WSQMXMTL.js";
23
+ import {
24
+ adminMiddleware,
25
+ authMiddleware,
26
+ initializeAuthMiddleware,
27
+ optionalAuthMiddleware,
28
+ setAccessTokenBlacklistChecker
29
+ } from "../chunk-UXQRU3EM.js";
30
+ import {
31
+ corsMiddleware,
32
+ validateCorsConfiguration
33
+ } from "../chunk-FOKAATUQ.js";
34
+ import {
35
+ errorHandlerMiddleware
36
+ } from "../chunk-TMVS4F7E.js";
37
+ import {
38
+ initRequestMiddleware
39
+ } from "../chunk-62Q7DN5G.js";
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";
47
+ import "../chunk-AIH3F7JV.js";
48
+ import "../chunk-EZR55KV2.js";
49
+ import "../chunk-ORMEWXMH.js";
50
+ export {
51
+ MiddlewareChain,
52
+ adminMiddleware,
53
+ authMiddleware,
54
+ corsMiddleware,
55
+ createRateLimitMiddleware,
56
+ errorHandlerMiddleware,
57
+ initRequestMiddleware,
58
+ initializeAuthMiddleware,
59
+ optionalAuthMiddleware,
60
+ rateLimitMiddleware,
61
+ responseLoggerMiddleware,
62
+ securityMiddleware,
63
+ setAccessTokenBlacklistChecker,
64
+ setRateLimitAdapter,
65
+ validateCorsConfiguration,
66
+ validateSecurityConfiguration,
67
+ withAdminApi,
68
+ withAuthApi,
69
+ withCustomApi,
70
+ withOptionalAuthApi,
71
+ withPublicApi
72
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 요청 초기화 미들웨어
3
+ *
4
+ * - requestId 생성
5
+ * - locale 감지
6
+ * - startTime 설정
7
+ */
8
+ import type { TApiMiddleware } from './types';
9
+ /**
10
+ * 요청 초기화 미들웨어
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const chain = new MiddlewareChain()
15
+ * .use(initRequestMiddleware);
16
+ * ```
17
+ */
18
+ export declare const initRequestMiddleware: TApiMiddleware;
@@ -0,0 +1,8 @@
1
+ import {
2
+ initRequestMiddleware
3
+ } from "../chunk-62Q7DN5G.js";
4
+ import "../chunk-XHZ5L4FO.js";
5
+ import "../chunk-ORMEWXMH.js";
6
+ export {
7
+ initRequestMiddleware
8
+ };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * API 미들웨어 체인
3
+ *
4
+ * Express.js 스타일의 미들웨어 체인을 Next.js API에서 사용
5
+ */
6
+ import type { NextResponse } from 'next/server';
7
+ import type { IApiContext, TApiHandler, TApiMiddleware, IMiddlewareChainOptions } from './types';
8
+ /**
9
+ * 미들웨어 체인 클래스
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const chain = new MiddlewareChain()
14
+ * .use(errorHandlerMiddleware)
15
+ * .use(initRequestMiddleware)
16
+ * .use(rateLimitMiddleware);
17
+ *
18
+ * const handler = async (ctx: IApiContext) => {
19
+ * return NextResponse.json({ data: 'Hello' });
20
+ * };
21
+ *
22
+ * return await chain.execute(context, handler);
23
+ * ```
24
+ */
25
+ export declare class MiddlewareChain {
26
+ private middlewares;
27
+ private options;
28
+ constructor(options?: IMiddlewareChainOptions);
29
+ /**
30
+ * 미들웨어 추가
31
+ */
32
+ use(middleware: TApiMiddleware): this;
33
+ /**
34
+ * 체인 실행
35
+ *
36
+ * @param context - API 컨텍스트
37
+ * @param handler - 최종 핸들러 함수
38
+ * @param props - Next.js 동적 라우트 파라미터 (params 등)
39
+ */
40
+ execute(context: IApiContext, handler: TApiHandler, props?: unknown): Promise<NextResponse>;
41
+ /**
42
+ * 타임아웃 처리
43
+ */
44
+ private withTimeout;
45
+ /**
46
+ * 미들웨어 개수 반환
47
+ */
48
+ get length(): number;
49
+ /**
50
+ * 체인 초기화
51
+ */
52
+ clear(): void;
53
+ }
@@ -0,0 +1,8 @@
1
+ import {
2
+ MiddlewareChain
3
+ } from "../chunk-4ODT3Q4A.js";
4
+ import "../chunk-EZR55KV2.js";
5
+ import "../chunk-ORMEWXMH.js";
6
+ export {
7
+ MiddlewareChain
8
+ };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Rate Limit 미들웨어
3
+ *
4
+ * - IP 기반 Rate Limiting
5
+ * - Redis + In-Memory Fallback
6
+ * - 초과 시 429 에러
7
+ *
8
+ * 의존성 주입 패턴 사용:
9
+ * 외부에서 Rate Limit 어댑터를 설정해야 합니다.
10
+ */
11
+ import type { TApiMiddleware } from "./types";
12
+ /**
13
+ * Rate Limiter 인터페이스
14
+ */
15
+ export interface IRateLimiter {
16
+ check: (identifier: string) => Promise<{
17
+ success: boolean;
18
+ remaining: number;
19
+ resetIn: number;
20
+ }>;
21
+ config: {
22
+ limit: number;
23
+ };
24
+ }
25
+ /**
26
+ * Rate Limit 어댑터 인터페이스
27
+ */
28
+ export interface IRateLimitAdapter {
29
+ rateLimiters: Record<string, IRateLimiter>;
30
+ extractClientIp: (headers: Headers) => string;
31
+ /** Rate Limiting 활성화 여부 (옵셔널, 미설정 시 기본 활성화) */
32
+ isEnabled?: (type?: string) => Promise<boolean>;
33
+ }
34
+ /**
35
+ * Rate Limit 어댑터 설정
36
+ * @param adapter - Rate Limit 어댑터 구현체
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { setRateLimitAdapter } from '@withwiz/middleware/rate-limit';
41
+ * // 프로젝트에서 구현한 Rate Limit 유틸리티를 import하세요
42
+ * import { rateLimiters, extractClientIp } from '<your-project>/rateLimiter';
43
+ *
44
+ * setRateLimitAdapter({ rateLimiters, extractClientIp });
45
+ * ```
46
+ */
47
+ export declare function setRateLimitAdapter(adapter: IRateLimitAdapter): void;
48
+ /**
49
+ * 기본 Rate Limit 타입 (범용)
50
+ */
51
+ export type TRateLimitType = "api" | "auth" | "admin";
52
+ /**
53
+ * 확장 가능한 Rate Limit 타입
54
+ * URL Shortener 서비스 특화 타입은 extensions/url-shortener/rate-limit-types.ts에 정의
55
+ */
56
+ export type TExtendedRateLimitType = TRateLimitType | string;
57
+ /**
58
+ * Rate Limit 미들웨어 팩토리
59
+ *
60
+ * @param type - Rate limit 타입 ('api', 'auth', 'admin' 등)
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const chain = new MiddlewareChain()
65
+ * .use(createRateLimitMiddleware('api'));
66
+ * ```
67
+ */
68
+ export declare function createRateLimitMiddleware(type: TExtendedRateLimitType): TApiMiddleware;
69
+ /**
70
+ * 사전 정의된 Rate Limit 미들웨어 (범용)
71
+ *
72
+ * 서비스 특화 미들웨어 (redirect, createLink 등)는
73
+ * 프로젝트에서 직접 createRateLimitMiddleware를 사용하여 생성하세요.
74
+ */
75
+ export declare const rateLimitMiddleware: {
76
+ /** API Rate Limit (분당 120회) */
77
+ api: TApiMiddleware;
78
+ /** 인증 Rate Limit (시간당 40회) */
79
+ auth: TApiMiddleware;
80
+ /** 관리자 Rate Limit (분당 200회) */
81
+ admin: TApiMiddleware;
82
+ };
@@ -0,0 +1,14 @@
1
+ import {
2
+ createRateLimitMiddleware,
3
+ rateLimitMiddleware,
4
+ setRateLimitAdapter
5
+ } from "../chunk-H5I5GWAA.js";
6
+ import "../chunk-MLGO3HLS.js";
7
+ import "../chunk-Y3OTJH2S.js";
8
+ import "../chunk-EZR55KV2.js";
9
+ import "../chunk-ORMEWXMH.js";
10
+ export {
11
+ createRateLimitMiddleware,
12
+ rateLimitMiddleware,
13
+ setRateLimitAdapter
14
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 응답 로거 미들웨어
3
+ *
4
+ * - 요청/응답 정보 로깅
5
+ * - 응답 시간 측정
6
+ * - Rate limit 헤더 추가
7
+ */
8
+ import type { TApiMiddleware } from './types';
9
+ /**
10
+ * 응답 로거 미들웨어
11
+ *
12
+ * 요청 처리 시작부터 끝까지의 정보를 로깅합니다.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const chain = new MiddlewareChain()
17
+ * .use(errorHandlerMiddleware)
18
+ * .use(initRequestMiddleware)
19
+ * .use(responseLoggerMiddleware);
20
+ * ```
21
+ */
22
+ export declare const responseLoggerMiddleware: TApiMiddleware;
@@ -0,0 +1,8 @@
1
+ import {
2
+ responseLoggerMiddleware
3
+ } from "../chunk-KAWVMIRJ.js";
4
+ import "../chunk-EZR55KV2.js";
5
+ import "../chunk-ORMEWXMH.js";
6
+ export {
7
+ responseLoggerMiddleware
8
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 보안 미들웨어
3
+ *
4
+ * - TRACE/TRACK HTTP 메서드 차단
5
+ * - Content-Type 검증
6
+ * - 보안 헤더 강화
7
+ */
8
+ import type { TApiMiddleware } from './types';
9
+ /**
10
+ * 보안 미들웨어
11
+ *
12
+ * - TRACE/TRACK 메서드 차단 (405 Method Not Allowed)
13
+ * - POST/PUT/PATCH 요청의 Content-Type 검증
14
+ * - 보안 헤더 추가
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const chain = new MiddlewareChain()
19
+ * .use(errorHandlerMiddleware)
20
+ * .use(securityMiddleware) // CORS 전에 배치
21
+ * .use(corsMiddleware)
22
+ * .use(initRequestMiddleware);
23
+ * ```
24
+ */
25
+ export declare const securityMiddleware: TApiMiddleware;
26
+ /**
27
+ * 보안 미들웨어 설정 검증
28
+ *
29
+ * 서버 시작 시 호출하여 보안 설정을 로깅합니다.
30
+ */
31
+ export declare function validateSecurityConfiguration(): void;
@@ -0,0 +1,9 @@
1
+ import {
2
+ securityMiddleware,
3
+ validateSecurityConfiguration
4
+ } from "../chunk-WSQMXMTL.js";
5
+ import "../chunk-ORMEWXMH.js";
6
+ export {
7
+ securityMiddleware,
8
+ validateSecurityConfiguration
9
+ };
@@ -0,0 +1,45 @@
1
+ /**
2
+ * API 미들웨어 타입 정의
3
+ */
4
+ import type { NextRequest, NextResponse } from 'next/server';
5
+ import type { TLocale } from '@withwiz/error/messages';
6
+ /**
7
+ * 사용자 정보 (JWT 토큰에서 추출)
8
+ */
9
+ export interface IUser {
10
+ id: string;
11
+ email: string;
12
+ name?: string;
13
+ role: 'USER' | 'ADMIN';
14
+ }
15
+ /**
16
+ * API 컨텍스트
17
+ * - 요청 전반에 걸쳐 공유되는 정보
18
+ */
19
+ export interface IApiContext {
20
+ request: NextRequest;
21
+ user?: IUser;
22
+ locale: TLocale;
23
+ requestId: string;
24
+ startTime: number;
25
+ metadata: Record<string, unknown>;
26
+ }
27
+ /**
28
+ * API 핸들러 함수
29
+ * - 실제 비즈니스 로직을 처리하는 함수
30
+ * - props는 Next.js dynamic route params를 지원
31
+ */
32
+ export type TApiHandler = (context: IApiContext, props?: any) => Promise<NextResponse> | NextResponse;
33
+ /**
34
+ * API 미들웨어 함수
35
+ * - 체인에서 실행되는 미들웨어
36
+ * - next()를 호출하여 다음 미들웨어로 전달
37
+ */
38
+ export type TApiMiddleware = (context: IApiContext, next: () => Promise<NextResponse>) => Promise<NextResponse>;
39
+ /**
40
+ * 미들웨어 체인 옵션
41
+ */
42
+ export interface IMiddlewareChainOptions {
43
+ continueOnError?: boolean;
44
+ timeout?: number;
45
+ }
File without changes
@@ -0,0 +1,91 @@
1
+ /**
2
+ * API 래퍼 함수
3
+ *
4
+ * 미들웨어 체인을 조합하여 API 핸들러를 래핑합니다.
5
+ */
6
+ import type { NextRequest } from 'next/server';
7
+ import type { TApiHandler } from './types';
8
+ import { MiddlewareChain } from './middleware-chain';
9
+ /**
10
+ * 공개 API 래퍼
11
+ *
12
+ * - 인증 불필요
13
+ * - Rate limit: API (분당 120회)
14
+ * - 에러 핸들링, 로깅 포함
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * export const GET = withPublicApi(async (ctx) => {
19
+ * return NextResponse.json({ message: 'Hello' });
20
+ * });
21
+ * ```
22
+ */
23
+ export declare function withPublicApi(handler: TApiHandler): (request: NextRequest, props?: unknown) => Promise<import("next/server").NextResponse<unknown>>;
24
+ /**
25
+ * 인증 필수 API 래퍼
26
+ *
27
+ * - JWT 인증 필수
28
+ * - Rate limit: API (분당 120회)
29
+ * - 에러 핸들링, 로깅 포함
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * export const GET = withAuthApi(async (ctx) => {
34
+ * const userId = ctx.user!.id;
35
+ * return NextResponse.json({ userId });
36
+ * });
37
+ * ```
38
+ */
39
+ export declare function withAuthApi(handler: TApiHandler): (request: NextRequest, props?: unknown) => Promise<import("next/server").NextResponse<unknown>>;
40
+ /**
41
+ * 관리자 전용 API 래퍼
42
+ *
43
+ * - JWT 인증 + 관리자 권한 필수
44
+ * - Rate limit: Admin (분당 200회)
45
+ * - 에러 핸들링, 로깅 포함
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * export const GET = withAdminApi(async (ctx) => {
50
+ * // ctx.user.role === 'admin' 보장됨
51
+ * return NextResponse.json({ users: [...] });
52
+ * });
53
+ * ```
54
+ */
55
+ export declare function withAdminApi(handler: TApiHandler): (request: NextRequest, props?: unknown) => Promise<import("next/server").NextResponse<unknown>>;
56
+ /**
57
+ * 선택적 인증 API 래퍼
58
+ *
59
+ * - 인증 선택적 (로그인 시 context.user 설정, 비로그인 시 무시)
60
+ * - Rate limit: API (분당 120회)
61
+ * - 에러 핸들링, 로깅 포함
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * export const POST = withOptionalAuthApi(async (ctx) => {
66
+ * const userId = ctx.user?.id; // 로그인 시 존재, 비로그인 시 undefined
67
+ * return NextResponse.json({ userId });
68
+ * });
69
+ * ```
70
+ */
71
+ export declare function withOptionalAuthApi(handler: TApiHandler): (request: NextRequest, props?: unknown) => Promise<import("next/server").NextResponse<unknown>>;
72
+ /**
73
+ * 커스텀 미들웨어 체인 API 래퍼
74
+ *
75
+ * 사용자 정의 미들웨어 체인을 적용할 수 있습니다.
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * export const GET = withCustomApi(
80
+ * async (ctx) => {
81
+ * return NextResponse.json({ data: 'custom' });
82
+ * },
83
+ * (chain) => chain
84
+ * .use(errorHandlerMiddleware)
85
+ * .use(initRequestMiddleware)
86
+ * .use(rateLimitMiddleware.createLink)
87
+ * .use(responseLoggerMiddleware)
88
+ * );
89
+ * ```
90
+ */
91
+ export declare function withCustomApi(handler: TApiHandler, configureChain: (chain: MiddlewareChain) => MiddlewareChain): (request: NextRequest, props?: unknown) => Promise<import("next/server").NextResponse<unknown>>;