@greatapps/common 1.1.695 → 1.1.697

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 (555) hide show
  1. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  3. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  5. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  6. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  7. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  8. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  9. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  10. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  11. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  14. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  15. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  16. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  17. package/dist/components/account/sections/TokenSection.mjs.map +1 -1
  18. package/dist/components/embeds/ClarityEmbed.mjs.map +1 -1
  19. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  20. package/dist/components/embeds/EmbedWidgets.mjs.map +1 -1
  21. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  22. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  24. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  25. package/dist/components/layouts/NavBar.mjs.map +1 -1
  26. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  27. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  28. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  29. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  30. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  31. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  32. package/dist/components/modals/CreditsDisabledModal.mjs.map +1 -1
  33. package/dist/components/modals/Modals.mjs.map +1 -1
  34. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  37. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  38. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  39. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  40. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  41. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  42. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  43. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  44. package/dist/components/navigation/SubscriptionBanner.mjs.map +1 -1
  45. package/dist/components/navigation/TrialBanner.mjs.map +1 -1
  46. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  47. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  48. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  49. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  50. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  51. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  52. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  53. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  54. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  58. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  59. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  60. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  61. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  62. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  63. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  64. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  65. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  66. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  67. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  68. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  69. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  70. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  71. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  72. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  73. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  74. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  75. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  76. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  77. package/dist/components/ui/form/FormField.mjs.map +1 -1
  78. package/dist/components/ui/form/Input.mjs.map +1 -1
  79. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  80. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  81. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  82. package/dist/components/ui/form/Select.mjs +1 -1
  83. package/dist/components/ui/form/Select.mjs.map +1 -1
  84. package/dist/components/ui/form/Switch.mjs.map +1 -1
  85. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  86. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  87. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  88. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  89. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  90. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  91. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs +10 -0
  92. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  93. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  94. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  95. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  96. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  97. package/dist/handlers.mjs.map +1 -1
  98. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  99. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  100. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  101. package/dist/hooks/useRouter.mjs.map +1 -1
  102. package/dist/http.mjs.map +1 -1
  103. package/dist/i18n/config.mjs.map +1 -1
  104. package/dist/i18n/country-language.mjs.map +1 -1
  105. package/dist/i18n/messages/en-us.mjs.map +1 -1
  106. package/dist/i18n/messages/es-es.mjs.map +1 -1
  107. package/dist/i18n/messages/index.mjs.map +1 -1
  108. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  109. package/dist/i18n/normalize.mjs.map +1 -1
  110. package/dist/i18n/resolve-locale.mjs.map +1 -1
  111. package/dist/i18n.mjs.map +1 -1
  112. package/dist/index.mjs.map +1 -1
  113. package/dist/infra/http/api-fetch.mjs.map +1 -1
  114. package/dist/infra/route/parse-id.mjs.map +1 -1
  115. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  116. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  117. package/dist/infra/route/search-params.mjs.map +1 -1
  118. package/dist/infra/utils/array.mjs.map +1 -1
  119. package/dist/infra/utils/date.mjs.map +1 -1
  120. package/dist/middleware.mjs.map +1 -1
  121. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  122. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  123. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  124. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  125. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  126. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  127. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  128. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  129. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  132. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  133. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  134. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  135. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  136. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  137. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  138. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  139. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  140. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  141. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  142. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  143. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  147. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  148. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  149. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  150. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  151. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  152. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  153. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  154. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  155. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  156. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  157. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  158. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  159. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  160. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  161. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  162. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  163. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  164. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  168. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  169. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  170. package/dist/modules/cards/types.mjs.map +1 -1
  171. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  172. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  173. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  174. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  175. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  176. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  177. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  178. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  179. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  180. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  181. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  182. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  183. package/dist/modules/images/hooks/use-image-upload.hook.mjs +4 -1
  184. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  185. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  186. package/dist/modules/images/utils/base64.mjs.map +1 -1
  187. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  188. package/dist/modules/images/utils/crop-image.mjs +6 -2
  189. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  190. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  191. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  192. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  193. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  194. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  195. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  196. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  197. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  198. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  199. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  200. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  201. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  202. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  203. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  204. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  205. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  210. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  211. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  212. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  215. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  216. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  217. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  226. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  227. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  228. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  229. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  230. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  231. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  232. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  233. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  234. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  235. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  236. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  237. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  238. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  240. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  241. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  242. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  243. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  244. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  248. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  249. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  250. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  251. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  252. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  253. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  254. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  255. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  256. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  257. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  258. package/dist/providers/auth.provider.mjs.map +1 -1
  259. package/dist/providers/navigation.provider.mjs.map +1 -1
  260. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  261. package/dist/route.mjs.map +1 -1
  262. package/dist/store/useAccountModals.mjs.map +1 -1
  263. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  264. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  265. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  266. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  267. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  268. package/dist/utils/constants/br-states.mjs.map +1 -1
  269. package/dist/utils/countries.mjs.map +1 -1
  270. package/dist/utils/format/currency.mjs.map +1 -1
  271. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  272. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  273. package/dist/utils/next-navigation.mjs.map +1 -1
  274. package/dist/utils/redirect.mjs.map +1 -1
  275. package/dist/utils/safeMutationAction.mjs.map +1 -1
  276. package/dist/utils/safeServerAction.mjs.map +1 -1
  277. package/dist/utils/withAction.mjs.map +1 -1
  278. package/package.json +115 -115
  279. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  280. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  281. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  282. package/src/components/account/DeleteAccountModal.tsx +160 -160
  283. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  284. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  285. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  286. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  287. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  288. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  289. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  290. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  291. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  292. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  293. package/src/components/account/sections/SecuritySection.tsx +102 -102
  294. package/src/components/account/sections/TokenSection.tsx +85 -85
  295. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  296. package/src/components/embeds/CrispEmbed.tsx +195 -195
  297. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  298. package/src/components/embeds/FrillEmbed.tsx +146 -146
  299. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  300. package/src/components/layouts/AppNavBar.tsx +40 -40
  301. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  302. package/src/components/layouts/NavBar.tsx +228 -228
  303. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  304. package/src/components/layouts/ProfilePopover.tsx +191 -191
  305. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  306. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  307. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  308. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  309. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  310. package/src/components/modals/Modals.tsx +25 -25
  311. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  312. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  313. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  314. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  315. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  316. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  317. package/src/components/navigation/NavItemsContext.ts +20 -20
  318. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  319. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  320. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  321. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  322. package/src/components/navigation/TrialBanner.tsx +54 -54
  323. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  324. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  325. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  326. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  327. package/src/components/pages/NotFoundPage.tsx +75 -75
  328. package/src/components/pages/notifications/Notifications.tsx +190 -190
  329. package/src/components/ui/buttons/Button.tsx +77 -77
  330. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  331. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  332. package/src/components/ui/data-display/Accordion.tsx +81 -81
  333. package/src/components/ui/data-display/Badge.tsx +47 -47
  334. package/src/components/ui/data-display/Card.tsx +93 -93
  335. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  336. package/src/components/ui/data-display/CardItem.tsx +135 -135
  337. package/src/components/ui/data-display/Pagination.tsx +126 -126
  338. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  339. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  340. package/src/components/ui/data-display/Separator.tsx +29 -29
  341. package/src/components/ui/data-display/Table.tsx +117 -117
  342. package/src/components/ui/data-display/Tabs.tsx +67 -67
  343. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  344. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  345. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  346. package/src/components/ui/feedback/Progress.tsx +40 -40
  347. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  348. package/src/components/ui/feedback/Toast.tsx +104 -104
  349. package/src/components/ui/form/Calendar.tsx +228 -228
  350. package/src/components/ui/form/Checkbox.tsx +31 -31
  351. package/src/components/ui/form/ComboboxField.tsx +159 -159
  352. package/src/components/ui/form/DatePicker.tsx +100 -100
  353. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  354. package/src/components/ui/form/FormField.tsx +133 -133
  355. package/src/components/ui/form/Input.tsx +20 -20
  356. package/src/components/ui/form/InputOtp.tsx +80 -80
  357. package/src/components/ui/form/PhoneInput.tsx +210 -210
  358. package/src/components/ui/form/RadioGroup.tsx +45 -45
  359. package/src/components/ui/form/Select.tsx +200 -200
  360. package/src/components/ui/form/Switch.tsx +32 -32
  361. package/src/components/ui/form/Textarea.tsx +19 -19
  362. package/src/components/ui/overlay/Command.tsx +185 -185
  363. package/src/components/ui/overlay/Dialog.tsx +153 -153
  364. package/src/components/ui/overlay/Popover.tsx +49 -49
  365. package/src/components/ui/overlay/Sheet.tsx +170 -170
  366. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  367. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -382
  368. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  369. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  370. package/src/components/widgets/ImageUpload/index.ts +3 -3
  371. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  372. package/src/handlers.ts +22 -22
  373. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  374. package/src/hooks/useAuthQueryKey.ts +32 -32
  375. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  376. package/src/hooks/useRouter.ts +38 -38
  377. package/src/http.ts +1 -1
  378. package/src/i18n/config.ts +17 -17
  379. package/src/i18n/country-language.ts +60 -60
  380. package/src/i18n/messages/en-us.ts +519 -519
  381. package/src/i18n/messages/es-es.ts +520 -520
  382. package/src/i18n/messages/index.ts +24 -24
  383. package/src/i18n/messages/pt-br.ts +543 -543
  384. package/src/i18n/normalize.ts +15 -15
  385. package/src/i18n/resolve-locale.ts +77 -77
  386. package/src/i18n.ts +10 -10
  387. package/src/index.ts +584 -584
  388. package/src/infra/http/api-fetch.ts +39 -39
  389. package/src/infra/route/parse-id.ts +9 -9
  390. package/src/infra/route/parse-numeric.ts +16 -16
  391. package/src/infra/route/safe-route-handler.ts +16 -16
  392. package/src/infra/route/search-params.ts +9 -9
  393. package/src/infra/utils/array.ts +167 -167
  394. package/src/infra/utils/date.ts +59 -59
  395. package/src/middleware.ts +4 -4
  396. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  397. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  398. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  399. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  400. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  401. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  402. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  403. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  404. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  405. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  406. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  407. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  408. package/src/modules/accounts/services/account-token.service.ts +52 -52
  409. package/src/modules/accounts/services/account.service.ts +243 -243
  410. package/src/modules/accounts/types.ts +230 -230
  411. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  412. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  413. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  414. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  415. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  416. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  417. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  418. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  419. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  420. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  421. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  422. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  423. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  424. package/src/modules/auth/types/management-permission.type.ts +14 -14
  425. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  426. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  427. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  428. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  429. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  430. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  431. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  432. package/src/modules/cards/actions/create-card.action.ts +9 -9
  433. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  434. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  435. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  436. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  437. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  438. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  439. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  440. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  441. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  442. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  443. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  444. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  445. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  446. package/src/modules/cards/services/cards.service.ts +136 -136
  447. package/src/modules/cards/types.ts +52 -52
  448. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  449. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  450. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  451. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  452. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  453. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  454. package/src/modules/charges/services/charges.service.ts +63 -63
  455. package/src/modules/charges/types/charge.type.ts +68 -68
  456. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  457. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  458. package/src/modules/images/actions/process-image.action.ts +40 -40
  459. package/src/modules/images/constants/image.constants.ts +11 -11
  460. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -145
  461. package/src/modules/images/services/image-processing.service.ts +75 -75
  462. package/src/modules/images/types/image.type.ts +54 -54
  463. package/src/modules/images/utils/base64.ts +26 -26
  464. package/src/modules/images/utils/compress-image.ts +20 -20
  465. package/src/modules/images/utils/crop-image.ts +68 -51
  466. package/src/modules/images/utils/validate-image.ts +86 -86
  467. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  468. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  469. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  470. package/src/modules/pages/services/pages.service.ts +27 -27
  471. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  472. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  473. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  474. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  475. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  476. package/src/modules/plans/services/plans.service.ts +135 -135
  477. package/src/modules/plans/types/plan.type.ts +75 -75
  478. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  479. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  480. package/src/modules/projects/actions/create-project.action.ts +9 -9
  481. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  482. package/src/modules/projects/actions/find-project.action.ts +8 -8
  483. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  484. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  485. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  486. package/src/modules/projects/actions/update-project.action.ts +9 -9
  487. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  488. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  489. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  490. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  491. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  492. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  493. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  494. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  495. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  496. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  497. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  498. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  499. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  500. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  501. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  502. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  503. package/src/modules/projects/services/projects.service.ts +156 -156
  504. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  505. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  506. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  507. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  508. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  509. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  510. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  511. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  512. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  513. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  514. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  515. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  516. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  517. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  518. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  519. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  520. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  521. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  522. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  523. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  524. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  525. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  526. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  527. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  528. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  529. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  530. package/src/modules/users/hooks/messages.hook.ts +69 -69
  531. package/src/modules/users/services/messages.service.ts +49 -49
  532. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  533. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  534. package/src/modules/whitelabel/schema.ts +84 -84
  535. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  536. package/src/providers/auth.provider.tsx +264 -264
  537. package/src/providers/navigation.provider.tsx +99 -99
  538. package/src/providers/whitelabel.provider.tsx +90 -90
  539. package/src/route.ts +4 -4
  540. package/src/store/useAccountModals.ts +85 -85
  541. package/src/store/useBuyCreditsModal.ts +21 -21
  542. package/src/store/useCreditsDisabledModal.ts +11 -11
  543. package/src/store/useDesktopSidebarStore.ts +47 -47
  544. package/src/store/useMdSidebarStore.ts +34 -34
  545. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  546. package/src/utils/constants/br-states.ts +29 -29
  547. package/src/utils/countries.ts +224 -224
  548. package/src/utils/format/currency.ts +70 -70
  549. package/src/utils/intl/cookie-domain.ts +29 -29
  550. package/src/utils/intl/locale-cookie.ts +18 -18
  551. package/src/utils/next-navigation.ts +7 -7
  552. package/src/utils/redirect.ts +78 -78
  553. package/src/utils/safeMutationAction.ts +24 -24
  554. package/src/utils/safeServerAction.ts +21 -21
  555. package/src/utils/withAction.ts +13 -13
@@ -1,38 +1,38 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import { getSubscriptionExpiryDate } from "../../subscriptions/utils/get-subscription-expiry-date";
6
-
7
- export async function assertManagementSubscription() {
8
- const result = await listSubscriptionsAction({ active: true });
9
-
10
- if (!result.success) {
11
- throw new ApiError(
12
- result.error || "Não foi possível validar a assinatura atual",
13
- "SUBSCRIPTION_CONTEXT_FAILED",
14
- 403,
15
- );
16
- }
17
-
18
- const subscription = result.data?.data?.[0];
19
-
20
- if (!subscription) {
21
- throw new ApiError(
22
- "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
- "SUBSCRIPTION_NOT_FOUND",
24
- 403,
25
- );
26
- }
27
-
28
- const expiryDate = getSubscriptionExpiryDate(subscription);
29
- const isExpired = !!expiryDate && Date.now() >= expiryDate.getTime();
30
-
31
- if (isExpired) {
32
- throw new ApiError(
33
- "Sua assinatura está vencida. Assine um novo plano para continuar.",
34
- "SUBSCRIPTION_EXPIRED",
35
- 403,
36
- );
37
- }
38
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import { getSubscriptionExpiryDate } from "../../subscriptions/utils/get-subscription-expiry-date";
6
+
7
+ export async function assertManagementSubscription() {
8
+ const result = await listSubscriptionsAction({ active: true });
9
+
10
+ if (!result.success) {
11
+ throw new ApiError(
12
+ result.error || "Não foi possível validar a assinatura atual",
13
+ "SUBSCRIPTION_CONTEXT_FAILED",
14
+ 403,
15
+ );
16
+ }
17
+
18
+ const subscription = result.data?.data?.[0];
19
+
20
+ if (!subscription) {
21
+ throw new ApiError(
22
+ "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
+ "SUBSCRIPTION_NOT_FOUND",
24
+ 403,
25
+ );
26
+ }
27
+
28
+ const expiryDate = getSubscriptionExpiryDate(subscription);
29
+ const isExpired = !!expiryDate && Date.now() >= expiryDate.getTime();
30
+
31
+ if (isExpired) {
32
+ throw new ApiError(
33
+ "Sua assinatura está vencida. Assine um novo plano para continuar.",
34
+ "SUBSCRIPTION_EXPIRED",
35
+ 403,
36
+ );
37
+ }
38
+ }
@@ -1,47 +1,47 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import { getSubscriptionExpiryDate } from "../../subscriptions/utils/get-subscription-expiry-date";
6
-
7
- export async function assertPaidSubscription() {
8
- const result = await listSubscriptionsAction({ active: true });
9
-
10
- if (!result.success) {
11
- throw new ApiError(
12
- result.error || "Não foi possível validar a assinatura atual",
13
- "SUBSCRIPTION_CONTEXT_FAILED",
14
- 403,
15
- );
16
- }
17
-
18
- const subscription = result.data?.data?.[0];
19
-
20
- if (!subscription) {
21
- throw new ApiError(
22
- "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
- "SUBSCRIPTION_NOT_FOUND",
24
- 403,
25
- );
26
- }
27
-
28
- const expiryDate = getSubscriptionExpiryDate(subscription);
29
- const isExpired = !!expiryDate && Date.now() >= expiryDate.getTime();
30
-
31
- if (isExpired) {
32
- throw new ApiError(
33
- "Sua assinatura está vencida. Assine um novo plano para continuar.",
34
- "SUBSCRIPTION_EXPIRED",
35
- 403,
36
- );
37
- }
38
-
39
-
40
- if (subscription.type === 'free' || subscription.id_plan === 5) {
41
- throw new ApiError(
42
- "Este recurso está disponível apenas para planos pagos. Faça upgrade do seu plano para continuar.",
43
- "PAID_SUBSCRIPTION_REQUIRED",
44
- 403,
45
- );
46
- }
47
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import { getSubscriptionExpiryDate } from "../../subscriptions/utils/get-subscription-expiry-date";
6
+
7
+ export async function assertPaidSubscription() {
8
+ const result = await listSubscriptionsAction({ active: true });
9
+
10
+ if (!result.success) {
11
+ throw new ApiError(
12
+ result.error || "Não foi possível validar a assinatura atual",
13
+ "SUBSCRIPTION_CONTEXT_FAILED",
14
+ 403,
15
+ );
16
+ }
17
+
18
+ const subscription = result.data?.data?.[0];
19
+
20
+ if (!subscription) {
21
+ throw new ApiError(
22
+ "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
+ "SUBSCRIPTION_NOT_FOUND",
24
+ 403,
25
+ );
26
+ }
27
+
28
+ const expiryDate = getSubscriptionExpiryDate(subscription);
29
+ const isExpired = !!expiryDate && Date.now() >= expiryDate.getTime();
30
+
31
+ if (isExpired) {
32
+ throw new ApiError(
33
+ "Sua assinatura está vencida. Assine um novo plano para continuar.",
34
+ "SUBSCRIPTION_EXPIRED",
35
+ 403,
36
+ );
37
+ }
38
+
39
+
40
+ if (subscription.type === 'free' || subscription.id_plan === 5) {
41
+ throw new ApiError(
42
+ "Este recurso está disponível apenas para planos pagos. Faça upgrade do seu plano para continuar.",
43
+ "PAID_SUBSCRIPTION_REQUIRED",
44
+ 403,
45
+ );
46
+ }
47
+ }
@@ -1,42 +1,42 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import type { AddonKindEnum } from "../../subscriptions/constants/addons.constants";
6
-
7
- export async function assertSubscriptionAddon(
8
- addonId: AddonKindEnum,
9
- addonLabel: string,
10
- ) {
11
- const result = await listSubscriptionsAction({ active: true });
12
-
13
- if (!result.success) {
14
- throw new ApiError(
15
- result.error || "Não foi possível validar a assinatura atual",
16
- "SUBSCRIPTION_CONTEXT_FAILED",
17
- 403,
18
- );
19
- }
20
-
21
- const subscription = result.data?.data?.[0];
22
-
23
- if (!subscription) {
24
- throw new ApiError(
25
- `Nenhuma assinatura ativa encontrada. Para acessar este recurso, é necessário ter uma assinatura com ${addonLabel}.`,
26
- "NO_ACTIVE_SUBSCRIPTION",
27
- 403,
28
- );
29
- }
30
-
31
- const hasAddon = subscription?.items?.some(
32
- (item) => item.id_addon === addonId,
33
- );
34
-
35
- if (!hasAddon) {
36
- throw new ApiError(
37
- `Sua assinatura não inclui ${addonLabel}. Faça upgrade do seu plano.`,
38
- "ADDON_NOT_AVAILABLE",
39
- 403,
40
- );
41
- }
42
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import type { AddonKindEnum } from "../../subscriptions/constants/addons.constants";
6
+
7
+ export async function assertSubscriptionAddon(
8
+ addonId: AddonKindEnum,
9
+ addonLabel: string,
10
+ ) {
11
+ const result = await listSubscriptionsAction({ active: true });
12
+
13
+ if (!result.success) {
14
+ throw new ApiError(
15
+ result.error || "Não foi possível validar a assinatura atual",
16
+ "SUBSCRIPTION_CONTEXT_FAILED",
17
+ 403,
18
+ );
19
+ }
20
+
21
+ const subscription = result.data?.data?.[0];
22
+
23
+ if (!subscription) {
24
+ throw new ApiError(
25
+ `Nenhuma assinatura ativa encontrada. Para acessar este recurso, é necessário ter uma assinatura com ${addonLabel}.`,
26
+ "NO_ACTIVE_SUBSCRIPTION",
27
+ 403,
28
+ );
29
+ }
30
+
31
+ const hasAddon = subscription?.items?.some(
32
+ (item) => item.id_addon === addonId,
33
+ );
34
+
35
+ if (!hasAddon) {
36
+ throw new ApiError(
37
+ `Sua assinatura não inclui ${addonLabel}. Faça upgrade do seu plano.`,
38
+ "ADDON_NOT_AVAILABLE",
39
+ 403,
40
+ );
41
+ }
42
+ }
@@ -1,43 +1,43 @@
1
- import 'server-only';
2
-
3
- import type { RequestConfig } from '../../../infra/api/client';
4
- import type { JWTPayload } from '../../users/schema';
5
- import { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';
6
- import { whitelabelService } from '../../whitelabel/services/whitelabel.service';
7
-
8
- /**
9
- * Compara um `id_wl` com o whitelabel resolvido pelo hostname.
10
- * Se forem diferentes (ex: admin com id_wl=1 num domínio de id_wl=30),
11
- * retorna um RequestConfig com o override correto.
12
- * Se forem iguais, retorna undefined (sem custo extra).
13
- */
14
- export async function buildWlOverride(
15
- jwtWlId: number,
16
- ): Promise<RequestConfig | undefined> {
17
- try {
18
- const { id: hostWlId } = await findWhitelabel();
19
-
20
- if (jwtWlId !== hostWlId) {
21
- const wlToken = await whitelabelService.getTokenByWhitelabelId(jwtWlId);
22
- return { whiteLabelId: jwtWlId, authToken: wlToken };
23
- }
24
- } catch {
25
- // Fallback to default whitelabel resolution
26
- }
27
-
28
- return undefined;
29
- }
30
-
31
- /**
32
- * Extrai `id_wl` do JWT cookie e delega para `buildWlOverride`.
33
- */
34
- export async function buildWlOverrideFromJwt(
35
- cookie: string,
36
- ): Promise<RequestConfig | undefined> {
37
- try {
38
- const payload = JSON.parse(atob(cookie.split('.')[1])) as JWTPayload;
39
- return buildWlOverride(Number(payload.id_wl));
40
- } catch {
41
- return undefined;
42
- }
43
- }
1
+ import 'server-only';
2
+
3
+ import type { RequestConfig } from '../../../infra/api/client';
4
+ import type { JWTPayload } from '../../users/schema';
5
+ import { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';
6
+ import { whitelabelService } from '../../whitelabel/services/whitelabel.service';
7
+
8
+ /**
9
+ * Compara um `id_wl` com o whitelabel resolvido pelo hostname.
10
+ * Se forem diferentes (ex: admin com id_wl=1 num domínio de id_wl=30),
11
+ * retorna um RequestConfig com o override correto.
12
+ * Se forem iguais, retorna undefined (sem custo extra).
13
+ */
14
+ export async function buildWlOverride(
15
+ jwtWlId: number,
16
+ ): Promise<RequestConfig | undefined> {
17
+ try {
18
+ const { id: hostWlId } = await findWhitelabel();
19
+
20
+ if (jwtWlId !== hostWlId) {
21
+ const wlToken = await whitelabelService.getTokenByWhitelabelId(jwtWlId);
22
+ return { whiteLabelId: jwtWlId, authToken: wlToken };
23
+ }
24
+ } catch {
25
+ // Fallback to default whitelabel resolution
26
+ }
27
+
28
+ return undefined;
29
+ }
30
+
31
+ /**
32
+ * Extrai `id_wl` do JWT cookie e delega para `buildWlOverride`.
33
+ */
34
+ export async function buildWlOverrideFromJwt(
35
+ cookie: string,
36
+ ): Promise<RequestConfig | undefined> {
37
+ try {
38
+ const payload = JSON.parse(atob(cookie.split('.')[1])) as JWTPayload;
39
+ return buildWlOverride(Number(payload.id_wl));
40
+ } catch {
41
+ return undefined;
42
+ }
43
+ }
@@ -1,53 +1,53 @@
1
- import 'server-only';
2
-
3
- import { cookies } from 'next/headers';
4
- import { decode } from '@greatapps/jwt';
5
- import { ApiError } from '../../../infra/api/types';
6
-
7
- const AUTH_COOKIE_NAME = 'greatapps';
8
-
9
- /**
10
- * Verifica se o JWT do cookie `greatapps` é válido (assinatura + expiração)
11
- * sem bater no backend.
12
- *
13
- * Usa `@greatapps/jwt` decode que:
14
- * 1. Valida a assinatura HMAC com `SECRET_JWT---{id_wl}`
15
- * 2. Checa `exp` automaticamente (rejeita se expirou)
16
- *
17
- * - Se o token não existe → SESSION_INVALID 401
18
- * - Se a assinatura é inválida → SESSION_INVALID 401
19
- * - Se `exp` já passou → SESSION_INVALID 401
20
- * - Se `SECRET_JWT` não está configurado → skip (não bloqueia)
21
- */
22
- export async function requireTokenNotExpired(): Promise<void> {
23
- if (process.env.DUMMY_AUTH_TOKEN) return;
24
-
25
- const secretJwt = process.env.SECRET_JWT;
26
- if (!secretJwt) return;
27
-
28
- const cookieStore = await cookies();
29
- const token = cookieStore.get(AUTH_COOKIE_NAME)?.value;
30
-
31
- if (!token) {
32
- throw new ApiError('Sessão inválida ou expirada 1', 'SESSION_INVALID', 401);
33
- }
34
-
35
- try {
36
- const payload = JSON.parse(atob(token.split('.')[1]));
37
- const idWl = payload.id_wl;
38
-
39
- if (!idWl) {
40
- throw new ApiError('Sessão inválida ou expirada 2', 'SESSION_INVALID', 401);
41
- }
42
-
43
- const secret = `${secretJwt}---${idWl}`;
44
- const decoded = await decode(token, secret);
45
-
46
- if (!decoded) {
47
- throw new ApiError('Sessão inválida ou expirada 3', 'SESSION_INVALID', 401);
48
- }
49
- } catch (err) {
50
- if (err instanceof ApiError) throw err;
51
- throw new ApiError('Sessão inválida ou expirada 4', 'SESSION_INVALID', 401);
52
- }
53
- }
1
+ import 'server-only';
2
+
3
+ import { cookies } from 'next/headers';
4
+ import { decode } from '@greatapps/jwt';
5
+ import { ApiError } from '../../../infra/api/types';
6
+
7
+ const AUTH_COOKIE_NAME = 'greatapps';
8
+
9
+ /**
10
+ * Verifica se o JWT do cookie `greatapps` é válido (assinatura + expiração)
11
+ * sem bater no backend.
12
+ *
13
+ * Usa `@greatapps/jwt` decode que:
14
+ * 1. Valida a assinatura HMAC com `SECRET_JWT---{id_wl}`
15
+ * 2. Checa `exp` automaticamente (rejeita se expirou)
16
+ *
17
+ * - Se o token não existe → SESSION_INVALID 401
18
+ * - Se a assinatura é inválida → SESSION_INVALID 401
19
+ * - Se `exp` já passou → SESSION_INVALID 401
20
+ * - Se `SECRET_JWT` não está configurado → skip (não bloqueia)
21
+ */
22
+ export async function requireTokenNotExpired(): Promise<void> {
23
+ if (process.env.DUMMY_AUTH_TOKEN) return;
24
+
25
+ const secretJwt = process.env.SECRET_JWT;
26
+ if (!secretJwt) return;
27
+
28
+ const cookieStore = await cookies();
29
+ const token = cookieStore.get(AUTH_COOKIE_NAME)?.value;
30
+
31
+ if (!token) {
32
+ throw new ApiError('Sessão inválida ou expirada 1', 'SESSION_INVALID', 401);
33
+ }
34
+
35
+ try {
36
+ const payload = JSON.parse(atob(token.split('.')[1]));
37
+ const idWl = payload.id_wl;
38
+
39
+ if (!idWl) {
40
+ throw new ApiError('Sessão inválida ou expirada 2', 'SESSION_INVALID', 401);
41
+ }
42
+
43
+ const secret = `${secretJwt}---${idWl}`;
44
+ const decoded = await decode(token, secret);
45
+
46
+ if (!decoded) {
47
+ throw new ApiError('Sessão inválida ou expirada 3', 'SESSION_INVALID', 401);
48
+ }
49
+ } catch (err) {
50
+ if (err instanceof ApiError) throw err;
51
+ throw new ApiError('Sessão inválida ou expirada 4', 'SESSION_INVALID', 401);
52
+ }
53
+ }
@@ -1,35 +1,35 @@
1
- import 'server-only';
2
-
3
- import { cache } from 'react';
4
-
5
- import { ApiError } from '../../../infra/api/types';
6
- import { getClientInfoFromRequest } from '../../../infra/utils/client-info';
7
- import { authService } from '../services/auth.service';
8
-
9
- /**
10
- * Valida a sessão do usuário chamando POST /auth/keep no backend.
11
- *
12
- * Garante que o cookie `greatapps`:
13
- * 1. Existe.
14
- * 2. Corresponde a uma sessão registrada no banco (não foi forjado).
15
- * 3. Ainda é considerada válida pelo backend (não foi revogada/expirada).
16
- *
17
- * Deduplicada por request via React.cache — múltiplas chamadas dentro do
18
- * mesmo server action resultam em 1 round-trip ao backend, não N.
19
- *
20
- * Use em server actions sensíveis (mutações, billing, destrutivas).
21
- * Prefira o wrapper `safeMutationAction` que já envelopa isto junto com
22
- * o `safeServerAction` padrão.
23
- *
24
- * Em caso de erro de rede/backend, falha fechada (SESSION_INVALID 401).
25
- */
26
- export const requireValidSession = cache(async (): Promise<void> => {
27
- if (process.env.DUMMY_AUTH_TOKEN) return;
28
-
29
- const clientInfo = await getClientInfoFromRequest();
30
- const isValid = await authService.validateSession(clientInfo);
31
-
32
- if (!isValid) {
33
- throw new ApiError('Sessão inválida ou expirada', 'SESSION_INVALID', 401);
34
- }
35
- });
1
+ import 'server-only';
2
+
3
+ import { cache } from 'react';
4
+
5
+ import { ApiError } from '../../../infra/api/types';
6
+ import { getClientInfoFromRequest } from '../../../infra/utils/client-info';
7
+ import { authService } from '../services/auth.service';
8
+
9
+ /**
10
+ * Valida a sessão do usuário chamando POST /auth/keep no backend.
11
+ *
12
+ * Garante que o cookie `greatapps`:
13
+ * 1. Existe.
14
+ * 2. Corresponde a uma sessão registrada no banco (não foi forjado).
15
+ * 3. Ainda é considerada válida pelo backend (não foi revogada/expirada).
16
+ *
17
+ * Deduplicada por request via React.cache — múltiplas chamadas dentro do
18
+ * mesmo server action resultam em 1 round-trip ao backend, não N.
19
+ *
20
+ * Use em server actions sensíveis (mutações, billing, destrutivas).
21
+ * Prefira o wrapper `safeMutationAction` que já envelopa isto junto com
22
+ * o `safeServerAction` padrão.
23
+ *
24
+ * Em caso de erro de rede/backend, falha fechada (SESSION_INVALID 401).
25
+ */
26
+ export const requireValidSession = cache(async (): Promise<void> => {
27
+ if (process.env.DUMMY_AUTH_TOKEN) return;
28
+
29
+ const clientInfo = await getClientInfoFromRequest();
30
+ const isValid = await authService.validateSession(clientInfo);
31
+
32
+ if (!isValid) {
33
+ throw new ApiError('Sessão inválida ou expirada', 'SESSION_INVALID', 401);
34
+ }
35
+ });
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { cardsService } from '../services/cards.service';
5
- import { CreateCardRequest } from '../types';
6
-
7
- export async function createCardAction(data: CreateCardRequest) {
8
- return safeMutationAction(() => cardsService.createCard(data));
9
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { cardsService } from '../services/cards.service';
5
+ import { CreateCardRequest } from '../types';
6
+
7
+ export async function createCardAction(data: CreateCardRequest) {
8
+ return safeMutationAction(() => cardsService.createCard(data));
9
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { cardsService } from '../services/cards.service';
5
-
6
- export async function createSetupIntentAction() {
7
- return safeMutationAction(() => cardsService.createSetupIntent());
8
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { cardsService } from '../services/cards.service';
5
+
6
+ export async function createSetupIntentAction() {
7
+ return safeMutationAction(() => cardsService.createSetupIntent());
8
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { cardsService } from '../services/cards.service';
5
-
6
- export async function deleteCardAction(id: string) {
7
- return safeMutationAction(() => cardsService.deleteCard(id));
8
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { cardsService } from '../services/cards.service';
5
+
6
+ export async function deleteCardAction(id: string) {
7
+ return safeMutationAction(() => cardsService.deleteCard(id));
8
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeMutationAction } from '../../../utils/safeMutationAction';
4
- import { cardsService } from '../services/cards.service';
5
-
6
- export async function setDefaultCardAction(cardId: string) {
7
- return safeMutationAction(() => cardsService.setDefaultCard(cardId));
8
- }
1
+ 'use server';
2
+
3
+ import { safeMutationAction } from '../../../utils/safeMutationAction';
4
+ import { cardsService } from '../services/cards.service';
5
+
6
+ export async function setDefaultCardAction(cardId: string) {
7
+ return safeMutationAction(() => cardsService.setDefaultCard(cardId));
8
+ }
@@ -1,15 +1,15 @@
1
- import 'server-only';
2
-
3
- import type { NextRequest } from 'next/server';
4
- import { parseId } from '../../../infra/route/parse-id';
5
- import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
- import { cardsService } from '../services/cards.service';
7
-
8
- export function createFindCardByIdHandler() {
9
- return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
10
- return safeRouteHandler(async () => {
11
- const { id } = await params;
12
- return cardsService.findCardById(parseId(id));
13
- });
14
- };
15
- }
1
+ import 'server-only';
2
+
3
+ import type { NextRequest } from 'next/server';
4
+ import { parseId } from '../../../infra/route/parse-id';
5
+ import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
6
+ import { cardsService } from '../services/cards.service';
7
+
8
+ export function createFindCardByIdHandler() {
9
+ return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
10
+ return safeRouteHandler(async () => {
11
+ const { id } = await params;
12
+ return cardsService.findCardById(parseId(id));
13
+ });
14
+ };
15
+ }
@@ -1,10 +1,10 @@
1
- import 'server-only';
2
-
3
- import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
4
- import { cardsService } from '../services/cards.service';
5
-
6
- export function createListCardsHandler() {
7
- return async function GET() {
8
- return safeRouteHandler(() => cardsService.listCards());
9
- };
10
- }
1
+ import 'server-only';
2
+
3
+ import { safeRouteHandler } from '../../../infra/route/safe-route-handler';
4
+ import { cardsService } from '../services/cards.service';
5
+
6
+ export function createListCardsHandler() {
7
+ return async function GET() {
8
+ return safeRouteHandler(() => cardsService.listCards());
9
+ };
10
+ }