@greatapps/common 1.0.0

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 (205) hide show
  1. package/dist/components/handlers/SearchParamsHandler.mjs +23 -0
  2. package/dist/components/handlers/SearchParamsHandler.mjs.map +1 -0
  3. package/dist/components/layouts/MainLayout.mjs +60 -0
  4. package/dist/components/layouts/MainLayout.mjs.map +1 -0
  5. package/dist/components/layouts/MdSideBarNavigation.mjs +36 -0
  6. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -0
  7. package/dist/components/layouts/NavBar.mjs +45 -0
  8. package/dist/components/layouts/NavBar.mjs.map +1 -0
  9. package/dist/components/layouts/NotificationItem.mjs +7 -0
  10. package/dist/components/layouts/NotificationItem.mjs.map +1 -0
  11. package/dist/components/layouts/SideBarNavigation.mjs +22 -0
  12. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -0
  13. package/dist/components/ui/buttons/Button.mjs +51 -0
  14. package/dist/components/ui/buttons/Button.mjs.map +1 -0
  15. package/dist/components/ui/buttons/CancelButton.mjs +16 -0
  16. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -0
  17. package/dist/components/ui/buttons/CopyButton.mjs +34 -0
  18. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -0
  19. package/dist/components/ui/data-display/Accordion.mjs +73 -0
  20. package/dist/components/ui/data-display/Accordion.mjs.map +1 -0
  21. package/dist/components/ui/data-display/Badge.mjs +41 -0
  22. package/dist/components/ui/data-display/Badge.mjs.map +1 -0
  23. package/dist/components/ui/data-display/Card.mjs +91 -0
  24. package/dist/components/ui/data-display/Card.mjs.map +1 -0
  25. package/dist/components/ui/data-display/Pagination.mjs +115 -0
  26. package/dist/components/ui/data-display/Pagination.mjs.map +1 -0
  27. package/dist/components/ui/data-display/ScrollArea.mjs +60 -0
  28. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -0
  29. package/dist/components/ui/data-display/Separator.mjs +28 -0
  30. package/dist/components/ui/data-display/Separator.mjs.map +1 -0
  31. package/dist/components/ui/data-display/Table.mjs +116 -0
  32. package/dist/components/ui/data-display/Table.mjs.map +1 -0
  33. package/dist/components/ui/data-display/Tabs.mjs +69 -0
  34. package/dist/components/ui/data-display/Tabs.mjs.map +1 -0
  35. package/dist/components/ui/feedback/CircularProgress.mjs +61 -0
  36. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -0
  37. package/dist/components/ui/feedback/DefaultCircularProgress.mjs +49 -0
  38. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -0
  39. package/dist/components/ui/feedback/Progress.mjs +37 -0
  40. package/dist/components/ui/feedback/Progress.mjs.map +1 -0
  41. package/dist/components/ui/feedback/Toast.mjs +73 -0
  42. package/dist/components/ui/feedback/Toast.mjs.map +1 -0
  43. package/dist/components/ui/form/Calendar.mjs +203 -0
  44. package/dist/components/ui/form/Calendar.mjs.map +1 -0
  45. package/dist/components/ui/form/Checkbox.mjs +33 -0
  46. package/dist/components/ui/form/Checkbox.mjs.map +1 -0
  47. package/dist/components/ui/form/DatePicker.mjs +78 -0
  48. package/dist/components/ui/form/DatePicker.mjs.map +1 -0
  49. package/dist/components/ui/form/DateRangePicker.mjs +86 -0
  50. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -0
  51. package/dist/components/ui/form/Input.mjs +20 -0
  52. package/dist/components/ui/form/Input.mjs.map +1 -0
  53. package/dist/components/ui/form/InputOtp.mjs +67 -0
  54. package/dist/components/ui/form/InputOtp.mjs.map +1 -0
  55. package/dist/components/ui/form/RadioGroup.mjs +36 -0
  56. package/dist/components/ui/form/RadioGroup.mjs.map +1 -0
  57. package/dist/components/ui/form/Select.mjs +172 -0
  58. package/dist/components/ui/form/Select.mjs.map +1 -0
  59. package/dist/components/ui/form/Switch.mjs +33 -0
  60. package/dist/components/ui/form/Switch.mjs.map +1 -0
  61. package/dist/components/ui/form/Textarea.mjs +19 -0
  62. package/dist/components/ui/form/Textarea.mjs.map +1 -0
  63. package/dist/components/ui/overlay/Command.mjs +170 -0
  64. package/dist/components/ui/overlay/Command.mjs.map +1 -0
  65. package/dist/components/ui/overlay/Dialog.mjs +131 -0
  66. package/dist/components/ui/overlay/Dialog.mjs.map +1 -0
  67. package/dist/components/ui/overlay/Popover.mjs +46 -0
  68. package/dist/components/ui/overlay/Popover.mjs.map +1 -0
  69. package/dist/components/ui/overlay/Sheet.mjs +129 -0
  70. package/dist/components/ui/overlay/Sheet.mjs.map +1 -0
  71. package/dist/components/ui/overlay/Tooltip.mjs +55 -0
  72. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -0
  73. package/dist/hooks/copy-to-clipboard.hook.mjs +39 -0
  74. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -0
  75. package/dist/index.mjs +57 -0
  76. package/dist/index.mjs.map +1 -0
  77. package/dist/infra/api/client.mjs +115 -0
  78. package/dist/infra/api/client.mjs.map +1 -0
  79. package/dist/infra/api/types.mjs +31 -0
  80. package/dist/infra/api/types.mjs.map +1 -0
  81. package/dist/infra/utils/client-info.mjs +27 -0
  82. package/dist/infra/utils/client-info.mjs.map +1 -0
  83. package/dist/infra/utils/clsx.mjs +9 -0
  84. package/dist/infra/utils/clsx.mjs.map +1 -0
  85. package/dist/infra/utils/params.mjs +21 -0
  86. package/dist/infra/utils/params.mjs.map +1 -0
  87. package/dist/infra/utils/percentage.mjs +20 -0
  88. package/dist/infra/utils/percentage.mjs.map +1 -0
  89. package/dist/middlewares/chain.mjs +37 -0
  90. package/dist/middlewares/chain.mjs.map +1 -0
  91. package/dist/middlewares/create-auth-middleware.mjs +28 -0
  92. package/dist/middlewares/create-auth-middleware.mjs.map +1 -0
  93. package/dist/middlewares/types.mjs +11 -0
  94. package/dist/middlewares/types.mjs.map +1 -0
  95. package/dist/middlewares/validate-session.mjs +92 -0
  96. package/dist/middlewares/validate-session.mjs.map +1 -0
  97. package/dist/modules/auth/actions/login.action.mjs +11 -0
  98. package/dist/modules/auth/actions/login.action.mjs.map +1 -0
  99. package/dist/modules/auth/actions/logout.action.mjs +11 -0
  100. package/dist/modules/auth/actions/logout.action.mjs.map +1 -0
  101. package/dist/modules/auth/actions/register.action.mjs +9 -0
  102. package/dist/modules/auth/actions/register.action.mjs.map +1 -0
  103. package/dist/modules/auth/actions/validate-session.action.mjs +44 -0
  104. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -0
  105. package/dist/modules/auth/hooks/login.hook.mjs +12 -0
  106. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -0
  107. package/dist/modules/auth/hooks/logout.hook.mjs +12 -0
  108. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -0
  109. package/dist/modules/auth/hooks/register.hook.mjs +12 -0
  110. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -0
  111. package/dist/modules/auth/hooks/useUserQuery.mjs +48 -0
  112. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -0
  113. package/dist/modules/auth/schema.mjs +1 -0
  114. package/dist/modules/auth/schema.mjs.map +1 -0
  115. package/dist/modules/auth/services/auth.service.mjs +163 -0
  116. package/dist/modules/auth/services/auth.service.mjs.map +1 -0
  117. package/dist/modules/users/action/find-user-by-id.action.mjs +21 -0
  118. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -0
  119. package/dist/modules/users/schema.mjs +11 -0
  120. package/dist/modules/users/schema.mjs.map +1 -0
  121. package/dist/modules/users/services/user.service.mjs +50 -0
  122. package/dist/modules/users/services/user.service.mjs.map +1 -0
  123. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs +19 -0
  124. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -0
  125. package/dist/modules/whitelabel/schema.mjs +1 -0
  126. package/dist/modules/whitelabel/schema.mjs.map +1 -0
  127. package/dist/modules/whitelabel/services/whitelabel.service.mjs +62 -0
  128. package/dist/modules/whitelabel/services/whitelabel.service.mjs.map +1 -0
  129. package/dist/providers/auth.provider.mjs +84 -0
  130. package/dist/providers/auth.provider.mjs.map +1 -0
  131. package/dist/providers/query.provider.mjs +37 -0
  132. package/dist/providers/query.provider.mjs.map +1 -0
  133. package/dist/providers/whitelabel.provider.mjs +33 -0
  134. package/dist/providers/whitelabel.provider.mjs.map +1 -0
  135. package/dist/store/useMdSidebarStore.mjs +11 -0
  136. package/dist/store/useMdSidebarStore.mjs.map +1 -0
  137. package/package.json +68 -0
  138. package/src/components/handlers/SearchParamsHandler.tsx +61 -0
  139. package/src/components/layouts/MainLayout.tsx +59 -0
  140. package/src/components/layouts/MdSideBarNavigation.tsx +39 -0
  141. package/src/components/layouts/NavBar.tsx +79 -0
  142. package/src/components/layouts/NotificationItem.tsx +26 -0
  143. package/src/components/layouts/SideBarNavigation.tsx +22 -0
  144. package/src/components/ui/buttons/Button.tsx +55 -0
  145. package/src/components/ui/buttons/CancelButton.tsx +12 -0
  146. package/src/components/ui/buttons/CopyButton.tsx +47 -0
  147. package/src/components/ui/data-display/Accordion.tsx +79 -0
  148. package/src/components/ui/data-display/Badge.tsx +45 -0
  149. package/src/components/ui/data-display/Card.tsx +91 -0
  150. package/src/components/ui/data-display/Pagination.tsx +124 -0
  151. package/src/components/ui/data-display/ScrollArea.tsx +57 -0
  152. package/src/components/ui/data-display/Separator.tsx +27 -0
  153. package/src/components/ui/data-display/Table.tsx +115 -0
  154. package/src/components/ui/data-display/Tabs.tsx +65 -0
  155. package/src/components/ui/feedback/CircularProgress.tsx +75 -0
  156. package/src/components/ui/feedback/DefaultCircularProgress.tsx +53 -0
  157. package/src/components/ui/feedback/Progress.tsx +38 -0
  158. package/src/components/ui/feedback/Toast.tsx +99 -0
  159. package/src/components/ui/form/Calendar.tsx +226 -0
  160. package/src/components/ui/form/Checkbox.tsx +31 -0
  161. package/src/components/ui/form/DatePicker.tsx +97 -0
  162. package/src/components/ui/form/DateRangePicker.tsx +108 -0
  163. package/src/components/ui/form/Input.tsx +18 -0
  164. package/src/components/ui/form/InputOtp.tsx +78 -0
  165. package/src/components/ui/form/RadioGroup.tsx +43 -0
  166. package/src/components/ui/form/Select.tsx +195 -0
  167. package/src/components/ui/form/Switch.tsx +30 -0
  168. package/src/components/ui/form/Textarea.tsx +17 -0
  169. package/src/components/ui/overlay/Command.tsx +183 -0
  170. package/src/components/ui/overlay/Dialog.tsx +146 -0
  171. package/src/components/ui/overlay/Popover.tsx +47 -0
  172. package/src/components/ui/overlay/Sheet.tsx +145 -0
  173. package/src/components/ui/overlay/Tooltip.tsx +60 -0
  174. package/src/hooks/copy-to-clipboard.hook.tsx +52 -0
  175. package/src/index.ts +50 -0
  176. package/src/infra/api/client.ts +142 -0
  177. package/src/infra/api/types.ts +79 -0
  178. package/src/infra/utils/client-info.ts +35 -0
  179. package/src/infra/utils/clsx.ts +6 -0
  180. package/src/infra/utils/params.ts +27 -0
  181. package/src/infra/utils/percentage.ts +42 -0
  182. package/src/middlewares/chain.ts +45 -0
  183. package/src/middlewares/create-auth-middleware.ts +38 -0
  184. package/src/middlewares/types.ts +24 -0
  185. package/src/middlewares/validate-session.ts +116 -0
  186. package/src/modules/auth/actions/login.action.ts +11 -0
  187. package/src/modules/auth/actions/logout.action.ts +11 -0
  188. package/src/modules/auth/actions/register.action.ts +8 -0
  189. package/src/modules/auth/actions/validate-session.action.ts +51 -0
  190. package/src/modules/auth/hooks/login.hook.tsx +10 -0
  191. package/src/modules/auth/hooks/logout.hook.tsx +10 -0
  192. package/src/modules/auth/hooks/register.hook.tsx +10 -0
  193. package/src/modules/auth/hooks/useUserQuery.ts +49 -0
  194. package/src/modules/auth/schema.ts +220 -0
  195. package/src/modules/auth/services/auth.service.ts +225 -0
  196. package/src/modules/users/action/find-user-by-id.action.ts +25 -0
  197. package/src/modules/users/schema.ts +79 -0
  198. package/src/modules/users/services/user.service.ts +63 -0
  199. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +20 -0
  200. package/src/modules/whitelabel/schema.ts +49 -0
  201. package/src/modules/whitelabel/services/whitelabel.service.ts +77 -0
  202. package/src/providers/auth.provider.tsx +113 -0
  203. package/src/providers/query.provider.tsx +52 -0
  204. package/src/providers/whitelabel.provider.tsx +44 -0
  205. package/src/store/useMdSidebarStore.ts +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/infra/utils/percentage.ts"],"sourcesContent":["/**\n * Calcula percentual de um valor em relação ao total\n * @param current - Valor atual\n * @param total - Valor total\n * @returns Percentual (0-100)\n */\nexport const calculatePercentage = (current: number, total: number): number => {\n if (total === 0) return 0;\n return (current / total) * 100;\n};\n\n/**\n * Calcula a circunferência de um círculo\n * @param radius - Raio do círculo\n * @returns Circunferência\n */\nexport const calculateCircumference = (radius: number): number => {\n return 2 * Math.PI * radius;\n};\n\n/**\n * Calcula o offset para circular progress\n * @param percentage - Percentual de progresso (0-100)\n * @param circumference - Circunferência do círculo\n * @returns Valor do offset\n */\nexport const calculateCircularProgressOffset = (\n percentage: number,\n circumference: number\n): number => {\n return circumference - (percentage / 100) * circumference;\n};\n\n/**\n * Calcula raio de círculo baseado no tamanho e stroke\n * @param size - Tamanho total\n * @param strokeWidth - Largura do stroke\n * @returns Raio calculado\n */\nexport const calculateRadius = (size: number, strokeWidth: number): number => {\n return (size - strokeWidth) / 2;\n};\n"],"mappings":"AAMO,MAAM,sBAAsB,CAAC,SAAiB,UAA0B;AAC7E,MAAI,UAAU,EAAG,QAAO;AACxB,SAAQ,UAAU,QAAS;AAC7B;AAOO,MAAM,yBAAyB,CAAC,WAA2B;AAChE,SAAO,IAAI,KAAK,KAAK;AACvB;AAQO,MAAM,kCAAkC,CAC7C,YACA,kBACW;AACX,SAAO,gBAAiB,aAAa,MAAO;AAC9C;AAQO,MAAM,kBAAkB,CAAC,MAAc,gBAAgC;AAC5E,UAAQ,OAAO,eAAe;AAChC;","names":[]}
@@ -0,0 +1,37 @@
1
+ import { NextResponse } from "next/server";
2
+ function shouldProcessPath(pathname, config) {
3
+ const { excludePaths, includePaths } = config;
4
+ if (excludePaths?.length) {
5
+ const isExcluded = excludePaths.some(
6
+ (path) => pathname === path || pathname.startsWith(`${path}/`)
7
+ );
8
+ if (isExcluded) return false;
9
+ }
10
+ if (includePaths?.length) {
11
+ return includePaths.some((path) => pathname === path || pathname.startsWith(`${path}/`));
12
+ }
13
+ return true;
14
+ }
15
+ function createMiddlewareChain(middlewares) {
16
+ return async function chainedMiddleware(request) {
17
+ const { pathname } = request.nextUrl;
18
+ let currentRequest = request;
19
+ for (const middleware of middlewares) {
20
+ if (!shouldProcessPath(pathname, middleware)) {
21
+ continue;
22
+ }
23
+ const result = await middleware.handler(currentRequest);
24
+ if (result.type === "response") {
25
+ return result.response;
26
+ }
27
+ if (result.request) {
28
+ currentRequest = result.request;
29
+ }
30
+ }
31
+ return NextResponse.next();
32
+ };
33
+ }
34
+ export {
35
+ createMiddlewareChain
36
+ };
37
+ //# sourceMappingURL=chain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/middlewares/chain.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\r\n\r\nimport { MiddlewareConfig } from './types';\r\n\r\nfunction shouldProcessPath(pathname: string, config: MiddlewareConfig): boolean {\r\n const { excludePaths, includePaths } = config;\r\n\r\n if (excludePaths?.length) {\r\n const isExcluded = excludePaths.some(\r\n (path) => pathname === path || pathname.startsWith(`${path}/`)\r\n );\r\n if (isExcluded) return false;\r\n }\r\n\r\n if (includePaths?.length) {\r\n return includePaths.some((path) => pathname === path || pathname.startsWith(`${path}/`));\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function createMiddlewareChain(middlewares: MiddlewareConfig[]) {\r\n return async function chainedMiddleware(request: NextRequest): Promise<NextResponse> {\r\n const { pathname } = request.nextUrl;\r\n let currentRequest = request;\r\n\r\n for (const middleware of middlewares) {\r\n if (!shouldProcessPath(pathname, middleware)) {\r\n continue;\r\n }\r\n\r\n const result = await middleware.handler(currentRequest);\r\n\r\n if (result.type === 'response') {\r\n return result.response;\r\n }\r\n\r\n if (result.request) {\r\n currentRequest = result.request;\r\n }\r\n }\r\n\r\n return NextResponse.next();\r\n };\r\n}\r\n"],"mappings":"AAAA,SAAsB,oBAAoB;AAI1C,SAAS,kBAAkB,UAAkB,QAAmC;AAC9E,QAAM,EAAE,cAAc,aAAa,IAAI;AAEvC,MAAI,cAAc,QAAQ;AACxB,UAAM,aAAa,aAAa;AAAA,MAC9B,CAAC,SAAS,aAAa,QAAQ,SAAS,WAAW,GAAG,IAAI,GAAG;AAAA,IAC/D;AACA,QAAI,WAAY,QAAO;AAAA,EACzB;AAEA,MAAI,cAAc,QAAQ;AACxB,WAAO,aAAa,KAAK,CAAC,SAAS,aAAa,QAAQ,SAAS,WAAW,GAAG,IAAI,GAAG,CAAC;AAAA,EACzF;AAEA,SAAO;AACT;AAEO,SAAS,sBAAsB,aAAiC;AACrE,SAAO,eAAe,kBAAkB,SAA6C;AACnF,UAAM,EAAE,SAAS,IAAI,QAAQ;AAC7B,QAAI,iBAAiB;AAErB,eAAW,cAAc,aAAa;AACpC,UAAI,CAAC,kBAAkB,UAAU,UAAU,GAAG;AAC5C;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,WAAW,QAAQ,cAAc;AAEtD,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO,OAAO;AAAA,MAChB;AAEA,UAAI,OAAO,SAAS;AAClB,yBAAiB,OAAO;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO,aAAa,KAAK;AAAA,EAC3B;AACF;","names":[]}
@@ -0,0 +1,28 @@
1
+ import { NextResponse } from "next/server";
2
+ import { continueChain, stopChain } from "./types";
3
+ function isRouteEquals(pathname, routes) {
4
+ return routes.some((route) => pathname === route || pathname.startsWith(`${route}/`));
5
+ }
6
+ function createAuthMiddleware(options) {
7
+ return (request) => {
8
+ const { pathname } = request.nextUrl;
9
+ const token = request.cookies.get("greatapps")?.value;
10
+ const isPublicRoute = isRouteEquals(pathname, options?.publicRoutes || []);
11
+ const isAuthRoute = isRouteEquals(pathname, options?.authRoutes || []);
12
+ if (token && isAuthRoute) {
13
+ return stopChain(NextResponse.redirect(new URL("/", request.url)));
14
+ }
15
+ if (!token && !isPublicRoute) {
16
+ const loginUrl = new URL("/login", request.url);
17
+ if (pathname !== "/") {
18
+ loginUrl.searchParams.set("redirect", pathname);
19
+ }
20
+ return stopChain(NextResponse.redirect(loginUrl));
21
+ }
22
+ return continueChain();
23
+ };
24
+ }
25
+ export {
26
+ createAuthMiddleware
27
+ };
28
+ //# sourceMappingURL=create-auth-middleware.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/middlewares/create-auth-middleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\r\n\r\nimport { continueChain, MiddlewareConfig, MiddlewareFunction, MiddlewareResult, stopChain } from './types';\r\n\r\nfunction isRouteEquals(pathname: string, routes: string[]): boolean {\r\n return routes.some((route) => pathname === route || pathname.startsWith(`${route}/`));\r\n}\r\n\r\ninterface CreateAuthMiddlewareOptions {\r\n publicRoutes?: string[];\r\n authRoutes?: string[];\r\n}\r\n\r\nexport function createAuthMiddleware(options?: CreateAuthMiddlewareOptions): MiddlewareFunction {\r\n return (request: NextRequest) => {\r\n const { pathname } = request.nextUrl;\r\n const token = request.cookies.get('greatapps')?.value;\r\n const isPublicRoute = isRouteEquals(pathname, options?.publicRoutes || []);\r\n const isAuthRoute = isRouteEquals(pathname, options?.authRoutes || []);\r\n\r\n if (token && isAuthRoute) {\r\n return stopChain(NextResponse.redirect(new URL('/', request.url)));\r\n }\r\n\r\n if (!token && !isPublicRoute) {\r\n\r\n const loginUrl = new URL('/login', request.url);\r\n\r\n if (pathname !== '/') {\r\n loginUrl.searchParams.set('redirect', pathname);\r\n }\r\n\r\n return stopChain(NextResponse.redirect(loginUrl));\r\n }\r\n\r\n return continueChain();\r\n }\r\n}"],"mappings":"AAAA,SAAsB,oBAAoB;AAE1C,SAAS,eAAuE,iBAAiB;AAEjG,SAAS,cAAc,UAAkB,QAA2B;AAClE,SAAO,OAAO,KAAK,CAAC,UAAU,aAAa,SAAS,SAAS,WAAW,GAAG,KAAK,GAAG,CAAC;AACtF;AAOO,SAAS,qBAAqB,SAA2D;AAC9F,SAAO,CAAC,YAAyB;AAC/B,UAAM,EAAE,SAAS,IAAI,QAAQ;AAC7B,UAAM,QAAQ,QAAQ,QAAQ,IAAI,WAAW,GAAG;AAChD,UAAM,gBAAgB,cAAc,UAAU,SAAS,gBAAgB,CAAC,CAAC;AACzE,UAAM,cAAc,cAAc,UAAU,SAAS,cAAc,CAAC,CAAC;AAErE,QAAI,SAAS,aAAa;AACxB,aAAO,UAAU,aAAa,SAAS,IAAI,IAAI,KAAK,QAAQ,GAAG,CAAC,CAAC;AAAA,IACnE;AAEA,QAAI,CAAC,SAAS,CAAC,eAAe;AAE5B,YAAM,WAAW,IAAI,IAAI,UAAU,QAAQ,GAAG;AAE9C,UAAI,aAAa,KAAK;AACpB,iBAAS,aAAa,IAAI,YAAY,QAAQ;AAAA,MAChD;AAEA,aAAO,UAAU,aAAa,SAAS,QAAQ,CAAC;AAAA,IAClD;AAEA,WAAO,cAAc;AAAA,EACvB;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ function continueChain(request) {
2
+ return { type: "next", request };
3
+ }
4
+ function stopChain(response) {
5
+ return { type: "response", response };
6
+ }
7
+ export {
8
+ continueChain,
9
+ stopChain
10
+ };
11
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/middlewares/types.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\r\n\r\nexport type MiddlewareResult =\r\n | { type: 'response'; response: NextResponse }\r\n | { type: 'next'; request?: NextRequest };\r\n\r\nexport type MiddlewareFunction = (\r\n request: NextRequest\r\n) => MiddlewareResult | Promise<MiddlewareResult>;\r\n\r\nexport interface MiddlewareConfig {\r\n name: string;\r\n handler: MiddlewareFunction;\r\n excludePaths?: string[];\r\n includePaths?: string[];\r\n}\r\n\r\nexport function continueChain(request?: NextRequest): MiddlewareResult {\r\n return { type: 'next', request };\r\n}\r\n\r\nexport function stopChain(response: NextResponse): MiddlewareResult {\r\n return { type: 'response', response };\r\n}\r\n"],"mappings":"AAiBO,SAAS,cAAc,SAAyC;AACrE,SAAO,EAAE,MAAM,QAAQ,QAAQ;AACjC;AAEO,SAAS,UAAU,UAA0C;AAClE,SAAO,EAAE,MAAM,YAAY,SAAS;AACtC;","names":[]}
@@ -0,0 +1,92 @@
1
+ "use server";
2
+ import { redirect } from "next/navigation";
3
+ import { getWhitelabelServerData } from "../modules/whitelabel/whitelabel-token.server";
4
+ import { getClientInfoFromRequest } from "../infra/utils/client-info";
5
+ import { cookies, headers } from "next/headers";
6
+ const API_BASE_URL = process.env.R3_API_URL || "https://r3-api.greatapps.dev.br";
7
+ const API_VERSION = "v1";
8
+ const API_LOCALE = "pt-br";
9
+ async function redirectToLogin() {
10
+ const h = await headers();
11
+ const referer = h.get("referer") || "/";
12
+ if (!referer) {
13
+ redirect("/login");
14
+ return;
15
+ }
16
+ const url = new URL(referer);
17
+ if (["/login", "/register", "/forgot-password"].includes(url.pathname)) {
18
+ return;
19
+ }
20
+ redirect("/login");
21
+ }
22
+ async function validateSession() {
23
+ console.log("[validateSession] Starting session validation");
24
+ const cookieStore = await cookies();
25
+ const cookie = cookieStore.get("greatapps")?.value;
26
+ if (!cookie) {
27
+ console.log("[validateSession] No cookie found");
28
+ await redirectToLogin();
29
+ return false;
30
+ }
31
+ console.log("[validateSession] Cookie found:", cookie.substring(0, 30) + "...");
32
+ try {
33
+ const whitelabel = await getWhitelabelServerData();
34
+ if (!whitelabel) {
35
+ console.error("[validateSession] Could not get whitelabel data");
36
+ await redirectToLogin();
37
+ return false;
38
+ }
39
+ console.log("[validateSession] Whitelabel data:", {
40
+ wlId: whitelabel.wlId,
41
+ hasToken: !!whitelabel.token
42
+ });
43
+ const clientInfo = await getClientInfoFromRequest();
44
+ console.log("[validateSession] Client info:", {
45
+ ip: clientInfo.ip,
46
+ city: clientInfo.location.city,
47
+ country: clientInfo.location.country,
48
+ agent: clientInfo.agent.substring(0, 50) + "..."
49
+ });
50
+ const payload = {
51
+ location: clientInfo.location,
52
+ ip: clientInfo.ip,
53
+ timezone: clientInfo.timezone,
54
+ agent: clientInfo.agent,
55
+ cookie
56
+ };
57
+ const url = `${API_BASE_URL}/${API_VERSION}/${API_LOCALE}/${whitelabel.wlId}/auth/keep`;
58
+ console.log("[validateSession] Calling API:", url);
59
+ const response = await fetch(url, {
60
+ method: "POST",
61
+ headers: {
62
+ "Content-Type": "application/json",
63
+ authorization: whitelabel.token
64
+ },
65
+ body: JSON.stringify(payload)
66
+ });
67
+ console.log("[validateSession] API response status:", response.status);
68
+ if (!response.ok) {
69
+ const errorText = await response.text();
70
+ console.error("[validateSession] Session validation failed", {
71
+ status: response.status,
72
+ error: errorText
73
+ });
74
+ cookieStore.delete("greatapps");
75
+ await redirectToLogin();
76
+ return false;
77
+ }
78
+ const data = await response.json();
79
+ console.log("[validateSession] API response data:", data);
80
+ const isValid = data.status === 1;
81
+ console.log("[validateSession] Session is valid:", isValid);
82
+ return isValid;
83
+ } catch (error) {
84
+ console.error("[validateSession] Error validating session", error);
85
+ await redirectToLogin();
86
+ return false;
87
+ }
88
+ }
89
+ export {
90
+ validateSession
91
+ };
92
+ //# sourceMappingURL=validate-session.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/middlewares/validate-session.ts"],"sourcesContent":["'use server';\r\n\r\nimport { redirect } from 'next/navigation';\r\nimport { SessionKeepRequest, SessionKeepResponse } from '../types/auth';\r\nimport { getWhitelabelServerData } from '../modules/whitelabel/whitelabel-token.server';\r\nimport { getClientInfoFromRequest } from '../infra/utils/client-info';\r\nimport { cookies, headers } from 'next/headers';\r\n\r\nconst API_BASE_URL = process.env.R3_API_URL || 'https://r3-api.greatapps.dev.br';\r\nconst API_VERSION = 'v1';\r\nconst API_LOCALE = 'pt-br';\r\n\r\nasync function redirectToLogin() {\r\n const h = await headers();\r\n const referer = h.get('referer') || '/';\r\n\r\n if (!referer) {\r\n redirect('/login');\r\n return;\r\n }\r\n\r\n const url = new URL(referer);\r\n\r\n if (['/login', '/register', '/forgot-password'].includes(url.pathname)) {\r\n return;\r\n }\r\n\r\n redirect('/login');\r\n}\r\n\r\nexport async function validateSession(): Promise<boolean> {\r\n console.log('[validateSession] Starting session validation');\r\n\r\n const cookieStore = await cookies();\r\n const cookie = cookieStore.get('greatapps')?.value;\r\n\r\n if (!cookie) {\r\n console.log('[validateSession] No cookie found');\r\n await redirectToLogin();\r\n return false;\r\n }\r\n\r\n console.log('[validateSession] Cookie found:', cookie.substring(0, 30) + '...');\r\n\r\n try {\r\n // Busca dados do whitelabel\r\n const whitelabel = await getWhitelabelServerData();\r\n\r\n if (!whitelabel) {\r\n console.error('[validateSession] Could not get whitelabel data');\r\n await redirectToLogin();\r\n return false;\r\n }\r\n\r\n console.log('[validateSession] Whitelabel data:', {\r\n wlId: whitelabel.wlId,\r\n hasToken: !!whitelabel.token,\r\n });\r\n\r\n const clientInfo = await getClientInfoFromRequest();\r\n\r\n console.log('[validateSession] Client info:', {\r\n ip: clientInfo.ip,\r\n city: clientInfo.location.city,\r\n country: clientInfo.location.country,\r\n agent: clientInfo.agent.substring(0, 50) + '...',\r\n });\r\n\r\n const payload: SessionKeepRequest = {\r\n location: clientInfo.location,\r\n ip: clientInfo.ip,\r\n timezone: clientInfo.timezone,\r\n agent: clientInfo.agent,\r\n cookie,\r\n };\r\n\r\n const url = `${API_BASE_URL}/${API_VERSION}/${API_LOCALE}/${whitelabel.wlId}/auth/keep`;\r\n\r\n console.log('[validateSession] Calling API:', url);\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n authorization: whitelabel.token,\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n\r\n console.log('[validateSession] API response status:', response.status);\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n console.error('[validateSession] Session validation failed', {\r\n status: response.status,\r\n error: errorText,\r\n });\r\n cookieStore.delete('greatapps');\r\n await redirectToLogin();\r\n return false;\r\n }\r\n\r\n const data = (await response.json()) as SessionKeepResponse;\r\n\r\n console.log('[validateSession] API response data:', data);\r\n\r\n const isValid = data.status === 1;\r\n\r\n console.log('[validateSession] Session is valid:', isValid);\r\n return isValid;\r\n } catch (error) {\r\n console.error('[validateSession] Error validating session', error);\r\n await redirectToLogin();\r\n return false;\r\n }\r\n}\r\n"],"mappings":";AAEA,SAAS,gBAAgB;AAEzB,SAAS,+BAA+B;AACxC,SAAS,gCAAgC;AACzC,SAAS,SAAS,eAAe;AAEjC,MAAM,eAAe,QAAQ,IAAI,cAAc;AAC/C,MAAM,cAAc;AACpB,MAAM,aAAa;AAEnB,eAAe,kBAAkB;AAC/B,QAAM,IAAI,MAAM,QAAQ;AACxB,QAAM,UAAU,EAAE,IAAI,SAAS,KAAK;AAEpC,MAAI,CAAC,SAAS;AACZ,aAAS,QAAQ;AACjB;AAAA,EACF;AAEA,QAAM,MAAM,IAAI,IAAI,OAAO;AAE3B,MAAI,CAAC,UAAU,aAAa,kBAAkB,EAAE,SAAS,IAAI,QAAQ,GAAG;AACtE;AAAA,EACF;AAEA,WAAS,QAAQ;AACnB;AAEA,eAAsB,kBAAoC;AACxD,UAAQ,IAAI,+CAA+C;AAE3D,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,SAAS,YAAY,IAAI,WAAW,GAAG;AAE3C,MAAI,CAAC,QAAQ;AACX,YAAQ,IAAI,mCAAmC;AAC/C,UAAM,gBAAgB;AACtB,WAAO;AAAA,EACT;AAEF,UAAQ,IAAI,mCAAmC,OAAO,UAAU,GAAG,EAAE,IAAI,KAAK;AAE9E,MAAI;AAEF,UAAM,aAAa,MAAM,wBAAwB;AAEjD,QAAI,CAAC,YAAY;AACf,cAAQ,MAAM,iDAAiD;AAC/D,YAAM,gBAAgB;AACtB,aAAO;AAAA,IACT;AAEA,YAAQ,IAAI,sCAAsC;AAAA,MAChD,MAAM,WAAW;AAAA,MACjB,UAAU,CAAC,CAAC,WAAW;AAAA,IACzB,CAAC;AAED,UAAM,aAAa,MAAM,yBAAyB;AAElD,YAAQ,IAAI,kCAAkC;AAAA,MAC5C,IAAI,WAAW;AAAA,MACf,MAAM,WAAW,SAAS;AAAA,MAC1B,SAAS,WAAW,SAAS;AAAA,MAC7B,OAAO,WAAW,MAAM,UAAU,GAAG,EAAE,IAAI;AAAA,IAC7C,CAAC;AAED,UAAM,UAA8B;AAAA,MAClC,UAAU,WAAW;AAAA,MACrB,IAAI,WAAW;AAAA,MACf,UAAU,WAAW;AAAA,MACrB,OAAO,WAAW;AAAA,MAClB;AAAA,IACF;AAEA,UAAM,MAAM,GAAG,YAAY,IAAI,WAAW,IAAI,UAAU,IAAI,WAAW,IAAI;AAE3E,YAAQ,IAAI,kCAAkC,GAAG;AAEjD,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,WAAW;AAAA,MAC5B;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAED,YAAQ,IAAI,0CAA0C,SAAS,MAAM;AAErE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,+CAA+C;AAAA,QAC3D,QAAQ,SAAS;AAAA,QACjB,OAAO;AAAA,MACT,CAAC;AACD,kBAAY,OAAO,WAAW;AAC9B,YAAM,gBAAgB;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,YAAQ,IAAI,wCAAwC,IAAI;AAExD,UAAM,UAAU,KAAK,WAAW;AAEhC,YAAQ,IAAI,uCAAuC,OAAO;AAC1D,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,8CAA8C,KAAK;AACjE,UAAM,gBAAgB;AACtB,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ "use server";
2
+ import { authService } from "../services/auth.service";
3
+ import { getClientInfoFromRequest } from "../../../infra/utils/client-info";
4
+ async function loginAction(credentials) {
5
+ const clientInfo = await getClientInfoFromRequest();
6
+ return await authService.login(credentials, clientInfo);
7
+ }
8
+ export {
9
+ loginAction
10
+ };
11
+ //# sourceMappingURL=login.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/actions/login.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { authService } from '../services/auth.service';\r\nimport { LoginRequest, LoginResponse } from '../schema';\r\nimport { getClientInfoFromRequest } from '../../../infra/utils/client-info';\r\n\r\nexport async function loginAction(credentials: LoginRequest): Promise<LoginResponse> {\r\n const clientInfo = await getClientInfoFromRequest();\r\n\r\n return await authService.login(credentials, clientInfo)\r\n}\r\n"],"mappings":";AAEA,SAAS,mBAAmB;AAE5B,SAAS,gCAAgC;AAEzC,eAAsB,YAAY,aAAmD;AACnF,QAAM,aAAa,MAAM,yBAAyB;AAElD,SAAO,MAAM,YAAY,MAAM,aAAa,UAAU;AACxD;","names":[]}
@@ -0,0 +1,11 @@
1
+ "use server";
2
+ import { getClientInfoFromRequest } from "../../../infra/utils/client-info";
3
+ import { authService } from "../services/auth.service";
4
+ async function logoutAction() {
5
+ const clientInfo = await getClientInfoFromRequest();
6
+ return await authService.logout(clientInfo);
7
+ }
8
+ export {
9
+ logoutAction
10
+ };
11
+ //# sourceMappingURL=logout.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/actions/logout.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { getClientInfoFromRequest } from \"../../../infra/utils/client-info\";\r\nimport { LogoutResponse } from \"../schema\";\r\nimport { authService } from \"../services/auth.service\";\r\n\r\nexport async function logoutAction(): Promise<LogoutResponse> {\r\n const clientInfo = await getClientInfoFromRequest();\r\n\r\n return await authService.logout(clientInfo)\r\n}\r\n"],"mappings":";AAEA,SAAS,gCAAgC;AAEzC,SAAS,mBAAmB;AAE5B,eAAsB,eAAwC;AAC5D,QAAM,aAAa,MAAM,yBAAyB;AAElD,SAAO,MAAM,YAAY,OAAO,UAAU;AAC5C;","names":[]}
@@ -0,0 +1,9 @@
1
+ "use server";
2
+ import { authService } from "../services/auth.service";
3
+ async function registerAction(data) {
4
+ return await authService.register(data);
5
+ }
6
+ export {
7
+ registerAction
8
+ };
9
+ //# sourceMappingURL=register.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/actions/register.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { RegisterRequest, RegisterResponse } from \"../schema\";\r\nimport { authService } from \"../services/auth.service\";\r\n\r\nexport async function registerAction(data: RegisterRequest): Promise<RegisterResponse> {\r\n return await authService.register(data)\r\n}\r\n"],"mappings":";AAGA,SAAS,mBAAmB;AAE5B,eAAsB,eAAe,MAAkD;AACrF,SAAO,MAAM,YAAY,SAAS,IAAI;AACxC;","names":[]}
@@ -0,0 +1,44 @@
1
+ "use server";
2
+ import { redirect } from "next/navigation";
3
+ import { cookies, headers } from "next/headers";
4
+ import { authService } from "../services/auth.service";
5
+ import { getClientInfoFromRequest } from "../../../infra/utils/client-info";
6
+ async function redirectToLogin() {
7
+ const h = await headers();
8
+ const referer = h.get("referer") || "/";
9
+ if (!referer) {
10
+ redirect("/login");
11
+ return;
12
+ }
13
+ const url = new URL(referer);
14
+ if (["/login", "/register", "/forgot-password"].includes(url.pathname)) {
15
+ return;
16
+ }
17
+ redirect("/login");
18
+ }
19
+ async function validateSessionAction() {
20
+ const cookieStore = await cookies();
21
+ const cookie = cookieStore.get("greatapps")?.value;
22
+ if (!cookie) {
23
+ await redirectToLogin();
24
+ return false;
25
+ }
26
+ try {
27
+ const clientInfo = await getClientInfoFromRequest();
28
+ const isValid = await authService.validateSession(clientInfo);
29
+ if (!isValid) {
30
+ cookieStore.delete("greatapps");
31
+ await redirectToLogin();
32
+ return false;
33
+ }
34
+ return true;
35
+ } catch (error) {
36
+ console.error("[validateSessionAction] Error:", error);
37
+ await redirectToLogin();
38
+ return false;
39
+ }
40
+ }
41
+ export {
42
+ validateSessionAction
43
+ };
44
+ //# sourceMappingURL=validate-session.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/actions/validate-session.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { redirect } from 'next/navigation';\r\nimport { cookies, headers } from 'next/headers';\r\nimport { authService } from '../services/auth.service';\r\nimport { getClientInfoFromRequest } from '../../../infra/utils/client-info';\r\n\r\nasync function redirectToLogin() {\r\n const h = await headers();\r\n const referer = h.get('referer') || '/';\r\n\r\n if (!referer) {\r\n redirect('/login');\r\n return;\r\n }\r\n\r\n const url = new URL(referer);\r\n\r\n if (['/login', '/register', '/forgot-password'].includes(url.pathname)) {\r\n return;\r\n }\r\n\r\n redirect('/login');\r\n}\r\n\r\nexport async function validateSessionAction(): Promise<boolean> {\r\n const cookieStore = await cookies();\r\n const cookie = cookieStore.get('greatapps')?.value;\r\n\r\n if (!cookie) {\r\n await redirectToLogin();\r\n return false;\r\n }\r\n\r\n try {\r\n const clientInfo = await getClientInfoFromRequest();\r\n const isValid = await authService.validateSession(clientInfo);\r\n\r\n if (!isValid) {\r\n cookieStore.delete('greatapps');\r\n await redirectToLogin();\r\n return false;\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n console.error('[validateSessionAction] Error:', error);\r\n await redirectToLogin();\r\n return false;\r\n }\r\n}\r\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,SAAS,eAAe;AACjC,SAAS,mBAAmB;AAC5B,SAAS,gCAAgC;AAEzC,eAAe,kBAAkB;AAC/B,QAAM,IAAI,MAAM,QAAQ;AACxB,QAAM,UAAU,EAAE,IAAI,SAAS,KAAK;AAEpC,MAAI,CAAC,SAAS;AACZ,aAAS,QAAQ;AACjB;AAAA,EACF;AAEA,QAAM,MAAM,IAAI,IAAI,OAAO;AAE3B,MAAI,CAAC,UAAU,aAAa,kBAAkB,EAAE,SAAS,IAAI,QAAQ,GAAG;AACtE;AAAA,EACF;AAEA,WAAS,QAAQ;AACnB;AAEA,eAAsB,wBAA0C;AAC9D,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,SAAS,YAAY,IAAI,WAAW,GAAG;AAE7C,MAAI,CAAC,QAAQ;AACX,UAAM,gBAAgB;AACtB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,aAAa,MAAM,yBAAyB;AAClD,UAAM,UAAU,MAAM,YAAY,gBAAgB,UAAU;AAE5D,QAAI,CAAC,SAAS;AACZ,kBAAY,OAAO,WAAW;AAC9B,YAAM,gBAAgB;AACtB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,kCAAkC,KAAK;AACrD,UAAM,gBAAgB;AACtB,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { loginAction } from "../actions/login.action";
4
+ function useLogin() {
5
+ return useMutation({
6
+ mutationFn: loginAction
7
+ });
8
+ }
9
+ export {
10
+ useLogin
11
+ };
12
+ //# sourceMappingURL=login.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/login.hook.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { loginAction } from \"../actions/login.action\";\n\nexport function useLogin() {\n return useMutation({\n mutationFn: loginAction,\n });\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAErB,SAAS,WAAW;AACzB,SAAO,YAAY;AAAA,IACjB,YAAY;AAAA,EACd,CAAC;AACH;","names":[]}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { logoutAction } from "../actions/logout.action";
4
+ function useLogout() {
5
+ return useMutation({
6
+ mutationFn: logoutAction
7
+ });
8
+ }
9
+ export {
10
+ useLogout
11
+ };
12
+ //# sourceMappingURL=logout.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/logout.hook.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { logoutAction } from \"../actions/logout.action\";\n\nexport function useLogout() {\n return useMutation({\n mutationFn: logoutAction,\n });\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAEtB,SAAS,YAAY;AAC1B,SAAO,YAAY;AAAA,IACjB,YAAY;AAAA,EACd,CAAC;AACH;","names":[]}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { registerAction } from "../actions/register.action";
4
+ function useRegister() {
5
+ return useMutation({
6
+ mutationFn: registerAction
7
+ });
8
+ }
9
+ export {
10
+ useRegister
11
+ };
12
+ //# sourceMappingURL=register.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/register.hook.tsx"],"sourcesContent":["\"use client\";\n\nimport { useMutation } from \"@tanstack/react-query\";\nimport { registerAction } from \"../actions/register.action\";\n\nexport function useRegister() {\n return useMutation({\n mutationFn: registerAction,\n });\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAExB,SAAS,cAAc;AAC5B,SAAO,YAAY;AAAA,IACjB,YAAY;AAAA,EACd,CAAC;AACH;","names":[]}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
3
+ const USER_QUERY_KEY = ["user"];
4
+ async function fetchUser() {
5
+ const { findUserById: getUserDataAction } = await import("../../users/action/find-user-by-id.action");
6
+ const result = await getUserDataAction();
7
+ return result.success && result.data ? result.data : null;
8
+ }
9
+ async function validateUserSession() {
10
+ const { validateSessionAction } = await import("../actions/validate-session.action");
11
+ return await validateSessionAction();
12
+ }
13
+ function useUserQuery() {
14
+ return useQuery({
15
+ queryKey: USER_QUERY_KEY,
16
+ queryFn: fetchUser,
17
+ staleTime: 5 * 60 * 1e3,
18
+ gcTime: 10 * 60 * 1e3,
19
+ retry: false
20
+ });
21
+ }
22
+ function useUserValidateSession(options) {
23
+ return useQuery({
24
+ queryKey: ["user-validate-session"],
25
+ queryFn: validateUserSession,
26
+ retry: false,
27
+ staleTime: 5 * 60 * 1e3,
28
+ ...options,
29
+ refetchOnMount: "always",
30
+ refetchOnWindowFocus: true
31
+ });
32
+ }
33
+ function useInvalidateUser() {
34
+ const queryClient = useQueryClient();
35
+ return () => queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });
36
+ }
37
+ function useSetUserData() {
38
+ const queryClient = useQueryClient();
39
+ return (user) => queryClient.setQueryData(USER_QUERY_KEY, user);
40
+ }
41
+ export {
42
+ USER_QUERY_KEY,
43
+ useInvalidateUser,
44
+ useSetUserData,
45
+ useUserQuery,
46
+ useUserValidateSession
47
+ };
48
+ //# sourceMappingURL=useUserQuery.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/useUserQuery.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query';\r\nimport { User } from '../../users/schema';\r\n\r\nexport const USER_QUERY_KEY = ['user'];\r\n\r\nasync function fetchUser(): Promise<User | null> {\r\n const { findUserById: getUserDataAction } = await import('../../users/action/find-user-by-id.action');\r\n const result = await getUserDataAction();\r\n return result.success && result.data ? result.data : null;\r\n}\r\n\r\nasync function validateUserSession(): Promise<boolean> {\r\n const { validateSessionAction } = await import('../actions/validate-session.action');\r\n return await validateSessionAction();\r\n}\r\n\r\nexport function useUserQuery() {\r\n return useQuery({\r\n queryKey: USER_QUERY_KEY,\r\n queryFn: fetchUser,\r\n staleTime: 5 * 60 * 1000,\r\n gcTime: 10 * 60 * 1000,\r\n retry: false,\r\n });\r\n}\r\n\r\nexport function useUserValidateSession(options?: UseQueryOptions) {\r\n return useQuery({\r\n queryKey: ['user-validate-session'],\r\n queryFn: validateUserSession,\r\n retry: false,\r\n staleTime: 5 * 60 * 1000,\r\n ...options,\r\n refetchOnMount: 'always',\r\n refetchOnWindowFocus: true,\r\n });\r\n}\r\n\r\nexport function useInvalidateUser() {\r\n const queryClient = useQueryClient();\r\n return () => queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });\r\n}\r\n\r\nexport function useSetUserData() {\r\n const queryClient = useQueryClient();\r\n return (user: User | null) => queryClient.setQueryData(USER_QUERY_KEY, user);\r\n}\r\n"],"mappings":";AAEA,SAAS,UAAU,sBAAuC;AAGnD,MAAM,iBAAiB,CAAC,MAAM;AAErC,eAAe,YAAkC;AAC/C,QAAM,EAAE,cAAc,kBAAkB,IAAI,MAAM,OAAO,2CAA2C;AACpG,QAAM,SAAS,MAAM,kBAAkB;AACvC,SAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO;AACvD;AAEA,eAAe,sBAAwC;AACrD,QAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,oCAAoC;AACnF,SAAO,MAAM,sBAAsB;AACrC;AAEO,SAAS,eAAe;AAC7B,SAAO,SAAS;AAAA,IACd,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW,IAAI,KAAK;AAAA,IACpB,QAAQ,KAAK,KAAK;AAAA,IAClB,OAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,uBAAuB,SAA2B;AAChE,SAAO,SAAS;AAAA,IACd,UAAU,CAAC,uBAAuB;AAAA,IAClC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,WAAW,IAAI,KAAK;AAAA,IACpB,GAAG;AAAA,IACH,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB,CAAC;AACH;AAEO,SAAS,oBAAoB;AAClC,QAAM,cAAc,eAAe;AACnC,SAAO,MAAM,YAAY,kBAAkB,EAAE,UAAU,eAAe,CAAC;AACzE;AAEO,SAAS,iBAAiB;AAC/B,QAAM,cAAc,eAAe;AACnC,SAAO,CAAC,SAAsB,YAAY,aAAa,gBAAgB,IAAI;AAC7E;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,163 @@
1
+ import "server-only";
2
+ import { cookies } from "next/headers";
3
+ import { apiClient } from "../../../infra/api/client";
4
+ import { ApiError } from "../../../infra/api/types";
5
+ const AUTH_COOKIE_NAME = "greatapps";
6
+ const COOKIE_MAX_AGE = 60 * 60 * 24 * 30;
7
+ async function setAuthCookie(token) {
8
+ const cookieStore = await cookies();
9
+ cookieStore.set(AUTH_COOKIE_NAME, token, {
10
+ httpOnly: true,
11
+ secure: process.env.NODE_ENV === "production",
12
+ sameSite: "lax",
13
+ maxAge: COOKIE_MAX_AGE,
14
+ path: "/"
15
+ });
16
+ }
17
+ async function removeAuthCookie() {
18
+ const cookieStore = await cookies();
19
+ cookieStore.delete(AUTH_COOKIE_NAME);
20
+ }
21
+ async function getAuthCookie() {
22
+ const cookieStore = await cookies();
23
+ return cookieStore.get(AUTH_COOKIE_NAME)?.value;
24
+ }
25
+ class AuthService {
26
+ async login(credentials, clientInfo) {
27
+ const response = await apiClient.post("/auth/login", {
28
+ email: credentials.email,
29
+ password: credentials.password,
30
+ location: clientInfo.location,
31
+ ip: clientInfo.ip,
32
+ timezone: clientInfo.timezone,
33
+ agent: clientInfo.agent
34
+ });
35
+ if (response.status === 0) {
36
+ throw new ApiError(response.message || "E-mail ou senha incorretos", "LOGIN_FAILED", 401);
37
+ }
38
+ if (!response.cookie) {
39
+ throw new ApiError("Resposta de autentica\xE7\xE3o inv\xE1lida", "INVALID_RESPONSE", 500);
40
+ }
41
+ await setAuthCookie(response.cookie);
42
+ return {
43
+ user: {},
44
+ // Placeholder, será preenchido pelo AuthProvider
45
+ accessToken: response.cookie,
46
+ refreshToken: "",
47
+ expiresAt: new Date(Date.now() + COOKIE_MAX_AGE * 1e3).toISOString()
48
+ };
49
+ }
50
+ async register(data) {
51
+ const today = /* @__PURE__ */ new Date();
52
+ const trialEndDate = new Date(today);
53
+ trialEndDate.setDate(today.getDate() + 7);
54
+ const payload = {
55
+ name: data.accountName,
56
+ bussiness_type: data.businessType,
57
+ language: "pt-br",
58
+ timezone: "America/Sao_Paulo",
59
+ currency: "BRL",
60
+ user: {
61
+ id_api: "",
62
+ name: data.name,
63
+ last_name: data.lastName || "",
64
+ rg: data.rg || "",
65
+ cpf: data.cpf || "",
66
+ gender: data.gender,
67
+ email: data.email,
68
+ phone: data.phone,
69
+ password: data.password,
70
+ profile: "owner",
71
+ language: "pt-br"
72
+ },
73
+ subscription: {
74
+ type: "trial",
75
+ id_cupom: "",
76
+ id_plan: 1,
77
+ due_date: trialEndDate.toISOString().split("T")[0],
78
+ id_product: 1
79
+ }
80
+ };
81
+ const response = await apiClient.post("/accounts", payload);
82
+ if (response.status === 0) {
83
+ throw new ApiError(response.message || "Erro ao criar conta", "REGISTER_FAILED", 400);
84
+ }
85
+ if (!response.data || response.data.length === 0) {
86
+ throw new ApiError("Resposta de registro inv\xE1lida", "INVALID_RESPONSE", 500);
87
+ }
88
+ const accountData = response.data[0];
89
+ return {
90
+ user: {},
91
+ // Placeholder, será preenchido após login
92
+ accessToken: "",
93
+ refreshToken: "",
94
+ expiresAt: new Date(Date.now() + COOKIE_MAX_AGE * 1e3).toISOString(),
95
+ requiresEmailVerification: !accountData.verified
96
+ };
97
+ }
98
+ async logout(clientInfo) {
99
+ const cookie = await getAuthCookie();
100
+ if (!cookie) {
101
+ throw new ApiError("Usu\xE1rio n\xE3o autenticado", "NOT_AUTHENTICATED", 401);
102
+ }
103
+ const payload = {
104
+ location: clientInfo.location,
105
+ ip: clientInfo.ip,
106
+ timezone: clientInfo.timezone,
107
+ agent: clientInfo.agent,
108
+ cookie
109
+ };
110
+ const response = await apiClient.post("/auth/logout", payload);
111
+ if (response.status === 0) {
112
+ throw new ApiError(response.message || "Erro ao realizar logout", "LOGOUT_FAILED", 400);
113
+ }
114
+ await removeAuthCookie();
115
+ return {
116
+ success: true
117
+ };
118
+ }
119
+ async forgotPassword(_data) {
120
+ throw new ApiError("Recupera\xE7\xE3o de senha n\xE3o implementada", "NOT_IMPLEMENTED", 501);
121
+ }
122
+ async resetPassword(_data) {
123
+ throw new ApiError("Redefini\xE7\xE3o de senha n\xE3o implementada", "NOT_IMPLEMENTED", 501);
124
+ }
125
+ async verifyEmail(_data) {
126
+ throw new ApiError("Verifica\xE7\xE3o de email n\xE3o implementada", "NOT_IMPLEMENTED", 501);
127
+ }
128
+ async resendVerification(_data) {
129
+ throw new ApiError("Reenvio de verifica\xE7\xE3o n\xE3o implementado", "NOT_IMPLEMENTED", 501);
130
+ }
131
+ async validateSession(clientInfo) {
132
+ const cookie = await getAuthCookie();
133
+ if (!cookie) {
134
+ return false;
135
+ }
136
+ try {
137
+ const payload = {
138
+ location: clientInfo.location,
139
+ ip: clientInfo.ip,
140
+ timezone: clientInfo.timezone,
141
+ agent: clientInfo.agent,
142
+ cookie
143
+ };
144
+ const response = await apiClient.post("/auth/keep", payload);
145
+ return response.status === 1;
146
+ } catch (error) {
147
+ console.error("[AuthService] validateSession error", error);
148
+ return false;
149
+ }
150
+ }
151
+ async isAuthenticated() {
152
+ const token = await getAuthCookie();
153
+ return !!token;
154
+ }
155
+ async getToken() {
156
+ return getAuthCookie();
157
+ }
158
+ }
159
+ const authService = new AuthService();
160
+ export {
161
+ authService
162
+ };
163
+ //# sourceMappingURL=auth.service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/services/auth.service.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport { cookies } from 'next/headers';\r\n\r\nimport { apiClient } from '../../../infra/api/client';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { User } from '../../users/schema';\r\nimport {\r\n ClientInfo,\r\n ForgotPasswordRequest,\r\n ForgotPasswordResponse,\r\n GeoLocation,\r\n LoginApiResponse,\r\n LoginRequest,\r\n LoginResponse,\r\n LogoutApiResponse,\r\n LogoutRequest,\r\n LogoutResponse,\r\n RegisterApiRequest,\r\n RegisterApiResponse,\r\n RegisterRequest,\r\n RegisterResponse,\r\n ResendVerificationRequest,\r\n ResendVerificationResponse,\r\n ResetPasswordRequest,\r\n ResetPasswordResponse,\r\n SessionKeepRequest,\r\n SessionKeepResponse,\r\n VerifyEmailRequest,\r\n VerifyEmailResponse,\r\n} from '../schema';\r\n\r\nconst AUTH_COOKIE_NAME = 'greatapps';\r\nconst COOKIE_MAX_AGE = 60 * 60 * 24 * 30;\r\n\r\nasync function setAuthCookie(token: string): Promise<void> {\r\n const cookieStore = await cookies();\r\n cookieStore.set(AUTH_COOKIE_NAME, token, {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === 'production',\r\n sameSite: 'lax',\r\n maxAge: COOKIE_MAX_AGE,\r\n path: '/',\r\n });\r\n}\r\n\r\nasync function removeAuthCookie(): Promise<void> {\r\n const cookieStore = await cookies();\r\n cookieStore.delete(AUTH_COOKIE_NAME);\r\n}\r\n\r\nasync function getAuthCookie(): Promise<string | undefined> {\r\n const cookieStore = await cookies();\r\n return cookieStore.get(AUTH_COOKIE_NAME)?.value;\r\n}\r\n\r\nclass AuthService {\r\n async login(credentials: LoginRequest, clientInfo: ClientInfo): Promise<LoginResponse> {\r\n const response = await apiClient.post<LoginApiResponse>('/auth/login', {\r\n email: credentials.email,\r\n password: credentials.password,\r\n location: clientInfo.location,\r\n ip: clientInfo.ip,\r\n timezone: clientInfo.timezone,\r\n agent: clientInfo.agent,\r\n });\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(response.message || 'E-mail ou senha incorretos', 'LOGIN_FAILED', 401);\r\n }\r\n\r\n if (!response.cookie) {\r\n throw new ApiError('Resposta de autenticação inválida', 'INVALID_RESPONSE', 500);\r\n }\r\n\r\n await setAuthCookie(response.cookie);\r\n\r\n // O usuário completo será carregado pelo AuthProvider via getUserDataAction\r\n return {\r\n user: {} as User, // Placeholder, será preenchido pelo AuthProvider\r\n accessToken: response.cookie,\r\n refreshToken: '',\r\n expiresAt: new Date(Date.now() + COOKIE_MAX_AGE * 1000).toISOString(),\r\n };\r\n }\r\n\r\n async register(data: RegisterRequest): Promise<RegisterResponse> {\r\n const today = new Date();\r\n const trialEndDate = new Date(today);\r\n trialEndDate.setDate(today.getDate() + 7); // 7 dias de trial\r\n\r\n const payload: RegisterApiRequest = {\r\n name: data.accountName,\r\n bussiness_type: data.businessType,\r\n language: 'pt-br',\r\n timezone: 'America/Sao_Paulo',\r\n currency: 'BRL',\r\n user: {\r\n id_api: '',\r\n name: data.name,\r\n last_name: data.lastName || '',\r\n rg: data.rg || '',\r\n cpf: data.cpf || '',\r\n gender: data.gender,\r\n email: data.email,\r\n phone: data.phone,\r\n password: data.password,\r\n profile: 'owner',\r\n language: 'pt-br',\r\n },\r\n subscription: {\r\n type: 'trial',\r\n id_cupom: '',\r\n id_plan: 1,\r\n due_date: trialEndDate.toISOString().split('T')[0],\r\n id_product: 1,\r\n },\r\n };\r\n\r\n const response = await apiClient.post<RegisterApiResponse>('/accounts', payload);\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(response.message || 'Erro ao criar conta', 'REGISTER_FAILED', 400);\r\n }\r\n\r\n if (!response.data || response.data.length === 0) {\r\n throw new ApiError('Resposta de registro inválida', 'INVALID_RESPONSE', 500);\r\n }\r\n\r\n const accountData = response.data[0];\r\n\r\n // Retornar sem token pois o registro não retorna cookie diretamente\r\n // O usuário precisará fazer login após o registro\r\n // O usuário completo será carregado após o login\r\n return {\r\n user: {} as User, // Placeholder, será preenchido após login\r\n accessToken: '',\r\n refreshToken: '',\r\n expiresAt: new Date(Date.now() + COOKIE_MAX_AGE * 1000).toISOString(),\r\n requiresEmailVerification: !accountData.verified,\r\n };\r\n }\r\n\r\n async logout(clientInfo: ClientInfo): Promise<LogoutResponse> {\r\n const cookie = await getAuthCookie();\r\n\r\n if (!cookie) {\r\n throw new ApiError('Usuário não autenticado', 'NOT_AUTHENTICATED', 401);\r\n }\r\n\r\n const payload: LogoutRequest = {\r\n location: clientInfo.location,\r\n ip: clientInfo.ip,\r\n timezone: clientInfo.timezone,\r\n agent: clientInfo.agent,\r\n cookie,\r\n };\r\n\r\n const response = await apiClient.post<LogoutApiResponse>('/auth/logout', payload);\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(response.message || 'Erro ao realizar logout', 'LOGOUT_FAILED', 400);\r\n }\r\n\r\n await removeAuthCookie();\r\n\r\n return {\r\n success: true,\r\n };\r\n }\r\n\r\n async forgotPassword(_data: ForgotPasswordRequest): Promise<ForgotPasswordResponse> {\r\n throw new ApiError('Recuperação de senha não implementada', 'NOT_IMPLEMENTED', 501);\r\n }\r\n\r\n async resetPassword(_data: ResetPasswordRequest): Promise<ResetPasswordResponse> {\r\n throw new ApiError('Redefinição de senha não implementada', 'NOT_IMPLEMENTED', 501);\r\n }\r\n\r\n async verifyEmail(_data: VerifyEmailRequest): Promise<VerifyEmailResponse> {\r\n throw new ApiError('Verificação de email não implementada', 'NOT_IMPLEMENTED', 501);\r\n }\r\n\r\n async resendVerification(_data: ResendVerificationRequest): Promise<ResendVerificationResponse> {\r\n throw new ApiError('Reenvio de verificação não implementado', 'NOT_IMPLEMENTED', 501);\r\n }\r\n\r\n async validateSession(clientInfo: ClientInfo): Promise<boolean> {\r\n const cookie = await getAuthCookie();\r\n\r\n if (!cookie) {\r\n return false;\r\n }\r\n\r\n try {\r\n const payload: SessionKeepRequest = {\r\n location: clientInfo.location,\r\n ip: clientInfo.ip,\r\n timezone: clientInfo.timezone,\r\n agent: clientInfo.agent,\r\n cookie,\r\n };\r\n\r\n const response = await apiClient.post<SessionKeepResponse>('/auth/keep', payload);\r\n\r\n return response.status === 1;\r\n } catch (error) {\r\n console.error('[AuthService] validateSession error', error);\r\n return false;\r\n }\r\n }\r\n\r\n async isAuthenticated(): Promise<boolean> {\r\n const token = await getAuthCookie();\r\n return !!token;\r\n }\r\n\r\n async getToken(): Promise<string | undefined> {\r\n return getAuthCookie();\r\n }\r\n}\r\n\r\nexport const authService = new AuthService();\r\n\r\nexport type { ClientInfo, GeoLocation };\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,21 @@
1
+ "use server";
2
+ import { userService } from "../services/user.service";
3
+ async function findUserById() {
4
+ try {
5
+ const user = await userService.findById();
6
+ return {
7
+ success: true,
8
+ data: user
9
+ };
10
+ } catch (error) {
11
+ console.error("[findUserById] Error:", error);
12
+ return {
13
+ success: false,
14
+ error: error instanceof Error ? error.message : "Erro desconhecido"
15
+ };
16
+ }
17
+ }
18
+ export {
19
+ findUserById
20
+ };
21
+ //# sourceMappingURL=find-user-by-id.action.mjs.map