@greatapps/common 1.1.138 → 1.1.140

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 (392) hide show
  1. package/dist/components/account/AccountModals.mjs +18 -0
  2. package/dist/components/account/AccountModals.mjs.map +1 -0
  3. package/dist/components/account/ConfigurationsMyAccountModal.mjs +132 -0
  4. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -0
  5. package/dist/components/account/ConfirmDeleteAccountModal.mjs +45 -0
  6. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -0
  7. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs +45 -0
  8. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -0
  9. package/dist/components/account/DeleteAccountModal.mjs +123 -0
  10. package/dist/components/account/DeleteAccountModal.mjs.map +1 -0
  11. package/dist/components/account/DisableTwoFactorAuthModal.mjs +67 -0
  12. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -0
  13. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs +42 -0
  14. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -0
  15. package/dist/components/account/TwoFactorAuthModal.mjs +190 -0
  16. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -0
  17. package/dist/components/account/constants.mjs +29 -0
  18. package/dist/components/account/constants.mjs.map +1 -0
  19. package/dist/components/account/hooks/useChangeEmailForm.mjs +53 -0
  20. package/dist/components/account/hooks/useChangeEmailForm.mjs.map +1 -0
  21. package/dist/components/account/hooks/useChangePasswordForm.mjs +47 -0
  22. package/dist/components/account/hooks/useChangePasswordForm.mjs.map +1 -0
  23. package/dist/components/account/hooks/useChangePhoneForm.mjs +64 -0
  24. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -0
  25. package/dist/components/account/hooks/useConfigurationsModal.mjs +33 -0
  26. package/dist/components/account/hooks/useConfigurationsModal.mjs.map +1 -0
  27. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs +54 -0
  28. package/dist/components/account/hooks/useDisableTwoFactorAuthForm.mjs.map +1 -0
  29. package/dist/components/account/hooks/useOtpVerification.mjs +94 -0
  30. package/dist/components/account/hooks/useOtpVerification.mjs.map +1 -0
  31. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs +80 -0
  32. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -0
  33. package/dist/components/account/sections/ChangeEmailModal.mjs +180 -0
  34. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -0
  35. package/dist/components/account/sections/ChangePasswordSection.mjs +64 -0
  36. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -0
  37. package/dist/components/account/sections/ChangePhoneModal.mjs +182 -0
  38. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -0
  39. package/dist/components/account/sections/MyProfileSection.mjs +303 -0
  40. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -0
  41. package/dist/components/account/sections/PreferencesSection.mjs +250 -0
  42. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -0
  43. package/dist/components/account/sections/SecuritySection.mjs +147 -0
  44. package/dist/components/account/sections/SecuritySection.mjs.map +1 -0
  45. package/dist/components/handlers/SearchParamsHandler.mjs +24 -0
  46. package/dist/components/handlers/SearchParamsHandler.mjs.map +1 -0
  47. package/dist/components/layouts/AppMobileNavBar.mjs +115 -0
  48. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -0
  49. package/dist/components/layouts/AppNavBar.mjs +49 -0
  50. package/dist/components/layouts/AppNavBar.mjs.map +1 -0
  51. package/dist/components/layouts/MainLayout.mjs +60 -0
  52. package/dist/components/layouts/MainLayout.mjs.map +1 -0
  53. package/dist/components/layouts/MdSideBarNavigation.mjs +54 -0
  54. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -0
  55. package/dist/components/layouts/NavBar.mjs +132 -0
  56. package/dist/components/layouts/NavBar.mjs.map +1 -0
  57. package/dist/components/layouts/NavBarItem.mjs +23 -0
  58. package/dist/components/layouts/NavBarItem.mjs.map +1 -0
  59. package/dist/components/layouts/NotificationsPopover.mjs +97 -0
  60. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -0
  61. package/dist/components/layouts/ProfilePopover.mjs +150 -0
  62. package/dist/components/layouts/ProfilePopover.mjs.map +1 -0
  63. package/dist/components/layouts/SideBarNavigation.mjs +22 -0
  64. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -0
  65. package/dist/components/layouts/UsersSelectorPopover.mjs +236 -0
  66. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -0
  67. package/dist/components/modals/ModalManager.mjs +19 -0
  68. package/dist/components/modals/ModalManager.mjs.map +1 -0
  69. package/dist/components/modals/Modals.mjs +20 -0
  70. package/dist/components/modals/Modals.mjs.map +1 -0
  71. package/dist/components/navigation/AppNavigation.mjs +30 -0
  72. package/dist/components/navigation/AppNavigation.mjs.map +1 -0
  73. package/dist/components/navigation/AppNavigationContext.mjs +13 -0
  74. package/dist/components/navigation/AppNavigationContext.mjs.map +1 -0
  75. package/dist/components/navigation/NavItem.mjs +35 -0
  76. package/dist/components/navigation/NavItem.mjs.map +1 -0
  77. package/dist/components/navigation/NavItemsContext.mjs +16 -0
  78. package/dist/components/navigation/NavItemsContext.mjs.map +1 -0
  79. package/dist/components/navigation/ProjectSelectorPopover.mjs +128 -0
  80. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -0
  81. package/dist/components/navigation/shells/DesktopShell.mjs +11 -0
  82. package/dist/components/navigation/shells/DesktopShell.mjs.map +1 -0
  83. package/dist/components/navigation/shells/MdShell.mjs +11 -0
  84. package/dist/components/navigation/shells/MdShell.mjs.map +1 -0
  85. package/dist/components/navigation/shells/MobileShell.mjs +27 -0
  86. package/dist/components/navigation/shells/MobileShell.mjs.map +1 -0
  87. package/dist/components/navigation/shells/TabsMobileShell.mjs +59 -0
  88. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -0
  89. package/dist/components/navigation/subcomponents/CreditsCard.mjs +30 -0
  90. package/dist/components/navigation/subcomponents/CreditsCard.mjs.map +1 -0
  91. package/dist/components/navigation/subcomponents/NavItems.mjs +25 -0
  92. package/dist/components/navigation/subcomponents/NavItems.mjs.map +1 -0
  93. package/dist/components/navigation/subcomponents/PlanCard.mjs +25 -0
  94. package/dist/components/navigation/subcomponents/PlanCard.mjs.map +1 -0
  95. package/dist/components/navigation/subcomponents/ProjectSelector.mjs +130 -0
  96. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -0
  97. package/dist/components/navigation/types.mjs +1 -0
  98. package/dist/components/pages/notifications/Notifications.mjs +156 -0
  99. package/dist/components/pages/notifications/Notifications.mjs.map +1 -0
  100. package/dist/components/ui/buttons/Button.mjs +52 -0
  101. package/dist/components/ui/buttons/Button.mjs.map +1 -0
  102. package/dist/components/ui/buttons/CancelButton.mjs +17 -0
  103. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -0
  104. package/dist/components/ui/buttons/CopyButton.mjs +42 -0
  105. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -0
  106. package/dist/components/ui/data-display/Accordion.mjs +76 -0
  107. package/dist/components/ui/data-display/Accordion.mjs.map +1 -0
  108. package/dist/components/ui/data-display/Badge.mjs +42 -0
  109. package/dist/components/ui/data-display/Badge.mjs.map +1 -0
  110. package/dist/components/ui/data-display/Card.mjs +92 -0
  111. package/dist/components/ui/data-display/Card.mjs.map +1 -0
  112. package/dist/components/ui/data-display/Pagination.mjs +118 -0
  113. package/dist/components/ui/data-display/Pagination.mjs.map +1 -0
  114. package/dist/components/ui/data-display/ScrollArea.mjs +62 -0
  115. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -0
  116. package/dist/components/ui/data-display/Separator.mjs +28 -0
  117. package/dist/components/ui/data-display/Separator.mjs.map +1 -0
  118. package/dist/components/ui/data-display/Table.mjs +116 -0
  119. package/dist/components/ui/data-display/Table.mjs.map +1 -0
  120. package/dist/components/ui/data-display/Tabs.mjs +69 -0
  121. package/dist/components/ui/data-display/Tabs.mjs.map +1 -0
  122. package/dist/components/ui/data-display/UserAvatar.mjs +49 -0
  123. package/dist/components/ui/data-display/UserAvatar.mjs.map +1 -0
  124. package/dist/components/ui/feedback/CircularProgress.mjs +71 -0
  125. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -0
  126. package/dist/components/ui/feedback/DefaultCircularProgress.mjs +50 -0
  127. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -0
  128. package/dist/components/ui/feedback/LoadingOverlay.mjs +19 -0
  129. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -0
  130. package/dist/components/ui/feedback/Progress.mjs +37 -0
  131. package/dist/components/ui/feedback/Progress.mjs.map +1 -0
  132. package/dist/components/ui/feedback/Toast.mjs +77 -0
  133. package/dist/components/ui/feedback/Toast.mjs.map +1 -0
  134. package/dist/components/ui/form/Calendar.mjs +204 -0
  135. package/dist/components/ui/form/Calendar.mjs.map +1 -0
  136. package/dist/components/ui/form/Checkbox.mjs +33 -0
  137. package/dist/components/ui/form/Checkbox.mjs.map +1 -0
  138. package/dist/components/ui/form/ComboboxField.mjs +130 -0
  139. package/dist/components/ui/form/ComboboxField.mjs.map +1 -0
  140. package/dist/components/ui/form/DatePicker.mjs +82 -0
  141. package/dist/components/ui/form/DatePicker.mjs.map +1 -0
  142. package/dist/components/ui/form/DateRangePicker.mjs +92 -0
  143. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -0
  144. package/dist/components/ui/form/FormField.mjs +103 -0
  145. package/dist/components/ui/form/FormField.mjs.map +1 -0
  146. package/dist/components/ui/form/Input.mjs +21 -0
  147. package/dist/components/ui/form/Input.mjs.map +1 -0
  148. package/dist/components/ui/form/InputOtp.mjs +70 -0
  149. package/dist/components/ui/form/InputOtp.mjs.map +1 -0
  150. package/dist/components/ui/form/PhoneInput.mjs +78 -0
  151. package/dist/components/ui/form/PhoneInput.mjs.map +1 -0
  152. package/dist/components/ui/form/RadioGroup.mjs +37 -0
  153. package/dist/components/ui/form/RadioGroup.mjs.map +1 -0
  154. package/dist/components/ui/form/Select.mjs +179 -0
  155. package/dist/components/ui/form/Select.mjs.map +1 -0
  156. package/dist/components/ui/form/SelectField.mjs +80 -0
  157. package/dist/components/ui/form/SelectField.mjs.map +1 -0
  158. package/dist/components/ui/form/Switch.mjs +33 -0
  159. package/dist/components/ui/form/Switch.mjs.map +1 -0
  160. package/dist/components/ui/form/SwitchOptionFieldWithIcon.mjs +40 -0
  161. package/dist/components/ui/form/SwitchOptionFieldWithIcon.mjs.map +1 -0
  162. package/dist/components/ui/form/TextAreaField.mjs +56 -0
  163. package/dist/components/ui/form/TextAreaField.mjs.map +1 -0
  164. package/dist/components/ui/form/Textarea.mjs +20 -0
  165. package/dist/components/ui/form/Textarea.mjs.map +1 -0
  166. package/dist/components/ui/overlay/Command.mjs +178 -0
  167. package/dist/components/ui/overlay/Command.mjs.map +1 -0
  168. package/dist/components/ui/overlay/Dialog.mjs +142 -0
  169. package/dist/components/ui/overlay/Dialog.mjs.map +1 -0
  170. package/dist/components/ui/overlay/Popover.mjs +46 -0
  171. package/dist/components/ui/overlay/Popover.mjs.map +1 -0
  172. package/dist/components/ui/overlay/Sheet.mjs +142 -0
  173. package/dist/components/ui/overlay/Sheet.mjs.map +1 -0
  174. package/dist/components/ui/overlay/Tooltip.mjs +57 -0
  175. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -0
  176. package/dist/components/widgets/notifications/NotificationCard.mjs +54 -0
  177. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -0
  178. package/dist/enums/AccountSectionType.mjs +11 -0
  179. package/dist/enums/AccountSectionType.mjs.map +1 -0
  180. package/dist/hooks/copy-to-clipboard.hook.mjs +52 -0
  181. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -0
  182. package/dist/hooks/useCountdownTimer.mjs +29 -0
  183. package/dist/hooks/useCountdownTimer.mjs.map +1 -0
  184. package/dist/hooks/useDebounce.mjs +19 -0
  185. package/dist/hooks/useDebounce.mjs.map +1 -0
  186. package/dist/hooks/useDebounceState.mjs +12 -0
  187. package/dist/hooks/useDebounceState.mjs.map +1 -0
  188. package/dist/hooks/useDebouncedEffect.mjs +44 -0
  189. package/dist/hooks/useDebouncedEffect.mjs.map +1 -0
  190. package/dist/hooks/useIsMobile.mjs +18 -0
  191. package/dist/hooks/useIsMobile.mjs.map +1 -0
  192. package/dist/hooks/usePasswordVisibility.mjs +13 -0
  193. package/dist/hooks/usePasswordVisibility.mjs.map +1 -0
  194. package/dist/index.mjs +259 -9841
  195. package/dist/index.mjs.map +1 -1
  196. package/dist/{chunk-R2FMWFY6.mjs → infra/api/client.mjs} +10 -14
  197. package/dist/infra/api/client.mjs.map +1 -0
  198. package/dist/infra/api/types.mjs +31 -0
  199. package/dist/infra/api/types.mjs.map +1 -0
  200. package/dist/infra/utils/client-info.mjs +27 -0
  201. package/dist/infra/utils/client-info.mjs.map +1 -0
  202. package/dist/infra/utils/clsx.mjs +9 -0
  203. package/dist/infra/utils/clsx.mjs.map +1 -0
  204. package/dist/infra/utils/params.mjs +21 -0
  205. package/dist/infra/utils/params.mjs.map +1 -0
  206. package/dist/infra/utils/parser.mjs +24 -0
  207. package/dist/infra/utils/parser.mjs.map +1 -0
  208. package/dist/infra/utils/percentage.mjs +20 -0
  209. package/dist/infra/utils/percentage.mjs.map +1 -0
  210. package/dist/middleware.mjs +3 -69
  211. package/dist/middleware.mjs.map +1 -1
  212. package/dist/middlewares/chain.mjs +37 -0
  213. package/dist/middlewares/chain.mjs.map +1 -0
  214. package/dist/middlewares/create-auth-middleware.mjs +28 -0
  215. package/dist/middlewares/create-auth-middleware.mjs.map +1 -0
  216. package/dist/middlewares/types.mjs +11 -0
  217. package/dist/middlewares/types.mjs.map +1 -0
  218. package/dist/modules/accounts/actions/account-management.action.mjs +82 -0
  219. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -0
  220. package/dist/modules/accounts/actions/find-current-account.action.mjs +10 -0
  221. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -0
  222. package/dist/modules/accounts/actions/list-currencies.action.mjs +10 -0
  223. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -0
  224. package/dist/modules/accounts/actions/list-timezones.action.mjs +10 -0
  225. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -0
  226. package/dist/modules/accounts/hooks/current-account.hook.mjs +24 -0
  227. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -0
  228. package/dist/modules/accounts/hooks/useAccountManagement.mjs +71 -0
  229. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -0
  230. package/dist/modules/accounts/hooks/useCurrencies.mjs +17 -0
  231. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -0
  232. package/dist/modules/accounts/hooks/useTimezones.mjs +17 -0
  233. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -0
  234. package/dist/{chunk-EDTDKGI5.mjs → modules/accounts/services/account.service.mjs} +9 -65
  235. package/dist/modules/accounts/services/account.service.mjs.map +1 -0
  236. package/dist/modules/accounts/services/currency.service.mjs +24 -0
  237. package/dist/modules/accounts/services/currency.service.mjs.map +1 -0
  238. package/dist/modules/accounts/services/timezone.service.mjs +65 -0
  239. package/dist/modules/accounts/services/timezone.service.mjs.map +1 -0
  240. package/dist/modules/accounts/services/two-factor.service.mjs +77 -0
  241. package/dist/modules/accounts/services/two-factor.service.mjs.map +1 -0
  242. package/dist/modules/accounts/types.mjs +1 -0
  243. package/dist/modules/auth/actions/login.action.mjs +14 -0
  244. package/dist/modules/auth/actions/login.action.mjs.map +1 -0
  245. package/dist/modules/auth/actions/logout.action.mjs +14 -0
  246. package/dist/modules/auth/actions/logout.action.mjs.map +1 -0
  247. package/dist/modules/auth/actions/register.action.mjs +14 -0
  248. package/dist/modules/auth/actions/register.action.mjs.map +1 -0
  249. package/dist/{validate-session.action-TMZN36SG.mjs → modules/auth/actions/validate-session.action.mjs} +3 -10
  250. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -0
  251. package/dist/{verify-two-factor.action-IQM6SU5U.mjs → modules/auth/actions/verify-two-factor.action.mjs} +4 -13
  252. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -0
  253. package/dist/modules/auth/hooks/login.hook.mjs +18 -0
  254. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -0
  255. package/dist/modules/auth/hooks/logout.hook.mjs +13 -0
  256. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -0
  257. package/dist/modules/auth/hooks/register.hook.mjs +13 -0
  258. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -0
  259. package/dist/modules/auth/hooks/useUserQuery.mjs +63 -0
  260. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -0
  261. package/dist/modules/auth/schema.mjs +1 -0
  262. package/dist/{chunk-I26OTCGJ.mjs → modules/auth/services/auth.service.mjs} +13 -47
  263. package/dist/modules/auth/services/auth.service.mjs.map +1 -0
  264. package/dist/modules/auth/utils/get-user-context.mjs +24 -0
  265. package/dist/modules/auth/utils/get-user-context.mjs.map +1 -0
  266. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs +10 -0
  267. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -0
  268. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs +76 -0
  269. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -0
  270. package/dist/modules/ia-credits/services/ia-credits.service.mjs +31 -0
  271. package/dist/modules/ia-credits/services/ia-credits.service.mjs.map +1 -0
  272. package/dist/modules/ia-credits/types.mjs +25 -0
  273. package/dist/modules/ia-credits/types.mjs.map +1 -0
  274. package/dist/modules/projects/actions/add-project-user.action.mjs +10 -0
  275. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -0
  276. package/dist/modules/projects/actions/list-available-users.action.mjs +10 -0
  277. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -0
  278. package/dist/modules/projects/actions/list-project-users.action.mjs +10 -0
  279. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -0
  280. package/dist/modules/projects/actions/remove-project-user.action.mjs +10 -0
  281. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -0
  282. package/dist/modules/projects/hooks/list-available-users.hook.mjs +34 -0
  283. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -0
  284. package/dist/modules/projects/hooks/list-project-users.hook.mjs +34 -0
  285. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -0
  286. package/dist/modules/projects/services/project-users.service.mjs +78 -0
  287. package/dist/modules/projects/services/project-users.service.mjs.map +1 -0
  288. package/dist/modules/projects/types.mjs +22 -0
  289. package/dist/modules/projects/types.mjs.map +1 -0
  290. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs +10 -0
  291. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -0
  292. package/dist/modules/subscriptions/constants/addons.constants.mjs +12 -0
  293. package/dist/modules/subscriptions/constants/addons.constants.mjs.map +1 -0
  294. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs +20 -0
  295. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -0
  296. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs +18 -0
  297. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -0
  298. package/dist/modules/subscriptions/services/subscriptions.service.mjs +32 -0
  299. package/dist/modules/subscriptions/services/subscriptions.service.mjs.map +1 -0
  300. package/dist/modules/subscriptions/types.mjs +57 -0
  301. package/dist/modules/subscriptions/types.mjs.map +1 -0
  302. package/dist/modules/users/action/find-user-by-id.action.mjs +10 -0
  303. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -0
  304. package/dist/modules/users/action/list-messages.action.mjs +13 -0
  305. package/dist/modules/users/action/list-messages.action.mjs.map +1 -0
  306. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs +10 -0
  307. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -0
  308. package/dist/modules/users/action/mark-message-as-read.action.mjs +10 -0
  309. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -0
  310. package/dist/modules/users/hooks/messages.hook.mjs +57 -0
  311. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -0
  312. package/dist/modules/users/schema/messages.schema.mjs +21 -0
  313. package/dist/modules/users/schema/messages.schema.mjs.map +1 -0
  314. package/dist/modules/users/schema.mjs +11 -0
  315. package/dist/modules/users/schema.mjs.map +1 -0
  316. package/dist/modules/users/services/messages.service.mjs +35 -0
  317. package/dist/modules/users/services/messages.service.mjs.map +1 -0
  318. package/dist/{chunk-ZQZNWUKB.mjs → modules/users/services/user.service.mjs} +8 -14
  319. package/dist/modules/users/services/user.service.mjs.map +1 -0
  320. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs +15 -0
  321. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -0
  322. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs +21 -0
  323. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -0
  324. package/dist/modules/whitelabel/schema.mjs +1 -0
  325. package/dist/modules/whitelabel/schema.mjs.map +1 -0
  326. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs +76 -0
  327. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -0
  328. package/dist/{chunk-4IBSIBU6.mjs → modules/whitelabel/services/whitelabel.service.mjs} +9 -60
  329. package/dist/modules/whitelabel/services/whitelabel.service.mjs.map +1 -0
  330. package/dist/modules/whitelabel/styles-schema.mjs +1 -0
  331. package/dist/modules/whitelabel/styles-schema.mjs.map +1 -0
  332. package/dist/providers/auth.provider.mjs +94 -0
  333. package/dist/providers/auth.provider.mjs.map +1 -0
  334. package/dist/providers/query.provider.mjs +99 -0
  335. package/dist/providers/query.provider.mjs.map +1 -0
  336. package/dist/providers/whitelabel.provider.mjs +31 -0
  337. package/dist/providers/whitelabel.provider.mjs.map +1 -0
  338. package/dist/server.mjs +40 -1445
  339. package/dist/server.mjs.map +1 -1
  340. package/dist/store/useAccountModals.mjs +18 -0
  341. package/dist/store/useAccountModals.mjs.map +1 -0
  342. package/dist/store/useMdSidebarStore.mjs +11 -0
  343. package/dist/store/useMdSidebarStore.mjs.map +1 -0
  344. package/dist/store/useMobileNavbarSheet.mjs +14 -0
  345. package/dist/store/useMobileNavbarSheet.mjs.map +1 -0
  346. package/dist/store/useModalManager.mjs +75 -0
  347. package/dist/store/useModalManager.mjs.map +1 -0
  348. package/dist/utils/browser/clipboard.mjs +36 -0
  349. package/dist/utils/browser/clipboard.mjs.map +1 -0
  350. package/dist/utils/file/index.mjs +9 -0
  351. package/dist/utils/file/index.mjs.map +1 -0
  352. package/dist/utils/format/masks.mjs +56 -0
  353. package/dist/utils/format/masks.mjs.map +1 -0
  354. package/dist/utils/intl/locales.mjs +12 -0
  355. package/dist/utils/intl/locales.mjs.map +1 -0
  356. package/dist/{chunk-MXQIEEP6.mjs → utils/safeServerAction.mjs} +2 -8
  357. package/dist/utils/safeServerAction.mjs.map +1 -0
  358. package/dist/utils/validators/account.mjs +26 -0
  359. package/dist/utils/validators/account.mjs.map +1 -0
  360. package/dist/utils/validators/common.mjs +47 -0
  361. package/dist/utils/validators/common.mjs.map +1 -0
  362. package/dist/utils/withAction.mjs +13 -0
  363. package/dist/utils/withAction.mjs.map +1 -0
  364. package/package.json +2 -1
  365. package/dist/MMQ4R4NB-HKE335ZM.mjs +0 -62
  366. package/dist/MMQ4R4NB-HKE335ZM.mjs.map +0 -1
  367. package/dist/V4HPSUGU-XMVFKNNR.mjs +0 -52
  368. package/dist/V4HPSUGU-XMVFKNNR.mjs.map +0 -1
  369. package/dist/account-management.action-4D4A3IPF.mjs +0 -41
  370. package/dist/account.service-FPMIFBBX.mjs +0 -10
  371. package/dist/chunk-4IBSIBU6.mjs.map +0 -1
  372. package/dist/chunk-CO6HSV2G.mjs +0 -165
  373. package/dist/chunk-CO6HSV2G.mjs.map +0 -1
  374. package/dist/chunk-EDTDKGI5.mjs.map +0 -1
  375. package/dist/chunk-I26OTCGJ.mjs.map +0 -1
  376. package/dist/chunk-MXQIEEP6.mjs.map +0 -1
  377. package/dist/chunk-OO354ZZZ.mjs +0 -12702
  378. package/dist/chunk-OO354ZZZ.mjs.map +0 -1
  379. package/dist/chunk-OXVONU6X.mjs +0 -2930
  380. package/dist/chunk-OXVONU6X.mjs.map +0 -1
  381. package/dist/chunk-R2FMWFY6.mjs.map +0 -1
  382. package/dist/chunk-ZQZNWUKB.mjs.map +0 -1
  383. package/dist/find-user-by-id.action-K7PB7IH6.mjs +0 -18
  384. package/dist/find-user-by-id.action-K7PB7IH6.mjs.map +0 -1
  385. package/dist/modern-P2CXBCGW.mjs +0 -427
  386. package/dist/modern-P2CXBCGW.mjs.map +0 -1
  387. package/dist/user.service-GCI4YGGI.mjs +0 -9
  388. package/dist/validate-session.action-TMZN36SG.mjs.map +0 -1
  389. package/dist/verify-two-factor.action-IQM6SU5U.mjs.map +0 -1
  390. /package/dist/{account-management.action-4D4A3IPF.mjs.map → components/navigation/types.mjs.map} +0 -0
  391. /package/dist/{account.service-FPMIFBBX.mjs.map → modules/accounts/types.mjs.map} +0 -0
  392. /package/dist/{user.service-GCI4YGGI.mjs.map → modules/auth/schema.mjs.map} +0 -0
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { registerAction } from "../actions/register.action";
4
+ import { withAction } from "../../../utils/withAction";
5
+ function useRegister() {
6
+ return useMutation({
7
+ mutationFn: withAction(registerAction)
8
+ });
9
+ }
10
+ export {
11
+ useRegister
12
+ };
13
+ //# 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\";\nimport { withAction } from \"../../../utils/withAction\";\n\nexport function useRegister() {\n return useMutation({\n mutationFn: withAction(registerAction),\n });\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAEpB,SAAS,cAAc;AAC5B,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,cAAc;AAAA,EACvC,CAAC;AACH;","names":[]}
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
3
+ import { withAction } from "../../../utils/withAction";
4
+ const USER_QUERY_KEY = ["user"];
5
+ async function fetchUser() {
6
+ const { findUserById: getUserDataAction } = await import("../../users/action/find-user-by-id.action");
7
+ const result = await getUserDataAction();
8
+ return result.success && result.data ? result.data : null;
9
+ }
10
+ async function validateUserSession() {
11
+ const { validateSessionAction } = await import("../actions/validate-session.action");
12
+ return await validateSessionAction();
13
+ }
14
+ function useUserQuery() {
15
+ return useQuery({
16
+ queryKey: USER_QUERY_KEY,
17
+ queryFn: fetchUser,
18
+ staleTime: 5 * 60 * 1e3,
19
+ gcTime: 10 * 60 * 1e3,
20
+ retry: false
21
+ });
22
+ }
23
+ function useUserValidateSession(options) {
24
+ return useQuery({
25
+ queryKey: ["user-validate-session"],
26
+ queryFn: validateUserSession,
27
+ retry: false,
28
+ staleTime: 5 * 60 * 1e3,
29
+ ...options,
30
+ refetchOnMount: "always",
31
+ refetchOnWindowFocus: true
32
+ });
33
+ }
34
+ function useTwoFactorVerify() {
35
+ const queryClient = useQueryClient();
36
+ return useMutation({
37
+ mutationFn: async ({ cookie, code }) => {
38
+ const { verifyTwoFactorAction } = await import("../actions/verify-two-factor.action");
39
+ return withAction(() => verifyTwoFactorAction(cookie, code))();
40
+ },
41
+ onSuccess: () => {
42
+ queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });
43
+ queryClient.invalidateQueries({ queryKey: ["two-factor-pending"] });
44
+ }
45
+ });
46
+ }
47
+ function useInvalidateUser() {
48
+ const queryClient = useQueryClient();
49
+ return () => queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });
50
+ }
51
+ function useSetUserData() {
52
+ const queryClient = useQueryClient();
53
+ return (user) => queryClient.setQueryData(USER_QUERY_KEY, user);
54
+ }
55
+ export {
56
+ USER_QUERY_KEY,
57
+ useInvalidateUser,
58
+ useSetUserData,
59
+ useTwoFactorVerify,
60
+ useUserQuery,
61
+ useUserValidateSession
62
+ };
63
+ //# sourceMappingURL=useUserQuery.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/useUserQuery.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useMutation, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query';\r\nimport { User } from '../../users/schema';\r\nimport { withAction } from '../../../utils/withAction';\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 useTwoFactorVerify() {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation({\r\n mutationFn: async ({ cookie, code }: { cookie: string; code: string }) => {\r\n const { verifyTwoFactorAction } = await import('../actions/verify-two-factor.action');\r\n return withAction(() => verifyTwoFactorAction(cookie, code))();\r\n },\r\n onSuccess: () => {\r\n queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });\r\n queryClient.invalidateQueries({ queryKey: ['two-factor-pending'] });\r\n },\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,aAAa,UAAU,sBAAuC;AAEvE,SAAS,kBAAkB;AAEpB,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,qBAAqB;AACnC,QAAM,cAAc,eAAe;AAEnC,SAAO,YAAY;AAAA,IACjB,YAAY,OAAO,EAAE,QAAQ,KAAK,MAAwC;AACxE,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,qCAAqC;AACpF,aAAO,WAAW,MAAM,sBAAsB,QAAQ,IAAI,CAAC,EAAE;AAAA,IAC/D;AAAA,IACA,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,eAAe,CAAC;AAC1D,kBAAY,kBAAkB,EAAE,UAAU,CAAC,oBAAoB,EAAE,CAAC;AAAA,IACpE;AAAA,EACF,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
@@ -1,23 +1,16 @@
1
- "use client";
2
- import {
3
- api
4
- } from "./chunk-R2FMWFY6.mjs";
5
- import {
6
- ApiError
7
- } from "./chunk-4IBSIBU6.mjs";
8
-
9
- // src/modules/auth/services/auth.service.ts
10
1
  import { cookies } from "next/headers";
11
- var AUTH_COOKIE_NAME = "greatapps";
12
- var COOKIE_MAX_AGE = 60 * 60 * 24 * 30;
13
- var COOKIE_OPTIONS = {
2
+ import { api } from "../../../infra/api/client";
3
+ import { ApiError } from "../../../infra/api/types";
4
+ const AUTH_COOKIE_NAME = "greatapps";
5
+ const COOKIE_MAX_AGE = 60 * 60 * 24 * 30;
6
+ const COOKIE_OPTIONS = {
14
7
  httpOnly: true,
15
8
  secure: process.env.NODE_ENV === "production",
16
9
  sameSite: "lax",
17
10
  path: "/",
18
11
  domain: process.env.DOMAIN_COOKIE
19
12
  };
20
- var AuthService = class {
13
+ class AuthService {
21
14
  async login(credentials, clientInfo) {
22
15
  const response = await api.apps.post("/auth/login", {
23
16
  email: credentials.email,
@@ -47,8 +40,8 @@ var AuthService = class {
47
40
  }
48
41
  await this.setAuthCookie(response.cookie);
49
42
  const [{ userService }, { accountService }] = await Promise.all([
50
- import("./user.service-GCI4YGGI.mjs"),
51
- import("./account.service-FPMIFBBX.mjs")
43
+ import("../../users/services/user.service"),
44
+ import("../../accounts/services/account.service")
52
45
  ]);
53
46
  const [user, account] = await Promise.all([
54
47
  userService.findById(),
@@ -148,8 +141,8 @@ var AuthService = class {
148
141
  const accountData = response.data[0];
149
142
  await this.setAuthCookie(response.cookie);
150
143
  const [{ userService }, { accountService }] = await Promise.all([
151
- import("./user.service-GCI4YGGI.mjs"),
152
- import("./account.service-FPMIFBBX.mjs")
144
+ import("../../users/services/user.service"),
145
+ import("../../accounts/services/account.service")
153
146
  ]);
154
147
  const [user, account] = await Promise.all([
155
148
  userService.findById(),
@@ -273,36 +266,9 @@ var AuthService = class {
273
266
  ...COOKIE_OPTIONS
274
267
  });
275
268
  }
276
- };
277
- var authService = new AuthService();
278
-
279
- // src/infra/utils/client-info.ts
280
- import { headers } from "next/headers";
281
- async function getClientInfoFromRequest(request) {
282
- let headerStore;
283
- if (request) {
284
- headerStore = request.headers;
285
- } else {
286
- const nextHeaders = await headers();
287
- headerStore = nextHeaders;
288
- }
289
- return {
290
- location: {
291
- continent: headerStore.get("cf-ipcountry") || headerStore.get("x-vercel-ip-country") || "Unknown",
292
- country: headerStore.get("x-vercel-ip-country") || "Unknown",
293
- region: headerStore.get("x-vercel-ip-country-region") || "Unknown",
294
- city: headerStore.get("x-vercel-ip-city") || "Unknown",
295
- latitude: headerStore.get("x-vercel-ip-latitude") || "0",
296
- longitude: headerStore.get("x-vercel-ip-longitude") || "0"
297
- },
298
- ip: headerStore.get("cf-connecting-ip") || headerStore.get("x-forwarded-for") || headerStore.get("x-real-ip") || "Unknown",
299
- timezone: headerStore.get("cf-timezone") || "America/Sao_Paulo",
300
- agent: headerStore.get("user-agent") || "Unknown"
301
- };
302
269
  }
303
-
270
+ const authService = new AuthService();
304
271
  export {
305
- authService,
306
- getClientInfoFromRequest
272
+ authService
307
273
  };
308
- //# sourceMappingURL=chunk-I26OTCGJ.mjs.map
274
+ //# sourceMappingURL=auth.service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/services/auth.service.ts"],"sourcesContent":["import { cookies } from \"next/headers\";\r\n\r\nimport { api } from \"../../../infra/api/client\";\r\nimport { ApiError } from \"../../../infra/api/types\";\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 TwoFactorApiResponse,\r\n TwoFactorRequest,\r\n TwoFactorResponse,\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\nconst COOKIE_OPTIONS = {\r\n httpOnly: true,\r\n secure: process.env.NODE_ENV === \"production\",\r\n sameSite: \"lax\" as const,\r\n path: \"/\",\r\n domain: process.env.DOMAIN_COOKIE,\r\n};\r\n\r\nclass AuthService {\r\n async login(\r\n credentials: LoginRequest,\r\n clientInfo: ClientInfo\r\n ): Promise<LoginResponse> {\r\n const response = await api.apps.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 console.log(\"[AuthService.login] response\", JSON.stringify(response));\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(\r\n response.message || \"E-mail ou senha incorretos\",\r\n response.code || \"LOGIN_FAILED\",\r\n 401\r\n );\r\n }\r\n\r\n if (!response.cookie) {\r\n throw new ApiError(\r\n \"Resposta de autenticação inválida\",\r\n \"INVALID_RESPONSE\",\r\n 500\r\n );\r\n }\r\n\r\n if (response.two_factor_required) {\r\n return { result: 'two_factor_required', cookie: response.cookie };\r\n }\r\n\r\n await this.setAuthCookie(response.cookie);\r\n\r\n const [{ userService }, { accountService }] = await Promise.all([\r\n import('../../users/services/user.service'),\r\n import('../../accounts/services/account.service'),\r\n ]);\r\n const [user, account] = await Promise.all([\r\n userService.findById(),\r\n accountService.findCurrentAccount(),\r\n ]);\r\n\r\n return {\r\n result: 'success',\r\n user,\r\n account,\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 verifyTwoFactor(\r\n cookie: string,\r\n code: string,\r\n clientInfo: ClientInfo\r\n ): Promise<TwoFactorResponse> {\r\n const payload: TwoFactorRequest = {\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 code,\r\n };\r\n\r\n const response = await api.apps.post<TwoFactorApiResponse>(\r\n \"/auth/code\",\r\n payload\r\n );\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(\"Código 2FA inválido\", \"TWO_FACTOR_FAILED\", 401);\r\n }\r\n\r\n if (!response?.data?.cookie) {\r\n throw new ApiError(\r\n \"Resposta de autenticação inválida após 2FA\",\r\n \"INVALID_RESPONSE\",\r\n 500\r\n );\r\n }\r\n\r\n await this.setAuthCookie(response.data.cookie);\r\n\r\n return { status: 1 };\r\n }\r\n async register(data: RegisterRequest, _clientInfo: ClientInfo): 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: data.couponCode || \"\",\r\n id_plan: data.idPlan || 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 api.apps.post<RegisterApiResponse>(\r\n \"/accounts\",\r\n payload\r\n );\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(\r\n response.message || \"Erro ao criar conta\",\r\n \"REGISTER_FAILED\",\r\n 400\r\n );\r\n }\r\n\r\n if (!response.data || response.data.length === 0) {\r\n throw new ApiError(\r\n \"Resposta de registro inválida\",\r\n \"INVALID_RESPONSE\",\r\n 500\r\n );\r\n }\r\n\r\n if (!response.cookie) {\r\n throw new ApiError(\r\n \"Resposta de autenticação inválida\",\r\n \"INVALID_RESPONSE\",\r\n 500\r\n );\r\n }\r\n\r\n const accountData = response.data[0];\r\n\r\n await this.setAuthCookie(response.cookie);\r\n\r\n const [{ userService }, { accountService }] = await Promise.all([\r\n import('../../users/services/user.service'),\r\n import('../../accounts/services/account.service'),\r\n ]);\r\n const [user, account] = await Promise.all([\r\n userService.findById(),\r\n accountService.findCurrentAccount(),\r\n ]);\r\n\r\n return {\r\n user,\r\n account,\r\n accessToken: response.cookie,\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 this.getToken();\r\n\r\n if (!cookie) {\r\n throw new ApiError(\r\n \"Usuário não autenticado\",\r\n \"NOT_AUTHENTICATED_LOGOUT\",\r\n 401\r\n );\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 try {\r\n const response = await api.apps.post<LogoutApiResponse>(\r\n \"/auth/logout\",\r\n payload\r\n );\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(\r\n response.message || \"Erro ao realizar logout\",\r\n response.code || \"LOGOUT_FAILED\",\r\n 400\r\n );\r\n }\r\n } finally {\r\n await this.removeAuthCookie();\r\n }\r\n\r\n return {\r\n success: true,\r\n };\r\n }\r\n\r\n async forgotPassword(\r\n _data: ForgotPasswordRequest\r\n ): Promise<ForgotPasswordResponse> {\r\n throw new ApiError(\r\n \"Recuperação de senha não implementada\",\r\n \"NOT_IMPLEMENTED\",\r\n 501\r\n );\r\n }\r\n\r\n async resetPassword(\r\n _data: ResetPasswordRequest\r\n ): Promise<ResetPasswordResponse> {\r\n throw new ApiError(\r\n \"Redefinição de senha não implementada\",\r\n \"NOT_IMPLEMENTED\",\r\n 501\r\n );\r\n }\r\n\r\n async verifyEmail(_data: VerifyEmailRequest): Promise<VerifyEmailResponse> {\r\n throw new ApiError(\r\n \"Verificação de email não implementada\",\r\n \"NOT_IMPLEMENTED\",\r\n 501\r\n );\r\n }\r\n\r\n async resendVerification(\r\n _data: ResendVerificationRequest\r\n ): Promise<ResendVerificationResponse> {\r\n throw new ApiError(\r\n \"Reenvio de verificação não implementado\",\r\n \"NOT_IMPLEMENTED\",\r\n 501\r\n );\r\n }\r\n\r\n async validateSession(clientInfo: ClientInfo): Promise<boolean> {\r\n const cookie = await this.getToken();\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 api.apps.post<SessionKeepResponse>(\r\n \"/auth/keep\",\r\n payload\r\n );\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 this.getToken();\r\n return !!token;\r\n }\r\n\r\n async getToken(): Promise<string | undefined> {\r\n if (process.env.DUMMY_AUTH_TOKEN) return process.env.DUMMY_AUTH_TOKEN;\r\n const cookieStore = await cookies();\r\n return cookieStore.get(AUTH_COOKIE_NAME)?.value;\r\n }\r\n\r\n private async setAuthCookie(token: string): Promise<void> {\r\n const cookieStore = await cookies();\r\n cookieStore.set(AUTH_COOKIE_NAME, token, {\r\n ...COOKIE_OPTIONS,\r\n maxAge: COOKIE_MAX_AGE,\r\n });\r\n }\r\n\r\n async removeAuthCookie(): Promise<void> {\r\n const cookieStore = await cookies();\r\n cookieStore.delete({\r\n name: AUTH_COOKIE_NAME,\r\n ...COOKIE_OPTIONS,\r\n });\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,24 @@
1
+ import "server-only";
2
+ import { cookies } from "next/headers";
3
+ import { ApiError } from "../../../infra/api/types";
4
+ const AUTH_COOKIE_NAME = "greatapps";
5
+ async function getUserContext() {
6
+ const cookieStore = await cookies();
7
+ const token = process.env.DUMMY_AUTH_TOKEN || cookieStore.get(AUTH_COOKIE_NAME)?.value;
8
+ if (!token) {
9
+ throw new ApiError("Usu\xE1rio n\xE3o autenticado", "NOT_AUTHENTICATED_GUC", 401);
10
+ }
11
+ try {
12
+ const payload = JSON.parse(atob(token.split(".")[1]));
13
+ return {
14
+ id_account: payload.id_account,
15
+ id_user: payload.id_user
16
+ };
17
+ } catch {
18
+ throw new ApiError("Token inv\xE1lido", "INVALID_TOKEN", 401);
19
+ }
20
+ }
21
+ export {
22
+ getUserContext
23
+ };
24
+ //# sourceMappingURL=get-user-context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/auth/utils/get-user-context.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport { cookies } from 'next/headers';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { JWTPayload } from '../../users/schema';\r\n\r\nconst AUTH_COOKIE_NAME = 'greatapps';\r\n\r\nexport async function getUserContext(): Promise<{\r\n id_account: number;\r\n id_user: number;\r\n}> {\r\n const cookieStore = await cookies();\r\n const token = process.env.DUMMY_AUTH_TOKEN || cookieStore.get(AUTH_COOKIE_NAME)?.value;\r\n\r\n if (!token) {\r\n throw new ApiError('Usuário não autenticado', 'NOT_AUTHENTICATED_GUC', 401);\r\n }\r\n\r\n try {\r\n const payload = JSON.parse(atob(token.split('.')[1])) as JWTPayload;\r\n\r\n return {\r\n id_account: payload.id_account,\r\n id_user: payload.id_user,\r\n };\r\n } catch {\r\n throw new ApiError('Token inválido', 'INVALID_TOKEN', 401);\r\n }\r\n}\r\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,eAAe;AACxB,SAAS,gBAAgB;AAGzB,MAAM,mBAAmB;AAEzB,eAAsB,iBAGnB;AACD,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,QAAQ,QAAQ,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,GAAG;AAEjF,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,SAAS,iCAA2B,yBAAyB,GAAG;AAAA,EAC5E;AAEA,MAAI;AACF,UAAM,UAAU,KAAK,MAAM,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAEpD,WAAO;AAAA,MACL,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,IACnB;AAAA,EACF,QAAQ;AACN,UAAM,IAAI,SAAS,qBAAkB,iBAAiB,GAAG;AAAA,EAC3D;AACF;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use server";
2
+ import { safeServerAction } from "../../../utils/safeServerAction";
3
+ import { iaCreditsService } from "../services/ia-credits.service";
4
+ async function listIaCreditsAction(subscriptionId) {
5
+ return safeServerAction(() => iaCreditsService.listOperations(subscriptionId));
6
+ }
7
+ export {
8
+ listIaCreditsAction
9
+ };
10
+ //# sourceMappingURL=list-ia-credits.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/ia-credits/actions/list-ia-credits.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { iaCreditsService } from '../services/ia-credits.service';\n\nexport async function listIaCreditsAction(subscriptionId: number | string) {\n return safeServerAction(() => iaCreditsService.listOperations(subscriptionId));\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAEjC,eAAsB,oBAAoB,gBAAiC;AACzE,SAAO,iBAAiB,MAAM,iBAAiB,eAAe,cAAc,CAAC;AAC/E;","names":[]}
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { useMemo } from "react";
3
+ import { useQuery } from "@tanstack/react-query";
4
+ import { listIaCreditsAction } from "../actions/list-ia-credits.action";
5
+ import { useActiveSubscription } from "../../subscriptions/hooks/find-active-subscription.hook";
6
+ import { withAction } from "../../../utils/withAction";
7
+ function calculateSummary(operations) {
8
+ const today = /* @__PURE__ */ new Date();
9
+ const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());
10
+ const adds = operations.filter((op) => op.operation === "add");
11
+ const subtracts = operations.filter((op) => op.operation === "subtract");
12
+ let totalCredits = 0;
13
+ let usedCredits = 0;
14
+ let nextExpirationInDays = null;
15
+ let nextExpiringCredits = null;
16
+ for (const add of adds) {
17
+ const expirationRaw = add.expiration_time;
18
+ if (!expirationRaw) continue;
19
+ const expiration = new Date(expirationRaw);
20
+ const expirationDate = new Date(
21
+ expiration.getFullYear(),
22
+ expiration.getMonth(),
23
+ expiration.getDate()
24
+ );
25
+ const expiredByDate = expirationDate.getTime() < todayDate.getTime();
26
+ const hasExpired = add.has_expired || expiredByDate;
27
+ if (hasExpired) continue;
28
+ const addedCredits = add.operation_value;
29
+ const consumedForAdd = subtracts.filter((sub) => String(sub.consumed_from_add_id) === String(add.id)).reduce((sum, sub) => sum + sub.operation_value, 0);
30
+ const remainingForAdd = Math.max(0, addedCredits - consumedForAdd);
31
+ totalCredits += addedCredits;
32
+ usedCredits += consumedForAdd;
33
+ const diffMs = expirationDate.getTime() - todayDate.getTime();
34
+ const days = Math.max(0, Math.ceil(diffMs / (1e3 * 60 * 60 * 24)));
35
+ if (remainingForAdd > 0) {
36
+ if (nextExpirationInDays === null || days < nextExpirationInDays) {
37
+ nextExpirationInDays = days;
38
+ nextExpiringCredits = remainingForAdd;
39
+ }
40
+ }
41
+ }
42
+ const availableCredits = Math.max(0, totalCredits - usedCredits);
43
+ return {
44
+ totalCredits,
45
+ usedCredits,
46
+ availableCredits,
47
+ nextExpiringCredits,
48
+ nextExpirationInDays
49
+ };
50
+ }
51
+ function useIaCredits() {
52
+ const { data: subscriptionData, isPending: isSubscriptionLoading } = useActiveSubscription();
53
+ const subscription = subscriptionData?.data?.[0] ?? null;
54
+ const subscriptionId = subscription?.id;
55
+ const query = useQuery({
56
+ queryKey: ["ia-credits", subscriptionId],
57
+ queryFn: withAction(() => listIaCreditsAction(subscriptionId)),
58
+ enabled: subscriptionId != null
59
+ });
60
+ const operations = query.data?.data ?? [];
61
+ const summary = useMemo(() => calculateSummary(operations), [operations]);
62
+ return {
63
+ subscription,
64
+ operations,
65
+ summary,
66
+ isLoading: isSubscriptionLoading || query.isPending,
67
+ isSubscriptionLoading,
68
+ isCreditsLoading: query.isPending,
69
+ isError: query.isError,
70
+ error: query.error
71
+ };
72
+ }
73
+ export {
74
+ useIaCredits
75
+ };
76
+ //# sourceMappingURL=ia-credits.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/ia-credits/hooks/ia-credits.hook.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useMemo } from 'react';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { listIaCreditsAction } from '../actions/list-ia-credits.action';\r\nimport type { IaCreditOperation, IaCreditsSummary } from '../types';\r\nimport { useActiveSubscription } from '../../subscriptions/hooks/find-active-subscription.hook';\r\nimport { withAction } from '../../../utils/withAction';\r\n\r\nfunction calculateSummary(operations: IaCreditOperation[]): IaCreditsSummary {\r\n const today = new Date();\r\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\r\n\r\n const adds = operations.filter((op) => op.operation === 'add');\r\n const subtracts = operations.filter((op) => op.operation === 'subtract');\r\n\r\n let totalCredits = 0;\r\n let usedCredits = 0;\r\n let nextExpirationInDays: number | null = null;\r\n let nextExpiringCredits: number | null = null;\r\n\r\n for (const add of adds) {\r\n const expirationRaw = add.expiration_time;\r\n if (!expirationRaw) continue;\r\n\r\n const expiration = new Date(expirationRaw);\r\n const expirationDate = new Date(\r\n expiration.getFullYear(),\r\n expiration.getMonth(),\r\n expiration.getDate()\r\n );\r\n\r\n const expiredByDate = expirationDate.getTime() < todayDate.getTime();\r\n const hasExpired = add.has_expired || expiredByDate;\r\n\r\n if (hasExpired) continue;\r\n\r\n const addedCredits = add.operation_value;\r\n\r\n const consumedForAdd = subtracts\r\n .filter((sub) => String(sub.consumed_from_add_id) === String(add.id))\r\n .reduce((sum, sub) => sum + sub.operation_value, 0);\r\n\r\n const remainingForAdd = Math.max(0, addedCredits - consumedForAdd);\r\n\r\n totalCredits += addedCredits;\r\n usedCredits += consumedForAdd;\r\n\r\n const diffMs = expirationDate.getTime() - todayDate.getTime();\r\n const days = Math.max(0, Math.ceil(diffMs / (1000 * 60 * 60 * 24)));\r\n\r\n if (remainingForAdd > 0) {\r\n if (nextExpirationInDays === null || days < nextExpirationInDays) {\r\n nextExpirationInDays = days;\r\n nextExpiringCredits = remainingForAdd;\r\n }\r\n }\r\n }\r\n\r\n const availableCredits = Math.max(0, totalCredits - usedCredits);\r\n\r\n return {\r\n totalCredits,\r\n usedCredits,\r\n availableCredits,\r\n nextExpiringCredits,\r\n nextExpirationInDays,\r\n };\r\n}\r\n\r\nexport function useIaCredits() {\r\n const { data: subscriptionData, isPending: isSubscriptionLoading } = useActiveSubscription();\r\n const subscription = subscriptionData?.data?.[0] ?? null;\r\n const subscriptionId = subscription?.id;\r\n\r\n const query = useQuery({\r\n queryKey: ['ia-credits', subscriptionId],\r\n queryFn: withAction(() => listIaCreditsAction(subscriptionId!)),\r\n enabled: subscriptionId != null,\r\n });\r\n\r\n const operations = query.data?.data ?? [];\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const summary = useMemo(() => calculateSummary(operations), [operations]);\r\n\r\n return {\r\n subscription,\r\n operations,\r\n summary,\r\n isLoading: isSubscriptionLoading || query.isPending,\r\n isSubscriptionLoading,\r\n isCreditsLoading: query.isPending,\r\n isError: query.isError,\r\n error: query.error,\r\n };\r\n}\r\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AAEpC,SAAS,6BAA6B;AACtC,SAAS,kBAAkB;AAE3B,SAAS,iBAAiB,YAAmD;AAC3E,QAAM,QAAQ,oBAAI,KAAK;AACvB,QAAM,YAAY,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAEjF,QAAM,OAAO,WAAW,OAAO,CAAC,OAAO,GAAG,cAAc,KAAK;AAC7D,QAAM,YAAY,WAAW,OAAO,CAAC,OAAO,GAAG,cAAc,UAAU;AAEvE,MAAI,eAAe;AACnB,MAAI,cAAc;AAClB,MAAI,uBAAsC;AAC1C,MAAI,sBAAqC;AAEzC,aAAW,OAAO,MAAM;AACtB,UAAM,gBAAgB,IAAI;AAC1B,QAAI,CAAC,cAAe;AAEpB,UAAM,aAAa,IAAI,KAAK,aAAa;AACzC,UAAM,iBAAiB,IAAI;AAAA,MACzB,WAAW,YAAY;AAAA,MACvB,WAAW,SAAS;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB;AAEA,UAAM,gBAAgB,eAAe,QAAQ,IAAI,UAAU,QAAQ;AACnE,UAAM,aAAa,IAAI,eAAe;AAEtC,QAAI,WAAY;AAEhB,UAAM,eAAe,IAAI;AAEzB,UAAM,iBAAiB,UACpB,OAAO,CAAC,QAAQ,OAAO,IAAI,oBAAoB,MAAM,OAAO,IAAI,EAAE,CAAC,EACnE,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,iBAAiB,CAAC;AAEpD,UAAM,kBAAkB,KAAK,IAAI,GAAG,eAAe,cAAc;AAEjE,oBAAgB;AAChB,mBAAe;AAEf,UAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,QAAQ;AAC5D,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,UAAU,MAAO,KAAK,KAAK,GAAG,CAAC;AAElE,QAAI,kBAAkB,GAAG;AACvB,UAAI,yBAAyB,QAAQ,OAAO,sBAAsB;AAChE,+BAAuB;AACvB,8BAAsB;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,KAAK,IAAI,GAAG,eAAe,WAAW;AAE/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,eAAe;AAC7B,QAAM,EAAE,MAAM,kBAAkB,WAAW,sBAAsB,IAAI,sBAAsB;AAC3F,QAAM,eAAe,kBAAkB,OAAO,CAAC,KAAK;AACpD,QAAM,iBAAiB,cAAc;AAErC,QAAM,QAAQ,SAAS;AAAA,IACrB,UAAU,CAAC,cAAc,cAAc;AAAA,IACvC,SAAS,WAAW,MAAM,oBAAoB,cAAe,CAAC;AAAA,IAC9D,SAAS,kBAAkB;AAAA,EAC7B,CAAC;AAED,QAAM,aAAa,MAAM,MAAM,QAAQ,CAAC;AAGxC,QAAM,UAAU,QAAQ,MAAM,iBAAiB,UAAU,GAAG,CAAC,UAAU,CAAC;AAExE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,yBAAyB,MAAM;AAAA,IAC1C;AAAA,IACA,kBAAkB,MAAM;AAAA,IACxB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,EACf;AACF;","names":[]}
@@ -0,0 +1,31 @@
1
+ import "server-only";
2
+ import { api } from "../../../infra/api/client";
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { getUserContext } from "../../auth/utils/get-user-context";
5
+ import { IaCreditOperationSchema } from "../types";
6
+ class IaCreditsService {
7
+ async listOperations(subscriptionId) {
8
+ const { id_account } = await getUserContext();
9
+ const endpoint = `/accounts/${id_account}/subscriptions/${subscriptionId}/items/balance/list?page=1&limit=20&sort=id:DESC`;
10
+ const response = await api.apps.get(endpoint);
11
+ if (response.status === 0) {
12
+ throw new ApiError(
13
+ response.message || "Erro ao listar cr\xE9ditos de IA",
14
+ "LIST_IA_CREDITS_FAILED",
15
+ 400
16
+ );
17
+ }
18
+ const raw = response.data ?? [];
19
+ const data = raw.map((item) => IaCreditOperationSchema.parse(item));
20
+ return {
21
+ data,
22
+ total: response.total ?? data.length,
23
+ success: true
24
+ };
25
+ }
26
+ }
27
+ const iaCreditsService = new IaCreditsService();
28
+ export {
29
+ iaCreditsService
30
+ };
31
+ //# sourceMappingURL=ia-credits.service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/ia-credits/services/ia-credits.service.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport { api } from '../../../infra/api/client';\r\nimport { ApiError, ApiPaginatedActionResult, PaginatedSuccessResult } from '../../../infra/api/types';\r\nimport { getUserContext } from '../../auth/utils/get-user-context';\r\nimport { IaCreditOperation, IaCreditOperationSchema } from '../types';\r\n\r\nclass IaCreditsService {\r\n async listOperations(\r\n subscriptionId: number | string\r\n ): Promise<PaginatedSuccessResult<IaCreditOperation>> {\r\n const { id_account } = await getUserContext();\r\n\r\n const endpoint = `/accounts/${id_account}/subscriptions/${subscriptionId}/items/balance/list?page=1&limit=20&sort=id:DESC`;\r\n\r\n const response = await api.apps.get<ApiPaginatedActionResult<IaCreditOperation>>(endpoint);\r\n\r\n if (response.status === 0) {\r\n throw new ApiError(\r\n response.message || 'Erro ao listar créditos de IA',\r\n 'LIST_IA_CREDITS_FAILED',\r\n 400\r\n );\r\n }\r\n\r\n const raw = response.data ?? [];\r\n const data = raw.map((item) => IaCreditOperationSchema.parse(item));\r\n\r\n return {\r\n data,\r\n total: response.total ?? data.length,\r\n success: true,\r\n };\r\n }\r\n}\r\n\r\nexport const iaCreditsService = new IaCreditsService();\r\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,WAAW;AACpB,SAAS,gBAAkE;AAC3E,SAAS,sBAAsB;AAC/B,SAA4B,+BAA+B;AAE3D,MAAM,iBAAiB;AAAA,EACrB,MAAM,eACJ,gBACoD;AACpD,UAAM,EAAE,WAAW,IAAI,MAAM,eAAe;AAE5C,UAAM,WAAW,aAAa,UAAU,kBAAkB,cAAc;AAExE,UAAM,WAAW,MAAM,IAAI,KAAK,IAAiD,QAAQ;AAEzF,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI;AAAA,QACR,SAAS,WAAW;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,SAAS,QAAQ,CAAC;AAC9B,UAAM,OAAO,IAAI,IAAI,CAAC,SAAS,wBAAwB,MAAM,IAAI,CAAC;AAElE,WAAO;AAAA,MACL;AAAA,MACA,OAAO,SAAS,SAAS,KAAK;AAAA,MAC9B,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,MAAM,mBAAmB,IAAI,iBAAiB;","names":[]}
@@ -0,0 +1,25 @@
1
+ import z from "zod";
2
+ const IaCreditOperationSchema = z.object({
3
+ id: z.union([z.number(), z.string()]),
4
+ deleted: z.number(),
5
+ datetime_add: z.coerce.date().nullable(),
6
+ id_wl: z.number(),
7
+ id_subscription: z.union([z.number(), z.string()]),
8
+ id_addon: z.number(),
9
+ operation: z.string(),
10
+ // 'add' | 'subtract'
11
+ operation_value: z.union([z.number(), z.string()]).transform((v) => Number(v)),
12
+ balance_after_operation: z.union([z.number(), z.string()]).optional(),
13
+ balance_before_operation: z.union([z.number(), z.string()]).optional(),
14
+ operation_ref: z.string().nullable().optional(),
15
+ operation_origin: z.string().nullable().optional(),
16
+ expiration_time: z.string().nullable(),
17
+ has_expired: z.boolean(),
18
+ consumed_from_add_id: z.union([z.number(), z.string()]).nullable(),
19
+ id_user_add: z.union([z.number(), z.string()]).nullable(),
20
+ user_name: z.string().nullable().optional()
21
+ }).passthrough();
22
+ export {
23
+ IaCreditOperationSchema
24
+ };
25
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/ia-credits/types.ts"],"sourcesContent":["import z from 'zod';\r\n\r\nexport const IaCreditOperationSchema = z\r\n .object({\r\n id: z.union([z.number(), z.string()]),\r\n deleted: z.number(),\r\n datetime_add: z.coerce.date().nullable(),\r\n id_wl: z.number(),\r\n id_subscription: z.union([z.number(), z.string()]),\r\n id_addon: z.number(),\r\n operation: z.string(), // 'add' | 'subtract'\r\n operation_value: z.union([z.number(), z.string()]).transform((v) => Number(v)),\r\n balance_after_operation: z.union([z.number(), z.string()]).optional(),\r\n balance_before_operation: z.union([z.number(), z.string()]).optional(),\r\n operation_ref: z.string().nullable().optional(),\r\n operation_origin: z.string().nullable().optional(),\r\n expiration_time: z.string().nullable(),\r\n has_expired: z.boolean(),\r\n consumed_from_add_id: z.union([z.number(), z.string()]).nullable(),\r\n id_user_add: z.union([z.number(), z.string()]).nullable(),\r\n user_name: z.string().nullable().optional(),\r\n })\r\n .passthrough();\r\n\r\nexport type IaCreditOperation = z.infer<typeof IaCreditOperationSchema>;\r\n\r\nexport type IaCreditsSummary = {\r\n totalCredits: number;\r\n usedCredits: number;\r\n availableCredits: number;\r\n nextExpiringCredits: number | null;\r\n nextExpirationInDays: number | null;\r\n};\r\n"],"mappings":"AAAA,OAAO,OAAO;AAEP,MAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,EACpC,SAAS,EAAE,OAAO;AAAA,EAClB,cAAc,EAAE,OAAO,KAAK,EAAE,SAAS;AAAA,EACvC,OAAO,EAAE,OAAO;AAAA,EAChB,iBAAiB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC;AAAA,EACjD,UAAU,EAAE,OAAO;AAAA,EACnB,WAAW,EAAE,OAAO;AAAA;AAAA,EACpB,iBAAiB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,OAAO,CAAC,CAAC;AAAA,EAC7E,yBAAyB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACpE,0BAA0B,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACrE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,aAAa,EAAE,QAAQ;AAAA,EACvB,sBAAsB,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACjE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACxD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC,EACA,YAAY;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use server";
2
+ import { safeServerAction } from "../../../utils/safeServerAction";
3
+ import { projectUsersService } from "../services/project-users.service";
4
+ async function addProjectUserAction(params) {
5
+ return safeServerAction(() => projectUsersService.addToProject(params));
6
+ }
7
+ export {
8
+ addProjectUserAction
9
+ };
10
+ //# sourceMappingURL=add-project-user.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/actions/add-project-user.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { AddRemoveProjectUsersParams } from '../types';\n\nexport async function addProjectUserAction(params: AddRemoveProjectUsersParams) {\n return safeServerAction(() => projectUsersService.addToProject(params));\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AAGpC,eAAsB,qBAAqB,QAAqC;AAC9E,SAAO,iBAAiB,MAAM,oBAAoB,aAAa,MAAM,CAAC;AACxE;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use server";
2
+ import { safeServerAction } from "../../../utils/safeServerAction";
3
+ import { projectUsersService } from "../services/project-users.service";
4
+ async function listAvailableUsersAction(projectId, params = {}) {
5
+ return safeServerAction(() => projectUsersService.listNotInProject(projectId, params));
6
+ }
7
+ export {
8
+ listAvailableUsersAction
9
+ };
10
+ //# sourceMappingURL=list-available-users.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/actions/list-available-users.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { ListUsersParams } from '../types';\n\nexport async function listAvailableUsersAction(projectId: number, params: ListUsersParams = {}) {\n return safeServerAction(() => projectUsersService.listNotInProject(projectId, params));\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AAGpC,eAAsB,yBAAyB,WAAmB,SAA0B,CAAC,GAAG;AAC9F,SAAO,iBAAiB,MAAM,oBAAoB,iBAAiB,WAAW,MAAM,CAAC;AACvF;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use server";
2
+ import { safeServerAction } from "../../../utils/safeServerAction";
3
+ import { projectUsersService } from "../services/project-users.service";
4
+ async function listProjectUsersAction(projectId, params = {}) {
5
+ return safeServerAction(() => projectUsersService.listInProject(projectId, params));
6
+ }
7
+ export {
8
+ listProjectUsersAction
9
+ };
10
+ //# sourceMappingURL=list-project-users.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/actions/list-project-users.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { ListUsersParams } from '../types';\n\nexport async function listProjectUsersAction(projectId: number, params: ListUsersParams = {}) {\n return safeServerAction(() => projectUsersService.listInProject(projectId, params));\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AAGpC,eAAsB,uBAAuB,WAAmB,SAA0B,CAAC,GAAG;AAC5F,SAAO,iBAAiB,MAAM,oBAAoB,cAAc,WAAW,MAAM,CAAC;AACpF;","names":[]}
@@ -0,0 +1,10 @@
1
+ "use server";
2
+ import { safeServerAction } from "../../../utils/safeServerAction";
3
+ import { projectUsersService } from "../services/project-users.service";
4
+ async function removeProjectUserAction(params) {
5
+ return safeServerAction(() => projectUsersService.removeFromProject(params));
6
+ }
7
+ export {
8
+ removeProjectUserAction
9
+ };
10
+ //# sourceMappingURL=remove-project-user.action.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/actions/remove-project-user.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { projectUsersService } from '../services/project-users.service';\nimport type { AddRemoveProjectUsersParams } from '../types';\n\nexport async function removeProjectUserAction(params: AddRemoveProjectUsersParams) {\n return safeServerAction(() => projectUsersService.removeFromProject(params));\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,2BAA2B;AAGpC,eAAsB,wBAAwB,QAAqC;AACjF,SAAO,iBAAiB,MAAM,oBAAoB,kBAAkB,MAAM,CAAC;AAC7E;","names":[]}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { useInfiniteQuery } from "@tanstack/react-query";
3
+ import { listAvailableUsersAction } from "../actions/list-available-users.action";
4
+ import { withAction } from "../../../utils/withAction";
5
+ const PAGE_SIZE = 20;
6
+ const LIST_AVAILABLE_USERS_BASE_KEY = (projectId) => ["project-users", projectId, "out"];
7
+ const LIST_AVAILABLE_USERS_QUERY_KEY = (projectId, search = "") => [
8
+ ...LIST_AVAILABLE_USERS_BASE_KEY(projectId),
9
+ search
10
+ ];
11
+ function useListAvailableUsers(projectId, search = "") {
12
+ return useInfiniteQuery({
13
+ queryKey: LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search),
14
+ queryFn: ({ pageParam }) => withAction(
15
+ () => listAvailableUsersAction(projectId, {
16
+ search: search || void 0,
17
+ page: pageParam,
18
+ limit: PAGE_SIZE
19
+ })
20
+ )(),
21
+ getNextPageParam: (lastPage, allPages) => {
22
+ const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
23
+ return loaded < lastPage.total ? allPages.length + 1 : void 0;
24
+ },
25
+ initialPageParam: 1,
26
+ enabled: !!projectId
27
+ });
28
+ }
29
+ export {
30
+ LIST_AVAILABLE_USERS_BASE_KEY,
31
+ LIST_AVAILABLE_USERS_QUERY_KEY,
32
+ useListAvailableUsers
33
+ };
34
+ //# sourceMappingURL=list-available-users.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/hooks/list-available-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { listAvailableUsersAction } from '../actions/list-available-users.action';\nimport { withAction } from '../../../utils/withAction';\n\nconst PAGE_SIZE = 20;\n\nexport const LIST_AVAILABLE_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'out'];\nexport const LIST_AVAILABLE_USERS_QUERY_KEY = (projectId: number, search: string = '') => [\n ...LIST_AVAILABLE_USERS_BASE_KEY(projectId),\n search,\n];\n\nexport function useListAvailableUsers(projectId: number, search: string = '') {\n return useInfiniteQuery({\n queryKey: LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search),\n queryFn: ({ pageParam }) =>\n withAction(() =>\n listAvailableUsersAction(projectId, {\n search: search || undefined,\n page: pageParam as number,\n limit: PAGE_SIZE,\n })\n )(),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n enabled: !!projectId,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,gCAAgC;AACzC,SAAS,kBAAkB;AAE3B,MAAM,YAAY;AAEX,MAAM,gCAAgC,CAAC,cAAsB,CAAC,iBAAiB,WAAW,KAAK;AAC/F,MAAM,iCAAiC,CAAC,WAAmB,SAAiB,OAAO;AAAA,EACxF,GAAG,8BAA8B,SAAS;AAAA,EAC1C;AACF;AAEO,SAAS,sBAAsB,WAAmB,SAAiB,IAAI;AAC5E,SAAO,iBAAiB;AAAA,IACtB,UAAU,+BAA+B,WAAW,MAAM;AAAA,IAC1D,SAAS,CAAC,EAAE,UAAU,MACpB;AAAA,MAAW,MACT,yBAAyB,WAAW;AAAA,QAClC,QAAQ,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAAA,IACH,EAAE;AAAA,IACJ,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,IAClB,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { useInfiniteQuery } from "@tanstack/react-query";
3
+ import { listProjectUsersAction } from "../actions/list-project-users.action";
4
+ import { withAction } from "../../../utils/withAction";
5
+ const PAGE_SIZE = 20;
6
+ const LIST_PROJECT_USERS_BASE_KEY = (projectId) => ["project-users", projectId, "in"];
7
+ const LIST_PROJECT_USERS_QUERY_KEY = (projectId, search = "") => [
8
+ ...LIST_PROJECT_USERS_BASE_KEY(projectId),
9
+ search
10
+ ];
11
+ function useListProjectUsers(projectId, search = "") {
12
+ return useInfiniteQuery({
13
+ queryKey: LIST_PROJECT_USERS_QUERY_KEY(projectId, search),
14
+ queryFn: ({ pageParam }) => withAction(
15
+ () => listProjectUsersAction(projectId, {
16
+ search: search || void 0,
17
+ page: pageParam,
18
+ limit: PAGE_SIZE
19
+ })
20
+ )(),
21
+ getNextPageParam: (lastPage, allPages) => {
22
+ const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
23
+ return loaded < lastPage.total ? allPages.length + 1 : void 0;
24
+ },
25
+ initialPageParam: 1,
26
+ enabled: !!projectId
27
+ });
28
+ }
29
+ export {
30
+ LIST_PROJECT_USERS_BASE_KEY,
31
+ LIST_PROJECT_USERS_QUERY_KEY,
32
+ useListProjectUsers
33
+ };
34
+ //# sourceMappingURL=list-project-users.hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/projects/hooks/list-project-users.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { listProjectUsersAction } from '../actions/list-project-users.action';\nimport { withAction } from '../../../utils/withAction';\n\nconst PAGE_SIZE = 20;\n\nexport const LIST_PROJECT_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'in'];\nexport const LIST_PROJECT_USERS_QUERY_KEY = (projectId: number, search: string = '') => [\n ...LIST_PROJECT_USERS_BASE_KEY(projectId),\n search,\n];\n\nexport function useListProjectUsers(projectId: number, search: string = '') {\n return useInfiniteQuery({\n queryKey: LIST_PROJECT_USERS_QUERY_KEY(projectId, search),\n queryFn: ({ pageParam }) =>\n withAction(() =>\n listProjectUsersAction(projectId, {\n search: search || undefined,\n page: pageParam as number,\n limit: PAGE_SIZE,\n })\n )(),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n enabled: !!projectId,\n });\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAE3B,MAAM,YAAY;AAEX,MAAM,8BAA8B,CAAC,cAAsB,CAAC,iBAAiB,WAAW,IAAI;AAC5F,MAAM,+BAA+B,CAAC,WAAmB,SAAiB,OAAO;AAAA,EACtF,GAAG,4BAA4B,SAAS;AAAA,EACxC;AACF;AAEO,SAAS,oBAAoB,WAAmB,SAAiB,IAAI;AAC1E,SAAO,iBAAiB;AAAA,IACtB,UAAU,6BAA6B,WAAW,MAAM;AAAA,IACxD,SAAS,CAAC,EAAE,UAAU,MACpB;AAAA,MAAW,MACT,uBAAuB,WAAW;AAAA,QAChC,QAAQ,UAAU;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAAA,IACH,EAAE;AAAA,IACJ,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,IAClB,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}