@greatapps/common 1.1.380 → 1.1.382

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 (345) 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.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/ModalManager.mjs.map +1 -1
  33. package/dist/components/modals/Modals.mjs.map +1 -1
  34. package/dist/components/modals/cards/AddCardModal.mjs.map +1 -1
  35. package/dist/components/modals/cards/CardFormFields.mjs.map +1 -1
  36. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  37. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  38. package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
  39. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  40. package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
  41. package/dist/components/pages/NotFoundPage.mjs.map +1 -1
  42. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  43. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  44. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  45. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  46. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  47. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  48. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  49. package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
  50. package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
  51. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  52. package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
  53. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  54. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  55. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  56. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  57. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  58. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  59. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  60. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  61. package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
  62. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  63. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  64. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  65. package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
  66. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  67. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  68. package/dist/components/ui/form/FormField.mjs.map +1 -1
  69. package/dist/components/ui/form/Input.mjs.map +1 -1
  70. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  71. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  72. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  73. package/dist/components/ui/form/Select.mjs +1 -1
  74. package/dist/components/ui/form/Select.mjs.map +1 -1
  75. package/dist/components/ui/form/Switch.mjs.map +1 -1
  76. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  77. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  78. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  79. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  80. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  81. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  82. package/dist/components/widgets/notifications/NotificationCard.mjs.map +1 -1
  83. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  84. package/dist/hooks/useDebounce.mjs.map +1 -1
  85. package/dist/hooks/useDebounceState.mjs.map +1 -1
  86. package/dist/hooks/useDebouncedEffect.mjs.map +1 -1
  87. package/dist/index.mjs.map +1 -1
  88. package/dist/infra/utils/clsx.mjs.map +1 -1
  89. package/dist/infra/utils/date.mjs.map +1 -1
  90. package/dist/infra/utils/parser.mjs.map +1 -1
  91. package/dist/infra/utils/percentage.mjs.map +1 -1
  92. package/dist/middleware.mjs.map +1 -1
  93. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  94. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  95. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  96. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  97. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  98. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  99. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  100. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  101. package/dist/modules/accounts/hooks/useViaCep.mjs.map +1 -1
  102. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  103. package/dist/modules/accounts/services/two-factor.service.mjs +3 -2
  104. package/dist/modules/accounts/services/two-factor.service.mjs.map +1 -1
  105. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
  106. package/dist/modules/auth/actions/verify-two-factor.action.mjs +2 -2
  107. package/dist/modules/auth/actions/verify-two-factor.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/hooks/useUserQuery.mjs +2 -2
  113. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -1
  114. package/dist/modules/auth/services/auth.service.mjs +3 -2
  115. package/dist/modules/auth/services/auth.service.mjs.map +1 -1
  116. package/dist/modules/auth/utils/assert-management-permission.mjs.map +1 -1
  117. package/dist/modules/auth/utils/assert-management-subscription.mjs.map +1 -1
  118. package/dist/modules/auth/utils/build-wl-override.mjs.map +1 -1
  119. package/dist/modules/cards/actions/create-card.action.mjs.map +1 -1
  120. package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
  121. package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
  122. package/dist/modules/cards/hooks/create-card.hook.mjs.map +1 -1
  123. package/dist/modules/cards/services/cards.service.mjs.map +1 -1
  124. package/dist/modules/cards/types.mjs.map +1 -1
  125. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  126. package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
  127. package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
  128. package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
  129. package/dist/modules/plans/services/plans.service.mjs.map +1 -1
  130. package/dist/modules/plans/types/plan.type.mjs.map +1 -1
  131. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  132. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  133. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  134. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  135. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  136. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  137. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  138. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  139. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  140. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  141. package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
  142. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  143. package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
  144. package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
  145. package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
  146. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  147. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  148. package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
  149. package/dist/modules/subscriptions/hooks/use-cancelled-subscription-guard.mjs.map +1 -1
  150. package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
  151. package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
  152. package/dist/modules/subscriptions/utils/has-subscription-expired.mjs.map +1 -1
  153. package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
  154. package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
  155. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  156. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  157. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  158. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  159. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  160. package/dist/modules/users/services/messages.service.mjs.map +1 -1
  161. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  162. package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
  163. package/dist/modules/whitelabel/utils/normalize-hostname.mjs.map +1 -1
  164. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  165. package/dist/store/useAccountModals.mjs.map +1 -1
  166. package/dist/store/useBuyCreditsModal.mjs.map +1 -1
  167. package/dist/store/useDesktopSidebarStore.mjs.map +1 -1
  168. package/dist/store/useMdSidebarStore.mjs.map +1 -1
  169. package/dist/store/useModalManager.mjs.map +1 -1
  170. package/dist/utils/constants/br-states.mjs.map +1 -1
  171. package/dist/utils/countries.mjs.map +1 -1
  172. package/dist/utils/safeServerAction.mjs.map +1 -1
  173. package/dist/utils/withAction.mjs.map +1 -1
  174. package/package.json +89 -89
  175. package/src/components/account/AccountModals.tsx +17 -17
  176. package/src/components/account/ConfigurationsMyAccountModal.tsx +146 -146
  177. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  178. package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
  179. package/src/components/account/DeleteAccountModal.tsx +130 -130
  180. package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
  181. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  182. package/src/components/account/TwoFactorAuthModal.tsx +215 -215
  183. package/src/components/account/hooks/useChangePhoneForm.tsx +107 -107
  184. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  185. package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
  186. package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
  187. package/src/components/account/sections/ChangePhoneModal.tsx +245 -245
  188. package/src/components/account/sections/MyProfileSection.tsx +327 -327
  189. package/src/components/account/sections/PreferencesSection.tsx +248 -248
  190. package/src/components/account/sections/SecuritySection.tsx +46 -46
  191. package/src/components/embeds/CrispEmbed.tsx +101 -101
  192. package/src/components/embeds/FrillEmbed.tsx +119 -119
  193. package/src/components/handlers/SearchParamsHandler.tsx +61 -61
  194. package/src/components/layouts/AppMobileNavBar.tsx +118 -118
  195. package/src/components/layouts/AppNavBar.tsx +46 -46
  196. package/src/components/layouts/CollapsibleSidebar.tsx +67 -67
  197. package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
  198. package/src/components/layouts/NavBar.tsx +172 -172
  199. package/src/components/layouts/NotificationsPopover.tsx +115 -115
  200. package/src/components/layouts/ProfilePopover.tsx +174 -174
  201. package/src/components/layouts/SideBarNavigation.tsx +62 -62
  202. package/src/components/layouts/UsersSelectorPopover.tsx +234 -234
  203. package/src/components/layouts/WhitelabelCodes.tsx +59 -59
  204. package/src/components/modals/BuyCreditsModal.tsx +314 -314
  205. package/src/components/modals/ModalManager.tsx +29 -29
  206. package/src/components/modals/Modals.tsx +26 -26
  207. package/src/components/modals/cards/AddCardModal.tsx +260 -260
  208. package/src/components/modals/cards/CardFormFields.tsx +294 -294
  209. package/src/components/navigation/CancelledSubscriptionBanner.tsx +60 -60
  210. package/src/components/navigation/NavItemsContext.ts +20 -20
  211. package/src/components/navigation/ProjectSelectorPopover.tsx +194 -194
  212. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  213. package/src/components/navigation/subcomponents/ProjectSelector.tsx +190 -190
  214. package/src/components/pages/NotFoundPage.tsx +67 -67
  215. package/src/components/pages/notifications/Notifications.tsx +160 -160
  216. package/src/components/ui/buttons/Button.tsx +57 -57
  217. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  218. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  219. package/src/components/ui/data-display/Accordion.tsx +81 -81
  220. package/src/components/ui/data-display/Badge.tsx +47 -47
  221. package/src/components/ui/data-display/Card.tsx +93 -93
  222. package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
  223. package/src/components/ui/data-display/CardItem.tsx +75 -75
  224. package/src/components/ui/data-display/Pagination.tsx +126 -126
  225. package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
  226. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  227. package/src/components/ui/data-display/Separator.tsx +29 -29
  228. package/src/components/ui/data-display/Table.tsx +117 -117
  229. package/src/components/ui/data-display/Tabs.tsx +67 -67
  230. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  231. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  232. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  233. package/src/components/ui/feedback/Progress.tsx +40 -40
  234. package/src/components/ui/feedback/Skeleton.tsx +5 -5
  235. package/src/components/ui/feedback/Toast.tsx +101 -101
  236. package/src/components/ui/form/Calendar.tsx +228 -228
  237. package/src/components/ui/form/Checkbox.tsx +31 -31
  238. package/src/components/ui/form/ComboboxField.tsx +154 -154
  239. package/src/components/ui/form/DatePicker.tsx +97 -97
  240. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  241. package/src/components/ui/form/FormField.tsx +131 -131
  242. package/src/components/ui/form/Input.tsx +20 -20
  243. package/src/components/ui/form/InputOtp.tsx +80 -80
  244. package/src/components/ui/form/PhoneInput.tsx +208 -208
  245. package/src/components/ui/form/RadioGroup.tsx +45 -45
  246. package/src/components/ui/form/Select.tsx +200 -200
  247. package/src/components/ui/form/Switch.tsx +32 -32
  248. package/src/components/ui/form/Textarea.tsx +19 -19
  249. package/src/components/ui/overlay/Command.tsx +185 -185
  250. package/src/components/ui/overlay/Dialog.tsx +151 -151
  251. package/src/components/ui/overlay/Popover.tsx +49 -49
  252. package/src/components/ui/overlay/Sheet.tsx +166 -166
  253. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  254. package/src/components/widgets/notifications/NotificationCard.tsx +68 -68
  255. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  256. package/src/hooks/useDebounce.ts +26 -26
  257. package/src/hooks/useDebounceState.ts +11 -11
  258. package/src/hooks/useDebouncedEffect.ts +69 -69
  259. package/src/index.ts +391 -391
  260. package/src/infra/utils/clsx.ts +6 -6
  261. package/src/infra/utils/date.ts +7 -7
  262. package/src/infra/utils/parser.ts +52 -52
  263. package/src/infra/utils/percentage.ts +42 -42
  264. package/src/middleware.ts +4 -4
  265. package/src/modules/accounts/actions/account-management.action.ts +107 -107
  266. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  267. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  268. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  269. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  270. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  271. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  272. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  273. package/src/modules/accounts/hooks/useViaCep.ts +25 -25
  274. package/src/modules/accounts/services/account.service.ts +239 -239
  275. package/src/modules/accounts/services/two-factor.service.ts +3 -2
  276. package/src/modules/accounts/types.ts +225 -225
  277. package/src/modules/auth/actions/validate-session.action.ts +56 -56
  278. package/src/modules/auth/actions/verify-two-factor.action.ts +2 -2
  279. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  280. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  281. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  282. package/src/modules/auth/hooks/useManagementPermissions.ts +45 -45
  283. package/src/modules/auth/hooks/useUserQuery.ts +2 -2
  284. package/src/modules/auth/services/auth.service.ts +3 -1
  285. package/src/modules/auth/types/management-permission.type.ts +7 -7
  286. package/src/modules/auth/utils/assert-management-permission.ts +46 -46
  287. package/src/modules/auth/utils/assert-management-subscription.ts +27 -27
  288. package/src/modules/auth/utils/build-wl-override.ts +43 -43
  289. package/src/modules/cards/actions/create-card.action.ts +9 -9
  290. package/src/modules/cards/actions/list-cards.action.ts +8 -8
  291. package/src/modules/cards/hooks/cards.hook.ts +14 -14
  292. package/src/modules/cards/hooks/create-card.hook.ts +18 -18
  293. package/src/modules/cards/services/cards.service.ts +51 -51
  294. package/src/modules/cards/types.ts +32 -32
  295. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  296. package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
  297. package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
  298. package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
  299. package/src/modules/plans/services/plans.service.ts +36 -36
  300. package/src/modules/plans/types/plan.type.ts +21 -21
  301. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  302. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  303. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  304. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  305. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  306. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  307. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  308. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  309. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  310. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  311. package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
  312. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  313. package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +14 -14
  314. package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
  315. package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
  316. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  317. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
  318. package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
  319. package/src/modules/subscriptions/hooks/use-cancelled-subscription-guard.ts +39 -39
  320. package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
  321. package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
  322. package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
  323. package/src/modules/subscriptions/utils/has-subscription-expired.ts +8 -8
  324. package/src/modules/subscriptions/utils/periodicity.ts +52 -52
  325. package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
  326. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  327. package/src/modules/users/action/list-messages.action.ts +12 -12
  328. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  329. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  330. package/src/modules/users/hooks/messages.hook.ts +60 -60
  331. package/src/modules/users/services/messages.service.ts +48 -48
  332. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  333. package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
  334. package/src/modules/whitelabel/schema.ts +84 -84
  335. package/src/modules/whitelabel/utils/normalize-hostname.ts +26 -26
  336. package/src/providers/whitelabel.provider.tsx +54 -54
  337. package/src/store/useAccountModals.ts +55 -55
  338. package/src/store/useBuyCreditsModal.ts +21 -21
  339. package/src/store/useDesktopSidebarStore.ts +47 -47
  340. package/src/store/useMdSidebarStore.ts +34 -34
  341. package/src/store/useModalManager.ts +104 -104
  342. package/src/utils/constants/br-states.ts +29 -29
  343. package/src/utils/countries.ts +224 -224
  344. package/src/utils/safeServerAction.ts +21 -21
  345. 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
+ }
@@ -43,9 +43,9 @@ export function useTwoFactorVerify() {
43
43
  const queryClient = useQueryClient();
44
44
 
45
45
  return useMutation({
46
- mutationFn: async ({ cookie, code }: { cookie: string; code: string }) => {
46
+ mutationFn: async ({ cookie, code, window }: { cookie: string; code: string; window?: number }) => {
47
47
  const { verifyTwoFactorAction } = await import('../actions/verify-two-factor.action');
48
- return withAction(() => verifyTwoFactorAction(cookie, code))();
48
+ return withAction(() => verifyTwoFactorAction(cookie, code, window))();
49
49
  },
50
50
  onSuccess: () => {
51
51
  queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY });
@@ -119,6 +119,7 @@ class AuthService {
119
119
  cookie: string,
120
120
  code: string,
121
121
  clientInfo: ClientInfo,
122
+ options?: { window?: number },
122
123
  ): Promise<TwoFactorResponse> {
123
124
  const payload: TwoFactorRequest = {
124
125
  location: clientInfo.location,
@@ -129,8 +130,9 @@ class AuthService {
129
130
  code,
130
131
  };
131
132
 
133
+ const endpoint = options?.window !== undefined ? `/auth/code?window=${options.window}` : '/auth/code';
132
134
  const response = await api.apps.post<TwoFactorApiResponse>(
133
- "/auth/code",
135
+ endpoint,
134
136
  payload,
135
137
  );
136
138
 
@@ -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>;