@vitnode/core 1.2.0-canary.74 → 1.2.0-canary.75

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 (721) hide show
  1. package/config/next.config.ts +4 -0
  2. package/dist/scripts/plugin.d.ts.map +1 -1
  3. package/dist/scripts/prepare-database.d.ts.map +1 -1
  4. package/dist/scripts/scripts.js +10 -39
  5. package/dist/scripts/shared/file-utils.d.ts +1 -0
  6. package/dist/scripts/shared/file-utils.d.ts.map +1 -1
  7. package/dist/scripts/shared/file-utils.test.d.ts +2 -0
  8. package/dist/scripts/shared/file-utils.test.d.ts.map +1 -0
  9. package/dist/src/api/config.d.ts.map +1 -1
  10. package/dist/src/api/config.js +1 -1
  11. package/dist/src/api/lib/cache-client.d.ts +4 -0
  12. package/dist/src/api/lib/cache-client.d.ts.map +1 -0
  13. package/dist/src/api/lib/cache-client.js +1 -0
  14. package/dist/src/api/lib/cache.d.ts +32 -0
  15. package/dist/src/api/lib/cache.d.ts.map +1 -0
  16. package/dist/src/api/lib/cache.js +1 -0
  17. package/dist/src/api/lib/cache.test.d.ts +2 -0
  18. package/dist/src/api/lib/cache.test.d.ts.map +1 -0
  19. package/dist/src/api/lib/cache.test.js +1 -0
  20. package/dist/src/api/lib/check-staff-permission.d.ts +20 -0
  21. package/dist/src/api/lib/check-staff-permission.d.ts.map +1 -0
  22. package/dist/src/api/lib/check-staff-permission.js +1 -0
  23. package/dist/src/api/lib/module.d.ts +4 -1
  24. package/dist/src/api/lib/module.d.ts.map +1 -1
  25. package/dist/src/api/lib/module.js +1 -1
  26. package/dist/src/api/lib/permission-staff.d.ts +35 -0
  27. package/dist/src/api/lib/permission-staff.d.ts.map +1 -0
  28. package/dist/src/api/lib/permission-staff.js +1 -0
  29. package/dist/src/api/lib/plugin.d.ts +8 -3
  30. package/dist/src/api/lib/plugin.d.ts.map +1 -1
  31. package/dist/src/api/lib/plugin.js +1 -1
  32. package/dist/src/api/lib/queue.d.ts +14 -0
  33. package/dist/src/api/lib/queue.d.ts.map +1 -0
  34. package/dist/src/api/lib/queue.js +1 -0
  35. package/dist/src/api/lib/resolve-role-names.d.ts +7 -0
  36. package/dist/src/api/lib/resolve-role-names.d.ts.map +1 -0
  37. package/dist/src/api/lib/resolve-role-names.js +1 -0
  38. package/dist/src/api/lib/route.d.ts +7 -1
  39. package/dist/src/api/lib/route.d.ts.map +1 -1
  40. package/dist/src/api/lib/route.js +1 -1
  41. package/dist/src/api/lib/staff-permission.d.ts +4 -0
  42. package/dist/src/api/lib/staff-permission.d.ts.map +1 -0
  43. package/dist/src/api/lib/staff-permission.js +1 -0
  44. package/dist/src/api/middlewares/global.middleware.d.ts +18 -5
  45. package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
  46. package/dist/src/api/middlewares/global.middleware.js +1 -1
  47. package/dist/src/api/middlewares/rate-limiter.middleware.d.ts +2 -1
  48. package/dist/src/api/middlewares/rate-limiter.middleware.d.ts.map +1 -1
  49. package/dist/src/api/middlewares/rate-limiter.middleware.js +1 -1
  50. package/dist/src/api/models/email.d.ts +11 -1
  51. package/dist/src/api/models/email.d.ts.map +1 -1
  52. package/dist/src/api/models/email.js +1 -1
  53. package/dist/src/api/models/email.test.d.ts +2 -0
  54. package/dist/src/api/models/email.test.d.ts.map +1 -0
  55. package/dist/src/api/models/email.test.js +1 -0
  56. package/dist/src/api/models/queue.d.ts +17 -0
  57. package/dist/src/api/models/queue.d.ts.map +1 -0
  58. package/dist/src/api/models/queue.js +1 -0
  59. package/dist/src/api/models/queue.test.d.ts +2 -0
  60. package/dist/src/api/models/queue.test.d.ts.map +1 -0
  61. package/dist/src/api/models/queue.test.js +1 -0
  62. package/dist/src/api/models/session-admin.d.ts.map +1 -1
  63. package/dist/src/api/models/session-admin.js +1 -1
  64. package/dist/src/api/models/session-cache.d.ts +8 -0
  65. package/dist/src/api/models/session-cache.d.ts.map +1 -0
  66. package/dist/src/api/models/session-cache.js +1 -0
  67. package/dist/src/api/models/session.d.ts.map +1 -1
  68. package/dist/src/api/models/session.js +1 -1
  69. package/dist/src/api/modules/admin/admin.module.d.ts +694 -8
  70. package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
  71. package/dist/src/api/modules/admin/admin.module.js +1 -1
  72. package/dist/src/api/modules/admin/advanced/advanced.admin.module.d.ts +64 -2
  73. package/dist/src/api/modules/admin/advanced/advanced.admin.module.d.ts.map +1 -1
  74. package/dist/src/api/modules/admin/advanced/advanced.admin.module.js +1 -1
  75. package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts +64 -0
  76. package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.d.ts.map +1 -0
  77. package/dist/src/api/modules/admin/advanced/queue/queue.admin.module.js +1 -0
  78. package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts +65 -0
  79. package/dist/src/api/modules/admin/advanced/queue/routes/get.route.d.ts.map +1 -0
  80. package/dist/src/api/modules/admin/advanced/queue/routes/get.route.js +1 -0
  81. package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +122 -2
  82. package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts.map +1 -1
  83. package/dist/src/api/modules/admin/debug/debug.admin.module.js +1 -1
  84. package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts +49 -0
  85. package/dist/src/api/modules/admin/debug/routes/integrations.route.d.ts.map +1 -0
  86. package/dist/src/api/modules/admin/debug/routes/integrations.route.js +1 -0
  87. package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +2 -2
  88. package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts.map +1 -1
  89. package/dist/src/api/modules/admin/debug/routes/logs.route.js +1 -1
  90. package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts +42 -0
  91. package/dist/src/api/modules/admin/debug/routes/queue.route.d.ts.map +1 -0
  92. package/dist/src/api/modules/admin/debug/routes/queue.route.js +1 -0
  93. package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts +43 -0
  94. package/dist/src/api/modules/admin/debug/routes/send-test-email.route.d.ts.map +1 -0
  95. package/dist/src/api/modules/admin/debug/routes/send-test-email.route.js +1 -0
  96. package/dist/src/api/modules/admin/routes/session.route.d.ts +8 -0
  97. package/dist/src/api/modules/admin/routes/session.route.d.ts.map +1 -1
  98. package/dist/src/api/modules/admin/routes/session.route.js +1 -1
  99. package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts +38 -0
  100. package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.d.ts.map +1 -0
  101. package/dist/src/api/modules/admin/staff/lib/resolve-staff-edges.js +1 -0
  102. package/dist/src/api/modules/admin/staff/lib/schema.d.ts +107 -0
  103. package/dist/src/api/modules/admin/staff/lib/schema.d.ts.map +1 -0
  104. package/dist/src/api/modules/admin/staff/lib/schema.js +1 -0
  105. package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts +76 -0
  106. package/dist/src/api/modules/admin/staff/routes/admins.route.d.ts.map +1 -0
  107. package/dist/src/api/modules/admin/staff/routes/admins.route.js +1 -0
  108. package/dist/src/api/modules/admin/staff/routes/create.route.d.ts +52 -0
  109. package/dist/src/api/modules/admin/staff/routes/create.route.d.ts.map +1 -0
  110. package/dist/src/api/modules/admin/staff/routes/create.route.js +1 -0
  111. package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts +36 -0
  112. package/dist/src/api/modules/admin/staff/routes/delete.route.d.ts.map +1 -0
  113. package/dist/src/api/modules/admin/staff/routes/delete.route.js +1 -0
  114. package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts +76 -0
  115. package/dist/src/api/modules/admin/staff/routes/moderators.route.d.ts.map +1 -0
  116. package/dist/src/api/modules/admin/staff/routes/moderators.route.js +1 -0
  117. package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts +32 -0
  118. package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.d.ts.map +1 -0
  119. package/dist/src/api/modules/admin/staff/routes/permission-catalog.route.js +1 -0
  120. package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts +75 -0
  121. package/dist/src/api/modules/admin/staff/routes/show-permissions.route.d.ts.map +1 -0
  122. package/dist/src/api/modules/admin/staff/routes/show-permissions.route.js +1 -0
  123. package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts +62 -0
  124. package/dist/src/api/modules/admin/staff/routes/update-permissions.route.d.ts.map +1 -0
  125. package/dist/src/api/modules/admin/staff/routes/update-permissions.route.js +1 -0
  126. package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts +392 -0
  127. package/dist/src/api/modules/admin/staff/staff.admin.module.d.ts.map +1 -0
  128. package/dist/src/api/modules/admin/staff/staff.admin.module.js +1 -0
  129. package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts +4 -0
  130. package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.d.ts.map +1 -0
  131. package/dist/src/api/modules/admin/users/lib/assert-edit-user-permission.js +1 -0
  132. package/dist/src/api/modules/admin/users/routes/create.route.d.ts.map +1 -1
  133. package/dist/src/api/modules/admin/users/routes/create.route.js +1 -1
  134. package/dist/src/api/modules/admin/users/routes/list.route.d.ts +16 -0
  135. package/dist/src/api/modules/admin/users/routes/list.route.d.ts.map +1 -1
  136. package/dist/src/api/modules/admin/users/routes/list.route.js +1 -1
  137. package/dist/src/api/modules/admin/users/routes/show.route.d.ts +19 -2
  138. package/dist/src/api/modules/admin/users/routes/show.route.d.ts.map +1 -1
  139. package/dist/src/api/modules/admin/users/routes/show.route.js +1 -1
  140. package/dist/src/api/modules/admin/users/routes/update.route.d.ts +83 -0
  141. package/dist/src/api/modules/admin/users/routes/update.route.d.ts.map +1 -0
  142. package/dist/src/api/modules/admin/users/routes/update.route.js +1 -0
  143. package/dist/src/api/modules/admin/users/routes/verify-email.route.d.ts +2 -2
  144. package/dist/src/api/modules/admin/users/routes/verify-email.route.d.ts.map +1 -1
  145. package/dist/src/api/modules/admin/users/routes/verify-email.route.js +1 -1
  146. package/dist/src/api/modules/admin/users/users.admin.module.d.ts +110 -4
  147. package/dist/src/api/modules/admin/users/users.admin.module.d.ts.map +1 -1
  148. package/dist/src/api/modules/admin/users/users.admin.module.js +1 -1
  149. package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts +2 -0
  150. package/dist/src/api/modules/queue/cron/process-queue.cron.d.ts.map +1 -0
  151. package/dist/src/api/modules/queue/cron/process-queue.cron.js +1 -0
  152. package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts +4 -0
  153. package/dist/src/api/modules/queue/helpers/process-queue-tasks.d.ts.map +1 -0
  154. package/dist/src/api/modules/queue/helpers/process-queue-tasks.js +1 -0
  155. package/dist/src/api/modules/queue/queue.module.d.ts +2 -0
  156. package/dist/src/api/modules/queue/queue.module.d.ts.map +1 -0
  157. package/dist/src/api/modules/queue/queue.module.js +1 -0
  158. package/dist/src/api/modules/queue/tasks/send-email.task.d.ts +10 -0
  159. package/dist/src/api/modules/queue/tasks/send-email.task.d.ts.map +1 -0
  160. package/dist/src/api/modules/queue/tasks/send-email.task.js +1 -0
  161. package/dist/src/api/modules/users/routes/permissions.route.d.ts +26 -0
  162. package/dist/src/api/modules/users/routes/permissions.route.d.ts.map +1 -0
  163. package/dist/src/api/modules/users/routes/permissions.route.js +1 -0
  164. package/dist/src/api/modules/users/routes/reset-passowrd.route.js +1 -1
  165. package/dist/src/api/modules/users/routes/session.route.d.ts +1 -0
  166. package/dist/src/api/modules/users/routes/session.route.d.ts.map +1 -1
  167. package/dist/src/api/modules/users/routes/session.route.js +1 -1
  168. package/dist/src/api/modules/users/users.module.d.ts +24 -0
  169. package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
  170. package/dist/src/api/modules/users/users.module.js +1 -1
  171. package/dist/src/api/plugin.d.ts.map +1 -1
  172. package/dist/src/api/plugin.js +1 -1
  173. package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts +1 -1
  174. package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts.map +1 -1
  175. package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +1 -1
  176. package/dist/src/components/form/auto-form.js +1 -1
  177. package/dist/src/components/form/fields/array.d.ts.map +1 -1
  178. package/dist/src/components/form/fields/checkbox.js +1 -1
  179. package/dist/src/components/form/fields/select.d.ts.map +1 -1
  180. package/dist/src/components/form/fields/select.js +1 -1
  181. package/dist/src/components/form/fields/switch.js +1 -1
  182. package/dist/src/components/staff-permission/provider.d.ts +13 -0
  183. package/dist/src/components/staff-permission/provider.d.ts.map +1 -0
  184. package/dist/src/components/staff-permission/provider.js +1 -0
  185. package/dist/src/components/switchers/langs/language-switcher.d.ts.map +1 -1
  186. package/dist/src/components/switchers/langs/language-switcher.js +1 -1
  187. package/dist/src/components/switchers/themes/theme-switcher.js +1 -1
  188. package/dist/src/components/table/filters.d.ts.map +1 -1
  189. package/dist/src/components/table/filters.js +1 -1
  190. package/dist/src/components/table/pagination.d.ts.map +1 -1
  191. package/dist/src/components/table/pagination.js +1 -1
  192. package/dist/src/components/theme-provider.d.ts +26 -0
  193. package/dist/src/components/theme-provider.d.ts.map +1 -0
  194. package/dist/src/components/theme-provider.js +1 -0
  195. package/dist/src/components/tiptap/toolbar/actions/alignment-action.d.ts.map +1 -1
  196. package/dist/src/components/tiptap/toolbar/actions/alignment-action.js +1 -1
  197. package/dist/src/components/tiptap/toolbar/actions/headings-action.d.ts.map +1 -1
  198. package/dist/src/components/tiptap/toolbar/actions/headings-action.js +1 -1
  199. package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.d.ts.map +1 -1
  200. package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js +1 -1
  201. package/dist/src/components/ui/accordion.d.ts +3 -3
  202. package/dist/src/components/ui/accordion.d.ts.map +1 -1
  203. package/dist/src/components/ui/accordion.js +1 -1
  204. package/dist/src/components/ui/alert-dialog.d.ts +10 -10
  205. package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
  206. package/dist/src/components/ui/alert-dialog.js +1 -1
  207. package/dist/src/components/ui/alert.d.ts +2 -2
  208. package/dist/src/components/ui/alert.d.ts.map +1 -1
  209. package/dist/src/components/ui/alert.js +1 -1
  210. package/dist/src/components/ui/aspect-ratio.d.ts +4 -2
  211. package/dist/src/components/ui/aspect-ratio.d.ts.map +1 -1
  212. package/dist/src/components/ui/aspect-ratio.js +1 -1
  213. package/dist/src/components/ui/avatar.d.ts +2 -2
  214. package/dist/src/components/ui/avatar.d.ts.map +1 -1
  215. package/dist/src/components/ui/avatar.js +1 -1
  216. package/dist/src/components/ui/badge.d.ts +3 -5
  217. package/dist/src/components/ui/badge.d.ts.map +1 -1
  218. package/dist/src/components/ui/badge.js +1 -1
  219. package/dist/src/components/ui/breadcrumb.d.ts +3 -4
  220. package/dist/src/components/ui/breadcrumb.d.ts.map +1 -1
  221. package/dist/src/components/ui/breadcrumb.js +1 -1
  222. package/dist/src/components/ui/button-client.d.ts +1 -1
  223. package/dist/src/components/ui/button-client.d.ts.map +1 -1
  224. package/dist/src/components/ui/button-client.js +1 -1
  225. package/dist/src/components/ui/button-group.d.ts +2 -3
  226. package/dist/src/components/ui/button-group.d.ts.map +1 -1
  227. package/dist/src/components/ui/button-group.js +1 -1
  228. package/dist/src/components/ui/button.d.ts +5 -5
  229. package/dist/src/components/ui/button.d.ts.map +1 -1
  230. package/dist/src/components/ui/button.js +1 -1
  231. package/dist/src/components/ui/card.d.ts +1 -1
  232. package/dist/src/components/ui/card.d.ts.map +1 -1
  233. package/dist/src/components/ui/card.js +1 -1
  234. package/dist/src/components/ui/carousel.d.ts +1 -1
  235. package/dist/src/components/ui/carousel.d.ts.map +1 -1
  236. package/dist/src/components/ui/carousel.js +1 -1
  237. package/dist/src/components/ui/chart.d.ts +1 -1
  238. package/dist/src/components/ui/chart.d.ts.map +1 -1
  239. package/dist/src/components/ui/chart.js +1 -1
  240. package/dist/src/components/ui/checkbox.d.ts +2 -2
  241. package/dist/src/components/ui/checkbox.d.ts.map +1 -1
  242. package/dist/src/components/ui/checkbox.js +1 -1
  243. package/dist/src/components/ui/collapsible.d.ts +5 -4
  244. package/dist/src/components/ui/collapsible.d.ts.map +1 -1
  245. package/dist/src/components/ui/collapsible.js +1 -1
  246. package/dist/src/components/ui/combobox.d.ts +1 -1
  247. package/dist/src/components/ui/combobox.d.ts.map +1 -1
  248. package/dist/src/components/ui/combobox.js +1 -1
  249. package/dist/src/components/ui/command.d.ts +1 -1
  250. package/dist/src/components/ui/command.d.ts.map +1 -1
  251. package/dist/src/components/ui/command.js +1 -1
  252. package/dist/src/components/ui/context-menu.d.ts +7 -9
  253. package/dist/src/components/ui/context-menu.d.ts.map +1 -1
  254. package/dist/src/components/ui/context-menu.js +1 -1
  255. package/dist/src/components/ui/dialog.d.ts +12 -9
  256. package/dist/src/components/ui/dialog.d.ts.map +1 -1
  257. package/dist/src/components/ui/dialog.js +1 -1
  258. package/dist/src/components/ui/direction.d.ts +5 -5
  259. package/dist/src/components/ui/direction.d.ts.map +1 -1
  260. package/dist/src/components/ui/direction.js +1 -1
  261. package/dist/src/components/ui/drawer.d.ts +1 -1
  262. package/dist/src/components/ui/drawer.d.ts.map +1 -1
  263. package/dist/src/components/ui/drawer.js +1 -1
  264. package/dist/src/components/ui/dropdown-menu.d.ts +16 -16
  265. package/dist/src/components/ui/dropdown-menu.d.ts.map +1 -1
  266. package/dist/src/components/ui/dropdown-menu.js +1 -1
  267. package/dist/src/components/ui/empty.d.ts.map +1 -1
  268. package/dist/src/components/ui/empty.js +1 -1
  269. package/dist/src/components/ui/field.js +1 -1
  270. package/dist/src/components/ui/form.d.ts +1 -2
  271. package/dist/src/components/ui/form.d.ts.map +1 -1
  272. package/dist/src/components/ui/form.js +1 -1
  273. package/dist/src/components/ui/hover-card.d.ts +5 -5
  274. package/dist/src/components/ui/hover-card.d.ts.map +1 -1
  275. package/dist/src/components/ui/hover-card.js +1 -1
  276. package/dist/src/components/ui/input-group.d.ts +4 -2
  277. package/dist/src/components/ui/input-group.d.ts.map +1 -1
  278. package/dist/src/components/ui/input-group.js +1 -1
  279. package/dist/src/components/ui/input-otp.d.ts +1 -1
  280. package/dist/src/components/ui/input-otp.d.ts.map +1 -1
  281. package/dist/src/components/ui/input-otp.js +1 -1
  282. package/dist/src/components/ui/input.d.ts +1 -1
  283. package/dist/src/components/ui/input.d.ts.map +1 -1
  284. package/dist/src/components/ui/input.js +1 -1
  285. package/dist/src/components/ui/item.d.ts +4 -5
  286. package/dist/src/components/ui/item.d.ts.map +1 -1
  287. package/dist/src/components/ui/item.js +1 -1
  288. package/dist/src/components/ui/label.d.ts +2 -3
  289. package/dist/src/components/ui/label.d.ts.map +1 -1
  290. package/dist/src/components/ui/label.js +1 -1
  291. package/dist/src/components/ui/menubar.d.ts +18 -17
  292. package/dist/src/components/ui/menubar.d.ts.map +1 -1
  293. package/dist/src/components/ui/menubar.js +1 -1
  294. package/dist/src/components/ui/native-select.d.ts +1 -1
  295. package/dist/src/components/ui/native-select.d.ts.map +1 -1
  296. package/dist/src/components/ui/native-select.js +1 -1
  297. package/dist/src/components/ui/navigation-menu.d.ts +9 -11
  298. package/dist/src/components/ui/navigation-menu.d.ts.map +1 -1
  299. package/dist/src/components/ui/navigation-menu.js +1 -1
  300. package/dist/src/components/ui/pagination.d.ts +1 -1
  301. package/dist/src/components/ui/pagination.d.ts.map +1 -1
  302. package/dist/src/components/ui/pagination.js +1 -1
  303. package/dist/src/components/ui/popover.d.ts +6 -7
  304. package/dist/src/components/ui/popover.d.ts.map +1 -1
  305. package/dist/src/components/ui/popover.js +1 -1
  306. package/dist/src/components/ui/progress.d.ts +2 -2
  307. package/dist/src/components/ui/progress.d.ts.map +1 -1
  308. package/dist/src/components/ui/progress.js +1 -1
  309. package/dist/src/components/ui/radio-group.d.ts +5 -4
  310. package/dist/src/components/ui/radio-group.d.ts.map +1 -1
  311. package/dist/src/components/ui/radio-group.js +1 -1
  312. package/dist/src/components/ui/scroll-area.d.ts +3 -3
  313. package/dist/src/components/ui/scroll-area.d.ts.map +1 -1
  314. package/dist/src/components/ui/scroll-area.js +1 -1
  315. package/dist/src/components/ui/select.d.ts +6 -6
  316. package/dist/src/components/ui/select.d.ts.map +1 -1
  317. package/dist/src/components/ui/select.js +1 -1
  318. package/dist/src/components/ui/separator.d.ts +3 -3
  319. package/dist/src/components/ui/separator.d.ts.map +1 -1
  320. package/dist/src/components/ui/separator.js +1 -1
  321. package/dist/src/components/ui/sheet.d.ts +8 -8
  322. package/dist/src/components/ui/sheet.d.ts.map +1 -1
  323. package/dist/src/components/ui/sheet.js +1 -1
  324. package/dist/src/components/ui/sidebar.d.ts +9 -15
  325. package/dist/src/components/ui/sidebar.d.ts.map +1 -1
  326. package/dist/src/components/ui/sidebar.js +1 -1
  327. package/dist/src/components/ui/slider.d.ts +2 -2
  328. package/dist/src/components/ui/slider.d.ts.map +1 -1
  329. package/dist/src/components/ui/slider.js +1 -1
  330. package/dist/src/components/ui/sonner.d.ts.map +1 -1
  331. package/dist/src/components/ui/sonner.js +1 -1
  332. package/dist/src/components/ui/spinner.d.ts.map +1 -1
  333. package/dist/src/components/ui/spinner.js +1 -1
  334. package/dist/src/components/ui/switch.d.ts +2 -2
  335. package/dist/src/components/ui/switch.d.ts.map +1 -1
  336. package/dist/src/components/ui/switch.js +1 -1
  337. package/dist/src/components/ui/table.d.ts +1 -1
  338. package/dist/src/components/ui/table.d.ts.map +1 -1
  339. package/dist/src/components/ui/table.js +1 -1
  340. package/dist/src/components/ui/tabs.d.ts +4 -4
  341. package/dist/src/components/ui/tabs.d.ts.map +1 -1
  342. package/dist/src/components/ui/tabs.js +1 -1
  343. package/dist/src/components/ui/textarea.d.ts +1 -1
  344. package/dist/src/components/ui/textarea.d.ts.map +1 -1
  345. package/dist/src/components/ui/textarea.js +1 -1
  346. package/dist/src/components/ui/toggle-group.d.ts +1 -1
  347. package/dist/src/components/ui/toggle-group.d.ts.map +1 -1
  348. package/dist/src/components/ui/toggle-group.js +1 -1
  349. package/dist/src/components/ui/tooltip.d.ts +1 -1
  350. package/dist/src/components/ui/tooltip.d.ts.map +1 -1
  351. package/dist/src/components/ui/tooltip.js +1 -1
  352. package/dist/src/config.js +1 -1
  353. package/dist/src/database/admins.d.ts +20 -0
  354. package/dist/src/database/admins.d.ts.map +1 -1
  355. package/dist/src/database/admins.js +1 -1
  356. package/dist/src/database/languages.d.ts.map +1 -1
  357. package/dist/src/database/languages.js +1 -1
  358. package/dist/src/database/logs.d.ts +1 -1
  359. package/dist/src/database/moderators.d.ts +20 -0
  360. package/dist/src/database/moderators.d.ts.map +1 -1
  361. package/dist/src/database/moderators.js +1 -1
  362. package/dist/src/database/queue.d.ts +273 -0
  363. package/dist/src/database/queue.d.ts.map +1 -0
  364. package/dist/src/database/queue.js +1 -0
  365. package/dist/src/database/users.d.ts +63 -0
  366. package/dist/src/database/users.d.ts.map +1 -1
  367. package/dist/src/database/users.js +1 -1
  368. package/dist/src/emails/default-template.d.ts +1 -1
  369. package/dist/src/emails/default-template.d.ts.map +1 -1
  370. package/dist/src/emails/default-template.js +1 -1
  371. package/dist/src/emails/reset-password.js +1 -1
  372. package/dist/src/emails/test-email.d.ts +26 -0
  373. package/dist/src/emails/test-email.d.ts.map +1 -0
  374. package/dist/src/emails/test-email.js +1 -0
  375. package/dist/src/emails/ui/button.d.ts +2 -2
  376. package/dist/src/emails/ui/button.d.ts.map +1 -1
  377. package/dist/src/emails/ui/button.js +1 -1
  378. package/dist/src/emails/ui/card.d.ts +1 -1
  379. package/dist/src/emails/ui/card.d.ts.map +1 -1
  380. package/dist/src/emails/ui/card.js +1 -1
  381. package/dist/src/hooks/use-captcha.d.ts.map +1 -1
  382. package/dist/src/hooks/use-captcha.js +1 -1
  383. package/dist/src/hooks/use-mobile.js +1 -1
  384. package/dist/src/lib/api/get-moderator-permissions-api.d.ts +4 -0
  385. package/dist/src/lib/api/get-moderator-permissions-api.d.ts.map +1 -0
  386. package/dist/src/lib/api/get-moderator-permissions-api.js +1 -0
  387. package/dist/src/lib/api/get-next-cron-run-date.js +1 -1
  388. package/dist/src/lib/api/get-queue-backoff-date.d.ts +2 -0
  389. package/dist/src/lib/api/get-queue-backoff-date.d.ts.map +1 -0
  390. package/dist/src/lib/api/get-queue-backoff-date.js +1 -0
  391. package/dist/src/lib/api/get-queue-backoff-date.test.d.ts +2 -0
  392. package/dist/src/lib/api/get-queue-backoff-date.test.d.ts.map +1 -0
  393. package/dist/src/lib/api/get-queue-backoff-date.test.js +1 -0
  394. package/dist/src/lib/api/get-session-admin-api.d.ts +12 -0
  395. package/dist/src/lib/api/get-session-admin-api.d.ts.map +1 -1
  396. package/dist/src/lib/api/get-session-admin-api.js +1 -1
  397. package/dist/src/lib/api/get-session-api.d.ts +1 -0
  398. package/dist/src/lib/api/get-session-api.d.ts.map +1 -1
  399. package/dist/src/lib/api/resolve-queue-task-outcome.d.ts +14 -0
  400. package/dist/src/lib/api/resolve-queue-task-outcome.d.ts.map +1 -0
  401. package/dist/src/lib/api/resolve-queue-task-outcome.js +1 -0
  402. package/dist/src/lib/api/resolve-queue-task-outcome.test.d.ts +2 -0
  403. package/dist/src/lib/api/resolve-queue-task-outcome.test.d.ts.map +1 -0
  404. package/dist/src/lib/api/resolve-queue-task-outcome.test.js +1 -0
  405. package/dist/src/lib/api/should-cron-job-run.js +1 -1
  406. package/dist/src/lib/config.d.ts +1 -0
  407. package/dist/src/lib/config.d.ts.map +1 -1
  408. package/dist/src/lib/config.js +1 -1
  409. package/dist/src/lib/fetcher/types.d.ts.map +1 -1
  410. package/dist/src/lib/navigation.d.ts +5 -5
  411. package/dist/src/lib/plugin.d.ts +3 -0
  412. package/dist/src/lib/plugin.d.ts.map +1 -1
  413. package/dist/src/lib/utils.d.ts +1 -0
  414. package/dist/src/lib/utils.d.ts.map +1 -1
  415. package/dist/src/lib/utils.js +1 -1
  416. package/dist/src/routes/admin/core/advanced/queue/page.d.ts +13 -0
  417. package/dist/src/routes/admin/core/advanced/queue/page.d.ts.map +1 -0
  418. package/dist/src/routes/admin/core/advanced/queue/page.js +1 -0
  419. package/dist/src/routes/admin/core/debug/page.d.ts.map +1 -1
  420. package/dist/src/routes/admin/core/debug/page.js +1 -1
  421. package/dist/src/routes/admin/core/staff/admins/create/page.d.ts +3 -0
  422. package/dist/src/routes/admin/core/staff/admins/create/page.d.ts.map +1 -0
  423. package/dist/src/routes/admin/core/staff/admins/create/page.js +1 -0
  424. package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts +7 -0
  425. package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -0
  426. package/dist/src/routes/admin/core/staff/admins/edit/[id]/page.js +1 -0
  427. package/dist/src/routes/admin/core/staff/admins/page.d.ts +4 -0
  428. package/dist/src/routes/admin/core/staff/admins/page.d.ts.map +1 -0
  429. package/dist/src/routes/admin/core/staff/admins/page.js +1 -0
  430. package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts +3 -0
  431. package/dist/src/routes/admin/core/staff/moderators/create/page.d.ts.map +1 -0
  432. package/dist/src/routes/admin/core/staff/moderators/create/page.js +1 -0
  433. package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts +7 -0
  434. package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -0
  435. package/dist/src/routes/admin/core/staff/moderators/edit/[id]/page.js +1 -0
  436. package/dist/src/routes/admin/core/staff/moderators/page.d.ts +4 -0
  437. package/dist/src/routes/admin/core/staff/moderators/page.d.ts.map +1 -0
  438. package/dist/src/routes/admin/core/staff/moderators/page.js +1 -0
  439. package/dist/src/routes/admin/core/system/integrations/page.d.ts +7 -0
  440. package/dist/src/routes/admin/core/system/integrations/page.d.ts.map +1 -0
  441. package/dist/src/routes/admin/core/system/integrations/page.js +1 -0
  442. package/dist/src/routes/admin/core/users/{[nameCode] → [id]}/page.d.ts +2 -2
  443. package/dist/src/routes/admin/core/users/[id]/page.d.ts.map +1 -0
  444. package/dist/src/routes/admin/core/users/[id]/page.js +1 -0
  445. package/dist/src/routes/admin/core/users/page.d.ts.map +1 -1
  446. package/dist/src/routes/admin/core/users/page.js +1 -1
  447. package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts +1 -5
  448. package/dist/src/routes/breadcrumb/admin/[...all]/page.d.ts.map +1 -1
  449. package/dist/src/routes/breadcrumb/admin/[...all]/page.js +1 -1
  450. package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts +2 -0
  451. package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.d.ts.map +1 -0
  452. package/dist/src/routes/breadcrumb/admin/core/staff/admins/create/page.js +1 -0
  453. package/dist/src/routes/breadcrumb/admin/core/{users/[nameCode] → staff/admins/edit/[id]}/page.d.ts +1 -1
  454. package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.d.ts.map +1 -0
  455. package/dist/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.js +1 -0
  456. package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts +2 -0
  457. package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.d.ts.map +1 -0
  458. package/dist/src/routes/breadcrumb/admin/core/staff/admins/page.js +1 -0
  459. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts +2 -0
  460. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.d.ts.map +1 -0
  461. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/create/page.js +1 -0
  462. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts +6 -0
  463. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.d.ts.map +1 -0
  464. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.js +1 -0
  465. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts +2 -0
  466. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.d.ts.map +1 -0
  467. package/dist/src/routes/breadcrumb/admin/core/staff/moderators/page.js +1 -0
  468. package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts +6 -0
  469. package/dist/src/routes/breadcrumb/admin/core/users/[id]/page.d.ts.map +1 -0
  470. package/dist/src/routes/breadcrumb/admin/core/users/{[nameCode] → [id]}/page.js +1 -1
  471. package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts +1 -5
  472. package/dist/src/routes/breadcrumb/main/[...rest]/page.d.ts.map +1 -1
  473. package/dist/src/routes/breadcrumb/main/[...rest]/page.js +1 -1
  474. package/dist/src/routes/breadcrumb/main/settings/overview/page.d.ts.map +1 -0
  475. package/dist/src/routes/breadcrumb/main/settings/overview/page.js +1 -0
  476. package/dist/src/routes/breadcrumb/main/settings/page.d.ts.map +1 -0
  477. package/dist/src/routes/breadcrumb/main/{register → settings}/page.js +1 -1
  478. package/dist/src/routes/breadcrumb/main/settings/security/page.d.ts.map +1 -0
  479. package/dist/src/routes/breadcrumb/main/settings/security/page.js +1 -0
  480. package/dist/src/routes/main/settings/layout.d.ts +5 -0
  481. package/dist/src/routes/main/settings/layout.d.ts.map +1 -0
  482. package/dist/src/routes/main/settings/layout.js +1 -0
  483. package/dist/src/routes/main/settings/overview/page.d.ts +5 -0
  484. package/dist/src/routes/main/settings/overview/page.d.ts.map +1 -0
  485. package/dist/src/routes/main/settings/overview/page.js +1 -0
  486. package/dist/src/routes/main/settings/page.d.ts +5 -0
  487. package/dist/src/routes/main/settings/page.d.ts.map +1 -0
  488. package/dist/src/routes/main/settings/page.js +1 -0
  489. package/dist/src/routes/main/settings/security/page.d.ts +5 -0
  490. package/dist/src/routes/main/settings/security/page.d.ts.map +1 -0
  491. package/dist/src/routes/main/settings/security/page.js +1 -0
  492. package/dist/src/views/admin/layouts/admin-layout.d.ts.map +1 -1
  493. package/dist/src/views/admin/layouts/admin-layout.js +1 -1
  494. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts +6 -0
  495. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.d.ts.map +1 -0
  496. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-admin.js +1 -0
  497. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts +5 -0
  498. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.d.ts.map +1 -0
  499. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-create-admin.js +1 -0
  500. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts +6 -0
  501. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.d.ts.map +1 -0
  502. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-staff-edit-admin.js +1 -0
  503. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.d.ts +2 -2
  504. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.d.ts.map +1 -1
  505. package/dist/src/views/admin/layouts/breadcrumb/breadcrumb-user-admin.js +1 -1
  506. package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.d.ts.map +1 -1
  507. package/dist/src/views/admin/layouts/breadcrumb/resolve-breadcrumb.js +1 -1
  508. package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.d.ts.map +1 -1
  509. package/dist/src/views/admin/layouts/sidebar/nav/get-admin-nav.js +1 -1
  510. package/dist/src/views/admin/layouts/sidebar/nav/item.d.ts.map +1 -1
  511. package/dist/src/views/admin/layouts/sidebar/nav/item.js +1 -1
  512. package/dist/src/views/admin/layouts/user-bar/client.d.ts.map +1 -1
  513. package/dist/src/views/admin/layouts/user-bar/client.js +1 -1
  514. package/dist/src/views/admin/layouts/user-bar/user-bar.js +1 -1
  515. package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts +5 -0
  516. package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.d.ts.map +1 -0
  517. package/dist/src/views/admin/views/core/advanced/queue/badges/status-badge.js +1 -0
  518. package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts +7 -0
  519. package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.d.ts.map +1 -0
  520. package/dist/src/views/admin/views/core/advanced/queue/queue-table-view.js +1 -0
  521. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts.map +1 -1
  522. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +1 -1
  523. package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts +2 -0
  524. package/dist/src/views/admin/views/core/debug/queue/queue-view.d.ts.map +1 -0
  525. package/dist/src/views/admin/views/core/debug/queue/queue-view.js +1 -0
  526. package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts +1 -1
  527. package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.d.ts.map +1 -1
  528. package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js +1 -1
  529. package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts +1 -1
  530. package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts +5 -0
  531. package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.d.ts.map +1 -0
  532. package/dist/src/views/admin/views/core/staff/create/create-staff-permissions-view.js +1 -0
  533. package/dist/src/views/admin/views/core/staff/create/form.d.ts +6 -0
  534. package/dist/src/views/admin/views/core/staff/create/form.d.ts.map +1 -0
  535. package/dist/src/views/admin/views/core/staff/create/form.js +1 -0
  536. package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts +14 -0
  537. package/dist/src/views/admin/views/core/staff/create/mutation-api.d.ts.map +1 -0
  538. package/dist/src/views/admin/views/core/staff/create/mutation-api.js +1 -0
  539. package/dist/src/views/admin/views/core/staff/create/search.action.d.ts +8 -0
  540. package/dist/src/views/admin/views/core/staff/create/search.action.d.ts.map +1 -0
  541. package/dist/src/views/admin/views/core/staff/create/search.action.js +1 -0
  542. package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts +8 -0
  543. package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.d.ts.map +1 -0
  544. package/dist/src/views/admin/views/core/staff/edit/edit-staff-permissions-view.js +1 -0
  545. package/dist/src/views/admin/views/core/staff/edit/form.d.ts +29 -0
  546. package/dist/src/views/admin/views/core/staff/edit/form.d.ts.map +1 -0
  547. package/dist/src/views/admin/views/core/staff/edit/form.js +1 -0
  548. package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts +13 -0
  549. package/dist/src/views/admin/views/core/staff/edit/mutation-api.d.ts.map +1 -0
  550. package/dist/src/views/admin/views/core/staff/edit/mutation-api.js +1 -0
  551. package/dist/src/views/admin/views/core/staff/selectable-card.d.ts +11 -0
  552. package/dist/src/views/admin/views/core/staff/selectable-card.d.ts.map +1 -0
  553. package/dist/src/views/admin/views/core/staff/selectable-card.js +1 -0
  554. package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts +11 -0
  555. package/dist/src/views/admin/views/core/staff/table/actions/delete-action.d.ts.map +1 -0
  556. package/dist/src/views/admin/views/core/staff/table/actions/delete-action.js +1 -0
  557. package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts +10 -0
  558. package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.d.ts.map +1 -0
  559. package/dist/src/views/admin/views/core/staff/table/actions/staff-row-actions.js +1 -0
  560. package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts +7 -0
  561. package/dist/src/views/admin/views/core/staff/table/staff-table.d.ts.map +1 -0
  562. package/dist/src/views/admin/views/core/staff/table/staff-table.js +1 -0
  563. package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts +18 -0
  564. package/dist/src/views/admin/views/core/staff/table/staff-user-format.d.ts.map +1 -0
  565. package/dist/src/views/admin/views/core/staff/table/staff-user-format.js +1 -0
  566. package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts +4 -0
  567. package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.d.ts.map +1 -0
  568. package/dist/src/views/admin/views/core/staff/views/admins/admins-staff-view.js +1 -0
  569. package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts +4 -0
  570. package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.d.ts.map +1 -0
  571. package/dist/src/views/admin/views/core/staff/views/moderators/moderators-staff-view.js +1 -0
  572. package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts +15 -0
  573. package/dist/src/views/admin/views/core/system/integrations/integration-card.d.ts.map +1 -0
  574. package/dist/src/views/admin/views/core/system/integrations/integration-card.js +1 -0
  575. package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts +3 -0
  576. package/dist/src/views/admin/views/core/system/integrations/integrations-view.d.ts.map +1 -0
  577. package/dist/src/views/admin/views/core/system/integrations/integrations-view.js +1 -0
  578. package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts +2 -0
  579. package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.d.ts.map +1 -0
  580. package/dist/src/views/admin/views/core/system/integrations/send-test-email/content.js +1 -0
  581. package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts +12 -0
  582. package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.d.ts.map +1 -0
  583. package/dist/src/views/admin/views/core/system/integrations/send-test-email/mutation-api.js +1 -0
  584. package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts +3 -0
  585. package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.d.ts.map +1 -0
  586. package/dist/src/views/admin/views/core/system/integrations/send-test-email/send-test-email.js +1 -0
  587. package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts +15 -0
  588. package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.d.ts.map +1 -0
  589. package/dist/src/views/admin/views/core/system/integrations/send-test-email/use-form.js +1 -0
  590. package/dist/src/views/admin/views/core/users/actions/create/create.d.ts.map +1 -1
  591. package/dist/src/views/admin/views/core/users/actions/create/create.js +1 -1
  592. package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts +1 -1
  593. package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.d.ts.map +1 -1
  594. package/dist/src/views/admin/views/core/users/actions/verify-email/mutation-api.js +1 -1
  595. package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.d.ts +2 -2
  596. package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.d.ts.map +1 -1
  597. package/dist/src/views/admin/views/core/users/actions/verify-email/verify-email.js +1 -1
  598. package/dist/src/views/admin/views/core/users/actions.d.ts +3 -3
  599. package/dist/src/views/admin/views/core/users/actions.d.ts.map +1 -1
  600. package/dist/src/views/admin/views/core/users/actions.js +1 -1
  601. package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts +4 -0
  602. package/dist/src/views/admin/views/core/users/show/edit-buttons.d.ts.map +1 -0
  603. package/dist/src/views/admin/views/core/users/show/edit-buttons.js +1 -0
  604. package/dist/src/views/admin/views/core/users/show/edit-field.d.ts +13 -0
  605. package/dist/src/views/admin/views/core/users/show/edit-field.d.ts.map +1 -0
  606. package/dist/src/views/admin/views/core/users/show/edit-field.js +1 -0
  607. package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts +5 -0
  608. package/dist/src/views/admin/views/core/users/show/edit-name-code.d.ts.map +1 -0
  609. package/dist/src/views/admin/views/core/users/show/edit-name-code.js +1 -0
  610. package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts +19 -0
  611. package/dist/src/views/admin/views/core/users/show/mutation-api.d.ts.map +1 -0
  612. package/dist/src/views/admin/views/core/users/show/mutation-api.js +1 -0
  613. package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts +8 -0
  614. package/dist/src/views/admin/views/core/users/show/roles/edit-roles.d.ts.map +1 -0
  615. package/dist/src/views/admin/views/core/users/show/roles/edit-roles.js +1 -0
  616. package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts +8 -0
  617. package/dist/src/views/admin/views/core/users/show/roles/roles.d.ts.map +1 -0
  618. package/dist/src/views/admin/views/core/users/show/roles/roles.js +1 -0
  619. package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts +10 -0
  620. package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.d.ts.map +1 -0
  621. package/dist/src/views/admin/views/core/users/show/roles/search-roles.action.js +1 -0
  622. package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts +13 -0
  623. package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.d.ts.map +1 -0
  624. package/dist/src/views/admin/views/core/users/show/roles/update-roles.action.js +1 -0
  625. package/dist/src/views/admin/views/core/users/show/show-user-admin-view.d.ts +2 -2
  626. package/dist/src/views/admin/views/core/users/show/show-user-admin-view.d.ts.map +1 -1
  627. package/dist/src/views/admin/views/core/users/show/show-user-admin-view.js +1 -1
  628. package/dist/src/views/admin/views/core/users/users-admin-view.d.ts.map +1 -1
  629. package/dist/src/views/admin/views/core/users/users-admin-view.js +1 -1
  630. package/dist/src/views/auth/settings/layout.d.ts +4 -0
  631. package/dist/src/views/auth/settings/layout.d.ts.map +1 -0
  632. package/dist/src/views/auth/settings/layout.js +1 -0
  633. package/dist/src/views/auth/settings/nav.d.ts +2 -0
  634. package/dist/src/views/auth/settings/nav.d.ts.map +1 -0
  635. package/dist/src/views/auth/settings/nav.js +1 -0
  636. package/dist/src/views/auth/settings/overview/overview.d.ts +2 -0
  637. package/dist/src/views/auth/settings/overview/overview.d.ts.map +1 -0
  638. package/dist/src/views/auth/settings/overview/overview.js +1 -0
  639. package/dist/src/views/auth/settings/security/security.d.ts +2 -0
  640. package/dist/src/views/auth/settings/security/security.d.ts.map +1 -0
  641. package/dist/src/views/auth/settings/security/security.js +1 -0
  642. package/dist/src/views/auth/settings/shell.d.ts +4 -0
  643. package/dist/src/views/auth/settings/shell.d.ts.map +1 -0
  644. package/dist/src/views/auth/settings/shell.js +1 -0
  645. package/dist/src/views/auth/sso/callback/client/client.d.ts.map +1 -1
  646. package/dist/src/views/auth/sso/callback/client/client.js +1 -1
  647. package/dist/src/views/breadcrumb/breadcrumb-main.js +1 -1
  648. package/dist/src/views/breadcrumb/breadcrumb-render.js +1 -1
  649. package/dist/src/views/error/global-error-view.js +1 -1
  650. package/dist/src/views/layouts/provider.d.ts.map +1 -1
  651. package/dist/src/views/layouts/provider.js +1 -1
  652. package/dist/src/views/layouts/root-layout.d.ts.map +1 -1
  653. package/dist/src/views/layouts/root-layout.js +1 -1
  654. package/dist/src/views/layouts/theme/header/user/auth/auth.js +1 -1
  655. package/dist/src/views/layouts/theme/header/user/auth/client.d.ts.map +1 -1
  656. package/dist/src/views/layouts/theme/header/user/auth/client.js +1 -1
  657. package/dist/src/vitnode.config.d.ts +7 -3
  658. package/dist/src/vitnode.config.d.ts.map +1 -1
  659. package/dist/src/ws/handle.d.ts.map +1 -1
  660. package/dist/src/ws/handle.js +1 -1
  661. package/dist/src/ws/manager.d.ts.map +1 -1
  662. package/dist/src/ws/manager.js +1 -1
  663. package/dist/src/ws/provider.d.ts.map +1 -1
  664. package/dist/src/ws/provider.js +1 -1
  665. package/dist/src/ws/registry.d.ts +5 -0
  666. package/dist/src/ws/registry.d.ts.map +1 -1
  667. package/dist/src/ws/registry.js +1 -1
  668. package/dist/tsconfig.tsbuildinfo +1 -1
  669. package/dist/vitest.config.d.ts.map +1 -1
  670. package/package.json +24 -26
  671. package/src/locales/en.json +279 -4
  672. package/src/routes/admin/core/advanced/queue/page.tsx +51 -0
  673. package/src/routes/admin/core/debug/page.tsx +25 -4
  674. package/src/routes/admin/core/staff/admins/create/page.tsx +17 -0
  675. package/src/routes/admin/core/staff/admins/edit/[id]/page.tsx +23 -0
  676. package/src/routes/admin/core/staff/admins/page.tsx +14 -0
  677. package/src/routes/admin/core/staff/moderators/create/page.tsx +17 -0
  678. package/src/routes/admin/core/staff/moderators/edit/[id]/page.tsx +23 -0
  679. package/src/routes/admin/core/staff/moderators/page.tsx +14 -0
  680. package/src/routes/admin/core/system/integrations/page.tsx +43 -0
  681. package/src/routes/admin/core/users/{[nameCode] → [id]}/page.tsx +7 -7
  682. package/src/routes/admin/core/users/page.tsx +10 -2
  683. package/src/routes/breadcrumb/admin/[...all]/page.tsx +2 -16
  684. package/src/routes/breadcrumb/admin/core/staff/admins/create/page.tsx +5 -0
  685. package/src/routes/breadcrumb/admin/core/staff/admins/edit/[id]/page.tsx +11 -0
  686. package/src/routes/breadcrumb/admin/core/staff/admins/page.tsx +5 -0
  687. package/src/routes/breadcrumb/admin/core/staff/moderators/create/page.tsx +5 -0
  688. package/src/routes/breadcrumb/admin/core/staff/moderators/edit/[id]/page.tsx +11 -0
  689. package/src/routes/breadcrumb/admin/core/staff/moderators/page.tsx +5 -0
  690. package/src/routes/breadcrumb/admin/core/users/[id]/page.tsx +11 -0
  691. package/src/routes/breadcrumb/main/[...rest]/page.tsx +2 -16
  692. package/src/routes/breadcrumb/main/settings/overview/page.tsx +17 -0
  693. package/src/routes/breadcrumb/main/{register → settings}/page.tsx +3 -3
  694. package/src/routes/breadcrumb/main/settings/security/page.tsx +17 -0
  695. package/src/routes/main/settings/layout.tsx +16 -0
  696. package/src/routes/main/settings/overview/page.tsx +15 -0
  697. package/src/routes/main/settings/page.tsx +15 -0
  698. package/src/routes/main/settings/security/page.tsx +15 -0
  699. package/dist/scripts/get-config.js +0 -66
  700. package/dist/scripts/plugin.js +0 -206
  701. package/dist/scripts/prepare-database.js +0 -177
  702. package/dist/scripts/prepare-plugins-files.js +0 -152
  703. package/dist/scripts/run-interactive-shell-command.js +0 -21
  704. package/dist/scripts/shared/file-utils.js +0 -203
  705. package/dist/src/locales/en.json +0 -372
  706. package/dist/src/routes/admin/core/users/[nameCode]/page.d.ts.map +0 -1
  707. package/dist/src/routes/admin/core/users/[nameCode]/page.js +0 -1
  708. package/dist/src/routes/breadcrumb/admin/core/users/[nameCode]/page.d.ts.map +0 -1
  709. package/dist/src/routes/breadcrumb/main/login/page.d.ts.map +0 -1
  710. package/dist/src/routes/breadcrumb/main/login/page.js +0 -1
  711. package/dist/src/routes/breadcrumb/main/login/reset-password/page.d.ts.map +0 -1
  712. package/dist/src/routes/breadcrumb/main/login/reset-password/page.js +0 -1
  713. package/dist/src/routes/breadcrumb/main/register/page.d.ts.map +0 -1
  714. package/dist/tsup.config.js +0 -17
  715. package/dist/vitest.config.js +0 -48
  716. package/src/routes/breadcrumb/admin/core/users/[nameCode]/page.tsx +0 -12
  717. package/src/routes/breadcrumb/main/login/page.tsx +0 -11
  718. package/src/routes/breadcrumb/main/login/reset-password/page.tsx +0 -20
  719. /package/dist/src/routes/breadcrumb/main/{login → settings/overview}/page.d.ts +0 -0
  720. /package/dist/src/routes/breadcrumb/main/{login/reset-password → settings}/page.d.ts +0 -0
  721. /package/dist/src/routes/breadcrumb/main/{register → settings/security}/page.d.ts +0 -0
@@ -1,8 +1,13 @@
1
1
  import type { Context, Env, Next } from "hono";
2
+ import type { Redis } from "ioredis";
2
3
  import type { VitNodeApiConfig, VitNodeConfig } from "../../vitnode.config";
3
4
  import type { VitNodeRealtime } from "../../ws/registry";
4
- import { type EmailModelSendArgs } from "../../api/models/email";
5
+ import { CacheModel } from "../../api/lib/cache";
6
+ import { EmailModel } from "../../api/models/email";
7
+ import { QueueModel } from "../../api/models/queue";
5
8
  import type { BuildCronReturn } from "../lib/cron";
9
+ import type { PermissionStaffCatalogEntry } from "../lib/permission-staff";
10
+ import type { BuildQueueTaskReturn } from "../lib/queue";
6
11
  import type { WebSocketConfig } from "../lib/websocket";
7
12
  import type { SSOApiPlugin } from "../models/sso";
8
13
  import { type LoggerMiddlewareType } from "../lib/logger-middleware";
@@ -28,6 +33,7 @@ export interface EnvVariablesVitNode {
28
33
  roleId: number;
29
34
  };
30
35
  };
36
+ cache: CacheModel;
31
37
  core: {
32
38
  authorization: {
33
39
  adminCookieExpires: number;
@@ -46,6 +52,7 @@ export interface EnvVariablesVitNode {
46
52
  })[];
47
53
  cronSecret?: string;
48
54
  email?: VitNodeApiConfig["email"];
55
+ hasCronAdapter: boolean;
49
56
  metadata: {
50
57
  shortTitle?: string;
51
58
  title: string;
@@ -53,20 +60,24 @@ export interface EnvVariablesVitNode {
53
60
  pathToMessages: (path: string) => Promise<{
54
61
  default: object;
55
62
  }>;
63
+ permissionStaff: PermissionStaffCatalogEntry[];
56
64
  plugins: {
57
65
  id: string;
58
66
  }[];
67
+ queue: (BuildQueueTaskReturn & {
68
+ module: string;
69
+ pluginId: string;
70
+ })[];
59
71
  webSockets: WebSocketConfig[];
60
72
  };
61
73
  db: Pick<VitNodeApiConfig, "dbProvider">["dbProvider"];
62
- email: {
63
- send: (args: EmailModelSendArgs) => Promise<void>;
64
- };
74
+ email: EmailModel;
65
75
  ipAddress: string;
66
76
  log: LoggerMiddlewareType;
67
77
  plugin: {
68
78
  id: string;
69
79
  };
80
+ queue: QueueModel;
70
81
  realtime: VitNodeRealtime;
71
82
  user: null | {
72
83
  avatarColor: string;
@@ -81,7 +92,9 @@ export interface EnvVariablesVitNode {
81
92
  roleId: number;
82
93
  };
83
94
  }
84
- export declare const globalMiddleware: ({ authorization, metadata, email, dbProvider, captcha, plugins, pathToMessages, }: Pick<VitNodeApiConfig, "authorization" | "captcha" | "dbProvider" | "email" | "pathToMessages" | "plugins"> & Pick<VitNodeConfig, "metadata">) => (c: Context, next: Next) => Promise<void>;
95
+ export declare const globalMiddleware: ({ authorization, metadata, email, dbProvider, captcha, cron, plugins, pathToMessages, cacheClient, }: Pick<VitNodeApiConfig, "authorization" | "captcha" | "cron" | "dbProvider" | "email" | "pathToMessages" | "plugins"> & Pick<VitNodeConfig, "metadata"> & {
96
+ cacheClient: null | Redis;
97
+ }) => (c: Context, next: Next) => Promise<void>;
85
98
  export declare const pluginMiddleware: (pluginId: string) => (c: Context, next: Next) => Promise<void>;
86
99
  export declare const globalAdminMiddleware: () => (c: Context, next: Next) => Promise<void>;
87
100
  //# sourceMappingURL=global.middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{HTTPException}from"hono/http-exception";import{EmailModel}from"../models/email.js";import{SessionModel}from"../models/session.js";import{SessionAdminModel}from"../models/session-admin.js";import{CONFIG}from"../../lib/config.js";import{realtime}from"../../ws/registry.js";import{loggerMiddleware}from"../lib/logger-middleware.js";export const globalMiddleware=({authorization,metadata,email,dbProvider,captcha,plugins,pathToMessages})=>{const pluginsMetadata=plugins.map(plugin=>({id:plugin.pluginId}));const cronMetadata=plugins.flatMap(plugin=>plugin.cronJobs.map(cronJob=>({pluginId:plugin.pluginId,module:cronJob.module,name:cronJob.name,schedule:cronJob.schedule,handler:cronJob.handler,description:cronJob.description})));const webSocketsMetadata=plugins.flatMap(plugin=>plugin.webSockets.map(webSocket=>({...webSocket,pluginId:plugin.pluginId})));const ipHeaderKeys=["x-forwarded-for","x-real-ip","cf-connecting-ip","x-client-ip","x-forwarded","x-cluster-client-ip","forwarded-for","forwarded","via","remote-addr","client-ip","ip","x-ip","true-client-ip","fastly-client-ip","x-fastly-client-ip"];return async(c,next)=>{let ipAddress;for(const key of ipHeaderKeys){ipAddress=c.req.header(key);if(ipAddress)break;ipAddress=c.req.raw.headers.get(key)??undefined;if(ipAddress)break}c.set("ipAddress",ipAddress??"127.0.0.1");c.set("db",dbProvider);c.set("email",new EmailModel(c));c.set("realtime",realtime);c.set("core",{pathToMessages,metadata,email,authorization:{cookieName:authorization?.cookieName??"vitnode_auth",cookie_expires:authorization?.cookieExpires??1e3*60*60*24*90,ssoAdapters:authorization?.ssoAdapters??[],deviceCookieName:authorization?.deviceCookieName??"vitnode_device",deviceCookieExpires:authorization?.deviceCookieExpires??1e3*60*60*24*365,adminCookieName:authorization?.adminCookieName??"vitnode_auth_admin",adminCookieExpires:authorization?.adminCookieExpires??1e3*60*60*24*1,cookieSecure:authorization?.cookieSecure??true},captcha,cronSecret:CONFIG.cronJobSecret,plugins:pluginsMetadata,cron:cronMetadata,webSockets:webSocketsMetadata});const user=await new SessionModel(c).getUser();c.set("user",user);c.set("admin",null);c.set("log",loggerMiddleware(c));await next()}};export const pluginMiddleware=pluginId=>{return async(c,next)=>{c.set("plugin",{id:pluginId});await next()}};export const globalAdminMiddleware=()=>{return async(c,next)=>{const user=await new SessionAdminModel(c).getUser();if(!user)throw new HTTPException(403);c.set("admin",{user});await next()}};
1
+ import{HTTPException}from"hono/http-exception";import{CacheModel}from"../lib/cache.js";import{EmailModel}from"../models/email.js";import{QueueModel}from"../models/queue.js";import{SessionModel}from"../models/session.js";import{SessionAdminModel}from"../models/session-admin.js";import{CONFIG}from"../../lib/config.js";import{realtime}from"../../ws/registry.js";import{loggerMiddleware}from"../lib/logger-middleware.js";import{normalizePermissionStaffModules}from"../lib/permission-staff.js";export const globalMiddleware=({authorization,metadata,email,dbProvider,captcha,cron,plugins,pathToMessages,cacheClient})=>{const pluginsMetadata=plugins.map(plugin=>({id:plugin.pluginId}));const cronMetadata=plugins.flatMap(plugin=>(plugin.cronJobs??[]).map(cronJob=>({pluginId:plugin.pluginId,module:cronJob.module,name:cronJob.name,schedule:cronJob.schedule,handler:cronJob.handler,description:cronJob.description})));const queueMetadata=plugins.flatMap(plugin=>(plugin.queueTasks??[]).map(task=>({pluginId:plugin.pluginId,module:task.module,name:task.name,handler:task.handler,description:task.description,maxAttempts:task.maxAttempts})));const webSocketsMetadata=plugins.flatMap(plugin=>(plugin.webSockets??[]).map(webSocket=>({...webSocket,pluginId:plugin.pluginId})));const permissionStaffMetadata=plugins.map(plugin=>({pluginId:plugin.pluginId,admin:normalizePermissionStaffModules(plugin.permissionStaff?.admin),moderator:normalizePermissionStaffModules(plugin.permissionStaff?.moderator)}));const ipHeaderKeys=["x-forwarded-for","x-real-ip","cf-connecting-ip","x-client-ip","x-forwarded","x-cluster-client-ip","forwarded-for","forwarded","via","remote-addr","client-ip","ip","x-ip","true-client-ip","fastly-client-ip","x-fastly-client-ip"];return async(c,next)=>{let ipAddress;for(const key of ipHeaderKeys){ipAddress=c.req.header(key);if(ipAddress)break;ipAddress=c.req.raw.headers.get(key)??undefined;if(ipAddress)break}c.set("ipAddress",ipAddress??"127.0.0.1");c.set("db",dbProvider);c.set("cache",new CacheModel(cacheClient,c));c.set("email",new EmailModel(c));c.set("queue",new QueueModel(c));c.set("realtime",realtime);c.set("core",{pathToMessages,metadata,email,authorization:{cookieName:authorization?.cookieName??"vitnode_auth",cookie_expires:authorization?.cookieExpires??1e3*60*60*24*90,ssoAdapters:authorization?.ssoAdapters??[],deviceCookieName:authorization?.deviceCookieName??"vitnode_device",deviceCookieExpires:authorization?.deviceCookieExpires??1e3*60*60*24*365,adminCookieName:authorization?.adminCookieName??"vitnode_auth_admin",adminCookieExpires:authorization?.adminCookieExpires??1e3*60*60*24*1,cookieSecure:authorization?.cookieSecure??true},captcha,cronSecret:CONFIG.cronJobSecret,hasCronAdapter:!!cron,plugins:pluginsMetadata,cron:cronMetadata,queue:queueMetadata,webSockets:webSocketsMetadata,permissionStaff:permissionStaffMetadata});const user=await new SessionModel(c).getUser();c.set("user",user);c.set("admin",null);c.set("log",loggerMiddleware(c));await next()}};export const pluginMiddleware=pluginId=>{return async(c,next)=>{c.set("plugin",{id:pluginId});await next()}};export const globalAdminMiddleware=()=>{return async(c,next)=>{const user=await new SessionAdminModel(c).getUser();if(!user)throw new HTTPException(403);c.set("admin",{user});await next()}};
@@ -1,4 +1,5 @@
1
1
  import type { Context, Next } from "hono";
2
+ import type { Redis } from "ioredis";
2
3
  import { type IRateLimiterOptions } from "rate-limiter-flexible";
3
- export declare const rateLimiterMiddleware: (options?: Omit<IRateLimiterOptions, "keyPrefix">) => ((_c: Context, next: Next) => Promise<void>) | ((c: Context, next: Next) => Promise<(Response & import("hono").TypedResponse<"Too Many Requests", 429, "text">) | undefined>);
4
+ export declare const rateLimiterMiddleware: (options?: Omit<IRateLimiterOptions, "keyPrefix">, storeClient?: null | Redis) => ((_c: Context, next: Next) => Promise<void>) | ((c: Context, next: Next) => Promise<(Response & import("hono").TypedResponse<"Too Many Requests", 429, "text">) | undefined>);
4
5
  //# sourceMappingURL=rate-limiter.middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limiter.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/rate-limiter.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,uBAAuB,CAAC;AAkB/B,eAAO,MAAM,qBAAqB,GAChC,UAAU,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,WAI5B,OAAO,QAAQ,IAAI,2BAYtB,OAAO,QAAQ,IAAI,sGAWrC,CAAC"}
1
+ {"version":3,"file":"rate-limiter.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/rate-limiter.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,uBAAuB,CAAC;AA8B/B,eAAO,MAAM,qBAAqB,GAChC,UAAU,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAChD,cAAc,IAAI,GAAG,KAAK,WAIN,OAAO,QAAQ,IAAI,2BAatB,OAAO,QAAQ,IAAI,sGAWrC,CAAC"}
@@ -1 +1 @@
1
- import{RateLimiterMemory}from"rate-limiter-flexible";import{CONFIG}from"../../lib/config.js";const createRateLimiter=({keyPrefix,...options})=>{return new RateLimiterMemory({keyPrefix,...options})};export const rateLimiterMiddleware=options=>{if(CONFIG.node_development){return async(_c,next)=>{await next()}}const rateLimiter=createRateLimiter({...options,keyPrefix:"vitnode-api-rate-limiter",duration:options?.duration??60,points:options?.points??80});return async(c,next)=>{const key=c.get("ipAddress");try{await rateLimiter.consume(key)}catch{return c.text("Too Many Requests",429)}await next()}};
1
+ import{RateLimiterMemory,RateLimiterRedis}from"rate-limiter-flexible";import{CONFIG}from"../../lib/config.js";const createRateLimiter=({keyPrefix,storeClient,...options})=>{if(storeClient){return new RateLimiterRedis({storeClient,keyPrefix,...options,insuranceLimiter:new RateLimiterMemory({keyPrefix,...options})})}return new RateLimiterMemory({keyPrefix,...options})};export const rateLimiterMiddleware=(options,storeClient)=>{if(CONFIG.node_development){return async(_c,next)=>{await next()}}const rateLimiter=createRateLimiter({...options,keyPrefix:"vitnode-api-rate-limiter",duration:options?.duration??60,points:options?.points??80,storeClient});return async(c,next)=>{const key=c.get("ipAddress");try{await rateLimiter.consume(key)}catch{return c.text("Too Many Requests",429)}await next()}};
@@ -34,10 +34,20 @@ export type EmailModelSendArgs = {
34
34
  replyTo?: string;
35
35
  subject: ((props: Pick<DefaultTemplateEmailProps, "i18n">) => string) | string;
36
36
  } & (EmailModelSendArgsWithEmail | EmailModelSendArgsWithUser);
37
+ export interface BuiltEmail {
38
+ html: string;
39
+ replyTo?: string;
40
+ subject: string;
41
+ text: string;
42
+ to: string;
43
+ }
37
44
  export declare class EmailModel {
38
45
  constructor(c: Context);
39
46
  protected readonly c: Context;
40
- send({ html, replyTo, subject, to, user, content, locale: localeFromArgs, }: EmailModelSendArgs): Promise<void>;
47
+ private requireProvider;
48
+ build({ html, replyTo, subject, to, user, content, locale: localeFromArgs, }: EmailModelSendArgs): Promise<BuiltEmail>;
49
+ deliver(email: BuiltEmail): Promise<void>;
50
+ send(args: EmailModelSendArgs): Promise<void>;
41
51
  }
42
52
  export {};
43
53
  //# sourceMappingURL=email.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAI/E,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,GAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EACH,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAC5D,MAAM,CAAC;CAEZ,GAAG,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;AAE/D,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAExB,IAAI,CAAC,EACT,IAAI,EACJ,OAAO,EACP,OAAO,EACP,EAAE,EACF,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,GACvB,EAAE,kBAAkB;CAkFtB"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAI/E,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,GAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EACL,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC;CAEzE,GAAG,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;AAE/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAE9B,OAAO,CAAC,eAAe;IAWjB,KAAK,CAAC,EACV,IAAI,EACJ,OAAO,EACP,OAAO,EACP,EAAE,EACF,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,GACvB,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgErC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAazC,IAAI,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAepD"}
@@ -1 +1 @@
1
- import{render}from"@react-email/components";import{HTTPException}from"hono/http-exception";import{CONFIG}from"../../lib/config.js";export class EmailModel{constructor(c){this.c=c}c;async send({html,replyTo,subject,to,user,content,locale:localeFromArgs}){const core=this.c.get("core");const provider=core.email?.adapter;if(!provider){throw new HTTPException(500,{message:"Email provider not found"})}const locale=localeFromArgs??user?.language??"en";const pluginIds=["@vitnode/core",...this.c.get("core").plugins.map(plugin=>plugin.id)];const messagesPromises=pluginIds.map(async pluginId=>{try{const path=`${pluginId}/${locale}.json`;const messages=await core.pathToMessages(path);return messages.default}catch{return{}}});const allMessages=await Promise.all(messagesPromises);const messages=Object.assign({},...allMessages);const htmlContent=html??content({i18n:{locale,messages},templateProps:{metadata:{...core.metadata,url:CONFIG.web.href},logo:core.email?.logo},user});const emailTo=user?.email??to;if(!emailTo){throw new HTTPException(400,{message:"Email address is required"})}try{await provider.sendEmail({html:await render(htmlContent),to:emailTo,subject:typeof subject==="function"?subject({i18n:{locale,messages}}):subject,replyTo,metadata:core.metadata,text:await render(htmlContent,{plainText:true})})}catch(err){const error=err instanceof Error?err:new Error("Unknown error from email provider");await this.c.get("log").error(`Failed to send email: ${error.message}`)}}}
1
+ import{HTTPException}from"hono/http-exception";import{render}from"react-email";import{CONFIG}from"../../lib/config.js";export class EmailModel{constructor(c){this.c=c}c;requireProvider(){const provider=this.c.get("core").email?.adapter;if(!provider){throw new HTTPException(500,{message:"Email provider not found"})}return provider}async build({html,replyTo,subject,to,user,content,locale:localeFromArgs}){const core=this.c.get("core");const locale=localeFromArgs??user?.language??"en";const pluginIds=["@vitnode/core",...core.plugins.map(plugin=>plugin.id)];const messagesPromises=pluginIds.map(async pluginId=>{try{const path=`${pluginId}/${locale}.json`;const messages=await core.pathToMessages(path);return messages.default}catch{return{}}});const allMessages=await Promise.all(messagesPromises);const messages=Object.assign({},...allMessages);const htmlContent=html??content({i18n:{locale,messages},templateProps:{metadata:{...core.metadata,url:CONFIG.web.href},logo:core.email?.logo},user});const emailTo=user?.email??to;if(!emailTo){throw new HTTPException(400,{message:"Email address is required"})}return{to:emailTo,subject:typeof subject==="function"?subject({i18n:{locale,messages}}):subject,html:await render(htmlContent),text:await render(htmlContent,{plainText:true}),replyTo}}async deliver(email){const provider=this.requireProvider();await provider.sendEmail({html:email.html,to:email.to,subject:email.subject,replyTo:email.replyTo,metadata:this.c.get("core").metadata,text:email.text})}async send(args){this.requireProvider();const email=await this.build(args);await this.c.get("queue").dispatch({name:"send-email",payload:{to:email.to,subject:email.subject,html:email.html,text:email.text,...email.replyTo?{replyTo:email.replyTo}:{}}})}}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=email.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.test.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ import{describe,expect,it,vi}from"vitest";vi.mock("react-email",()=>({render:vi.fn().mockResolvedValue("RENDERED")}));import{EmailModel}from"./email.js";const makeCtx=(overrides={})=>{const dispatch=vi.fn().mockResolvedValue({id:1});const sendEmail=vi.fn().mockResolvedValue(undefined);const error=vi.fn().mockResolvedValue(undefined);const store={core:{email:"email"in overrides?overrides.email:{adapter:{sendEmail}},plugins:[],metadata:{title:"Test"},pathToMessages:vi.fn().mockResolvedValue({default:{}})},queue:{dispatch},log:{error,warn:vi.fn(),debug:vi.fn()}};return{ctx:{get:k=>store[k]},dispatch,sendEmail,error}};describe("EmailModel.queue",()=>{it("renders the email and enqueues a send-email task",async()=>{const{ctx,dispatch}=makeCtx();await new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:"Hi",content:()=>null});expect(dispatch).toHaveBeenCalledWith({name:"send-email",payload:{to:"a@b.com",subject:"Hi",html:"RENDERED",text:"RENDERED"}})});it("resolves a function subject before enqueueing",async()=>{const{ctx,dispatch}=makeCtx();await new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:()=>"Computed",content:()=>null});expect(dispatch.mock.calls[0][0].payload.subject).toBe("Computed")});it("throws when no email provider is configured",async()=>{const{ctx,dispatch}=makeCtx({email:undefined});await expect(new EmailModel(ctx).send({to:"a@b.com",locale:"en",subject:"Hi",content:()=>null})).rejects.toThrow();expect(dispatch).not.toHaveBeenCalled()})});describe("EmailModel.deliver",()=>{it("sends a prebuilt email through the provider",async()=>{const{ctx,sendEmail}=makeCtx();await new EmailModel(ctx).deliver({to:"a@b.com",subject:"Hi",html:"<p>hi</p>",text:"hi"});expect(sendEmail).toHaveBeenCalledWith(expect.objectContaining({to:"a@b.com",subject:"Hi",html:"<p>hi</p>",text:"hi",metadata:{title:"Test"}}))})});
@@ -0,0 +1,17 @@
1
+ import type { Context } from "hono";
2
+ export interface QueueDispatchArgs {
3
+ availableAt?: Date;
4
+ maxAttempts?: number;
5
+ name: string;
6
+ payload?: Record<string, unknown>;
7
+ priority?: number;
8
+ queue?: string;
9
+ }
10
+ export declare class QueueModel {
11
+ constructor(c: Context);
12
+ protected readonly c: Context;
13
+ dispatch({ name, payload, queue, priority, maxAttempts, availableAt, }: QueueDispatchArgs): Promise<{
14
+ id: number;
15
+ }>;
16
+ }
17
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/api/models/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAExB,QAAQ,CAAC,EACb,IAAI,EACJ,OAAY,EACZ,KAAiB,EACjB,QAAY,EACZ,WAAW,EACX,WAAW,GACZ,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAuB/C"}
@@ -0,0 +1 @@
1
+ import{core_queue}from"../../database/queue.js";export class QueueModel{constructor(c){this.c=c}c;async dispatch({name,payload={},queue="default",priority=0,maxAttempts,availableAt}){const pluginId=this.c.get("plugin")?.id??"@vitnode/core";const registeredTask=this.c.get("core").queue.find(task=>task.pluginId===pluginId&&task.name===name);const[row]=await this.c.get("db").insert(core_queue).values({pluginId,name,queue,payload,priority,maxAttempts:maxAttempts??registeredTask?.maxAttempts??3,availableAt:availableAt??new Date}).returning({id:core_queue.id});return row}}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queue.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.test.d.ts","sourceRoot":"","sources":["../../../../src/api/models/queue.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ import{describe,expect,it,vi}from"vitest";import{QueueModel}from"./queue.js";const makeCtx=(overrides={})=>{const values=vi.fn().mockReturnValue({returning:vi.fn().mockResolvedValue([{id:1}])});const store={db:{insert:vi.fn().mockReturnValue({values})},core:{queue:overrides.queue??[]},plugin:overrides.plugin};return{ctx:{get:k=>store[k]},values}};describe("QueueModel.dispatch",()=>{it("uses the explicit maxAttempts when provided",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5}]});await new QueueModel(ctx).dispatch({name:"job",maxAttempts:7});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:7})});it("falls back to the registered task maxAttempts",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:5})});it("defaults to 3 when the registered task has no maxAttempts",async()=>{const{ctx,values}=makeCtx({queue:[{name:"job",pluginId:"@vitnode/core"}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:3})});it("defaults to 3 when the task is not registered",async()=>{const{ctx,values}=makeCtx({queue:[]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({maxAttempts:3})});it("scopes the task lookup by pluginId",async()=>{const{ctx,values}=makeCtx({plugin:{id:"@vitnode/blog"},queue:[{name:"job",pluginId:"@vitnode/core",maxAttempts:5},{name:"job",pluginId:"@vitnode/blog",maxAttempts:9}]});await new QueueModel(ctx).dispatch({name:"job"});expect(values.mock.calls[0][0]).toMatchObject({pluginId:"@vitnode/blog",maxAttempts:9})})});
@@ -1 +1 @@
1
- {"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAYpC,qBAAa,iBAAiB;gBAChB,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAmBjC,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA2CpC,aAAa;IAoBb,OAAO;;;;;;;;;;;;;CAiDd"}
1
+ {"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAkBpC,qBAAa,iBAAiB;gBAChB,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAmBjC,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA2CpC,aAAa;IA2Bb,OAAO;;;;;;;;;;;;;CAwEd"}
@@ -1 +1 @@
1
- import{and,eq,gt,or}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{HTTPException}from"hono/http-exception";import{core_admin_permissions,core_admin_sessions}from"../../database/admins.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{UserModel}from"./user.js";export class SessionAdminModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async checkIfUserIsAdmin(userId){const user=await new UserModel().getUserById({id:userId,c:this.c});if(!user)return false;const[permission]=await this.c.get("db").select().from(core_admin_permissions).where(or(eq(core_admin_permissions.userId,user.id),eq(core_admin_permissions.roleId,user.roleId))).limit(1);return!!permission}async createSessionByUserId(userId){const isAdmin=await this.checkIfUserIsAdmin(userId);if(!isAdmin){throw new HTTPException(403,{message:"Forbidden"})}const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").insert(core_admin_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.adminCookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.adminCookieName);if(!token)return;const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_admin_sessions).where(eq(core_admin_sessions.token,hashedToken));deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname})}async getUser(){const{authorization}=this.c.get("core");const token=getCookie(this.c,authorization.adminCookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const[session]=await this.c.get("db").select({userId:core_admin_sessions.userId}).from(core_admin_sessions).where(and(eq(core_admin_sessions.token,hashedToken),eq(core_admin_sessions.deviceId,device.id),gt(core_admin_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname});return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const isStillAdmin=await this.checkIfUserIsAdmin(user.id);if(!isStillAdmin){await this.deleteSession();return null}return user}}
1
+ import{and,eq,gt,or}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{HTTPException}from"hono/http-exception";import{core_admin_permissions,core_admin_sessions}from"../../database/admins.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{adminSessionCacheKey,reviveSessionUser,sessionCacheTtl}from"./session-cache.js";import{UserModel}from"./user.js";export class SessionAdminModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async checkIfUserIsAdmin(userId){const user=await new UserModel().getUserById({id:userId,c:this.c});if(!user)return false;const[permission]=await this.c.get("db").select().from(core_admin_permissions).where(or(eq(core_admin_permissions.userId,user.id),eq(core_admin_permissions.roleId,user.roleId))).limit(1);return!!permission}async createSessionByUserId(userId){const isAdmin=await this.checkIfUserIsAdmin(userId);if(!isAdmin){throw new HTTPException(403,{message:"Forbidden"})}const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").insert(core_admin_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.adminCookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:new Date(Date.now()+this.c.get("core").authorization.adminCookieExpires),domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.adminCookieName);if(!token)return;const hashedToken=await this.hashToken(token);const device=await new DeviceModel(this.c).getDeviceId();await this.c.get("db").delete(core_admin_sessions).where(eq(core_admin_sessions.token,hashedToken));await this.c.get("cache").deleteSystem(adminSessionCacheKey(hashedToken,device.id));deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname})}async getUser(){const{authorization}=this.c.get("core");const token=getCookie(this.c,authorization.adminCookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const cache=this.c.get("cache");const cacheKey=adminSessionCacheKey(hashedToken,device.id);const cached=await cache.getSystem(cacheKey);if(cached){const user=reviveSessionUser(cached);if(!await this.checkIfUserIsAdmin(user.id)){await this.deleteSession();return null}return user}const[session]=await this.c.get("db").select({userId:core_admin_sessions.userId,expiresAt:core_admin_sessions.expiresAt}).from(core_admin_sessions).where(and(eq(core_admin_sessions.token,hashedToken),eq(core_admin_sessions.deviceId,device.id),gt(core_admin_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.adminCookieName,{path:"/",domain:CONFIG.web.hostname});return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const isStillAdmin=await this.checkIfUserIsAdmin(user.id);if(!isStillAdmin){await this.deleteSession();return null}const ttl=sessionCacheTtl(session.expiresAt);if(ttl>0)await cache.setSystem(cacheKey,user,ttl);return user}}
@@ -0,0 +1,8 @@
1
+ import type { getUserById } from "./user/get-user-by-id";
2
+ export type SessionUser = NonNullable<Awaited<ReturnType<typeof getUserById>>>;
3
+ export declare const SESSION_CACHE_TTL_SECONDS = 60;
4
+ export declare const sessionCacheKey: (hashedToken: string, deviceId: number) => string;
5
+ export declare const adminSessionCacheKey: (hashedToken: string, deviceId: number) => string;
6
+ export declare const sessionCacheTtl: (expiresAt: Date) => number;
7
+ export declare const reviveSessionUser: (user: SessionUser) => SessionUser;
8
+ //# sourceMappingURL=session-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;AAE/E,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,eAAO,MAAM,eAAe,GAC1B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,MAAmD,CAAC;AAEvD,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,UAAU,MAAM,KACf,MAAoD,CAAC;AAExD,eAAO,MAAM,eAAe,GAAI,WAAW,IAAI,KAAG,MAI/C,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,MAAM,WAAW,KAAG,WAIpD,CAAC"}
@@ -0,0 +1 @@
1
+ export const SESSION_CACHE_TTL_SECONDS=60;export const sessionCacheKey=(hashedToken,deviceId)=>`session:user:${deviceId}:${hashedToken}`;export const adminSessionCacheKey=(hashedToken,deviceId)=>`session:admin:${deviceId}:${hashedToken}`;export const sessionCacheTtl=expiresAt=>Math.min(SESSION_CACHE_TTL_SECONDS,Math.floor((expiresAt.getTime()-Date.now())/1e3));export const reviveSessionUser=user=>({...user,createdAt:new Date(user.createdAt),birthday:user.birthday?new Date(user.birthday):null});
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAWpC,qBAAa,YAAY;gBACX,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA0CpC,aAAa;IA8Bb,OAAO;;;;;;;;;;;;;CA0Cd"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAiBpC,qBAAa,YAAY;gBACX,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IAejB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IA0CpC,aAAa;IAkCb,OAAO;;;;;;;;;;;;;CAuDd"}
@@ -1 +1 @@
1
- import{and,eq,gt}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{core_sessions}from"../../database/sessions.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{UserModel}from"./user.js";export class SessionModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async createSessionByUserId(userId){const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const device=await new DeviceModel(this.c).getDeviceId();const hashedToken=await this.hashToken(token);await this.c.get("db").insert(core_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.cookie_expires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.cookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:this.c.get("core").authorization.cookie_expires>0?new Date(Date.now()+this.c.get("core").authorization.cookie_expires):undefined,domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);const device=await new DeviceModel(this.c).getDeviceId();if(!(token&&device.id)){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return}const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id)));deleteCookie(this.c,this.c.get("core").authorization.cookieName)}async getUser(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const[session]=await this.c.get("db").select({userId:core_sessions.userId}).from(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id),gt(core_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;return user}}
1
+ import{and,eq,gt}from"drizzle-orm";import{deleteCookie,getCookie,setCookie}from"hono/cookie";import{core_sessions}from"../../database/sessions.js";import{CONFIG}from"../../lib/config.js";import{DeviceModel}from"./device.js";import{reviveSessionUser,sessionCacheKey,sessionCacheTtl}from"./session-cache.js";import{UserModel}from"./user.js";export class SessionModel{constructor(c){this.c=c}c;async hashToken(token){const encoder=new TextEncoder;const data=encoder.encode(token);const hashBuffer=await crypto.subtle.digest("SHA-256",data);const bytes=new Uint8Array(hashBuffer);let result="";for(const byte of bytes){result+=byte.toString(16).padStart(2,"0")}return result}async createSessionByUserId(userId){const randomBytes=new Uint8Array(64);crypto.getRandomValues(randomBytes);let token="";for(const byte of randomBytes){token+=byte.toString(16).padStart(2,"0")}const device=await new DeviceModel(this.c).getDeviceId();const hashedToken=await this.hashToken(token);await this.c.get("db").insert(core_sessions).values({token:hashedToken,userId,expiresAt:new Date(Date.now()+this.c.get("core").authorization.cookie_expires),deviceId:device.id});setCookie(this.c,this.c.get("core").authorization.cookieName,token,{httpOnly:true,secure:this.c.get("core").authorization.cookieSecure,path:"/",expires:this.c.get("core").authorization.cookie_expires>0?new Date(Date.now()+this.c.get("core").authorization.cookie_expires):undefined,domain:CONFIG.web.hostname});return{token}}async deleteSession(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);const device=await new DeviceModel(this.c).getDeviceId();if(!(token&&device.id)){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return}const hashedToken=await this.hashToken(token);await this.c.get("db").delete(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id)));await this.c.get("cache").deleteSystem(sessionCacheKey(hashedToken,device.id));deleteCookie(this.c,this.c.get("core").authorization.cookieName)}async getUser(){const token=getCookie(this.c,this.c.get("core").authorization.cookieName);if(!token)return null;const device=await new DeviceModel(this.c).getDeviceId();if(!device)return null;const hashedToken=await this.hashToken(token);const cache=this.c.get("cache");const cacheKey=sessionCacheKey(hashedToken,device.id);const cached=await cache.getSystem(cacheKey);if(cached)return reviveSessionUser(cached);const[session]=await this.c.get("db").select({userId:core_sessions.userId,expiresAt:core_sessions.expiresAt}).from(core_sessions).where(and(eq(core_sessions.token,hashedToken),eq(core_sessions.deviceId,device.id),gt(core_sessions.expiresAt,new Date))).limit(1);if(!session){deleteCookie(this.c,this.c.get("core").authorization.cookieName);return null}const user=await new UserModel().getUserById({id:session.userId,c:this.c});if(!user)return null;const ttl=sessionCacheTtl(session.expiresAt);if(ttl>0)await cache.setSystem(cacheKey,user,ttl);return user}}