@greatapps/common 1.1.371 → 1.1.374

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 (338) hide show
  1. package/dist/components/account/AccountModals.mjs.map +1 -1
  2. package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
  3. package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
  4. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  5. package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
  6. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  7. package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
  8. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  9. package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
  10. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  11. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  12. package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
  13. package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
  14. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  15. package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
  16. package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
  17. package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
  18. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  19. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  20. package/dist/components/handlers/SearchParamsHandler.mjs.map +1 -1
  21. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  22. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  23. package/dist/components/layouts/CollapsibleSidebar.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 +9 -1
  28. package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
  29. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -1
  30. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  31. package/dist/components/layouts/WhitelabelCodes.mjs.map +1 -1
  32. package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
  33. package/dist/components/modals/ModalManager.mjs.map +1 -1
  34. package/dist/components/modals/Modals.mjs.map +1 -1
  35. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  36. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  37. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  38. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  39. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  40. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  41. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  42. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  43. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  44. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  45. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  46. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  47. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  49. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  50. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  51. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  52. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  53. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  54. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  57. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  58. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  59. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  60. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  61. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  62. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  63. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  64. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  65. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  66. package/dist/components/ui/form/ComboboxField.mjs +1 -1
  67. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  68. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  69. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  70. package/dist/components/ui/form/FormField.mjs.map +1 -1
  71. package/dist/components/ui/form/Input.mjs.map +1 -1
  72. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  73. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  74. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  75. package/dist/components/ui/form/Select.mjs +1 -1
  76. package/dist/components/ui/form/Select.mjs.map +1 -1
  77. package/dist/components/ui/form/SelectField.mjs +1 -1
  78. package/dist/components/ui/form/SelectField.mjs.map +1 -1
  79. package/dist/components/ui/form/Switch.mjs.map +1 -1
  80. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  82. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  83. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  84. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  85. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  86. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  87. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  88. package/dist/hooks/useDebounce.mjs.map +1 -1
  89. package/dist/hooks/useDebounceState.mjs.map +1 -1
  90. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  91. package/dist/index.mjs.map +1 -1
  92. package/dist/infra/utils/clsx.mjs.map +1 -1
  93. package/dist/infra/utils/date.mjs.map +1 -1
  94. package/dist/infra/utils/parser.mjs.map +1 -1
  95. package/dist/infra/utils/percentage.mjs.map +1 -1
  96. package/dist/middleware.mjs.map +1 -1
  97. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  98. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  99. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  100. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  101. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  102. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  103. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  104. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  105. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  106. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  107. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  108. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  109. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  110. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  111. package/dist/modules/auth/hooks/useManagementPermissions.mjs.map +1 -1
  112. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  113. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  114. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  115. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  116. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  117. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  118. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  119. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  120. package/dist/modules/cards/types.mjs.map +1 -1
  121. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  122. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  123. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  124. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  125. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  126. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  127. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  128. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  129. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  130. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  131. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  132. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  133. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  134. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  135. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  136. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  137. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  138. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  139. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  140. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  141. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  142. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  143. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  144. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  145. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  146. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  147. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  148. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  149. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  150. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  151. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  152. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  153. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  154. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  155. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  156. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  157. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  158. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  159. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  160. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  161. package/dist/store/useAccountModals.mjs.map +1 -1
  162. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  163. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  164. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  165. package/dist/store/useModalManager.mjs.map +1 -1
  166. package/dist/utils/constants/br-states.mjs.map +1 -1
  167. package/dist/utils/countries.mjs.map +1 -1
  168. package/dist/utils/safeServerAction.mjs.map +1 -1
  169. package/dist/utils/withAction.mjs.map +1 -1
  170. package/package.json +89 -89
  171. package/src/components/account/AccountModals.tsx +17 -17
  172. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  173. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  174. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  175. package/src/components/account/DeleteAccountModal.tsx +130 -130
  176. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  177. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  178. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  179. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  180. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  181. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  182. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  183. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  184. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  185. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  186. package/src/components/account/sections/SecuritySection.tsx +46 -46
  187. package/src/components/embeds/CrispEmbed.tsx +101 -101
  188. package/src/components/embeds/FrillEmbed.tsx +119 -119
  189. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  190. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  191. package/src/components/layouts/AppNavBar.tsx +46 -46
  192. package/src/components/layouts/CollapsibleSidebar.tsx +67 -67
  193. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  194. package/src/components/layouts/NavBar.tsx +172 -172
  195. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  196. package/src/components/layouts/ProfilePopover.tsx +178 -170
  197. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  198. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  199. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  200. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  201. package/src/components/modals/ModalManager.tsx +29 -29
  202. package/src/components/modals/Modals.tsx +26 -26
  203. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  204. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  205. package/src/components/navigation/CancelledSubscriptionBanner.tsx +60 -60
  206. package/src/components/navigation/NavItemsContext.ts +20 -20
  207. package/src/components/navigation/ProjectSelectorPopover.tsx +160 -160
  208. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  209. package/src/components/navigation/subcomponents/ProjectSelector.tsx +160 -160
  210. package/src/components/pages/NotFoundPage.tsx +50 -50
  211. package/src/components/pages/notifications/Notifications.tsx +160 -160
  212. package/src/components/ui/buttons/Button.tsx +57 -57
  213. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  214. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  215. package/src/components/ui/data-display/Accordion.tsx +81 -81
  216. package/src/components/ui/data-display/Badge.tsx +47 -47
  217. package/src/components/ui/data-display/Card.tsx +93 -93
  218. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  219. package/src/components/ui/data-display/CardItem.tsx +75 -75
  220. package/src/components/ui/data-display/Pagination.tsx +126 -126
  221. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  222. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  223. package/src/components/ui/data-display/Separator.tsx +29 -29
  224. package/src/components/ui/data-display/Table.tsx +117 -117
  225. package/src/components/ui/data-display/Tabs.tsx +67 -67
  226. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  227. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  228. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  229. package/src/components/ui/feedback/Progress.tsx +40 -40
  230. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  231. package/src/components/ui/feedback/Toast.tsx +101 -101
  232. package/src/components/ui/form/Calendar.tsx +228 -228
  233. package/src/components/ui/form/Checkbox.tsx +31 -31
  234. package/src/components/ui/form/ComboboxField.tsx +154 -154
  235. package/src/components/ui/form/DatePicker.tsx +97 -97
  236. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  237. package/src/components/ui/form/FormField.tsx +131 -131
  238. package/src/components/ui/form/Input.tsx +20 -20
  239. package/src/components/ui/form/InputOtp.tsx +80 -80
  240. package/src/components/ui/form/PhoneInput.tsx +208 -208
  241. package/src/components/ui/form/RadioGroup.tsx +45 -45
  242. package/src/components/ui/form/Select.tsx +200 -200
  243. package/src/components/ui/form/SelectField.tsx +1 -1
  244. package/src/components/ui/form/Switch.tsx +32 -32
  245. package/src/components/ui/form/Textarea.tsx +19 -19
  246. package/src/components/ui/overlay/Command.tsx +185 -185
  247. package/src/components/ui/overlay/Dialog.tsx +151 -151
  248. package/src/components/ui/overlay/Popover.tsx +49 -49
  249. package/src/components/ui/overlay/Sheet.tsx +166 -166
  250. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  251. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  252. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  253. package/src/hooks/useDebounce.ts +26 -26
  254. package/src/hooks/useDebounceState.ts +11 -11
  255. package/src/hooks/useDebouncedEffect.ts +69 -69
  256. package/src/index.ts +391 -391
  257. package/src/infra/utils/clsx.ts +6 -6
  258. package/src/infra/utils/date.ts +7 -7
  259. package/src/infra/utils/parser.ts +52 -52
  260. package/src/infra/utils/percentage.ts +42 -42
  261. package/src/middleware.ts +4 -4
  262. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  263. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  264. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  265. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  266. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  267. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  268. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  269. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  270. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  271. package/src/modules/accounts/services/account.service.ts +239 -239
  272. package/src/modules/accounts/types.ts +225 -225
  273. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  274. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  275. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  276. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  277. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  278. package/src/modules/auth/types/management-permission.type.ts +7 -7
  279. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  280. package/src/modules/auth/utils/assert-management-subscription.ts +27 -27
  281. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  282. package/src/modules/cards/actions/create-card.action.ts +9 -9
  283. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  284. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  285. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  286. package/src/modules/cards/services/cards.service.ts +51 -51
  287. package/src/modules/cards/types.ts +32 -32
  288. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  289. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  290. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  291. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  292. package/src/modules/plans/services/plans.service.ts +36 -36
  293. package/src/modules/plans/types/plan.type.ts +21 -21
  294. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  295. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  296. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  297. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  298. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  299. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  300. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  301. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  302. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  303. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  304. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  305. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  306. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  307. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  308. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  309. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  310. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  311. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  312. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  313. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  314. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  315. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  316. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  317. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  318. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  319. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  320. package/src/modules/users/action/list-messages.action.ts +12 -12
  321. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  322. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  323. package/src/modules/users/hooks/messages.hook.ts +60 -60
  324. package/src/modules/users/services/messages.service.ts +48 -48
  325. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  326. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  327. package/src/modules/whitelabel/schema.ts +84 -84
  328. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  329. package/src/providers/whitelabel.provider.tsx +54 -54
  330. package/src/store/useAccountModals.ts +55 -55
  331. package/src/store/useBuyCreditsModal.ts +21 -21
  332. package/src/store/useDesktopSidebarStore.ts +47 -47
  333. package/src/store/useMdSidebarStore.ts +34 -34
  334. package/src/store/useModalManager.ts +104 -104
  335. package/src/utils/constants/br-states.ts +29 -29
  336. package/src/utils/countries.ts +224 -224
  337. package/src/utils/safeServerAction.ts +21 -21
  338. 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,27 +1,27 @@
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 (hasSubscriptionExpired(subscription?.date_due)) {
21
- throw new ApiError(
22
- 'Sua assinatura está vencida. Assine um novo plano para continuar.',
23
- 'SUBSCRIPTION_EXPIRED',
24
- 403
25
- );
26
- }
27
- }
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 (hasSubscriptionExpired(subscription?.date_due)) {
21
+ throw new ApiError(
22
+ 'Sua assinatura está vencida. Assine um novo plano para continuar.',
23
+ 'SUBSCRIPTION_EXPIRED',
24
+ 403
25
+ );
26
+ }
27
+ }
@@ -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
+ }
@@ -1,51 +1,51 @@
1
- import 'server-only';
2
-
3
- import { api } from '../../../infra/api/client';
4
- import { ApiError, ApiPaginatedActionResult, PaginatedSuccessResult, SuccessResult } from '../../../infra/api/types';
5
- import { buildQueryParams } from '../../../infra/utils/params';
6
- import { getUserContext } from '../../auth/utils/get-user-context';
7
- import { Card, CardSchema, CreateCardRequest } from '../types';
8
-
9
- class CardsService {
10
- async listCards(): Promise<PaginatedSuccessResult<Card>> {
11
- const { id_account } = await getUserContext();
12
-
13
- const query = buildQueryParams({ id_account });
14
- const response = await api.apps.get<ApiPaginatedActionResult<Card>>(
15
- `/accounts/${id_account}/cards?${query}`
16
- );
17
-
18
- if (response.status === 0) {
19
- throw new ApiError(
20
- response.message || 'Erro ao listar cartões',
21
- 'LIST_CARDS_FAILED',
22
- 400
23
- );
24
- }
25
-
26
- const data = response.data.map((item) => CardSchema.parse(item));
27
-
28
- return { data, total: response.total, success: true };
29
- }
30
- async createCard(data: CreateCardRequest): Promise<SuccessResult<Card>> {
31
- const { id_account } = await getUserContext();
32
-
33
- const response = await api.apps.post<ApiPaginatedActionResult<Card>>(
34
- `/accounts/${id_account}/cards`,
35
- data
36
- );
37
-
38
- if (response.status === 0) {
39
- throw new ApiError(response.message || 'Erro ao criar cartão', 'CREATE_CARD_FAILED', 400);
40
- }
41
-
42
- const cardData = CardSchema.parse(response.data[0]);
43
-
44
- return {
45
- success: true,
46
- data: cardData,
47
- } satisfies SuccessResult<Card>;
48
- }
49
- }
50
-
51
- export const cardsService = new CardsService();
1
+ import 'server-only';
2
+
3
+ import { api } from '../../../infra/api/client';
4
+ import { ApiError, ApiPaginatedActionResult, PaginatedSuccessResult, SuccessResult } from '../../../infra/api/types';
5
+ import { buildQueryParams } from '../../../infra/utils/params';
6
+ import { getUserContext } from '../../auth/utils/get-user-context';
7
+ import { Card, CardSchema, CreateCardRequest } from '../types';
8
+
9
+ class CardsService {
10
+ async listCards(): Promise<PaginatedSuccessResult<Card>> {
11
+ const { id_account } = await getUserContext();
12
+
13
+ const query = buildQueryParams({ id_account });
14
+ const response = await api.apps.get<ApiPaginatedActionResult<Card>>(
15
+ `/accounts/${id_account}/cards?${query}`
16
+ );
17
+
18
+ if (response.status === 0) {
19
+ throw new ApiError(
20
+ response.message || 'Erro ao listar cartões',
21
+ 'LIST_CARDS_FAILED',
22
+ 400
23
+ );
24
+ }
25
+
26
+ const data = response.data.map((item) => CardSchema.parse(item));
27
+
28
+ return { data, total: response.total, success: true };
29
+ }
30
+ async createCard(data: CreateCardRequest): Promise<SuccessResult<Card>> {
31
+ const { id_account } = await getUserContext();
32
+
33
+ const response = await api.apps.post<ApiPaginatedActionResult<Card>>(
34
+ `/accounts/${id_account}/cards`,
35
+ data
36
+ );
37
+
38
+ if (response.status === 0) {
39
+ throw new ApiError(response.message || 'Erro ao criar cartão', 'CREATE_CARD_FAILED', 400);
40
+ }
41
+
42
+ const cardData = CardSchema.parse(response.data[0]);
43
+
44
+ return {
45
+ success: true,
46
+ data: cardData,
47
+ } satisfies SuccessResult<Card>;
48
+ }
49
+ }
50
+
51
+ export const cardsService = new CardsService();
@@ -1,32 +1,32 @@
1
- import z from 'zod';
2
-
3
- export const CardSchema = z.object({
4
- id: z.union([z.number(), z.string()]),
5
- id_wl: z.number().optional(),
6
- id_account: z.union([z.number(), z.string()]).optional(),
7
- id_gateway: z.union([z.number(), z.string()]).optional(),
8
- gateway_account: z.string().optional(),
9
- gateway_card: z.string().optional(),
10
- brand: z.string(),
11
- name: z.string(),
12
- number: z.string(),
13
- date: z.string().optional(),
14
- deleted: z
15
- .number()
16
- .transform((val) => val === 1)
17
- .optional()
18
- .default(false),
19
- is_default: z.boolean().optional().default(false),
20
- datetime_add: z.union([z.date(), z.coerce.date()]).nullable().optional(),
21
- datetime_alt: z.union([z.date(), z.coerce.date()]).nullable().optional(),
22
- datetime_del: z.union([z.date(), z.coerce.date()]).nullable().optional(),
23
- });
24
-
25
- export type Card = z.infer<typeof CardSchema>;
26
-
27
- export const CreateCardRequestSchema = z.object({
28
- payment_method_id: z.string().min(1, 'payment_method_id é obrigatório'),
29
- set_default: z.boolean().optional(),
30
- });
31
-
32
- export type CreateCardRequest = z.infer<typeof CreateCardRequestSchema>;
1
+ import z from 'zod';
2
+
3
+ export const CardSchema = z.object({
4
+ id: z.union([z.number(), z.string()]),
5
+ id_wl: z.number().optional(),
6
+ id_account: z.union([z.number(), z.string()]).optional(),
7
+ id_gateway: z.union([z.number(), z.string()]).optional(),
8
+ gateway_account: z.string().optional(),
9
+ gateway_card: z.string().optional(),
10
+ brand: z.string(),
11
+ name: z.string(),
12
+ number: z.string(),
13
+ date: z.string().optional(),
14
+ deleted: z
15
+ .number()
16
+ .transform((val) => val === 1)
17
+ .optional()
18
+ .default(false),
19
+ is_default: z.boolean().optional().default(false),
20
+ datetime_add: z.union([z.date(), z.coerce.date()]).nullable().optional(),
21
+ datetime_alt: z.union([z.date(), z.coerce.date()]).nullable().optional(),
22
+ datetime_del: z.union([z.date(), z.coerce.date()]).nullable().optional(),
23
+ });
24
+
25
+ export type Card = z.infer<typeof CardSchema>;
26
+
27
+ export const CreateCardRequestSchema = z.object({
28
+ payment_method_id: z.string().min(1, 'payment_method_id é obrigatório'),
29
+ set_default: z.boolean().optional(),
30
+ });
31
+
32
+ export type CreateCardRequest = z.infer<typeof CreateCardRequestSchema>;
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { iaCreditsService } from '../services/ia-credits.service';
5
-
6
- export async function listIaCreditsAction(subscriptionId: number | string) {
7
- return safeServerAction(() => iaCreditsService.listOperations(subscriptionId));
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { iaCreditsService } from '../services/ia-credits.service';
5
+
6
+ export async function listIaCreditsAction(subscriptionId: number | string) {
7
+ return safeServerAction(() => iaCreditsService.listOperations(subscriptionId));
8
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { plansService } from '../services/plans.service';
5
-
6
- export async function findPlanByIdAction(idPlan: number | string) {
7
- return safeServerAction(() => plansService.findById(idPlan));
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { plansService } from '../services/plans.service';
5
+
6
+ export async function findPlanByIdAction(idPlan: number | string) {
7
+ return safeServerAction(() => plansService.findById(idPlan));
8
+ }