@greatapps/common 1.1.697 → 1.1.698

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 (554) 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.map +1 -1
  92. package/dist/components/widgets/ImageUpload/ImageTooSmallModal.mjs.map +1 -1
  93. package/dist/components/widgets/ImageUpload/ImageUpload.mjs.map +1 -1
  94. package/dist/components/widgets/ImageUpload/index.mjs.map +1 -1
  95. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  96. package/dist/handlers.mjs.map +1 -1
  97. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  98. package/dist/hooks/useAuthQueryKey.mjs.map +1 -1
  99. package/dist/hooks/useBrandLoadingIcon.mjs.map +1 -1
  100. package/dist/hooks/useRouter.mjs.map +1 -1
  101. package/dist/http.mjs.map +1 -1
  102. package/dist/i18n/config.mjs.map +1 -1
  103. package/dist/i18n/country-language.mjs.map +1 -1
  104. package/dist/i18n/messages/en-us.mjs.map +1 -1
  105. package/dist/i18n/messages/es-es.mjs.map +1 -1
  106. package/dist/i18n/messages/index.mjs.map +1 -1
  107. package/dist/i18n/messages/pt-br.mjs.map +1 -1
  108. package/dist/i18n/normalize.mjs.map +1 -1
  109. package/dist/i18n/resolve-locale.mjs.map +1 -1
  110. package/dist/i18n.mjs.map +1 -1
  111. package/dist/index.mjs.map +1 -1
  112. package/dist/infra/http/api-fetch.mjs.map +1 -1
  113. package/dist/infra/route/parse-id.mjs.map +1 -1
  114. package/dist/infra/route/parse-numeric.mjs.map +1 -1
  115. package/dist/infra/route/safe-route-handler.mjs.map +1 -1
  116. package/dist/infra/route/search-params.mjs.map +1 -1
  117. package/dist/infra/utils/array.mjs.map +1 -1
  118. package/dist/infra/utils/date.mjs.map +1 -1
  119. package/dist/middleware.mjs.map +1 -1
  120. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  121. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  122. package/dist/modules/accounts/actions/get-account-token.action.mjs.map +1 -1
  123. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  124. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  125. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  126. package/dist/modules/accounts/hooks/use-account-token.hook.mjs.map +1 -1
  127. package/dist/modules/accounts/hooks/use-currency-formatter.hook.mjs.map +1 -1
  128. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  129. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  130. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  131. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  132. package/dist/modules/accounts/services/account-token.service.mjs.map +1 -1
  133. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  134. package/dist/modules/auth/actions/social-google-login.action.mjs.map +1 -1
  135. package/dist/modules/auth/actions/social-google-onboarding.action.mjs.map +1 -1
  136. package/dist/modules/auth/actions/unlink-google.action.mjs.map +1 -1
  137. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  138. package/dist/modules/auth/actions/verify-two-factor.action.mjs.map +1 -1
  139. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  140. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  141. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  142. package/dist/modules/auth/hooks/social-google-login.hook.mjs.map +1 -1
  143. package/dist/modules/auth/hooks/social-google-onboarding.hook.mjs.map +1 -1
  144. package/dist/modules/auth/hooks/unlink-google.hook.mjs.map +1 -1
  145. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  146. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  147. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  148. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  149. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  150. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  151. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  152. package/dist/modules/auth/utils/require-token-not-expired.mjs.map +1 -1
  153. package/dist/modules/auth/utils/require-valid-session.mjs.map +1 -1
  154. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  155. package/dist/modules/cards/actions/create-setup-intent.action.mjs.map +1 -1
  156. package/dist/modules/cards/actions/delete-card.action.mjs.map +1 -1
  157. package/dist/modules/cards/actions/set-default-card.action.mjs.map +1 -1
  158. package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -1
  159. package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -1
  160. package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
  161. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  162. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  163. package/dist/modules/cards/hooks/create-setup-intent.hook.mjs.map +1 -1
  164. package/dist/modules/cards/hooks/delete-card.hook.mjs.map +1 -1
  165. package/dist/modules/cards/hooks/delete-confirmation.hook.mjs.map +1 -1
  166. package/dist/modules/cards/hooks/handle-delete-card.hook.mjs.map +1 -1
  167. package/dist/modules/cards/hooks/set-default-card.hook.mjs.map +1 -1
  168. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  169. package/dist/modules/cards/types.mjs.map +1 -1
  170. package/dist/modules/charges/actions/charge-action.action.mjs.map +1 -1
  171. package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -1
  172. package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -1
  173. package/dist/modules/charges/hooks/charge-action.hook.mjs.map +1 -1
  174. package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
  175. package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
  176. package/dist/modules/charges/services/charges.service.mjs.map +1 -1
  177. package/dist/modules/charges/types/charge.type.mjs.map +1 -1
  178. package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -1
  179. package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
  180. package/dist/modules/images/actions/process-image.action.mjs.map +1 -1
  181. package/dist/modules/images/constants/image.constants.mjs.map +1 -1
  182. package/dist/modules/images/hooks/use-image-upload.hook.mjs.map +1 -1
  183. package/dist/modules/images/services/image-processing.service.mjs.map +1 -1
  184. package/dist/modules/images/utils/base64.mjs.map +1 -1
  185. package/dist/modules/images/utils/compress-image.mjs.map +1 -1
  186. package/dist/modules/images/utils/crop-image.mjs.map +1 -1
  187. package/dist/modules/images/utils/validate-image.mjs.map +1 -1
  188. package/dist/modules/pages/constants/query-keys.constants.mjs.map +1 -1
  189. package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -1
  190. package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
  191. package/dist/modules/pages/services/pages.service.mjs.map +1 -1
  192. package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -1
  193. package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -1
  194. package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
  195. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  196. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  197. package/dist/modules/plans/services/plans.service.mjs +1 -1
  198. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  199. package/dist/modules/plans/types/plan.type.mjs +5 -1
  200. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  201. package/dist/modules/plans/utils/map-api-plan-to-ui.mjs.map +1 -1
  202. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  203. package/dist/modules/projects/actions/create-project.action.mjs.map +1 -1
  204. package/dist/modules/projects/actions/delete-project.action.mjs.map +1 -1
  205. package/dist/modules/projects/actions/find-project.action.mjs.map +1 -1
  206. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  207. package/dist/modules/projects/actions/list-projects.action.mjs.map +1 -1
  208. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  209. package/dist/modules/projects/actions/update-project.action.mjs.map +1 -1
  210. package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -1
  211. package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -1
  212. package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -1
  213. package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -1
  214. package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -1
  215. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  216. package/dist/modules/projects/hooks/create-project.hook.mjs.map +1 -1
  217. package/dist/modules/projects/hooks/delete-project.hook.mjs.map +1 -1
  218. package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
  219. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  220. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  221. package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
  222. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  223. package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
  224. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  225. package/dist/modules/projects/hooks/update-project.hook.mjs.map +1 -1
  226. package/dist/modules/projects/services/projects.service.mjs.map +1 -1
  227. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  228. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  229. package/dist/modules/subscriptions/actions/update-subscription-payment.action.mjs.map +1 -1
  230. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  231. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  232. package/dist/modules/subscriptions/constants/subscription.constants.mjs.map +1 -1
  233. package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -1
  234. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  235. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  236. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  237. package/dist/modules/subscriptions/hooks/update-subscription-payment.hook.mjs.map +1 -1
  238. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  239. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  240. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  241. package/dist/modules/subscriptions/types/pix-pending.type.mjs.map +1 -1
  242. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  243. package/dist/modules/subscriptions/utils/get-subscription-cancellation-state.mjs.map +1 -1
  244. package/dist/modules/subscriptions/utils/get-subscription-expiry-date.mjs.map +1 -1
  245. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  246. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  247. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  248. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  249. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  250. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  251. package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -1
  252. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  253. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  254. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  255. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  256. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  257. package/dist/providers/auth.provider.mjs.map +1 -1
  258. package/dist/providers/navigation.provider.mjs.map +1 -1
  259. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  260. package/dist/route.mjs.map +1 -1
  261. package/dist/store/useAccountModals.mjs.map +1 -1
  262. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  263. package/dist/store/useCreditsDisabledModal.mjs.map +1 -1
  264. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  265. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  266. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  267. package/dist/utils/constants/br-states.mjs.map +1 -1
  268. package/dist/utils/countries.mjs.map +1 -1
  269. package/dist/utils/format/currency.mjs.map +1 -1
  270. package/dist/utils/intl/cookie-domain.mjs.map +1 -1
  271. package/dist/utils/intl/locale-cookie.mjs.map +1 -1
  272. package/dist/utils/next-navigation.mjs.map +1 -1
  273. package/dist/utils/redirect.mjs.map +1 -1
  274. package/dist/utils/safeMutationAction.mjs.map +1 -1
  275. package/dist/utils/safeServerAction.mjs.map +1 -1
  276. package/dist/utils/withAction.mjs.map +1 -1
  277. package/package.json +115 -115
  278. package/src/components/account/ConfigurationsMyAccountModal.tsx +179 -179
  279. package/src/components/account/ConfirmDeleteAccountModal.tsx +110 -110
  280. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +68 -68
  281. package/src/components/account/DeleteAccountModal.tsx +160 -160
  282. package/src/components/account/DisableTwoFactorAuthModal.tsx +92 -92
  283. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +51 -51
  284. package/src/components/account/TwoFactorAuthModal.tsx +220 -220
  285. package/src/components/account/hooks/useChangePhoneForm.tsx +113 -113
  286. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +116 -116
  287. package/src/components/account/sections/ChangeEmailModal.tsx +239 -239
  288. package/src/components/account/sections/ChangePasswordSection.tsx +68 -68
  289. package/src/components/account/sections/ChangePhoneModal.tsx +273 -273
  290. package/src/components/account/sections/MyProfileSection.tsx +276 -276
  291. package/src/components/account/sections/PreferencesSection.tsx +278 -278
  292. package/src/components/account/sections/SecuritySection.tsx +102 -102
  293. package/src/components/account/sections/TokenSection.tsx +85 -85
  294. package/src/components/embeds/ClarityEmbed.tsx +70 -70
  295. package/src/components/embeds/CrispEmbed.tsx +195 -195
  296. package/src/components/embeds/EmbedWidgets.tsx +62 -62
  297. package/src/components/embeds/FrillEmbed.tsx +146 -146
  298. package/src/components/layouts/AppMobileNavBar.tsx +214 -214
  299. package/src/components/layouts/AppNavBar.tsx +40 -40
  300. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  301. package/src/components/layouts/NavBar.tsx +228 -228
  302. package/src/components/layouts/NotificationsPopover.tsx +120 -120
  303. package/src/components/layouts/ProfilePopover.tsx +191 -191
  304. package/src/components/layouts/SideBarNavigation.tsx +65 -65
  305. package/src/components/layouts/UsersSelectorPopover.tsx +236 -236
  306. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  307. package/src/components/modals/BuyCreditsModal.tsx +390 -390
  308. package/src/components/modals/CreditsDisabledModal.tsx +62 -62
  309. package/src/components/modals/Modals.tsx +25 -25
  310. package/src/components/modals/PaidPlanRequiredModal.tsx +60 -60
  311. package/src/components/modals/cards/AddCardModal.tsx +420 -420
  312. package/src/components/modals/cards/CannotDeleteCardModal.tsx +124 -124
  313. package/src/components/modals/cards/CardFormFields.tsx +363 -363
  314. package/src/components/modals/cards/DeleteCardModal.tsx +136 -136
  315. package/src/components/navigation/CancelledSubscriptionBanner.tsx +62 -62
  316. package/src/components/navigation/NavItemsContext.ts +20 -20
  317. package/src/components/navigation/OverdueInvoiceBanner.tsx +51 -51
  318. package/src/components/navigation/PendingCancellationBanner.tsx +60 -60
  319. package/src/components/navigation/ProjectSelectorPopover.tsx +180 -180
  320. package/src/components/navigation/SubscriptionBanner.tsx +94 -94
  321. package/src/components/navigation/TrialBanner.tsx +54 -54
  322. package/src/components/navigation/UpcomingInvoiceBanner.tsx +55 -55
  323. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  324. package/src/components/navigation/subcomponents/BottomLinks.tsx +85 -85
  325. package/src/components/navigation/subcomponents/ProjectSelector.tsx +184 -184
  326. package/src/components/pages/NotFoundPage.tsx +75 -75
  327. package/src/components/pages/notifications/Notifications.tsx +190 -190
  328. package/src/components/ui/buttons/Button.tsx +77 -77
  329. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  330. package/src/components/ui/buttons/CopyButton.tsx +59 -59
  331. package/src/components/ui/data-display/Accordion.tsx +81 -81
  332. package/src/components/ui/data-display/Badge.tsx +47 -47
  333. package/src/components/ui/data-display/Card.tsx +93 -93
  334. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  335. package/src/components/ui/data-display/CardItem.tsx +135 -135
  336. package/src/components/ui/data-display/Pagination.tsx +126 -126
  337. package/src/components/ui/data-display/PaymentInfoCard.tsx +193 -193
  338. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  339. package/src/components/ui/data-display/Separator.tsx +29 -29
  340. package/src/components/ui/data-display/Table.tsx +117 -117
  341. package/src/components/ui/data-display/Tabs.tsx +67 -67
  342. package/src/components/ui/feedback/CircularProgress.tsx +79 -79
  343. package/src/components/ui/feedback/DefaultCircularProgress.tsx +67 -67
  344. package/src/components/ui/feedback/LoadingOverlay.tsx +30 -30
  345. package/src/components/ui/feedback/Progress.tsx +40 -40
  346. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  347. package/src/components/ui/feedback/Toast.tsx +104 -104
  348. package/src/components/ui/form/Calendar.tsx +228 -228
  349. package/src/components/ui/form/Checkbox.tsx +31 -31
  350. package/src/components/ui/form/ComboboxField.tsx +159 -159
  351. package/src/components/ui/form/DatePicker.tsx +100 -100
  352. package/src/components/ui/form/DateRangePicker.tsx +111 -111
  353. package/src/components/ui/form/FormField.tsx +133 -133
  354. package/src/components/ui/form/Input.tsx +20 -20
  355. package/src/components/ui/form/InputOtp.tsx +80 -80
  356. package/src/components/ui/form/PhoneInput.tsx +210 -210
  357. package/src/components/ui/form/RadioGroup.tsx +45 -45
  358. package/src/components/ui/form/Select.tsx +200 -200
  359. package/src/components/ui/form/Switch.tsx +32 -32
  360. package/src/components/ui/form/Textarea.tsx +19 -19
  361. package/src/components/ui/overlay/Command.tsx +185 -185
  362. package/src/components/ui/overlay/Dialog.tsx +153 -153
  363. package/src/components/ui/overlay/Popover.tsx +49 -49
  364. package/src/components/ui/overlay/Sheet.tsx +170 -170
  365. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  366. package/src/components/widgets/ImageUpload/ImageCropModal.tsx +392 -392
  367. package/src/components/widgets/ImageUpload/ImageTooSmallModal.tsx +62 -62
  368. package/src/components/widgets/ImageUpload/ImageUpload.tsx +131 -131
  369. package/src/components/widgets/ImageUpload/index.ts +3 -3
  370. package/src/components/widgets/notifications/NotificationCard.tsx +73 -73
  371. package/src/handlers.ts +22 -22
  372. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  373. package/src/hooks/useAuthQueryKey.ts +32 -32
  374. package/src/hooks/useBrandLoadingIcon.tsx +18 -18
  375. package/src/hooks/useRouter.ts +38 -38
  376. package/src/http.ts +1 -1
  377. package/src/i18n/config.ts +17 -17
  378. package/src/i18n/country-language.ts +60 -60
  379. package/src/i18n/messages/en-us.ts +519 -519
  380. package/src/i18n/messages/es-es.ts +520 -520
  381. package/src/i18n/messages/index.ts +24 -24
  382. package/src/i18n/messages/pt-br.ts +543 -543
  383. package/src/i18n/normalize.ts +15 -15
  384. package/src/i18n/resolve-locale.ts +77 -77
  385. package/src/i18n.ts +10 -10
  386. package/src/index.ts +584 -584
  387. package/src/infra/http/api-fetch.ts +39 -39
  388. package/src/infra/route/parse-id.ts +9 -9
  389. package/src/infra/route/parse-numeric.ts +16 -16
  390. package/src/infra/route/safe-route-handler.ts +16 -16
  391. package/src/infra/route/search-params.ts +9 -9
  392. package/src/infra/utils/array.ts +167 -167
  393. package/src/infra/utils/date.ts +59 -59
  394. package/src/middleware.ts +4 -4
  395. package/src/modules/accounts/actions/account-management.action.ts +109 -109
  396. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  397. package/src/modules/accounts/actions/get-account-token.action.ts +8 -8
  398. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  399. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  400. package/src/modules/accounts/hooks/current-account.hook.tsx +26 -26
  401. package/src/modules/accounts/hooks/use-account-token.hook.tsx +14 -14
  402. package/src/modules/accounts/hooks/use-currency-formatter.hook.tsx +32 -32
  403. package/src/modules/accounts/hooks/useAccountManagement.ts +95 -95
  404. package/src/modules/accounts/hooks/useCurrencies.ts +18 -18
  405. package/src/modules/accounts/hooks/useTimezones.ts +18 -18
  406. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  407. package/src/modules/accounts/services/account-token.service.ts +52 -52
  408. package/src/modules/accounts/services/account.service.ts +243 -243
  409. package/src/modules/accounts/types.ts +230 -230
  410. package/src/modules/auth/actions/social-google-login.action.ts +12 -12
  411. package/src/modules/auth/actions/social-google-onboarding.action.ts +13 -13
  412. package/src/modules/auth/actions/unlink-google.action.ts +8 -8
  413. package/src/modules/auth/actions/validate-session.action.ts +70 -70
  414. package/src/modules/auth/actions/verify-two-factor.action.ts +19 -19
  415. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  416. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  417. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  418. package/src/modules/auth/hooks/social-google-login.hook.tsx +13 -13
  419. package/src/modules/auth/hooks/social-google-onboarding.hook.tsx +13 -13
  420. package/src/modules/auth/hooks/unlink-google.hook.tsx +13 -13
  421. package/src/modules/auth/hooks/useManagementPermissions.ts +52 -52
  422. package/src/modules/auth/hooks/useUserQuery.ts +103 -103
  423. package/src/modules/auth/types/management-permission.type.ts +14 -14
  424. package/src/modules/auth/utils/assert-management-permission.ts +56 -56
  425. package/src/modules/auth/utils/assert-management-subscription.ts +38 -38
  426. package/src/modules/auth/utils/assert-paid-subscription.ts +47 -47
  427. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  428. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  429. package/src/modules/auth/utils/require-token-not-expired.ts +53 -53
  430. package/src/modules/auth/utils/require-valid-session.ts +35 -35
  431. package/src/modules/cards/actions/create-card.action.ts +9 -9
  432. package/src/modules/cards/actions/create-setup-intent.action.ts +8 -8
  433. package/src/modules/cards/actions/delete-card.action.ts +8 -8
  434. package/src/modules/cards/actions/set-default-card.action.ts +8 -8
  435. package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -15
  436. package/src/modules/cards/handlers/list-cards.handler.ts +10 -10
  437. package/src/modules/cards/hooks/card-by-id.hook.ts +17 -17
  438. package/src/modules/cards/hooks/cards.hook.ts +22 -22
  439. package/src/modules/cards/hooks/create-card.hook.ts +30 -30
  440. package/src/modules/cards/hooks/create-setup-intent.hook.ts +11 -11
  441. package/src/modules/cards/hooks/delete-card.hook.ts +52 -52
  442. package/src/modules/cards/hooks/delete-confirmation.hook.ts +40 -40
  443. package/src/modules/cards/hooks/handle-delete-card.hook.ts +47 -47
  444. package/src/modules/cards/hooks/set-default-card.hook.ts +55 -55
  445. package/src/modules/cards/services/cards.service.ts +136 -136
  446. package/src/modules/cards/types.ts +52 -52
  447. package/src/modules/charges/actions/charge-action.action.ts +13 -13
  448. package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -14
  449. package/src/modules/charges/handlers/list-charges.handler.ts +15 -15
  450. package/src/modules/charges/hooks/charge-action.hook.ts +24 -24
  451. package/src/modules/charges/hooks/charge-by-id.hook.ts +19 -19
  452. package/src/modules/charges/hooks/charges.hook.ts +19 -19
  453. package/src/modules/charges/services/charges.service.ts +63 -63
  454. package/src/modules/charges/types/charge.type.ts +68 -68
  455. package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -14
  456. package/src/modules/ia-credits/hooks/ia-credits.hook.ts +103 -103
  457. package/src/modules/images/actions/process-image.action.ts +40 -40
  458. package/src/modules/images/constants/image.constants.ts +11 -11
  459. package/src/modules/images/hooks/use-image-upload.hook.ts +153 -153
  460. package/src/modules/images/services/image-processing.service.ts +75 -75
  461. package/src/modules/images/types/image.type.ts +54 -54
  462. package/src/modules/images/utils/base64.ts +26 -26
  463. package/src/modules/images/utils/compress-image.ts +20 -20
  464. package/src/modules/images/utils/crop-image.ts +68 -68
  465. package/src/modules/images/utils/validate-image.ts +86 -86
  466. package/src/modules/pages/constants/query-keys.constants.ts +1 -1
  467. package/src/modules/pages/handlers/count-pages.handler.ts +12 -12
  468. package/src/modules/pages/hooks/count-pages.hook.ts +21 -21
  469. package/src/modules/pages/services/pages.service.ts +27 -27
  470. package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -14
  471. package/src/modules/plans/handlers/list-plans.handler.ts +22 -22
  472. package/src/modules/plans/hooks/list-plans.hook.ts +23 -23
  473. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  474. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +39 -39
  475. package/src/modules/plans/services/plans.service.ts +136 -135
  476. package/src/modules/plans/types/plan.type.ts +79 -75
  477. package/src/modules/plans/utils/map-api-plan-to-ui.ts +167 -167
  478. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  479. package/src/modules/projects/actions/create-project.action.ts +9 -9
  480. package/src/modules/projects/actions/delete-project.action.ts +8 -8
  481. package/src/modules/projects/actions/find-project.action.ts +8 -8
  482. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  483. package/src/modules/projects/actions/list-projects.action.ts +16 -16
  484. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  485. package/src/modules/projects/actions/update-project.action.ts +9 -9
  486. package/src/modules/projects/handlers/find-project.handler.ts +15 -15
  487. package/src/modules/projects/handlers/list-all-account-users.handler.ts +23 -23
  488. package/src/modules/projects/handlers/list-available-users.handler.ts +26 -26
  489. package/src/modules/projects/handlers/list-project-users.handler.ts +26 -26
  490. package/src/modules/projects/handlers/list-projects.handler.ts +23 -23
  491. package/src/modules/projects/hooks/add-project-user.hook.ts +72 -72
  492. package/src/modules/projects/hooks/create-project.hook.ts +120 -120
  493. package/src/modules/projects/hooks/delete-project.hook.ts +58 -58
  494. package/src/modules/projects/hooks/find-project.hook.ts +18 -18
  495. package/src/modules/projects/hooks/list-all-account-users.hook.ts +40 -40
  496. package/src/modules/projects/hooks/list-available-users.hook.ts +39 -39
  497. package/src/modules/projects/hooks/list-infinite-projects.hook.ts +44 -44
  498. package/src/modules/projects/hooks/list-project-users.hook.ts +39 -39
  499. package/src/modules/projects/hooks/list-projects.hook.ts +23 -23
  500. package/src/modules/projects/hooks/remove-project-user.hook.ts +72 -72
  501. package/src/modules/projects/hooks/update-project.hook.ts +86 -86
  502. package/src/modules/projects/services/projects.service.ts +156 -156
  503. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  504. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  505. package/src/modules/subscriptions/actions/update-subscription-payment.action.ts +13 -13
  506. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  507. package/src/modules/subscriptions/constants/query-keys.constants.ts +3 -3
  508. package/src/modules/subscriptions/constants/subscription.constants.ts +1 -1
  509. package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -17
  510. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  511. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +22 -22
  512. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +22 -22
  513. package/src/modules/subscriptions/hooks/update-subscription-payment.hook.ts +25 -25
  514. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +28 -28
  515. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +44 -44
  516. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  517. package/src/modules/subscriptions/types/calculate-subscription.type.ts +116 -116
  518. package/src/modules/subscriptions/types/pix-pending.type.ts +38 -38
  519. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  520. package/src/modules/subscriptions/utils/get-subscription-cancellation-state.ts +37 -37
  521. package/src/modules/subscriptions/utils/get-subscription-expiry-date.ts +33 -33
  522. package/src/modules/subscriptions/utils/has-subscription-expired.ts +11 -11
  523. package/src/modules/subscriptions/utils/periodicity.ts +79 -79
  524. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  525. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  526. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  527. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  528. package/src/modules/users/handlers/list-messages.handler.ts +39 -39
  529. package/src/modules/users/hooks/messages.hook.ts +69 -69
  530. package/src/modules/users/services/messages.service.ts +49 -49
  531. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  532. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  533. package/src/modules/whitelabel/schema.ts +84 -84
  534. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  535. package/src/providers/auth.provider.tsx +264 -264
  536. package/src/providers/navigation.provider.tsx +99 -99
  537. package/src/providers/whitelabel.provider.tsx +90 -90
  538. package/src/route.ts +4 -4
  539. package/src/store/useAccountModals.ts +85 -85
  540. package/src/store/useBuyCreditsModal.ts +21 -21
  541. package/src/store/useCreditsDisabledModal.ts +11 -11
  542. package/src/store/useDesktopSidebarStore.ts +47 -47
  543. package/src/store/useMdSidebarStore.ts +34 -34
  544. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  545. package/src/utils/constants/br-states.ts +29 -29
  546. package/src/utils/countries.ts +224 -224
  547. package/src/utils/format/currency.ts +70 -70
  548. package/src/utils/intl/cookie-domain.ts +29 -29
  549. package/src/utils/intl/locale-cookie.ts +18 -18
  550. package/src/utils/next-navigation.ts +7 -7
  551. package/src/utils/redirect.ts +78 -78
  552. package/src/utils/safeMutationAction.ts +24 -24
  553. package/src/utils/safeServerAction.ts +21 -21
  554. 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
+ }