@vitnode/core 1.2.0-canary.26 → 1.2.0-canary.27

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 (72) hide show
  1. package/dist/scripts/scripts.js +2 -2
  2. package/dist/scripts/shared/file-utils.d.ts.map +1 -1
  3. package/dist/src/api/config.d.ts.map +1 -1
  4. package/dist/src/api/config.js +2 -1
  5. package/dist/src/api/lib/route.d.ts +1 -0
  6. package/dist/src/api/lib/route.d.ts.map +1 -1
  7. package/dist/src/api/lib/route.js +4 -0
  8. package/dist/src/api/middlewares/captcha.middleware.d.ts +3 -0
  9. package/dist/src/api/middlewares/captcha.middleware.d.ts.map +1 -0
  10. package/dist/src/api/middlewares/captcha.middleware.js +58 -0
  11. package/dist/src/api/middlewares/global.middleware.d.ts +3 -2
  12. package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
  13. package/dist/src/api/middlewares/global.middleware.js +4 -3
  14. package/dist/src/api/models/sso.js +1 -1
  15. package/dist/src/api/modules/admin/admin.module.d.ts +4 -4
  16. package/dist/src/api/modules/admin/debug/debug.admin.module.d.ts +4 -4
  17. package/dist/src/api/modules/admin/debug/routes/logs.route.d.ts +4 -4
  18. package/dist/src/api/modules/middleware/middleware.module.d.ts +22 -0
  19. package/dist/src/api/modules/middleware/middleware.module.d.ts.map +1 -1
  20. package/dist/src/api/modules/middleware/route.d.ts +65 -0
  21. package/dist/src/api/modules/middleware/route.d.ts.map +1 -1
  22. package/dist/src/api/modules/middleware/route.js +22 -10
  23. package/dist/src/api/modules/users/routes/sign-in.route.d.ts +2 -2
  24. package/dist/src/api/modules/users/routes/sign-up.route.d.ts +1 -0
  25. package/dist/src/api/modules/users/routes/sign-up.route.d.ts.map +1 -1
  26. package/dist/src/api/modules/users/routes/sign-up.route.js +1 -0
  27. package/dist/src/api/modules/users/sso/routes/callback.route.d.ts +2 -2
  28. package/dist/src/api/modules/users/sso/sso.module.d.ts +2 -2
  29. package/dist/src/api/modules/users/users.module.d.ts +5 -4
  30. package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
  31. package/dist/src/components/form/auto-form.d.ts +7 -2
  32. package/dist/src/components/form/auto-form.d.ts.map +1 -1
  33. package/dist/src/components/form/auto-form.js +13 -3
  34. package/dist/src/hooks/use-captcha.d.ts +8 -0
  35. package/dist/src/hooks/use-captcha.d.ts.map +1 -0
  36. package/dist/src/hooks/use-captcha.js +94 -0
  37. package/dist/src/lib/api/get-middleware-api.d.ts +4 -0
  38. package/dist/src/lib/api/get-middleware-api.d.ts.map +1 -1
  39. package/dist/src/lib/fetcher-client.d.ts +2 -1
  40. package/dist/src/lib/fetcher-client.d.ts.map +1 -1
  41. package/dist/src/lib/fetcher-client.js +7 -2
  42. package/dist/src/lib/fetcher.d.ts +2 -1
  43. package/dist/src/lib/fetcher.d.ts.map +1 -1
  44. package/dist/src/lib/fetcher.js +10 -6
  45. package/dist/src/views/admin/layouts/sidebar/nav/item.d.ts.map +1 -1
  46. package/dist/src/views/admin/layouts/sidebar/nav/item.js +0 -2
  47. package/dist/src/views/admin/layouts/sidebar/sidebar.js +0 -1
  48. package/dist/src/views/admin/views/core/debug/system-logs/system-logs-view.d.ts +1 -1
  49. package/dist/src/views/auth/sign-in/form/use-form.d.ts +3 -2
  50. package/dist/src/views/auth/sign-in/form/use-form.d.ts.map +1 -1
  51. package/dist/src/views/auth/sign-up/form/form.d.ts +4 -1
  52. package/dist/src/views/auth/sign-up/form/form.d.ts.map +1 -1
  53. package/dist/src/views/auth/sign-up/form/form.js +2 -1
  54. package/dist/src/views/auth/sign-up/form/mutation-api.d.ts +3 -1
  55. package/dist/src/views/auth/sign-up/form/mutation-api.d.ts.map +1 -1
  56. package/dist/src/views/auth/sign-up/form/mutation-api.js +2 -1
  57. package/dist/src/views/auth/sign-up/form/use-form.d.ts +3 -21
  58. package/dist/src/views/auth/sign-up/form/use-form.d.ts.map +1 -1
  59. package/dist/src/views/auth/sign-up/form/use-form.js +5 -2
  60. package/dist/src/views/auth/sign-up/sign-up-view.js +2 -1
  61. package/dist/src/views/layouts/root-layout.d.ts +1 -3
  62. package/dist/src/views/layouts/root-layout.d.ts.map +1 -1
  63. package/dist/src/views/layouts/root-layout.js +9 -21
  64. package/dist/src/views/layouts/theme/header/header.d.ts.map +1 -1
  65. package/dist/src/views/layouts/theme/header/header.js +0 -1
  66. package/dist/src/views/layouts/theme/header/user/user.d.ts.map +1 -1
  67. package/dist/src/views/layouts/theme/header/user/user.js +0 -2
  68. package/dist/src/vitnode.config.d.ts +6 -1
  69. package/dist/src/vitnode.config.d.ts.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +2 -2
  72. package/src/locales/en.json +1 -0
@@ -5,6 +5,10 @@ export declare const middlewareModule: import("../../../api/lib/module").BuildMo
5
5
  id: string;
6
6
  name: string;
7
7
  }[];
8
+ captcha: {
9
+ siteKey: string;
10
+ type: "cloudflare_turnstile" | "recaptcha_v3";
11
+ } | undefined;
8
12
  }, 200, "json">;
9
13
  pluginId: "@vitnode/core";
10
14
  route: {
@@ -27,18 +31,36 @@ export declare const middlewareModule: import("../../../api/lib/module").BuildMo
27
31
  name: string;
28
32
  }>, "many">;
29
33
  isEmail: import("zod").ZodBoolean;
34
+ captcha: import("zod").ZodOptional<import("zod").ZodObject<{
35
+ siteKey: import("zod").ZodString;
36
+ type: import("zod").ZodEnum<["cloudflare_turnstile", "recaptcha_v3"]>;
37
+ }, "strip", import("zod").ZodTypeAny, {
38
+ type: "cloudflare_turnstile" | "recaptcha_v3";
39
+ siteKey: string;
40
+ }, {
41
+ type: "cloudflare_turnstile" | "recaptcha_v3";
42
+ siteKey: string;
43
+ }>>;
30
44
  }, "strip", import("zod").ZodTypeAny, {
31
45
  sso: {
32
46
  id: string;
33
47
  name: string;
34
48
  }[];
35
49
  isEmail: boolean;
50
+ captcha?: {
51
+ type: "cloudflare_turnstile" | "recaptcha_v3";
52
+ siteKey: string;
53
+ } | undefined;
36
54
  }, {
37
55
  sso: {
38
56
  id: string;
39
57
  name: string;
40
58
  }[];
41
59
  isEmail: boolean;
60
+ captcha?: {
61
+ type: "cloudflare_turnstile" | "recaptcha_v3";
62
+ siteKey: string;
63
+ } | undefined;
42
64
  }>;
43
65
  };
44
66
  };
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/middleware/middleware.module.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gQAI3B,CAAC"}
1
+ {"version":3,"file":"middleware.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/middleware/middleware.module.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gQAI3B,CAAC"}
@@ -1,4 +1,47 @@
1
1
  import { z } from 'zod';
2
+ export declare const routeMiddlewareSchema: z.ZodObject<{
3
+ sso: z.ZodArray<z.ZodObject<{
4
+ id: z.ZodString;
5
+ name: z.ZodString;
6
+ }, "strip", z.ZodTypeAny, {
7
+ id: string;
8
+ name: string;
9
+ }, {
10
+ id: string;
11
+ name: string;
12
+ }>, "many">;
13
+ isEmail: z.ZodBoolean;
14
+ captcha: z.ZodOptional<z.ZodObject<{
15
+ siteKey: z.ZodString;
16
+ type: z.ZodEnum<["cloudflare_turnstile", "recaptcha_v3"]>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ type: "cloudflare_turnstile" | "recaptcha_v3";
19
+ siteKey: string;
20
+ }, {
21
+ type: "cloudflare_turnstile" | "recaptcha_v3";
22
+ siteKey: string;
23
+ }>>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ sso: {
26
+ id: string;
27
+ name: string;
28
+ }[];
29
+ isEmail: boolean;
30
+ captcha?: {
31
+ type: "cloudflare_turnstile" | "recaptcha_v3";
32
+ siteKey: string;
33
+ } | undefined;
34
+ }, {
35
+ sso: {
36
+ id: string;
37
+ name: string;
38
+ }[];
39
+ isEmail: boolean;
40
+ captcha?: {
41
+ type: "cloudflare_turnstile" | "recaptcha_v3";
42
+ siteKey: string;
43
+ } | undefined;
44
+ }>;
2
45
  export declare const routeMiddleware: {
3
46
  handler: (c: import("hono").Context<import("../../middlewares/global.middleware").EnvVitNode, "/", {}>) => Response & import("hono").TypedResponse<{
4
47
  isEmail: boolean;
@@ -6,6 +49,10 @@ export declare const routeMiddleware: {
6
49
  id: string;
7
50
  name: string;
8
51
  }[];
52
+ captcha: {
53
+ siteKey: string;
54
+ type: "cloudflare_turnstile" | "recaptcha_v3";
55
+ } | undefined;
9
56
  }, 200, "json">;
10
57
  pluginId: "@vitnode/core";
11
58
  route: {
@@ -28,18 +75,36 @@ export declare const routeMiddleware: {
28
75
  name: string;
29
76
  }>, "many">;
30
77
  isEmail: z.ZodBoolean;
78
+ captcha: z.ZodOptional<z.ZodObject<{
79
+ siteKey: z.ZodString;
80
+ type: z.ZodEnum<["cloudflare_turnstile", "recaptcha_v3"]>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ type: "cloudflare_turnstile" | "recaptcha_v3";
83
+ siteKey: string;
84
+ }, {
85
+ type: "cloudflare_turnstile" | "recaptcha_v3";
86
+ siteKey: string;
87
+ }>>;
31
88
  }, "strip", z.ZodTypeAny, {
32
89
  sso: {
33
90
  id: string;
34
91
  name: string;
35
92
  }[];
36
93
  isEmail: boolean;
94
+ captcha?: {
95
+ type: "cloudflare_turnstile" | "recaptcha_v3";
96
+ siteKey: string;
97
+ } | undefined;
37
98
  }, {
38
99
  sso: {
39
100
  id: string;
40
101
  name: string;
41
102
  }[];
42
103
  isEmail: boolean;
104
+ captcha?: {
105
+ type: "cloudflare_turnstile" | "recaptcha_v3";
106
+ siteKey: string;
107
+ } | undefined;
43
108
  }>;
44
109
  };
45
110
  };
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/middleware/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B1B,CAAC"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/middleware/route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAShC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkC1B,CAAC"}
@@ -1,6 +1,20 @@
1
1
  import { z } from "zod";
2
2
  import { buildRoute } from "../../lib/route.js";
3
3
  import { CONFIG_PLUGIN } from "../../../config.js";
4
+ export const routeMiddlewareSchema = z.object({
5
+ sso: z.array(z.object({
6
+ id: z.string(),
7
+ name: z.string()
8
+ })),
9
+ isEmail: z.boolean(),
10
+ captcha: z.object({
11
+ siteKey: z.string(),
12
+ type: z.enum([
13
+ 'cloudflare_turnstile',
14
+ 'recaptcha_v3'
15
+ ])
16
+ }).optional()
17
+ });
4
18
  export const routeMiddleware = buildRoute({
5
19
  ...CONFIG_PLUGIN,
6
20
  route: {
@@ -11,13 +25,7 @@ export const routeMiddleware = buildRoute({
11
25
  200: {
12
26
  content: {
13
27
  'application/json': {
14
- schema: z.object({
15
- sso: z.array(z.object({
16
- id: z.string(),
17
- name: z.string()
18
- })),
19
- isEmail: z.boolean()
20
- })
28
+ schema: routeMiddlewareSchema
21
29
  }
22
30
  },
23
31
  description: 'Middleware route'
@@ -25,13 +33,17 @@ export const routeMiddleware = buildRoute({
25
33
  }
26
34
  },
27
35
  handler: (c)=>{
28
- const sso = c.get('core').authorization.ssoProviders;
36
+ const sso = c.get('core').authorization.ssoAdapters;
29
37
  return c.json({
30
38
  isEmail: !!c.get('core').emailAdapter,
31
39
  sso: sso.map((s)=>({
32
40
  id: s.id,
33
41
  name: s.name
34
- }))
35
- });
42
+ })),
43
+ captcha: c.get('core').captcha ? {
44
+ siteKey: c.get('core').captcha?.siteKey ?? '',
45
+ type: c.get('core').captcha?.type ?? 'cloudflare_turnstile'
46
+ } : undefined
47
+ }, 200);
36
48
  }
37
49
  });
@@ -70,11 +70,11 @@ export declare const signInRoute: {
70
70
  id: z.ZodNumber;
71
71
  token: z.ZodString;
72
72
  }, "strip", z.ZodTypeAny, {
73
- id: number;
74
73
  token: string;
75
- }, {
76
74
  id: number;
75
+ }, {
77
76
  token: string;
77
+ id: number;
78
78
  }>;
79
79
  };
80
80
  };
@@ -43,6 +43,7 @@ export declare const signUpRoute: {
43
43
  method: "post";
44
44
  description: string;
45
45
  path: "/sign_up";
46
+ withCaptcha: true;
46
47
  request: {
47
48
  body: {
48
49
  required: true;
@@ -1 +1 @@
1
- {"version":3,"file":"sign-up.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/sign-up.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAe1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDtB,CAAC"}
1
+ {"version":3,"file":"sign-up.route.d.ts","sourceRoot":"","sources":["../../../../../../src/api/modules/users/routes/sign-up.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAe1B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDtB,CAAC"}
@@ -25,6 +25,7 @@ export const signUpRoute = buildRoute({
25
25
  method: 'post',
26
26
  description: 'Create a new user',
27
27
  path: '/sign_up',
28
+ withCaptcha: true,
28
29
  request: {
29
30
  body: {
30
31
  required: true,
@@ -60,11 +60,11 @@ export declare const callbackRoute: {
60
60
  id: z.ZodNumber;
61
61
  token: z.ZodString;
62
62
  }, "strip", z.ZodTypeAny, {
63
- id: number;
64
63
  token: string;
65
- }, {
66
64
  id: number;
65
+ }, {
67
66
  token: string;
67
+ id: number;
68
68
  }>;
69
69
  };
70
70
  };
@@ -59,11 +59,11 @@ export declare const ssoUserModule: import("../../../../api/lib/module").BuildMo
59
59
  id: import("zod").ZodNumber;
60
60
  token: import("zod").ZodString;
61
61
  }, "strip", import("zod").ZodTypeAny, {
62
- id: number;
63
62
  token: string;
64
- }, {
65
63
  id: number;
64
+ }, {
66
65
  token: string;
66
+ id: number;
67
67
  }>;
68
68
  };
69
69
  };
@@ -156,11 +156,11 @@ export declare const usersModule: import("../../../api/lib/module").BuildModuleR
156
156
  id: import("zod").ZodNumber;
157
157
  token: import("zod").ZodString;
158
158
  }, "strip", import("zod").ZodTypeAny, {
159
- id: number;
160
159
  token: string;
161
- }, {
162
160
  id: number;
161
+ }, {
163
162
  token: string;
163
+ id: number;
164
164
  }>;
165
165
  };
166
166
  };
@@ -242,6 +242,7 @@ export declare const usersModule: import("../../../api/lib/module").BuildModuleR
242
242
  method: "post";
243
243
  description: string;
244
244
  path: "/sign_up";
245
+ withCaptcha: true;
245
246
  request: {
246
247
  body: {
247
248
  required: true;
@@ -381,11 +382,11 @@ export declare const usersModule: import("../../../api/lib/module").BuildModuleR
381
382
  id: import("zod").ZodNumber;
382
383
  token: import("zod").ZodString;
383
384
  }, "strip", import("zod").ZodTypeAny, {
384
- id: number;
385
385
  token: string;
386
- }, {
387
386
  id: number;
387
+ }, {
388
388
  token: string;
389
+ id: number;
389
390
  }>;
390
391
  };
391
392
  };
@@ -1 +1 @@
1
- {"version":3,"file":"users.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/users/users.module.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mQAKtB,CAAC"}
1
+ {"version":3,"file":"users.module.d.ts","sourceRoot":"","sources":["../../../../../src/api/modules/users/users.module.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mQAKtB,CAAC"}
@@ -1,12 +1,17 @@
1
1
  import type { Mode, UseFormReturn } from 'react-hook-form';
2
2
  import type { z } from 'zod';
3
+ import type { routeMiddlewareSchema } from '../../api/modules/middleware/route';
3
4
  import type { ItemAutoFormProps } from './fields/item';
4
5
  import { Button } from '../ui/button';
5
- export declare function AutoForm<T extends z.ZodEffects<z.ZodObject<z.ZodRawShape>> | z.ZodObject<z.ZodRawShape>, TContext = unknown>({ formSchema, onSubmit: onSubmitProp, fields, submitButtonProps, mode, ...props }: Omit<React.ComponentProps<'form'>, 'onSubmit'> & {
6
+ export type AutoFormOnSubmit<T extends z.ZodTypeAny> = (values: z.infer<T>, form: UseFormReturn<z.infer<T>>, options: {
7
+ captchaToken: string;
8
+ }) => Promise<void> | void;
9
+ export declare function AutoForm<T extends z.ZodEffects<z.ZodObject<z.ZodRawShape>> | z.ZodObject<z.ZodRawShape>, TContext = unknown>({ formSchema, onSubmit: onSubmitProp, fields, submitButtonProps, mode, captcha, ...props }: Omit<React.ComponentProps<'form'>, 'onSubmit'> & {
10
+ captcha?: z.infer<typeof routeMiddlewareSchema>['captcha'];
6
11
  fields: ItemAutoFormProps<T>[];
7
12
  formSchema: T;
8
13
  mode?: Mode;
9
- onSubmit?: (values: z.infer<T>, form: UseFormReturn<z.infer<T>>) => Promise<void> | void;
14
+ onSubmit?: AutoFormOnSubmit<T>;
10
15
  submitButtonProps?: Omit<React.ComponentProps<typeof Button>, 'isLoading' | 'type'>;
11
16
  }): import("react/jsx-runtime").JSX.Element;
12
17
  //# sourceMappingURL=auto-form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-form.d.ts","sourceRoot":"","sources":["../../../../src/components/form/auto-form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,IAAI,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQ7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC,wBAAgB,QAAQ,CACtB,CAAC,SACG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GACxC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAC9B,QAAQ,GAAG,OAAO,EAClB,EACA,UAAU,EACV,QAAQ,EAAE,YAAY,EACtB,MAAM,EACN,iBAAiB,EACjB,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,IAAI,CACtB,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,WAAW,GAAG,MAAM,CACrB,CAAC;CACH,2CAgDA"}
1
+ {"version":3,"file":"auto-form.d.ts","sourceRoot":"","sources":["../../../../src/components/form/auto-form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,IAAI,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQ7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CACrD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC/B,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAC;CACtB,KACE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,wBAAgB,QAAQ,CACtB,CAAC,SACG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GACxC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAC9B,QAAQ,GAAG,OAAO,EAClB,EACA,UAAU,EACV,QAAQ,EAAE,YAAY,EACtB,MAAM,EACN,iBAAiB,EACjB,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC/B,iBAAiB,CAAC,EAAE,IAAI,CACtB,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,WAAW,GAAG,MAAM,CACrB,CAAC;CACH,2CAgEA"}
@@ -4,11 +4,13 @@ import { zodResolver } from "@hookform/resolvers/zod";
4
4
  import { useTranslations } from "next-intl";
5
5
  import { useForm } from "react-hook-form";
6
6
  import { getDefaultValues, getObjectFormSchema } from "../../lib/helpers/auto-form.js";
7
+ import { useCaptcha } from "../../hooks/use-captcha.js";
7
8
  import { Button } from "../ui/button.js";
8
9
  import { DialogClose, DialogFooter, useDialog } from "../ui/dialog.js";
9
10
  import { Form } from "../ui/form.js";
10
11
  import { ItemAutoForm } from "./fields/item.js";
11
- export function AutoForm({ formSchema, onSubmit: onSubmitProp, fields, submitButtonProps, mode, ...props }) {
12
+ export function AutoForm({ formSchema, onSubmit: onSubmitProp, fields, submitButtonProps, mode, captcha, ...props }) {
13
+ const { isReady, getToken: getTokenCaptcha, onReset: onResetCaptcha } = useCaptcha(captcha);
12
14
  const { setIsDirty } = useDialog();
13
15
  const objectFormSchema = getObjectFormSchema(formSchema);
14
16
  const defaultValues = getDefaultValues(objectFormSchema);
@@ -21,11 +23,16 @@ export function AutoForm({ formSchema, onSubmit: onSubmitProp, fields, submitBut
21
23
  const onSubmit = async (values)=>{
22
24
  const parsedValues = formSchema.safeParse(values);
23
25
  if (parsedValues.success) {
24
- await onSubmitProp?.(parsedValues.data, form);
26
+ await onSubmitProp?.(parsedValues.data, form, {
27
+ captchaToken: captcha ? await getTokenCaptcha() : ''
28
+ });
29
+ if (captcha) {
30
+ onResetCaptcha();
31
+ }
25
32
  }
26
33
  };
27
34
  const submitButton = /*#__PURE__*/ _jsx(Button, {
28
- disabled: !form.formState.isValid || form.formState.isSubmitting,
35
+ disabled: !form.formState.isValid || form.formState.isSubmitting || captcha && !isReady,
29
36
  isLoading: form.formState.isSubmitting,
30
37
  ...submitButtonProps,
31
38
  type: "submit",
@@ -40,6 +47,9 @@ export function AutoForm({ formSchema, onSubmit: onSubmitProp, fields, submitBut
40
47
  formSchema: formSchema,
41
48
  ...field
42
49
  }, field.id)),
50
+ captcha && /*#__PURE__*/ _jsx("div", {
51
+ id: "vitnode_captcha"
52
+ }),
43
53
  setIsDirty ? /*#__PURE__*/ _jsxs(DialogFooter, {
44
54
  children: [
45
55
  /*#__PURE__*/ _jsx(DialogClose, {
@@ -0,0 +1,8 @@
1
+ import type { z } from 'zod';
2
+ import type { routeMiddlewareSchema } from '../api/modules/middleware/route';
3
+ export declare const useCaptcha: (captcha: z.infer<typeof routeMiddlewareSchema>["captcha"]) => {
4
+ isReady: boolean;
5
+ onReset: () => void;
6
+ getToken: () => Promise<string>;
7
+ };
8
+ //# sourceMappingURL=use-captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-captcha.d.ts","sourceRoot":"","sources":["../../../src/hooks/use-captcha.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAO7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,eAAO,MAAM,UAAU,GACrB,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,SAAS,CAAC;;;oBA0E9B,OAAO,CAAC,MAAM,CAAC;CAkC3C,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { useLocale, useTranslations } from "next-intl";
2
+ import { useTheme } from "next-themes";
3
+ import React from "react";
4
+ import { toast } from "sonner";
5
+ export const useCaptcha = (captcha)=>{
6
+ const t = useTranslations('core.global.errors');
7
+ const locale = useLocale();
8
+ const { resolvedTheme } = useTheme();
9
+ const [isReady, setIsReady] = React.useState(false);
10
+ const [token, setToken] = React.useState('');
11
+ const handleLoaded = ()=>{
12
+ if (!captcha) return;
13
+ const elementId = 'vitnode_captcha';
14
+ if (captcha.type === 'cloudflare_turnstile') {
15
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
16
+ // @ts-ignore
17
+ window.turnstile.render(`#${elementId}`, {
18
+ sitekey: captcha.siteKey,
19
+ theme: resolvedTheme,
20
+ language: locale,
21
+ callback: (token)=>{
22
+ setToken(token);
23
+ }
24
+ });
25
+ }
26
+ setIsReady(true);
27
+ };
28
+ const handleError = ()=>{
29
+ toast.error(t('title'), {
30
+ description: t('captcha_internal_error')
31
+ });
32
+ };
33
+ React.useEffect(()=>{
34
+ if (!captcha) return;
35
+ const googleCaptchaDomain = `https://www.google.com/recaptcha/api.js?hl=${locale}`;
36
+ // Load script
37
+ const script = document.createElement('script');
38
+ if (captcha.type === 'cloudflare_turnstile') {
39
+ script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
40
+ } else if (captcha.type === 'recaptcha_v3') {
41
+ script.src = `${googleCaptchaDomain}&render=${captcha.siteKey}`;
42
+ }
43
+ if (!script.src) return;
44
+ document.body.appendChild(script);
45
+ script.addEventListener('load', handleLoaded);
46
+ script.addEventListener('error', handleError);
47
+ return ()=>{
48
+ script.removeEventListener('load', handleLoaded);
49
+ script.removeEventListener('error', handleError);
50
+ document.body.removeChild(script);
51
+ };
52
+ // eslint-disable-next-line react-compiler/react-compiler
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ }, []);
55
+ const onReset = ()=>{
56
+ if (!captcha) return;
57
+ if (captcha.type === 'cloudflare_turnstile') {
58
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
59
+ // @ts-ignore
60
+ window.turnstile.reset();
61
+ }
62
+ setToken('');
63
+ };
64
+ const getToken = async ()=>{
65
+ if (!captcha) return '';
66
+ if (captcha.type === 'recaptcha_v3') {
67
+ // Captcha
68
+ return new Promise((resolve)=>{
69
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
70
+ // @ts-ignore
71
+ window.grecaptcha.ready(async ()=>{
72
+ try {
73
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
74
+ // @ts-ignore
75
+ const token = await window.grecaptcha.execute(captcha.siteKey, {
76
+ action: 'submit'
77
+ });
78
+ resolve(token);
79
+ } catch (error) {
80
+ // eslint-disable-next-line no-console
81
+ console.error('Captcha error', error);
82
+ }
83
+ resolve('');
84
+ });
85
+ });
86
+ }
87
+ return token;
88
+ };
89
+ return {
90
+ isReady,
91
+ onReset,
92
+ getToken
93
+ };
94
+ };
@@ -4,5 +4,9 @@ export declare const getMiddlewareApi: () => Promise<{
4
4
  name: string;
5
5
  }[];
6
6
  isEmail: boolean;
7
+ captcha?: {
8
+ type: "cloudflare_turnstile" | "recaptcha_v3";
9
+ siteKey: string;
10
+ } | undefined;
7
11
  }>;
8
12
  //# sourceMappingURL=get-middleware-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-middleware-api.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/get-middleware-api.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;EAW5B,CAAC"}
1
+ {"version":3,"file":"get-middleware-api.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/get-middleware-api.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;EAW5B,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { BaseBuildModuleReturn, BuildModuleReturn } from '../api/lib/module';
2
2
  import type { Route } from '../api/lib/route';
3
3
  import type { FetcherParams, GetModulePaths, GetValidMethodForPath, GetValidPathsForModule, InferResponseType } from './fetcher/types';
4
- export declare function fetcherClient<M extends string, Routes extends Route[], Modules extends BaseBuildModuleReturn[], ModuleName extends GetModulePaths<M, Modules>, SelectedPath extends GetValidPathsForModule<ModuleName, M, Routes, Modules>, Method extends GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules> = GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules>>(moduleReturn: BuildModuleReturn<string, M, Routes, Modules>, { path, method, module, args, options, withPagination, prefixPath, }: FetcherParams<M, Routes, Modules, ModuleName, SelectedPath, Method> & {
4
+ export declare function fetcherClient<M extends string, Routes extends Route[], Modules extends BaseBuildModuleReturn[], ModuleName extends GetModulePaths<M, Modules>, SelectedPath extends GetValidPathsForModule<ModuleName, M, Routes, Modules>, Method extends GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules> = GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules>>(moduleReturn: BuildModuleReturn<string, M, Routes, Modules>, { path, method, module, args, options, withPagination, prefixPath, captchaToken, }: FetcherParams<M, Routes, Modules, ModuleName, SelectedPath, Method> & {
5
+ captchaToken?: string;
5
6
  options?: Omit<RequestInit, 'body'>;
6
7
  prefixPath?: string;
7
8
  withPagination?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher-client.d.ts","sourceRoot":"","sources":["../../../src/lib/fetcher-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAIzB,wBAAsB,aAAa,CACjC,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,KAAK,EAAE,EACtB,OAAO,SAAS,qBAAqB,EAAE,EACvC,UAAU,SAAS,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,SAAS,sBAAsB,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3E,MAAM,SAAS,qBAAqB,CAClC,UAAU,EACV,YAAY,EACZ,CAAC,EACD,MAAM,EACN,OAAO,CACR,GAAG,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAEvE,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3D,EACE,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,cAAsB,EACtB,UAAe,GAChB,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG;IACvE,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CACR,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CACxE,CAUA"}
1
+ {"version":3,"file":"fetcher-client.d.ts","sourceRoot":"","sources":["../../../src/lib/fetcher-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAIzB,wBAAsB,aAAa,CACjC,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,KAAK,EAAE,EACtB,OAAO,SAAS,qBAAqB,EAAE,EACvC,UAAU,SAAS,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,SAAS,sBAAsB,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3E,MAAM,SAAS,qBAAqB,CAClC,UAAU,EACV,YAAY,EACZ,CAAC,EACD,MAAM,EACN,OAAO,CACR,GAAG,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAEvE,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3D,EACE,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,cAAsB,EACtB,UAAe,EACf,YAAY,GACb,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CACR,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CACxE,CAiBA"}
@@ -1,5 +1,9 @@
1
1
  import { coreFetcher } from "./fetcher/core.js";
2
- export async function fetcherClient(moduleReturn, { path, method, module, args, options, withPagination = false, prefixPath = '' }) {
2
+ export async function fetcherClient(moduleReturn, { path, method, module, args, options, withPagination = false, prefixPath = '', captchaToken }) {
3
+ const additionalHeaders = {};
4
+ if (captchaToken) {
5
+ additionalHeaders['x-vitnode-captcha-token'] = captchaToken;
6
+ }
3
7
  return coreFetcher(moduleReturn, {
4
8
  path,
5
9
  method,
@@ -7,6 +11,7 @@ export async function fetcherClient(moduleReturn, { path, method, module, args,
7
11
  args,
8
12
  options,
9
13
  withPagination,
10
- prefixPath
14
+ prefixPath,
15
+ additionalHeaders
11
16
  });
12
17
  }
@@ -2,8 +2,9 @@ import 'server-only';
2
2
  import type { BaseBuildModuleReturn, BuildModuleReturn } from '../api/lib/module';
3
3
  import type { Route } from '../api/lib/route';
4
4
  import type { FetcherParams, GetModulePaths, GetValidMethodForPath, GetValidPathsForModule, InferResponseType } from './fetcher/types';
5
- export declare function fetcher<M extends string, Routes extends Route[], Modules extends BaseBuildModuleReturn[], ModuleName extends GetModulePaths<M, Modules>, SelectedPath extends GetValidPathsForModule<ModuleName, M, Routes, Modules>, Method extends GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules> = GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules>>(moduleReturn: BuildModuleReturn<string, M, Routes, Modules>, { path, method, module, args, options, allowSaveCookies, withPagination, prefixPath, }: FetcherParams<M, Routes, Modules, ModuleName, SelectedPath, Method> & {
5
+ export declare function fetcher<M extends string, Routes extends Route[], Modules extends BaseBuildModuleReturn[], ModuleName extends GetModulePaths<M, Modules>, SelectedPath extends GetValidPathsForModule<ModuleName, M, Routes, Modules>, Method extends GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules> = GetValidMethodForPath<ModuleName, SelectedPath, M, Routes, Modules>>(moduleReturn: BuildModuleReturn<string, M, Routes, Modules>, { path, method, module, args, options, allowSaveCookies, withPagination, prefixPath, captchaToken, }: FetcherParams<M, Routes, Modules, ModuleName, SelectedPath, Method> & {
6
6
  allowSaveCookies?: boolean;
7
+ captchaToken?: string;
7
8
  options?: Omit<RequestInit, 'body'>;
8
9
  prefixPath?: string;
9
10
  withPagination?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/lib/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAKzB,wBAAsB,OAAO,CAC3B,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,KAAK,EAAE,EACtB,OAAO,SAAS,qBAAqB,EAAE,EACvC,UAAU,SAAS,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,SAAS,sBAAsB,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3E,MAAM,SAAS,qBAAqB,CAClC,UAAU,EACV,YAAY,EACZ,CAAC,EACD,MAAM,EACN,OAAO,CACR,GAAG,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAEvE,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3D,EACE,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,gBAAwB,EACxB,cAAsB,EACtB,UAAe,GAChB,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CACR,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CACxE,CAgCA"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/lib/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAKzB,wBAAsB,OAAO,CAC3B,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,KAAK,EAAE,EACtB,OAAO,SAAS,qBAAqB,EAAE,EACvC,UAAU,SAAS,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,EAC7C,YAAY,SAAS,sBAAsB,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3E,MAAM,SAAS,qBAAqB,CAClC,UAAU,EACV,YAAY,EACZ,CAAC,EACD,MAAM,EACN,OAAO,CACR,GAAG,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAEvE,YAAY,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAC3D,EACE,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,OAAO,EACP,gBAAwB,EACxB,cAAsB,EACtB,UAAe,EACf,YAAY,GACb,EAAE,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CACR,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CACxE,CAsCA"}
@@ -2,11 +2,19 @@ import "server-only";
2
2
  import { cookies, headers } from "next/headers";
3
3
  import { coreFetcher } from "./fetcher/core.js";
4
4
  import { handleSetCookiesFetcher } from "./fetcher/helpers-server.js";
5
- export async function fetcher(moduleReturn, { path, method, module, args, options, allowSaveCookies = false, withPagination = false, prefixPath = '' }) {
5
+ export async function fetcher(moduleReturn, { path, method, module, args, options, allowSaveCookies = false, withPagination = false, prefixPath = '', captchaToken }) {
6
6
  const [nextInternalHeaders, cookie] = await Promise.all([
7
7
  headers(),
8
8
  cookies()
9
9
  ]);
10
+ const additionalHeaders = {
11
+ Cookie: cookie.toString(),
12
+ ['user-agent']: nextInternalHeaders.get('user-agent') ?? 'node',
13
+ ['x-forwarded-for']: nextInternalHeaders.get('x-forwarded-for') ?? '0.0.0.0'
14
+ };
15
+ if (captchaToken) {
16
+ additionalHeaders['x-vitnode-captcha-token'] = captchaToken;
17
+ }
10
18
  const response = await coreFetcher(moduleReturn, {
11
19
  path,
12
20
  method,
@@ -15,11 +23,7 @@ export async function fetcher(moduleReturn, { path, method, module, args, option
15
23
  options,
16
24
  withPagination,
17
25
  prefixPath,
18
- additionalHeaders: {
19
- Cookie: cookie.toString(),
20
- ['user-agent']: nextInternalHeaders.get('user-agent') ?? 'node',
21
- ['x-forwarded-for']: nextInternalHeaders.get('x-forwarded-for') ?? '0.0.0.0'
22
- }
26
+ additionalHeaders
23
27
  });
24
28
  // Handle cookies on server-side for successful responses
25
29
  if (response.status >= 200 && response.status < 300 && allowSaveCookies) {
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/layouts/sidebar/nav/item.tsx"],"names":[],"mappings":"AAoBA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,GAAI,+CAM1B,iBAAiB,GAAG;IACrB,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3C,4CAuHA,CAAC"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../../../../../src/views/admin/layouts/sidebar/nav/item.tsx"],"names":[],"mappings":"AAoBA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,YAAY,GAAI,+CAM1B,iBAAiB,GAAG;IACrB,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3C,4CAqHA,CAAC"}