@greatapps/common 1.1.698 → 1.1.700

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 (569) 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/HexaPromoModal.mjs +166 -0
  34. package/dist/components/modals/HexaPromoModal.mjs.map +1 -0
  35. package/dist/components/modals/HexaPromoModalGate.mjs +54 -0
  36. package/dist/components/modals/HexaPromoModalGate.mjs.map +1 -0
  37. package/dist/components/modals/Modals.mjs.map +1 -1
  38. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  39. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  40. package/dist/components/modals/cards/CannotDeleteCardModal.mjs.map +1 -1
  41. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  42. package/dist/components/modals/cards/DeleteCardModal.mjs.map +1 -1
  43. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  44. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  45. package/dist/components/navigation/OverdueInvoiceBanner.mjs.map +1 -1
  46. package/dist/components/navigation/PendingCancellationBanner.mjs.map +1 -1
  47. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  48. package/dist/components/navigation/SubscriptionBanner.mjs.map +1 -1
  49. package/dist/components/navigation/TrialBanner.mjs.map +1 -1
  50. package/dist/components/navigation/UpcomingInvoiceBanner.mjs.map +1 -1
  51. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  52. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  53. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  54. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  55. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  56. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  57. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  58. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  59. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  60. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  61. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  62. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  63. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  64. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  65. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  66. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  67. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  68. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  69. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  70. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  71. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  72. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  73. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  74. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  75. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  76. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  77. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  78. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  79. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  80. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  81. package/dist/components/ui/form/FormField.mjs.map +1 -1
  82. package/dist/components/ui/form/Input.mjs.map +1 -1
  83. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  84. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  85. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  86. package/dist/components/ui/form/Select.mjs +1 -1
  87. package/dist/components/ui/form/Select.mjs.map +1 -1
  88. package/dist/components/ui/form/Switch.mjs.map +1 -1
  89. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  90. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  91. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  92. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  93. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  94. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  95. package/dist/components/widgets/ImageUpload/ImageCropModal.mjs.map +1 -1
  96. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  97. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  98. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  99. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  100. package/dist/handlers.mjs.map +1 -1
  101. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  102. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  103. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  104. package/dist/hooks/useRouter.mjs.map +1 -1
  105. package/dist/http.mjs.map +1 -1
  106. package/dist/i18n/config.mjs.map +1 -1
  107. package/dist/i18n/country-language.mjs.map +1 -1
  108. package/dist/i18n/messages/en-us.mjs.map +1 -1
  109. package/dist/i18n/messages/es-es.mjs.map +1 -1
  110. package/dist/i18n/messages/index.mjs.map +1 -1
  111. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  112. package/dist/i18n/normalize.mjs.map +1 -1
  113. package/dist/i18n/resolve-locale.mjs.map +1 -1
  114. package/dist/i18n.mjs.map +1 -1
  115. package/dist/index.mjs +38 -32
  116. package/dist/index.mjs.map +1 -1
  117. package/dist/infra/http/api-fetch.mjs.map +1 -1
  118. package/dist/infra/route/parse-id.mjs.map +1 -1
  119. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  120. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  121. package/dist/infra/route/search-params.mjs.map +1 -1
  122. package/dist/infra/utils/array.mjs.map +1 -1
  123. package/dist/infra/utils/date.mjs.map +1 -1
  124. package/dist/middleware.mjs.map +1 -1
  125. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  126. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  127. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  128. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  129. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  132. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  133. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  134. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  135. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  136. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  137. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  138. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  139. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  140. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  141. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  142. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  143. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  147. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  148. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  149. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  150. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  151. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  152. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  153. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  154. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  155. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  156. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  157. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  158. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  159. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  160. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  161. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  162. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  163. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  164. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  168. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  169. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  170. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  171. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  172. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  173. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  174. package/dist/modules/cards/types.mjs.map +1 -1
  175. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  176. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  177. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  178. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  179. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  180. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  181. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  182. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  183. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  184. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  185. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  186. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  187. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  188. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  189. package/dist/modules/images/utils/base64.mjs.map +1 -1
  190. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  191. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  192. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  193. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  194. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  195. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  196. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  197. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  198. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  199. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  200. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  201. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  202. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  203. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  204. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  205. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  210. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  211. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  212. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  215. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  216. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  217. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  226. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  227. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  228. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  229. package/dist/modules/projects/services/project-users.service.mjs +2 -2
  230. package/dist/modules/projects/services/project-users.service.mjs.map +1 -1
  231. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  232. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  233. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  234. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  235. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  236. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  237. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  238. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  240. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  241. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  242. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  243. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  244. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  245. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  246. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  248. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  249. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  250. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  251. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  252. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  253. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  254. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  255. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  256. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  257. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  258. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  259. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  260. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  261. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  262. package/dist/providers/auth.provider.mjs +2 -0
  263. package/dist/providers/auth.provider.mjs.map +1 -1
  264. package/dist/providers/navigation.provider.mjs.map +1 -1
  265. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  266. package/dist/route.mjs.map +1 -1
  267. package/dist/store/useAccountModals.mjs.map +1 -1
  268. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  269. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  270. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  271. package/dist/store/useHexaPromoModal.mjs +14 -0
  272. package/dist/store/useHexaPromoModal.mjs.map +1 -0
  273. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  274. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  275. package/dist/utils/constants/br-states.mjs.map +1 -1
  276. package/dist/utils/cookies/hexa-promo.mjs +88 -0
  277. package/dist/utils/cookies/hexa-promo.mjs.map +1 -0
  278. package/dist/utils/countries.mjs.map +1 -1
  279. package/dist/utils/format/currency.mjs.map +1 -1
  280. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  281. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  282. package/dist/utils/next-navigation.mjs.map +1 -1
  283. package/dist/utils/redirect.mjs.map +1 -1
  284. package/dist/utils/safeMutationAction.mjs.map +1 -1
  285. package/dist/utils/safeServerAction.mjs.map +1 -1
  286. package/dist/utils/withAction.mjs.map +1 -1
  287. package/package.json +115 -115
  288. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  289. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  290. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  291. package/src/components/account/DeleteAccountModal.tsx +160 -160
  292. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  293. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  294. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  295. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  296. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  297. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  298. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  299. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  300. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  301. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  302. package/src/components/account/sections/SecuritySection.tsx +102 -102
  303. package/src/components/account/sections/TokenSection.tsx +85 -85
  304. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  305. package/src/components/embeds/CrispEmbed.tsx +195 -195
  306. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  307. package/src/components/embeds/FrillEmbed.tsx +146 -146
  308. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  309. package/src/components/layouts/AppNavBar.tsx +40 -40
  310. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  311. package/src/components/layouts/NavBar.tsx +228 -228
  312. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  313. package/src/components/layouts/ProfilePopover.tsx +191 -191
  314. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  315. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  316. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  317. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  318. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  319. package/src/components/modals/HexaPromoModal.tsx +212 -0
  320. package/src/components/modals/HexaPromoModalGate.tsx +80 -0
  321. package/src/components/modals/Modals.tsx +25 -25
  322. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  323. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  324. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  325. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  326. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  327. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  328. package/src/components/navigation/NavItemsContext.ts +20 -20
  329. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  330. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  331. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  332. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  333. package/src/components/navigation/TrialBanner.tsx +54 -54
  334. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  335. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  336. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  337. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  338. package/src/components/pages/NotFoundPage.tsx +75 -75
  339. package/src/components/pages/notifications/Notifications.tsx +190 -190
  340. package/src/components/ui/buttons/Button.tsx +77 -77
  341. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  342. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  343. package/src/components/ui/data-display/Accordion.tsx +81 -81
  344. package/src/components/ui/data-display/Badge.tsx +47 -47
  345. package/src/components/ui/data-display/Card.tsx +93 -93
  346. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  347. package/src/components/ui/data-display/CardItem.tsx +135 -135
  348. package/src/components/ui/data-display/Pagination.tsx +126 -126
  349. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  350. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  351. package/src/components/ui/data-display/Separator.tsx +29 -29
  352. package/src/components/ui/data-display/Table.tsx +117 -117
  353. package/src/components/ui/data-display/Tabs.tsx +67 -67
  354. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  355. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  356. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  357. package/src/components/ui/feedback/Progress.tsx +40 -40
  358. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  359. package/src/components/ui/feedback/Toast.tsx +104 -104
  360. package/src/components/ui/form/Calendar.tsx +228 -228
  361. package/src/components/ui/form/Checkbox.tsx +31 -31
  362. package/src/components/ui/form/ComboboxField.tsx +159 -159
  363. package/src/components/ui/form/DatePicker.tsx +100 -100
  364. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  365. package/src/components/ui/form/FormField.tsx +133 -133
  366. package/src/components/ui/form/Input.tsx +20 -20
  367. package/src/components/ui/form/InputOtp.tsx +80 -80
  368. package/src/components/ui/form/PhoneInput.tsx +210 -210
  369. package/src/components/ui/form/RadioGroup.tsx +45 -45
  370. package/src/components/ui/form/Select.tsx +200 -200
  371. package/src/components/ui/form/Switch.tsx +32 -32
  372. package/src/components/ui/form/Textarea.tsx +19 -19
  373. package/src/components/ui/overlay/Command.tsx +185 -185
  374. package/src/components/ui/overlay/Dialog.tsx +153 -153
  375. package/src/components/ui/overlay/Popover.tsx +49 -49
  376. package/src/components/ui/overlay/Sheet.tsx +170 -170
  377. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  378. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  379. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  380. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  381. package/src/components/widgets/ImageUpload/index.ts +3 -3
  382. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  383. package/src/handlers.ts +22 -22
  384. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  385. package/src/hooks/useAuthQueryKey.ts +32 -32
  386. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  387. package/src/hooks/useRouter.ts +38 -38
  388. package/src/http.ts +1 -1
  389. package/src/i18n/config.ts +17 -17
  390. package/src/i18n/country-language.ts +60 -60
  391. package/src/i18n/messages/en-us.ts +519 -519
  392. package/src/i18n/messages/es-es.ts +520 -520
  393. package/src/i18n/messages/index.ts +24 -24
  394. package/src/i18n/messages/pt-br.ts +543 -543
  395. package/src/i18n/normalize.ts +15 -15
  396. package/src/i18n/resolve-locale.ts +77 -77
  397. package/src/i18n.ts +10 -10
  398. package/src/index.ts +587 -584
  399. package/src/infra/http/api-fetch.ts +39 -39
  400. package/src/infra/route/parse-id.ts +9 -9
  401. package/src/infra/route/parse-numeric.ts +16 -16
  402. package/src/infra/route/safe-route-handler.ts +16 -16
  403. package/src/infra/route/search-params.ts +9 -9
  404. package/src/infra/utils/array.ts +167 -167
  405. package/src/infra/utils/date.ts +59 -59
  406. package/src/middleware.ts +4 -4
  407. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  408. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  409. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  410. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  411. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  412. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  413. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  414. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  415. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  416. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  417. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  418. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  419. package/src/modules/accounts/services/account-token.service.ts +52 -52
  420. package/src/modules/accounts/services/account.service.ts +243 -243
  421. package/src/modules/accounts/types.ts +230 -230
  422. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  423. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  424. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  425. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  426. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  427. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  428. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  429. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  430. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  431. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  432. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  433. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  434. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  435. package/src/modules/auth/types/management-permission.type.ts +14 -14
  436. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  437. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  438. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  439. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  440. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  441. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  442. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  443. package/src/modules/cards/actions/create-card.action.ts +9 -9
  444. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  445. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  446. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  447. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  448. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  449. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  450. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  451. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  452. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  453. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  454. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  455. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  456. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  457. package/src/modules/cards/services/cards.service.ts +136 -136
  458. package/src/modules/cards/types.ts +52 -52
  459. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  460. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  461. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  462. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  463. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  464. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  465. package/src/modules/charges/services/charges.service.ts +63 -63
  466. package/src/modules/charges/types/charge.type.ts +68 -68
  467. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  468. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  469. package/src/modules/images/actions/process-image.action.ts +40 -40
  470. package/src/modules/images/constants/image.constants.ts +11 -11
  471. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  472. package/src/modules/images/services/image-processing.service.ts +75 -75
  473. package/src/modules/images/types/image.type.ts +54 -54
  474. package/src/modules/images/utils/base64.ts +26 -26
  475. package/src/modules/images/utils/compress-image.ts +20 -20
  476. package/src/modules/images/utils/crop-image.ts +68 -68
  477. package/src/modules/images/utils/validate-image.ts +86 -86
  478. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  479. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  480. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  481. package/src/modules/pages/services/pages.service.ts +27 -27
  482. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  483. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  484. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  485. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  486. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  487. package/src/modules/plans/services/plans.service.ts +136 -136
  488. package/src/modules/plans/types/plan.type.ts +79 -79
  489. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  490. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  491. package/src/modules/projects/actions/create-project.action.ts +9 -9
  492. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  493. package/src/modules/projects/actions/find-project.action.ts +8 -8
  494. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  495. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  496. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  497. package/src/modules/projects/actions/update-project.action.ts +9 -9
  498. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  499. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  500. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  501. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  502. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  503. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  504. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  505. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  506. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  507. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  508. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  509. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  510. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  511. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  512. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  513. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  514. package/src/modules/projects/services/project-users.service.ts +3 -2
  515. package/src/modules/projects/services/projects.service.ts +156 -156
  516. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  517. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  518. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  519. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  520. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  521. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  522. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  523. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  524. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  525. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  526. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  527. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  528. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  529. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  530. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  531. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  532. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  533. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  534. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  535. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  536. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  537. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  538. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  539. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  540. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  541. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  542. package/src/modules/users/hooks/messages.hook.ts +69 -69
  543. package/src/modules/users/services/messages.service.ts +49 -49
  544. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  545. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  546. package/src/modules/whitelabel/schema.ts +84 -84
  547. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  548. package/src/providers/auth.provider.tsx +267 -264
  549. package/src/providers/navigation.provider.tsx +99 -99
  550. package/src/providers/whitelabel.provider.tsx +90 -90
  551. package/src/route.ts +4 -4
  552. package/src/store/useAccountModals.ts +85 -85
  553. package/src/store/useBuyCreditsModal.ts +21 -21
  554. package/src/store/useCreditsDisabledModal.ts +11 -11
  555. package/src/store/useDesktopSidebarStore.ts +47 -47
  556. package/src/store/useHexaPromoModal.ts +13 -0
  557. package/src/store/useMdSidebarStore.ts +34 -34
  558. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  559. package/src/utils/constants/br-states.ts +29 -29
  560. package/src/utils/cookies/hexa-promo.ts +114 -0
  561. package/src/utils/countries.ts +224 -224
  562. package/src/utils/format/currency.ts +70 -70
  563. package/src/utils/intl/cookie-domain.ts +29 -29
  564. package/src/utils/intl/locale-cookie.ts +18 -18
  565. package/src/utils/next-navigation.ts +7 -7
  566. package/src/utils/redirect.ts +78 -78
  567. package/src/utils/safeMutationAction.ts +24 -24
  568. package/src/utils/safeServerAction.ts +21 -21
  569. package/src/utils/withAction.ts +13 -13
@@ -1,29 +1,29 @@
1
- /**
2
- * Deriva o domínio de cookie compartilhável entre subdomínios a partir do domínio do
3
- * whitelabel (ex.: `https://app.greatpages.com.br` → `.app.greatpages.com.br`).
4
- *
5
- * Mesma normalização usada pelo cookie de auth `greatapps` (auth.service.normalizeCookieDomain),
6
- * para que o cookie de locale acompanhe o mesmo escopo. Pura (sem APIs de servidor) → client+server.
7
- * Retorna `undefined` para localhost/host inválido (cookie fica host-scoped).
8
- */
9
- export function cookieDomainFromDomain(domain?: string | null): string | undefined {
10
- if (!domain) return undefined;
11
-
12
- const normalized = domain.trim();
13
- if (!normalized) return undefined;
14
-
15
- let rawHost: string;
16
- try {
17
- rawHost = new URL(normalized).hostname;
18
- } catch {
19
- rawHost = normalized
20
- .replace(/^https?:\/\//i, '')
21
- .replace(/^www\./i, '')
22
- .split('/')[0]
23
- .split(':')[0];
24
- }
25
-
26
- if (!rawHost || rawHost === 'localhost') return undefined;
27
-
28
- return rawHost.startsWith('.') ? rawHost : `.${rawHost}`;
29
- }
1
+ /**
2
+ * Deriva o domínio de cookie compartilhável entre subdomínios a partir do domínio do
3
+ * whitelabel (ex.: `https://app.greatpages.com.br` → `.app.greatpages.com.br`).
4
+ *
5
+ * Mesma normalização usada pelo cookie de auth `greatapps` (auth.service.normalizeCookieDomain),
6
+ * para que o cookie de locale acompanhe o mesmo escopo. Pura (sem APIs de servidor) → client+server.
7
+ * Retorna `undefined` para localhost/host inválido (cookie fica host-scoped).
8
+ */
9
+ export function cookieDomainFromDomain(domain?: string | null): string | undefined {
10
+ if (!domain) return undefined;
11
+
12
+ const normalized = domain.trim();
13
+ if (!normalized) return undefined;
14
+
15
+ let rawHost: string;
16
+ try {
17
+ rawHost = new URL(normalized).hostname;
18
+ } catch {
19
+ rawHost = normalized
20
+ .replace(/^https?:\/\//i, '')
21
+ .replace(/^www\./i, '')
22
+ .split('/')[0]
23
+ .split(':')[0];
24
+ }
25
+
26
+ if (!rawHost || rawHost === 'localhost') return undefined;
27
+
28
+ return rawHost.startsWith('.') ? rawHost : `.${rawHost}`;
29
+ }
@@ -1,18 +1,18 @@
1
- import { LOCALE_COOKIE } from '../../i18n/config';
2
- import { cookieDomainFromDomain } from './cookie-domain';
3
-
4
- const ONE_YEAR = 60 * 60 * 24 * 365;
5
-
6
- /**
7
- * Persiste o locale escolhido no cookie `NEXT_LOCALE` (lido por `resolveLocale` no servidor).
8
- *
9
- * Passe `whitelabelDomain` (de `useWhitelabel().whitelabel?.domain`) para o cookie ser
10
- * compartilhado entre subdomínios (accounts. → pages. → apps.), no mesmo escopo do cookie
11
- * de auth. Sem ele, o cookie fica host-scoped.
12
- */
13
- export function setLocaleCookie(locale: string, whitelabelDomain?: string | null): void {
14
- if (typeof document === 'undefined') return;
15
- const domain = cookieDomainFromDomain(whitelabelDomain);
16
- const domainAttr = domain ? `; domain=${domain}` : '';
17
- document.cookie = `${LOCALE_COOKIE}=${locale}; path=/; max-age=${ONE_YEAR}; samesite=lax${domainAttr}`;
18
- }
1
+ import { LOCALE_COOKIE } from '../../i18n/config';
2
+ import { cookieDomainFromDomain } from './cookie-domain';
3
+
4
+ const ONE_YEAR = 60 * 60 * 24 * 365;
5
+
6
+ /**
7
+ * Persiste o locale escolhido no cookie `NEXT_LOCALE` (lido por `resolveLocale` no servidor).
8
+ *
9
+ * Passe `whitelabelDomain` (de `useWhitelabel().whitelabel?.domain`) para o cookie ser
10
+ * compartilhado entre subdomínios (accounts. → pages. → apps.), no mesmo escopo do cookie
11
+ * de auth. Sem ele, o cookie fica host-scoped.
12
+ */
13
+ export function setLocaleCookie(locale: string, whitelabelDomain?: string | null): void {
14
+ if (typeof document === 'undefined') return;
15
+ const domain = cookieDomainFromDomain(whitelabelDomain);
16
+ const domainAttr = domain ? `; domain=${domain}` : '';
17
+ document.cookie = `${LOCALE_COOKIE}=${locale}; path=/; max-age=${ONE_YEAR}; samesite=lax${domainAttr}`;
18
+ }
@@ -1,7 +1,7 @@
1
- export {
2
- usePathname,
3
- useSearchParams,
4
- useParams,
5
- redirect,
6
- notFound,
7
- } from "next/navigation";
1
+ export {
2
+ usePathname,
3
+ useSearchParams,
4
+ useParams,
5
+ redirect,
6
+ notFound,
7
+ } from "next/navigation";
@@ -1,78 +1,78 @@
1
- /**
2
- * Resolve o destino pós-login com proteção contra open redirect.
3
- *
4
- * Só aceita o `redirect` recebido na query quando ele aponta para o MESMO site do
5
- * accounts onde o usuário está — mesmo domínio-base, qualquer subdomínio. Em
6
- * `accounts.greatpages.com.br` libera `*.greatpages.com.br` (editor-new, editor, app…);
7
- * num whitelabel em `accounts.marca.com.br` libera `*.marca.com.br`. Qualquer outro host
8
- * (`evil.com`, `greatpages.com.br.evil.com`) cai no `fallback`.
9
- *
10
- * `currentHostname` é o host do accounts (`window.location.hostname`). O accounts vive
11
- * sempre num subdomínio de 1 nível (`accounts.` / `acc.` / `great-accounts.`), então o
12
- * domínio-base é o host sem o primeiro rótulo.
13
- */
14
- export function resolveSafeRedirect(
15
- redirect: string | null | undefined,
16
- currentHostname: string,
17
- fallback: string,
18
- ): string {
19
- if (!redirect) return fallback;
20
-
21
- // path relativo same-origin — uma barra só (bloqueia `//evil.com` e `/\evil.com`)
22
- if (redirect[0] === '/' && redirect[1] !== '/' && redirect[1] !== '\\') {
23
- return redirect;
24
- }
25
-
26
- let url: URL;
27
- try {
28
- url = new URL(redirect);
29
- } catch {
30
- return fallback;
31
- }
32
-
33
- if (url.protocol !== 'https:' && url.protocol !== 'http:') return fallback;
34
- if (!isSameSite(url.hostname, currentHostname)) return fallback;
35
-
36
- return url.toString();
37
- }
38
-
39
- function isSameSite(target: string, current: string): boolean {
40
- const host = target.toLowerCase();
41
- const base = baseDomain(current.toLowerCase());
42
- return host === base || host.endsWith(`.${base}`);
43
- }
44
-
45
- // Sufixos públicos de 2 rótulos (não há PSL completa aqui — só os que aparecem nos domínios
46
- // dos whitelabels). Um host terminando num destes tem o domínio registrável com 1 rótulo a mais.
47
- const TWO_LABEL_PUBLIC_SUFFIXES = ['com.br', 'net.br', 'org.br', 'dev.br', 'app.br', 'co.uk', 'com.mx', 'com.ar'];
48
-
49
- function baseDomain(host: string): string {
50
- const labels = host.split('.');
51
- const publicSuffix = TWO_LABEL_PUBLIC_SUFFIXES.find((s) => host === s || host.endsWith(`.${s}`));
52
- // Domínio registrável = nº de rótulos do sufixo + 1 (ex.: `x.com.br` = 3; `x.app` = 2).
53
- const registrableLabels = (publicSuffix ? publicSuffix.split('.').length : 1) + 1;
54
- // accounts está sempre num subdomínio de 1 nível → base = host sem o 1º rótulo. Mas nunca
55
- // reduz até o domínio registrável ou abaixo (senão `greatpages.com.br` viraria `com.br` e
56
- // liberaria qualquer `*.com.br` — open redirect). Nesse caso exige host exato.
57
- return labels.length > registrableLabels ? labels.slice(1).join('.') : host;
58
- }
59
-
60
- /**
61
- * Devolve `candidate` apenas se ele for uma URL do MESMO host; senão o `fallback`.
62
- *
63
- * Usado no bounce do `/login` de cada app (editor, pages…), que recebe no param a URL
64
- * absoluta da própria página de origem e a repassa ao accounts — match exato de host
65
- * porque o destino esperado é o do próprio app.
66
- */
67
- export function sameHostOr(
68
- candidate: string | undefined,
69
- host: string,
70
- fallback: string,
71
- ): string {
72
- if (!candidate) return fallback;
73
- try {
74
- return new URL(candidate).host === host ? candidate : fallback;
75
- } catch {
76
- return fallback;
77
- }
78
- }
1
+ /**
2
+ * Resolve o destino pós-login com proteção contra open redirect.
3
+ *
4
+ * Só aceita o `redirect` recebido na query quando ele aponta para o MESMO site do
5
+ * accounts onde o usuário está — mesmo domínio-base, qualquer subdomínio. Em
6
+ * `accounts.greatpages.com.br` libera `*.greatpages.com.br` (editor-new, editor, app…);
7
+ * num whitelabel em `accounts.marca.com.br` libera `*.marca.com.br`. Qualquer outro host
8
+ * (`evil.com`, `greatpages.com.br.evil.com`) cai no `fallback`.
9
+ *
10
+ * `currentHostname` é o host do accounts (`window.location.hostname`). O accounts vive
11
+ * sempre num subdomínio de 1 nível (`accounts.` / `acc.` / `great-accounts.`), então o
12
+ * domínio-base é o host sem o primeiro rótulo.
13
+ */
14
+ export function resolveSafeRedirect(
15
+ redirect: string | null | undefined,
16
+ currentHostname: string,
17
+ fallback: string,
18
+ ): string {
19
+ if (!redirect) return fallback;
20
+
21
+ // path relativo same-origin — uma barra só (bloqueia `//evil.com` e `/\evil.com`)
22
+ if (redirect[0] === '/' && redirect[1] !== '/' && redirect[1] !== '\\') {
23
+ return redirect;
24
+ }
25
+
26
+ let url: URL;
27
+ try {
28
+ url = new URL(redirect);
29
+ } catch {
30
+ return fallback;
31
+ }
32
+
33
+ if (url.protocol !== 'https:' && url.protocol !== 'http:') return fallback;
34
+ if (!isSameSite(url.hostname, currentHostname)) return fallback;
35
+
36
+ return url.toString();
37
+ }
38
+
39
+ function isSameSite(target: string, current: string): boolean {
40
+ const host = target.toLowerCase();
41
+ const base = baseDomain(current.toLowerCase());
42
+ return host === base || host.endsWith(`.${base}`);
43
+ }
44
+
45
+ // Sufixos públicos de 2 rótulos (não há PSL completa aqui — só os que aparecem nos domínios
46
+ // dos whitelabels). Um host terminando num destes tem o domínio registrável com 1 rótulo a mais.
47
+ const TWO_LABEL_PUBLIC_SUFFIXES = ['com.br', 'net.br', 'org.br', 'dev.br', 'app.br', 'co.uk', 'com.mx', 'com.ar'];
48
+
49
+ function baseDomain(host: string): string {
50
+ const labels = host.split('.');
51
+ const publicSuffix = TWO_LABEL_PUBLIC_SUFFIXES.find((s) => host === s || host.endsWith(`.${s}`));
52
+ // Domínio registrável = nº de rótulos do sufixo + 1 (ex.: `x.com.br` = 3; `x.app` = 2).
53
+ const registrableLabels = (publicSuffix ? publicSuffix.split('.').length : 1) + 1;
54
+ // accounts está sempre num subdomínio de 1 nível → base = host sem o 1º rótulo. Mas nunca
55
+ // reduz até o domínio registrável ou abaixo (senão `greatpages.com.br` viraria `com.br` e
56
+ // liberaria qualquer `*.com.br` — open redirect). Nesse caso exige host exato.
57
+ return labels.length > registrableLabels ? labels.slice(1).join('.') : host;
58
+ }
59
+
60
+ /**
61
+ * Devolve `candidate` apenas se ele for uma URL do MESMO host; senão o `fallback`.
62
+ *
63
+ * Usado no bounce do `/login` de cada app (editor, pages…), que recebe no param a URL
64
+ * absoluta da própria página de origem e a repassa ao accounts — match exato de host
65
+ * porque o destino esperado é o do próprio app.
66
+ */
67
+ export function sameHostOr(
68
+ candidate: string | undefined,
69
+ host: string,
70
+ fallback: string,
71
+ ): string {
72
+ if (!candidate) return fallback;
73
+ try {
74
+ return new URL(candidate).host === host ? candidate : fallback;
75
+ } catch {
76
+ return fallback;
77
+ }
78
+ }
@@ -1,24 +1,24 @@
1
- import 'server-only';
2
-
3
- import type { ActionResult } from '../infra/api/types';
4
- import { requireTokenNotExpired } from '../modules/auth/utils/require-token-not-expired';
5
- import { safeServerAction } from './safeServerAction';
6
-
7
- /**
8
- * Wrapper para server actions que mutam estado (delete/update/create/publish/
9
- * billing/etc.). Verifica se o JWT do cookie não expirou antes de executar
10
- * a ação e roteia erros via `safeServerAction`.
11
- *
12
- * A verificação é feita localmente decodificando o campo `exp` do JWT —
13
- * sem round-trip ao backend.
14
- *
15
- * Para reads não-sensíveis, continue usando `safeServerAction` direto.
16
- */
17
- export async function safeMutationAction<T>(
18
- fn: () => Promise<T>
19
- ): Promise<ActionResult<T>> {
20
- return safeServerAction(async () => {
21
- await requireTokenNotExpired();
22
- return fn();
23
- });
24
- }
1
+ import 'server-only';
2
+
3
+ import type { ActionResult } from '../infra/api/types';
4
+ import { requireTokenNotExpired } from '../modules/auth/utils/require-token-not-expired';
5
+ import { safeServerAction } from './safeServerAction';
6
+
7
+ /**
8
+ * Wrapper para server actions que mutam estado (delete/update/create/publish/
9
+ * billing/etc.). Verifica se o JWT do cookie não expirou antes de executar
10
+ * a ação e roteia erros via `safeServerAction`.
11
+ *
12
+ * A verificação é feita localmente decodificando o campo `exp` do JWT —
13
+ * sem round-trip ao backend.
14
+ *
15
+ * Para reads não-sensíveis, continue usando `safeServerAction` direto.
16
+ */
17
+ export async function safeMutationAction<T>(
18
+ fn: () => Promise<T>
19
+ ): Promise<ActionResult<T>> {
20
+ return safeServerAction(async () => {
21
+ await requireTokenNotExpired();
22
+ return fn();
23
+ });
24
+ }
@@ -1,21 +1,21 @@
1
- import { isRedirectError } from 'next/dist/client/components/redirect-error';
2
- import { ApiError } from '../infra/api/types';
3
- import type { ActionResult } from '../infra/api/types';
4
-
5
- export async function safeServerAction<T>(
6
- fn: () => Promise<T>
7
- ): Promise<ActionResult<T>> {
8
- try {
9
- const data = await fn();
10
- return { success: true, data };
11
- } catch (error) {
12
- if (isRedirectError(error)) throw error;
13
- const message =
14
- error instanceof ApiError
15
- ? error.message
16
- : error instanceof Error
17
- ? error.message
18
- : 'Erro desconhecido';
19
- return { success: false, error: message };
20
- }
21
- }
1
+ import { isRedirectError } from 'next/dist/client/components/redirect-error';
2
+ import { ApiError } from '../infra/api/types';
3
+ import type { ActionResult } from '../infra/api/types';
4
+
5
+ export async function safeServerAction<T>(
6
+ fn: () => Promise<T>
7
+ ): Promise<ActionResult<T>> {
8
+ try {
9
+ const data = await fn();
10
+ return { success: true, data };
11
+ } catch (error) {
12
+ if (isRedirectError(error)) throw error;
13
+ const message =
14
+ error instanceof ApiError
15
+ ? error.message
16
+ : error instanceof Error
17
+ ? error.message
18
+ : 'Erro desconhecido';
19
+ return { success: false, error: message };
20
+ }
21
+ }
@@ -1,13 +1,13 @@
1
- import type { ActionResult } from '../infra/api/types';
2
-
3
- export function withAction<TArgs extends any[], TData>(
4
- action: (...args: TArgs) => Promise<ActionResult<TData>>
5
- ): (...args: TArgs) => Promise<TData> {
6
- return async (...args) => {
7
- const result = await action(...args);
8
- if (!result.success) {
9
- throw new Error(result.error ?? 'Erro desconhecido');
10
- }
11
- return result.data as TData;
12
- };
13
- }
1
+ import type { ActionResult } from '../infra/api/types';
2
+
3
+ export function withAction<TArgs extends any[], TData>(
4
+ action: (...args: TArgs) => Promise<ActionResult<TData>>
5
+ ): (...args: TArgs) => Promise<TData> {
6
+ return async (...args) => {
7
+ const result = await action(...args);
8
+ if (!result.success) {
9
+ throw new Error(result.error ?? 'Erro desconhecido');
10
+ }
11
+ return result.data as TData;
12
+ };
13
+ }