@greatapps/common 1.1.430 → 1.1.432

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 (316) 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/embeds/CrispEmbed.mjs.map +1 -1
  18. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  19. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  20. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  21. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
  22. package/dist/components/layouts/NavBar.mjs.map +1 -1
  23. package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
  24. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  25. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  26. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  27. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  28. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  29. package/dist/components/modals/PaidPlanRequiredModal.mjs.map +1 -1
  30. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  31. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  32. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  33. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  34. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  35. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  36. package/dist/components/navigation/subcomponents/BottomLinks.mjs.map +1 -1
  37. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  38. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  39. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  40. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  41. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  42. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  43. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  44. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  45. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  46. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  47. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  49. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  50. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  53. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  54. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  55. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  56. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  57. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  58. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  59. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  60. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  61. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  62. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  63. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  64. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  65. package/dist/components/ui/form/FormField.mjs.map +1 -1
  66. package/dist/components/ui/form/Input.mjs.map +1 -1
  67. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  68. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  69. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  70. package/dist/components/ui/form/Select.mjs +1 -1
  71. package/dist/components/ui/form/Select.mjs.map +1 -1
  72. package/dist/components/ui/form/Switch.mjs.map +1 -1
  73. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  74. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  75. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  76. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  77. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  78. package/dist/components/ui/overlay/Tooltip.mjs +1 -1
  79. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  80. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  81. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  82. package/dist/index.mjs.map +1 -1
  83. package/dist/infra/utils/date.mjs.map +1 -1
  84. package/dist/middleware.mjs.map +1 -1
  85. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  86. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  87. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  88. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  89. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  90. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  91. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  92. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  93. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  94. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  95. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  96. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  97. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  98. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  99. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  100. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  101. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  102. package/dist/modules/auth/utils/assert-paid-subscription.mjs.map +1 -1
  103. package/dist/modules/auth/utils/assert-subscription-addon.mjs.map +1 -1
  104. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  105. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  106. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  107. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  108. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  109. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  110. package/dist/modules/cards/types.mjs.map +1 -1
  111. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  112. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  113. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  114. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  115. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  116. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  117. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  118. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  119. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  120. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  121. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  122. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  123. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  124. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  125. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  126. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  127. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  128. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  129. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  130. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  131. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  132. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  133. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  134. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  135. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  136. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  137. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  138. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  139. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  140. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  141. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  142. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  143. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  144. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  145. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  146. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  147. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  148. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  149. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  150. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  151. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  152. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  153. package/dist/store/usePaidPlanRequiredModal.mjs.map +1 -1
  154. package/dist/utils/constants/br-states.mjs.map +1 -1
  155. package/dist/utils/countries.mjs.map +1 -1
  156. package/dist/utils/safeServerAction.mjs.map +1 -1
  157. package/dist/utils/withAction.mjs.map +1 -1
  158. package/package.json +89 -89
  159. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  160. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  161. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  162. package/src/components/account/DeleteAccountModal.tsx +130 -130
  163. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  164. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  165. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  166. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  167. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  168. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  169. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  170. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  171. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  172. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  173. package/src/components/account/sections/SecuritySection.tsx +46 -46
  174. package/src/components/embeds/CrispEmbed.tsx +101 -101
  175. package/src/components/embeds/FrillEmbed.tsx +119 -119
  176. package/src/components/layouts/AppMobileNavBar.tsx +76 -76
  177. package/src/components/layouts/AppNavBar.tsx +46 -46
  178. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  179. package/src/components/layouts/NavBar.tsx +172 -172
  180. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  181. package/src/components/layouts/ProfilePopover.tsx +174 -174
  182. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  183. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  184. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  185. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  186. package/src/components/modals/PaidPlanRequiredModal.tsx +57 -57
  187. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  188. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  189. package/src/components/navigation/CancelledSubscriptionBanner.tsx +64 -64
  190. package/src/components/navigation/NavItemsContext.ts +20 -20
  191. package/src/components/navigation/ProjectSelectorPopover.tsx +177 -177
  192. package/src/components/navigation/shells/TabsMobileShell.tsx +74 -74
  193. package/src/components/navigation/subcomponents/BottomLinks.tsx +37 -37
  194. package/src/components/navigation/subcomponents/ProjectSelector.tsx +169 -169
  195. package/src/components/pages/NotFoundPage.tsx +67 -67
  196. package/src/components/pages/notifications/Notifications.tsx +170 -170
  197. package/src/components/ui/buttons/Button.tsx +57 -57
  198. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  199. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  200. package/src/components/ui/data-display/Accordion.tsx +81 -81
  201. package/src/components/ui/data-display/Badge.tsx +47 -47
  202. package/src/components/ui/data-display/Card.tsx +93 -93
  203. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  204. package/src/components/ui/data-display/CardItem.tsx +75 -75
  205. package/src/components/ui/data-display/Pagination.tsx +126 -126
  206. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  207. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  208. package/src/components/ui/data-display/Separator.tsx +29 -29
  209. package/src/components/ui/data-display/Table.tsx +117 -117
  210. package/src/components/ui/data-display/Tabs.tsx +67 -67
  211. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  212. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  213. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  214. package/src/components/ui/feedback/Progress.tsx +40 -40
  215. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  216. package/src/components/ui/feedback/Toast.tsx +101 -101
  217. package/src/components/ui/form/Calendar.tsx +228 -228
  218. package/src/components/ui/form/Checkbox.tsx +31 -31
  219. package/src/components/ui/form/ComboboxField.tsx +154 -154
  220. package/src/components/ui/form/DatePicker.tsx +97 -97
  221. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  222. package/src/components/ui/form/FormField.tsx +131 -131
  223. package/src/components/ui/form/Input.tsx +20 -20
  224. package/src/components/ui/form/InputOtp.tsx +80 -80
  225. package/src/components/ui/form/PhoneInput.tsx +208 -208
  226. package/src/components/ui/form/RadioGroup.tsx +45 -45
  227. package/src/components/ui/form/Select.tsx +200 -200
  228. package/src/components/ui/form/Switch.tsx +32 -32
  229. package/src/components/ui/form/Textarea.tsx +19 -19
  230. package/src/components/ui/overlay/Command.tsx +185 -185
  231. package/src/components/ui/overlay/Dialog.tsx +151 -151
  232. package/src/components/ui/overlay/Popover.tsx +49 -49
  233. package/src/components/ui/overlay/Sheet.tsx +166 -166
  234. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  235. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  236. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  237. package/src/index.ts +393 -393
  238. package/src/infra/utils/date.ts +7 -7
  239. package/src/middleware.ts +4 -4
  240. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  241. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  242. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  243. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  244. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  245. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  246. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  247. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  248. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  249. package/src/modules/accounts/services/account.service.ts +239 -239
  250. package/src/modules/accounts/types.ts +225 -225
  251. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  252. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  253. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  254. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  255. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  256. package/src/modules/auth/types/management-permission.type.ts +7 -7
  257. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  258. package/src/modules/auth/utils/assert-management-subscription.ts +35 -35
  259. package/src/modules/auth/utils/assert-paid-subscription.ts +43 -43
  260. package/src/modules/auth/utils/assert-subscription-addon.ts +42 -42
  261. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  262. package/src/modules/cards/actions/create-card.action.ts +9 -9
  263. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  264. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  265. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  266. package/src/modules/cards/services/cards.service.ts +51 -51
  267. package/src/modules/cards/types.ts +32 -32
  268. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  269. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  270. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +14 -14
  271. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  272. package/src/modules/plans/services/plans.service.ts +36 -36
  273. package/src/modules/plans/types/plan.type.ts +21 -21
  274. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  275. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  276. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  277. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  278. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  279. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  280. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  281. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  282. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  283. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  284. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  285. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  286. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  287. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  288. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  289. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +15 -15
  290. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  291. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  292. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  293. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  294. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  295. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  296. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  297. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  298. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  299. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  300. package/src/modules/users/action/list-messages.action.ts +12 -12
  301. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  302. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  303. package/src/modules/users/hooks/messages.hook.ts +60 -60
  304. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  305. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  306. package/src/modules/whitelabel/schema.ts +84 -84
  307. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  308. package/src/providers/whitelabel.provider.tsx +54 -54
  309. package/src/store/useBuyCreditsModal.ts +21 -21
  310. package/src/store/useDesktopSidebarStore.ts +47 -47
  311. package/src/store/useMdSidebarStore.ts +34 -34
  312. package/src/store/usePaidPlanRequiredModal.ts +19 -19
  313. package/src/utils/constants/br-states.ts +29 -29
  314. package/src/utils/countries.ts +224 -224
  315. package/src/utils/safeServerAction.ts +21 -21
  316. package/src/utils/withAction.ts +13 -13
@@ -1,45 +1,45 @@
1
- 'use client';
2
-
3
- import { UserProfile } from '../../users/schema';
4
- import { useAuth } from '../../../providers/auth.provider';
5
- import type { ManagementPermission } from '../types/management-permission.type';
6
-
7
- export { type ManagementPermission } from '../types/management-permission.type';
8
-
9
- export function useManagementPermissions() {
10
- const { user } = useAuth();
11
- const profile = user?.profile;
12
-
13
- const isAdmin = profile === UserProfile.admin;
14
- const isOwner = profile === UserProfile.owner;
15
- const isOwnerOrAdmin = isOwner || isAdmin;
16
- const isViewer = profile === UserProfile.viewer;
17
- const isCollaborator = profile === UserProfile.collaborator;
18
- const canManage = !isViewer;
19
-
20
- const hasPermission = (permission: ManagementPermission) => {
21
- switch (permission) {
22
- case 'manage_pages':
23
- case 'manage_redirects':
24
- case 'manage_ab_tests':
25
- case 'restore_pages':
26
- return !isViewer;
27
- case 'manage_domains':
28
- case 'manage_projects':
29
- return isOwnerOrAdmin;
30
- default:
31
- return false;
32
- }
33
- };
34
-
35
- return {
36
- profile,
37
- isAdmin,
38
- isOwner,
39
- isOwnerOrAdmin,
40
- isViewer,
41
- isCollaborator,
42
- canManage,
43
- hasPermission,
44
- };
45
- }
1
+ 'use client';
2
+
3
+ import { UserProfile } from '../../users/schema';
4
+ import { useAuth } from '../../../providers/auth.provider';
5
+ import type { ManagementPermission } from '../types/management-permission.type';
6
+
7
+ export { type ManagementPermission } from '../types/management-permission.type';
8
+
9
+ export function useManagementPermissions() {
10
+ const { user } = useAuth();
11
+ const profile = user?.profile;
12
+
13
+ const isAdmin = profile === UserProfile.admin;
14
+ const isOwner = profile === UserProfile.owner;
15
+ const isOwnerOrAdmin = isOwner || isAdmin;
16
+ const isViewer = profile === UserProfile.viewer;
17
+ const isCollaborator = profile === UserProfile.collaborator;
18
+ const canManage = !isViewer;
19
+
20
+ const hasPermission = (permission: ManagementPermission) => {
21
+ switch (permission) {
22
+ case 'manage_pages':
23
+ case 'manage_redirects':
24
+ case 'manage_ab_tests':
25
+ case 'restore_pages':
26
+ return !isViewer;
27
+ case 'manage_domains':
28
+ case 'manage_projects':
29
+ return isOwnerOrAdmin;
30
+ default:
31
+ return false;
32
+ }
33
+ };
34
+
35
+ return {
36
+ profile,
37
+ isAdmin,
38
+ isOwner,
39
+ isOwnerOrAdmin,
40
+ isViewer,
41
+ isCollaborator,
42
+ canManage,
43
+ hasPermission,
44
+ };
45
+ }
@@ -1,7 +1,7 @@
1
- export type ManagementPermission =
2
- | 'manage_pages'
3
- | 'manage_domains'
4
- | 'manage_redirects'
5
- | 'manage_ab_tests'
6
- | 'manage_projects'
7
- | 'restore_pages';
1
+ export type ManagementPermission =
2
+ | 'manage_pages'
3
+ | 'manage_domains'
4
+ | 'manage_redirects'
5
+ | 'manage_ab_tests'
6
+ | 'manage_projects'
7
+ | 'restore_pages';
@@ -1,46 +1,46 @@
1
- import 'server-only';
2
-
3
- import { UserProfile } from '../../users/schema';
4
- import { findUserById } from '../../users/action/find-user-by-id.action';
5
- import { ApiError } from '../../../infra/api/types';
6
- import { assertManagementSubscription } from './assert-management-subscription';
7
- import type { ManagementPermission } from '../types/management-permission.type';
8
-
9
- async function getCurrentUserProfile() {
10
- const result = await findUserById();
11
-
12
- if (!result.success || !result.data) {
13
- throw new ApiError(
14
- ('error' in result && result.error) || 'Não foi possível identificar o usuário autenticado',
15
- 'USER_CONTEXT_FAILED',
16
- 403
17
- );
18
- }
19
-
20
- return result.data.profile;
21
- }
22
-
23
- export async function assertManagementPermission(permission: ManagementPermission) {
24
- const profile = await getCurrentUserProfile();
25
-
26
- switch (permission) {
27
- case 'manage_pages':
28
- case 'manage_redirects':
29
- case 'manage_ab_tests':
30
- case 'restore_pages':
31
- if (profile === UserProfile.viewer) {
32
- throw new ApiError('Você não tem permissão para executar esta ação', 'FORBIDDEN', 403);
33
- }
34
- break;
35
- case 'manage_domains':
36
- case 'manage_projects':
37
- if (profile !== UserProfile.owner && profile !== UserProfile.admin) {
38
- throw new ApiError('Você não tem permissão para executar esta ação', 'FORBIDDEN', 403);
39
- }
40
- break;
41
- default:
42
- throw new ApiError('Permissão inválida', 'INVALID_PERMISSION', 500);
43
- }
44
-
45
- await assertManagementSubscription();
46
- }
1
+ import 'server-only';
2
+
3
+ import { UserProfile } from '../../users/schema';
4
+ import { findUserById } from '../../users/action/find-user-by-id.action';
5
+ import { ApiError } from '../../../infra/api/types';
6
+ import { assertManagementSubscription } from './assert-management-subscription';
7
+ import type { ManagementPermission } from '../types/management-permission.type';
8
+
9
+ async function getCurrentUserProfile() {
10
+ const result = await findUserById();
11
+
12
+ if (!result.success || !result.data) {
13
+ throw new ApiError(
14
+ ('error' in result && result.error) || 'Não foi possível identificar o usuário autenticado',
15
+ 'USER_CONTEXT_FAILED',
16
+ 403
17
+ );
18
+ }
19
+
20
+ return result.data.profile;
21
+ }
22
+
23
+ export async function assertManagementPermission(permission: ManagementPermission) {
24
+ const profile = await getCurrentUserProfile();
25
+
26
+ switch (permission) {
27
+ case 'manage_pages':
28
+ case 'manage_redirects':
29
+ case 'manage_ab_tests':
30
+ case 'restore_pages':
31
+ if (profile === UserProfile.viewer) {
32
+ throw new ApiError('Você não tem permissão para executar esta ação', 'FORBIDDEN', 403);
33
+ }
34
+ break;
35
+ case 'manage_domains':
36
+ case 'manage_projects':
37
+ if (profile !== UserProfile.owner && profile !== UserProfile.admin) {
38
+ throw new ApiError('Você não tem permissão para executar esta ação', 'FORBIDDEN', 403);
39
+ }
40
+ break;
41
+ default:
42
+ throw new ApiError('Permissão inválida', 'INVALID_PERMISSION', 500);
43
+ }
44
+
45
+ await assertManagementSubscription();
46
+ }
@@ -1,35 +1,35 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import { hasSubscriptionExpired } from "../../subscriptions/utils/has-subscription-expired";
6
-
7
- export async function assertManagementSubscription() {
8
- const result = await listSubscriptionsAction({ active: true });
9
-
10
- if (!result.success) {
11
- throw new ApiError(
12
- result.error || "Não foi possível validar a assinatura atual",
13
- "SUBSCRIPTION_CONTEXT_FAILED",
14
- 403,
15
- );
16
- }
17
-
18
- const subscription = result.data?.data?.[0];
19
-
20
- if (!subscription) {
21
- throw new ApiError(
22
- "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
- "SUBSCRIPTION_NOT_FOUND",
24
- 403,
25
- );
26
- }
27
-
28
- if (hasSubscriptionExpired(subscription?.date_due)) {
29
- throw new ApiError(
30
- "Sua assinatura está vencida. Assine um novo plano para continuar.",
31
- "SUBSCRIPTION_EXPIRED",
32
- 403,
33
- );
34
- }
35
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import { hasSubscriptionExpired } from "../../subscriptions/utils/has-subscription-expired";
6
+
7
+ export async function assertManagementSubscription() {
8
+ const result = await listSubscriptionsAction({ active: true });
9
+
10
+ if (!result.success) {
11
+ throw new ApiError(
12
+ result.error || "Não foi possível validar a assinatura atual",
13
+ "SUBSCRIPTION_CONTEXT_FAILED",
14
+ 403,
15
+ );
16
+ }
17
+
18
+ const subscription = result.data?.data?.[0];
19
+
20
+ if (!subscription) {
21
+ throw new ApiError(
22
+ "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
+ "SUBSCRIPTION_NOT_FOUND",
24
+ 403,
25
+ );
26
+ }
27
+
28
+ if (hasSubscriptionExpired(subscription?.date_due)) {
29
+ throw new ApiError(
30
+ "Sua assinatura está vencida. Assine um novo plano para continuar.",
31
+ "SUBSCRIPTION_EXPIRED",
32
+ 403,
33
+ );
34
+ }
35
+ }
@@ -1,43 +1,43 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import { hasSubscriptionExpired } from "../../subscriptions/utils/has-subscription-expired";
6
-
7
- export async function assertPaidSubscription() {
8
- const result = await listSubscriptionsAction({ active: true });
9
-
10
- if (!result.success) {
11
- throw new ApiError(
12
- result.error || "Não foi possível validar a assinatura atual",
13
- "SUBSCRIPTION_CONTEXT_FAILED",
14
- 403,
15
- );
16
- }
17
-
18
- const subscription = result.data?.data?.[0];
19
-
20
- if (!subscription) {
21
- throw new ApiError(
22
- "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
- "SUBSCRIPTION_NOT_FOUND",
24
- 403,
25
- );
26
- }
27
-
28
- if (hasSubscriptionExpired(subscription.date_due)) {
29
- throw new ApiError(
30
- "Sua assinatura está vencida. Assine um novo plano para continuar.",
31
- "SUBSCRIPTION_EXPIRED",
32
- 403,
33
- );
34
- }
35
-
36
- if (subscription.type === 'free' || subscription.id_plan === 5 || subscription.type === 'trial') {
37
- throw new ApiError(
38
- "Este recurso está disponível apenas para planos pagos. Faça upgrade do seu plano para continuar.",
39
- "PAID_SUBSCRIPTION_REQUIRED",
40
- 403,
41
- );
42
- }
43
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import { hasSubscriptionExpired } from "../../subscriptions/utils/has-subscription-expired";
6
+
7
+ export async function assertPaidSubscription() {
8
+ const result = await listSubscriptionsAction({ active: true });
9
+
10
+ if (!result.success) {
11
+ throw new ApiError(
12
+ result.error || "Não foi possível validar a assinatura atual",
13
+ "SUBSCRIPTION_CONTEXT_FAILED",
14
+ 403,
15
+ );
16
+ }
17
+
18
+ const subscription = result.data?.data?.[0];
19
+
20
+ if (!subscription) {
21
+ throw new ApiError(
22
+ "Nenhuma assinatura ativa encontrada. Assine um plano para continuar.",
23
+ "SUBSCRIPTION_NOT_FOUND",
24
+ 403,
25
+ );
26
+ }
27
+
28
+ if (hasSubscriptionExpired(subscription.date_due)) {
29
+ throw new ApiError(
30
+ "Sua assinatura está vencida. Assine um novo plano para continuar.",
31
+ "SUBSCRIPTION_EXPIRED",
32
+ 403,
33
+ );
34
+ }
35
+
36
+ if (subscription.type === 'free' || subscription.id_plan === 5 || subscription.type === 'trial') {
37
+ throw new ApiError(
38
+ "Este recurso está disponível apenas para planos pagos. Faça upgrade do seu plano para continuar.",
39
+ "PAID_SUBSCRIPTION_REQUIRED",
40
+ 403,
41
+ );
42
+ }
43
+ }
@@ -1,42 +1,42 @@
1
- import "server-only";
2
-
3
- import { ApiError } from "../../../infra/api/types";
4
- import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
- import type { AddonKindEnum } from "../../subscriptions/constants/addons.constants";
6
-
7
- export async function assertSubscriptionAddon(
8
- addonId: AddonKindEnum,
9
- addonLabel: string,
10
- ) {
11
- const result = await listSubscriptionsAction({ active: true });
12
-
13
- if (!result.success) {
14
- throw new ApiError(
15
- result.error || "Não foi possível validar a assinatura atual",
16
- "SUBSCRIPTION_CONTEXT_FAILED",
17
- 403,
18
- );
19
- }
20
-
21
- const subscription = result.data?.data?.[0];
22
-
23
- if (!subscription) {
24
- throw new ApiError(
25
- `Nenhuma assinatura ativa encontrada. Para acessar este recurso, é necessário ter uma assinatura com ${addonLabel}.`,
26
- "NO_ACTIVE_SUBSCRIPTION",
27
- 403,
28
- );
29
- }
30
-
31
- const hasAddon = subscription?.items?.some(
32
- (item) => item.id_addon === addonId,
33
- );
34
-
35
- if (!hasAddon) {
36
- throw new ApiError(
37
- `Sua assinatura não inclui ${addonLabel}. Faça upgrade do seu plano.`,
38
- "ADDON_NOT_AVAILABLE",
39
- 403,
40
- );
41
- }
42
- }
1
+ import "server-only";
2
+
3
+ import { ApiError } from "../../../infra/api/types";
4
+ import { listSubscriptionsAction } from "../../subscriptions/actions/list-subscriptions.action";
5
+ import type { AddonKindEnum } from "../../subscriptions/constants/addons.constants";
6
+
7
+ export async function assertSubscriptionAddon(
8
+ addonId: AddonKindEnum,
9
+ addonLabel: string,
10
+ ) {
11
+ const result = await listSubscriptionsAction({ active: true });
12
+
13
+ if (!result.success) {
14
+ throw new ApiError(
15
+ result.error || "Não foi possível validar a assinatura atual",
16
+ "SUBSCRIPTION_CONTEXT_FAILED",
17
+ 403,
18
+ );
19
+ }
20
+
21
+ const subscription = result.data?.data?.[0];
22
+
23
+ if (!subscription) {
24
+ throw new ApiError(
25
+ `Nenhuma assinatura ativa encontrada. Para acessar este recurso, é necessário ter uma assinatura com ${addonLabel}.`,
26
+ "NO_ACTIVE_SUBSCRIPTION",
27
+ 403,
28
+ );
29
+ }
30
+
31
+ const hasAddon = subscription?.items?.some(
32
+ (item) => item.id_addon === addonId,
33
+ );
34
+
35
+ if (!hasAddon) {
36
+ throw new ApiError(
37
+ `Sua assinatura não inclui ${addonLabel}. Faça upgrade do seu plano.`,
38
+ "ADDON_NOT_AVAILABLE",
39
+ 403,
40
+ );
41
+ }
42
+ }
@@ -1,43 +1,43 @@
1
- import 'server-only';
2
-
3
- import type { RequestConfig } from '../../../infra/api/client';
4
- import type { JWTPayload } from '../../users/schema';
5
- import { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';
6
- import { whitelabelService } from '../../whitelabel/services/whitelabel.service';
7
-
8
- /**
9
- * Compara um `id_wl` com o whitelabel resolvido pelo hostname.
10
- * Se forem diferentes (ex: admin com id_wl=1 num domínio de id_wl=30),
11
- * retorna um RequestConfig com o override correto.
12
- * Se forem iguais, retorna undefined (sem custo extra).
13
- */
14
- export async function buildWlOverride(
15
- jwtWlId: number,
16
- ): Promise<RequestConfig | undefined> {
17
- try {
18
- const { id: hostWlId } = await findWhitelabel();
19
-
20
- if (jwtWlId !== hostWlId) {
21
- const wlToken = await whitelabelService.getTokenByWhitelabelId(jwtWlId);
22
- return { whiteLabelId: jwtWlId, authToken: wlToken };
23
- }
24
- } catch {
25
- // Fallback to default whitelabel resolution
26
- }
27
-
28
- return undefined;
29
- }
30
-
31
- /**
32
- * Extrai `id_wl` do JWT cookie e delega para `buildWlOverride`.
33
- */
34
- export async function buildWlOverrideFromJwt(
35
- cookie: string,
36
- ): Promise<RequestConfig | undefined> {
37
- try {
38
- const payload = JSON.parse(atob(cookie.split('.')[1])) as JWTPayload;
39
- return buildWlOverride(Number(payload.id_wl));
40
- } catch {
41
- return undefined;
42
- }
43
- }
1
+ import 'server-only';
2
+
3
+ import type { RequestConfig } from '../../../infra/api/client';
4
+ import type { JWTPayload } from '../../users/schema';
5
+ import { findWhitelabel } from '../../whitelabel/actions/find-whitelabel.action';
6
+ import { whitelabelService } from '../../whitelabel/services/whitelabel.service';
7
+
8
+ /**
9
+ * Compara um `id_wl` com o whitelabel resolvido pelo hostname.
10
+ * Se forem diferentes (ex: admin com id_wl=1 num domínio de id_wl=30),
11
+ * retorna um RequestConfig com o override correto.
12
+ * Se forem iguais, retorna undefined (sem custo extra).
13
+ */
14
+ export async function buildWlOverride(
15
+ jwtWlId: number,
16
+ ): Promise<RequestConfig | undefined> {
17
+ try {
18
+ const { id: hostWlId } = await findWhitelabel();
19
+
20
+ if (jwtWlId !== hostWlId) {
21
+ const wlToken = await whitelabelService.getTokenByWhitelabelId(jwtWlId);
22
+ return { whiteLabelId: jwtWlId, authToken: wlToken };
23
+ }
24
+ } catch {
25
+ // Fallback to default whitelabel resolution
26
+ }
27
+
28
+ return undefined;
29
+ }
30
+
31
+ /**
32
+ * Extrai `id_wl` do JWT cookie e delega para `buildWlOverride`.
33
+ */
34
+ export async function buildWlOverrideFromJwt(
35
+ cookie: string,
36
+ ): Promise<RequestConfig | undefined> {
37
+ try {
38
+ const payload = JSON.parse(atob(cookie.split('.')[1])) as JWTPayload;
39
+ return buildWlOverride(Number(payload.id_wl));
40
+ } catch {
41
+ return undefined;
42
+ }
43
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { cardsService } from '../services/cards.service';
5
- import { CreateCardRequest } from '../types';
6
-
7
- export async function createCardAction(data: CreateCardRequest) {
8
- return safeServerAction(() => cardsService.createCard(data));
9
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { cardsService } from '../services/cards.service';
5
+ import { CreateCardRequest } from '../types';
6
+
7
+ export async function createCardAction(data: CreateCardRequest) {
8
+ return safeServerAction(() => cardsService.createCard(data));
9
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { cardsService } from '../services/cards.service';
5
-
6
- export async function listCardsAction() {
7
- return safeServerAction(() => cardsService.listCards());
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { cardsService } from '../services/cards.service';
5
+
6
+ export async function listCardsAction() {
7
+ return safeServerAction(() => cardsService.listCards());
8
+ }
@@ -1,14 +1,14 @@
1
- 'use client';
2
-
3
- import { useQuery } from '@tanstack/react-query';
4
- import { withAction } from '../../../utils/withAction';
5
- import { listCardsAction } from '../actions/list-cards.action';
6
-
7
- export const CARDS_QUERY_KEY = ['cards'];
8
-
9
- export function useCards() {
10
- return useQuery({
11
- queryKey: CARDS_QUERY_KEY,
12
- queryFn: withAction(listCardsAction),
13
- });
14
- }
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import { withAction } from '../../../utils/withAction';
5
+ import { listCardsAction } from '../actions/list-cards.action';
6
+
7
+ export const CARDS_QUERY_KEY = ['cards'];
8
+
9
+ export function useCards() {
10
+ return useQuery({
11
+ queryKey: CARDS_QUERY_KEY,
12
+ queryFn: withAction(listCardsAction),
13
+ });
14
+ }
@@ -1,18 +1,18 @@
1
- 'use client';
2
-
3
- import { useMutation, useQueryClient } from '@tanstack/react-query';
4
- import { withAction } from '../../../utils/withAction';
5
- import { createCardAction } from '../actions/create-card.action';
6
- import { CreateCardRequest } from '../types';
7
- import { CARDS_QUERY_KEY } from './cards.hook';
8
-
9
- export function useCreateCard() {
10
- const queryClient = useQueryClient();
11
-
12
- return useMutation({
13
- mutationFn: (data: CreateCardRequest) => withAction(createCardAction)(data),
14
- onSuccess: () => {
15
- queryClient.invalidateQueries({ queryKey: CARDS_QUERY_KEY });
16
- },
17
- });
18
- }
1
+ 'use client';
2
+
3
+ import { useMutation, useQueryClient } from '@tanstack/react-query';
4
+ import { withAction } from '../../../utils/withAction';
5
+ import { createCardAction } from '../actions/create-card.action';
6
+ import { CreateCardRequest } from '../types';
7
+ import { CARDS_QUERY_KEY } from './cards.hook';
8
+
9
+ export function useCreateCard() {
10
+ const queryClient = useQueryClient();
11
+
12
+ return useMutation({
13
+ mutationFn: (data: CreateCardRequest) => withAction(createCardAction)(data),
14
+ onSuccess: () => {
15
+ queryClient.invalidateQueries({ queryKey: CARDS_QUERY_KEY });
16
+ },
17
+ });
18
+ }