@vitnode/core 1.2.0-canary.60 → 1.2.0-canary.61

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 (274) hide show
  1. package/dist/scripts/get-config.js +15 -0
  2. package/dist/scripts/plugin.js +188 -0
  3. package/dist/scripts/prepare-database.js +177 -0
  4. package/dist/scripts/prepare-plugins-files.js +134 -0
  5. package/dist/scripts/run-interactive-shell-command.js +21 -0
  6. package/dist/scripts/scripts.js +39 -13
  7. package/dist/scripts/shared/file-utils.js +203 -0
  8. package/dist/src/api/adapters/sso/discord.js +1 -77
  9. package/dist/src/api/adapters/sso/facebook.js +1 -76
  10. package/dist/src/api/adapters/sso/google.js +1 -87
  11. package/dist/src/api/config.js +1 -67
  12. package/dist/src/api/lib/check-plugin-id.js +1 -43
  13. package/dist/src/api/lib/cron.js +1 -22
  14. package/dist/src/api/lib/logger-middleware.js +1 -35
  15. package/dist/src/api/lib/module.js +1 -22
  16. package/dist/src/api/lib/plugin.js +1 -22
  17. package/dist/src/api/lib/route.js +1 -27
  18. package/dist/src/api/lib/with-pagination.js +1 -83
  19. package/dist/src/api/middlewares/captcha.middleware.js +1 -63
  20. package/dist/src/api/middlewares/cron-auth.middleware.js +1 -19
  21. package/dist/src/api/middlewares/global.middleware.js +1 -93
  22. package/dist/src/api/middlewares/rate-limiter.middleware.js +1 -32
  23. package/dist/src/api/models/device.js +1 -61
  24. package/dist/src/api/models/email.js +1 -76
  25. package/dist/src/api/models/password.js +1 -36
  26. package/dist/src/api/models/session-admin.js +1 -106
  27. package/dist/src/api/models/session.js +1 -85
  28. package/dist/src/api/models/sso.js +1 -120
  29. package/dist/src/api/models/user/get-user-by-id.js +1 -19
  30. package/dist/src/api/models/user/sign-in-with-passwords.js +1 -22
  31. package/dist/src/api/models/user/sign-up.js +1 -73
  32. package/dist/src/api/models/user.js +1 -8
  33. package/dist/src/api/modules/admin/admin.module.js +1 -19
  34. package/dist/src/api/modules/admin/advanced/advanced.admin.module.js +1 -11
  35. package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.js +1 -12
  36. package/dist/src/api/modules/admin/advanced/cron/routes/get.route.js +1 -66
  37. package/dist/src/api/modules/admin/advanced/cron/routes/run.route.js +1 -95
  38. package/dist/src/api/modules/admin/debug/debug.admin.module.js +1 -10
  39. package/dist/src/api/modules/admin/debug/routes/logs.route.js +1 -94
  40. package/dist/src/api/modules/admin/routes/session.route.js +1 -47
  41. package/dist/src/api/modules/admin/users/routes/list.route.js +1 -79
  42. package/dist/src/api/modules/admin/users/routes/users.route.js +1 -84
  43. package/dist/src/api/modules/admin/users/users.admin.module.js +1 -10
  44. package/dist/src/api/modules/cron/cron/clean.cron.js +1 -24
  45. package/dist/src/api/modules/cron/cron.module.js +1 -14
  46. package/dist/src/api/modules/cron/helpers/process-cron-jobs.d.ts.map +1 -1
  47. package/dist/src/api/modules/cron/helpers/process-cron-jobs.js +1 -76
  48. package/dist/src/api/modules/cron/routes/cron.route.js +1 -101
  49. package/dist/src/api/modules/middleware/middleware.module.js +1 -10
  50. package/dist/src/api/modules/middleware/route.js +1 -49
  51. package/dist/src/api/modules/users/avatar-color.js +1 -43
  52. package/dist/src/api/modules/users/routes/change-password.route.js +1 -58
  53. package/dist/src/api/modules/users/routes/reset-passowrd.route.js +1 -91
  54. package/dist/src/api/modules/users/routes/session.route.js +1 -46
  55. package/dist/src/api/modules/users/routes/sign-in.route.js +1 -71
  56. package/dist/src/api/modules/users/routes/sign-out.route.js +1 -43
  57. package/dist/src/api/modules/users/routes/sign-up.route.js +1 -77
  58. package/dist/src/api/modules/users/routes/test.route.js +1 -33
  59. package/dist/src/api/modules/users/sso/routes/callback.route.js +1 -52
  60. package/dist/src/api/modules/users/sso/routes/create-url.route.js +1 -36
  61. package/dist/src/api/modules/users/sso/sso.module.js +1 -12
  62. package/dist/src/api/modules/users/users.module.js +1 -26
  63. package/dist/src/api/plugin.js +1 -15
  64. package/dist/src/app/login/page.js +1 -16
  65. package/dist/src/app/login/reset-password/page.js +1 -18
  66. package/dist/src/app/login/sso/[providerId]/page.js +1 -10
  67. package/dist/src/app/register/page.js +1 -16
  68. package/dist/src/app_admin/core/advanced/cron/page.js +1 -42
  69. package/dist/src/app_admin/core/debug/page.js +1 -45
  70. package/dist/src/app_admin/core/page.js +1 -5
  71. package/dist/src/app_admin/core/test/page.js +1 -5
  72. package/dist/src/app_admin/core/users/page.js +1 -38
  73. package/dist/src/components/avatar.js +1 -14
  74. package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +1 -42
  75. package/dist/src/components/confirm-action/content.js +1 -31
  76. package/dist/src/components/date-format.js +1 -41
  77. package/dist/src/components/form/auto-form.js +1 -103
  78. package/dist/src/components/form/common/desc.js +1 -9
  79. package/dist/src/components/form/common/label.js +1 -18
  80. package/dist/src/components/form/fields/checkbox.js +1 -37
  81. package/dist/src/components/form/fields/combobox-async.js +1 -123
  82. package/dist/src/components/form/fields/combobox.js +1 -87
  83. package/dist/src/components/form/fields/input.js +1 -39
  84. package/dist/src/components/form/fields/radio-group.js +1 -50
  85. package/dist/src/components/form/fields/select.js +1 -58
  86. package/dist/src/components/form/fields/switch.js +1 -36
  87. package/dist/src/components/form/fields/textarea.js +1 -36
  88. package/dist/src/components/i18n-provider.js +1 -43
  89. package/dist/src/components/logo-vitnode.js +1 -119
  90. package/dist/src/components/switchers/langs/language-switcher.js +1 -47
  91. package/dist/src/components/switchers/themes/theme-switcher.js +1 -28
  92. package/dist/src/components/table/content.js +1 -81
  93. package/dist/src/components/table/data-table.js +1 -68
  94. package/dist/src/components/table/order-table-head.js +1 -50
  95. package/dist/src/components/table/pagination.js +1 -122
  96. package/dist/src/components/tiptap/extension.js +1 -33
  97. package/dist/src/components/tiptap/toolbar/actions/alignment-action.js +1 -91
  98. package/dist/src/components/tiptap/toolbar/actions/bold-action.js +1 -39
  99. package/dist/src/components/tiptap/toolbar/actions/headings-action.js +1 -93
  100. package/dist/src/components/tiptap/toolbar/actions/italic-action.js +1 -38
  101. package/dist/src/components/tiptap/toolbar/actions/list-action.js +1 -61
  102. package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js +1 -59
  103. package/dist/src/components/tiptap/toolbar/actions/underline-action.js +1 -38
  104. package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.js +1 -63
  105. package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.js +1 -11
  106. package/dist/src/components/tiptap/toolbar/tiptap-toolbar.js +1 -55
  107. package/dist/src/components/tiptap/toolbar/use-toolbar-editor.js +1 -5
  108. package/dist/src/components/ui/accordion.js +1 -46
  109. package/dist/src/components/ui/alert-dialog.js +1 -123
  110. package/dist/src/components/ui/alert.js +1 -39
  111. package/dist/src/components/ui/badge.js +1 -28
  112. package/dist/src/components/ui/button-client.js +1 -57
  113. package/dist/src/components/ui/button.js +1 -32
  114. package/dist/src/components/ui/card.js +1 -52
  115. package/dist/src/components/ui/checkbox.js +1 -20
  116. package/dist/src/components/ui/collapsible.js +1 -22
  117. package/dist/src/components/ui/command.js +1 -98
  118. package/dist/src/components/ui/context-menu.js +1 -140
  119. package/dist/src/components/ui/dialog.js +1 -189
  120. package/dist/src/components/ui/drawer.js +1 -83
  121. package/dist/src/components/ui/dropdown-menu.js +1 -141
  122. package/dist/src/components/ui/editor-content.js +1 -10
  123. package/dist/src/components/ui/editor.js +1 -35
  124. package/dist/src/components/ui/form.js +1 -148
  125. package/dist/src/components/ui/header-content.js +1 -30
  126. package/dist/src/components/ui/hover-card.js +1 -29
  127. package/dist/src/components/ui/input-otp.js +1 -48
  128. package/dist/src/components/ui/input.js +1 -11
  129. package/dist/src/components/ui/label.js +1 -12
  130. package/dist/src/components/ui/loader.js +1 -16
  131. package/dist/src/components/ui/menubar.js +1 -151
  132. package/dist/src/components/ui/navigation-menu.js +1 -82
  133. package/dist/src/components/ui/popover.js +1 -35
  134. package/dist/src/components/ui/progress.js +1 -19
  135. package/dist/src/components/ui/radio-group.js +1 -27
  136. package/dist/src/components/ui/scroll-area.js +1 -33
  137. package/dist/src/components/ui/select.js +1 -113
  138. package/dist/src/components/ui/separator.js +1 -14
  139. package/dist/src/components/ui/sheet.js +1 -92
  140. package/dist/src/components/ui/sidebar.js +1 -433
  141. package/dist/src/components/ui/skeleton.js +1 -10
  142. package/dist/src/components/ui/slider.js +1 -50
  143. package/dist/src/components/ui/sonner.js +1 -26
  144. package/dist/src/components/ui/switch.js +1 -16
  145. package/dist/src/components/ui/table.js +1 -63
  146. package/dist/src/components/ui/tabs.js +1 -33
  147. package/dist/src/components/ui/textarea.js +1 -10
  148. package/dist/src/components/ui/toggle-group.js +1 -45
  149. package/dist/src/components/ui/toggle.js +1 -34
  150. package/dist/src/components/ui/tooltip.js +1 -57
  151. package/dist/src/config.js +1 -4
  152. package/dist/src/database/admins.js +1 -74
  153. package/dist/src/database/cron.js +1 -22
  154. package/dist/src/database/languages.js +1 -52
  155. package/dist/src/database/logs.js +1 -34
  156. package/dist/src/database/moderators.js +1 -37
  157. package/dist/src/database/roles.js +1 -13
  158. package/dist/src/database/sessions.js +1 -60
  159. package/dist/src/database/users.js +1 -145
  160. package/dist/src/drizzle.config.js +1 -67
  161. package/dist/src/emails/default-template.js +1 -99
  162. package/dist/src/emails/reset-password.js +1 -132
  163. package/dist/src/emails/ui/button.js +1 -36
  164. package/dist/src/emails/ui/card.js +1 -39
  165. package/dist/src/hooks/use-before-unload.js +1 -30
  166. package/dist/src/hooks/use-captcha.js +1 -122
  167. package/dist/src/hooks/use-mobile.js +1 -16
  168. package/dist/src/lib/api/get-middleware-api.js +1 -13
  169. package/dist/src/lib/api/get-next-cron-run-date.js +1 -14
  170. package/dist/src/lib/api/get-next-cron-run-date.test.js +1 -55
  171. package/dist/src/lib/api/get-session-admin-api.js +1 -19
  172. package/dist/src/lib/api/get-session-api.js +1 -14
  173. package/dist/src/lib/api/should-cron-job-run.js +1 -16
  174. package/dist/src/lib/api/should-cron-job-run.test.js +1 -213
  175. package/dist/src/lib/api/validate-cron-schedule.d.ts +2 -0
  176. package/dist/src/lib/api/validate-cron-schedule.d.ts.map +1 -0
  177. package/dist/src/lib/api/validate-cron-schedule.js +1 -0
  178. package/dist/src/lib/api/validate-cron-schedule.test.d.ts +2 -0
  179. package/dist/src/lib/api/validate-cron-schedule.test.d.ts.map +1 -0
  180. package/dist/src/lib/api/validate-cron-schedule.test.js +1 -0
  181. package/dist/src/lib/colors.js +1 -140
  182. package/dist/src/lib/colors.test.js +1 -173
  183. package/dist/src/lib/config.js +1 -14
  184. package/dist/src/lib/ctrl-or-command-character.js +1 -5
  185. package/dist/src/lib/fetcher/cookie-from-string-to-object.js +1 -12
  186. package/dist/src/lib/fetcher/cookie-from-string-to-object.test.js +1 -78
  187. package/dist/src/lib/fetcher/core.js +3 -48
  188. package/dist/src/lib/fetcher/helpers-server.js +1 -18
  189. package/dist/src/lib/fetcher/helpers.js +1 -16
  190. package/dist/src/lib/fetcher/helpers.test.js +1 -37
  191. package/dist/src/lib/fetcher/types.js +1 -1
  192. package/dist/src/lib/fetcher-client.js +1 -17
  193. package/dist/src/lib/fetcher.js +1 -33
  194. package/dist/src/lib/helpers/auto-form.js +1 -98
  195. package/dist/src/lib/helpers/auto-form.test.js +1 -336
  196. package/dist/src/lib/navigation.js +1 -11
  197. package/dist/src/lib/plugin.js +1 -3
  198. package/dist/src/lib/special-characters.js +1 -4
  199. package/dist/src/lib/special-characters.test.js +1 -56
  200. package/dist/src/lib/utils.js +1 -5
  201. package/dist/src/locales/en.json +308 -0
  202. package/dist/src/tests/setup.js +1 -6
  203. package/dist/src/views/admin/layouts/admin-layout.js +1 -73
  204. package/dist/src/views/admin/layouts/sidebar/nav/item.js +1 -98
  205. package/dist/src/views/admin/layouts/sidebar/nav/nav.js +1 -60
  206. package/dist/src/views/admin/layouts/sidebar/sidebar.js +1 -28
  207. package/dist/src/views/admin/layouts/sidebar/sign-out.js +1 -14
  208. package/dist/src/views/admin/layouts/user-bar/client.js +1 -69
  209. package/dist/src/views/admin/layouts/user-bar/user-bar.js +1 -32
  210. package/dist/src/views/admin/sign-in/sign-in-admin-view.js +1 -27
  211. package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.js +1 -97
  212. package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.js +1 -23
  213. package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.js +1 -38
  214. package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.js +1 -44
  215. package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.js +1 -35
  216. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +1 -5
  217. package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.js +1 -281
  218. package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js +1 -67
  219. package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.js +1 -14
  220. package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.js +1 -30
  221. package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.js +1 -96
  222. package/dist/src/views/admin/views/core/test.js +1 -161
  223. package/dist/src/views/admin/views/core/users/users-admin-view.js +1 -89
  224. package/dist/src/views/auth/password-reset/change-password-form/form.js +1 -48
  225. package/dist/src/views/auth/password-reset/change-password-form/mutation-api.js +1 -22
  226. package/dist/src/views/auth/password-reset/change-password-form/use-form.js +1 -36
  227. package/dist/src/views/auth/password-reset/form/form.js +1 -104
  228. package/dist/src/views/auth/password-reset/form/mutation-api.js +1 -21
  229. package/dist/src/views/auth/password-reset/form/use-form.js +1 -33
  230. package/dist/src/views/auth/password-reset/password-reset-view.js +1 -37
  231. package/dist/src/views/auth/sign-in/form/form.js +1 -64
  232. package/dist/src/views/auth/sign-in/form/mutation-api.js +1 -33
  233. package/dist/src/views/auth/sign-in/form/use-form.js +1 -38
  234. package/dist/src/views/auth/sign-in/sign-in-view.js +1 -61
  235. package/dist/src/views/auth/sign-up/components/password-input.js +1 -96
  236. package/dist/src/views/auth/sign-up/email-confirmation-view.js +1 -55
  237. package/dist/src/views/auth/sign-up/form/form.js +1 -89
  238. package/dist/src/views/auth/sign-up/form/mutation-api.js +1 -30
  239. package/dist/src/views/auth/sign-up/form/use-form.js +1 -70
  240. package/dist/src/views/auth/sign-up/sign-up-view.js +1 -65
  241. package/dist/src/views/auth/sign-up/wrapper.js +1 -22
  242. package/dist/src/views/auth/sso/buttons/client.js +1 -22
  243. package/dist/src/views/auth/sso/buttons/mutation-api.js +1 -24
  244. package/dist/src/views/auth/sso/buttons/sso-buttons.js +1 -56
  245. package/dist/src/views/auth/sso/callback/callback-sso-view.js +1 -32
  246. package/dist/src/views/auth/sso/callback/client/client.js +1 -68
  247. package/dist/src/views/auth/sso/callback/client/mutation-api.js +1 -32
  248. package/dist/src/views/error/back-button.js +1 -14
  249. package/dist/src/views/error/error-view.js +1 -58
  250. package/dist/src/views/error/global-error-view.js +1 -50
  251. package/dist/src/views/layouts/provider.js +1 -44
  252. package/dist/src/views/layouts/root-layout.js +1 -25
  253. package/dist/src/views/layouts/theme/header/header.js +1 -38
  254. package/dist/src/views/layouts/theme/header/user/auth/auth.js +1 -33
  255. package/dist/src/views/layouts/theme/header/user/auth/client.js +1 -47
  256. package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.js +1 -27
  257. package/dist/src/views/layouts/theme/header/user/user.js +1 -32
  258. package/dist/src/views/layouts/theme/layout.js +1 -16
  259. package/dist/src/vitnode.config.js +1 -42
  260. package/dist/tsconfig.tsbuildinfo +1 -1
  261. package/dist/tsup.config.js +18 -0
  262. package/dist/vitest.config.d.ts.map +1 -1
  263. package/dist/vitest.config.js +49 -0
  264. package/eslint.config.mjs +2 -0
  265. package/package.json +6 -10
  266. package/dist/src/api/adapters/cron/node-cron.adapter.d.ts +0 -3
  267. package/dist/src/api/adapters/cron/node-cron.adapter.d.ts.map +0 -1
  268. package/dist/src/api/adapters/cron/node-cron.adapter.js +0 -11
  269. package/dist/src/api/adapters/email/nodemailer.d.ts +0 -10
  270. package/dist/src/api/adapters/email/nodemailer.d.ts.map +0 -1
  271. package/dist/src/api/adapters/email/nodemailer.js +0 -30
  272. package/dist/src/api/adapters/email/resend.d.ts +0 -6
  273. package/dist/src/api/adapters/email/resend.d.ts.map +0 -1
  274. package/dist/src/api/adapters/email/resend.js +0 -21
@@ -1,66 +1 @@
1
- import z from "zod";
2
- import { buildRoute } from "../../../../../lib/route.js";
3
- import { withPagination, zodPaginationPageInfo, zodPaginationQuery } from "../../../../../lib/with-pagination.js";
4
- import { CONFIG_PLUGIN } from "../../../../../../config.js";
5
- import { core_cron } from "../../../../../../database/cron.js";
6
- export const getCronsRoute = buildRoute({
7
- pluginId: CONFIG_PLUGIN.pluginId,
8
- route: {
9
- method: "get",
10
- description: "Get Admin Cron Logs",
11
- path: "/",
12
- request: {
13
- query: zodPaginationQuery.extend({
14
- order: z.enum([
15
- "asc",
16
- "desc"
17
- ]).optional(),
18
- orderBy: z.enum([
19
- "createdAt",
20
- "lastRun",
21
- "nextRun"
22
- ]).optional()
23
- })
24
- },
25
- responses: {
26
- 200: {
27
- content: {
28
- "application/json": {
29
- schema: z.object({
30
- edges: z.array(z.object({
31
- id: z.number(),
32
- createdAt: z.date(),
33
- name: z.string(),
34
- description: z.string().nullable(),
35
- pluginId: z.string(),
36
- module: z.string(),
37
- lastRun: z.date().nullable(),
38
- nextRun: z.date().nullable(),
39
- schedule: z.string()
40
- })),
41
- pageInfo: zodPaginationPageInfo
42
- })
43
- }
44
- },
45
- description: "List of cron jobs"
46
- }
47
- }
48
- },
49
- handler: async (c)=>{
50
- const query = c.req.valid("query");
51
- const data = await withPagination({
52
- params: {
53
- query
54
- },
55
- c,
56
- primaryCursor: core_cron.id,
57
- query: async ({ limit, where, orderBy })=>await c.get("db").select().from(core_cron).where(where).orderBy(orderBy).limit(limit),
58
- table: core_cron,
59
- orderBy: {
60
- column: query.orderBy ? core_cron[query.orderBy] : core_cron.lastRun,
61
- order: query.order ?? "desc"
62
- }
63
- });
64
- return c.json(data);
65
- }
66
- });
1
+ import z from"zod";import{buildRoute}from"../../../../../lib/route.js";import{withPagination,zodPaginationPageInfo,zodPaginationQuery}from"../../../../../lib/with-pagination.js";import{CONFIG_PLUGIN}from"../../../../../../config.js";import{core_cron}from"../../../../../../database/cron.js";export const getCronsRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Get Admin Cron Logs",path:"/",request:{query:zodPaginationQuery.extend({order:z.enum(["asc","desc"]).optional(),orderBy:z.enum(["createdAt","lastRun","nextRun"]).optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(z.object({id:z.number(),createdAt:z.date(),name:z.string(),description:z.string().nullable(),pluginId:z.string(),module:z.string(),lastRun:z.date().nullable(),nextRun:z.date().nullable(),schedule:z.string()})),pageInfo:zodPaginationPageInfo})}},description:"List of cron jobs"}}},handler:async c=>{const query=c.req.valid("query");const data=await withPagination({params:{query},c,primaryCursor:core_cron.id,query:async({limit,where,orderBy})=>await c.get("db").select().from(core_cron).where(where).orderBy(orderBy).limit(limit),table:core_cron,orderBy:{column:query.orderBy?core_cron[query.orderBy]:core_cron.lastRun,order:query.order??"desc"}});return c.json(data)}});
@@ -1,95 +1 @@
1
- import { eq } from "drizzle-orm";
2
- import { z } from "zod";
3
- import { buildRoute } from "../../../../../lib/route.js";
4
- import { CONFIG_PLUGIN } from "../../../../../../config.js";
5
- import { core_cron } from "../../../../../../database/cron.js";
6
- import { getNextCronRunDate } from "../../../../../../lib/api/get-next-cron-run-date.js";
7
- export const runCronRoute = buildRoute({
8
- pluginId: CONFIG_PLUGIN.pluginId,
9
- route: {
10
- method: "post",
11
- description: "Run a specific cron job",
12
- path: "/{id}",
13
- request: {
14
- params: z.object({
15
- id: z.string()
16
- })
17
- },
18
- responses: {
19
- 201: {
20
- content: {
21
- "application/json": {
22
- schema: z.object({
23
- message: z.string().optional(),
24
- error: z.string().optional()
25
- })
26
- }
27
- },
28
- description: "Cron job executed successfully"
29
- },
30
- 404: {
31
- content: {
32
- "application/json": {
33
- schema: z.object({
34
- message: z.string().optional(),
35
- error: z.string().optional()
36
- })
37
- }
38
- },
39
- description: "Cron job not found"
40
- },
41
- 500: {
42
- content: {
43
- "application/json": {
44
- schema: z.object({
45
- message: z.string().optional(),
46
- error: z.string().optional()
47
- })
48
- }
49
- },
50
- description: "Internal server error"
51
- }
52
- }
53
- },
54
- handler: async (c)=>{
55
- const db = c.get("db");
56
- const cronJobs = c.get("core").cron;
57
- const param = c.req.valid("param");
58
- try {
59
- const cronFromDb = await db.select().from(core_cron).where(eq(core_cron.id, +param.id)).limit(1);
60
- if (cronFromDb.length === 0) {
61
- return c.json({
62
- error: "Cron job not found"
63
- }, 404);
64
- }
65
- const dbCron = cronFromDb[0];
66
- const job = cronJobs.find((j)=>j.name === dbCron.name && j.pluginId === dbCron.pluginId && j.module === dbCron.module);
67
- if (!job) {
68
- return c.json({
69
- error: "Cron job configuration not found"
70
- }, 404);
71
- }
72
- const now = new Date();
73
- try {
74
- await job.handler(c);
75
- await db.update(core_cron).set({
76
- lastRun: now,
77
- nextRun: getNextCronRunDate(job.schedule, now)
78
- }).where(eq(core_cron.id, dbCron.id));
79
- return c.json({
80
- message: "Cron job executed successfully"
81
- }, 201);
82
- } catch (error) {
83
- await c.get("log").error(`Error executing cron job: ${error}`);
84
- return c.json({
85
- error: "Failed to execute cron job"
86
- }, 500);
87
- }
88
- } catch (error) {
89
- await c.get("log").error(`Error running cron job: ${error}`);
90
- return c.json({
91
- error: "Internal server error"
92
- }, 500);
93
- }
94
- }
95
- });
1
+ import{eq}from"drizzle-orm";import{z}from"zod";import{buildRoute}from"../../../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../../../config.js";import{core_cron}from"../../../../../../database/cron.js";import{getNextCronRunDate}from"../../../../../../lib/api/get-next-cron-run-date.js";export const runCronRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"post",description:"Run a specific cron job",path:"/{id}",request:{params:z.object({id:z.string()})},responses:{201:{content:{"application/json":{schema:z.object({message:z.string().optional(),error:z.string().optional()})}},description:"Cron job executed successfully"},404:{content:{"application/json":{schema:z.object({message:z.string().optional(),error:z.string().optional()})}},description:"Cron job not found"},500:{content:{"application/json":{schema:z.object({message:z.string().optional(),error:z.string().optional()})}},description:"Internal server error"}}},handler:async c=>{const db=c.get("db");const cronJobs=c.get("core").cron;const param=c.req.valid("param");try{const cronFromDb=await db.select().from(core_cron).where(eq(core_cron.id,+param.id)).limit(1);if(cronFromDb.length===0){return c.json({error:"Cron job not found"},404)}const dbCron=cronFromDb[0];const job=cronJobs.find(j=>j.name===dbCron.name&&j.pluginId===dbCron.pluginId&&j.module===dbCron.module);if(!job){return c.json({error:"Cron job configuration not found"},404)}const now=new Date;try{await job.handler(c);await db.update(core_cron).set({lastRun:now,nextRun:getNextCronRunDate(job.schedule,now)}).where(eq(core_cron.id,dbCron.id));return c.json({message:"Cron job executed successfully"},201)}catch(error){await c.get("log").error(`Error executing cron job: ${error}`);return c.json({error:"Failed to execute cron job"},500)}}catch(error){await c.get("log").error(`Error running cron job: ${error}`);return c.json({error:"Internal server error"},500)}}});
@@ -1,10 +1 @@
1
- import { CONFIG_PLUGIN } from "../../../../config.js";
2
- import { buildModule } from "../../../lib/module.js";
3
- import { logsDebugAdminRoute } from "./routes/logs.route.js";
4
- export const debugAdminModule = buildModule({
5
- pluginId: CONFIG_PLUGIN.pluginId,
6
- name: "debug",
7
- routes: [
8
- logsDebugAdminRoute
9
- ]
10
- });
1
+ import{CONFIG_PLUGIN}from"../../../../config.js";import{buildModule}from"../../../lib/module.js";import{logsDebugAdminRoute}from"./routes/logs.route.js";export const debugAdminModule=buildModule({pluginId:CONFIG_PLUGIN.pluginId,name:"debug",routes:[logsDebugAdminRoute]});
@@ -1,94 +1 @@
1
- import { eq } from "drizzle-orm";
2
- import { z } from "zod";
3
- import { CONFIG_PLUGIN } from "../../../../../config.js";
4
- import { core_logs } from "../../../../../database/logs.js";
5
- import { core_users } from "../../../../../database/users.js";
6
- import { buildRoute } from "../../../../lib/route.js";
7
- import { withPagination, zodPaginationPageInfo, zodPaginationQuery } from "../../../../lib/with-pagination.js";
8
- export const logsDebugAdminRoute = buildRoute({
9
- pluginId: CONFIG_PLUGIN.pluginId,
10
- route: {
11
- method: "get",
12
- description: "Get Admin Debug Logs",
13
- path: "/logs",
14
- request: {
15
- query: zodPaginationQuery.extend({
16
- order: z.enum([
17
- "asc",
18
- "desc"
19
- ]).optional(),
20
- orderBy: z.enum([
21
- "type",
22
- "createdAt",
23
- "pluginId"
24
- ]).optional()
25
- })
26
- },
27
- responses: {
28
- 200: {
29
- content: {
30
- "application/json": {
31
- schema: z.object({
32
- edges: z.array(z.object({
33
- id: z.number(),
34
- pluginId: z.string(),
35
- type: z.enum([
36
- "warn",
37
- "error",
38
- "debug"
39
- ]),
40
- content: z.string(),
41
- createdAt: z.date(),
42
- ipAddress: z.string(),
43
- method: z.string(),
44
- path: z.string(),
45
- userAgent: z.string().nullable(),
46
- statusCode: z.number(),
47
- user: z.object({
48
- id: z.number(),
49
- name: z.string(),
50
- nameCode: z.string()
51
- }).nullable()
52
- })),
53
- pageInfo: zodPaginationPageInfo
54
- })
55
- }
56
- },
57
- description: "List of users"
58
- }
59
- }
60
- },
61
- handler: async (c)=>{
62
- const query = c.req.valid("query");
63
- const data = await withPagination({
64
- params: {
65
- query
66
- },
67
- primaryCursor: core_logs.id,
68
- query: async ({ limit, where, orderBy })=>await c.get("db").select({
69
- id: core_logs.id,
70
- pluginId: core_logs.pluginId,
71
- type: core_logs.type,
72
- content: core_logs.content,
73
- createdAt: core_logs.createdAt,
74
- ipAddress: core_logs.ipAddress,
75
- method: core_logs.method,
76
- path: core_logs.path,
77
- userAgent: core_logs.userAgent,
78
- statusCode: core_logs.statusCode,
79
- user: {
80
- id: core_users.id,
81
- name: core_users.name,
82
- nameCode: core_users.nameCode
83
- }
84
- }).from(core_logs).leftJoin(core_users, eq(core_users.id, core_logs.userId)).where(where).orderBy(orderBy).limit(limit),
85
- table: core_logs,
86
- orderBy: {
87
- column: query.orderBy ? core_logs[query.orderBy] : core_logs.createdAt,
88
- order: query.order ?? "desc"
89
- },
90
- c
91
- });
92
- return c.json(data);
93
- }
94
- });
1
+ import{eq}from"drizzle-orm";import{z}from"zod";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_logs}from"../../../../../database/logs.js";import{core_users}from"../../../../../database/users.js";import{buildRoute}from"../../../../lib/route.js";import{withPagination,zodPaginationPageInfo,zodPaginationQuery}from"../../../../lib/with-pagination.js";export const logsDebugAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Get Admin Debug Logs",path:"/logs",request:{query:zodPaginationQuery.extend({order:z.enum(["asc","desc"]).optional(),orderBy:z.enum(["type","createdAt","pluginId"]).optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(z.object({id:z.number(),pluginId:z.string(),type:z.enum(["warn","error","debug"]),content:z.string(),createdAt:z.date(),ipAddress:z.string(),method:z.string(),path:z.string(),userAgent:z.string().nullable(),statusCode:z.number(),user:z.object({id:z.number(),name:z.string(),nameCode:z.string()}).nullable()})),pageInfo:zodPaginationPageInfo})}},description:"List of users"}}},handler:async c=>{const query=c.req.valid("query");const data=await withPagination({params:{query},primaryCursor:core_logs.id,query:async({limit,where,orderBy})=>await c.get("db").select({id:core_logs.id,pluginId:core_logs.pluginId,type:core_logs.type,content:core_logs.content,createdAt:core_logs.createdAt,ipAddress:core_logs.ipAddress,method:core_logs.method,path:core_logs.path,userAgent:core_logs.userAgent,statusCode:core_logs.statusCode,user:{id:core_users.id,name:core_users.name,nameCode:core_users.nameCode}}).from(core_logs).leftJoin(core_users,eq(core_users.id,core_logs.userId)).where(where).orderBy(orderBy).limit(limit),table:core_logs,orderBy:{column:query.orderBy?core_logs[query.orderBy]:core_logs.createdAt,order:query.order??"desc"},c});return c.json(data)}});
@@ -1,47 +1 @@
1
- import { HTTPException } from "hono/http-exception";
2
- import { z } from "zod";
3
- import { buildRoute } from "../../../lib/route.js";
4
- import { CONFIG_PLUGIN } from "../../../../config.js";
5
- export const sessionAdminRoute = buildRoute({
6
- pluginId: CONFIG_PLUGIN.pluginId,
7
- route: {
8
- method: "get",
9
- description: "Verify admin session",
10
- path: "/session",
11
- responses: {
12
- 200: {
13
- content: {
14
- "application/json": {
15
- schema: z.object({
16
- user: z.object({
17
- id: z.number(),
18
- email: z.string(),
19
- name: z.string(),
20
- nameCode: z.string(),
21
- createdAt: z.date(),
22
- newsletter: z.boolean(),
23
- avatarColor: z.string(),
24
- emailVerified: z.boolean(),
25
- roleId: z.number(),
26
- birthday: z.date().nullable()
27
- }),
28
- vitnode_version: z.string()
29
- })
30
- }
31
- },
32
- description: "User"
33
- },
34
- 403: {
35
- description: "Access Denied"
36
- }
37
- }
38
- },
39
- handler: (c)=>{
40
- const user = c.get("admin")?.user;
41
- if (!user) throw new HTTPException(403);
42
- return c.json({
43
- user,
44
- vitnode_version: CONFIG_PLUGIN.version
45
- });
46
- }
47
- });
1
+ import{HTTPException}from"hono/http-exception";import{z}from"zod";import{buildRoute}from"../../../lib/route.js";import{CONFIG_PLUGIN}from"../../../../config.js";export const sessionAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Verify admin session",path:"/session",responses:{200:{content:{"application/json":{schema:z.object({user:z.object({id:z.number(),email:z.string(),name:z.string(),nameCode:z.string(),createdAt:z.date(),newsletter:z.boolean(),avatarColor:z.string(),emailVerified:z.boolean(),roleId:z.number(),birthday:z.date().nullable()}),vitnode_version:z.string()})}},description:"User"},403:{description:"Access Denied"}}},handler:c=>{const user=c.get("admin")?.user;if(!user)throw new HTTPException(403);return c.json({user,vitnode_version:CONFIG_PLUGIN.version})}});
@@ -1,79 +1 @@
1
- import { z } from "@hono/zod-openapi";
2
- import { buildRoute } from "../../../../lib/route.js";
3
- import { withPagination, zodPaginationPageInfo, zodPaginationQuery } from "../../../../lib/with-pagination.js";
4
- import { CONFIG_PLUGIN } from "../../../../../config.js";
5
- import { core_users } from "../../../../../database/users.js";
6
- export const listUsersAdminRoute = buildRoute({
7
- pluginId: CONFIG_PLUGIN.pluginId,
8
- route: {
9
- method: "get",
10
- description: "Get list of all users",
11
- path: "/list",
12
- request: {
13
- query: zodPaginationQuery.extend({
14
- order: z.enum([
15
- "asc",
16
- "desc"
17
- ]).optional(),
18
- orderBy: z.enum([
19
- "name",
20
- "createdAt"
21
- ]).optional()
22
- })
23
- },
24
- responses: {
25
- 200: {
26
- content: {
27
- "application/json": {
28
- schema: z.object({
29
- edges: z.array(z.object({
30
- id: z.number(),
31
- name: z.string(),
32
- email: z.string(),
33
- nameCode: z.string(),
34
- createdAt: z.date(),
35
- newsletter: z.boolean(),
36
- avatarColor: z.string(),
37
- emailVerified: z.boolean(),
38
- roleId: z.number(),
39
- birthday: z.date().nullable(),
40
- language: z.string()
41
- })),
42
- pageInfo: zodPaginationPageInfo
43
- })
44
- }
45
- },
46
- description: "List of users"
47
- }
48
- }
49
- },
50
- handler: async (c)=>{
51
- const query = c.req.valid("query");
52
- const data = await withPagination({
53
- params: {
54
- query
55
- },
56
- primaryCursor: core_users.id,
57
- query: async ({ limit, where, orderBy })=>await c.get("db").select({
58
- id: core_users.id,
59
- name: core_users.name,
60
- email: core_users.email,
61
- nameCode: core_users.nameCode,
62
- createdAt: core_users.createdAt,
63
- newsletter: core_users.newsletter,
64
- avatarColor: core_users.avatarColor,
65
- emailVerified: core_users.emailVerified,
66
- roleId: core_users.roleId,
67
- birthday: core_users.birthday,
68
- language: core_users.language
69
- }).from(core_users).where(where).orderBy(orderBy).limit(limit),
70
- table: core_users,
71
- orderBy: {
72
- column: query.orderBy ? core_users[query.orderBy] : core_users.createdAt,
73
- order: query.order ?? "desc"
74
- },
75
- c
76
- });
77
- return c.json(data);
78
- }
79
- });
1
+ import{z}from"@hono/zod-openapi";import{buildRoute}from"../../../../lib/route.js";import{withPagination,zodPaginationPageInfo,zodPaginationQuery}from"../../../../lib/with-pagination.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_users}from"../../../../../database/users.js";export const listUsersAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Get list of all users",path:"/list",request:{query:zodPaginationQuery.extend({order:z.enum(["asc","desc"]).optional(),orderBy:z.enum(["name","createdAt"]).optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(z.object({id:z.number(),name:z.string(),email:z.string(),nameCode:z.string(),createdAt:z.date(),newsletter:z.boolean(),avatarColor:z.string(),emailVerified:z.boolean(),roleId:z.number(),birthday:z.date().nullable(),language:z.string()})),pageInfo:zodPaginationPageInfo})}},description:"List of users"}}},handler:async c=>{const query=c.req.valid("query");const data=await withPagination({params:{query},primaryCursor:core_users.id,query:async({limit,where,orderBy})=>await c.get("db").select({id:core_users.id,name:core_users.name,email:core_users.email,nameCode:core_users.nameCode,createdAt:core_users.createdAt,newsletter:core_users.newsletter,avatarColor:core_users.avatarColor,emailVerified:core_users.emailVerified,roleId:core_users.roleId,birthday:core_users.birthday,language:core_users.language}).from(core_users).where(where).orderBy(orderBy).limit(limit),table:core_users,orderBy:{column:query.orderBy?core_users[query.orderBy]:core_users.createdAt,order:query.order??"desc"},c});return c.json(data)}});
@@ -1,84 +1 @@
1
- import { z } from "@hono/zod-openapi";
2
- import { buildRoute } from "../../../../lib/route.js";
3
- import { withPagination, zodPaginationPageInfo, zodPaginationQuery } from "../../../../lib/with-pagination.js";
4
- import { CONFIG_PLUGIN } from "../../../../../config.js";
5
- import { core_users } from "../../../../../database/users.js";
6
- export const usersAdminRoute = buildRoute({
7
- pluginId: CONFIG_PLUGIN.pluginId,
8
- route: {
9
- method: "get",
10
- description: "Get list of all users (Admin only)",
11
- path: "/list",
12
- request: {
13
- query: zodPaginationQuery.extend({
14
- order: z.enum([
15
- "asc",
16
- "desc"
17
- ]).optional(),
18
- orderBy: z.enum([
19
- "id",
20
- "name",
21
- "email",
22
- "createdAt"
23
- ]).optional()
24
- })
25
- },
26
- responses: {
27
- 200: {
28
- content: {
29
- "application/json": {
30
- schema: z.object({
31
- edges: z.array(z.object({
32
- id: z.number(),
33
- name: z.string(),
34
- email: z.string(),
35
- nameCode: z.string(),
36
- createdAt: z.date(),
37
- newsletter: z.boolean(),
38
- avatarColor: z.string(),
39
- emailVerified: z.boolean(),
40
- roleId: z.number(),
41
- birthday: z.date().nullable(),
42
- language: z.string()
43
- })),
44
- pageInfo: zodPaginationPageInfo
45
- })
46
- }
47
- },
48
- description: "List of users"
49
- },
50
- 403: {
51
- description: "Access Denied"
52
- }
53
- }
54
- },
55
- handler: async (c)=>{
56
- const query = c.req.valid("query");
57
- const data = await withPagination({
58
- params: {
59
- query
60
- },
61
- primaryCursor: core_users.id,
62
- query: async ({ limit, where, orderBy })=>await c.get("db").select({
63
- id: core_users.id,
64
- name: core_users.name,
65
- email: core_users.email,
66
- nameCode: core_users.nameCode,
67
- createdAt: core_users.createdAt,
68
- newsletter: core_users.newsletter,
69
- avatarColor: core_users.avatarColor,
70
- emailVerified: core_users.emailVerified,
71
- roleId: core_users.roleId,
72
- birthday: core_users.birthday,
73
- language: core_users.language
74
- }).from(core_users).where(where).orderBy(orderBy).limit(limit),
75
- table: core_users,
76
- orderBy: {
77
- column: query.orderBy ? core_users[query.orderBy] : core_users.createdAt,
78
- order: query.order ?? "desc"
79
- },
80
- c
81
- });
82
- return c.json(data);
83
- }
84
- });
1
+ import{z}from"@hono/zod-openapi";import{buildRoute}from"../../../../lib/route.js";import{withPagination,zodPaginationPageInfo,zodPaginationQuery}from"../../../../lib/with-pagination.js";import{CONFIG_PLUGIN}from"../../../../../config.js";import{core_users}from"../../../../../database/users.js";export const usersAdminRoute=buildRoute({pluginId:CONFIG_PLUGIN.pluginId,route:{method:"get",description:"Get list of all users (Admin only)",path:"/list",request:{query:zodPaginationQuery.extend({order:z.enum(["asc","desc"]).optional(),orderBy:z.enum(["id","name","email","createdAt"]).optional()})},responses:{200:{content:{"application/json":{schema:z.object({edges:z.array(z.object({id:z.number(),name:z.string(),email:z.string(),nameCode:z.string(),createdAt:z.date(),newsletter:z.boolean(),avatarColor:z.string(),emailVerified:z.boolean(),roleId:z.number(),birthday:z.date().nullable(),language:z.string()})),pageInfo:zodPaginationPageInfo})}},description:"List of users"},403:{description:"Access Denied"}}},handler:async c=>{const query=c.req.valid("query");const data=await withPagination({params:{query},primaryCursor:core_users.id,query:async({limit,where,orderBy})=>await c.get("db").select({id:core_users.id,name:core_users.name,email:core_users.email,nameCode:core_users.nameCode,createdAt:core_users.createdAt,newsletter:core_users.newsletter,avatarColor:core_users.avatarColor,emailVerified:core_users.emailVerified,roleId:core_users.roleId,birthday:core_users.birthday,language:core_users.language}).from(core_users).where(where).orderBy(orderBy).limit(limit),table:core_users,orderBy:{column:query.orderBy?core_users[query.orderBy]:core_users.createdAt,order:query.order??"desc"},c});return c.json(data)}});
@@ -1,10 +1 @@
1
- import { buildModule } from "../../../lib/module.js";
2
- import { CONFIG_PLUGIN } from "../../../../config.js";
3
- import { listUsersAdminRoute } from "./routes/list.route.js";
4
- export const usersAdminModule = buildModule({
5
- pluginId: CONFIG_PLUGIN.pluginId,
6
- name: "users",
7
- routes: [
8
- listUsersAdminRoute
9
- ]
10
- });
1
+ import{buildModule}from"../../../lib/module.js";import{CONFIG_PLUGIN}from"../../../../config.js";import{listUsersAdminRoute}from"./routes/list.route.js";export const usersAdminModule=buildModule({pluginId:CONFIG_PLUGIN.pluginId,name:"users",routes:[listUsersAdminRoute]});
@@ -1,24 +1 @@
1
- import { lt } from "drizzle-orm";
2
- import { buildCron } from "../../../lib/cron.js";
3
- import { core_admin_sessions } from "../../../../database/admins.js";
4
- import { core_sessions } from "../../../../database/sessions.js";
5
- import { core_users_forgot_password } from "../../../../database/users.js";
6
- export const cleanCron = buildCron({
7
- name: "clean",
8
- description: "Clean up expired sessions and tokens",
9
- // Run every 1 hour
10
- schedule: "0 * * * *",
11
- handler: async (c)=>{
12
- await c.get("db").transaction(async (tx)=>{
13
- // Delete expired sessions
14
- await tx.delete(core_sessions).where(lt(core_sessions.expiresAt, new Date()));
15
- await tx.delete(core_admin_sessions).where(lt(core_admin_sessions.expiresAt, new Date()));
16
- // Delete expired forgot password tokens
17
- await tx.delete(core_users_forgot_password).where(lt(core_users_forgot_password.expiresAt, new Date()));
18
- // // Delete expired email confirmation tokens
19
- // await tx
20
- // .delete(core_users_confirm_emails)
21
- // .where(lt(core_users_confirm_emails.expiresAt, new Date()));
22
- });
23
- }
24
- });
1
+ import{lt}from"drizzle-orm";import{buildCron}from"../../../lib/cron.js";import{core_admin_sessions}from"../../../../database/admins.js";import{core_sessions}from"../../../../database/sessions.js";import{core_users_forgot_password}from"../../../../database/users.js";export const cleanCron=buildCron({name:"clean",description:"Clean up expired sessions and tokens",schedule:"0 * * * *",handler:async c=>{await c.get("db").transaction(async tx=>{await tx.delete(core_sessions).where(lt(core_sessions.expiresAt,new Date));await tx.delete(core_admin_sessions).where(lt(core_admin_sessions.expiresAt,new Date));await tx.delete(core_users_forgot_password).where(lt(core_users_forgot_password.expiresAt,new Date))})}});
@@ -1,14 +1 @@
1
- import { buildModule } from "../../lib/module.js";
2
- import { CONFIG_PLUGIN } from "../../../config.js";
3
- import { cleanCron } from "./cron/clean.cron.js";
4
- import { runCronRoute } from "./routes/cron.route.js";
5
- export const cronModule = buildModule({
6
- pluginId: CONFIG_PLUGIN.pluginId,
7
- name: "cron",
8
- routes: [
9
- runCronRoute
10
- ],
11
- cronJobs: [
12
- cleanCron
13
- ]
14
- });
1
+ import{buildModule}from"../../lib/module.js";import{CONFIG_PLUGIN}from"../../../config.js";import{cleanCron}from"./cron/clean.cron.js";import{runCronRoute}from"./routes/cron.route.js";export const cronModule=buildModule({pluginId:CONFIG_PLUGIN.pluginId,name:"cron",routes:[runCronRoute],cronJobs:[cleanCron]});
@@ -1 +1 @@
1
- {"version":3,"file":"process-cron-jobs.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/cron/helpers/process-cron-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,UAAU,aAAa;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAC9B,UAAU,EAAE,aAAa,EAAE,EAC3B,eAAe,EAAE,aAAa,EAAE,iBAqBjC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EAAE,EACzB,UAAU,EAAE,aAAa,EAAE;;;;iBAKhB;YAAE,WAAW,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE;qBACzC,aAAa;aACrB,aAAa;;EAsCrB;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAC9B,YAAY,EAAE;IACZ,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,WAAW,EAAE,aAAa,CAAC;IAC3B,GAAG,EAAE,aAAa,CAAC;CACpB,EAAE,iBAyBJ"}
1
+ {"version":3,"file":"process-cron-jobs.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/cron/helpers/process-cron-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,UAAU,aAAa;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAC9B,UAAU,EAAE,aAAa,EAAE,EAC3B,eAAe,EAAE,aAAa,EAAE,iBAqBjC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EAAE,EACzB,UAAU,EAAE,aAAa,EAAE;;;;iBAKhB;YAAE,WAAW,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE;qBACzC,aAAa;aACrB,aAAa;;EAsCrB;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAC9B,YAAY,EAAE;IACZ,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,WAAW,EAAE,aAAa,CAAC;IAC3B,GAAG,EAAE,aAAa,CAAC;CACpB,EAAE,iBAyBJ"}
@@ -1,76 +1 @@
1
- import { eq, inArray } from "drizzle-orm";
2
- import { validate } from "node-cron";
3
- import { core_cron } from "../../../../database/cron.js";
4
- import { shouldCronJobRun } from "../../../../lib/api/should-cron-job-run.js";
5
- function getJobChanges(job, existingJob) {
6
- const changes = {};
7
- if (existingJob.description !== job.description) {
8
- changes.description = true;
9
- }
10
- if (existingJob.schedule !== job.schedule) {
11
- changes.schedule = true;
12
- }
13
- return changes;
14
- }
15
- export async function cleanupOutdatedCronJobs(db, cronFromDb, currentCronJobs) {
16
- if (cronFromDb.length === 0) return;
17
- // Optimize: Use Set for O(1) lookup instead of Array.includes O(n)
18
- const currentCronIdentifiers = new Set(currentCronJobs.map((job)=>`${job.pluginId}:${job.module}:${job.name}`));
19
- const cronJobsToDelete = cronFromDb.filter((dbCron)=>!currentCronIdentifiers.has(`${dbCron.pluginId}:${dbCron.module}:${dbCron.name}`)).map((dbCron)=>dbCron.id);
20
- if (cronJobsToDelete.length > 0) {
21
- await db.delete(core_cron).where(inArray(core_cron.id, cronJobsToDelete));
22
- }
23
- }
24
- export function processCronJobs(cronJobs, cronFromDb) {
25
- const newJobs = [];
26
- const jobsToExecute = [];
27
- const jobsToUpdate = [];
28
- // Optimize: Create a Map for O(1) lookup instead of O(n) find operations
29
- const cronFromDbMap = new Map(cronFromDb.map((dbJob)=>[
30
- `${dbJob.pluginId}:${dbJob.module}:${dbJob.name}`,
31
- dbJob
32
- ]));
33
- for (const job of cronJobs){
34
- if (!validate(job.schedule)) {
35
- // eslint-disable-next-line no-console
36
- console.warn(`\x1b[34m[VitNode]\x1b[0m \x1b[33mInvalid cron schedule for job "${job.pluginId}:${job.module}:${job.name}"\x1b[0m: ${job.schedule}`);
37
- continue;
38
- }
39
- const jobKey = `${job.pluginId}:${job.module}:${job.name}`;
40
- const existingJob = cronFromDbMap.get(jobKey);
41
- if (existingJob) {
42
- const changes = getJobChanges(job, existingJob);
43
- if (Object.keys(changes).length > 0) {
44
- jobsToUpdate.push({
45
- job,
46
- existingJob,
47
- changes
48
- });
49
- }
50
- } else {
51
- newJobs.push(job);
52
- }
53
- if (shouldCronJobRun(job.schedule, existingJob?.lastRun ?? null)) {
54
- jobsToExecute.push(job);
55
- }
56
- }
57
- return {
58
- newJobs,
59
- jobsToExecute,
60
- jobsToUpdate
61
- };
62
- }
63
- export async function updateCronJobs(db, jobsToUpdate) {
64
- if (jobsToUpdate.length === 0) return;
65
- const updatePromises = jobsToUpdate.map(({ job, existingJob, changes })=>{
66
- const updateData = {};
67
- if (changes.description) {
68
- updateData.description = job.description ?? null;
69
- }
70
- if (changes.schedule) {
71
- updateData.schedule = job.schedule;
72
- }
73
- return db.update(core_cron).set(updateData).where(eq(core_cron.id, existingJob.id));
74
- });
75
- await Promise.all(updatePromises);
76
- }
1
+ import{eq,inArray}from"drizzle-orm";import{core_cron}from"../../../../database/cron.js";import{shouldCronJobRun}from"../../../../lib/api/should-cron-job-run.js";import{validateCronSchedule}from"../../../../lib/api/validate-cron-schedule.js";function getJobChanges(job,existingJob){const changes={};if(existingJob.description!==job.description){changes.description=true}if(existingJob.schedule!==job.schedule){changes.schedule=true}return changes}export async function cleanupOutdatedCronJobs(db,cronFromDb,currentCronJobs){if(cronFromDb.length===0)return;const currentCronIdentifiers=new Set(currentCronJobs.map(job=>`${job.pluginId}:${job.module}:${job.name}`));const cronJobsToDelete=cronFromDb.filter(dbCron=>!currentCronIdentifiers.has(`${dbCron.pluginId}:${dbCron.module}:${dbCron.name}`)).map(dbCron=>dbCron.id);if(cronJobsToDelete.length>0){await db.delete(core_cron).where(inArray(core_cron.id,cronJobsToDelete))}}export function processCronJobs(cronJobs,cronFromDb){const newJobs=[];const jobsToExecute=[];const jobsToUpdate=[];const cronFromDbMap=new Map(cronFromDb.map(dbJob=>[`${dbJob.pluginId}:${dbJob.module}:${dbJob.name}`,dbJob]));for(const job of cronJobs){if(!validateCronSchedule(job.schedule)){console.warn(`\x1b[34m[VitNode]\x1b[0m \x1b[33mInvalid cron schedule for job "${job.pluginId}:${job.module}:${job.name}"\x1b[0m: ${job.schedule}`);continue}const jobKey=`${job.pluginId}:${job.module}:${job.name}`;const existingJob=cronFromDbMap.get(jobKey);if(existingJob){const changes=getJobChanges(job,existingJob);if(Object.keys(changes).length>0){jobsToUpdate.push({job,existingJob,changes})}}else{newJobs.push(job)}if(shouldCronJobRun(job.schedule,existingJob?.lastRun??null)){jobsToExecute.push(job)}}return{newJobs,jobsToExecute,jobsToUpdate}}export async function updateCronJobs(db,jobsToUpdate){if(jobsToUpdate.length===0)return;const updatePromises=jobsToUpdate.map(({job,existingJob,changes})=>{const updateData={};if(changes.description){updateData.description=job.description??null}if(changes.schedule){updateData.schedule=job.schedule}return db.update(core_cron).set(updateData).where(eq(core_cron.id,existingJob.id))});await Promise.all(updatePromises)}