@withwiz/toolkit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +162 -0
  2. package/dist/auth/adapters/prisma/index.d.ts +43 -0
  3. package/dist/auth/adapters/prisma/index.js +284 -0
  4. package/dist/auth/core/email/token-generator.d.ts +43 -0
  5. package/dist/auth/core/email/token-generator.js +7 -0
  6. package/dist/auth/core/jwt/client.d.ts +87 -0
  7. package/dist/auth/core/jwt/client.js +36 -0
  8. package/dist/auth/core/jwt/index.d.ts +110 -0
  9. package/dist/auth/core/jwt/index.js +10 -0
  10. package/dist/auth/core/jwt/types.d.ts +6 -0
  11. package/dist/auth/core/jwt/types.js +13 -0
  12. package/dist/auth/core/oauth/index.d.ts +51 -0
  13. package/dist/auth/core/oauth/index.js +12 -0
  14. package/dist/auth/core/password/client-helper.d.ts +44 -0
  15. package/dist/auth/core/password/client-helper.js +28 -0
  16. package/dist/auth/core/password/index.d.ts +71 -0
  17. package/dist/auth/core/password/index.js +14 -0
  18. package/dist/auth/errors/index.d.ts +49 -0
  19. package/dist/auth/errors/index.js +17 -0
  20. package/dist/auth/index.d.ts +21 -0
  21. package/dist/auth/index.js +97 -0
  22. package/dist/auth/types/index.d.ts +213 -0
  23. package/dist/auth/types/index.js +13 -0
  24. package/dist/cache/cache-config.d.ts +73 -0
  25. package/dist/cache/cache-config.js +12 -0
  26. package/dist/cache/cache-defaults.d.ts +141 -0
  27. package/dist/cache/cache-defaults.js +33 -0
  28. package/dist/cache/cache-env.d.ts +75 -0
  29. package/dist/cache/cache-env.js +25 -0
  30. package/dist/cache/cache-factory.d.ts +34 -0
  31. package/dist/cache/cache-factory.js +28 -0
  32. package/dist/cache/cache-invalidation.d.ts +90 -0
  33. package/dist/cache/cache-invalidation.js +24 -0
  34. package/dist/cache/cache-keys-legacy.d.ts +35 -0
  35. package/dist/cache/cache-keys-legacy.js +7 -0
  36. package/dist/cache/cache-redis.d.ts +74 -0
  37. package/dist/cache/cache-redis.js +24 -0
  38. package/dist/cache/cache-types.d.ts +151 -0
  39. package/dist/cache/cache-types.js +9 -0
  40. package/dist/cache/cache-wrapper.d.ts +27 -0
  41. package/dist/cache/cache-wrapper.js +22 -0
  42. package/dist/cache/cache.d.ts +14 -0
  43. package/dist/cache/cache.js +112 -0
  44. package/dist/cache/hybrid-cache-manager.d.ts +148 -0
  45. package/dist/cache/hybrid-cache-manager.js +13 -0
  46. package/dist/cache/index.d.ts +21 -0
  47. package/dist/cache/index.js +112 -0
  48. package/dist/cache/inmemory-cache-manager.d.ts +163 -0
  49. package/dist/cache/inmemory-cache-manager.js +9 -0
  50. package/dist/cache/noop-cache-manager.d.ts +36 -0
  51. package/dist/cache/noop-cache-manager.js +11 -0
  52. package/dist/cache/redis-cache-manager.d.ts +34 -0
  53. package/dist/cache/redis-cache-manager.js +11 -0
  54. package/dist/chunk-26Y7VEYG.js +93 -0
  55. package/dist/chunk-2DVWSDST.js +119 -0
  56. package/dist/chunk-2KAPUVIS.js +155 -0
  57. package/dist/chunk-2TO7WUKK.js +93 -0
  58. package/dist/chunk-34WAGUT5.js +117 -0
  59. package/dist/chunk-3DZA6AGS.js +120 -0
  60. package/dist/chunk-4DPSCTX4.js +212 -0
  61. package/dist/chunk-4KJXENRM.js +64 -0
  62. package/dist/chunk-4NWJ3WCZ.js +28 -0
  63. package/dist/chunk-4ODT3Q4A.js +86 -0
  64. package/dist/chunk-5ATB5D6S.js +40 -0
  65. package/dist/chunk-62FLBG6B.js +34 -0
  66. package/dist/chunk-62Q7DN5G.js +25 -0
  67. package/dist/chunk-65LHDFU3.js +242 -0
  68. package/dist/chunk-6C7HQIX4.js +13 -0
  69. package/dist/chunk-6D3HHYER.js +32 -0
  70. package/dist/chunk-6LTZCXNC.js +326 -0
  71. package/dist/chunk-7VJNLGAS.js +110 -0
  72. package/dist/chunk-7XFHGAJP.js +0 -0
  73. package/dist/chunk-A6EAAWMK.js +50 -0
  74. package/dist/chunk-AHDPGRXS.js +51 -0
  75. package/dist/chunk-AIH3F7JV.js +76 -0
  76. package/dist/chunk-AIHQBQ3E.js +109 -0
  77. package/dist/chunk-BKGVSC6S.js +152 -0
  78. package/dist/chunk-COK4ZXNG.js +0 -0
  79. package/dist/chunk-DEEJBDJE.js +47 -0
  80. package/dist/chunk-DH2ZHGW2.js +53 -0
  81. package/dist/chunk-EBUEBEJX.js +0 -0
  82. package/dist/chunk-EEUBKZV4.js +54 -0
  83. package/dist/chunk-EQYTE7WD.js +139 -0
  84. package/dist/chunk-EUQATJLI.js +180 -0
  85. package/dist/chunk-EZC6ETFW.js +80 -0
  86. package/dist/chunk-EZR55KV2.js +249 -0
  87. package/dist/chunk-F6LCSFSU.js +31 -0
  88. package/dist/chunk-FOKAATUQ.js +62 -0
  89. package/dist/chunk-FW3IEJ7H.js +71 -0
  90. package/dist/chunk-G26T2PRQ.js +53 -0
  91. package/dist/chunk-G4NI37NN.js +257 -0
  92. package/dist/chunk-GCZOXUDV.js +132 -0
  93. package/dist/chunk-GDWEDUHO.js +55 -0
  94. package/dist/chunk-GL2NANFH.js +434 -0
  95. package/dist/chunk-GPBOMJSZ.js +136 -0
  96. package/dist/chunk-H5I5GWAA.js +94 -0
  97. package/dist/chunk-HGC4CCKB.js +29 -0
  98. package/dist/chunk-HV3DGSSH.js +447 -0
  99. package/dist/chunk-I47QEDTX.js +193 -0
  100. package/dist/chunk-IAJNC34M.js +102 -0
  101. package/dist/chunk-IHXRF3BH.js +215 -0
  102. package/dist/chunk-IJEZ7G7S.js +26 -0
  103. package/dist/chunk-IQQKKUAV.js +151 -0
  104. package/dist/chunk-JBCDEAMW.js +35 -0
  105. package/dist/chunk-JLLMTTQ4.js +75 -0
  106. package/dist/chunk-JS5VI3OW.js +143 -0
  107. package/dist/chunk-KAWVMIRJ.js +44 -0
  108. package/dist/chunk-KMCJIL57.js +214 -0
  109. package/dist/chunk-KWTBD4CM.js +145 -0
  110. package/dist/chunk-KXAWBFJN.js +310 -0
  111. package/dist/chunk-L25BNU3E.js +56 -0
  112. package/dist/chunk-L76O3X3D.js +197 -0
  113. package/dist/chunk-LNV2E4I6.js +63 -0
  114. package/dist/chunk-MLGO3HLS.js +329 -0
  115. package/dist/chunk-MRJE6OX5.js +22 -0
  116. package/dist/chunk-MYLGYX4K.js +57 -0
  117. package/dist/chunk-N4YGR5WH.js +310 -0
  118. package/dist/chunk-OIVXOT2X.js +80 -0
  119. package/dist/chunk-ORMEWXMH.js +37 -0
  120. package/dist/chunk-POKGHK3L.js +57 -0
  121. package/dist/chunk-Q7IP4JMW.js +69 -0
  122. package/dist/chunk-RJUVBBZG.js +27 -0
  123. package/dist/chunk-S73334QY.js +89 -0
  124. package/dist/chunk-SLG26KHZ.js +101 -0
  125. package/dist/chunk-SR65BF6X.js +82 -0
  126. package/dist/chunk-SS56XFLI.js +19 -0
  127. package/dist/chunk-T3LJYAMO.js +277 -0
  128. package/dist/chunk-TDZJ6SAI.js +34 -0
  129. package/dist/chunk-TEIYA7U4.js +72 -0
  130. package/dist/chunk-TMVS4F7E.js +88 -0
  131. package/dist/chunk-TRBKJ7JT.js +137 -0
  132. package/dist/chunk-TXGNSECL.js +84 -0
  133. package/dist/chunk-TZAP5T4N.js +188 -0
  134. package/dist/chunk-UCYQNHST.js +24 -0
  135. package/dist/chunk-ULF5RDDX.js +0 -0
  136. package/dist/chunk-UXQRU3EM.js +167 -0
  137. package/dist/chunk-V5K5FYU7.js +200 -0
  138. package/dist/chunk-VDXB5DCY.js +68 -0
  139. package/dist/chunk-VSGKVZB4.js +47 -0
  140. package/dist/chunk-VWODEQ5C.js +204 -0
  141. package/dist/chunk-WDUFQFDP.js +193 -0
  142. package/dist/chunk-WHR7HPWF.js +126 -0
  143. package/dist/chunk-WSQMXMTL.js +122 -0
  144. package/dist/chunk-XHZ5L4FO.js +103 -0
  145. package/dist/chunk-XPASCCUA.js +404 -0
  146. package/dist/chunk-XRRPEBKB.js +231 -0
  147. package/dist/chunk-Y2TUZFCP.js +0 -0
  148. package/dist/chunk-Y3OTJH2S.js +473 -0
  149. package/dist/chunk-YBSHN67U.js +161 -0
  150. package/dist/chunk-YJ3TLEW3.js +100 -0
  151. package/dist/chunk-YJWLWUFK.js +105 -0
  152. package/dist/chunk-Z4D4CMDA.js +488 -0
  153. package/dist/chunk-ZHVUK5OY.js +314 -0
  154. package/dist/chunk-ZTN4X5FN.js +29 -0
  155. package/dist/chunk-ZZIKRBJU.js +96 -0
  156. package/dist/components/ui/Alert.d.ts +12 -0
  157. package/dist/components/ui/Alert.js +10 -0
  158. package/dist/components/ui/Badge.d.ts +7 -0
  159. package/dist/components/ui/Badge.js +8 -0
  160. package/dist/components/ui/Button.d.ts +7 -0
  161. package/dist/components/ui/Button.js +8 -0
  162. package/dist/components/ui/DataTable.d.ts +103 -0
  163. package/dist/components/ui/DataTable.js +606 -0
  164. package/dist/components/ui/DomainDisplay.d.ts +12 -0
  165. package/dist/components/ui/DomainDisplay.js +31 -0
  166. package/dist/components/ui/Input.d.ts +5 -0
  167. package/dist/components/ui/Input.js +8 -0
  168. package/dist/components/ui/Label.d.ts +5 -0
  169. package/dist/components/ui/Label.js +8 -0
  170. package/dist/components/ui/Pagination.d.ts +42 -0
  171. package/dist/components/ui/Pagination.js +20 -0
  172. package/dist/components/ui/Select.d.ts +15 -0
  173. package/dist/components/ui/Select.js +27 -0
  174. package/dist/components/ui/Skeleton.d.ts +6 -0
  175. package/dist/components/ui/Skeleton.js +8 -0
  176. package/dist/components/ui/TimezoneDisplay.d.ts +22 -0
  177. package/dist/components/ui/TimezoneDisplay.js +83 -0
  178. package/dist/components/ui/Tooltip.d.ts +21 -0
  179. package/dist/components/ui/Tooltip.js +94 -0
  180. package/dist/components/ui/WorldMapChart.d.ts +17 -0
  181. package/dist/components/ui/WorldMapChart.js +250 -0
  182. package/dist/components/ui/loading-bar.d.ts +20 -0
  183. package/dist/components/ui/loading-bar.js +15 -0
  184. package/dist/constants/error-codes.d.ts +389 -0
  185. package/dist/constants/error-codes.js +27 -0
  186. package/dist/constants/index.d.ts +11 -0
  187. package/dist/constants/index.js +85 -0
  188. package/dist/constants/messages.d.ts +83 -0
  189. package/dist/constants/messages.js +13 -0
  190. package/dist/constants/pagination.d.ts +43 -0
  191. package/dist/constants/pagination.js +15 -0
  192. package/dist/constants/security.d.ts +66 -0
  193. package/dist/constants/security.js +23 -0
  194. package/dist/constants/validation.d.ts +60 -0
  195. package/dist/constants/validation.js +19 -0
  196. package/dist/error/ErrorBoundary.d.ts +47 -0
  197. package/dist/error/app-error.d.ts +144 -0
  198. package/dist/error/app-error.js +10 -0
  199. package/dist/error/components/EmptyState.d.ts +50 -0
  200. package/dist/error/components/ErrorAlert.d.ts +50 -0
  201. package/dist/error/components/ErrorPage.d.ts +39 -0
  202. package/dist/error/components/LoadingState.d.ts +37 -0
  203. package/dist/error/components/index.d.ts +13 -0
  204. package/dist/error/components/index.js +18 -0
  205. package/dist/error/core/locale-detector.d.ts +44 -0
  206. package/dist/error/core/locale-detector.js +9 -0
  207. package/dist/error/error-display.d.ts +55 -0
  208. package/dist/error/error-display.js +24 -0
  209. package/dist/error/error-handler.d.ts +118 -0
  210. package/dist/error/error-handler.js +18 -0
  211. package/dist/error/friendly-messages-v2.d.ts +46 -0
  212. package/dist/error/friendly-messages-v2.js +15 -0
  213. package/dist/error/friendly-messages.d.ts +22 -0
  214. package/dist/error/friendly-messages.js +12 -0
  215. package/dist/error/hooks/index.d.ts +7 -0
  216. package/dist/error/hooks/index.js +14 -0
  217. package/dist/error/hooks/useErrorHandler.d.ts +67 -0
  218. package/dist/error/hooks/useErrorHandler.js +14 -0
  219. package/dist/error/index.d.ts +26 -0
  220. package/dist/error/index.js +289 -0
  221. package/dist/error/logging/error-logger.d.ts +77 -0
  222. package/dist/error/logging/error-logger.js +10 -0
  223. package/dist/error/logging/index.d.ts +9 -0
  224. package/dist/error/logging/index.js +35 -0
  225. package/dist/error/logging/transports/base.d.ts +30 -0
  226. package/dist/error/logging/transports/base.js +7 -0
  227. package/dist/error/logging/transports/console.d.ts +40 -0
  228. package/dist/error/logging/transports/console.js +9 -0
  229. package/dist/error/logging/transports/file.d.ts +49 -0
  230. package/dist/error/logging/transports/file.js +8 -0
  231. package/dist/error/logging/transports/index.d.ts +12 -0
  232. package/dist/error/logging/transports/index.js +25 -0
  233. package/dist/error/logging/transports/sentry.d.ts +44 -0
  234. package/dist/error/logging/transports/sentry.js +9 -0
  235. package/dist/error/logging/transports/slack.d.ts +51 -0
  236. package/dist/error/logging/transports/slack.js +9 -0
  237. package/dist/error/logging/types.d.ts +83 -0
  238. package/dist/error/logging/types.js +7 -0
  239. package/dist/error/messages/en.d.ts +5 -0
  240. package/dist/error/messages/en.js +7 -0
  241. package/dist/error/messages/index.d.ts +40 -0
  242. package/dist/error/messages/index.js +17 -0
  243. package/dist/error/messages/ko.d.ts +5 -0
  244. package/dist/error/messages/ko.js +7 -0
  245. package/dist/error/messages/types.d.ts +30 -0
  246. package/dist/error/messages/types.js +0 -0
  247. package/dist/error/recovery/circuit-breaker.d.ts +85 -0
  248. package/dist/error/recovery/circuit-breaker.js +9 -0
  249. package/dist/error/recovery/degradation.d.ts +56 -0
  250. package/dist/error/recovery/degradation.js +7 -0
  251. package/dist/error/recovery/fallback.d.ts +55 -0
  252. package/dist/error/recovery/fallback.js +11 -0
  253. package/dist/error/recovery/index.d.ts +12 -0
  254. package/dist/error/recovery/index.js +26 -0
  255. package/dist/error/recovery/retry.d.ts +44 -0
  256. package/dist/error/recovery/retry.js +7 -0
  257. package/dist/geolocation/batch-processor.d.ts +33 -0
  258. package/dist/geolocation/batch-processor.js +10 -0
  259. package/dist/geolocation/index.d.ts +14 -0
  260. package/dist/geolocation/index.js +36 -0
  261. package/dist/geolocation/providers/base-provider.d.ts +33 -0
  262. package/dist/geolocation/providers/base-provider.js +9 -0
  263. package/dist/geolocation/providers/index.d.ts +54 -0
  264. package/dist/geolocation/providers/index.js +29 -0
  265. package/dist/geolocation/providers/ip-api-provider.d.ts +17 -0
  266. package/dist/geolocation/providers/ip-api-provider.js +8 -0
  267. package/dist/geolocation/providers/ipapi-co-provider.d.ts +17 -0
  268. package/dist/geolocation/providers/ipapi-co-provider.js +8 -0
  269. package/dist/geolocation/providers/ipgeolocation-provider.d.ts +18 -0
  270. package/dist/geolocation/providers/ipgeolocation-provider.js +8 -0
  271. package/dist/geolocation/providers/maxmind-provider.d.ts +18 -0
  272. package/dist/geolocation/providers/maxmind-provider.js +8 -0
  273. package/dist/hooks/useDataTable.d.ts +51 -0
  274. package/dist/hooks/useDataTable.js +149 -0
  275. package/dist/hooks/useDebounce.d.ts +7 -0
  276. package/dist/hooks/useDebounce.js +7 -0
  277. package/dist/hooks/useExitIntent.d.ts +35 -0
  278. package/dist/hooks/useExitIntent.js +72 -0
  279. package/dist/hooks/useTimezone.d.ts +19 -0
  280. package/dist/hooks/useTimezone.js +11 -0
  281. package/dist/logger/logger.d.ts +11 -0
  282. package/dist/logger/logger.js +17 -0
  283. package/dist/middleware/auth.d.ts +87 -0
  284. package/dist/middleware/auth.js +20 -0
  285. package/dist/middleware/cors.d.ts +30 -0
  286. package/dist/middleware/cors.js +10 -0
  287. package/dist/middleware/error-handler.d.ts +23 -0
  288. package/dist/middleware/error-handler.js +13 -0
  289. package/dist/middleware/index.d.ts +16 -0
  290. package/dist/middleware/index.js +72 -0
  291. package/dist/middleware/init-request.d.ts +18 -0
  292. package/dist/middleware/init-request.js +8 -0
  293. package/dist/middleware/middleware-chain.d.ts +53 -0
  294. package/dist/middleware/middleware-chain.js +8 -0
  295. package/dist/middleware/rate-limit.d.ts +82 -0
  296. package/dist/middleware/rate-limit.js +14 -0
  297. package/dist/middleware/response-logger.d.ts +22 -0
  298. package/dist/middleware/response-logger.js +8 -0
  299. package/dist/middleware/security.d.ts +31 -0
  300. package/dist/middleware/security.js +9 -0
  301. package/dist/middleware/types.d.ts +45 -0
  302. package/dist/middleware/types.js +0 -0
  303. package/dist/middleware/wrappers.d.ts +91 -0
  304. package/dist/middleware/wrappers.js +32 -0
  305. package/dist/storage/r2-storage.d.ts +38 -0
  306. package/dist/storage/r2-storage.js +105 -0
  307. package/dist/system/cpu.d.ts +2 -0
  308. package/dist/system/cpu.js +9 -0
  309. package/dist/system/disk.d.ts +2 -0
  310. package/dist/system/disk.js +9 -0
  311. package/dist/system/environment.d.ts +8 -0
  312. package/dist/system/environment.js +9 -0
  313. package/dist/system/health-check.d.ts +26 -0
  314. package/dist/system/health-check.js +10 -0
  315. package/dist/system/index.d.ts +51 -0
  316. package/dist/system/index.js +194 -0
  317. package/dist/system/memory.d.ts +2 -0
  318. package/dist/system/memory.js +9 -0
  319. package/dist/system/network.d.ts +2 -0
  320. package/dist/system/network.js +9 -0
  321. package/dist/system/types.d.ts +93 -0
  322. package/dist/system/types.js +0 -0
  323. package/dist/system/utils.d.ts +12 -0
  324. package/dist/system/utils.js +26 -0
  325. package/dist/types/api.d.ts +80 -0
  326. package/dist/types/api.js +0 -0
  327. package/dist/types/database.d.ts +38 -0
  328. package/dist/types/database.js +0 -0
  329. package/dist/types/env.d.ts +105 -0
  330. package/dist/types/env.js +0 -0
  331. package/dist/types/geoip.d.ts +152 -0
  332. package/dist/types/geoip.js +0 -0
  333. package/dist/types/i18n.d.ts +11 -0
  334. package/dist/types/i18n.js +0 -0
  335. package/dist/types/qr-code.d.ts +139 -0
  336. package/dist/types/qr-code.js +75 -0
  337. package/dist/types/user.d.ts +54 -0
  338. package/dist/types/user.js +0 -0
  339. package/dist/utils/api-helpers.d.ts +147 -0
  340. package/dist/utils/api-helpers.js +30 -0
  341. package/dist/utils/client/client-utils.d.ts +3 -0
  342. package/dist/utils/client/client-utils.js +9 -0
  343. package/dist/utils/client/qr-code.d.ts +16 -0
  344. package/dist/utils/client/qr-code.js +215 -0
  345. package/dist/utils/cors.d.ts +40 -0
  346. package/dist/utils/cors.js +21 -0
  347. package/dist/utils/csv-export.d.ts +97 -0
  348. package/dist/utils/csv-export.js +20 -0
  349. package/dist/utils/error-message-formatter.d.ts +17 -0
  350. package/dist/utils/error-message-formatter.js +11 -0
  351. package/dist/utils/error-processor.d.ts +70 -0
  352. package/dist/utils/error-processor.js +34 -0
  353. package/dist/utils/format-number.d.ts +17 -0
  354. package/dist/utils/format-number.js +9 -0
  355. package/dist/utils/index.d.ts +13 -0
  356. package/dist/utils/index.js +160 -0
  357. package/dist/utils/input-validation.d.ts +88 -0
  358. package/dist/utils/input-validation.js +223 -0
  359. package/dist/utils/ip-utils.d.ts +15 -0
  360. package/dist/utils/ip-utils.js +91 -0
  361. package/dist/utils/optimistic-lock.d.ts +27 -0
  362. package/dist/utils/optimistic-lock.js +16 -0
  363. package/dist/utils/sanitizer.d.ts +72 -0
  364. package/dist/utils/sanitizer.js +19 -0
  365. package/dist/utils/shared-utils.d.ts +25 -0
  366. package/dist/utils/shared-utils.js +43 -0
  367. package/dist/utils/short-code-generator.d.ts +24 -0
  368. package/dist/utils/short-code-generator.js +9 -0
  369. package/dist/utils/timezone.d.ts +56 -0
  370. package/dist/utils/timezone.js +29 -0
  371. package/dist/utils/type-guards.d.ts +164 -0
  372. package/dist/utils/type-guards.js +59 -0
  373. package/dist/utils/url-normalizer.d.ts +53 -0
  374. package/dist/utils/url-normalizer.js +21 -0
  375. package/dist/validators/index.d.ts +7 -0
  376. package/dist/validators/index.js +13 -0
  377. package/dist/validators/password-validator.d.ts +86 -0
  378. package/dist/validators/password-validator.js +13 -0
  379. package/dist/world_countries-C2WUL2CQ.js +279 -0
  380. package/package.json +129 -0
@@ -0,0 +1,473 @@
1
+ // src/constants/error-codes.ts
2
+ var HTTP_STATUS = {
3
+ OK: 200,
4
+ CREATED: 201,
5
+ NO_CONTENT: 204,
6
+ BAD_REQUEST: 400,
7
+ UNAUTHORIZED: 401,
8
+ FORBIDDEN: 403,
9
+ NOT_FOUND: 404,
10
+ CONFLICT: 409,
11
+ UNPROCESSABLE_ENTITY: 422,
12
+ TOO_MANY_REQUESTS: 429,
13
+ INTERNAL_SERVER_ERROR: 500,
14
+ SERVICE_UNAVAILABLE: 503
15
+ };
16
+ var ERROR_CODES = {
17
+ // ============================================
18
+ // Validation Related (400xx)
19
+ // ============================================
20
+ VALIDATION_ERROR: {
21
+ code: 40001,
22
+ key: "VALIDATION_ERROR",
23
+ status: HTTP_STATUS.BAD_REQUEST,
24
+ message: "Invalid input values."
25
+ },
26
+ BAD_REQUEST: {
27
+ code: 40002,
28
+ key: "BAD_REQUEST",
29
+ status: HTTP_STATUS.BAD_REQUEST,
30
+ message: "Invalid request."
31
+ },
32
+ INVALID_INPUT: {
33
+ code: 40003,
34
+ key: "INVALID_INPUT",
35
+ status: HTTP_STATUS.BAD_REQUEST,
36
+ message: "Invalid input."
37
+ },
38
+ MISSING_REQUIRED_FIELD: {
39
+ code: 40004,
40
+ key: "MISSING_REQUIRED_FIELD",
41
+ status: HTTP_STATUS.BAD_REQUEST,
42
+ message: "Required field is missing."
43
+ },
44
+ INVALID_URL_FORMAT: {
45
+ code: 40005,
46
+ key: "INVALID_URL_FORMAT",
47
+ status: HTTP_STATUS.BAD_REQUEST,
48
+ message: "Invalid URL format."
49
+ },
50
+ INVALID_EMAIL_FORMAT: {
51
+ code: 40006,
52
+ key: "INVALID_EMAIL_FORMAT",
53
+ status: HTTP_STATUS.BAD_REQUEST,
54
+ message: "Invalid email format."
55
+ },
56
+ PASSWORD_TOO_WEAK: {
57
+ code: 40007,
58
+ key: "PASSWORD_TOO_WEAK",
59
+ status: HTTP_STATUS.BAD_REQUEST,
60
+ message: "Password is too weak."
61
+ },
62
+ INVALID_ALIAS_FORMAT: {
63
+ code: 40008,
64
+ key: "INVALID_ALIAS_FORMAT",
65
+ status: HTTP_STATUS.BAD_REQUEST,
66
+ message: "Alias can only contain English letters, numbers, -, and _."
67
+ },
68
+ // ============================================
69
+ // Authentication Related (401xx)
70
+ // ============================================
71
+ UNAUTHORIZED: {
72
+ code: 40101,
73
+ key: "UNAUTHORIZED",
74
+ status: HTTP_STATUS.UNAUTHORIZED,
75
+ message: "Authentication required."
76
+ },
77
+ INVALID_TOKEN: {
78
+ code: 40102,
79
+ key: "INVALID_TOKEN",
80
+ status: HTTP_STATUS.UNAUTHORIZED,
81
+ message: "Invalid token."
82
+ },
83
+ TOKEN_EXPIRED: {
84
+ code: 40103,
85
+ key: "TOKEN_EXPIRED",
86
+ status: HTTP_STATUS.UNAUTHORIZED,
87
+ message: "Token has expired."
88
+ },
89
+ INVALID_CREDENTIALS: {
90
+ code: 40106,
91
+ key: "INVALID_CREDENTIALS",
92
+ status: HTTP_STATUS.UNAUTHORIZED,
93
+ message: "Invalid email or password."
94
+ },
95
+ SESSION_EXPIRED: {
96
+ code: 40107,
97
+ key: "SESSION_EXPIRED",
98
+ status: HTTP_STATUS.UNAUTHORIZED,
99
+ message: "Session has expired."
100
+ },
101
+ // ============================================
102
+ // Permissions Related (403xx - 01~09)
103
+ // ============================================
104
+ FORBIDDEN: {
105
+ code: 40304,
106
+ key: "FORBIDDEN",
107
+ status: HTTP_STATUS.FORBIDDEN,
108
+ message: "Access denied."
109
+ },
110
+ EMAIL_NOT_VERIFIED: {
111
+ code: 40305,
112
+ key: "EMAIL_NOT_VERIFIED",
113
+ status: HTTP_STATUS.FORBIDDEN,
114
+ message: "Email verification required."
115
+ },
116
+ ACCOUNT_DISABLED: {
117
+ code: 40308,
118
+ key: "ACCOUNT_DISABLED",
119
+ status: HTTP_STATUS.FORBIDDEN,
120
+ message: "Account is disabled."
121
+ },
122
+ ACCOUNT_LOCKED: {
123
+ code: 40309,
124
+ key: "ACCOUNT_LOCKED",
125
+ status: HTTP_STATUS.FORBIDDEN,
126
+ message: "Account is locked."
127
+ },
128
+ // ============================================
129
+ // Resource Not Found (404xx)
130
+ // ============================================
131
+ NOT_FOUND: {
132
+ code: 40401,
133
+ key: "NOT_FOUND",
134
+ status: HTTP_STATUS.NOT_FOUND,
135
+ message: "Requested resource not found."
136
+ },
137
+ USER_NOT_FOUND: {
138
+ code: 40402,
139
+ key: "USER_NOT_FOUND",
140
+ status: HTTP_STATUS.NOT_FOUND,
141
+ message: "User not found."
142
+ },
143
+ LINK_NOT_FOUND: {
144
+ code: 40403,
145
+ key: "LINK_NOT_FOUND",
146
+ status: HTTP_STATUS.NOT_FOUND,
147
+ message: "Link not found."
148
+ },
149
+ TAG_NOT_FOUND: {
150
+ code: 40408,
151
+ key: "TAG_NOT_FOUND",
152
+ status: HTTP_STATUS.NOT_FOUND,
153
+ message: "Tag not found."
154
+ },
155
+ FAVORITE_NOT_FOUND: {
156
+ code: 40409,
157
+ key: "FAVORITE_NOT_FOUND",
158
+ status: HTTP_STATUS.NOT_FOUND,
159
+ message: "Favorite not found."
160
+ },
161
+ GROUP_NOT_FOUND: {
162
+ code: 40410,
163
+ key: "GROUP_NOT_FOUND",
164
+ status: HTTP_STATUS.NOT_FOUND,
165
+ message: "Group not found."
166
+ },
167
+ // ============================================
168
+ // Conflict (409xx)
169
+ // ============================================
170
+ CONFLICT: {
171
+ code: 40904,
172
+ key: "CONFLICT",
173
+ status: HTTP_STATUS.CONFLICT,
174
+ message: "Resource conflict occurred."
175
+ },
176
+ DUPLICATE_RESOURCE: {
177
+ code: 40905,
178
+ key: "DUPLICATE_RESOURCE",
179
+ status: HTTP_STATUS.CONFLICT,
180
+ message: "Resource already exists."
181
+ },
182
+ EMAIL_ALREADY_EXISTS: {
183
+ code: 40906,
184
+ key: "EMAIL_ALREADY_EXISTS",
185
+ status: HTTP_STATUS.CONFLICT,
186
+ message: "Email is already registered."
187
+ },
188
+ ALIAS_ALREADY_EXISTS: {
189
+ code: 40907,
190
+ key: "ALIAS_ALREADY_EXISTS",
191
+ status: HTTP_STATUS.CONFLICT,
192
+ message: "Alias is already in use."
193
+ },
194
+ // ============================================
195
+ // Business Logic (422xx)
196
+ // ============================================
197
+ BUSINESS_RULE_VIOLATION: {
198
+ code: 42201,
199
+ key: "BUSINESS_RULE_VIOLATION",
200
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
201
+ message: "Unable to process the request."
202
+ },
203
+ INVALID_OPERATION: {
204
+ code: 42202,
205
+ key: "INVALID_OPERATION",
206
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
207
+ message: "Invalid operation."
208
+ },
209
+ QUOTA_EXCEEDED: {
210
+ code: 42203,
211
+ key: "QUOTA_EXCEEDED",
212
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
213
+ message: "Usage quota exceeded."
214
+ },
215
+ LINK_EXPIRED: {
216
+ code: 42204,
217
+ key: "LINK_EXPIRED",
218
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
219
+ message: "Link has expired."
220
+ },
221
+ LINK_INACTIVE: {
222
+ code: 42205,
223
+ key: "LINK_INACTIVE",
224
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
225
+ message: "Link is inactive."
226
+ },
227
+ LINK_PASSWORD_REQUIRED: {
228
+ code: 42206,
229
+ key: "LINK_PASSWORD_REQUIRED",
230
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
231
+ message: "Link password is required."
232
+ },
233
+ LINK_PASSWORD_INCORRECT: {
234
+ code: 42207,
235
+ key: "LINK_PASSWORD_INCORRECT",
236
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
237
+ message: "Incorrect link password."
238
+ },
239
+ RESERVED_WORD_USED: {
240
+ code: 42208,
241
+ key: "RESERVED_WORD_USED",
242
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
243
+ message: "Reserved words cannot be used as aliases."
244
+ },
245
+ ALREADY_FAVORITED: {
246
+ code: 42209,
247
+ key: "ALREADY_FAVORITED",
248
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
249
+ message: "Already added to favorites."
250
+ },
251
+ CANNOT_DELETE_OWN_ACCOUNT: {
252
+ code: 42210,
253
+ key: "CANNOT_DELETE_OWN_ACCOUNT",
254
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
255
+ message: "You cannot delete your own account."
256
+ },
257
+ FILE_TOO_LARGE: {
258
+ code: 42211,
259
+ key: "FILE_TOO_LARGE",
260
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
261
+ message: "File size exceeds the limit."
262
+ },
263
+ UNSUPPORTED_FILE_TYPE: {
264
+ code: 42212,
265
+ key: "UNSUPPORTED_FILE_TYPE",
266
+ status: HTTP_STATUS.UNPROCESSABLE_ENTITY,
267
+ message: "Unsupported file type."
268
+ },
269
+ // ============================================
270
+ // Rate Limiting (429xx)
271
+ // ============================================
272
+ RATE_LIMIT_EXCEEDED: {
273
+ code: 42901,
274
+ key: "RATE_LIMIT_EXCEEDED",
275
+ status: HTTP_STATUS.TOO_MANY_REQUESTS,
276
+ message: "Too many requests. Please try again later."
277
+ },
278
+ DAILY_LIMIT_EXCEEDED: {
279
+ code: 42902,
280
+ key: "DAILY_LIMIT_EXCEEDED",
281
+ status: HTTP_STATUS.TOO_MANY_REQUESTS,
282
+ message: "Daily limit exceeded."
283
+ },
284
+ API_QUOTA_EXCEEDED: {
285
+ code: 42903,
286
+ key: "API_QUOTA_EXCEEDED",
287
+ status: HTTP_STATUS.TOO_MANY_REQUESTS,
288
+ message: "API quota exceeded."
289
+ },
290
+ // ============================================
291
+ // Server Errors (500xx)
292
+ // ============================================
293
+ INTERNAL_SERVER_ERROR: {
294
+ code: 50001,
295
+ key: "INTERNAL_SERVER_ERROR",
296
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
297
+ message: "Internal server error occurred."
298
+ },
299
+ SERVER_ERROR: {
300
+ code: 50002,
301
+ key: "SERVER_ERROR",
302
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
303
+ message: "A temporary error occurred."
304
+ },
305
+ DATABASE_ERROR: {
306
+ code: 50003,
307
+ key: "DATABASE_ERROR",
308
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
309
+ message: "An error occurred during data processing."
310
+ },
311
+ EMAIL_SEND_FAILED: {
312
+ code: 50006,
313
+ key: "EMAIL_SEND_FAILED",
314
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
315
+ message: "Failed to send email."
316
+ },
317
+ CACHE_ERROR: {
318
+ code: 50007,
319
+ key: "CACHE_ERROR",
320
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
321
+ message: "An error occurred during cache processing."
322
+ },
323
+ FILE_UPLOAD_FAILED: {
324
+ code: 50008,
325
+ key: "FILE_UPLOAD_FAILED",
326
+ status: HTTP_STATUS.INTERNAL_SERVER_ERROR,
327
+ message: "Failed to upload file."
328
+ },
329
+ // ============================================
330
+ // Service Unavailable (503xx)
331
+ // ============================================
332
+ EXTERNAL_SERVICE_ERROR: {
333
+ code: 50304,
334
+ key: "EXTERNAL_SERVICE_ERROR",
335
+ status: HTTP_STATUS.SERVICE_UNAVAILABLE,
336
+ message: "Unable to connect to external service."
337
+ },
338
+ SERVICE_UNAVAILABLE: {
339
+ code: 50305,
340
+ key: "SERVICE_UNAVAILABLE",
341
+ status: HTTP_STATUS.SERVICE_UNAVAILABLE,
342
+ message: "Service is temporarily unavailable."
343
+ },
344
+ // ============================================
345
+ // Security Related (403xx - 71~79)
346
+ // ============================================
347
+ ACCESS_BLOCKED: {
348
+ code: 40371,
349
+ key: "ACCESS_BLOCKED",
350
+ status: HTTP_STATUS.FORBIDDEN,
351
+ message: "Blocked due to security policy."
352
+ },
353
+ SECURITY_VALIDATION_FAILED: {
354
+ code: 40372,
355
+ key: "SECURITY_VALIDATION_FAILED",
356
+ status: HTTP_STATUS.FORBIDDEN,
357
+ message: "Security validation failed."
358
+ },
359
+ BLOCKED_URL: {
360
+ code: 40373,
361
+ key: "BLOCKED_URL",
362
+ status: HTTP_STATUS.FORBIDDEN,
363
+ message: "Blocked URL."
364
+ },
365
+ SUSPICIOUS_ACTIVITY: {
366
+ code: 40374,
367
+ key: "SUSPICIOUS_ACTIVITY",
368
+ status: HTTP_STATUS.FORBIDDEN,
369
+ message: "Suspicious activity detected."
370
+ },
371
+ IP_BLOCKED: {
372
+ code: 40375,
373
+ key: "IP_BLOCKED",
374
+ status: HTTP_STATUS.FORBIDDEN,
375
+ message: "IP is blocked."
376
+ },
377
+ CORS_VIOLATION: {
378
+ code: 40376,
379
+ key: "CORS_VIOLATION",
380
+ status: HTTP_STATUS.FORBIDDEN,
381
+ message: "CORS policy violation."
382
+ }
383
+ };
384
+ function getErrorInfo(codeKey) {
385
+ return ERROR_CODES[codeKey];
386
+ }
387
+ function getErrorByCode(code) {
388
+ const entry = Object.values(ERROR_CODES).find((e) => e.code === code);
389
+ return entry || null;
390
+ }
391
+ function getHttpStatus(code) {
392
+ return Math.floor(code / 100);
393
+ }
394
+ function getErrorCategory(code) {
395
+ const httpStatus = getHttpStatus(code);
396
+ const subCode = code % 100;
397
+ switch (httpStatus) {
398
+ case 400:
399
+ return "validation";
400
+ case 401:
401
+ return "auth";
402
+ case 403:
403
+ return subCode >= 71 ? "security" : "permission";
404
+ case 404:
405
+ return "resource";
406
+ case 409:
407
+ return "conflict";
408
+ case 422:
409
+ return "business";
410
+ case 429:
411
+ return "rateLimit";
412
+ case 500:
413
+ case 503:
414
+ return "server";
415
+ default:
416
+ return "unknown";
417
+ }
418
+ }
419
+ function getDefaultErrorMessage(status) {
420
+ switch (status) {
421
+ case 400:
422
+ return "Invalid request.";
423
+ case 401:
424
+ return "Authentication required.";
425
+ case 403:
426
+ return "Access denied.";
427
+ case 404:
428
+ return "Requested resource not found.";
429
+ case 409:
430
+ return "Resource conflict occurred.";
431
+ case 422:
432
+ return "Unable to process request.";
433
+ case 429:
434
+ return "Too many requests.";
435
+ case 500:
436
+ return "Server error occurred.";
437
+ case 503:
438
+ return "Service temporarily unavailable.";
439
+ default:
440
+ return "An error occurred.";
441
+ }
442
+ }
443
+ function getLogLevel(status) {
444
+ if (status < 400) return "info";
445
+ if (status < 500) return "warn";
446
+ return "error";
447
+ }
448
+ function getAllErrorCodes() {
449
+ return Object.values(ERROR_CODES);
450
+ }
451
+ function getErrorCodesByCategory(category) {
452
+ return Object.values(ERROR_CODES).filter(
453
+ (e) => getErrorCategory(e.code) === category
454
+ );
455
+ }
456
+ function formatErrorMessage(code, customMessage) {
457
+ const errorInfo = getErrorByCode(code);
458
+ return customMessage || (errorInfo == null ? void 0 : errorInfo.message) || getDefaultErrorMessage(getHttpStatus(code));
459
+ }
460
+
461
+ export {
462
+ HTTP_STATUS,
463
+ ERROR_CODES,
464
+ getErrorInfo,
465
+ getErrorByCode,
466
+ getHttpStatus,
467
+ getErrorCategory,
468
+ getDefaultErrorMessage,
469
+ getLogLevel,
470
+ getAllErrorCodes,
471
+ getErrorCodesByCategory,
472
+ formatErrorMessage
473
+ };
@@ -0,0 +1,161 @@
1
+ import {
2
+ getCacheManager,
3
+ getEffectiveCacheBackend
4
+ } from "./chunk-AIHQBQ3E.js";
5
+ import {
6
+ getCacheConfig,
7
+ getCacheTTL
8
+ } from "./chunk-TXGNSECL.js";
9
+ import {
10
+ isCacheEnabled
11
+ } from "./chunk-I47QEDTX.js";
12
+ import {
13
+ logger
14
+ } from "./chunk-EZR55KV2.js";
15
+
16
+ // src/cache/cache-wrapper.ts
17
+ function getCacheBackendLabel() {
18
+ const backend = getEffectiveCacheBackend();
19
+ switch (backend) {
20
+ case "redis":
21
+ return "R";
22
+ case "memory":
23
+ return "M";
24
+ case "hybrid":
25
+ return "H";
26
+ default:
27
+ return "N";
28
+ }
29
+ }
30
+ var NULL_VALUE_WRAPPER = { __nullValue__: true };
31
+ function isNullValueWrapper(value) {
32
+ return typeof value === "object" && value !== null && "__nullValue__" in value && value.__nullValue__ === true;
33
+ }
34
+ function wrapNullValue(value) {
35
+ return value === null ? NULL_VALUE_WRAPPER : value;
36
+ }
37
+ function unwrapNullValue(value) {
38
+ return isNullValueWrapper(value) ? null : value;
39
+ }
40
+ async function withCache(key, fetchFunction, options = {}) {
41
+ const startTime = Date.now();
42
+ const { ttl, prefix: inputPrefix } = options;
43
+ let cacheManagerPrefix;
44
+ let actualKey;
45
+ let fullKey;
46
+ if (inputPrefix !== void 0) {
47
+ cacheManagerPrefix = inputPrefix;
48
+ actualKey = key;
49
+ fullKey = `${inputPrefix}:${key}`;
50
+ } else {
51
+ const colonIndex = key.indexOf(":");
52
+ if (colonIndex > 0) {
53
+ cacheManagerPrefix = key.substring(0, colonIndex);
54
+ actualKey = key.substring(colonIndex + 1);
55
+ fullKey = key;
56
+ } else {
57
+ cacheManagerPrefix = "default";
58
+ actualKey = key;
59
+ fullKey = `default:${key}`;
60
+ }
61
+ }
62
+ const prefix = cacheManagerPrefix;
63
+ const cacheConfig = getCacheConfig[prefix];
64
+ const finalTTL = ttl || ((cacheConfig == null ? void 0 : cacheConfig.duration()) || getCacheTTL.default());
65
+ if (cacheConfig && !cacheConfig.enabled()) {
66
+ logger.debug(`withCache skipped due to cache disabled: ${fullKey}`, {
67
+ key: actualKey,
68
+ prefix,
69
+ fullKey,
70
+ cacheEnabled: cacheConfig.enabled()
71
+ });
72
+ return await fetchFunction();
73
+ }
74
+ if (!isCacheEnabled()) {
75
+ logger.debug(`withCache skipped due to global cache disabled: ${fullKey}`, {
76
+ key: actualKey,
77
+ prefix,
78
+ fullKey,
79
+ cacheEnabled: isCacheEnabled()
80
+ });
81
+ return await fetchFunction();
82
+ }
83
+ const cacheManager = getCacheManager(prefix);
84
+ logger.debug(`withCache started: ${fullKey}`, {
85
+ key: actualKey,
86
+ prefix,
87
+ fullKey,
88
+ ttl: `${finalTTL}s`,
89
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
90
+ });
91
+ try {
92
+ const cachedValue = await cacheManager.get(actualKey);
93
+ if (cachedValue !== null) {
94
+ const totalTime2 = Date.now() - startTime;
95
+ const backendLabel2 = getCacheBackendLabel();
96
+ const isNullCached = isNullValueWrapper(cachedValue);
97
+ const unwrappedValue = unwrapNullValue(cachedValue);
98
+ logger.info(`[${backendLabel2}] HIT ${fullKey} (${totalTime2}ms)${isNullCached ? " null" : ""}`);
99
+ return unwrappedValue;
100
+ }
101
+ logger.debug(`withCache [${getCacheBackendLabel()}] cache miss: ${fullKey}`, {
102
+ key: actualKey,
103
+ prefix,
104
+ fullKey,
105
+ ttl: `${finalTTL}s`
106
+ });
107
+ const freshValue = await fetchFunction();
108
+ const fetchTime = Date.now() - startTime;
109
+ const valueToStore = wrapNullValue(freshValue);
110
+ await cacheManager.set(actualKey, valueToStore, finalTTL);
111
+ const totalTime = Date.now() - startTime;
112
+ const isNullValue = freshValue === null;
113
+ const backendLabel = getCacheBackendLabel();
114
+ const valueSize = JSON.stringify(valueToStore).length;
115
+ logger.info(`[${backendLabel}] SET ${fullKey} (${fetchTime}ms, ${valueSize}B, ttl=${finalTTL}s)${isNullValue ? " null" : ""}`);
116
+ return freshValue;
117
+ } catch (error) {
118
+ const totalTime = Date.now() - startTime;
119
+ const errorMessage = error instanceof Error ? error.message : "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958";
120
+ logger.error(`withCache execution failed: ${fullKey}`, {
121
+ key: actualKey,
122
+ prefix,
123
+ fullKey,
124
+ error: errorMessage,
125
+ totalTime: `${totalTime}ms`,
126
+ ttl: `${finalTTL}s`,
127
+ stack: error instanceof Error ? error.stack : void 0
128
+ });
129
+ logger.warn(`withCache error occurred, executing original function: ${fullKey}`, {
130
+ key: actualKey,
131
+ prefix,
132
+ fullKey,
133
+ error: errorMessage
134
+ });
135
+ return await fetchFunction();
136
+ }
137
+ }
138
+ var cacheMetrics = {
139
+ hits: 0,
140
+ misses: 0,
141
+ errors: 0,
142
+ totalRequests: 0,
143
+ averageResponseTime: 0,
144
+ get hitRate() {
145
+ const total = this.hits + this.misses;
146
+ return total > 0 ? this.hits / total * 100 : 0;
147
+ },
148
+ reset() {
149
+ this.hits = 0;
150
+ this.misses = 0;
151
+ this.errors = 0;
152
+ this.totalRequests = 0;
153
+ this.averageResponseTime = 0;
154
+ }
155
+ };
156
+
157
+ export {
158
+ getCacheBackendLabel,
159
+ withCache,
160
+ cacheMetrics
161
+ };