@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
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Pluggable Password Hashing
3
+ *
4
+ * `IPasswordHasher` 추상화로 해시 백엔드를 교체 가능하게 한다.
5
+ * - `BcryptPasswordHasher`: 기본(bcryptjs). 하드 의존성.
6
+ * - `Argon2idPasswordHasher`: argon2id. `argon2` 패키지를 지연 import 하는
7
+ * optional 의존성 — 설치되지 않으면 verify/hash 호출 시 명확한 에러를 던진다.
8
+ * - `MigratingPasswordHasher`: preferred + legacy 해셔를 조합해 레거시 해시를
9
+ * 검증하고(scrypt→bcrypt 등) rehash 대상 여부를 판정한다 (rehash-on-login).
10
+ *
11
+ * rehash-on-login 흐름: 로그인 시 verify() 성공 후 needsRehash(storedHash) 가
12
+ * true 면 preferred 스킴으로 다시 해싱해 저장한다. 평문은 로그인 시점에만
13
+ * 존재하므로 이 시점이 무중단 마이그레이션의 유일한 기회다.
14
+ */
15
+ export interface IPasswordHasher {
16
+ /** 스킴 식별자 (예: 'bcrypt', 'argon2id'). 로깅/디버깅용. */
17
+ readonly id: string;
18
+ /** 이 해셔가 인식하는 해시 포맷인지 판정 (verify 위임 라우팅에 사용). */
19
+ identifies(hash: string): boolean;
20
+ /** 평문을 이 해셔의 스킴으로 해싱. */
21
+ hash(password: string): Promise<string>;
22
+ /** 평문과 해시 비교. */
23
+ verify(password: string, hash: string): Promise<boolean>;
24
+ /**
25
+ * 이 해시를 다시 해싱해야 하는지 판정한다.
26
+ * - 다른 스킴이거나(스킴 마이그레이션)
27
+ * - 같은 스킴이지만 파라미터가 현재 설정보다 약하면 true.
28
+ */
29
+ needsRehash(hash: string): boolean;
30
+ }
31
+ export interface BcryptHasherOptions {
32
+ /** bcrypt cost factor. 기본 12. */
33
+ rounds?: number;
34
+ }
35
+ export declare class BcryptPasswordHasher implements IPasswordHasher {
36
+ readonly id = "bcrypt";
37
+ private rounds;
38
+ constructor(options?: BcryptHasherOptions);
39
+ identifies(hash: string): boolean;
40
+ hash(password: string): Promise<string>;
41
+ verify(password: string, hash: string): Promise<boolean>;
42
+ needsRehash(hash: string): boolean;
43
+ }
44
+ export interface Argon2idHasherOptions {
45
+ /** 메모리 비용 (KiB). 기본 19456 (= 19 MiB, OWASP 권장 하한). */
46
+ memoryCost?: number;
47
+ /** 반복 횟수. 기본 2. */
48
+ timeCost?: number;
49
+ /** 병렬성. 기본 1. */
50
+ parallelism?: number;
51
+ }
52
+ /** 테스트 전용: 지연 로드된 argon2 모듈 캐시를 초기화한다. */
53
+ export declare function __resetArgon2Cache(): void;
54
+ export declare class Argon2idPasswordHasher implements IPasswordHasher {
55
+ readonly id = "argon2id";
56
+ private memoryCost;
57
+ private timeCost;
58
+ private parallelism;
59
+ constructor(options?: Argon2idHasherOptions);
60
+ identifies(hash: string): boolean;
61
+ hash(password: string): Promise<string>;
62
+ verify(password: string, hash: string): Promise<boolean>;
63
+ needsRehash(hash: string): boolean;
64
+ }
65
+ export interface MigratingHasherOptions {
66
+ /** 신규 해시 및 rehash 대상 스킴. */
67
+ preferred: IPasswordHasher;
68
+ /**
69
+ * 검증만 지원하는 레거시 해셔들 (예: 소비자가 구현한 scrypt 어댑터).
70
+ * verify 시 preferred 다음 순서로 매칭을 시도한다.
71
+ */
72
+ legacy?: IPasswordHasher[];
73
+ }
74
+ export declare class MigratingPasswordHasher implements IPasswordHasher {
75
+ private preferred;
76
+ private legacy;
77
+ constructor(options: MigratingHasherOptions);
78
+ get id(): string;
79
+ identifies(hash: string): boolean;
80
+ hash(password: string): Promise<string>;
81
+ verify(password: string, hash: string): Promise<boolean>;
82
+ needsRehash(hash: string): boolean;
83
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ Argon2idPasswordHasher,
3
+ BcryptPasswordHasher,
4
+ MigratingPasswordHasher,
5
+ __resetArgon2Cache
6
+ } from "../../../chunk-ILMPKSWS.js";
7
+ import "../../../chunk-5GWGARXI.js";
8
+ import "../../../chunk-N3ETBM74.js";
9
+ export {
10
+ Argon2idPasswordHasher,
11
+ BcryptPasswordHasher,
12
+ MigratingPasswordHasher,
13
+ __resetArgon2Cache
14
+ };
@@ -4,8 +4,8 @@
4
4
  * 비밀번호 검증 및 강도 측정 모듈 (프레임워크 독립적)
5
5
  */
6
6
  import { z } from 'zod';
7
- import type { PasswordConfig } from '@withwiz/core/auth/types';
8
- import { PasswordStrength, type PasswordValidationResult as BasePasswordValidationResult } from '@withwiz/core/auth/types';
7
+ import type { PasswordConfig } from '@withwiz/toolkit/core/auth/types';
8
+ import { PasswordStrength, type PasswordValidationResult as BasePasswordValidationResult } from '@withwiz/toolkit/core/auth/types';
9
9
  export interface PasswordValidationResult extends BasePasswordValidationResult {
10
10
  score: number;
11
11
  }
@@ -32,7 +32,7 @@ export declare class PasswordValidator {
32
32
  /**
33
33
  * Zod 스키마 생성
34
34
  */
35
- createZodSchema(): z.ZodString;
35
+ createZodSchema(): z.ZodType<string>;
36
36
  /**
37
37
  * 비밀번호 힌트 생성
38
38
  */
@@ -62,10 +62,12 @@ export declare class PasswordHasher {
62
62
  * 기본 비밀번호 스키마 (기존 코드 호환성)
63
63
  * 최소 8자, 숫자 포함
64
64
  */
65
- export declare const defaultPasswordSchema: z.ZodString;
65
+ export declare const defaultPasswordSchema: z.ZodEffects<z.ZodString, string, string>;
66
66
  /**
67
67
  * 강력한 비밀번호 스키마 (기존 코드 호환성)
68
68
  * 최소 12자, 대소문자, 숫자, 특수문자 포함
69
69
  */
70
- export declare const strongPasswordSchema: z.ZodString;
71
- export type { PasswordConfig, PasswordStrength } from '@withwiz/core/auth/types';
70
+ export declare const strongPasswordSchema: z.ZodEffects<z.ZodString, string, string>;
71
+ export { BcryptPasswordHasher, Argon2idPasswordHasher, MigratingPasswordHasher, } from '@withwiz/toolkit/core/auth/password/hasher';
72
+ export type { IPasswordHasher, BcryptHasherOptions, Argon2idHasherOptions, MigratingHasherOptions, } from '@withwiz/toolkit/core/auth/password/hasher';
73
+ export type { PasswordConfig, PasswordStrength } from '@withwiz/toolkit/core/auth/types';
@@ -3,10 +3,19 @@ import {
3
3
  PasswordValidator,
4
4
  defaultPasswordSchema,
5
5
  strongPasswordSchema
6
- } from "../../../chunk-MNYVAEXK.js";
6
+ } from "../../../chunk-4ROIPF33.js";
7
+ import {
8
+ Argon2idPasswordHasher,
9
+ BcryptPasswordHasher,
10
+ MigratingPasswordHasher
11
+ } from "../../../chunk-ILMPKSWS.js";
7
12
  import "../../../chunk-GH3U4WRE.js";
8
- import "../../../chunk-ORMEWXMH.js";
13
+ import "../../../chunk-5GWGARXI.js";
14
+ import "../../../chunk-N3ETBM74.js";
9
15
  export {
16
+ Argon2idPasswordHasher,
17
+ BcryptPasswordHasher,
18
+ MigratingPasswordHasher,
10
19
  PasswordHasher,
11
20
  PasswordValidator,
12
21
  defaultPasswordSchema,
@@ -1,4 +1,4 @@
1
- import type { UserRepository, EmailTokenRepository, EmailSender, Logger } from '../types';
1
+ import type { UserRepository, EmailTokenRepository, EmailSender, Logger } from '@withwiz/toolkit/core/auth/types';
2
2
  export interface EmailVerificationServiceConfig {
3
3
  userRepository: UserRepository;
4
4
  emailTokenRepository: EmailTokenRepository;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  EmailVerificationService
3
- } from "../../../chunk-AQZPGOEZ.js";
4
- import "../../../chunk-D73ZJQMX.js";
3
+ } from "../../../chunk-VWKZMGPJ.js";
4
+ import "../../../chunk-ZZABL54F.js";
5
5
  import "../../../chunk-GH3U4WRE.js";
6
6
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-ORMEWXMH.js";
7
+ import "../../../chunk-N3ETBM74.js";
8
8
  export {
9
9
  EmailVerificationService
10
10
  };
@@ -1,12 +1,13 @@
1
- export { LoginService } from './login.service';
2
- export type { LoginServiceConfig, LoginResult } from './login.service';
3
- export { RegisterService } from './register.service';
4
- export type { RegisterServiceConfig, RegisterInput, RegisterResult } from './register.service';
5
- export { OAuthCallbackService } from './oauth-callback.service';
6
- export type { OAuthCallbackServiceConfig, OAuthCallbackInput, OAuthCallbackResult } from './oauth-callback.service';
7
- export { TokenRefreshService } from './token-refresh.service';
8
- export type { TokenRefreshServiceConfig, RefreshResult } from './token-refresh.service';
9
- export { PasswordResetService } from './password-reset.service';
10
- export type { PasswordResetServiceConfig } from './password-reset.service';
11
- export { EmailVerificationService } from './email-verification.service';
12
- export type { EmailVerificationServiceConfig } from './email-verification.service';
1
+ export { LoginService } from '@withwiz/toolkit/core/auth/services/login.service';
2
+ export type { LoginServiceConfig, LoginResult } from '@withwiz/toolkit/core/auth/services/login.service';
3
+ export { RegisterService } from '@withwiz/toolkit/core/auth/services/register.service';
4
+ export type { RegisterServiceConfig, RegisterInput, RegisterResult } from '@withwiz/toolkit/core/auth/services/register.service';
5
+ export { OAuthCallbackService } from '@withwiz/toolkit/core/auth/services/oauth-callback.service';
6
+ export type { OAuthCallbackServiceConfig, OAuthCallbackInput, OAuthCallbackResult } from '@withwiz/toolkit/core/auth/services/oauth-callback.service';
7
+ export { TokenRefreshService } from '@withwiz/toolkit/core/auth/services/token-refresh.service';
8
+ export type { TokenRefreshServiceConfig, RefreshResult } from '@withwiz/toolkit/core/auth/services/token-refresh.service';
9
+ export type { IRefreshTokenStore, RefreshTokenRecord } from '@withwiz/toolkit/core/auth/services/refresh-token-store';
10
+ export { PasswordResetService } from '@withwiz/toolkit/core/auth/services/password-reset.service';
11
+ export type { PasswordResetServiceConfig } from '@withwiz/toolkit/core/auth/services/password-reset.service';
12
+ export { EmailVerificationService } from '@withwiz/toolkit/core/auth/services/email-verification.service';
13
+ export type { EmailVerificationServiceConfig } from '@withwiz/toolkit/core/auth/services/email-verification.service';
@@ -1,31 +1,31 @@
1
1
  import {
2
2
  LoginService
3
- } from "../../../chunk-B5VRZ2VJ.js";
4
- import {
5
- RegisterService
6
- } from "../../../chunk-LUIYCIF7.js";
3
+ } from "../../../chunk-TNDEYJEL.js";
7
4
  import {
8
5
  EmailVerificationService
9
- } from "../../../chunk-AQZPGOEZ.js";
10
- import {
11
- PasswordResetService
12
- } from "../../../chunk-N5VOFGF3.js";
6
+ } from "../../../chunk-VWKZMGPJ.js";
13
7
  import {
14
8
  OAuthCallbackService
15
- } from "../../../chunk-BBE4RXR7.js";
9
+ } from "../../../chunk-MTZXWVW3.js";
16
10
  import {
17
11
  TokenRefreshService
18
- } from "../../../chunk-ARXUKGZI.js";
19
- import "../../../chunk-D73ZJQMX.js";
12
+ } from "../../../chunk-XAGPZLRK.js";
13
+ import {
14
+ RegisterService
15
+ } from "../../../chunk-Y4ME3Q5K.js";
16
+ import {
17
+ PasswordResetService
18
+ } from "../../../chunk-75UDFONR.js";
19
+ import "../../../chunk-LWHLB2Y6.js";
20
+ import "../../../chunk-ZZABL54F.js";
20
21
  import "../../../chunk-GH3U4WRE.js";
21
- import "../../../chunk-2PFSRVVD.js";
22
- import "../../../chunk-RJGYONRO.js";
23
22
  import "../../../chunk-5GWGARXI.js";
24
- import "../../../chunk-KYAHURXN.js";
25
- import "../../../chunk-2SIBG5BG.js";
23
+ import "../../../chunk-PRPMEHRE.js";
24
+ import "../../../chunk-N3TCQ5BF.js";
25
+ import "../../../chunk-7YWUKMZD.js";
26
26
  import "../../../chunk-6J2EJVND.js";
27
27
  import "../../../chunk-F3R3UYBF.js";
28
- import "../../../chunk-ORMEWXMH.js";
28
+ import "../../../chunk-N3ETBM74.js";
29
29
  export {
30
30
  EmailVerificationService,
31
31
  LoginService,
@@ -1,18 +1,32 @@
1
- import type { UserRepository, BaseUser, TokenPair, Logger } from '../types';
1
+ import type { UserRepository, BaseUser, TokenPair, Logger } from '@withwiz/toolkit/core/auth/types';
2
+ import type { IPasswordHasher } from '@withwiz/toolkit/core/auth/password/hasher';
2
3
  export interface LoginServiceConfig {
3
4
  userRepository: UserRepository;
4
5
  jwtSecret: string;
5
6
  accessTokenExpiry?: string;
6
7
  refreshTokenExpiry?: string;
8
+ /**
9
+ * 비밀번호 검증/재해시에 사용할 pluggable 해셔.
10
+ * 미지정 시 bcryptjs.compare 로 폴백한다 (하위 호환).
11
+ * `MigratingPasswordHasher` 를 주입하면 레거시 해시(scrypt 등)를 검증하고
12
+ * needsRehash 시 LoginResult.rehashedPassword 로 신규 해시를 반환한다.
13
+ */
14
+ passwordHasher?: IPasswordHasher;
7
15
  logger?: Logger;
8
16
  }
9
17
  export interface LoginResult {
10
18
  user: BaseUser;
11
19
  tokens: TokenPair;
20
+ /**
21
+ * storedHash 가 재해시 대상일 때(rehash-on-login)에만 채워진다.
22
+ * 소비자는 이 값을 사용자 레코드에 저장해 무중단 해시 마이그레이션을 수행한다.
23
+ */
24
+ rehashedPassword?: string;
12
25
  }
13
26
  export declare class LoginService {
14
27
  private jwtService;
15
28
  private userRepo;
29
+ private passwordHasher?;
16
30
  private logger;
17
31
  constructor(config: LoginServiceConfig);
18
32
  login(email: string, password: string, storedHash: string): Promise<LoginResult>;
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  LoginService
3
- } from "../../../chunk-B5VRZ2VJ.js";
4
- import "../../../chunk-2PFSRVVD.js";
5
- import "../../../chunk-RJGYONRO.js";
3
+ } from "../../../chunk-TNDEYJEL.js";
4
+ import "../../../chunk-LWHLB2Y6.js";
6
5
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-KYAHURXN.js";
8
- import "../../../chunk-2SIBG5BG.js";
6
+ import "../../../chunk-PRPMEHRE.js";
7
+ import "../../../chunk-N3TCQ5BF.js";
8
+ import "../../../chunk-7YWUKMZD.js";
9
9
  import "../../../chunk-6J2EJVND.js";
10
10
  import "../../../chunk-F3R3UYBF.js";
11
- import "../../../chunk-ORMEWXMH.js";
11
+ import "../../../chunk-N3ETBM74.js";
12
12
  export {
13
13
  LoginService
14
14
  };
@@ -1,4 +1,4 @@
1
- import type { UserRepository, OAuthAccountRepository, BaseUser, TokenPair, Logger } from '../types';
1
+ import type { UserRepository, OAuthAccountRepository, BaseUser, TokenPair, Logger } from '@withwiz/toolkit/core/auth/types';
2
2
  export interface OAuthCallbackServiceConfig {
3
3
  userRepository: UserRepository;
4
4
  oauthAccountRepository: OAuthAccountRepository;
@@ -15,6 +15,12 @@ export interface OAuthCallbackInput {
15
15
  image: string | null;
16
16
  accessToken: string;
17
17
  refreshToken?: string;
18
+ /**
19
+ * provider 가 이 이메일을 검증했는지 여부. 기존 로컬 계정에 OAuth 를
20
+ * 연결할 때 반드시 true 여야 한다(미검증/부재 시 계정 탈취 방지를 위해 차단).
21
+ * OAuthUserInfo.emailVerified 를 그대로 전달할 것.
22
+ */
23
+ emailVerified?: boolean;
18
24
  }
19
25
  export interface OAuthCallbackResult {
20
26
  user: BaseUser;
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  OAuthCallbackService
3
- } from "../../../chunk-BBE4RXR7.js";
4
- import "../../../chunk-2PFSRVVD.js";
5
- import "../../../chunk-RJGYONRO.js";
3
+ } from "../../../chunk-MTZXWVW3.js";
4
+ import "../../../chunk-LWHLB2Y6.js";
6
5
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-KYAHURXN.js";
8
- import "../../../chunk-2SIBG5BG.js";
6
+ import "../../../chunk-PRPMEHRE.js";
7
+ import "../../../chunk-N3TCQ5BF.js";
8
+ import "../../../chunk-7YWUKMZD.js";
9
9
  import "../../../chunk-6J2EJVND.js";
10
10
  import "../../../chunk-F3R3UYBF.js";
11
- import "../../../chunk-ORMEWXMH.js";
11
+ import "../../../chunk-N3ETBM74.js";
12
12
  export {
13
13
  OAuthCallbackService
14
14
  };
@@ -1,4 +1,4 @@
1
- import type { UserRepository, EmailTokenRepository, EmailSender, Logger } from '../types';
1
+ import type { UserRepository, EmailTokenRepository, EmailSender, Logger } from '@withwiz/toolkit/core/auth/types';
2
2
  export interface PasswordResetServiceConfig {
3
3
  userRepository: UserRepository;
4
4
  emailTokenRepository: EmailTokenRepository;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  PasswordResetService
3
- } from "../../../chunk-N5VOFGF3.js";
4
- import "../../../chunk-D73ZJQMX.js";
3
+ } from "../../../chunk-75UDFONR.js";
4
+ import "../../../chunk-ZZABL54F.js";
5
5
  import "../../../chunk-GH3U4WRE.js";
6
6
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-ORMEWXMH.js";
7
+ import "../../../chunk-N3ETBM74.js";
8
8
  export {
9
9
  PasswordResetService
10
10
  };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Refresh Token Store (rotation + reuse detection)
3
+ *
4
+ * stateful refresh 토큰 추적 추상화. 구현은 소비자 몫(Redis/DB/메모리).
5
+ *
6
+ * 모델:
7
+ * - 각 refresh 토큰은 고유 `jti` 를 가지며 회전 계보(`familyId`)에 속한다.
8
+ * - 로그인 시 새 family 가 생성되고, 회전할 때마다 같은 family 안에서 새 jti 가
9
+ * 발급되며 구 jti 는 used 로 표시된다.
10
+ * - 이미 used 인 jti 가 다시 제출되면(=회전된 토큰 재사용) 탈취로 간주하고
11
+ * family 전체를 무효화한다(reuse detection).
12
+ * - 로그아웃은 family 무효화로 즉시 stateful 무효화를 제공한다.
13
+ *
14
+ * reuse detection 에 필수인 것은 `isUsed`/`markUsed`/`isFamilyRevoked`/
15
+ * `revokeFamily` 네 개다. `register` 는 TTL·감사 목적의 선택적 훅이다.
16
+ */
17
+ export interface RefreshTokenRecord {
18
+ jti: string;
19
+ familyId: string;
20
+ userId: string;
21
+ /** 토큰 만료 시각 — store TTL 설정에 사용 가능. */
22
+ expiresAt?: Date;
23
+ }
24
+ export interface IRefreshTokenStore {
25
+ /** 이 jti 가 이미 회전(소비)되었는지 여부. */
26
+ isUsed(jti: string): Promise<boolean>;
27
+ /** 회전 시 구 jti 를 소비 처리한다. meta 로 TTL/계보 정보를 함께 줄 수 있다. */
28
+ markUsed(jti: string, meta?: {
29
+ familyId: string;
30
+ userId: string;
31
+ expiresAt?: Date;
32
+ }): Promise<void>;
33
+ /** family 전체가 무효화되었는지 여부. */
34
+ isFamilyRevoked(familyId: string): Promise<boolean>;
35
+ /** family 전체 무효화 (reuse 탐지 / 로그아웃). */
36
+ revokeFamily(familyId: string): Promise<void>;
37
+ /** (선택) 새 refresh 발급 기록 — store TTL/감사용. */
38
+ register?(record: RefreshTokenRecord): Promise<void>;
39
+ }
@@ -1,4 +1,4 @@
1
- import type { UserRepository, EmailTokenRepository, EmailSender, BaseUser, Logger } from '../types';
1
+ import type { UserRepository, EmailTokenRepository, EmailSender, BaseUser, Logger } from '@withwiz/toolkit/core/auth/types';
2
2
  export interface RegisterServiceConfig {
3
3
  userRepository: UserRepository;
4
4
  emailTokenRepository: EmailTokenRepository;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  RegisterService
3
- } from "../../../chunk-LUIYCIF7.js";
4
- import "../../../chunk-D73ZJQMX.js";
3
+ } from "../../../chunk-Y4ME3Q5K.js";
4
+ import "../../../chunk-ZZABL54F.js";
5
5
  import "../../../chunk-GH3U4WRE.js";
6
6
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-ORMEWXMH.js";
7
+ import "../../../chunk-N3ETBM74.js";
8
8
  export {
9
9
  RegisterService
10
10
  };
@@ -1,14 +1,29 @@
1
- import type { UserRepository, Logger } from '../types';
1
+ import type { UserRepository, Logger } from '@withwiz/toolkit/core/auth/types';
2
+ import type { IRefreshTokenStore } from '@withwiz/toolkit/core/auth/services/refresh-token-store';
2
3
  export interface TokenRefreshServiceConfig {
3
4
  userRepository: UserRepository;
4
5
  jwtSecret: string;
5
6
  accessTokenExpiry?: string;
6
7
  refreshTokenExpiry?: string;
7
8
  isTokenBlacklisted?: (token: string) => Promise<boolean>;
9
+ /**
10
+ * 주입 시 refresh 토큰 회전(rotation) + 재사용 탐지(reuse detection)를 활성화한다.
11
+ * - 회전: refresh 마다 새 refresh 를 발급하고 구 jti 를 used 로 표시한다.
12
+ * - 재사용 탐지: 이미 used 인 jti 재제출 → family 전체 무효화(탈취 대응).
13
+ * 미주입 시 0.8 이전과 동일하게 access 토큰만 재발급한다(하위 호환).
14
+ *
15
+ * 주의: 동시 요청 경쟁을 막으려면 store 의 isUsed→markUsed 는 원자적이어야 한다.
16
+ */
17
+ refreshTokenStore?: IRefreshTokenStore;
8
18
  logger?: Logger;
9
19
  }
10
20
  export interface RefreshResult {
11
21
  accessToken: string;
22
+ /**
23
+ * 회전이 일어난 경우(store 주입 시)에만 채워진다. 소비자는 이 값으로 기존
24
+ * refresh 토큰(쿠키 등)을 교체해야 한다.
25
+ */
26
+ refreshToken?: string;
12
27
  user: {
13
28
  id: string;
14
29
  email: string;
@@ -19,7 +34,18 @@ export declare class TokenRefreshService {
19
34
  private userRepo;
20
35
  private jwtService;
21
36
  private isTokenBlacklisted?;
37
+ private store?;
22
38
  private logger;
23
39
  constructor(config: TokenRefreshServiceConfig);
24
40
  refresh(refreshToken: string): Promise<RefreshResult>;
41
+ /**
42
+ * family 전체를 즉시 무효화한다 (stateful 로그아웃 / 탈취 대응).
43
+ * store 미주입 시 동작하지 않는다.
44
+ */
45
+ revokeFamily(familyId: string): Promise<void>;
46
+ /**
47
+ * refresh 토큰을 검증해 그 family 를 무효화한다 (로그아웃 핸들러용).
48
+ * 토큰에 familyId 가 없으면(레거시) 무효화할 family 가 없으므로 무시한다.
49
+ */
50
+ revokeByToken(refreshToken: string): Promise<void>;
25
51
  }
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  TokenRefreshService
3
- } from "../../../chunk-ARXUKGZI.js";
4
- import "../../../chunk-2PFSRVVD.js";
5
- import "../../../chunk-RJGYONRO.js";
3
+ } from "../../../chunk-XAGPZLRK.js";
4
+ import "../../../chunk-LWHLB2Y6.js";
6
5
  import "../../../chunk-5GWGARXI.js";
7
- import "../../../chunk-KYAHURXN.js";
8
- import "../../../chunk-2SIBG5BG.js";
6
+ import "../../../chunk-PRPMEHRE.js";
7
+ import "../../../chunk-N3TCQ5BF.js";
8
+ import "../../../chunk-7YWUKMZD.js";
9
9
  import "../../../chunk-6J2EJVND.js";
10
10
  import "../../../chunk-F3R3UYBF.js";
11
- import "../../../chunk-ORMEWXMH.js";
11
+ import "../../../chunk-N3ETBM74.js";
12
12
  export {
13
13
  TokenRefreshService
14
14
  };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * 토큰 전달 전략 — tokenDelivery 모드(cookie/header/hybrid)별 구현체.
3
+ *
4
+ * 분기 대신 주입: 미들웨어·핸들러는 모드 문자열을 직접 비교하지 않고
5
+ * getTokenDeliveryStrategy() 가 돌려주는 구현체의 메서드를 호출한다.
6
+ * oauth-callback 은 redirect 응답 특성상 전략 비적용(항상 쿠키).
7
+ */
8
+ import type { TokenDelivery } from '@withwiz/toolkit/core/auth/config';
9
+ import type { TokenPair } from '@withwiz/toolkit/core/auth/types';
10
+ import type { CookieOptions } from '@withwiz/toolkit/core/auth/jwt/cookie';
11
+ /** cookies/headers/json 만 구조적으로 요구 — NextRequest 미의존 (core 티어 규칙) */
12
+ export interface TokenSource {
13
+ cookies: {
14
+ get(name: string): {
15
+ value: string;
16
+ } | undefined;
17
+ };
18
+ headers: {
19
+ get(name: string): string | null;
20
+ };
21
+ json?(): Promise<unknown>;
22
+ }
23
+ /** setTokenCookies 가 요구하는 최소 Response 형태 */
24
+ interface CookieSettableResponse {
25
+ cookies: {
26
+ set(name: string, value: string, options?: Record<string, unknown>): void;
27
+ };
28
+ }
29
+ export interface TokenDeliveryStrategy {
30
+ /** access token 추출. Authorization 헤더 파싱은 호출측 JWT 구현에 위임 */
31
+ extractAccessToken(source: TokenSource, parseHeader: (header: string | null) => string | null): string | null;
32
+ /** refresh token 추출 (header/hybrid 는 body { refreshToken } 허용) */
33
+ extractRefreshToken(source: TokenSource): Promise<string | undefined>;
34
+ /** 응답 body 에 토큰 조각 포함 여부 결정 — cookie 모드는 body 그대로 */
35
+ buildTokenResponse(body: Record<string, unknown>, fragment: Record<string, unknown>): Record<string, unknown>;
36
+ /** 토큰 쿠키 설정 — header 모드는 no-op */
37
+ attachCookies<T extends CookieSettableResponse>(response: T, tokens: TokenPair, options?: CookieOptions): T;
38
+ }
39
+ /**
40
+ * tokenDelivery 모드 해석.
41
+ * 우선순위: 옵션 > 전역 AuthConfig > 'hybrid'
42
+ * 요청 시점에 호출할 것 — 핸들러 팩토리는 initialize() 이전에 실행될 수 있다.
43
+ */
44
+ export declare function resolveTokenDelivery(optionValue?: TokenDelivery): TokenDelivery;
45
+ /** 해석된 모드의 전략 구현체 반환 */
46
+ export declare function getTokenDeliveryStrategy(optionValue?: TokenDelivery): TokenDeliveryStrategy;
47
+ export {};
@@ -0,0 +1,14 @@
1
+ import {
2
+ getTokenDeliveryStrategy,
3
+ resolveTokenDelivery
4
+ } from "../../chunk-63EKUOJH.js";
5
+ import "../../chunk-PRPMEHRE.js";
6
+ import "../../chunk-N3TCQ5BF.js";
7
+ import "../../chunk-7YWUKMZD.js";
8
+ import "../../chunk-6J2EJVND.js";
9
+ import "../../chunk-F3R3UYBF.js";
10
+ import "../../chunk-N3ETBM74.js";
11
+ export {
12
+ getTokenDeliveryStrategy,
13
+ resolveTokenDelivery
14
+ };
@@ -10,11 +10,22 @@ export interface Logger {
10
10
  warn(message: string, meta?: any): void;
11
11
  error(message: string, meta?: any): void;
12
12
  }
13
- export interface JWTPayload {
13
+ /**
14
+ * JWT 페이로드.
15
+ *
16
+ * `role`은 평범한 `string`이며 toolkit은 고정 role enum을 소유하지 않는다.
17
+ * 소비자가 자체 역할 어휘(union/enum)를 가지면 타입 인자로 좁힐 수 있다.
18
+ *
19
+ * @example
20
+ * type AppRole = 'USER' | 'EDITOR' | 'ADMIN';
21
+ * const payload = await jwt.verifyAccessToken<AppRole>(token);
22
+ * payload.role; // 'USER' | 'EDITOR' | 'ADMIN'
23
+ */
24
+ export interface JWTPayload<TRole extends string = string> {
14
25
  id: string;
15
26
  userId: string;
16
27
  email: string;
17
- role: string;
28
+ role: TRole;
18
29
  emailVerified?: Date | null;
19
30
  tokenType?: 'access' | 'refresh';
20
31
  iat?: number;
@@ -24,11 +35,34 @@ export interface TokenPair {
24
35
  accessToken: string;
25
36
  refreshToken: string;
26
37
  }
38
+ /** 대칭 HMAC 알고리즘 — 단일 secret 으로 발급·검증. */
39
+ export type SymmetricJWTAlgorithm = 'HS256' | 'HS384' | 'HS512';
40
+ /** 비대칭 알고리즘 — privateKey 로 발급, publicKey/JWKS 로 검증. */
41
+ export type AsymmetricJWTAlgorithm = 'RS256' | 'RS384' | 'RS512' | 'ES256' | 'ES384' | 'ES512' | 'EdDSA';
42
+ export type JWTAlgorithm = SymmetricJWTAlgorithm | AsymmetricJWTAlgorithm;
43
+ /**
44
+ * JWT 설정.
45
+ *
46
+ * - HS 계열(대칭): `secret`(>= 32자) 필수. 발급·검증 동일 키.
47
+ * - RS·ES·EdDSA 계열(비대칭): 발급에는 `privateKey`(PEM PKCS#8), 검증에는
48
+ * `publicKey`(PEM SPKI) 또는 `jwksUri`(원격 JWKS) 필요. 발급/검증을 분리한
49
+ * 서비스에서는 한쪽만 설정한다(검증 전용 서비스는 privateKey 생략).
50
+ *
51
+ * 보안: 검증 시 알고리즘 allowlist 를 `algorithm` 한 개로 고정해 alg confusion
52
+ * (예: RS256 토큰을 HS256 으로 검증시켜 공개키를 HMAC 비밀로 악용)을 차단한다.
53
+ */
27
54
  export interface JWTConfig {
28
- secret: string;
55
+ algorithm: JWTAlgorithm;
29
56
  accessTokenExpiry: string;
30
57
  refreshTokenExpiry: string;
31
- algorithm: 'HS256' | 'HS384' | 'HS512';
58
+ /** HS* 대칭키 (>= 32자). */
59
+ secret?: string;
60
+ /** 비대칭 발급용 개인키 (PEM PKCS#8). */
61
+ privateKey?: string;
62
+ /** 비대칭 검증용 공개키 (PEM SPKI). `jwksUri` 와 택일. */
63
+ publicKey?: string;
64
+ /** 비대칭 검증용 원격 JWKS endpoint. `publicKey` 와 택일. */
65
+ jwksUri?: string;
32
66
  }
33
67
  export declare const OAUTH_PROVIDERS: {
34
68
  readonly GOOGLE: "google";
@@ -3,7 +3,7 @@ import {
3
3
  PasswordStrength,
4
4
  TokenType
5
5
  } from "../../../chunk-GH3U4WRE.js";
6
- import "../../../chunk-ORMEWXMH.js";
6
+ import "../../../chunk-N3ETBM74.js";
7
7
  export {
8
8
  OAUTH_PROVIDERS,
9
9
  PasswordStrength,