@vitnode/core 1.2.0-canary.60 → 1.2.0-canary.62
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.
- package/dist/scripts/get-config.js +15 -0
- package/dist/scripts/plugin.js +188 -0
- package/dist/scripts/prepare-database.js +177 -0
- package/dist/scripts/prepare-plugins-files.js +134 -0
- package/dist/scripts/run-interactive-shell-command.js +21 -0
- package/dist/scripts/scripts.js +39 -13
- package/dist/scripts/shared/file-utils.js +203 -0
- package/dist/src/api/adapters/sso/discord.js +1 -77
- package/dist/src/api/adapters/sso/facebook.js +1 -76
- package/dist/src/api/adapters/sso/google.js +1 -87
- package/dist/src/api/config.js +1 -67
- package/dist/src/api/lib/check-plugin-id.js +1 -43
- package/dist/src/api/lib/cron.js +1 -22
- package/dist/src/api/lib/logger-middleware.js +1 -35
- package/dist/src/api/lib/module.js +1 -22
- package/dist/src/api/lib/plugin.js +1 -22
- package/dist/src/api/lib/route.js +1 -27
- package/dist/src/api/lib/with-pagination.js +1 -83
- package/dist/src/api/middlewares/captcha.middleware.js +1 -63
- package/dist/src/api/middlewares/cron-auth.middleware.js +1 -19
- package/dist/src/api/middlewares/global.middleware.js +1 -93
- package/dist/src/api/middlewares/rate-limiter.middleware.js +1 -32
- package/dist/src/api/models/device.js +1 -61
- package/dist/src/api/models/email.js +1 -76
- package/dist/src/api/models/password.js +1 -36
- package/dist/src/api/models/session-admin.js +1 -106
- package/dist/src/api/models/session.js +1 -85
- package/dist/src/api/models/sso.js +1 -120
- package/dist/src/api/models/user/get-user-by-id.js +1 -19
- package/dist/src/api/models/user/sign-in-with-passwords.js +1 -22
- package/dist/src/api/models/user/sign-up.js +1 -73
- package/dist/src/api/models/user.js +1 -8
- package/dist/src/api/modules/admin/admin.module.js +1 -19
- package/dist/src/api/modules/admin/advanced/advanced.admin.module.js +1 -11
- package/dist/src/api/modules/admin/advanced/cron/cron.admin.module.js +1 -12
- package/dist/src/api/modules/admin/advanced/cron/routes/get.route.js +1 -66
- package/dist/src/api/modules/admin/advanced/cron/routes/run.route.js +1 -95
- package/dist/src/api/modules/admin/debug/debug.admin.module.js +1 -10
- package/dist/src/api/modules/admin/debug/routes/logs.route.js +1 -94
- package/dist/src/api/modules/admin/routes/session.route.js +1 -47
- package/dist/src/api/modules/admin/users/routes/list.route.js +1 -79
- package/dist/src/api/modules/admin/users/routes/users.route.js +1 -84
- package/dist/src/api/modules/admin/users/users.admin.module.js +1 -10
- package/dist/src/api/modules/cron/cron/clean.cron.js +1 -24
- package/dist/src/api/modules/cron/cron.module.js +1 -14
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.d.ts.map +1 -1
- package/dist/src/api/modules/cron/helpers/process-cron-jobs.js +1 -76
- package/dist/src/api/modules/cron/routes/cron.route.js +1 -101
- package/dist/src/api/modules/middleware/middleware.module.js +1 -10
- package/dist/src/api/modules/middleware/route.js +1 -49
- package/dist/src/api/modules/users/avatar-color.js +1 -43
- package/dist/src/api/modules/users/routes/change-password.route.js +1 -58
- package/dist/src/api/modules/users/routes/reset-passowrd.route.js +1 -91
- package/dist/src/api/modules/users/routes/session.route.js +1 -46
- package/dist/src/api/modules/users/routes/sign-in.route.js +1 -71
- package/dist/src/api/modules/users/routes/sign-out.route.js +1 -43
- package/dist/src/api/modules/users/routes/sign-up.route.js +1 -77
- package/dist/src/api/modules/users/routes/test.route.js +1 -33
- package/dist/src/api/modules/users/sso/routes/callback.route.js +1 -52
- package/dist/src/api/modules/users/sso/routes/create-url.route.js +1 -36
- package/dist/src/api/modules/users/sso/sso.module.js +1 -12
- package/dist/src/api/modules/users/users.module.js +1 -26
- package/dist/src/api/plugin.js +1 -15
- package/dist/src/app/login/page.js +1 -16
- package/dist/src/app/login/reset-password/page.js +1 -18
- package/dist/src/app/login/sso/[providerId]/page.js +1 -10
- package/dist/src/app/register/page.js +1 -16
- package/dist/src/app_admin/core/advanced/cron/page.js +1 -42
- package/dist/src/app_admin/core/debug/page.js +1 -45
- package/dist/src/app_admin/core/page.js +1 -5
- package/dist/src/app_admin/core/test/page.js +1 -5
- package/dist/src/app_admin/core/users/page.js +1 -38
- package/dist/src/components/avatar.js +1 -14
- package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +1 -42
- package/dist/src/components/confirm-action/content.js +1 -31
- package/dist/src/components/date-format.js +1 -41
- package/dist/src/components/form/auto-form.js +1 -103
- package/dist/src/components/form/common/desc.js +1 -9
- package/dist/src/components/form/common/label.js +1 -18
- package/dist/src/components/form/fields/checkbox.js +1 -37
- package/dist/src/components/form/fields/combobox-async.js +1 -123
- package/dist/src/components/form/fields/combobox.js +1 -87
- package/dist/src/components/form/fields/input.js +1 -39
- package/dist/src/components/form/fields/radio-group.js +1 -50
- package/dist/src/components/form/fields/select.js +1 -58
- package/dist/src/components/form/fields/switch.js +1 -36
- package/dist/src/components/form/fields/textarea.js +1 -36
- package/dist/src/components/i18n-provider.js +1 -43
- package/dist/src/components/logo-vitnode.js +1 -119
- package/dist/src/components/switchers/langs/language-switcher.js +1 -47
- package/dist/src/components/switchers/themes/theme-switcher.js +1 -28
- package/dist/src/components/table/content.js +1 -81
- package/dist/src/components/table/data-table.js +1 -68
- package/dist/src/components/table/order-table-head.js +1 -50
- package/dist/src/components/table/pagination.js +1 -122
- package/dist/src/components/tiptap/extension.js +1 -33
- package/dist/src/components/tiptap/toolbar/actions/alignment-action.js +1 -91
- package/dist/src/components/tiptap/toolbar/actions/bold-action.js +1 -39
- package/dist/src/components/tiptap/toolbar/actions/headings-action.js +1 -93
- package/dist/src/components/tiptap/toolbar/actions/italic-action.js +1 -38
- package/dist/src/components/tiptap/toolbar/actions/list-action.js +1 -61
- package/dist/src/components/tiptap/toolbar/actions/text-format-more/text-format-more.js +1 -59
- package/dist/src/components/tiptap/toolbar/actions/underline-action.js +1 -38
- package/dist/src/components/tiptap/toolbar/actions/undo-redo-actions.js +1 -63
- package/dist/src/components/tiptap/toolbar/actions/utils/tooltip-shortcut.js +1 -11
- package/dist/src/components/tiptap/toolbar/tiptap-toolbar.js +1 -55
- package/dist/src/components/tiptap/toolbar/use-toolbar-editor.js +1 -5
- package/dist/src/components/ui/accordion.js +1 -46
- package/dist/src/components/ui/alert-dialog.js +1 -123
- package/dist/src/components/ui/alert.js +1 -39
- package/dist/src/components/ui/badge.js +1 -28
- package/dist/src/components/ui/button-client.js +1 -57
- package/dist/src/components/ui/button.js +1 -32
- package/dist/src/components/ui/card.js +1 -52
- package/dist/src/components/ui/checkbox.js +1 -20
- package/dist/src/components/ui/collapsible.js +1 -22
- package/dist/src/components/ui/command.js +1 -98
- package/dist/src/components/ui/context-menu.js +1 -140
- package/dist/src/components/ui/dialog.js +1 -189
- package/dist/src/components/ui/drawer.js +1 -83
- package/dist/src/components/ui/dropdown-menu.js +1 -141
- package/dist/src/components/ui/editor-content.js +1 -10
- package/dist/src/components/ui/editor.js +1 -35
- package/dist/src/components/ui/form.js +1 -148
- package/dist/src/components/ui/header-content.js +1 -30
- package/dist/src/components/ui/hover-card.js +1 -29
- package/dist/src/components/ui/input-otp.js +1 -48
- package/dist/src/components/ui/input.js +1 -11
- package/dist/src/components/ui/label.js +1 -12
- package/dist/src/components/ui/loader.js +1 -16
- package/dist/src/components/ui/menubar.js +1 -151
- package/dist/src/components/ui/navigation-menu.js +1 -82
- package/dist/src/components/ui/popover.js +1 -35
- package/dist/src/components/ui/progress.js +1 -19
- package/dist/src/components/ui/radio-group.js +1 -27
- package/dist/src/components/ui/scroll-area.js +1 -33
- package/dist/src/components/ui/select.js +1 -113
- package/dist/src/components/ui/separator.js +1 -14
- package/dist/src/components/ui/sheet.js +1 -92
- package/dist/src/components/ui/sidebar.js +1 -433
- package/dist/src/components/ui/skeleton.js +1 -10
- package/dist/src/components/ui/slider.js +1 -50
- package/dist/src/components/ui/sonner.js +1 -26
- package/dist/src/components/ui/switch.js +1 -16
- package/dist/src/components/ui/table.js +1 -63
- package/dist/src/components/ui/tabs.js +1 -33
- package/dist/src/components/ui/textarea.js +1 -10
- package/dist/src/components/ui/toggle-group.js +1 -45
- package/dist/src/components/ui/toggle.js +1 -34
- package/dist/src/components/ui/tooltip.js +1 -57
- package/dist/src/config.js +1 -4
- package/dist/src/database/admins.js +1 -74
- package/dist/src/database/cron.js +1 -22
- package/dist/src/database/languages.js +1 -52
- package/dist/src/database/logs.js +1 -34
- package/dist/src/database/moderators.js +1 -37
- package/dist/src/database/roles.js +1 -13
- package/dist/src/database/sessions.js +1 -60
- package/dist/src/database/users.js +1 -145
- package/dist/src/drizzle.config.js +1 -67
- package/dist/src/emails/default-template.js +1 -99
- package/dist/src/emails/reset-password.js +1 -132
- package/dist/src/emails/ui/button.js +1 -36
- package/dist/src/emails/ui/card.js +1 -39
- package/dist/src/hooks/use-before-unload.js +1 -30
- package/dist/src/hooks/use-captcha.js +1 -122
- package/dist/src/hooks/use-mobile.js +1 -16
- package/dist/src/lib/api/get-middleware-api.js +1 -13
- package/dist/src/lib/api/get-next-cron-run-date.js +1 -14
- package/dist/src/lib/api/get-next-cron-run-date.test.js +1 -55
- package/dist/src/lib/api/get-session-admin-api.js +1 -19
- package/dist/src/lib/api/get-session-api.js +1 -14
- package/dist/src/lib/api/should-cron-job-run.js +1 -16
- package/dist/src/lib/api/should-cron-job-run.test.js +1 -213
- package/dist/src/lib/api/validate-cron-schedule.d.ts +2 -0
- package/dist/src/lib/api/validate-cron-schedule.d.ts.map +1 -0
- package/dist/src/lib/api/validate-cron-schedule.js +1 -0
- package/dist/src/lib/api/validate-cron-schedule.test.d.ts +2 -0
- package/dist/src/lib/api/validate-cron-schedule.test.d.ts.map +1 -0
- package/dist/src/lib/api/validate-cron-schedule.test.js +1 -0
- package/dist/src/lib/colors.js +1 -140
- package/dist/src/lib/colors.test.js +1 -173
- package/dist/src/lib/config.js +1 -14
- package/dist/src/lib/ctrl-or-command-character.js +1 -5
- package/dist/src/lib/fetcher/cookie-from-string-to-object.js +1 -12
- package/dist/src/lib/fetcher/cookie-from-string-to-object.test.js +1 -78
- package/dist/src/lib/fetcher/core.js +3 -48
- package/dist/src/lib/fetcher/helpers-server.js +1 -18
- package/dist/src/lib/fetcher/helpers.js +1 -16
- package/dist/src/lib/fetcher/helpers.test.js +1 -37
- package/dist/src/lib/fetcher/types.js +1 -1
- package/dist/src/lib/fetcher-client.js +1 -17
- package/dist/src/lib/fetcher.js +1 -33
- package/dist/src/lib/helpers/auto-form.js +1 -98
- package/dist/src/lib/helpers/auto-form.test.js +1 -336
- package/dist/src/lib/navigation.js +1 -11
- package/dist/src/lib/plugin.js +1 -3
- package/dist/src/lib/special-characters.js +1 -4
- package/dist/src/lib/special-characters.test.js +1 -56
- package/dist/src/lib/utils.js +1 -5
- package/dist/src/locales/en.json +308 -0
- package/dist/src/tests/setup.js +1 -6
- package/dist/src/views/admin/layouts/admin-layout.js +1 -73
- package/dist/src/views/admin/layouts/sidebar/nav/item.js +1 -98
- package/dist/src/views/admin/layouts/sidebar/nav/nav.js +1 -60
- package/dist/src/views/admin/layouts/sidebar/sidebar.js +1 -28
- package/dist/src/views/admin/layouts/sidebar/sign-out.js +1 -14
- package/dist/src/views/admin/layouts/user-bar/client.js +1 -69
- package/dist/src/views/admin/layouts/user-bar/user-bar.js +1 -32
- package/dist/src/views/admin/sign-in/sign-in-admin-view.js +1 -27
- package/dist/src/views/admin/views/core/advanced/cron/cron-table-view.js +1 -97
- package/dist/src/views/admin/views/core/advanced/cron/run-action/mutation-api.js +1 -23
- package/dist/src/views/admin/views/core/advanced/cron/run-action/run-action.js +1 -38
- package/dist/src/views/admin/views/core/dashboard/dashboard-admin-view.js +1 -44
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.js +1 -35
- package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +1 -5
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/content.js +1 -281
- package/dist/src/views/admin/views/core/debug/system-logs/actions/more/more.js +1 -67
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-status.js +1 -14
- package/dist/src/views/admin/views/core/debug/system-logs/badges/badge-type-log.js +1 -30
- package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.js +1 -96
- package/dist/src/views/admin/views/core/test.js +1 -161
- package/dist/src/views/admin/views/core/users/users-admin-view.js +1 -89
- package/dist/src/views/auth/password-reset/change-password-form/form.js +1 -48
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.js +1 -22
- package/dist/src/views/auth/password-reset/change-password-form/use-form.js +1 -36
- package/dist/src/views/auth/password-reset/form/form.js +1 -104
- package/dist/src/views/auth/password-reset/form/mutation-api.js +1 -21
- package/dist/src/views/auth/password-reset/form/use-form.js +1 -33
- package/dist/src/views/auth/password-reset/password-reset-view.js +1 -37
- package/dist/src/views/auth/sign-in/form/form.js +1 -64
- package/dist/src/views/auth/sign-in/form/mutation-api.js +1 -33
- package/dist/src/views/auth/sign-in/form/use-form.js +1 -38
- package/dist/src/views/auth/sign-in/sign-in-view.js +1 -61
- package/dist/src/views/auth/sign-up/components/password-input.js +1 -96
- package/dist/src/views/auth/sign-up/email-confirmation-view.js +1 -55
- package/dist/src/views/auth/sign-up/form/form.js +1 -89
- package/dist/src/views/auth/sign-up/form/mutation-api.js +1 -30
- package/dist/src/views/auth/sign-up/form/use-form.js +1 -70
- package/dist/src/views/auth/sign-up/sign-up-view.js +1 -65
- package/dist/src/views/auth/sign-up/wrapper.js +1 -22
- package/dist/src/views/auth/sso/buttons/client.js +1 -22
- package/dist/src/views/auth/sso/buttons/mutation-api.js +1 -24
- package/dist/src/views/auth/sso/buttons/sso-buttons.js +1 -56
- package/dist/src/views/auth/sso/callback/callback-sso-view.js +1 -32
- package/dist/src/views/auth/sso/callback/client/client.js +1 -68
- package/dist/src/views/auth/sso/callback/client/mutation-api.js +1 -32
- package/dist/src/views/error/back-button.js +1 -14
- package/dist/src/views/error/error-view.js +1 -58
- package/dist/src/views/error/global-error-view.js +1 -50
- package/dist/src/views/layouts/provider.js +1 -44
- package/dist/src/views/layouts/root-layout.js +1 -25
- package/dist/src/views/layouts/theme/header/header.js +1 -38
- package/dist/src/views/layouts/theme/header/user/auth/auth.js +1 -33
- package/dist/src/views/layouts/theme/header/user/auth/client.js +1 -47
- package/dist/src/views/layouts/theme/header/user/auth/log-out-mutation-api.js +1 -27
- package/dist/src/views/layouts/theme/header/user/user.js +1 -32
- package/dist/src/views/layouts/theme/layout.js +1 -16
- package/dist/src/vitnode.config.js +1 -42
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsup.config.js +18 -0
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +49 -0
- package/eslint.config.mjs +2 -0
- package/package.json +6 -10
- package/dist/src/api/adapters/cron/node-cron.adapter.d.ts +0 -3
- package/dist/src/api/adapters/cron/node-cron.adapter.d.ts.map +0 -1
- package/dist/src/api/adapters/cron/node-cron.adapter.js +0 -11
- package/dist/src/api/adapters/email/nodemailer.d.ts +0 -10
- package/dist/src/api/adapters/email/nodemailer.d.ts.map +0 -1
- package/dist/src/api/adapters/email/nodemailer.js +0 -30
- package/dist/src/api/adapters/email/resend.d.ts +0 -6
- package/dist/src/api/adapters/email/resend.d.ts.map +0 -1
- package/dist/src/api/adapters/email/resend.js +0 -21
|
@@ -1,66 +1 @@
|
|
|
1
|
-
import z from
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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;
|
|
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 {
|
|
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)}
|