@withwiz/toolkit 0.7.1 → 0.8.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 (381) hide show
  1. package/README.ko.md +235 -0
  2. package/README.md +57 -26
  3. package/dist/{chunk-V6YD53NH.js → chunk-23LQJYZN.js} +5 -2
  4. package/dist/{chunk-ZTRASVGZ.js → chunk-34L7HTM7.js} +1 -1
  5. package/dist/{chunk-GSUCBWML.js → chunk-3RK3MKAR.js} +5 -2
  6. package/dist/{chunk-6JXHXIEH.js → chunk-3UIKCS56.js} +2 -2
  7. package/dist/{chunk-MNYVAEXK.js → chunk-4ROIPF33.js} +16 -3
  8. package/dist/{chunk-JKSABDFT.js → chunk-4TGPAUJV.js} +4 -4
  9. package/dist/{chunk-D2KXIKI4.js → chunk-4XPXZNBX.js} +18 -11
  10. package/dist/{chunk-LG3KM5V3.js → chunk-5I3EQHR4.js} +6 -2
  11. package/dist/chunk-63EKUOJH.js +72 -0
  12. package/dist/{chunk-N5VOFGF3.js → chunk-75UDFONR.js} +5 -4
  13. package/dist/{chunk-GORISA3L.js → chunk-7KIM5MHV.js} +1 -1
  14. package/dist/{chunk-4L6OSSSG.js → chunk-7S2PCYNT.js} +3 -3
  15. package/dist/{chunk-2SIBG5BG.js → chunk-7YWUKMZD.js} +7 -0
  16. package/dist/{chunk-7X2N4VZM.js → chunk-ATBYGPLP.js} +1 -1
  17. package/dist/{chunk-A74POWYY.js → chunk-B7AJJKOY.js} +1 -1
  18. package/dist/{chunk-W7PEL3DX.js → chunk-BRBOGLFT.js} +4 -4
  19. package/dist/{chunk-IOUNOHP7.js → chunk-BRFW2LL2.js} +1 -1
  20. package/dist/{chunk-I4NT6G2T.js → chunk-DRTJSTEV.js} +2 -2
  21. package/dist/{chunk-JIYLTMVL.js → chunk-DVCGAI5N.js} +2 -2
  22. package/dist/{chunk-AV7ELXHG.js → chunk-E5TDIRBJ.js} +2 -2
  23. package/dist/{chunk-UBASOMP5.js → chunk-HGVPZSWW.js} +18 -13
  24. package/dist/{chunk-7F5X6F7X.js → chunk-HV6A6Z5R.js} +1 -1
  25. package/dist/chunk-ILMPKSWS.js +125 -0
  26. package/dist/{chunk-J5NLAZV2.js → chunk-JHUWZ6YW.js} +2 -2
  27. package/dist/{chunk-LON5THYQ.js → chunk-KLMKCYIN.js} +1 -1
  28. package/dist/{chunk-4KJZRI74.js → chunk-KWUOLKDO.js} +1 -1
  29. package/dist/{chunk-GJO2MPC3.js → chunk-LCYDMYZS.js} +1 -1
  30. package/dist/{chunk-WIQAPWTY.js → chunk-LL3VWKY4.js} +1 -1
  31. package/dist/{chunk-IMAFMUZ7.js → chunk-LSS3GJUE.js} +3 -2
  32. package/dist/{chunk-2PFSRVVD.js → chunk-LWHLB2Y6.js} +84 -18
  33. package/dist/{chunk-BBE4RXR7.js → chunk-MTZXWVW3.js} +17 -6
  34. package/dist/{chunk-ORMEWXMH.js → chunk-N3ETBM74.js} +1 -14
  35. package/dist/{chunk-KYAHURXN.js → chunk-N3TCQ5BF.js} +4 -3
  36. package/dist/{chunk-G4SNTXJ3.js → chunk-NLV7IEYM.js} +7 -6
  37. package/dist/{chunk-HX4MPCVV.js → chunk-NTZBMWB6.js} +4 -4
  38. package/dist/{chunk-JRORMRVN.js → chunk-OII5BXCZ.js} +1 -1
  39. package/dist/{chunk-RJGYONRO.js → chunk-PRPMEHRE.js} +2 -2
  40. package/dist/{chunk-KG65BFPK.js → chunk-QAIN3WNN.js} +1 -1
  41. package/dist/{chunk-JJAIVUVD.js → chunk-R7EFDSPZ.js} +2 -2
  42. package/dist/{chunk-VJE4HA2C.js → chunk-RWCPRPEP.js} +3 -2
  43. package/dist/{chunk-B6L5XV7O.js → chunk-SCAFDDJP.js} +11 -11
  44. package/dist/{chunk-KXYDTC4A.js → chunk-SNFPZD6L.js} +11 -2
  45. package/dist/{chunk-MWBEE6VI.js → chunk-SXBDP3CK.js} +3 -3
  46. package/dist/{chunk-B5VRZ2VJ.js → chunk-TNDEYJEL.js} +25 -6
  47. package/dist/{chunk-GDTZMX3L.js → chunk-TRGFXIEF.js} +1 -1
  48. package/dist/{chunk-VNDL2E44.js → chunk-U52U5SK7.js} +2 -2
  49. package/dist/{chunk-54REXMTE.js → chunk-UWOWKOOQ.js} +3 -1
  50. package/dist/{chunk-4PROUAZ5.js → chunk-V3WZFUY3.js} +7 -7
  51. package/dist/{chunk-G4LJN4OZ.js → chunk-VH57Y5Z4.js} +1 -1
  52. package/dist/{chunk-5S7M2AJL.js → chunk-VWAB4PM7.js} +1 -1
  53. package/dist/{chunk-AQZPGOEZ.js → chunk-VWKZMGPJ.js} +5 -4
  54. package/dist/{chunk-4K27YLAE.js → chunk-VZ2PQA4U.js} +2 -2
  55. package/dist/{chunk-ZOWEW4GY.js → chunk-WBHX4MJV.js} +2 -2
  56. package/dist/{chunk-UMRKMF3E.js → chunk-WXOWI7BJ.js} +2 -2
  57. package/dist/chunk-XAGPZLRK.js +106 -0
  58. package/dist/{chunk-VPRTPW7C.js → chunk-XF3WUF3F.js} +2 -2
  59. package/dist/{chunk-6TRD7ZW4.js → chunk-XKIBJJA3.js} +25 -21
  60. package/dist/{chunk-ZLYBY3R4.js → chunk-XTGS6JJB.js} +10 -5
  61. package/dist/{chunk-BFZR62LZ.js → chunk-XXPB4C37.js} +7 -7
  62. package/dist/{chunk-LUIYCIF7.js → chunk-Y4ME3Q5K.js} +2 -2
  63. package/dist/{chunk-Q66VOVGN.js → chunk-Y4WPEIKW.js} +1 -1
  64. package/dist/{chunk-MREY2W7N.js → chunk-Y6CPPBJI.js} +1 -1
  65. package/dist/{chunk-6TUDUOGC.js → chunk-ZEHNCHIV.js} +2 -2
  66. package/dist/{chunk-D73ZJQMX.js → chunk-ZZABL54F.js} +13 -0
  67. package/dist/core/auth/config.d.ts +3 -0
  68. package/dist/core/auth/config.js +3 -3
  69. package/dist/core/auth/email/index.d.ts +3 -3
  70. package/dist/core/auth/email/index.js +3 -3
  71. package/dist/core/auth/email/sender.d.ts +1 -1
  72. package/dist/core/auth/email/sender.js +2 -2
  73. package/dist/core/auth/email/token-generator.d.ts +11 -0
  74. package/dist/core/auth/email/token-generator.js +2 -2
  75. package/dist/core/auth/errors/index.js +1 -1
  76. package/dist/core/auth/index.d.ts +11 -11
  77. package/dist/core/auth/index.js +27 -19
  78. package/dist/core/auth/jwt/client.js +3 -2
  79. package/dist/core/auth/jwt/cookie.d.ts +1 -1
  80. package/dist/core/auth/jwt/cookie.js +4 -4
  81. package/dist/core/auth/jwt/index.d.ts +41 -9
  82. package/dist/core/auth/jwt/index.js +6 -6
  83. package/dist/core/auth/jwt/types.d.ts +1 -1
  84. package/dist/core/auth/jwt/types.js +1 -1
  85. package/dist/core/auth/oauth/index.d.ts +6 -6
  86. package/dist/core/auth/oauth/index.js +8 -8
  87. package/dist/core/auth/oauth/providers/github.d.ts +1 -1
  88. package/dist/core/auth/oauth/providers/github.js +1 -1
  89. package/dist/core/auth/oauth/providers/google.d.ts +1 -1
  90. package/dist/core/auth/oauth/providers/google.js +1 -1
  91. package/dist/core/auth/oauth/providers/index.d.ts +5 -5
  92. package/dist/core/auth/oauth/providers/index.js +7 -7
  93. package/dist/core/auth/oauth/providers/kakao.d.ts +1 -1
  94. package/dist/core/auth/oauth/providers/kakao.js +1 -1
  95. package/dist/core/auth/oauth/providers/meta.d.ts +1 -1
  96. package/dist/core/auth/oauth/providers/meta.js +1 -1
  97. package/dist/core/auth/oauth/providers/microsoft.d.ts +1 -1
  98. package/dist/core/auth/oauth/providers/microsoft.js +1 -1
  99. package/dist/core/auth/oauth/state-cookie.js +1 -1
  100. package/dist/core/auth/password/client-helper.d.ts +9 -9
  101. package/dist/core/auth/password/client-helper.js +5 -3
  102. package/dist/core/auth/password/hasher.d.ts +83 -0
  103. package/dist/core/auth/password/hasher.js +14 -0
  104. package/dist/core/auth/password/index.d.ts +8 -6
  105. package/dist/core/auth/password/index.js +11 -2
  106. package/dist/core/auth/services/email-verification.service.d.ts +1 -1
  107. package/dist/core/auth/services/email-verification.service.js +3 -3
  108. package/dist/core/auth/services/index.d.ts +13 -12
  109. package/dist/core/auth/services/index.js +16 -16
  110. package/dist/core/auth/services/login.service.d.ts +15 -1
  111. package/dist/core/auth/services/login.service.js +6 -6
  112. package/dist/core/auth/services/oauth-callback.service.d.ts +7 -1
  113. package/dist/core/auth/services/oauth-callback.service.js +6 -6
  114. package/dist/core/auth/services/password-reset.service.d.ts +1 -1
  115. package/dist/core/auth/services/password-reset.service.js +3 -3
  116. package/dist/core/auth/services/refresh-token-store.d.ts +39 -0
  117. package/dist/core/auth/services/register.service.d.ts +1 -1
  118. package/dist/core/auth/services/register.service.js +3 -3
  119. package/dist/core/auth/services/token-refresh.service.d.ts +27 -1
  120. package/dist/core/auth/services/token-refresh.service.js +6 -6
  121. package/dist/core/auth/token-delivery.d.ts +47 -0
  122. package/dist/core/auth/token-delivery.js +14 -0
  123. package/dist/core/auth/types/index.d.ts +38 -4
  124. package/dist/core/auth/types/index.js +1 -1
  125. package/dist/core/cache/cache-config.js +4 -4
  126. package/dist/core/cache/cache-defaults.js +1 -1
  127. package/dist/core/cache/cache-env.d.ts +3 -3
  128. package/dist/core/cache/cache-env.js +3 -3
  129. package/dist/core/cache/cache-factory.d.ts +6 -6
  130. package/dist/core/cache/cache-factory.js +11 -11
  131. package/dist/core/cache/cache-invalidation.d.ts +4 -4
  132. package/dist/core/cache/cache-invalidation.js +12 -12
  133. package/dist/core/cache/cache-redis.js +5 -5
  134. package/dist/core/cache/cache-types.js +1 -1
  135. package/dist/core/cache/cache-wrapper.d.ts +1 -1
  136. package/dist/core/cache/cache-wrapper.js +12 -12
  137. package/dist/core/cache/cache.d.ts +2 -2
  138. package/dist/core/cache/cache.js +17 -17
  139. package/dist/core/cache/config.js +2 -2
  140. package/dist/core/cache/hybrid-cache-manager.d.ts +1 -1
  141. package/dist/core/cache/hybrid-cache-manager.js +7 -7
  142. package/dist/core/cache/index.d.ts +15 -15
  143. package/dist/core/cache/index.js +17 -17
  144. package/dist/core/cache/inmemory-cache-manager.d.ts +1 -1
  145. package/dist/core/cache/inmemory-cache-manager.js +3 -3
  146. package/dist/core/cache/noop-cache-manager.d.ts +1 -1
  147. package/dist/core/cache/noop-cache-manager.js +5 -5
  148. package/dist/core/cache/redis-cache-manager.d.ts +2 -2
  149. package/dist/core/cache/redis-cache-manager.js +6 -6
  150. package/dist/core/config/common.js +1 -1
  151. package/dist/core/config/errors.js +1 -1
  152. package/dist/core/config/registry.d.ts +7 -7
  153. package/dist/core/config/registry.js +1 -1
  154. package/dist/core/config/warn.js +1 -1
  155. package/dist/core/constants/error-codes.js +1 -1
  156. package/dist/core/constants/index.d.ts +5 -5
  157. package/dist/core/constants/index.js +4 -2
  158. package/dist/core/constants/messages.js +1 -1
  159. package/dist/core/constants/pagination.js +1 -1
  160. package/dist/core/constants/security.d.ts +15 -0
  161. package/dist/core/constants/security.js +4 -2
  162. package/dist/core/constants/validation.js +1 -1
  163. package/dist/core/cors/index.js +1 -1
  164. package/dist/core/error/app-error.d.ts +2 -2
  165. package/dist/core/error/app-error.js +1 -1
  166. package/dist/core/error/extract-error-info.js +1 -1
  167. package/dist/core/error/friendly-messages-v2.d.ts +3 -3
  168. package/dist/core/error/friendly-messages-v2.js +4 -4
  169. package/dist/core/error/friendly-messages.js +1 -1
  170. package/dist/core/error/index.d.ts +6 -6
  171. package/dist/core/error/index.js +4 -4
  172. package/dist/core/error/messages/en.d.ts +1 -1
  173. package/dist/core/error/messages/en.js +1 -1
  174. package/dist/core/error/messages/index.d.ts +2 -2
  175. package/dist/core/error/messages/index.js +3 -3
  176. package/dist/core/error/messages/ko.d.ts +1 -1
  177. package/dist/core/error/messages/ko.js +1 -1
  178. package/dist/core/geolocation/batch-processor.d.ts +1 -1
  179. package/dist/core/geolocation/batch-processor.js +3 -3
  180. package/dist/core/geolocation/config.js +1 -1
  181. package/dist/core/geolocation/index.d.ts +5 -5
  182. package/dist/core/geolocation/index.js +3 -3
  183. package/dist/core/geolocation/providers/base-provider.d.ts +2 -2
  184. package/dist/core/geolocation/providers/base-provider.js +1 -1
  185. package/dist/core/geolocation/providers/index.d.ts +6 -6
  186. package/dist/core/geolocation/providers/index.js +1 -1
  187. package/dist/core/geolocation/providers/ip-api-provider.d.ts +3 -3
  188. package/dist/core/geolocation/providers/ip-api-provider.js +1 -1
  189. package/dist/core/geolocation/providers/ipapi-co-provider.d.ts +3 -3
  190. package/dist/core/geolocation/providers/ipapi-co-provider.js +1 -1
  191. package/dist/core/geolocation/providers/ipgeolocation-provider.d.ts +3 -3
  192. package/dist/core/geolocation/providers/ipgeolocation-provider.js +1 -1
  193. package/dist/core/geolocation/providers/maxmind-provider.d.ts +3 -3
  194. package/dist/core/geolocation/providers/maxmind-provider.js +1 -1
  195. package/dist/core/logger/config.js +1 -1
  196. package/dist/core/logger/logger.js +2 -2
  197. package/dist/core/storage/config.js +1 -1
  198. package/dist/core/storage/r2-storage.js +1 -1
  199. package/dist/core/system/cpu.d.ts +1 -1
  200. package/dist/core/system/cpu.js +4 -4
  201. package/dist/core/system/disk.d.ts +1 -1
  202. package/dist/core/system/disk.js +4 -4
  203. package/dist/core/system/environment.d.ts +1 -1
  204. package/dist/core/system/environment.js +7 -7
  205. package/dist/core/system/health-check.d.ts +2 -2
  206. package/dist/core/system/health-check.js +5 -5
  207. package/dist/core/system/index.d.ts +7 -7
  208. package/dist/core/system/index.js +14 -14
  209. package/dist/core/system/memory.d.ts +1 -1
  210. package/dist/core/system/memory.js +4 -4
  211. package/dist/core/system/network.d.ts +1 -1
  212. package/dist/core/system/network.js +4 -4
  213. package/dist/core/system/utils.js +3 -3
  214. package/dist/core/types/geoip.d.ts +1 -1
  215. package/dist/core/types/qr-code.js +1 -1
  216. package/dist/core/utils/error-message-formatter.js +1 -1
  217. package/dist/core/utils/format-number.js +1 -1
  218. package/dist/core/utils/index.d.ts +3 -3
  219. package/dist/core/utils/index.js +2 -2
  220. package/dist/core/utils/input-validation.js +52 -16
  221. package/dist/core/utils/ip-utils.js +1 -1
  222. package/dist/core/utils/optimistic-lock.js +1 -1
  223. package/dist/core/utils/sanitizer.js +2 -2
  224. package/dist/core/utils/short-code-generator.js +1 -1
  225. package/dist/core/utils/timezone.js +121 -14
  226. package/dist/core/utils/type-guards.js +1 -1
  227. package/dist/core/utils/url-normalizer.js +1 -1
  228. package/dist/core/validators/index.d.ts +1 -1
  229. package/dist/core/validators/index.js +2 -2
  230. package/dist/core/validators/password-validator.d.ts +3 -3
  231. package/dist/core/validators/password-validator.js +2 -2
  232. package/dist/initialize.d.ts +10 -10
  233. package/dist/initialize.js +8 -8
  234. package/dist/next/auth-handlers/forgot-password.handler.d.ts +1 -1
  235. package/dist/next/auth-handlers/forgot-password.handler.js +4 -4
  236. package/dist/next/auth-handlers/index.d.ts +11 -11
  237. package/dist/next/auth-handlers/index.js +29 -28
  238. package/dist/next/auth-handlers/login.handler.d.ts +1 -1
  239. package/dist/next/auth-handlers/login.handler.js +7 -6
  240. package/dist/next/auth-handlers/logout.handler.d.ts +1 -1
  241. package/dist/next/auth-handlers/logout.handler.js +5 -5
  242. package/dist/next/auth-handlers/me.handler.d.ts +1 -1
  243. package/dist/next/auth-handlers/me.handler.js +7 -6
  244. package/dist/next/auth-handlers/oauth-authorize.handler.d.ts +1 -1
  245. package/dist/next/auth-handlers/oauth-authorize.handler.js +5 -5
  246. package/dist/next/auth-handlers/oauth-callback.handler.d.ts +1 -1
  247. package/dist/next/auth-handlers/oauth-callback.handler.js +10 -10
  248. package/dist/next/auth-handlers/refresh.handler.d.ts +1 -1
  249. package/dist/next/auth-handlers/refresh.handler.js +8 -7
  250. package/dist/next/auth-handlers/register.handler.d.ts +1 -1
  251. package/dist/next/auth-handlers/register.handler.js +4 -4
  252. package/dist/next/auth-handlers/reset-password.handler.d.ts +1 -1
  253. package/dist/next/auth-handlers/reset-password.handler.js +4 -4
  254. package/dist/next/auth-handlers/verify-email.handler.d.ts +1 -1
  255. package/dist/next/auth-handlers/verify-email.handler.js +4 -4
  256. package/dist/next/auth-types/handler-types.d.ts +5 -1
  257. package/dist/next/auth-types/handler-types.js +13 -1
  258. package/dist/next/auth-types/index.d.ts +1 -1
  259. package/dist/next/auth-types/index.js +13 -1
  260. package/dist/next/error/error-handler.js +3 -3
  261. package/dist/next/error/index.d.ts +3 -3
  262. package/dist/next/error/index.js +6 -6
  263. package/dist/next/error/locale-detector.d.ts +1 -1
  264. package/dist/next/error/locale-detector.js +1 -1
  265. package/dist/next/middleware/auth.d.ts +3 -3
  266. package/dist/next/middleware/auth.js +8 -7
  267. package/dist/next/middleware/cors.d.ts +2 -2
  268. package/dist/next/middleware/cors.js +3 -3
  269. package/dist/next/middleware/error-handler.d.ts +1 -1
  270. package/dist/next/middleware/error-handler.js +6 -6
  271. package/dist/next/middleware/index.d.ts +11 -11
  272. package/dist/next/middleware/index.js +18 -17
  273. package/dist/next/middleware/init-request.d.ts +1 -1
  274. package/dist/next/middleware/init-request.js +1 -1
  275. package/dist/next/middleware/middleware-chain.d.ts +1 -1
  276. package/dist/next/middleware/middleware-chain.js +3 -3
  277. package/dist/next/middleware/rate-limit.d.ts +2 -2
  278. package/dist/next/middleware/rate-limit.js +3 -3
  279. package/dist/next/middleware/response-logger.d.ts +1 -1
  280. package/dist/next/middleware/response-logger.js +3 -3
  281. package/dist/next/middleware/security.d.ts +1 -1
  282. package/dist/next/middleware/security.js +3 -3
  283. package/dist/next/middleware/types.d.ts +6 -3
  284. package/dist/next/middleware/wrappers.d.ts +2 -2
  285. package/dist/next/middleware/wrappers.js +18 -17
  286. package/dist/next/utils/api-helpers.d.ts +6 -2
  287. package/dist/next/utils/api-helpers.js +3 -2
  288. package/dist/next/utils/cors.js +2 -2
  289. package/dist/next/utils/csv-export-format.js +1 -1
  290. package/dist/next/utils/csv-export.js +3 -3
  291. package/dist/next/utils/error-processor.d.ts +1 -1
  292. package/dist/next/utils/error-processor.js +3 -3
  293. package/dist/next/utils/index.d.ts +5 -5
  294. package/dist/next/utils/index.js +16 -15
  295. package/dist/prisma/auth-adapter/index.d.ts +1 -1
  296. package/dist/prisma/auth-adapter/index.js +1 -1
  297. package/package.json +94 -51
  298. package/dist/chunk-2P4N4OK2.js +0 -150
  299. package/dist/chunk-4IQWQSEV.js +0 -27
  300. package/dist/chunk-4K76HG4V.js +0 -34
  301. package/dist/chunk-7EXSMZ2O.js +0 -29
  302. package/dist/chunk-7VXRBTRF.js +0 -110
  303. package/dist/chunk-ARXUKGZI.js +0 -58
  304. package/dist/chunk-B5OH43PR.js +0 -31
  305. package/dist/chunk-BW4QO7T6.js +0 -56
  306. package/dist/chunk-EK4TL7VW.js +0 -22
  307. package/dist/chunk-ERKJJDY6.js +0 -117
  308. package/dist/chunk-G4GT4X3J.js +0 -240
  309. package/dist/chunk-GPOSTBDQ.js +0 -193
  310. package/dist/chunk-IRUFNC4L.js +0 -26
  311. package/dist/chunk-J2MAXMIP.js +0 -105
  312. package/dist/chunk-MFMQO6IS.js +0 -127
  313. package/dist/chunk-PBQGXOVX.js +0 -31
  314. package/dist/chunk-STMAKLLG.js +0 -24
  315. package/dist/chunk-WP233RH2.js +0 -80
  316. package/dist/chunk-WWOYFWFB.js +0 -137
  317. package/dist/chunk-X7FGBUA4.js +0 -117
  318. package/dist/chunk-YSPIFSDI.js +0 -136
  319. package/dist/chunk-ZCLKRGZ4.js +0 -81
  320. package/dist/react/components/ui/Alert.d.ts +0 -12
  321. package/dist/react/components/ui/Alert.js +0 -10
  322. package/dist/react/components/ui/Badge.d.ts +0 -7
  323. package/dist/react/components/ui/Badge.js +0 -8
  324. package/dist/react/components/ui/Button.d.ts +0 -7
  325. package/dist/react/components/ui/Button.js +0 -8
  326. package/dist/react/components/ui/DataTable.d.ts +0 -8
  327. package/dist/react/components/ui/DataTable.js +0 -22
  328. package/dist/react/components/ui/DomainDisplay.d.ts +0 -12
  329. package/dist/react/components/ui/DomainDisplay.js +0 -31
  330. package/dist/react/components/ui/Input.d.ts +0 -5
  331. package/dist/react/components/ui/Input.js +0 -8
  332. package/dist/react/components/ui/Label.d.ts +0 -5
  333. package/dist/react/components/ui/Label.js +0 -8
  334. package/dist/react/components/ui/Pagination.d.ts +0 -42
  335. package/dist/react/components/ui/Pagination.js +0 -20
  336. package/dist/react/components/ui/Select.d.ts +0 -15
  337. package/dist/react/components/ui/Select.js +0 -27
  338. package/dist/react/components/ui/Skeleton.d.ts +0 -6
  339. package/dist/react/components/ui/Skeleton.js +0 -8
  340. package/dist/react/components/ui/TimezoneDisplay.d.ts +0 -22
  341. package/dist/react/components/ui/TimezoneDisplay.js +0 -83
  342. package/dist/react/components/ui/Tooltip.d.ts +0 -21
  343. package/dist/react/components/ui/Tooltip.js +0 -94
  344. package/dist/react/components/ui/data-table/DataTable.d.ts +0 -2
  345. package/dist/react/components/ui/data-table/DataTable.js +0 -22
  346. package/dist/react/components/ui/data-table/DataTableBody.d.ts +0 -19
  347. package/dist/react/components/ui/data-table/DataTableBody.js +0 -10
  348. package/dist/react/components/ui/data-table/DataTableBulkActions.d.ts +0 -17
  349. package/dist/react/components/ui/data-table/DataTableBulkActions.js +0 -12
  350. package/dist/react/components/ui/data-table/DataTableFilters.d.ts +0 -15
  351. package/dist/react/components/ui/data-table/DataTableFilters.js +0 -13
  352. package/dist/react/components/ui/data-table/DataTablePagination.d.ts +0 -10
  353. package/dist/react/components/ui/data-table/DataTablePagination.js +0 -11
  354. package/dist/react/components/ui/data-table/DataTableSearch.d.ts +0 -24
  355. package/dist/react/components/ui/data-table/DataTableSearch.js +0 -12
  356. package/dist/react/components/ui/data-table/index.d.ts +0 -13
  357. package/dist/react/components/ui/data-table/index.js +0 -42
  358. package/dist/react/components/ui/data-table/types.d.ts +0 -120
  359. package/dist/react/components/ui/data-table/types.js +0 -9
  360. package/dist/react/components/ui/loading-bar.d.ts +0 -20
  361. package/dist/react/components/ui/loading-bar.js +0 -15
  362. package/dist/react/error/error-display.d.ts +0 -48
  363. package/dist/react/error/error-display.js +0 -30
  364. package/dist/react/error/index.d.ts +0 -6
  365. package/dist/react/error/index.js +0 -30
  366. package/dist/react/hooks/useDataTable.d.ts +0 -96
  367. package/dist/react/hooks/useDataTable.js +0 -151
  368. package/dist/react/hooks/useDebounce.d.ts +0 -7
  369. package/dist/react/hooks/useDebounce.js +0 -7
  370. package/dist/react/hooks/useExitIntent.d.ts +0 -35
  371. package/dist/react/hooks/useExitIntent.js +0 -72
  372. package/dist/react/hooks/useTimezone.d.ts +0 -19
  373. package/dist/react/hooks/useTimezone.js +0 -11
  374. package/dist/react/utils/client-utils.d.ts +0 -3
  375. package/dist/react/utils/client-utils.js +0 -9
  376. package/dist/react/utils/qr-code.d.ts +0 -16
  377. package/dist/react/utils/qr-code.js +0 -215
  378. package/dist/{chunk-7PEVOMBO.js → chunk-AOWUPAPS.js} +0 -0
  379. package/dist/{chunk-UQ3Z3ZAF.js → chunk-ER6LSA4M.js} +6 -6
  380. package/dist/{chunk-7WG7XPXC.js → chunk-KKZCNF6U.js} +3 -3
  381. /package/dist/{chunk-M22Z2NO6.js → core/auth/services/refresh-token-store.js} +0 -0
@@ -4,25 +4,78 @@ import {
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
7
- } from "./chunk-ORMEWXMH.js";
7
+ } from "./chunk-N3ETBM74.js";
8
8
 
9
9
  // src/core/auth/jwt/index.ts
10
- import { SignJWT, jwtVerify } from "jose";
10
+ import { randomUUID } from "crypto";
11
+ import {
12
+ SignJWT,
13
+ jwtVerify,
14
+ importPKCS8,
15
+ importSPKI,
16
+ createRemoteJWKSet
17
+ } from "jose";
11
18
  var JWTManager = class {
12
19
  constructor(config, logger) {
13
20
  this.config = config;
14
21
  this.logger = logger;
15
- this.secretKey = new TextEncoder().encode(config.secret);
16
- if (config.secret.length < 32) {
17
- throw new JWTError("JWT secret must be at least 32 characters long", "TOKEN_CREATION_FAILED");
22
+ if (this.isSymmetric()) {
23
+ if (!config.secret || config.secret.length < 32) {
24
+ throw new JWTError("JWT secret must be at least 32 characters long", "TOKEN_CREATION_FAILED");
25
+ }
26
+ this.secretKey = new TextEncoder().encode(config.secret);
27
+ } else {
28
+ if (!config.privateKey && !config.publicKey && !config.jwksUri) {
29
+ throw new JWTError(
30
+ "Asymmetric JWT requires privateKey (sign) and/or publicKey/jwksUri (verify)",
31
+ "TOKEN_CREATION_FAILED"
32
+ );
33
+ }
34
+ }
35
+ }
36
+ isSymmetric() {
37
+ return this.config.algorithm.startsWith("HS");
38
+ }
39
+ /** 발급용 키 (HS: secret, 비대칭: PKCS#8 개인키). 결과를 캐시한다. */
40
+ async getSigningKey() {
41
+ var _a;
42
+ if (this.isSymmetric()) {
43
+ return this.secretKey;
18
44
  }
45
+ if (!this.config.privateKey) {
46
+ throw new JWTError("No privateKey configured for signing", "TOKEN_CREATION_FAILED");
47
+ }
48
+ (_a = this.signingKeyCache) != null ? _a : this.signingKeyCache = importPKCS8(this.config.privateKey, this.config.algorithm);
49
+ return this.signingKeyCache;
50
+ }
51
+ /**
52
+ * 검증용 키를 jose getKey 함수로 정규화해 반환한다 (HS: secret, 비대칭:
53
+ * SPKI 공개키 또는 원격 JWKS). 정적 키도 함수로 감싸 단일 호출 경로를 쓰며,
54
+ * jose 는 함수 호출 전 알고리즘 allowlist 를 검증하므로 confusion 가드는 유지된다.
55
+ */
56
+ async getVerifyKey() {
57
+ var _a, _b;
58
+ if (this.isSymmetric()) {
59
+ const key = this.secretKey;
60
+ return async () => key;
61
+ }
62
+ if (this.config.jwksUri) {
63
+ (_a = this.jwks) != null ? _a : this.jwks = createRemoteJWKSet(new URL(this.config.jwksUri));
64
+ return this.jwks;
65
+ }
66
+ if (this.config.publicKey) {
67
+ (_b = this.verifyKeyCache) != null ? _b : this.verifyKeyCache = importSPKI(this.config.publicKey, this.config.algorithm);
68
+ const key = await this.verifyKeyCache;
69
+ return async () => key;
70
+ }
71
+ throw new JWTError("No publicKey or jwksUri configured for verification", "TOKEN_VERIFICATION_FAILED");
19
72
  }
20
73
  /**
21
74
  * Access JWT 토큰 생성
22
75
  */
23
76
  async createAccessToken(payload) {
24
77
  try {
25
- const jwt = await new SignJWT(__spreadProps(__spreadValues({}, payload), { tokenType: "access" })).setProtectedHeader({ alg: this.config.algorithm }).setIssuedAt().setExpirationTime(this.config.accessTokenExpiry).sign(this.secretKey);
78
+ const jwt = await new SignJWT(__spreadProps(__spreadValues({}, payload), { tokenType: "access" })).setProtectedHeader({ alg: this.config.algorithm }).setIssuedAt().setExpirationTime(this.config.accessTokenExpiry).sign(await this.getSigningKey());
26
79
  this.logger.debug("Access token created successfully", {
27
80
  userId: payload.userId,
28
81
  expiresIn: this.config.accessTokenExpiry
@@ -38,14 +91,20 @@ var JWTManager = class {
38
91
  }
39
92
  /**
40
93
  * Refresh 토큰 생성
94
+ *
95
+ * rotation/reuse detection 용 `jti`(토큰 고유 id)와 `familyId`(회전 계보 id)를
96
+ * 함께 발급할 수 있다. 미지정 시 0.8 이전과 동일하게 식별자 없는 refresh
97
+ * 토큰을 만든다(하위 호환).
41
98
  */
42
- async createRefreshToken(userId) {
99
+ async createRefreshToken(userId, options) {
43
100
  try {
44
101
  const payload = {
45
102
  userId,
46
103
  tokenType: "refresh"
47
104
  };
48
- const jwt = await new SignJWT(payload).setProtectedHeader({ alg: this.config.algorithm }).setIssuedAt().setExpirationTime(this.config.refreshTokenExpiry).sign(this.secretKey);
105
+ if (options == null ? void 0 : options.jti) payload.jti = options.jti;
106
+ if (options == null ? void 0 : options.familyId) payload.familyId = options.familyId;
107
+ const jwt = await new SignJWT(payload).setProtectedHeader({ alg: this.config.algorithm }).setIssuedAt().setExpirationTime(this.config.refreshTokenExpiry).sign(await this.getSigningKey());
49
108
  this.logger.debug("Refresh token created successfully", {
50
109
  userId,
51
110
  expiresIn: this.config.refreshTokenExpiry
@@ -62,8 +121,11 @@ var JWTManager = class {
62
121
  /**
63
122
  * 토큰 쌍 생성 (Access + Refresh)
64
123
  */
65
- async createTokenPair(user) {
124
+ async createTokenPair(user, options) {
125
+ var _a, _b;
66
126
  try {
127
+ const jti = (_a = options == null ? void 0 : options.jti) != null ? _a : randomUUID();
128
+ const familyId = (_b = options == null ? void 0 : options.familyId) != null ? _b : randomUUID();
67
129
  const [accessToken, refreshToken] = await Promise.all([
68
130
  this.createAccessToken({
69
131
  id: user.id,
@@ -72,9 +134,9 @@ var JWTManager = class {
72
134
  role: user.role,
73
135
  emailVerified: user.emailVerified
74
136
  }),
75
- this.createRefreshToken(user.id)
137
+ this.createRefreshToken(user.id, { jti, familyId })
76
138
  ]);
77
- this.logger.debug("Token pair created successfully", { userId: user.id });
139
+ this.logger.debug("Token pair created successfully", { userId: user.id, familyId });
78
140
  return { accessToken, refreshToken };
79
141
  } catch (error) {
80
142
  this.logger.error("Failed to create token pair", {
@@ -89,7 +151,7 @@ var JWTManager = class {
89
151
  */
90
152
  async verifyAccessToken(token) {
91
153
  try {
92
- const { payload } = await jwtVerify(token, this.secretKey, {
154
+ const { payload } = await jwtVerify(token, await this.getVerifyKey(), {
93
155
  algorithms: [this.config.algorithm]
94
156
  });
95
157
  const userId = payload.userId || payload.sub || payload.id;
@@ -106,6 +168,8 @@ var JWTManager = class {
106
168
  id: userId,
107
169
  userId,
108
170
  email: payload.email,
171
+ // role 은 신뢰 불가 토큰에서 옴 — TRole 단언은 소비자 어휘로의 타입 편의일 뿐
172
+ // 런타임 검증은 아니다.
109
173
  role: payload.role,
110
174
  emailVerified: payload.emailVerified,
111
175
  tokenType: payload.tokenType,
@@ -131,7 +195,7 @@ var JWTManager = class {
131
195
  */
132
196
  async verifyRefreshToken(token) {
133
197
  try {
134
- const { payload } = await jwtVerify(token, this.secretKey, {
198
+ const { payload } = await jwtVerify(token, await this.getVerifyKey(), {
135
199
  algorithms: [this.config.algorithm]
136
200
  });
137
201
  const userId = payload.userId || payload.sub || payload.id;
@@ -146,7 +210,9 @@ var JWTManager = class {
146
210
  });
147
211
  return {
148
212
  userId,
149
- tokenType: payload.tokenType
213
+ tokenType: payload.tokenType,
214
+ jti: typeof payload.jti === "string" ? payload.jti : void 0,
215
+ familyId: typeof payload.familyId === "string" ? payload.familyId : void 0
150
216
  };
151
217
  } catch (error) {
152
218
  this.logger.error("Failed to verify refresh token", {
@@ -239,8 +305,8 @@ var JWTService = class {
239
305
  /**
240
306
  * Refresh 토큰 생성
241
307
  */
242
- async createRefreshToken(userId) {
243
- return this.manager.createRefreshToken(userId);
308
+ async createRefreshToken(userId, options) {
309
+ return this.manager.createRefreshToken(userId, options);
244
310
  }
245
311
  /**
246
312
  * Refresh 토큰 검증
@@ -251,8 +317,8 @@ var JWTService = class {
251
317
  /**
252
318
  * 토큰 쌍 생성
253
319
  */
254
- async createTokenPair(user) {
255
- return this.manager.createTokenPair(user);
320
+ async createTokenPair(user, options) {
321
+ return this.manager.createTokenPair(user, options);
256
322
  }
257
323
  /**
258
324
  * Access 토큰 생성
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  JWTService
3
- } from "./chunk-2PFSRVVD.js";
3
+ } from "./chunk-LWHLB2Y6.js";
4
4
  import {
5
5
  AuthError
6
6
  } from "./chunk-5GWGARXI.js";
7
7
  import {
8
- JWT_DEFAULTS
9
- } from "./chunk-2SIBG5BG.js";
8
+ JWT_DEFAULTS,
9
+ ROLE_DEFAULTS
10
+ } from "./chunk-7YWUKMZD.js";
10
11
 
11
12
  // src/core/auth/services/oauth-callback.service.ts
12
13
  var OAuthCallbackService = class {
@@ -47,6 +48,17 @@ var OAuthCallbackService = class {
47
48
  }
48
49
  const existingUser = await this.userRepo.findByEmail(input.email);
49
50
  if (existingUser) {
51
+ if (input.emailVerified !== true) {
52
+ this.logger.warn("Blocked OAuth account linking for unverified email", {
53
+ provider: input.provider,
54
+ userId: existingUser.id
55
+ });
56
+ throw new AuthError(
57
+ "OAuth email is not verified by the provider; cannot link to an existing account",
58
+ "OAUTH_EMAIL_NOT_VERIFIED",
59
+ 403
60
+ );
61
+ }
50
62
  await this.oauthRepo.create({
51
63
  userId: existingUser.id,
52
64
  provider: input.provider,
@@ -62,8 +74,7 @@ var OAuthCallbackService = class {
62
74
  email: input.email,
63
75
  name: input.name,
64
76
  image: input.image,
65
- emailVerified: /* @__PURE__ */ new Date()
66
- // OAuth users are auto-verified
77
+ emailVerified: input.emailVerified === true ? /* @__PURE__ */ new Date() : null
67
78
  });
68
79
  await this.oauthRepo.create({
69
80
  userId: newUser.id,
@@ -81,7 +92,7 @@ var OAuthCallbackService = class {
81
92
  return this.jwtService.createTokenPair({
82
93
  id: user.id,
83
94
  email: user.email,
84
- role: (_a = user.role) != null ? _a : "USER",
95
+ role: (_a = user.role) != null ? _a : ROLE_DEFAULTS.DEFAULT_ROLE,
85
96
  emailVerified: user.emailVerified
86
97
  });
87
98
  }
@@ -17,21 +17,8 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __objRest = (source, exclude) => {
21
- var target = {};
22
- for (var prop in source)
23
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
- target[prop] = source[prop];
25
- if (source != null && __getOwnPropSymbols)
26
- for (var prop of __getOwnPropSymbols(source)) {
27
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
- target[prop] = source[prop];
29
- }
30
- return target;
31
- };
32
20
 
33
21
  export {
34
22
  __spreadValues,
35
- __spreadProps,
36
- __objRest
23
+ __spreadProps
37
24
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  JWT_DEFAULTS
3
- } from "./chunk-2SIBG5BG.js";
3
+ } from "./chunk-7YWUKMZD.js";
4
4
  import {
5
5
  configWarn
6
6
  } from "./chunk-6J2EJVND.js";
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  // src/core/auth/config.ts
12
12
  function initializeAuth(config) {
13
- var _a, _b, _c, _d;
13
+ var _a, _b, _c, _d, _e;
14
14
  (_a = globalThis.__withwiz_config) != null ? _a : globalThis.__withwiz_config = {};
15
15
  if (globalThis.__withwiz_config.auth) return;
16
16
  if (!config.jwtSecret) {
@@ -26,7 +26,8 @@ function initializeAuth(config) {
26
26
  jwtSecret: config.jwtSecret,
27
27
  accessTokenExpiry: (_b = config.accessTokenExpiry) != null ? _b : JWT_DEFAULTS.DEFAULT_ACCESS_TOKEN_EXPIRES,
28
28
  refreshTokenExpiry: (_c = config.refreshTokenExpiry) != null ? _c : JWT_DEFAULTS.DEFAULT_REFRESH_TOKEN_EXPIRES,
29
- cookieSecure: (_d = config.cookieSecure) != null ? _d : false
29
+ cookieSecure: (_d = config.cookieSecure) != null ? _d : false,
30
+ tokenDelivery: (_e = config.tokenDelivery) != null ? _e : "hybrid"
30
31
  };
31
32
  }
32
33
  function getAuthConfig() {
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  OAuthCallbackService
3
- } from "./chunk-BBE4RXR7.js";
3
+ } from "./chunk-MTZXWVW3.js";
4
4
  import {
5
5
  OAuthManager
6
- } from "./chunk-UQ3Z3ZAF.js";
6
+ } from "./chunk-ER6LSA4M.js";
7
7
  import {
8
8
  OAUTH_STATE_COOKIE,
9
9
  clearOAuthStateCookie,
10
10
  validateOAuthState
11
11
  } from "./chunk-JLRMET4V.js";
12
- import {
13
- setTokenCookies
14
- } from "./chunk-RJGYONRO.js";
15
12
  import {
16
13
  AuthError
17
14
  } from "./chunk-5GWGARXI.js";
15
+ import {
16
+ setTokenCookies
17
+ } from "./chunk-PRPMEHRE.js";
18
18
 
19
19
  // src/next/auth-handlers/oauth-callback.handler.ts
20
20
  import { NextResponse } from "next/server";
@@ -76,7 +76,8 @@ function createOAuthCallbackHandler(options) {
76
76
  email: userInfo.email,
77
77
  name: userInfo.name,
78
78
  image: userInfo.image,
79
- accessToken
79
+ accessToken,
80
+ emailVerified: userInfo.emailVerified
80
81
  });
81
82
  if (hooks == null ? void 0 : hooks.onAfterOAuth) await hooks.onAfterOAuth(result.user, provider, result.isNewUser);
82
83
  if (result.isNewUser && (hooks == null ? void 0 : hooks.onOAuthFirstLogin)) {
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  getCacheManager,
3
3
  getEffectiveCacheBackend
4
- } from "./chunk-B6L5XV7O.js";
4
+ } from "./chunk-SCAFDDJP.js";
5
5
  import {
6
6
  logger
7
- } from "./chunk-KG65BFPK.js";
7
+ } from "./chunk-QAIN3WNN.js";
8
8
  import {
9
9
  getCacheConfig,
10
10
  getCacheTTL
11
- } from "./chunk-MREY2W7N.js";
11
+ } from "./chunk-Y6CPPBJI.js";
12
12
  import {
13
13
  isCacheEnabled
14
- } from "./chunk-7F5X6F7X.js";
14
+ } from "./chunk-HV6A6Z5R.js";
15
15
 
16
16
  // src/core/cache/cache-wrapper.ts
17
17
  function getCacheBackendLabel() {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OAuthManager
3
- } from "./chunk-UQ3Z3ZAF.js";
3
+ } from "./chunk-ER6LSA4M.js";
4
4
  import {
5
5
  generateOAuthState,
6
6
  setOAuthStateCookie
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  getAuthConfig
3
- } from "./chunk-KYAHURXN.js";
3
+ } from "./chunk-N3TCQ5BF.js";
4
4
  import {
5
5
  __spreadValues
6
- } from "./chunk-ORMEWXMH.js";
6
+ } from "./chunk-N3ETBM74.js";
7
7
 
8
8
  // src/core/auth/jwt/cookie.ts
9
9
  function getDefaultOptions() {
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
7
- } from "./chunk-ORMEWXMH.js";
7
+ } from "./chunk-N3ETBM74.js";
8
8
 
9
9
  // src/core/logger/logger.ts
10
10
  import fs from "fs";
@@ -12,11 +12,11 @@ import {
12
12
  } from "./chunk-5GWGARXI.js";
13
13
  import {
14
14
  logger
15
- } from "./chunk-KG65BFPK.js";
15
+ } from "./chunk-QAIN3WNN.js";
16
16
  import {
17
17
  __spreadProps,
18
18
  __spreadValues
19
- } from "./chunk-ORMEWXMH.js";
19
+ } from "./chunk-N3ETBM74.js";
20
20
 
21
21
  // src/next/error/error-handler.ts
22
22
  import { NextResponse } from "next/server";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RegisterService
3
- } from "./chunk-LUIYCIF7.js";
3
+ } from "./chunk-Y4ME3Q5K.js";
4
4
  import {
5
5
  AuthError
6
6
  } from "./chunk-5GWGARXI.js";
@@ -8,9 +8,10 @@ import {
8
8
  // src/next/auth-handlers/register.handler.ts
9
9
  import { NextResponse } from "next/server";
10
10
  import { z } from "zod";
11
+ var withinBcryptByteLimit = (value) => new TextEncoder().encode(value).length <= 72;
11
12
  var registerSchema = z.object({
12
13
  email: z.string().email(),
13
- password: z.string().min(8),
14
+ password: z.string().min(8).refine(withinBcryptByteLimit, { message: "Password cannot exceed 72 bytes" }),
14
15
  name: z.string().min(1).optional()
15
16
  });
16
17
  function createRegisterHandler(options) {
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  NoopCacheManager
3
- } from "./chunk-VPRTPW7C.js";
3
+ } from "./chunk-XF3WUF3F.js";
4
4
  import {
5
5
  RedisCacheManager
6
- } from "./chunk-JKSABDFT.js";
6
+ } from "./chunk-4TGPAUJV.js";
7
7
  import {
8
8
  HybridCacheManager
9
- } from "./chunk-BFZR62LZ.js";
9
+ } from "./chunk-XXPB4C37.js";
10
+ import {
11
+ InMemoryCacheManager
12
+ } from "./chunk-JHUWZ6YW.js";
10
13
  import {
11
14
  isRedisAvailableNow,
12
15
  isRedisGloballyDisabled
13
- } from "./chunk-6TUDUOGC.js";
14
- import {
15
- InMemoryCacheManager
16
- } from "./chunk-J5NLAZV2.js";
16
+ } from "./chunk-ZEHNCHIV.js";
17
17
  import {
18
18
  logger
19
- } from "./chunk-KG65BFPK.js";
19
+ } from "./chunk-QAIN3WNN.js";
20
20
  import {
21
21
  getCacheConfig
22
- } from "./chunk-MREY2W7N.js";
22
+ } from "./chunk-Y6CPPBJI.js";
23
23
  import {
24
24
  getENV,
25
25
  isCacheEnabled
26
- } from "./chunk-7F5X6F7X.js";
26
+ } from "./chunk-HV6A6Z5R.js";
27
27
  import {
28
28
  isCacheConfigInitialized
29
- } from "./chunk-GORISA3L.js";
29
+ } from "./chunk-7KIM5MHV.js";
30
30
  import {
31
31
  configWarn
32
32
  } from "./chunk-6J2EJVND.js";
@@ -1,9 +1,12 @@
1
1
  import {
2
2
  __spreadValues
3
- } from "./chunk-ORMEWXMH.js";
3
+ } from "./chunk-N3ETBM74.js";
4
4
 
5
5
  // src/core/validators/password-validator.ts
6
6
  import { z } from "zod";
7
+ var BCRYPT_MAX_PASSWORD_BYTES = 72;
8
+ var utf8ByteLength = (value) => new TextEncoder().encode(value).length;
9
+ var BCRYPT_BYTE_LIMIT_MESSAGE = `Password cannot exceed ${BCRYPT_MAX_PASSWORD_BYTES} bytes`;
7
10
  var PasswordStrength = /* @__PURE__ */ ((PasswordStrength2) => {
8
11
  PasswordStrength2["VERY_WEAK"] = "very_weak";
9
12
  PasswordStrength2["WEAK"] = "weak";
@@ -25,6 +28,9 @@ var PasswordValidator = class {
25
28
  if (password.length > opts.maxLength) {
26
29
  errors.push(`Password cannot exceed ${opts.maxLength} characters`);
27
30
  }
31
+ if (utf8ByteLength(password) > BCRYPT_MAX_PASSWORD_BYTES) {
32
+ errors.push(BCRYPT_BYTE_LIMIT_MESSAGE);
33
+ }
28
34
  if (opts.requireNumber && !/\d/.test(password)) {
29
35
  errors.push("Password must contain at least one number");
30
36
  }
@@ -136,7 +142,10 @@ var PasswordValidator = class {
136
142
  if (opts.customPattern) {
137
143
  schema = schema.regex(opts.customPattern, opts.customMessage);
138
144
  }
139
- return schema;
145
+ return schema.refine(
146
+ (value) => utf8ByteLength(value) <= BCRYPT_MAX_PASSWORD_BYTES,
147
+ { message: BCRYPT_BYTE_LIMIT_MESSAGE }
148
+ );
140
149
  }
141
150
  /**
142
151
  * 비밀번호 확인 검증
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-PBVP7CFZ.js";
5
5
  import {
6
6
  getPlatform
7
- } from "./chunk-4KJZRI74.js";
7
+ } from "./chunk-KWUOLKDO.js";
8
8
  import {
9
9
  logger
10
- } from "./chunk-KG65BFPK.js";
10
+ } from "./chunk-QAIN3WNN.js";
11
11
  import {
12
12
  getResolvedCacheConfig
13
- } from "./chunk-GORISA3L.js";
13
+ } from "./chunk-7KIM5MHV.js";
14
14
 
15
15
  // src/core/system/health-check.ts
16
16
  async function checkServiceHealth(prismaClient) {
@@ -1,15 +1,20 @@
1
1
  import {
2
2
  JWTService
3
- } from "./chunk-2PFSRVVD.js";
3
+ } from "./chunk-LWHLB2Y6.js";
4
4
  import {
5
5
  AuthError
6
6
  } from "./chunk-5GWGARXI.js";
7
7
  import {
8
- JWT_DEFAULTS
9
- } from "./chunk-2SIBG5BG.js";
8
+ JWT_DEFAULTS,
9
+ ROLE_DEFAULTS
10
+ } from "./chunk-7YWUKMZD.js";
11
+ import {
12
+ __spreadValues
13
+ } from "./chunk-N3ETBM74.js";
10
14
 
11
15
  // src/core/auth/services/login.service.ts
12
16
  import { compare } from "bcryptjs";
17
+ var DUMMY_PASSWORD_HASH = "$2b$12$/l4jMXYcTL.SQgNWzy1UcuSlrtLlw.GFTpWDYTficzN2kRhN/LwEO";
13
18
  var LoginService = class {
14
19
  constructor(config) {
15
20
  var _a, _b, _c;
@@ -20,6 +25,7 @@ var LoginService = class {
20
25
  refreshTokenExpiry: (_b = config.refreshTokenExpiry) != null ? _b : JWT_DEFAULTS.DEFAULT_REFRESH_TOKEN_EXPIRES,
21
26
  algorithm: JWT_DEFAULTS.ALGORITHM
22
27
  }, config.logger);
28
+ this.passwordHasher = config.passwordHasher;
23
29
  this.logger = (_c = config.logger) != null ? _c : { debug() {
24
30
  }, info() {
25
31
  }, warn() {
@@ -30,12 +36,17 @@ var LoginService = class {
30
36
  var _a;
31
37
  const user = await this.userRepo.findByEmail(email);
32
38
  if (!user) {
39
+ if (this.passwordHasher) {
40
+ await this.passwordHasher.hash(password).catch(() => void 0);
41
+ } else {
42
+ await compare(password, DUMMY_PASSWORD_HASH);
43
+ }
33
44
  throw new AuthError("Invalid credentials", "INVALID_CREDENTIALS", 401);
34
45
  }
35
46
  if (user.isActive === false) {
36
47
  throw new AuthError("Account is disabled", "ACCOUNT_DISABLED", 403);
37
48
  }
38
- const isValid = await compare(password, storedHash);
49
+ const isValid = this.passwordHasher ? await this.passwordHasher.verify(password, storedHash) : await compare(password, storedHash);
39
50
  if (!isValid) {
40
51
  this.logger.warn("Failed login attempt", { email });
41
52
  throw new AuthError("Invalid credentials", "INVALID_CREDENTIALS", 401);
@@ -43,12 +54,20 @@ var LoginService = class {
43
54
  const tokens = await this.jwtService.createTokenPair({
44
55
  id: user.id,
45
56
  email: user.email,
46
- role: (_a = user.role) != null ? _a : "USER",
57
+ role: (_a = user.role) != null ? _a : ROLE_DEFAULTS.DEFAULT_ROLE,
47
58
  emailVerified: user.emailVerified
48
59
  });
60
+ let rehashedPassword;
61
+ if (this.passwordHasher && this.passwordHasher.needsRehash(storedHash)) {
62
+ try {
63
+ rehashedPassword = await this.passwordHasher.hash(password);
64
+ } catch (error) {
65
+ this.logger.warn("Password rehash failed", { userId: user.id, error });
66
+ }
67
+ }
49
68
  await this.userRepo.updateLastLoginAt(user.id);
50
69
  this.logger.info("User logged in successfully", { userId: user.id });
51
- return { user, tokens };
70
+ return __spreadValues({ user, tokens }, rehashedPassword ? { rehashedPassword } : {});
52
71
  }
53
72
  };
54
73
 
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-XQIAXMRY.js";
7
7
  import {
8
8
  logger
9
- } from "./chunk-KG65BFPK.js";
9
+ } from "./chunk-QAIN3WNN.js";
10
10
 
11
11
  // src/next/middleware/rate-limit.ts
12
12
  var GLOBAL_KEY = "__withwiz_rateLimitAdapter__";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  runCommand,
3
3
  runMacCommand
4
- } from "./chunk-4KJZRI74.js";
4
+ } from "./chunk-KWUOLKDO.js";
5
5
  import {
6
6
  logger
7
- } from "./chunk-KG65BFPK.js";
7
+ } from "./chunk-QAIN3WNN.js";
8
8
 
9
9
  // src/core/system/memory.ts
10
10
  import os from "os";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-7ZO5UNTJ.js";
4
4
  import {
5
5
  logger
6
- } from "./chunk-KG65BFPK.js";
6
+ } from "./chunk-QAIN3WNN.js";
7
7
 
8
8
  // src/next/middleware/cors.ts
9
9
  import { NextResponse } from "next/server";
@@ -25,6 +25,7 @@ function createCorsMiddleware(config) {
25
25
  const response2 = new NextResponse(null, { status: 204 });
26
26
  if (origin && allowedOrigins.includes(origin)) {
27
27
  response2.headers.set("Access-Control-Allow-Origin", origin);
28
+ response2.headers.append("Vary", "Origin");
28
29
  if (allowCredentials) {
29
30
  response2.headers.set("Access-Control-Allow-Credentials", "true");
30
31
  }
@@ -39,6 +40,7 @@ function createCorsMiddleware(config) {
39
40
  const response = await next();
40
41
  if (origin && allowedOrigins.includes(origin)) {
41
42
  response.headers.set("Access-Control-Allow-Origin", origin);
43
+ response.headers.append("Vary", "Origin");
42
44
  if (allowCredentials) {
43
45
  response.headers.set("Access-Control-Allow-Credentials", "true");
44
46
  }