@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 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/subscriptions/utils/resolve-plan-extras-prices.ts"],"sourcesContent":["import 'server-only';\n\nimport type { SubscriptionItem } from '../types/subscription.type';\n\ninterface PlanExtraInput {\n id_addon: number;\n value?: number;\n quantity: number;\n [key: string]: unknown;\n}\n\nexport function resolvePlanExtrasPrices<T extends PlanExtraInput>(\n extras: T[],\n subscriptionItems: SubscriptionItem[]\n): T[] {\n return extras.map((extra) => {\n const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);\n if (item) {\n return { ...extra, value: item.value ?? 0 };\n }\n return { ...extra, value: extra.value ?? 0 };\n });\n}\n"],"mappings":"AAAA,OAAO;AAWA,SAAS,wBACd,QACA,mBACK;AACL,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,UAAM,OAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,QAAQ;AACxE,QAAI,MAAM;AACR,aAAO,EAAE,GAAG,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC5C;AACA,WAAO,EAAE,GAAG,OAAO,OAAO,MAAM,SAAS,EAAE;AAAA,EAC7C,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/subscriptions/utils/resolve-plan-extras-prices.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport type { SubscriptionItem } from '../types/subscription.type';\r\n\r\ninterface PlanExtraInput {\r\n id_addon: number;\r\n value?: number;\r\n quantity: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport function resolvePlanExtrasPrices<T extends PlanExtraInput>(\r\n extras: T[],\r\n subscriptionItems: SubscriptionItem[]\r\n): T[] {\r\n return extras.map((extra) => {\r\n const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);\r\n if (item) {\r\n return { ...extra, value: item.value ?? 0 };\r\n }\r\n return { ...extra, value: extra.value ?? 0 };\r\n });\r\n}\r\n"],"mappings":"AAAA,OAAO;AAWA,SAAS,wBACd,QACA,mBACK;AACL,SAAO,OAAO,IAAI,CAAC,UAAU;AAC3B,UAAM,OAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,aAAa,MAAM,QAAQ;AACxE,QAAI,MAAM;AACR,aAAO,EAAE,GAAG,OAAO,OAAO,KAAK,SAAS,EAAE;AAAA,IAC5C;AACA,WAAO,EAAE,GAAG,OAAO,OAAO,MAAM,SAAS,EAAE;AAAA,EAC7C,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/find-user-by-id.action.ts"],"sourcesContent":["'use server';\n\nimport { safeServerAction } from '../../../utils/safeServerAction';\nimport { userService } from '../services/user.service';\n\nexport async function findUserById() {\n return safeServerAction(() => userService.findById());\n}\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAE5B,eAAsB,eAAe;AACnC,SAAO,iBAAiB,MAAM,YAAY,SAAS,CAAC;AACtD;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/find-user-by-id.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeServerAction } from '../../../utils/safeServerAction';\r\nimport { userService } from '../services/user.service';\r\n\r\nexport async function findUserById() {\r\n return safeServerAction(() => userService.findById());\r\n}\r\n"],"mappings":";AAEA,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAE5B,eAAsB,eAAe;AACnC,SAAO,iBAAiB,MAAM,YAAY,SAAS,CAAC;AACtD;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/mark-all-messages-as-read.action.ts"],"sourcesContent":["'use server';\n\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\nimport { messagesService } from '../services/messages.service';\n\nexport async function markAllMessagesAsReadAction() {\n return safeMutationAction(() => messagesService.markAllAsRead());\n}\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,8BAA8B;AAClD,SAAO,mBAAmB,MAAM,gBAAgB,cAAc,CAAC;AACjE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/mark-all-messages-as-read.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\r\nimport { messagesService } from '../services/messages.service';\r\n\r\nexport async function markAllMessagesAsReadAction() {\r\n return safeMutationAction(() => messagesService.markAllAsRead());\r\n}\r\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,8BAA8B;AAClD,SAAO,mBAAmB,MAAM,gBAAgB,cAAc,CAAC;AACjE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/action/mark-message-as-read.action.ts"],"sourcesContent":["'use server';\n\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\nimport { messagesService } from '../services/messages.service';\n\nexport async function markMessageAsReadAction(messageId: string) {\n return safeMutationAction(() => messagesService.markAsRead(messageId));\n}\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,wBAAwB,WAAmB;AAC/D,SAAO,mBAAmB,MAAM,gBAAgB,WAAW,SAAS,CAAC;AACvE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/action/mark-message-as-read.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { safeMutationAction } from '../../../utils/safeMutationAction';\r\nimport { messagesService } from '../services/messages.service';\r\n\r\nexport async function markMessageAsReadAction(messageId: string) {\r\n return safeMutationAction(() => messagesService.markAsRead(messageId));\r\n}\r\n"],"mappings":";AAEA,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAEhC,eAAsB,wBAAwB,WAAmB;AAC/D,SAAO,mBAAmB,MAAM,gBAAgB,WAAW,SAAS,CAAC;AACvE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/handlers/list-messages.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { messagesService } from '../services/messages.service';\nimport type { FindMessagesParams } from '../schema/messages.schema';\nimport { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';\n\nexport function createListMessagesHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(async () => {\n const params = searchParamsToParams<FindMessagesParams>(req.nextUrl.searchParams);\n\n const [result, whitelabel] = await Promise.all([\n messagesService.listMessages(params),\n findWhitelabel(),\n ]);\n\n const urlMap: Record<string, string> = {\n pages_url: whitelabel?.pages_url ?? '',\n accounts_url: whitelabel?.accounts_url ?? '',\n editor_url: whitelabel?.editor_url ?? '',\n };\n\n return {\n data: result.data.map((message) => ({\n ...message,\n url: message.url.replace(\n /\\{(pages_url|accounts_url|editor_url)\\}/g,\n (_, key) => urlMap[key] ?? ''\n ),\n })),\n total: result.total,\n totalUnread: result.totalUnread,\n };\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,SAAS,sBAAsB;AAExB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO,iBAAiB,YAAY;AAClC,YAAM,SAAS,qBAAyC,IAAI,QAAQ,YAAY;AAEhF,YAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC7C,gBAAgB,aAAa,MAAM;AAAA,QACnC,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAiC;AAAA,QACrC,WAAW,YAAY,aAAa;AAAA,QACpC,cAAc,YAAY,gBAAgB;AAAA,QAC1C,YAAY,YAAY,cAAc;AAAA,MACxC;AAEA,aAAO;AAAA,QACL,MAAM,OAAO,KAAK,IAAI,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,KAAK,QAAQ,IAAI;AAAA,YACf;AAAA,YACA,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AAAA,UAC7B;AAAA,QACF,EAAE;AAAA,QACF,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/handlers/list-messages.handler.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport type { NextRequest } from 'next/server';\r\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\r\nimport { searchParamsToParams } from '../../../infra/route/search-params';\r\nimport { messagesService } from '../services/messages.service';\r\nimport type { FindMessagesParams } from '../schema/messages.schema';\r\nimport { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';\r\n\r\nexport function createListMessagesHandler() {\r\n return async function GET(req: NextRequest) {\r\n return safeRouteHandler(async () => {\r\n const params = searchParamsToParams<FindMessagesParams>(req.nextUrl.searchParams);\r\n\r\n const [result, whitelabel] = await Promise.all([\r\n messagesService.listMessages(params),\r\n findWhitelabel(),\r\n ]);\r\n\r\n const urlMap: Record<string, string> = {\r\n pages_url: whitelabel?.pages_url ?? '',\r\n accounts_url: whitelabel?.accounts_url ?? '',\r\n editor_url: whitelabel?.editor_url ?? '',\r\n };\r\n\r\n return {\r\n data: result.data.map((message) => ({\r\n ...message,\r\n url: message.url.replace(\r\n /\\{(pages_url|accounts_url|editor_url)\\}/g,\r\n (_, key) => urlMap[key] ?? ''\r\n ),\r\n })),\r\n total: result.total,\r\n totalUnread: result.totalUnread,\r\n };\r\n });\r\n };\r\n}\r\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAEhC,SAAS,sBAAsB;AAExB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO,iBAAiB,YAAY;AAClC,YAAM,SAAS,qBAAyC,IAAI,QAAQ,YAAY;AAEhF,YAAM,CAAC,QAAQ,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC7C,gBAAgB,aAAa,MAAM;AAAA,QACnC,eAAe;AAAA,MACjB,CAAC;AAED,YAAM,SAAiC;AAAA,QACrC,WAAW,YAAY,aAAa;AAAA,QACpC,cAAc,YAAY,gBAAgB;AAAA,QAC1C,YAAY,YAAY,cAAc;AAAA,MACxC;AAEA,aAAO;AAAA,QACL,MAAM,OAAO,KAAK,IAAI,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,KAAK,QAAQ,IAAI;AAAA,YACf;AAAA,YACA,CAAC,GAAG,QAAQ,OAAO,GAAG,KAAK;AAAA,UAC7B;AAAA,QACF,EAAE;AAAA,QACF,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport { markMessageAsReadAction } from '../action/mark-message-as-read.action';\nimport { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';\nimport { withAction } from '../../../utils/withAction';\nimport type { FindMessagesParams, ListMessagesResult } from '../schema/messages.schema';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const MESSAGES_QUERY_KEY = ['messages'] as const;\n\nconst INFINITE_MESSAGES_PAGE_SIZE = 10;\n\nexport function useMessages(params?: Partial<FindMessagesParams>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) =>\n apiFetch<ListMessagesResult>('/api/messages', { params, signal }),\n });\n}\n\nexport function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, 'infinite', params]);\n\n return useInfiniteQuery({\n queryKey,\n queryFn: ({ pageParam, signal }) =>\n apiFetch<ListMessagesResult>('/api/messages', {\n params: {\n ...params,\n page: pageParam as number,\n limit: INFINITE_MESSAGES_PAGE_SIZE,\n },\n signal,\n }),\n getNextPageParam: (lastPage, allPages) => {\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\n },\n initialPageParam: 1,\n });\n}\n\nexport function useMarkMessageAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markMessageAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n\nexport function useMarkAllMessagesAsRead() {\n const queryClient = useQueryClient();\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\n\n return useMutation({\n mutationFn: withAction(markAllMessagesAsReadAction),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: messagesKey });\n },\n });\n}\n"],"mappings":";AAEA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AACxE,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,mCAAmC;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAEzB,MAAM,qBAAqB,CAAC,UAAU;AAE7C,MAAM,8BAA8B;AAE7B,SAAS,YAAY,QAAsC;AAChE,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,MAAM,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAA6B,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,EACpE,CAAC;AACH;AAEO,SAAS,oBAAoB,QAA8D;AAChG,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC;AAE5E,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAA6B,iBAAiB;AAAA,MAC5C,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEO,SAAS,uBAAuB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,uBAAuB;AAAA,IAC9C,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,2BAA2B;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,2BAA2B;AAAA,IAClD,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/hooks/messages.hook.ts"],"sourcesContent":["'use client';\r\n\r\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { apiFetch } from '../../../infra/http/api-fetch';\r\nimport { markMessageAsReadAction } from '../action/mark-message-as-read.action';\r\nimport { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';\r\nimport { withAction } from '../../../utils/withAction';\r\nimport type { FindMessagesParams, ListMessagesResult } from '../schema/messages.schema';\r\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\r\n\r\nexport const MESSAGES_QUERY_KEY = ['messages'] as const;\r\n\r\nconst INFINITE_MESSAGES_PAGE_SIZE = 10;\r\n\r\nexport function useMessages(params?: Partial<FindMessagesParams>) {\r\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, params]);\r\n\r\n return useQuery({\r\n queryKey,\r\n queryFn: ({ signal }) =>\r\n apiFetch<ListMessagesResult>('/api/messages', { params, signal }),\r\n });\r\n}\r\n\r\nexport function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {\r\n const queryKey = useAuthQueryKey([...MESSAGES_QUERY_KEY, 'infinite', params]);\r\n\r\n return useInfiniteQuery({\r\n queryKey,\r\n queryFn: ({ pageParam, signal }) =>\r\n apiFetch<ListMessagesResult>('/api/messages', {\r\n params: {\r\n ...params,\r\n page: pageParam as number,\r\n limit: INFINITE_MESSAGES_PAGE_SIZE,\r\n },\r\n signal,\r\n }),\r\n getNextPageParam: (lastPage, allPages) => {\r\n const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);\r\n return loaded < lastPage.total ? allPages.length + 1 : undefined;\r\n },\r\n initialPageParam: 1,\r\n });\r\n}\r\n\r\nexport function useMarkMessageAsRead() {\r\n const queryClient = useQueryClient();\r\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\r\n\r\n return useMutation({\r\n mutationFn: withAction(markMessageAsReadAction),\r\n onSuccess: () => {\r\n queryClient.invalidateQueries({ queryKey: messagesKey });\r\n },\r\n });\r\n}\r\n\r\nexport function useMarkAllMessagesAsRead() {\r\n const queryClient = useQueryClient();\r\n const messagesKey = useAuthQueryKey([...MESSAGES_QUERY_KEY]);\r\n\r\n return useMutation({\r\n mutationFn: withAction(markAllMessagesAsReadAction),\r\n onSuccess: () => {\r\n queryClient.invalidateQueries({ queryKey: messagesKey });\r\n },\r\n });\r\n}\r\n"],"mappings":";AAEA,SAAS,kBAAkB,aAAa,UAAU,sBAAsB;AACxE,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,mCAAmC;AAC5C,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAEzB,MAAM,qBAAqB,CAAC,UAAU;AAE7C,MAAM,8BAA8B;AAE7B,SAAS,YAAY,QAAsC;AAChE,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,MAAM,CAAC;AAEhE,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB,SAA6B,iBAAiB,EAAE,QAAQ,OAAO,CAAC;AAAA,EACpE,CAAC;AACH;AAEO,SAAS,oBAAoB,QAA8D;AAChG,QAAM,WAAW,gBAAgB,CAAC,GAAG,oBAAoB,YAAY,MAAM,CAAC;AAE5E,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,WAAW,OAAO,MAC5B,SAA6B,iBAAiB;AAAA,MAC5C,QAAQ;AAAA,QACN,GAAG;AAAA,QACH,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,kBAAkB,CAAC,UAAU,aAAa;AACxC,YAAM,SAAS,SAAS,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,KAAK,QAAQ,CAAC;AACjE,aAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,IAAI;AAAA,IACzD;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;AAEO,SAAS,uBAAuB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,uBAAuB;AAAA,IAC9C,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;AAEO,SAAS,2BAA2B;AACzC,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,gBAAgB,CAAC,GAAG,kBAAkB,CAAC;AAE3D,SAAO,YAAY;AAAA,IACjB,YAAY,WAAW,2BAA2B;AAAA,IAClD,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,YAAY,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/users/services/messages.service.ts"],"sourcesContent":["import 'server-only';\n\nimport { api } from '../../../infra/api/client';\nimport { buildQueryParams } from '../../../infra/utils/params';\nimport { getUserContext } from '../../auth/utils/get-user-context';\nimport {\n FindMessagesParams,\n ListMessagesApiResponse,\n MarkAsReadApiResponse,\n MarkAllAsReadApiResponse,\n} from '../schema/messages.schema';\n\nclass MessagesService {\n async listMessages(\n params?: Partial<FindMessagesParams>\n ): Promise<ListMessagesApiResponse> {\n const { id_account, id_user } = await getUserContext();\n\n const query = buildQueryParams({\n id_account,\n id_user,\n type: 'notification',\n limit: 20,\n page: 1,\n order: 'desc',\n ...params,\n });\n\n const url = `/accounts/${id_account}/messages${query ? `?${query}` : ''}`;\n\n return api.apps.get<ListMessagesApiResponse>(url);\n }\n\n async markAsRead(messageId: string): Promise<MarkAsReadApiResponse> {\n const { id_account } = await getUserContext();\n\n const url = `/accounts/${id_account}/messages/${messageId}/action/markAsRead`;\n return api.apps.put<MarkAsReadApiResponse>(url);\n }\n\n async markAllAsRead(): Promise<MarkAllAsReadApiResponse> {\n const { id_account, id_user } = await getUserContext();\n\n const url = `/accounts/${id_account}/messages/action/markAllAsRead`;\n return api.apps.put<MarkAllAsReadApiResponse>(url, { id_user });\n }\n}\n\nexport const messagesService = new MessagesService();\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,WAAW;AACpB,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAQ/B,MAAM,gBAAgB;AAAA,EACpB,MAAM,aACJ,QACkC;AAClC,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,QAAQ,iBAAiB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AAED,UAAM,MAAM,aAAa,UAAU,YAAY,QAAQ,IAAI,KAAK,KAAK,EAAE;AAEvE,WAAO,IAAI,KAAK,IAA6B,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,WAAW,WAAmD;AAClE,UAAM,EAAE,WAAW,IAAI,MAAM,eAAe;AAE5C,UAAM,MAAM,aAAa,UAAU,aAAa,SAAS;AACzD,WAAO,IAAI,KAAK,IAA2B,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAmD;AACvD,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,MAAM,aAAa,UAAU;AACnC,WAAO,IAAI,KAAK,IAA8B,KAAK,EAAE,QAAQ,CAAC;AAAA,EAChE;AACF;AAEO,MAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/users/services/messages.service.ts"],"sourcesContent":["import 'server-only';\r\n\r\nimport { api } from '../../../infra/api/client';\r\nimport { buildQueryParams } from '../../../infra/utils/params';\r\nimport { getUserContext } from '../../auth/utils/get-user-context';\r\nimport {\r\n FindMessagesParams,\r\n ListMessagesApiResponse,\r\n MarkAsReadApiResponse,\r\n MarkAllAsReadApiResponse,\r\n} from '../schema/messages.schema';\r\n\r\nclass MessagesService {\r\n async listMessages(\r\n params?: Partial<FindMessagesParams>\r\n ): Promise<ListMessagesApiResponse> {\r\n const { id_account, id_user } = await getUserContext();\r\n\r\n const query = buildQueryParams({\r\n id_account,\r\n id_user,\r\n type: 'notification',\r\n limit: 20,\r\n page: 1,\r\n order: 'desc',\r\n ...params,\r\n });\r\n\r\n const url = `/accounts/${id_account}/messages${query ? `?${query}` : ''}`;\r\n\r\n return api.apps.get<ListMessagesApiResponse>(url);\r\n }\r\n\r\n async markAsRead(messageId: string): Promise<MarkAsReadApiResponse> {\r\n const { id_account } = await getUserContext();\r\n\r\n const url = `/accounts/${id_account}/messages/${messageId}/action/markAsRead`;\r\n return api.apps.put<MarkAsReadApiResponse>(url);\r\n }\r\n\r\n async markAllAsRead(): Promise<MarkAllAsReadApiResponse> {\r\n const { id_account, id_user } = await getUserContext();\r\n\r\n const url = `/accounts/${id_account}/messages/action/markAllAsRead`;\r\n return api.apps.put<MarkAllAsReadApiResponse>(url, { id_user });\r\n }\r\n}\r\n\r\nexport const messagesService = new MessagesService();\r\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,WAAW;AACpB,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAQ/B,MAAM,gBAAgB;AAAA,EACpB,MAAM,aACJ,QACkC;AAClC,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,QAAQ,iBAAiB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,GAAG;AAAA,IACL,CAAC;AAED,UAAM,MAAM,aAAa,UAAU,YAAY,QAAQ,IAAI,KAAK,KAAK,EAAE;AAEvE,WAAO,IAAI,KAAK,IAA6B,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,WAAW,WAAmD;AAClE,UAAM,EAAE,WAAW,IAAI,MAAM,eAAe;AAE5C,UAAM,MAAM,aAAa,UAAU,aAAa,SAAS;AACzD,WAAO,IAAI,KAAK,IAA2B,GAAG;AAAA,EAChD;AAAA,EAEA,MAAM,gBAAmD;AACvD,UAAM,EAAE,YAAY,QAAQ,IAAI,MAAM,eAAe;AAErD,UAAM,MAAM,aAAa,UAAU;AACnC,WAAO,IAAI,KAAK,IAA8B,KAAK,EAAE,QAAQ,CAAC;AAAA,EAChE;AACF;AAEO,MAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/actions/find-whitelabel.action.ts"],"sourcesContent":["'use server';\n\n\nimport { headers } from \"next/headers\";\nimport { whitelabelService } from \"../services/whitelabel.service\";\nimport { ApiError } from \"../../../infra/api/types\";\nimport { cache } from \"react\";\n\nexport const findWhitelabel = cache(async () => {\n const headersList = await headers();\n const host = headersList.get('host');\n\n if (!host) {\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\n }\n\n const whitelabel = await whitelabelService.getTokenByDomain(host);\n\n if (!whitelabel) {\n throw new ApiError('Whitelabel not found', 'WL_NOT_FOUND', 404);\n }\n\n return whitelabel;\n});"],"mappings":";AAGA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,aAAa;AAEf,MAAM,iBAAiB,MAAM,YAAY;AAC5C,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,MAAI,CAAC,MAAM;AACP,UAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,EACrE;AAEA,QAAM,aAAa,MAAM,kBAAkB,iBAAiB,IAAI;AAEhE,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,SAAS,wBAAwB,gBAAgB,GAAG;AAAA,EAClE;AAEA,SAAO;AACX,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/actions/find-whitelabel.action.ts"],"sourcesContent":["'use server';\r\n\r\n\r\nimport { headers } from \"next/headers\";\r\nimport { whitelabelService } from \"../services/whitelabel.service\";\r\nimport { ApiError } from \"../../../infra/api/types\";\r\nimport { cache } from \"react\";\r\n\r\nexport const findWhitelabel = cache(async () => {\r\n const headersList = await headers();\r\n const host = headersList.get('host');\r\n\r\n if (!host) {\r\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\r\n }\r\n\r\n const whitelabel = await whitelabelService.getTokenByDomain(host);\r\n\r\n if (!whitelabel) {\r\n throw new ApiError('Whitelabel not found', 'WL_NOT_FOUND', 404);\r\n }\r\n\r\n return whitelabel;\r\n});"],"mappings":";AAGA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,aAAa;AAEf,MAAM,iBAAiB,MAAM,YAAY;AAC5C,QAAM,cAAc,MAAM,QAAQ;AAClC,QAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,MAAI,CAAC,MAAM;AACP,UAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,EACrE;AAEA,QAAM,aAAa,MAAM,kBAAkB,iBAAiB,IAAI;AAEhE,MAAI,CAAC,YAAY;AACb,UAAM,IAAI,SAAS,wBAAwB,gBAAgB,GAAG;AAAA,EAClE;AAEA,SAAO;AACX,CAAC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/actions/revalidate-whitelabel.action.ts"],"sourcesContent":["'use server';\n\nimport { headers } from 'next/headers';\nimport { whitelabelService } from '../services/whitelabel.service';\nimport { ApiError } from '../../../infra/api/types';\nimport { safeServerAction } from '../../../utils/safeServerAction';\n\nexport async function revalidateWhitelabelAction() {\n return safeServerAction(async () => {\n const headersList = await headers();\n const host = headersList.get('host');\n\n if (!host) {\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\n }\n\n return whitelabelService.revalidateByDomain(host);\n });\n}\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,eAAsB,6BAA6B;AACjD,SAAO,iBAAiB,YAAY;AAClC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,IACnE;AAEA,WAAO,kBAAkB,mBAAmB,IAAI;AAAA,EAClD,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/actions/revalidate-whitelabel.action.ts"],"sourcesContent":["'use server';\r\n\r\nimport { headers } from 'next/headers';\r\nimport { whitelabelService } from '../services/whitelabel.service';\r\nimport { ApiError } from '../../../infra/api/types';\r\nimport { safeServerAction } from '../../../utils/safeServerAction';\r\n\r\nexport async function revalidateWhitelabelAction() {\r\n return safeServerAction(async () => {\r\n const headersList = await headers();\r\n const host = headersList.get('host');\r\n\r\n if (!host) {\r\n throw new ApiError('Host header not found', 'HOST_NOT_FOUND', 400);\r\n }\r\n\r\n return whitelabelService.revalidateByDomain(host);\r\n });\r\n}\r\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAClC,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,eAAsB,6BAA6B;AACjD,SAAO,iBAAiB,YAAY;AAClC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,OAAO,YAAY,IAAI,MAAM;AAEnC,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,SAAS,yBAAyB,kBAAkB,GAAG;AAAA,IACnE;AAEA,WAAO,kBAAkB,mBAAmB,IAAI;AAAA,EAClD,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/whitelabel/utils/normalize-hostname.ts"],"sourcesContent":["const CATEGORY_PREFIXES = new Set([\n \"com\", \"dev\", \"net\", \"org\", \"edu\", \"gov\",\n \"mil\", \"co\", \"art\", \"inf\", \"blog\", \"wiki\", \"app\", \"online\", \"site\"\n]);\n\nconst SIMPLE_TLDS = new Set([\"online\"]);\n\nexport function normalizeHostname(hostname: string): string {\n const parts = hostname.split(\".\");\n if (parts.length <= 2) return hostname;\n\n const last = parts[parts.length - 1];\n const secondLast = parts[parts.length - 2];\n\n const isCompoundTld =\n last.length <= 3 && CATEGORY_PREFIXES.has(secondLast);\n\n const rootParts = isCompoundTld ? 3 : 2;\n\n if (SIMPLE_TLDS.has(last) || !isCompoundTld) {\n return parts.slice(-2).join(\".\");\n }\n\n if (parts.length <= rootParts) return hostname;\n return parts.slice(-rootParts).join(\".\");\n}\n"],"mappings":"AAAA,MAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACnC;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAC9D,CAAC;AAED,MAAM,cAAc,oBAAI,IAAI,CAAC,QAAQ,CAAC;AAE/B,SAAS,kBAAkB,UAA0B;AAC1D,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,MAAI,MAAM,UAAU,EAAG,QAAO;AAE9B,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AAEzC,QAAM,gBACJ,KAAK,UAAU,KAAK,kBAAkB,IAAI,UAAU;AAEtD,QAAM,YAAY,gBAAgB,IAAI;AAEtC,MAAI,YAAY,IAAI,IAAI,KAAK,CAAC,eAAe;AAC3C,WAAO,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,SAAO,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/whitelabel/utils/normalize-hostname.ts"],"sourcesContent":["const CATEGORY_PREFIXES = new Set([\r\n \"com\", \"dev\", \"net\", \"org\", \"edu\", \"gov\",\r\n \"mil\", \"co\", \"art\", \"inf\", \"blog\", \"wiki\", \"app\", \"online\", \"site\"\r\n]);\r\n\r\nconst SIMPLE_TLDS = new Set([\"online\"]);\r\n\r\nexport function normalizeHostname(hostname: string): string {\r\n const parts = hostname.split(\".\");\r\n if (parts.length <= 2) return hostname;\r\n\r\n const last = parts[parts.length - 1];\r\n const secondLast = parts[parts.length - 2];\r\n\r\n const isCompoundTld =\r\n last.length <= 3 && CATEGORY_PREFIXES.has(secondLast);\r\n\r\n const rootParts = isCompoundTld ? 3 : 2;\r\n\r\n if (SIMPLE_TLDS.has(last) || !isCompoundTld) {\r\n return parts.slice(-2).join(\".\");\r\n }\r\n\r\n if (parts.length <= rootParts) return hostname;\r\n return parts.slice(-rootParts).join(\".\");\r\n}\r\n"],"mappings":"AAAA,MAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EAAO;AAAA,EACnC;AAAA,EAAO;AAAA,EAAM;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAU;AAC9D,CAAC;AAED,MAAM,cAAc,oBAAI,IAAI,CAAC,QAAQ,CAAC;AAE/B,SAAS,kBAAkB,UAA0B;AAC1D,QAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,MAAI,MAAM,UAAU,EAAG,QAAO;AAE9B,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,QAAM,aAAa,MAAM,MAAM,SAAS,CAAC;AAEzC,QAAM,gBACJ,KAAK,UAAU,KAAK,kBAAkB,IAAI,UAAU;AAEtD,QAAM,YAAY,gBAAgB,IAAI;AAEtC,MAAI,YAAY,IAAI,IAAI,KAAK,CAAC,eAAe;AAC3C,WAAO,MAAM,MAAM,EAAE,EAAE,KAAK,GAAG;AAAA,EACjC;AAEA,MAAI,MAAM,UAAU,UAAW,QAAO;AACtC,SAAO,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG;AACzC;","names":[]}
@@ -26,6 +26,7 @@ import { useWhitelabelUrls, useWhitelabel } from "./whitelabel.provider";
26
26
  import { useWlQueryKey } from "../hooks/useAuthQueryKey";
27
27
  import { normalizeLocale } from "../i18n/normalize";
28
28
  import { setLocaleCookie } from "../utils/intl/locale-cookie";
29
+ import { clearHexaPromo } from "../utils/cookies/hexa-promo";
29
30
  const AuthContext = createContext(
30
31
  void 0
31
32
  );
@@ -139,6 +140,7 @@ function AuthProvider({ children, publicRoutes = [] }) {
139
140
  await logoutMutate(void 0);
140
141
  } catch {
141
142
  } finally {
143
+ clearHexaPromo();
142
144
  queryClient.clear();
143
145
  window.location.assign(resolveLogoutRedirect());
144
146
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useUserQuery,\n useSetUserData,\n useUserValidateSession,\n} from \"../modules/auth/hooks/useUserQuery\";\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\nimport {\n AuthState,\n LoginRequest,\n RegisterRequest,\n SocialGooglePartial,\n SocialOnboardingRequest,\n} from \"../modules/auth/schema\";\n\nexport type LoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"error\"; message: string };\n\nexport type GoogleLoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\n | { result: \"link_requires_password\"; message: string }\n | { result: \"error\"; message: string };\nimport {\n useCurrentAccount,\n ACCOUNT_QUERY_KEY,\n} from \"../modules/accounts/hooks/current-account.hook\";\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\nimport { normalizeLocale } from \"../i18n/normalize\";\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\n\ninterface AuthContextProps extends AuthState {\n login: (credentials: LoginRequest) => Promise<LoginResult>;\n register: (data: RegisterRequest) => Promise<void>;\n logout: () => Promise<void>;\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\n}\n\nexport const AuthContext = createContext<AuthContextProps | undefined>(\n undefined,\n);\n\ninterface AuthProviderProps {\n children: ReactNode;\n /**\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\n */\n publicRoutes?: string[];\n}\n\nexport function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\n\n const queryClient = useQueryClient();\n const setUserData = useSetUserData();\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\n const { whitelabel } = useWhitelabel();\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\n\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\n useEffect(() => {\n const locale = normalizeLocale(user?.language);\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\n }, [user?.language, whitelabel?.domain]);\n\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\n const { mutateAsync: registerMutate, isPending: isRegistering } =\n useRegister();\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\n useSocialGoogleLogin();\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\n useSocialGoogleOnboarding();\n\n const isAuthenticated = !!user;\n const isLoading =\n isLogging ||\n isRegistering ||\n isLoggingOut ||\n isGoogleLogging ||\n isGoogleOnboarding ||\n isQueryLoading ||\n isAccountLoading ||\n isSessionLoading;\n\n const login = useCallback(\n async (credentials: LoginRequest): Promise<LoginResult> => {\n try {\n const data = await loginMutate(credentials);\n\n if (data.result === \"two_factor_required\") {\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [queryClient, setUserData, accountKey],\n );\n\n const register = useCallback(\n async (data: RegisterRequest): Promise<void> => {\n await registerMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [queryClient, setUserData, accountKey],\n );\n\n const loginWithGoogle = useCallback(\n async (code: string): Promise<GoogleLoginResult> => {\n try {\n const data = await googleLoginMutate(code);\n\n if (data.result === \"two_factor_required\") {\n return {\n result: \"two_factor_required\",\n cookie: data.cookie,\n twoFactorMode: data.twoFactorMode,\n };\n }\n\n if (data.result === \"needs_onboarding\") {\n return {\n result: \"needs_onboarding\",\n onboardingToken: data.onboardingToken,\n partial: data.partial,\n };\n }\n\n if (data.result === \"link_requires_password\") {\n return { result: \"link_requires_password\", message: data.message };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [googleLoginMutate, queryClient, setUserData, accountKey],\n );\n\n const completeGoogleOnboarding = useCallback(\n async (data: SocialOnboardingRequest): Promise<void> => {\n await googleOnboardingMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\n );\n\n const resolveLogoutRedirect = useCallback(() => {\n try {\n const currentOrigin = window.location.origin;\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\n\n if (pagesOrigin && currentOrigin === pagesOrigin) {\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\n }\n } catch {\n // fallback below\n }\n\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\n }, [accountsUrl, pagesUrl]);\n\n const logout = useCallback(async (): Promise<void> => {\n try {\n await logoutMutate(undefined);\n } catch {\n // cookie já removido no servidor mesmo se a API falhou\n } finally {\n queryClient.clear();\n window.location.assign(resolveLogoutRedirect());\n }\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\n\n const value: AuthContextProps = useMemo(\n () => ({\n user: user ?? null,\n account: account ?? null,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n }),\n [\n user,\n account,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n ],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthContextProps {\n const context = useContext(AuthContext);\n\n if (context === undefined) {\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\n }\n\n return context;\n}\n"],"mappings":"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","names":["data"]}
1
+ {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n createContext,\r\n ReactNode,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n} from \"react\";\r\nimport { useQueryClient } from \"@tanstack/react-query\";\r\nimport {\r\n useUserQuery,\r\n useSetUserData,\r\n useUserValidateSession,\r\n} from \"../modules/auth/hooks/useUserQuery\";\r\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\r\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\r\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\r\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\r\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\r\nimport {\r\n AuthState,\r\n LoginRequest,\r\n RegisterRequest,\r\n SocialGooglePartial,\r\n SocialOnboardingRequest,\r\n} from \"../modules/auth/schema\";\r\n\r\nexport type LoginResult =\r\n | { result: \"success\" }\r\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\r\n | { result: \"error\"; message: string };\r\n\r\nexport type GoogleLoginResult =\r\n | { result: \"success\" }\r\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\r\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\r\n | { result: \"link_requires_password\"; message: string }\r\n | { result: \"error\"; message: string };\r\nimport {\r\n useCurrentAccount,\r\n ACCOUNT_QUERY_KEY,\r\n} from \"../modules/accounts/hooks/current-account.hook\";\r\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\r\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\r\nimport { normalizeLocale } from \"../i18n/normalize\";\r\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\r\nimport { clearHexaPromo } from \"../utils/cookies/hexa-promo\";\r\n\r\ninterface AuthContextProps extends AuthState {\r\n login: (credentials: LoginRequest) => Promise<LoginResult>;\r\n register: (data: RegisterRequest) => Promise<void>;\r\n logout: () => Promise<void>;\r\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\r\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\r\n}\r\n\r\nexport const AuthContext = createContext<AuthContextProps | undefined>(\r\n undefined,\r\n);\r\n\r\ninterface AuthProviderProps {\r\n children: ReactNode;\r\n /**\r\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\r\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\r\n */\r\n publicRoutes?: string[];\r\n}\r\n\r\nexport function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {\r\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\r\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\r\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\r\n\r\n const queryClient = useQueryClient();\r\n const setUserData = useSetUserData();\r\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\r\n const { whitelabel } = useWhitelabel();\r\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\r\n\r\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\r\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\r\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\r\n useEffect(() => {\r\n const locale = normalizeLocale(user?.language);\r\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\r\n }, [user?.language, whitelabel?.domain]);\r\n\r\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\r\n const { mutateAsync: registerMutate, isPending: isRegistering } =\r\n useRegister();\r\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\r\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\r\n useSocialGoogleLogin();\r\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\r\n useSocialGoogleOnboarding();\r\n\r\n const isAuthenticated = !!user;\r\n const isLoading =\r\n isLogging ||\r\n isRegistering ||\r\n isLoggingOut ||\r\n isGoogleLogging ||\r\n isGoogleOnboarding ||\r\n isQueryLoading ||\r\n isAccountLoading ||\r\n isSessionLoading;\r\n\r\n const login = useCallback(\r\n async (credentials: LoginRequest): Promise<LoginResult> => {\r\n try {\r\n const data = await loginMutate(credentials);\r\n\r\n if (data.result === \"two_factor_required\") {\r\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\r\n }\r\n\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n\r\n return { result: \"success\" };\r\n } catch (error) {\r\n const message =\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\r\n return { result: \"error\", message };\r\n }\r\n },\r\n [queryClient, setUserData, accountKey],\r\n );\r\n\r\n const register = useCallback(\r\n async (data: RegisterRequest): Promise<void> => {\r\n await registerMutate(data, {\r\n onSuccess: (data) => {\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n },\r\n });\r\n },\r\n [queryClient, setUserData, accountKey],\r\n );\r\n\r\n const loginWithGoogle = useCallback(\r\n async (code: string): Promise<GoogleLoginResult> => {\r\n try {\r\n const data = await googleLoginMutate(code);\r\n\r\n if (data.result === \"two_factor_required\") {\r\n return {\r\n result: \"two_factor_required\",\r\n cookie: data.cookie,\r\n twoFactorMode: data.twoFactorMode,\r\n };\r\n }\r\n\r\n if (data.result === \"needs_onboarding\") {\r\n return {\r\n result: \"needs_onboarding\",\r\n onboardingToken: data.onboardingToken,\r\n partial: data.partial,\r\n };\r\n }\r\n\r\n if (data.result === \"link_requires_password\") {\r\n return { result: \"link_requires_password\", message: data.message };\r\n }\r\n\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n\r\n return { result: \"success\" };\r\n } catch (error) {\r\n const message =\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\r\n return { result: \"error\", message };\r\n }\r\n },\r\n [googleLoginMutate, queryClient, setUserData, accountKey],\r\n );\r\n\r\n const completeGoogleOnboarding = useCallback(\r\n async (data: SocialOnboardingRequest): Promise<void> => {\r\n await googleOnboardingMutate(data, {\r\n onSuccess: (data) => {\r\n queryClient.clear();\r\n setUserData(data.user);\r\n queryClient.setQueryData(accountKey, data.account);\r\n },\r\n });\r\n },\r\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\r\n );\r\n\r\n const resolveLogoutRedirect = useCallback(() => {\r\n try {\r\n const currentOrigin = window.location.origin;\r\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\r\n\r\n if (pagesOrigin && currentOrigin === pagesOrigin) {\r\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\r\n }\r\n } catch {\r\n // fallback below\r\n }\r\n\r\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\r\n }, [accountsUrl, pagesUrl]);\r\n\r\n const logout = useCallback(async (): Promise<void> => {\r\n try {\r\n await logoutMutate(undefined);\r\n } catch {\r\n // cookie já removido no servidor mesmo se a API falhou\r\n } finally {\r\n // Limpa o estado da promo \"Rumo ao Hexa\" para reabrir a modal no próximo login.\r\n clearHexaPromo();\r\n queryClient.clear();\r\n window.location.assign(resolveLogoutRedirect());\r\n }\r\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\r\n\r\n const value: AuthContextProps = useMemo(\r\n () => ({\r\n user: user ?? null,\r\n account: account ?? null,\r\n isAuthenticated,\r\n isLoading,\r\n login,\r\n register,\r\n logout,\r\n loginWithGoogle,\r\n completeGoogleOnboarding,\r\n }),\r\n [\r\n user,\r\n account,\r\n isAuthenticated,\r\n isLoading,\r\n login,\r\n register,\r\n logout,\r\n loginWithGoogle,\r\n completeGoogleOnboarding,\r\n ],\r\n );\r\n\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n}\r\n\r\nexport function useAuth(): AuthContextProps {\r\n const context = useContext(AuthContext);\r\n\r\n if (context === undefined) {\r\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\r\n }\r\n\r\n return context;\r\n}\r\n"],"mappings":"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","names":["data"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/navigation.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n type RefObject,\n} from \"react\";\nimport { usePathname, useSearchParams } from \"next/navigation\";\n\ninterface NavigationContextValue {\n defaultFallback: string;\n internalNavCountRef: RefObject<number>;\n}\n\nconst NavigationContext = createContext<NavigationContextValue | null>(null);\n\nfunction seedCountFromReferrer(): number {\n if (typeof window === \"undefined\") return 0;\n if (window.history.length <= 1) return 0;\n try {\n if (!document.referrer) return 0;\n if (new URL(document.referrer).origin === window.location.origin) {\n return 1;\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\ninterface NavigationProviderProps {\n children: ReactNode;\n defaultFallback?: string;\n}\n\nexport function NavigationProvider({\n children,\n defaultFallback = \"/\",\n}: NavigationProviderProps) {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const currentKey = `${pathname}?${searchParams?.toString() ?? \"\"}`;\n\n const internalNavCountRef = useRef(seedCountFromReferrer());\n const lastKeyRef = useRef<string | null>(null);\n const popStateFiredRef = useRef(false);\n\n useEffect(() => {\n const onPopState = () => {\n popStateFiredRef.current = true;\n };\n window.addEventListener(\"popstate\", onPopState);\n return () => window.removeEventListener(\"popstate\", onPopState);\n }, []);\n\n useEffect(() => {\n if (lastKeyRef.current === null) {\n lastKeyRef.current = currentKey;\n return;\n }\n if (lastKeyRef.current === currentKey) return;\n\n if (popStateFiredRef.current) {\n popStateFiredRef.current = false;\n internalNavCountRef.current = Math.max(\n 0,\n internalNavCountRef.current - 1\n );\n } else {\n internalNavCountRef.current += 1;\n }\n lastKeyRef.current = currentKey;\n }, [currentKey]);\n\n return (\n <NavigationContext.Provider\n value={{ defaultFallback, internalNavCountRef }}\n >\n {children}\n </NavigationContext.Provider>\n );\n}\n\nexport function useNavigationContext(): NavigationContextValue {\n const ctx = useContext(NavigationContext);\n if (!ctx) {\n throw new Error(\n \"useNavigationContext must be used inside <NavigationProvider>\"\n );\n }\n return ctx;\n}\n\nexport function useNavigationFallback(): string {\n return useNavigationContext().defaultFallback;\n}\n"],"mappings":";AA8EI;AA5EJ;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,aAAa,uBAAuB;AAO7C,MAAM,oBAAoB,cAA6C,IAAI;AAE3E,SAAS,wBAAgC;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,QAAQ,UAAU,EAAG,QAAO;AACvC,MAAI;AACF,QAAI,CAAC,SAAS,SAAU,QAAO;AAC/B,QAAI,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW,OAAO,SAAS,QAAQ;AAChE,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAOO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,kBAAkB;AACpB,GAA4B;AAC1B,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,gBAAgB;AACrC,QAAM,aAAa,GAAG,QAAQ,IAAI,cAAc,SAAS,KAAK,EAAE;AAEhE,QAAM,sBAAsB,OAAO,sBAAsB,CAAC;AAC1D,QAAM,aAAa,OAAsB,IAAI;AAC7C,QAAM,mBAAmB,OAAO,KAAK;AAErC,YAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,uBAAiB,UAAU;AAAA,IAC7B;AACA,WAAO,iBAAiB,YAAY,UAAU;AAC9C,WAAO,MAAM,OAAO,oBAAoB,YAAY,UAAU;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,WAAW,YAAY,MAAM;AAC/B,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,WAAY;AAEvC,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,UAAU;AAC3B,0BAAoB,UAAU,KAAK;AAAA,QACjC;AAAA,QACA,oBAAoB,UAAU;AAAA,MAChC;AAAA,IACF,OAAO;AACL,0BAAoB,WAAW;AAAA,IACjC;AACA,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,UAAU,CAAC;AAEf,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,OAAO,EAAE,iBAAiB,oBAAoB;AAAA,MAE7C;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,uBAA+C;AAC7D,QAAM,MAAM,WAAW,iBAAiB;AACxC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,wBAAgC;AAC9C,SAAO,qBAAqB,EAAE;AAChC;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/navigation.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n createContext,\r\n ReactNode,\r\n useContext,\r\n useEffect,\r\n useRef,\r\n type RefObject,\r\n} from \"react\";\r\nimport { usePathname, useSearchParams } from \"next/navigation\";\r\n\r\ninterface NavigationContextValue {\r\n defaultFallback: string;\r\n internalNavCountRef: RefObject<number>;\r\n}\r\n\r\nconst NavigationContext = createContext<NavigationContextValue | null>(null);\r\n\r\nfunction seedCountFromReferrer(): number {\r\n if (typeof window === \"undefined\") return 0;\r\n if (window.history.length <= 1) return 0;\r\n try {\r\n if (!document.referrer) return 0;\r\n if (new URL(document.referrer).origin === window.location.origin) {\r\n return 1;\r\n }\r\n } catch {\r\n // ignore\r\n }\r\n return 0;\r\n}\r\n\r\ninterface NavigationProviderProps {\r\n children: ReactNode;\r\n defaultFallback?: string;\r\n}\r\n\r\nexport function NavigationProvider({\r\n children,\r\n defaultFallback = \"/\",\r\n}: NavigationProviderProps) {\r\n const pathname = usePathname();\r\n const searchParams = useSearchParams();\r\n const currentKey = `${pathname}?${searchParams?.toString() ?? \"\"}`;\r\n\r\n const internalNavCountRef = useRef(seedCountFromReferrer());\r\n const lastKeyRef = useRef<string | null>(null);\r\n const popStateFiredRef = useRef(false);\r\n\r\n useEffect(() => {\r\n const onPopState = () => {\r\n popStateFiredRef.current = true;\r\n };\r\n window.addEventListener(\"popstate\", onPopState);\r\n return () => window.removeEventListener(\"popstate\", onPopState);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (lastKeyRef.current === null) {\r\n lastKeyRef.current = currentKey;\r\n return;\r\n }\r\n if (lastKeyRef.current === currentKey) return;\r\n\r\n if (popStateFiredRef.current) {\r\n popStateFiredRef.current = false;\r\n internalNavCountRef.current = Math.max(\r\n 0,\r\n internalNavCountRef.current - 1\r\n );\r\n } else {\r\n internalNavCountRef.current += 1;\r\n }\r\n lastKeyRef.current = currentKey;\r\n }, [currentKey]);\r\n\r\n return (\r\n <NavigationContext.Provider\r\n value={{ defaultFallback, internalNavCountRef }}\r\n >\r\n {children}\r\n </NavigationContext.Provider>\r\n );\r\n}\r\n\r\nexport function useNavigationContext(): NavigationContextValue {\r\n const ctx = useContext(NavigationContext);\r\n if (!ctx) {\r\n throw new Error(\r\n \"useNavigationContext must be used inside <NavigationProvider>\"\r\n );\r\n }\r\n return ctx;\r\n}\r\n\r\nexport function useNavigationFallback(): string {\r\n return useNavigationContext().defaultFallback;\r\n}\r\n"],"mappings":";AA8EI;AA5EJ;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,aAAa,uBAAuB;AAO7C,MAAM,oBAAoB,cAA6C,IAAI;AAE3E,SAAS,wBAAgC;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,OAAO,QAAQ,UAAU,EAAG,QAAO;AACvC,MAAI;AACF,QAAI,CAAC,SAAS,SAAU,QAAO;AAC/B,QAAI,IAAI,IAAI,SAAS,QAAQ,EAAE,WAAW,OAAO,SAAS,QAAQ;AAChE,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAOO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,kBAAkB;AACpB,GAA4B;AAC1B,QAAM,WAAW,YAAY;AAC7B,QAAM,eAAe,gBAAgB;AACrC,QAAM,aAAa,GAAG,QAAQ,IAAI,cAAc,SAAS,KAAK,EAAE;AAEhE,QAAM,sBAAsB,OAAO,sBAAsB,CAAC;AAC1D,QAAM,aAAa,OAAsB,IAAI;AAC7C,QAAM,mBAAmB,OAAO,KAAK;AAErC,YAAU,MAAM;AACd,UAAM,aAAa,MAAM;AACvB,uBAAiB,UAAU;AAAA,IAC7B;AACA,WAAO,iBAAiB,YAAY,UAAU;AAC9C,WAAO,MAAM,OAAO,oBAAoB,YAAY,UAAU;AAAA,EAChE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,WAAW,YAAY,MAAM;AAC/B,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,QAAI,WAAW,YAAY,WAAY;AAEvC,QAAI,iBAAiB,SAAS;AAC5B,uBAAiB,UAAU;AAC3B,0BAAoB,UAAU,KAAK;AAAA,QACjC;AAAA,QACA,oBAAoB,UAAU;AAAA,MAChC;AAAA,IACF,OAAO;AACL,0BAAoB,WAAW;AAAA,IACjC;AACA,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,UAAU,CAAC;AAEf,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,OAAO,EAAE,iBAAiB,oBAAoB;AAAA,MAE7C;AAAA;AAAA,EACH;AAEJ;AAEO,SAAS,uBAA+C;AAC7D,QAAM,MAAM,WAAW,iBAAiB;AACxC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,wBAAgC;AAC9C,SAAO,qBAAqB,EAAE;AAChC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/whitelabel.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, ReactNode, useContext } from \"react\";\nimport type { WhitelabelData, GeneralStyleJson, PageStyleJson, DashboardStyleJson } from \"../modules/whitelabel/schema\";\n\ninterface WhitelabelContextProps {\n whitelabel: WhitelabelData | null;\n}\n\nconst WhitelabelContext = createContext<WhitelabelContextProps | undefined>(undefined);\n\ninterface WhitelabelProviderProps {\n children: ReactNode;\n whitelabel: WhitelabelData | null;\n}\n\nexport function WhitelabelProvider({\n children,\n whitelabel,\n}: WhitelabelProviderProps) {\n return (\n <WhitelabelContext.Provider value={{ whitelabel }}>\n {children}\n </WhitelabelContext.Provider>\n );\n}\n\nexport function useWhitelabel(): WhitelabelContextProps {\n const context = useContext(WhitelabelContext);\n if (context === undefined) {\n throw new Error(\"useWhitelabel deve ser usado dentro de um WhitelabelProvider\");\n }\n return context;\n}\n\nexport function useWhitelabelStyles() {\n const { whitelabel } = useWhitelabel();\n return {\n general: whitelabel?.general ?? null,\n signin_page: whitelabel?.signin_page ?? null,\n signup_page: whitelabel?.signup_page ?? null,\n dashboard: whitelabel?.dashboard ?? null,\n };\n}\n\nexport function useIsDefaultWhitelabel(): boolean {\n const context = useContext(WhitelabelContext);\n return !context?.whitelabel || context.whitelabel.id === 1;\n}\n\nexport function useWhitelabelUrls() {\n const { whitelabel } = useWhitelabel();\n return {\n editorUrl: whitelabel?.editor_url ?? '',\n pagesUrl: whitelabel?.pages_url ?? '',\n accountsUrl: whitelabel?.accounts_url ?? '',\n previewUrl: whitelabel?.pages_preview_url ?? '',\n };\n}\n\ntype ExternalContractingTarget = \"plans\" | \"contracting\";\n\nexport function useExternalContracting() {\n const { whitelabel } = useWhitelabel();\n\n const isExternalContracting = !!whitelabel?.external_contracting;\n\n const getExternalUrl = (target: ExternalContractingTarget): string | null => {\n if (!whitelabel?.external_contracting) return null;\n\n if (target === \"plans\") {\n return whitelabel.external_plans_url ?? whitelabel.external_contracting_url ?? null;\n }\n\n return whitelabel.external_contracting_url ?? whitelabel.external_plans_url ?? null;\n };\n\n const redirectToExternal = (target: ExternalContractingTarget): boolean => {\n const url = getExternalUrl(target);\n if (!url) return false;\n window.location.href = url;\n return true;\n };\n\n return {\n isExternalContracting,\n getExternalUrl,\n redirectToExternal,\n };\n}\n"],"mappings":";AAqBI;AAnBJ,SAAS,eAA0B,kBAAkB;AAOrD,MAAM,oBAAoB,cAAkD,MAAS;AAO9E,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,WAAW,GAC7C,UACH;AAEJ;AAEO,SAAS,gBAAwC;AACtD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB;AACpC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,SAAS,YAAY,WAAW;AAAA,IAChC,aAAa,YAAY,eAAe;AAAA,IACxC,aAAa,YAAY,eAAe;AAAA,IACxC,WAAW,YAAY,aAAa;AAAA,EACtC;AACF;AAEO,SAAS,yBAAkC;AAChD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,CAAC,SAAS,cAAc,QAAQ,WAAW,OAAO;AAC3D;AAEO,SAAS,oBAAoB;AAClC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,WAAW,YAAY,cAAc;AAAA,IACrC,UAAU,YAAY,aAAa;AAAA,IACnC,aAAa,YAAY,gBAAgB;AAAA,IACzC,YAAY,YAAY,qBAAqB;AAAA,EAC/C;AACF;AAIO,SAAS,yBAAyB;AACvC,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,QAAM,wBAAwB,CAAC,CAAC,YAAY;AAE5C,QAAM,iBAAiB,CAAC,WAAqD;AAC3E,QAAI,CAAC,YAAY,qBAAsB,QAAO;AAE9C,QAAI,WAAW,SAAS;AACtB,aAAO,WAAW,sBAAsB,WAAW,4BAA4B;AAAA,IACjF;AAEA,WAAO,WAAW,4BAA4B,WAAW,sBAAsB;AAAA,EACjF;AAEA,QAAM,qBAAqB,CAAC,WAA+C;AACzE,UAAM,MAAM,eAAe,MAAM;AACjC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAO,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/providers/whitelabel.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { createContext, ReactNode, useContext } from \"react\";\r\nimport type { WhitelabelData, GeneralStyleJson, PageStyleJson, DashboardStyleJson } from \"../modules/whitelabel/schema\";\r\n\r\ninterface WhitelabelContextProps {\r\n whitelabel: WhitelabelData | null;\r\n}\r\n\r\nconst WhitelabelContext = createContext<WhitelabelContextProps | undefined>(undefined);\r\n\r\ninterface WhitelabelProviderProps {\r\n children: ReactNode;\r\n whitelabel: WhitelabelData | null;\r\n}\r\n\r\nexport function WhitelabelProvider({\r\n children,\r\n whitelabel,\r\n}: WhitelabelProviderProps) {\r\n return (\r\n <WhitelabelContext.Provider value={{ whitelabel }}>\r\n {children}\r\n </WhitelabelContext.Provider>\r\n );\r\n}\r\n\r\nexport function useWhitelabel(): WhitelabelContextProps {\r\n const context = useContext(WhitelabelContext);\r\n if (context === undefined) {\r\n throw new Error(\"useWhitelabel deve ser usado dentro de um WhitelabelProvider\");\r\n }\r\n return context;\r\n}\r\n\r\nexport function useWhitelabelStyles() {\r\n const { whitelabel } = useWhitelabel();\r\n return {\r\n general: whitelabel?.general ?? null,\r\n signin_page: whitelabel?.signin_page ?? null,\r\n signup_page: whitelabel?.signup_page ?? null,\r\n dashboard: whitelabel?.dashboard ?? null,\r\n };\r\n}\r\n\r\nexport function useIsDefaultWhitelabel(): boolean {\r\n const context = useContext(WhitelabelContext);\r\n return !context?.whitelabel || context.whitelabel.id === 1;\r\n}\r\n\r\nexport function useWhitelabelUrls() {\r\n const { whitelabel } = useWhitelabel();\r\n return {\r\n editorUrl: whitelabel?.editor_url ?? '',\r\n pagesUrl: whitelabel?.pages_url ?? '',\r\n accountsUrl: whitelabel?.accounts_url ?? '',\r\n previewUrl: whitelabel?.pages_preview_url ?? '',\r\n };\r\n}\r\n\r\ntype ExternalContractingTarget = \"plans\" | \"contracting\";\r\n\r\nexport function useExternalContracting() {\r\n const { whitelabel } = useWhitelabel();\r\n\r\n const isExternalContracting = !!whitelabel?.external_contracting;\r\n\r\n const getExternalUrl = (target: ExternalContractingTarget): string | null => {\r\n if (!whitelabel?.external_contracting) return null;\r\n\r\n if (target === \"plans\") {\r\n return whitelabel.external_plans_url ?? whitelabel.external_contracting_url ?? null;\r\n }\r\n\r\n return whitelabel.external_contracting_url ?? whitelabel.external_plans_url ?? null;\r\n };\r\n\r\n const redirectToExternal = (target: ExternalContractingTarget): boolean => {\r\n const url = getExternalUrl(target);\r\n if (!url) return false;\r\n window.location.href = url;\r\n return true;\r\n };\r\n\r\n return {\r\n isExternalContracting,\r\n getExternalUrl,\r\n redirectToExternal,\r\n };\r\n}\r\n"],"mappings":";AAqBI;AAnBJ,SAAS,eAA0B,kBAAkB;AAOrD,MAAM,oBAAoB,cAAkD,MAAS;AAO9E,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,EAAE,WAAW,GAC7C,UACH;AAEJ;AAEO,SAAS,gBAAwC;AACtD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB;AACpC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,SAAS,YAAY,WAAW;AAAA,IAChC,aAAa,YAAY,eAAe;AAAA,IACxC,aAAa,YAAY,eAAe;AAAA,IACxC,WAAW,YAAY,aAAa;AAAA,EACtC;AACF;AAEO,SAAS,yBAAkC;AAChD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,SAAO,CAAC,SAAS,cAAc,QAAQ,WAAW,OAAO;AAC3D;AAEO,SAAS,oBAAoB;AAClC,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,SAAO;AAAA,IACL,WAAW,YAAY,cAAc;AAAA,IACrC,UAAU,YAAY,aAAa;AAAA,IACnC,aAAa,YAAY,gBAAgB;AAAA,IACzC,YAAY,YAAY,qBAAqB;AAAA,EAC/C;AACF;AAIO,SAAS,yBAAyB;AACvC,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,QAAM,wBAAwB,CAAC,CAAC,YAAY;AAE5C,QAAM,iBAAiB,CAAC,WAAqD;AAC3E,QAAI,CAAC,YAAY,qBAAsB,QAAO;AAE9C,QAAI,WAAW,SAAS;AACtB,aAAO,WAAW,sBAAsB,WAAW,4BAA4B;AAAA,IACjF;AAEA,WAAO,WAAW,4BAA4B,WAAW,sBAAsB;AAAA,EACjF;AAEA,QAAM,qBAAqB,CAAC,WAA+C;AACzE,UAAM,MAAM,eAAe,MAAM;AACjC,QAAI,CAAC,IAAK,QAAO;AACjB,WAAO,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/route.ts"],"sourcesContent":["export { safeRouteHandler } from './infra/route/safe-route-handler';\nexport { searchParamsToParams } from './infra/route/search-params';\nexport { parseId } from './infra/route/parse-id';\nexport { parseNumericFields } from './infra/route/parse-numeric';\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,0BAA0B;","names":[]}
1
+ {"version":3,"sources":["../src/route.ts"],"sourcesContent":["export { safeRouteHandler } from './infra/route/safe-route-handler';\r\nexport { searchParamsToParams } from './infra/route/search-params';\r\nexport { parseId } from './infra/route/parse-id';\r\nexport { parseNumericFields } from './infra/route/parse-numeric';\r\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,0BAA0B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useAccountModals.ts"],"sourcesContent":["'use client';\n\nimport { create } from 'zustand';\nimport type { AccountSectionType } from '../enums/AccountSectionType';\n\ntype AccountModalType =\n | 'configurations'\n | 'deleteAccount'\n | 'isntPossibleDelete'\n | 'confirmDelete';\n\nexport interface AccountModalsConfig {\n onGoToSubscription?: () => void;\n}\n\ninterface DeleteAccountPayload {\n password: string;\n}\n\ninterface AccountModalsState {\n activeModal: AccountModalType | null;\n config: AccountModalsConfig;\n initialSection?: AccountSectionType;\n\n /** Payload coletado no DeleteAccountModal, consumido pelo ConfirmDeleteAccountModal. */\n deleteAccountPayload: DeleteAccountPayload | null;\n /** Mensagem de erro do backend quando o delete falha (ex.: senha inválida).\n * Mostrada no DeleteAccountModal quando o usuário é mandado de volta. */\n deleteAccountError: string | null;\n\n /** Called by <AccountModals> to keep app-level config in sync */\n updateConfig: (config: AccountModalsConfig) => void;\n\n openConfigurations: (initialSection?: AccountSectionType) => void;\n openDeleteAccount: (error?: string) => void;\n openIsntPossibleDelete: () => void;\n openConfirmDelete: (payload: DeleteAccountPayload) => void;\n clearDeleteAccountError: () => void;\n close: () => void;\n}\n\nexport const useAccountModals = create<AccountModalsState>((set) => ({\n activeModal: null,\n config: {},\n initialSection: undefined,\n deleteAccountPayload: null,\n deleteAccountError: null,\n\n updateConfig: (config) => set({ config }),\n\n openConfigurations: (initialSection) =>\n set({\n activeModal: 'configurations',\n initialSection,\n deleteAccountPayload: null,\n deleteAccountError: null,\n }),\n\n openDeleteAccount: (error) =>\n set({\n activeModal: 'deleteAccount',\n deleteAccountPayload: null,\n deleteAccountError: error ?? null,\n }),\n\n openIsntPossibleDelete: () =>\n set({ activeModal: 'isntPossibleDelete' }),\n\n openConfirmDelete: (payload) =>\n set({\n activeModal: 'confirmDelete',\n deleteAccountPayload: payload,\n deleteAccountError: null,\n }),\n\n clearDeleteAccountError: () => set({ deleteAccountError: null }),\n\n close: () =>\n set({\n activeModal: null,\n initialSection: undefined,\n deleteAccountPayload: null,\n deleteAccountError: null,\n }),\n}));\n"],"mappings":";AAEA,SAAS,cAAc;AAuChB,MAAM,mBAAmB,OAA2B,CAAC,SAAS;AAAA,EACnE,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EAEpB,cAAc,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EAExC,oBAAoB,CAAC,mBACnB,IAAI;AAAA,IACF,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,mBAAmB,CAAC,UAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB,SAAS;AAAA,EAC/B,CAAC;AAAA,EAEH,wBAAwB,MACtB,IAAI,EAAE,aAAa,qBAAqB,CAAC;AAAA,EAE3C,mBAAmB,CAAC,YAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,yBAAyB,MAAM,IAAI,EAAE,oBAAoB,KAAK,CAAC;AAAA,EAE/D,OAAO,MACL,IAAI;AAAA,IACF,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACL,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useAccountModals.ts"],"sourcesContent":["'use client';\r\n\r\nimport { create } from 'zustand';\r\nimport type { AccountSectionType } from '../enums/AccountSectionType';\r\n\r\ntype AccountModalType =\r\n | 'configurations'\r\n | 'deleteAccount'\r\n | 'isntPossibleDelete'\r\n | 'confirmDelete';\r\n\r\nexport interface AccountModalsConfig {\r\n onGoToSubscription?: () => void;\r\n}\r\n\r\ninterface DeleteAccountPayload {\r\n password: string;\r\n}\r\n\r\ninterface AccountModalsState {\r\n activeModal: AccountModalType | null;\r\n config: AccountModalsConfig;\r\n initialSection?: AccountSectionType;\r\n\r\n /** Payload coletado no DeleteAccountModal, consumido pelo ConfirmDeleteAccountModal. */\r\n deleteAccountPayload: DeleteAccountPayload | null;\r\n /** Mensagem de erro do backend quando o delete falha (ex.: senha inválida).\r\n * Mostrada no DeleteAccountModal quando o usuário é mandado de volta. */\r\n deleteAccountError: string | null;\r\n\r\n /** Called by <AccountModals> to keep app-level config in sync */\r\n updateConfig: (config: AccountModalsConfig) => void;\r\n\r\n openConfigurations: (initialSection?: AccountSectionType) => void;\r\n openDeleteAccount: (error?: string) => void;\r\n openIsntPossibleDelete: () => void;\r\n openConfirmDelete: (payload: DeleteAccountPayload) => void;\r\n clearDeleteAccountError: () => void;\r\n close: () => void;\r\n}\r\n\r\nexport const useAccountModals = create<AccountModalsState>((set) => ({\r\n activeModal: null,\r\n config: {},\r\n initialSection: undefined,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n\r\n updateConfig: (config) => set({ config }),\r\n\r\n openConfigurations: (initialSection) =>\r\n set({\r\n activeModal: 'configurations',\r\n initialSection,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n }),\r\n\r\n openDeleteAccount: (error) =>\r\n set({\r\n activeModal: 'deleteAccount',\r\n deleteAccountPayload: null,\r\n deleteAccountError: error ?? null,\r\n }),\r\n\r\n openIsntPossibleDelete: () =>\r\n set({ activeModal: 'isntPossibleDelete' }),\r\n\r\n openConfirmDelete: (payload) =>\r\n set({\r\n activeModal: 'confirmDelete',\r\n deleteAccountPayload: payload,\r\n deleteAccountError: null,\r\n }),\r\n\r\n clearDeleteAccountError: () => set({ deleteAccountError: null }),\r\n\r\n close: () =>\r\n set({\r\n activeModal: null,\r\n initialSection: undefined,\r\n deleteAccountPayload: null,\r\n deleteAccountError: null,\r\n }),\r\n}));\r\n"],"mappings":";AAEA,SAAS,cAAc;AAuChB,MAAM,mBAAmB,OAA2B,CAAC,SAAS;AAAA,EACnE,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EAEpB,cAAc,CAAC,WAAW,IAAI,EAAE,OAAO,CAAC;AAAA,EAExC,oBAAoB,CAAC,mBACnB,IAAI;AAAA,IACF,aAAa;AAAA,IACb;AAAA,IACA,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,mBAAmB,CAAC,UAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB,SAAS;AAAA,EAC/B,CAAC;AAAA,EAEH,wBAAwB,MACtB,IAAI,EAAE,aAAa,qBAAqB,CAAC;AAAA,EAE3C,mBAAmB,CAAC,YAClB,IAAI;AAAA,IACF,aAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAAA,EAEH,yBAAyB,MAAM,IAAI,EAAE,oBAAoB,KAAK,CAAC;AAAA,EAE/D,OAAO,MACL,IAAI;AAAA,IACF,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AACL,EAAE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useBuyCreditsModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\ninterface BuyCreditsModalData {\n onConfirm?: (creditAmount: number, price: number) => void;\n}\n\nexport const useBuyCreditsModal = () => {\n const { activeModal, modalData, openModal, closeModal } = useModalManager();\n\n const isOpen = activeModal === 'buyCreditsModal';\n const data = modalData as BuyCreditsModalData;\n\n return {\n open: isOpen,\n onConfirm: data?.onConfirm,\n\n openModal: (onConfirm?: (creditAmount: number, price: number) => void) =>\n openModal('buyCreditsModal', { onConfirm }),\n closeModal,\n };\n};\n"],"mappings":"AAAA,SAAS,uBAAuB;AAMzB,MAAM,qBAAqB,MAAM;AACtC,QAAM,EAAE,aAAa,WAAW,WAAW,WAAW,IAAI,gBAAgB;AAE1E,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO;AAEb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,MAAM;AAAA,IAEjB,WAAW,CAAC,cACV,UAAU,mBAAmB,EAAE,UAAU,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useBuyCreditsModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\ninterface BuyCreditsModalData {\r\n onConfirm?: (creditAmount: number, price: number) => void;\r\n}\r\n\r\nexport const useBuyCreditsModal = () => {\r\n const { activeModal, modalData, openModal, closeModal } = useModalManager();\r\n\r\n const isOpen = activeModal === 'buyCreditsModal';\r\n const data = modalData as BuyCreditsModalData;\r\n\r\n return {\r\n open: isOpen,\r\n onConfirm: data?.onConfirm,\r\n\r\n openModal: (onConfirm?: (creditAmount: number, price: number) => void) =>\r\n openModal('buyCreditsModal', { onConfirm }),\r\n closeModal,\r\n };\r\n};\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAMzB,MAAM,qBAAqB,MAAM;AACtC,QAAM,EAAE,aAAa,WAAW,WAAW,WAAW,IAAI,gBAAgB;AAE1E,QAAM,SAAS,gBAAgB;AAC/B,QAAM,OAAO;AAEb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW,MAAM;AAAA,IAEjB,WAAW,CAAC,cACV,UAAU,mBAAmB,EAAE,UAAU,CAAC;AAAA,IAC5C;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useCreditsDisabledModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\nexport const useCreditsDisabledModal = () => {\n const { activeModal, openModal, closeModal } = useModalManager();\n\n return {\n open: activeModal === 'creditsDisabledModal',\n openModal: () => openModal('creditsDisabledModal'),\n closeModal,\n };\n};\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEzB,MAAM,0BAA0B,MAAM;AAC3C,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,SAAO;AAAA,IACL,MAAM,gBAAgB;AAAA,IACtB,WAAW,MAAM,UAAU,sBAAsB;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useCreditsDisabledModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\nexport const useCreditsDisabledModal = () => {\r\n const { activeModal, openModal, closeModal } = useModalManager();\r\n\r\n return {\r\n open: activeModal === 'creditsDisabledModal',\r\n openModal: () => openModal('creditsDisabledModal'),\r\n closeModal,\r\n };\r\n};\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEzB,MAAM,0BAA0B,MAAM;AAC3C,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,SAAO;AAAA,IACL,MAAM,gBAAgB;AAAA,IACtB,WAAW,MAAM,UAAU,sBAAsB;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useDesktopSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { useEffect } from \"react\";\n\nconst STORAGE_KEY = \"desktop-sidebar-expanded\";\n\ntype DesktopSidebarStore = {\n isExpanded: boolean;\n _hydrated: boolean;\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n _hydrate: () => void;\n};\n\nexport const useDesktopSidebarStore = create<DesktopSidebarStore>((set) => ({\n isExpanded: true,\n _hydrated: false,\n toggle: () => set((state) => {\n const next = !state.isExpanded;\n localStorage.setItem(STORAGE_KEY, String(next));\n return { isExpanded: next };\n }),\n expand: () => {\n localStorage.setItem(STORAGE_KEY, \"true\");\n return set({ isExpanded: true });\n },\n collapse: () => {\n localStorage.setItem(STORAGE_KEY, \"false\");\n return set({ isExpanded: false });\n },\n _hydrate: () => {\n const stored = localStorage.getItem(STORAGE_KEY);\n const value = stored === null ? true : stored === \"true\";\n set({ isExpanded: value, _hydrated: true });\n },\n}));\n\nexport function useDesktopSidebarHydration() {\n const hydrate = useDesktopSidebarStore((s) => s._hydrate);\n const hydrated = useDesktopSidebarStore((s) => s._hydrated);\n\n useEffect(() => {\n if (!hydrated) {\n hydrate();\n }\n }, [hydrate, hydrated]);\n}\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,MAAM,cAAc;AAWb,MAAM,yBAAyB,OAA4B,CAAC,SAAS;AAAA,EACxE,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,UAAM,QAAQ,WAAW,OAAO,OAAO,WAAW;AAClD,QAAI,EAAE,YAAY,OAAO,WAAW,KAAK,CAAC;AAAA,EAC9C;AACJ,EAAE;AAEK,SAAS,6BAA6B;AACzC,QAAM,UAAU,uBAAuB,CAAC,MAAM,EAAE,QAAQ;AACxD,QAAM,WAAW,uBAAuB,CAAC,MAAM,EAAE,SAAS;AAE1D,YAAU,MAAM;AACZ,QAAI,CAAC,UAAU;AACX,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,CAAC,SAAS,QAAQ,CAAC;AAC1B;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useDesktopSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\r\nimport { useEffect } from \"react\";\r\n\r\nconst STORAGE_KEY = \"desktop-sidebar-expanded\";\r\n\r\ntype DesktopSidebarStore = {\r\n isExpanded: boolean;\r\n _hydrated: boolean;\r\n toggle: () => void;\r\n expand: () => void;\r\n collapse: () => void;\r\n _hydrate: () => void;\r\n};\r\n\r\nexport const useDesktopSidebarStore = create<DesktopSidebarStore>((set) => ({\r\n isExpanded: true,\r\n _hydrated: false,\r\n toggle: () => set((state) => {\r\n const next = !state.isExpanded;\r\n localStorage.setItem(STORAGE_KEY, String(next));\r\n return { isExpanded: next };\r\n }),\r\n expand: () => {\r\n localStorage.setItem(STORAGE_KEY, \"true\");\r\n return set({ isExpanded: true });\r\n },\r\n collapse: () => {\r\n localStorage.setItem(STORAGE_KEY, \"false\");\r\n return set({ isExpanded: false });\r\n },\r\n _hydrate: () => {\r\n const stored = localStorage.getItem(STORAGE_KEY);\r\n const value = stored === null ? true : stored === \"true\";\r\n set({ isExpanded: value, _hydrated: true });\r\n },\r\n}));\r\n\r\nexport function useDesktopSidebarHydration() {\r\n const hydrate = useDesktopSidebarStore((s) => s._hydrate);\r\n const hydrated = useDesktopSidebarStore((s) => s._hydrated);\r\n\r\n useEffect(() => {\r\n if (!hydrated) {\r\n hydrate();\r\n }\r\n }, [hydrate, hydrated]);\r\n}\r\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAE1B,MAAM,cAAc;AAWb,MAAM,yBAAyB,OAA4B,CAAC,SAAS;AAAA,EACxE,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AAAA,EACA,UAAU,MAAM;AACZ,UAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,UAAM,QAAQ,WAAW,OAAO,OAAO,WAAW;AAClD,QAAI,EAAE,YAAY,OAAO,WAAW,KAAK,CAAC;AAAA,EAC9C;AACJ,EAAE;AAEK,SAAS,6BAA6B;AACzC,QAAM,UAAU,uBAAuB,CAAC,MAAM,EAAE,QAAQ;AACxD,QAAM,WAAW,uBAAuB,CAAC,MAAM,EAAE,SAAS;AAE1D,YAAU,MAAM;AACZ,QAAI,CAAC,UAAU;AACX,cAAQ;AAAA,IACZ;AAAA,EACJ,GAAG,CAAC,SAAS,QAAQ,CAAC;AAC1B;","names":[]}
@@ -0,0 +1,14 @@
1
+ import { useModalManager } from "./useModalManager";
2
+ const HEXA_PROMO_MODAL_KEY = "hexaPromoModal";
3
+ const useHexaPromoModal = () => {
4
+ const { activeModal, openModal, closeModal } = useModalManager();
5
+ return {
6
+ open: activeModal === HEXA_PROMO_MODAL_KEY,
7
+ openModal: () => openModal(HEXA_PROMO_MODAL_KEY),
8
+ closeModal
9
+ };
10
+ };
11
+ export {
12
+ useHexaPromoModal
13
+ };
14
+ //# sourceMappingURL=useHexaPromoModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/store/useHexaPromoModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\nconst HEXA_PROMO_MODAL_KEY = 'hexaPromoModal';\r\n\r\nexport const useHexaPromoModal = () => {\r\n const { activeModal, openModal, closeModal } = useModalManager();\r\n\r\n return {\r\n open: activeModal === HEXA_PROMO_MODAL_KEY,\r\n openModal: () => openModal(HEXA_PROMO_MODAL_KEY),\r\n closeModal,\r\n };\r\n};\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,MAAM,uBAAuB;AAEtB,MAAM,oBAAoB,MAAM;AACrC,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,SAAO;AAAA,IACL,MAAM,gBAAgB;AAAA,IACtB,WAAW,MAAM,UAAU,oBAAoB;AAAA,IAC/C;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/useMdSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nconst STORAGE_KEY = \"md-sidebar-expanded\";\n\nfunction getInitialState(): boolean {\n if (typeof window === \"undefined\") return false;\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === null) return false;\n return stored === \"true\";\n}\n\ntype MdSidebarStore = {\n isExpanded: boolean;\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n};\n\nexport const useMdSidebarStore = create<MdSidebarStore>((set) => ({\n isExpanded: getInitialState(),\n toggle: () => set((state) => {\n const next = !state.isExpanded;\n localStorage.setItem(STORAGE_KEY, String(next));\n return { isExpanded: next };\n }),\n expand: () => {\n localStorage.setItem(STORAGE_KEY, \"true\");\n return set({ isExpanded: true });\n },\n collapse: () => {\n localStorage.setItem(STORAGE_KEY, \"false\");\n return set({ isExpanded: false });\n },\n}));\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,MAAM,cAAc;AAEpB,SAAS,kBAA2B;AAChC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,SAAO,WAAW;AACtB;AASO,MAAM,oBAAoB,OAAuB,CAAC,SAAS;AAAA,EAC9D,YAAY,gBAAgB;AAAA,EAC5B,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AACJ,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/store/useMdSidebarStore.ts"],"sourcesContent":["import { create } from \"zustand\";\r\n\r\nconst STORAGE_KEY = \"md-sidebar-expanded\";\r\n\r\nfunction getInitialState(): boolean {\r\n if (typeof window === \"undefined\") return false;\r\n const stored = localStorage.getItem(STORAGE_KEY);\r\n if (stored === null) return false;\r\n return stored === \"true\";\r\n}\r\n\r\ntype MdSidebarStore = {\r\n isExpanded: boolean;\r\n toggle: () => void;\r\n expand: () => void;\r\n collapse: () => void;\r\n};\r\n\r\nexport const useMdSidebarStore = create<MdSidebarStore>((set) => ({\r\n isExpanded: getInitialState(),\r\n toggle: () => set((state) => {\r\n const next = !state.isExpanded;\r\n localStorage.setItem(STORAGE_KEY, String(next));\r\n return { isExpanded: next };\r\n }),\r\n expand: () => {\r\n localStorage.setItem(STORAGE_KEY, \"true\");\r\n return set({ isExpanded: true });\r\n },\r\n collapse: () => {\r\n localStorage.setItem(STORAGE_KEY, \"false\");\r\n return set({ isExpanded: false });\r\n },\r\n}));\r\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,MAAM,cAAc;AAEpB,SAAS,kBAA2B;AAChC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,SAAO,WAAW;AACtB;AASO,MAAM,oBAAoB,OAAuB,CAAC,SAAS;AAAA,EAC9D,YAAY,gBAAgB;AAAA,EAC5B,QAAQ,MAAM,IAAI,CAAC,UAAU;AACzB,UAAM,OAAO,CAAC,MAAM;AACpB,iBAAa,QAAQ,aAAa,OAAO,IAAI,CAAC;AAC9C,WAAO,EAAE,YAAY,KAAK;AAAA,EAC9B,CAAC;AAAA,EACD,QAAQ,MAAM;AACV,iBAAa,QAAQ,aAAa,MAAM;AACxC,WAAO,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,EACnC;AAAA,EACA,UAAU,MAAM;AACZ,iBAAa,QAAQ,aAAa,OAAO;AACzC,WAAO,IAAI,EAAE,YAAY,MAAM,CAAC;AAAA,EACpC;AACJ,EAAE;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/usePaidPlanRequiredModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\n\ninterface PaidPlanRequiredModalOptions {\n title?: string;\n description?: string;\n}\n\nexport function usePaidPlanRequiredModal() {\n const { activeModal, openModal, closeModal } = useModalManager();\n\n const isOpen = activeModal === 'paidPlanRequiredModal';\n\n return {\n open: isOpen,\n openModal: (options?: PaidPlanRequiredModalOptions) =>\n openModal('paidPlanRequiredModal', options ?? {}),\n closeModal,\n };\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAOzB,SAAS,2BAA2B;AACvC,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,WAAW,CAAC,YACR,UAAU,yBAAyB,WAAW,CAAC,CAAC;AAAA,IACpD;AAAA,EACJ;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../src/store/usePaidPlanRequiredModal.ts"],"sourcesContent":["import { useModalManager } from './useModalManager';\r\n\r\ninterface PaidPlanRequiredModalOptions {\r\n title?: string;\r\n description?: string;\r\n}\r\n\r\nexport function usePaidPlanRequiredModal() {\r\n const { activeModal, openModal, closeModal } = useModalManager();\r\n\r\n const isOpen = activeModal === 'paidPlanRequiredModal';\r\n\r\n return {\r\n open: isOpen,\r\n openModal: (options?: PaidPlanRequiredModalOptions) =>\r\n openModal('paidPlanRequiredModal', options ?? {}),\r\n closeModal,\r\n };\r\n}\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAOzB,SAAS,2BAA2B;AACvC,QAAM,EAAE,aAAa,WAAW,WAAW,IAAI,gBAAgB;AAE/D,QAAM,SAAS,gBAAgB;AAE/B,SAAO;AAAA,IACH,MAAM;AAAA,IACN,WAAW,CAAC,YACR,UAAU,yBAAyB,WAAW,CAAC,CAAC;AAAA,IACpD;AAAA,EACJ;AACJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/constants/br-states.ts"],"sourcesContent":["export const BR_STATE_OPTIONS = [\n { value: 'AC', label: 'AC' },\n { value: 'AL', label: 'AL' },\n { value: 'AP', label: 'AP' },\n { value: 'AM', label: 'AM' },\n { value: 'BA', label: 'BA' },\n { value: 'CE', label: 'CE' },\n { value: 'DF', label: 'DF' },\n { value: 'ES', label: 'ES' },\n { value: 'GO', label: 'GO' },\n { value: 'MA', label: 'MA' },\n { value: 'MT', label: 'MT' },\n { value: 'MS', label: 'MS' },\n { value: 'MG', label: 'MG' },\n { value: 'PA', label: 'PA' },\n { value: 'PB', label: 'PB' },\n { value: 'PR', label: 'PR' },\n { value: 'PE', label: 'PE' },\n { value: 'PI', label: 'PI' },\n { value: 'RJ', label: 'RJ' },\n { value: 'RN', label: 'RN' },\n { value: 'RS', label: 'RS' },\n { value: 'RO', label: 'RO' },\n { value: 'RR', label: 'RR' },\n { value: 'SC', label: 'SC' },\n { value: 'SP', label: 'SP' },\n { value: 'SE', label: 'SE' },\n { value: 'TO', label: 'TO' },\n];\n"],"mappings":"AAAO,MAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/constants/br-states.ts"],"sourcesContent":["export const BR_STATE_OPTIONS = [\r\n { value: 'AC', label: 'AC' },\r\n { value: 'AL', label: 'AL' },\r\n { value: 'AP', label: 'AP' },\r\n { value: 'AM', label: 'AM' },\r\n { value: 'BA', label: 'BA' },\r\n { value: 'CE', label: 'CE' },\r\n { value: 'DF', label: 'DF' },\r\n { value: 'ES', label: 'ES' },\r\n { value: 'GO', label: 'GO' },\r\n { value: 'MA', label: 'MA' },\r\n { value: 'MT', label: 'MT' },\r\n { value: 'MS', label: 'MS' },\r\n { value: 'MG', label: 'MG' },\r\n { value: 'PA', label: 'PA' },\r\n { value: 'PB', label: 'PB' },\r\n { value: 'PR', label: 'PR' },\r\n { value: 'PE', label: 'PE' },\r\n { value: 'PI', label: 'PI' },\r\n { value: 'RJ', label: 'RJ' },\r\n { value: 'RN', label: 'RN' },\r\n { value: 'RS', label: 'RS' },\r\n { value: 'RO', label: 'RO' },\r\n { value: 'RR', label: 'RR' },\r\n { value: 'SC', label: 'SC' },\r\n { value: 'SP', label: 'SP' },\r\n { value: 'SE', label: 'SE' },\r\n { value: 'TO', label: 'TO' },\r\n];\r\n"],"mappings":"AAAO,MAAM,mBAAmB;AAAA,EAC9B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,MAAM,OAAO,KAAK;AAC7B;","names":[]}
@@ -0,0 +1,88 @@
1
+ const SINCE_COOKIE = "gpromo-hexa-since";
2
+ const SEEN_COOKIE = "gpromo-hexa-seen";
3
+ const MAX_AGE_SECONDS = 60 * 60 * 24 * 2;
4
+ function parentCookieDomain() {
5
+ if (typeof window === "undefined") return void 0;
6
+ const host = window.location.hostname;
7
+ if (!host || host === "localhost") return void 0;
8
+ if (/^\d+\.\d+\.\d+\.\d+$/.test(host)) return void 0;
9
+ const parts = host.split(".");
10
+ if (parts.length < 2) return void 0;
11
+ return "." + parts.slice(1).join(".");
12
+ }
13
+ function readCookie(name) {
14
+ if (typeof document === "undefined") return null;
15
+ const m = document.cookie.match(new RegExp(`(?:^|;\\s*)${name}=([^;]+)`));
16
+ if (!m) return null;
17
+ try {
18
+ return decodeURIComponent(m[1]);
19
+ } catch {
20
+ return null;
21
+ }
22
+ }
23
+ function writeCookie(name, value) {
24
+ if (typeof document === "undefined" || typeof window === "undefined") return;
25
+ const domain = parentCookieDomain();
26
+ const parts = [
27
+ `${name}=${encodeURIComponent(value)}`,
28
+ "Path=/",
29
+ `Max-Age=${MAX_AGE_SECONDS}`,
30
+ "SameSite=Lax",
31
+ domain ? `Domain=${domain}` : "",
32
+ window.location.protocol === "https:" ? "Secure" : ""
33
+ ].filter(Boolean);
34
+ try {
35
+ document.cookie = parts.join("; ");
36
+ } catch {
37
+ }
38
+ }
39
+ function expireCookie(name) {
40
+ if (typeof document === "undefined" || typeof window === "undefined") return;
41
+ const domain = parentCookieDomain();
42
+ const parts = [
43
+ `${name}=`,
44
+ "Path=/",
45
+ "Max-Age=0",
46
+ "SameSite=Lax",
47
+ domain ? `Domain=${domain}` : "",
48
+ window.location.protocol === "https:" ? "Secure" : ""
49
+ ].filter(Boolean);
50
+ try {
51
+ document.cookie = parts.join("; ");
52
+ } catch {
53
+ }
54
+ }
55
+ function hexaPromoDayKey() {
56
+ const d = /* @__PURE__ */ new Date();
57
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
58
+ }
59
+ function getHexaPromoSeenDay() {
60
+ return readCookie(SEEN_COOKIE);
61
+ }
62
+ function setHexaPromoSeenDay(day) {
63
+ writeCookie(SEEN_COOKIE, day);
64
+ }
65
+ function getHexaPromoSince() {
66
+ const raw = readCookie(SINCE_COOKIE);
67
+ if (!raw) return null;
68
+ const [day, msRaw] = raw.split("|");
69
+ const ms = Number(msRaw);
70
+ if (!day || !Number.isFinite(ms)) return null;
71
+ return { day, ms };
72
+ }
73
+ function setHexaPromoSince(day, ms) {
74
+ writeCookie(SINCE_COOKIE, `${day}|${ms}`);
75
+ }
76
+ function clearHexaPromo() {
77
+ expireCookie(SINCE_COOKIE);
78
+ expireCookie(SEEN_COOKIE);
79
+ }
80
+ export {
81
+ clearHexaPromo,
82
+ getHexaPromoSeenDay,
83
+ getHexaPromoSince,
84
+ hexaPromoDayKey,
85
+ setHexaPromoSeenDay,
86
+ setHexaPromoSince
87
+ };
88
+ //# sourceMappingURL=hexa-promo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/cookies/hexa-promo.ts"],"sourcesContent":["/**\r\n * Estado do \"Rumo ao Hexa\" promo modal — persistido em **cookies no domínio registrável\r\n * pai** (ex.: `accounts.greatpages.dev.br` → `.greatpages.dev.br`) para serem compartilhados\r\n * entre os subdomínios dos apps (accounts/gapps ↔ pages/gpages). Assim a janela de \"3 minutos\r\n * online\" é cumulativa entre os apps e a modal abre **uma única vez** por sessão/dia,\r\n * independente de em qual app o usuário esteja.\r\n *\r\n * São dois cookies:\r\n * - `gpromo-hexa-since` = `<dia>|<timestampMs>` — início da janela de 3 min (gravado uma vez).\r\n * - `gpromo-hexa-seen` = `<dia>` — dia em que a modal já foi exibida.\r\n *\r\n * `<dia>` é a data local `YYYY-MM-DD`: vira automaticamente no dia seguinte, fazendo a modal\r\n * reaparecer. No logout, ambos os cookies são limpos (ver `auth.provider`), então um novo\r\n * login também faz a modal reaparecer.\r\n *\r\n * Em localhost (sem subdomínio) caem em cookies host-scoped — equivalente ao localStorage;\r\n * cross-port não compartilha (limitação aceita no dev local).\r\n */\r\n\r\nconst SINCE_COOKIE = 'gpromo-hexa-since';\r\nconst SEEN_COOKIE = 'gpromo-hexa-seen';\r\nconst MAX_AGE_SECONDS = 60 * 60 * 24 * 2; // 2 dias — folga sobre a janela de 1 dia.\r\n\r\nfunction parentCookieDomain(): string | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n const host = window.location.hostname;\r\n if (!host || host === 'localhost') return undefined;\r\n // IP literal → sem atributo Domain (cookie host-scoped)\r\n if (/^\\d+\\.\\d+\\.\\d+\\.\\d+$/.test(host)) return undefined;\r\n const parts = host.split('.');\r\n if (parts.length < 2) return undefined;\r\n // Tira o subdomínio mais à esquerda — `accounts.greatpages.dev.br` → `.greatpages.dev.br`\r\n return '.' + parts.slice(1).join('.');\r\n}\r\n\r\nfunction readCookie(name: string): string | null {\r\n if (typeof document === 'undefined') return null;\r\n const m = document.cookie.match(new RegExp(`(?:^|;\\\\s*)${name}=([^;]+)`));\r\n if (!m) return null;\r\n try {\r\n return decodeURIComponent(m[1]);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction writeCookie(name: string, value: string): void {\r\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\r\n const domain = parentCookieDomain();\r\n const parts = [\r\n `${name}=${encodeURIComponent(value)}`,\r\n 'Path=/',\r\n `Max-Age=${MAX_AGE_SECONDS}`,\r\n 'SameSite=Lax',\r\n domain ? `Domain=${domain}` : '',\r\n window.location.protocol === 'https:' ? 'Secure' : '',\r\n ].filter(Boolean);\r\n try {\r\n document.cookie = parts.join('; ');\r\n } catch {\r\n // Se o navegador bloquear cookies, seguimos com a exibição única por sessão (timer no Gate).\r\n }\r\n}\r\n\r\nfunction expireCookie(name: string): void {\r\n if (typeof document === 'undefined' || typeof window === 'undefined') return;\r\n const domain = parentCookieDomain();\r\n const parts = [\r\n `${name}=`,\r\n 'Path=/',\r\n 'Max-Age=0',\r\n 'SameSite=Lax',\r\n domain ? `Domain=${domain}` : '',\r\n window.location.protocol === 'https:' ? 'Secure' : '',\r\n ].filter(Boolean);\r\n try {\r\n document.cookie = parts.join('; ');\r\n } catch {\r\n // noop\r\n }\r\n}\r\n\r\n/** Chave do dia local (`YYYY-MM-DD`) usada para reabrir a modal a cada novo dia. */\r\nexport function hexaPromoDayKey(): string {\r\n const d = new Date();\r\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\r\n}\r\n\r\nexport function getHexaPromoSeenDay(): string | null {\r\n return readCookie(SEEN_COOKIE);\r\n}\r\n\r\nexport function setHexaPromoSeenDay(day: string): void {\r\n writeCookie(SEEN_COOKIE, day);\r\n}\r\n\r\nexport function getHexaPromoSince(): { day: string; ms: number } | null {\r\n const raw = readCookie(SINCE_COOKIE);\r\n if (!raw) return null;\r\n const [day, msRaw] = raw.split('|');\r\n const ms = Number(msRaw);\r\n if (!day || !Number.isFinite(ms)) return null;\r\n return { day, ms };\r\n}\r\n\r\nexport function setHexaPromoSince(day: string, ms: number): void {\r\n writeCookie(SINCE_COOKIE, `${day}|${ms}`);\r\n}\r\n\r\n/** Limpa o estado da promo (chamado no logout para reabrir a modal no próximo login). */\r\nexport function clearHexaPromo(): void {\r\n expireCookie(SINCE_COOKIE);\r\n expireCookie(SEEN_COOKIE);\r\n}\r\n"],"mappings":"AAmBA,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,kBAAkB,KAAK,KAAK,KAAK;AAEvC,SAAS,qBAAyC;AAChD,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,OAAO,OAAO,SAAS;AAC7B,MAAI,CAAC,QAAQ,SAAS,YAAa,QAAO;AAE1C,MAAI,uBAAuB,KAAK,IAAI,EAAG,QAAO;AAC9C,QAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,SAAO,MAAM,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AACtC;AAEA,SAAS,WAAW,MAA6B;AAC/C,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,IAAI,SAAS,OAAO,MAAM,IAAI,OAAO,cAAc,IAAI,UAAU,CAAC;AACxE,MAAI,CAAC,EAAG,QAAO;AACf,MAAI;AACF,WAAO,mBAAmB,EAAE,CAAC,CAAC;AAAA,EAChC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,YAAY,MAAc,OAAqB;AACtD,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,YAAa;AACtE,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ;AAAA,IACZ,GAAG,IAAI,IAAI,mBAAmB,KAAK,CAAC;AAAA,IACpC;AAAA,IACA,WAAW,eAAe;AAAA,IAC1B;AAAA,IACA,SAAS,UAAU,MAAM,KAAK;AAAA,IAC9B,OAAO,SAAS,aAAa,WAAW,WAAW;AAAA,EACrD,EAAE,OAAO,OAAO;AAChB,MAAI;AACF,aAAS,SAAS,MAAM,KAAK,IAAI;AAAA,EACnC,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,aAAa,MAAoB;AACxC,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,YAAa;AACtE,QAAM,SAAS,mBAAmB;AAClC,QAAM,QAAQ;AAAA,IACZ,GAAG,IAAI;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,UAAU,MAAM,KAAK;AAAA,IAC9B,OAAO,SAAS,aAAa,WAAW,WAAW;AAAA,EACrD,EAAE,OAAO,OAAO;AAChB,MAAI;AACF,aAAS,SAAS,MAAM,KAAK,IAAI;AAAA,EACnC,QAAQ;AAAA,EAER;AACF;AAGO,SAAS,kBAA0B;AACxC,QAAM,IAAI,oBAAI,KAAK;AACnB,SAAO,GAAG,EAAE,YAAY,CAAC,IAAI,OAAO,EAAE,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAChH;AAEO,SAAS,sBAAqC;AACnD,SAAO,WAAW,WAAW;AAC/B;AAEO,SAAS,oBAAoB,KAAmB;AACrD,cAAY,aAAa,GAAG;AAC9B;AAEO,SAAS,oBAAwD;AACtE,QAAM,MAAM,WAAW,YAAY;AACnC,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,GAAG;AAClC,QAAM,KAAK,OAAO,KAAK;AACvB,MAAI,CAAC,OAAO,CAAC,OAAO,SAAS,EAAE,EAAG,QAAO;AACzC,SAAO,EAAE,KAAK,GAAG;AACnB;AAEO,SAAS,kBAAkB,KAAa,IAAkB;AAC/D,cAAY,cAAc,GAAG,GAAG,IAAI,EAAE,EAAE;AAC1C;AAGO,SAAS,iBAAuB;AACrC,eAAa,YAAY;AACzB,eAAa,WAAW;AAC1B;","names":[]}