@vitnode/core 1.2.0-canary.23 → 1.2.0-canary.24

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 (165) hide show
  1. package/dist/scripts/plugin.d.ts.map +1 -1
  2. package/dist/scripts/scripts.js +2 -9
  3. package/dist/scripts/shared/file-utils.d.ts.map +1 -1
  4. package/dist/src/api/{plugins → adapters}/email/nodemailer.d.ts +1 -1
  5. package/dist/src/api/adapters/email/nodemailer.d.ts.map +1 -0
  6. package/dist/src/api/{plugins → adapters}/email/nodemailer.js +1 -1
  7. package/dist/src/api/{plugins → adapters}/email/resend.d.ts +1 -1
  8. package/dist/src/api/adapters/email/resend.d.ts.map +1 -0
  9. package/dist/src/api/{plugins → adapters}/email/resend.js +1 -1
  10. package/dist/src/api/adapters/sso/discord.d.ts.map +1 -0
  11. package/dist/src/api/adapters/sso/facebook.d.ts.map +1 -0
  12. package/dist/src/api/adapters/sso/google.d.ts.map +1 -0
  13. package/dist/src/api/config.d.ts.map +1 -1
  14. package/dist/src/api/config.js +6 -5
  15. package/dist/src/api/lib/logger-middleware.d.ts +8 -0
  16. package/dist/src/api/lib/logger-middleware.d.ts.map +1 -0
  17. package/dist/src/api/lib/logger-middleware.js +30 -0
  18. package/dist/src/api/lib/route.d.ts +1 -1
  19. package/dist/src/api/lib/route.d.ts.map +1 -1
  20. package/dist/src/api/lib/route.js +1 -1
  21. package/dist/src/api/middlewares/{global/global.d.ts → global.middleware.d.ts} +10 -8
  22. package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -0
  23. package/dist/src/api/middlewares/global.middleware.js +86 -0
  24. package/dist/src/api/middlewares/rate-limiter.middleware.d.ts +4 -0
  25. package/dist/src/api/middlewares/rate-limiter.middleware.d.ts.map +1 -0
  26. package/dist/src/api/middlewares/rate-limiter.middleware.js +26 -0
  27. package/dist/src/api/models/device.d.ts +4 -1
  28. package/dist/src/api/models/device.d.ts.map +1 -1
  29. package/dist/src/api/models/device.js +21 -14
  30. package/dist/src/api/models/email.d.ts +1 -2
  31. package/dist/src/api/models/email.d.ts.map +1 -1
  32. package/dist/src/api/models/email.js +9 -16
  33. package/dist/src/api/models/password.d.ts.map +1 -1
  34. package/dist/src/api/models/password.js +8 -1
  35. package/dist/src/api/models/session-admin.d.ts +1 -1
  36. package/dist/src/api/models/session-admin.d.ts.map +1 -1
  37. package/dist/src/api/models/session-admin.js +40 -16
  38. package/dist/src/api/models/session.d.ts +1 -1
  39. package/dist/src/api/models/session.d.ts.map +1 -1
  40. package/dist/src/api/models/session.js +28 -12
  41. package/dist/src/api/models/sso.js +1 -1
  42. package/dist/src/api/models/user/sign-up.d.ts +1 -1
  43. package/dist/src/api/models/user/sign-up.d.ts.map +1 -1
  44. package/dist/src/api/models/user/sign-up.js +2 -3
  45. package/dist/src/api/models/user.d.ts +1 -1
  46. package/dist/src/api/models/user.d.ts.map +1 -1
  47. package/dist/src/api/modules/admin/admin.module.d.ts +161 -8
  48. package/dist/src/api/modules/admin/admin.module.d.ts.map +1 -1
  49. package/dist/src/api/modules/admin/admin.module.js +3 -1
  50. package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +159 -0
  51. package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts.map +1 -0
  52. package/dist/src/api/modules/admin/debug/debug.admin.module.js +10 -0
  53. package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +160 -0
  54. package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts.map +1 -0
  55. package/dist/src/api/modules/admin/debug/routes/logs.route.js +70 -0
  56. package/dist/src/api/modules/admin/routes/session.route.d.ts +1 -5
  57. package/dist/src/api/modules/admin/routes/session.route.d.ts.map +1 -1
  58. package/dist/src/api/modules/admin/routes/session.route.js +0 -4
  59. package/dist/src/api/modules/admin/users/routes/list.route.d.ts +1 -1
  60. package/dist/src/api/modules/admin/users/routes/users.route.d.ts +1 -1
  61. package/dist/src/api/modules/admin/users/users.admin.module.d.ts +1 -1
  62. package/dist/src/api/modules/middleware/middleware.module.d.ts +1 -1
  63. package/dist/src/api/modules/middleware/route.d.ts +1 -1
  64. package/dist/src/api/modules/middleware/route.d.ts.map +1 -1
  65. package/dist/src/api/modules/middleware/route.js +2 -4
  66. package/dist/src/api/modules/users/routes/session.route.d.ts +1 -1
  67. package/dist/src/api/modules/users/routes/sign-in.route.d.ts +1 -1
  68. package/dist/src/api/modules/users/routes/sign-out.route.d.ts +1 -1
  69. package/dist/src/api/modules/users/routes/sign-up.route.d.ts +1 -1
  70. package/dist/src/api/modules/users/routes/test.route.d.ts +1 -1
  71. package/dist/src/api/modules/users/routes/test.route.d.ts.map +1 -1
  72. package/dist/src/api/modules/users/routes/test.route.js +8 -0
  73. package/dist/src/api/modules/users/sso/routes/callback.route.d.ts +1 -1
  74. package/dist/src/api/modules/users/sso/routes/create-url.route.d.ts +1 -1
  75. package/dist/src/api/modules/users/sso/sso.module.d.ts +2 -2
  76. package/dist/src/api/modules/users/users.module.d.ts +7 -7
  77. package/dist/src/app_admin/core/debug/page.d.ts +11 -0
  78. package/dist/src/app_admin/core/debug/page.d.ts.map +1 -0
  79. package/dist/src/app_admin/core/debug/page.js +44 -0
  80. package/dist/src/app_admin/core/users/page.d.ts +4 -1
  81. package/dist/src/app_admin/core/users/page.d.ts.map +1 -1
  82. package/dist/src/app_admin/core/users/page.js +3 -1
  83. package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts +15 -0
  84. package/dist/src/components/confirm-action/confirm-action-alert-dialog.d.ts.map +1 -0
  85. package/dist/src/components/confirm-action/confirm-action-alert-dialog.js +41 -0
  86. package/dist/src/components/confirm-action/content.d.ts +7 -0
  87. package/dist/src/components/confirm-action/content.d.ts.map +1 -0
  88. package/dist/src/components/confirm-action/content.js +31 -0
  89. package/dist/src/components/date-format.d.ts +2 -1
  90. package/dist/src/components/date-format.d.ts.map +1 -1
  91. package/dist/src/components/date-format.js +4 -1
  92. package/dist/src/components/switchers/langs/language-swietcher.d.ts +5 -0
  93. package/dist/src/components/switchers/langs/language-swietcher.d.ts.map +1 -0
  94. package/dist/src/components/switchers/langs/language-swietcher.js +45 -0
  95. package/dist/src/components/switchers/themes/theme-switcher.d.ts.map +1 -0
  96. package/dist/src/components/switchers/{theme-switcher.js → themes/theme-switcher.js} +1 -1
  97. package/dist/src/components/table/data-table.d.ts.map +1 -1
  98. package/dist/src/components/table/data-table.js +2 -7
  99. package/dist/src/components/ui/alert-dialog.d.ts +7 -2
  100. package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
  101. package/dist/src/components/ui/alert-dialog.js +39 -5
  102. package/dist/src/database/logs.d.ts +116 -0
  103. package/dist/src/database/logs.d.ts.map +1 -0
  104. package/dist/src/database/logs.js +18 -0
  105. package/dist/src/database/sessions.d.ts +19 -0
  106. package/dist/src/database/sessions.d.ts.map +1 -1
  107. package/dist/src/database/sessions.js +3 -0
  108. package/dist/src/lib/fetcher/core.d.ts +2 -1
  109. package/dist/src/lib/fetcher/core.d.ts.map +1 -1
  110. package/dist/src/lib/fetcher/core.js +2 -2
  111. package/dist/src/lib/fetcher-client.d.ts +2 -1
  112. package/dist/src/lib/fetcher-client.d.ts.map +1 -1
  113. package/dist/src/lib/fetcher-client.js +3 -2
  114. package/dist/src/lib/fetcher.d.ts +2 -1
  115. package/dist/src/lib/fetcher.d.ts.map +1 -1
  116. package/dist/src/lib/fetcher.js +2 -1
  117. package/dist/src/views/admin/layouts/admin-layout.d.ts.map +1 -1
  118. package/dist/src/views/admin/layouts/admin-layout.js +5 -1
  119. package/dist/src/views/admin/layouts/user-bar/client.d.ts.map +1 -1
  120. package/dist/src/views/admin/layouts/user-bar/client.js +26 -18
  121. package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.d.ts +2 -0
  122. package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.d.ts.map +1 -0
  123. package/dist/src/views/admin/views/core/debug/actions/clear-cache/clear-cache.js +35 -0
  124. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts +2 -0
  125. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.d.ts.map +1 -0
  126. package/dist/src/views/admin/views/core/debug/actions/clear-cache/mutation-api.js +5 -0
  127. package/dist/src/views/admin/views/core/debug/debug-admin-view.d.ts +4 -0
  128. package/dist/src/views/admin/views/core/debug/debug-admin-view.d.ts.map +1 -0
  129. package/dist/src/views/admin/views/core/debug/debug-admin-view.js +110 -0
  130. package/dist/src/views/auth/sso/buttons/sso-buttons.d.ts +1 -1
  131. package/dist/src/views/auth/sso/buttons/sso-buttons.d.ts.map +1 -1
  132. package/dist/src/views/auth/sso/buttons/sso-buttons.js +5 -2
  133. package/dist/src/views/layouts/theme/header/header.d.ts +4 -1
  134. package/dist/src/views/layouts/theme/header/header.d.ts.map +1 -1
  135. package/dist/src/views/layouts/theme/header/header.js +8 -4
  136. package/dist/src/views/layouts/theme/layout.d.ts +3 -1
  137. package/dist/src/views/layouts/theme/layout.d.ts.map +1 -1
  138. package/dist/src/views/layouts/theme/layout.js +4 -3
  139. package/dist/src/vitnode.config.d.ts +11 -5
  140. package/dist/src/vitnode.config.d.ts.map +1 -1
  141. package/dist/src/vitnode.config.js +2 -1
  142. package/dist/tsconfig.tsbuildinfo +1 -1
  143. package/package.json +39 -22
  144. package/src/app_admin/core/debug/page.tsx +43 -0
  145. package/src/app_admin/core/users/page.tsx +6 -1
  146. package/src/locales/en.json +35 -1
  147. package/src/vitnode.config.ts +16 -6
  148. package/dist/src/api/lib/get-user-ip.d.ts +0 -3
  149. package/dist/src/api/lib/get-user-ip.d.ts.map +0 -1
  150. package/dist/src/api/lib/get-user-ip.js +0 -8
  151. package/dist/src/api/middlewares/global/global.d.ts.map +0 -1
  152. package/dist/src/api/middlewares/global/global.js +0 -47
  153. package/dist/src/api/plugins/email/nodemailer.d.ts.map +0 -1
  154. package/dist/src/api/plugins/email/resend.d.ts.map +0 -1
  155. package/dist/src/api/plugins/sso/discord.d.ts.map +0 -1
  156. package/dist/src/api/plugins/sso/facebook.d.ts.map +0 -1
  157. package/dist/src/api/plugins/sso/google.d.ts.map +0 -1
  158. package/dist/src/components/switchers/theme-switcher.d.ts.map +0 -1
  159. /package/dist/src/api/{plugins → adapters}/sso/discord.d.ts +0 -0
  160. /package/dist/src/api/{plugins → adapters}/sso/discord.js +0 -0
  161. /package/dist/src/api/{plugins → adapters}/sso/facebook.d.ts +0 -0
  162. /package/dist/src/api/{plugins → adapters}/sso/facebook.js +0 -0
  163. /package/dist/src/api/{plugins → adapters}/sso/google.d.ts +0 -0
  164. /package/dist/src/api/{plugins → adapters}/sso/google.js +0 -0
  165. /package/dist/src/components/switchers/{theme-switcher.d.ts → themes/theme-switcher.d.ts} +0 -0
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { BrushCleaningIcon } from "lucide-react";
4
+ import { useTranslations } from "next-intl";
5
+ import { toast } from "sonner";
6
+ import { ConfirmActionAlertDialog } from "../../../../../../../components/confirm-action/confirm-action-alert-dialog.js";
7
+ import { Button } from "../../../../../../../components/ui/button.js";
8
+ import { clearCacheMutation } from "./mutation-api.js";
9
+ export const ClearCacheAction = ()=>{
10
+ const t = useTranslations('admin.debug.actions.clear_cache');
11
+ const tErrors = useTranslations('core.global.errors');
12
+ return /*#__PURE__*/ _jsx(ConfirmActionAlertDialog, {
13
+ description: t('desc'),
14
+ onSubmit: async ({ onClose })=>{
15
+ try {
16
+ await clearCacheMutation();
17
+ } catch {
18
+ toast.error(tErrors('title'), {
19
+ description: tErrors('internal_server_error')
20
+ });
21
+ return;
22
+ }
23
+ onClose();
24
+ toast.success(t('success'));
25
+ },
26
+ textSubmit: t('confirm'),
27
+ title: t('title'),
28
+ children: /*#__PURE__*/ _jsxs(Button, {
29
+ children: [
30
+ /*#__PURE__*/ _jsx(BrushCleaningIcon, {}),
31
+ t('label')
32
+ ]
33
+ })
34
+ });
35
+ };
@@ -0,0 +1,2 @@
1
+ export declare const clearCacheMutation: () => Promise<void>;
2
+ //# sourceMappingURL=mutation-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutation-api.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/views/admin/views/core/debug/actions/clear-cache/mutation-api.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,qBAE9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ 'use server';
2
+ import { revalidatePath } from "next/cache";
3
+ export const clearCacheMutation = async ()=>{
4
+ await Promise.resolve(revalidatePath('/', 'layout'));
5
+ };
@@ -0,0 +1,4 @@
1
+ export declare const DebugAdminView: ({ searchParams, }: {
2
+ searchParams: Promise<Record<string, string | string[] | undefined>>;
3
+ }) => Promise<import("react/jsx-runtime").JSX.Element>;
4
+ //# sourceMappingURL=debug-admin-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-admin-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/views/core/debug/debug-admin-view.tsx"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc,GAAU,mBAElC;IACD,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;CACtE,qDAwFA,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TriangleAlertIcon, XIcon } from "lucide-react";
3
+ import { getTranslations } from "next-intl/server";
4
+ import { debugAdminModule } from "../../../../../api/modules/admin/debug/debug.admin.module.js";
5
+ import { DateFormat } from "../../../../../components/date-format.js";
6
+ import { DataTable } from "../../../../../components/table/data-table.js";
7
+ import { Badge } from "../../../../../components/ui/badge.js";
8
+ import { fetcher } from "../../../../../lib/fetcher.js";
9
+ export const DebugAdminView = async ({ searchParams })=>{
10
+ const t = await getTranslations('admin.debug.logs');
11
+ const query = await searchParams;
12
+ const res = await fetcher(debugAdminModule, {
13
+ prefixPath: '/admin',
14
+ path: '/logs',
15
+ method: 'get',
16
+ module: 'debug',
17
+ args: {
18
+ query
19
+ },
20
+ withPagination: true
21
+ });
22
+ const data = await res.json();
23
+ return /*#__PURE__*/ _jsx(DataTable, {
24
+ columns: [
25
+ {
26
+ id: 'id',
27
+ label: t('id'),
28
+ className: 'w-24'
29
+ },
30
+ {
31
+ id: 'type',
32
+ label: t('type'),
33
+ className: 'w-48',
34
+ cell: ({ row })=>{
35
+ if (row.type === 'warn') {
36
+ return /*#__PURE__*/ _jsxs(Badge, {
37
+ className: "bg-warn/10 border-warn/50 text-warn",
38
+ children: [
39
+ /*#__PURE__*/ _jsx(TriangleAlertIcon, {}),
40
+ " ",
41
+ t(`types.${row.type}`)
42
+ ]
43
+ });
44
+ }
45
+ if (row.type === 'error') {
46
+ return /*#__PURE__*/ _jsxs(Badge, {
47
+ className: "bg-destructive/10 border-destructive/50 text-destructive",
48
+ children: [
49
+ /*#__PURE__*/ _jsx(XIcon, {}),
50
+ " ",
51
+ t(`types.${row.type}`)
52
+ ]
53
+ });
54
+ }
55
+ return /*#__PURE__*/ _jsx(Badge, {
56
+ children: t(`types.${row.type}`)
57
+ });
58
+ }
59
+ },
60
+ {
61
+ id: 'pluginId',
62
+ label: t('plugin'),
63
+ className: 'w-48'
64
+ },
65
+ {
66
+ id: 'createdAt',
67
+ label: t('created_at'),
68
+ cell: ({ row })=>/*#__PURE__*/ _jsx(DateFormat, {
69
+ date: row.createdAt,
70
+ showFullDate: true
71
+ })
72
+ },
73
+ {
74
+ id: 'content',
75
+ label: t('content'),
76
+ cell: ({ row })=>{
77
+ const CHARACTERS = 50;
78
+ const content = row.content;
79
+ const isLong = content.length > CHARACTERS;
80
+ const displayContent = isLong ? content.slice(0, CHARACTERS) + '...' : content;
81
+ return /*#__PURE__*/ _jsx("span", {
82
+ children: displayContent
83
+ });
84
+ }
85
+ },
86
+ {
87
+ id: 'actions',
88
+ label: '',
89
+ cell: ({ row })=>/*#__PURE__*/ _jsx("span", {
90
+ children: "actions"
91
+ })
92
+ }
93
+ ],
94
+ edges: data.edges.map((edge)=>({
95
+ ...edge
96
+ })),
97
+ order: {
98
+ columns: [
99
+ 'createdAt',
100
+ 'pluginId',
101
+ 'type'
102
+ ],
103
+ defaultOrder: {
104
+ column: 'createdAt',
105
+ order: 'desc'
106
+ }
107
+ },
108
+ pageInfo: data.pageInfo
109
+ });
110
+ };
@@ -1,3 +1,3 @@
1
1
  export declare const SSOButtonsSkeleton: () => import("react/jsx-runtime").JSX.Element;
2
- export declare const SSOButtons: () => Promise<import("react/jsx-runtime").JSX.Element>;
2
+ export declare const SSOButtons: () => Promise<import("react/jsx-runtime").JSX.Element | null>;
3
3
  //# sourceMappingURL=sso-buttons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sso-buttons.d.ts","sourceRoot":"","sources":["../../../../../../src/views/auth/sso/buttons/sso-buttons.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,+CAO9B,CAAC;AAEF,eAAO,MAAM,UAAU,wDAiCtB,CAAC"}
1
+ {"version":3,"file":"sso-buttons.d.ts","sourceRoot":"","sources":["../../../../../../src/views/auth/sso/buttons/sso-buttons.tsx"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,+CAO9B,CAAC;AAEF,eAAO,MAAM,UAAU,+DA+BtB,CAAC"}
@@ -21,6 +21,9 @@ export const SSOButtons = async ()=>{
21
21
  getTranslations('core.auth.sso'),
22
22
  getMiddlewareApi()
23
23
  ]);
24
+ if (!sso.length) {
25
+ return null;
26
+ }
24
27
  return /*#__PURE__*/ _jsxs(_Fragment, {
25
28
  children: [
26
29
  /*#__PURE__*/ _jsxs("div", {
@@ -32,7 +35,7 @@ export const SSOButtons = async ()=>{
32
35
  className: "w-full border-t"
33
36
  })
34
37
  }),
35
- sso.length > 0 && /*#__PURE__*/ _jsx("div", {
38
+ /*#__PURE__*/ _jsx("div", {
36
39
  className: "relative flex justify-center text-xs",
37
40
  children: /*#__PURE__*/ _jsx("span", {
38
41
  className: "bg-card text-muted-foreground px-4",
@@ -41,7 +44,7 @@ export const SSOButtons = async ()=>{
41
44
  })
42
45
  ]
43
46
  }),
44
- sso.length > 0 && /*#__PURE__*/ _jsx("div", {
47
+ /*#__PURE__*/ _jsx("div", {
45
48
  className: "flex flex-wrap items-center justify-center gap-4",
46
49
  children: sso.map((provider)=>/*#__PURE__*/ _jsx(ButtonSSOButtons, {
47
50
  providerId: provider.id,
@@ -1,4 +1,7 @@
1
- export declare const HeaderLayout: ({ logo, className, ...props }: React.ComponentProps<"header"> & {
1
+ import React from 'react';
2
+ import type { VitNodeConfig } from '../../../../vitnode.config';
3
+ export declare const HeaderLayout: ({ logo, className, vitNodeConfig, ...props }: React.ComponentProps<"header"> & {
2
4
  logo: React.ReactNode;
5
+ vitNodeConfig: VitNodeConfig;
3
6
  }) => import("react/jsx-runtime").JSX.Element;
4
7
  //# sourceMappingURL=header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../../src/views/layouts/theme/header/header.tsx"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,GAAI,+BAI1B,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,4CAuB5D,CAAC"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../../../../src/views/layouts/theme/header/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,eAAO,MAAM,YAAY,GAAI,8CAK1B,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAClC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;CAC9B,4CAwBA,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Suspense } from "react";
3
- import { ThemeSwitcher } from "../../../../components/switchers/theme-switcher.js";
2
+ import React from "react";
3
+ import { LanguageSwitcher } from "../../../../components/switchers/langs/language-swietcher.js";
4
+ import { ThemeSwitcher } from "../../../../components/switchers/themes/theme-switcher.js";
4
5
  import { Skeleton } from "../../../../components/ui/skeleton.js";
5
6
  import { Link } from "../../../../lib/navigation.js";
6
7
  import { cn } from "../../../../lib/utils.js";
7
8
  import { UserHeader } from "./user/user.js";
8
- export const HeaderLayout = ({ logo, className, ...props })=>{
9
+ export const HeaderLayout = ({ logo, className, vitNodeConfig, ...props })=>{
9
10
  return /*#__PURE__*/ _jsx("header", {
10
11
  className: cn('bg-card/75 sticky top-0 z-20 w-full border-b shadow-sm backdrop-blur', className),
11
12
  ...props,
@@ -20,8 +21,11 @@ export const HeaderLayout = ({ logo, className, ...props })=>{
20
21
  /*#__PURE__*/ _jsxs("div", {
21
22
  className: "ml-auto flex items-center gap-2",
22
23
  children: [
24
+ /*#__PURE__*/ _jsx(LanguageSwitcher, {
25
+ locales: vitNodeConfig.i18n.locales
26
+ }),
23
27
  /*#__PURE__*/ _jsx(ThemeSwitcher, {}),
24
- /*#__PURE__*/ _jsx(Suspense, {
28
+ /*#__PURE__*/ _jsx(React.Suspense, {
25
29
  fallback: /*#__PURE__*/ _jsx(Skeleton, {
26
30
  className: "h-9 w-32"
27
31
  }),
@@ -1,5 +1,7 @@
1
+ import type { VitNodeConfig } from '../../../vitnode.config';
1
2
  import { HeaderLayout } from './header/header';
2
- export declare const ThemeLayout: ({ children, logo, }: React.ComponentProps<typeof HeaderLayout> & {
3
+ export declare const ThemeLayout: ({ children, logo, vitNodeConfig, }: React.ComponentProps<typeof HeaderLayout> & {
3
4
  children: React.ReactNode;
5
+ vitNodeConfig: VitNodeConfig;
4
6
  }) => import("react/jsx-runtime").JSX.Element;
5
7
  //# sourceMappingURL=layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/views/layouts/theme/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,WAAW,GAAI,qBAGzB,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG;IAC7C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,4CAMA,CAAC"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/views/layouts/theme/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,WAAW,GAAI,oCAIzB,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG;IAC7C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;CAC9B,4CAOA,CAAC"}
@@ -1,12 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { HeaderLayout } from "./header/header.js";
3
- export const ThemeLayout = ({ children, logo })=>{
3
+ export const ThemeLayout = ({ children, logo, vitNodeConfig })=>{
4
4
  return /*#__PURE__*/ _jsxs(_Fragment, {
5
5
  children: [
6
6
  /*#__PURE__*/ _jsx(HeaderLayout, {
7
- logo: logo
7
+ logo: logo,
8
+ vitNodeConfig: vitNodeConfig
8
9
  }),
9
- " ",
10
+ ' ',
10
11
  /*#__PURE__*/ _jsx("main", {
11
12
  children: children
12
13
  })
@@ -1,16 +1,21 @@
1
1
  import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
2
2
  import type { ThemeProvider } from 'next-themes';
3
+ import type { IRateLimiterOptions } from 'rate-limiter-flexible';
3
4
  import type { BuildPluginApiReturn } from './api/lib/plugin';
4
5
  import type { EmailApiPlugin } from './api/models/email';
5
6
  import type { SSOApiPlugin } from './api/models/sso';
6
7
  import type { BuildPluginReturn } from './lib/plugin';
7
- export interface VitNodeConfig<AppLocales extends string[] = string[]> {
8
+ export interface LocaleConfig {
9
+ code: string;
10
+ name: string;
11
+ }
12
+ export interface VitNodeConfig<AppLocales extends LocaleConfig[] = LocaleConfig[]> {
8
13
  admin?: {
9
14
  sidebarCookieName?: string;
10
15
  };
11
16
  debug?: boolean;
12
17
  i18n: {
13
- defaultLocale: AppLocales[number];
18
+ defaultLocale: AppLocales[number]['code'];
14
19
  localePrefix?: 'always' | 'as-needed' | 'never';
15
20
  locales: AppLocales;
16
21
  timeZone?: string;
@@ -31,13 +36,14 @@ export interface VitNodeApiConfig {
31
36
  cookieSecure?: boolean;
32
37
  deviceCookieExpires?: number;
33
38
  deviceCookieName?: string;
34
- ssoPlugins?: SSOApiPlugin[];
39
+ ssoProviders?: SSOApiPlugin[];
35
40
  };
36
41
  dbProvider: PostgresJsDatabase;
37
- emailProvider?: EmailApiPlugin;
42
+ emailAdapter?: EmailApiPlugin;
38
43
  plugins: BuildPluginApiReturn[];
44
+ rateLimiter?: Omit<IRateLimiterOptions, 'keyPrefix'>;
39
45
  }
40
- export declare function buildConfig<AppLocales extends string[]>(args: VitNodeConfig<AppLocales>): VitNodeConfig<AppLocales>;
46
+ export declare function buildConfig<AppLocales extends LocaleConfig[]>(args: VitNodeConfig<AppLocales>): VitNodeConfig<AppLocales>;
41
47
  export declare function buildApiConfig(args: VitNodeApiConfig): VitNodeApiConfig;
42
48
  export declare const handleRequestConfig: ({ requestLocale, vitNodeConfig, pathToMessages, }: {
43
49
  pathToMessages: (path: string) => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"vitnode.config.d.ts","sourceRoot":"","sources":["../../src/vitnode.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,aAAa,CAAC,UAAU,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IACnE,KAAK,CAAC,EAAE;QACN,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE;QACJ,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;QAChD,OAAO,EAAE,UAAU,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,EAC1C,WAAW,GAAG,2BAA2B,GAAG,cAAc,CAC3D,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE;QACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;KAC7B,CAAC;IACF,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,wBAAgB,WAAW,CAAC,UAAU,SAAS,MAAM,EAAE,EACrD,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,aAAa,CAAC,UAAU,CAAC,CAQ3B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAED,eAAO,MAAM,mBAAmB,GAAU,mDAIvC;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,aAAa,EAAE,aAAa,CAAC;CAC9B;;;;;EAiCA,CAAC"}
1
+ {"version":3,"file":"vitnode.config.d.ts","sourceRoot":"","sources":["../../src/vitnode.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa,CAC5B,UAAU,SAAS,YAAY,EAAE,GAAG,YAAY,EAAE;IAElD,KAAK,CAAC,EAAE;QACN,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE;QACJ,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1C,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;QAChD,OAAO,EAAE,UAAU,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC,EAC1C,WAAW,GAAG,2BAA2B,GAAG,cAAc,CAC3D,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE;QACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;KAC/B,CAAC;IACF,UAAU,EAAE,kBAAkB,CAAC;IAC/B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;CACtD;AAED,wBAAgB,WAAW,CAAC,UAAU,SAAS,YAAY,EAAE,EAC3D,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,aAAa,CAAC,UAAU,CAAC,CAQ3B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,gBAAgB,CAEvE;AAED,eAAO,MAAM,mBAAmB,GAAU,mDAIvC;IACD,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,aAAa,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,aAAa,EAAE,aAAa,CAAC;CAC9B;;;;;EAkCA,CAAC"}
@@ -12,7 +12,8 @@ export function buildApiConfig(args) {
12
12
  }
13
13
  export const handleRequestConfig = async ({ requestLocale, vitNodeConfig, pathToMessages })=>{
14
14
  const reqLocale = await requestLocale;
15
- const locale = reqLocale && `${vitNodeConfig.i18n.locales}`.includes(reqLocale) ? reqLocale : vitNodeConfig.i18n.defaultLocale;
15
+ const localeCodes = vitNodeConfig.i18n.locales.map((locale)=>locale.code);
16
+ const locale = reqLocale && localeCodes.includes(reqLocale) ? reqLocale : vitNodeConfig.i18n.defaultLocale;
16
17
  const pluginIds = [
17
18
  '@vitnode/core',
18
19
  ...vitNodeConfig.plugins.map((plugin)=>plugin.pluginId)