@riligar/auth-react 1.33.0 → 1.35.0

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.
package/dist/index.esm.js CHANGED
@@ -3,9 +3,9 @@ import { useMemo, useEffect, createContext, useState, useRef } from 'react';
3
3
  import { useShallow } from 'zustand/react/shallow';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import { Navigate, Outlet, useNavigate } from 'react-router-dom';
6
- import { Modal, Stack, Text, Image, Title, Paper, TextInput, PasswordInput, Anchor, Button, Divider, Group, Center, Loader, Box, Avatar, Collapse, FileButton, Tooltip, ThemeIcon, Badge } from '@mantine/core';
6
+ import { Modal, Stack, Text, Image, Title, Paper, TextInput, PasswordInput, Anchor, Button, Divider, Group, Center, Loader, Box, Avatar, Collapse, FileButton, Tooltip, ThemeIcon, Badge, rem, ActionIcon } from '@mantine/core';
7
7
  import { useForm } from '@mantine/form';
8
- import { IconMail, IconLock, IconArrowRight, IconBrandGoogle, IconBrandGithub, IconUser, IconSend, IconCheck, IconX, IconRefresh, IconPhoto, IconTrash, IconPencil, IconShield, IconKey, IconDevices, IconDeviceMobile, IconLogout, IconUserCircle } from '@tabler/icons-react';
8
+ import { IconMail, IconLock, IconArrowRight, IconBrandGoogle, IconBrandGithub, IconUser, IconSend, IconCheck, IconX, IconRefresh, IconPhoto, IconTrash, IconPencil, IconShield, IconKey, IconDevices, IconDeviceMobile, IconLogout, IconUserCircle, IconSettings, IconCreditCard, IconShieldCheck } from '@tabler/icons-react';
9
9
 
10
10
  // Config - API Base URL fixa para o serviço de autenticação
11
11
  let API_BASE = 'https://manager.myauth.click';
@@ -366,35 +366,27 @@ const useAuthStore = create((set, get) => ({
366
366
  },
367
367
  /* Init ao montar o Provider */
368
368
  init: async () => {
369
- const {
370
- fetchApplicationInfo
371
- } = get();
372
369
  try {
373
- // Buscar application info primeiro (não bloqueia o init)
374
- // Apenas se não estiver em modo interno (dashboard)
375
- if (!isInternal()) {
376
- fetchApplicationInfo();
370
+ // Busca a sessão (que agora também traz applicationInfo)
371
+ const sessionData = await getSession();
372
+
373
+ // Se veio aplicação no redirecionamento/sessão, salva no store
374
+ if (sessionData?.application) {
375
+ set({
376
+ applicationInfo: sessionData.application
377
+ });
377
378
  }
378
379
  let user = null;
379
-
380
- // PRIMEIRO: Tenta buscar sessão do servidor (funciona com cookies)
381
- // Isso é essencial para Better Auth que usa session cookies
382
- try {
383
- const sessionData = await getSession();
384
- if (sessionData?.user) {
385
- user = sessionData.user;
386
- }
387
- if (sessionData?.session) {
388
- set({
389
- currentSession: sessionData.session
390
- });
391
- }
392
- } catch (sessionError) {
393
- // Se falhar (401), continua para verificar localStorage token
394
- console.log('[AuthStore] Server session not found, checking local token');
380
+ if (sessionData?.user) {
381
+ user = sessionData.user;
382
+ }
383
+ if (sessionData?.session) {
384
+ set({
385
+ currentSession: sessionData.session
386
+ });
395
387
  }
396
388
 
397
- // SEGUNDO: Se não encontrou sessão via cookies, verifica localStorage token (JWT)
389
+ // Se não encontrou sessão via cookies, verifica localStorage token (JWT)
398
390
  if (!user && isAuthenticated()) {
399
391
  user = getCurrentUser();
400
392
  }
@@ -2971,6 +2963,157 @@ function UserProfile({
2971
2963
  });
2972
2964
  }
2973
2965
 
2966
+ function UserInformation({
2967
+ user,
2968
+ signOut,
2969
+ onAccountClick,
2970
+ onBillingClick,
2971
+ accountLabel = 'Conta',
2972
+ billingLabel = 'Assinatura',
2973
+ padded = true,
2974
+ size = 'sm',
2975
+ style,
2976
+ ...others
2977
+ }) {
2978
+ if (!user) return null;
2979
+
2980
+ // Size mappings
2981
+ const avatarSizeMap = {
2982
+ sm: 32,
2983
+ md: 40,
2984
+ lg: 48
2985
+ };
2986
+ const fontSizeTitleMap = {
2987
+ sm: 'sm',
2988
+ md: 'md',
2989
+ lg: 'lg'
2990
+ };
2991
+ const fontSizeEmailMap = {
2992
+ sm: '10px',
2993
+ md: 'xs',
2994
+ lg: 'sm'
2995
+ };
2996
+ const btnSizeMap = {
2997
+ sm: 'xs',
2998
+ md: 'sm',
2999
+ lg: 'md'
3000
+ };
3001
+ const gapMap = {
3002
+ sm: 'xs',
3003
+ md: 'sm',
3004
+ lg: 'md'
3005
+ };
3006
+ const widthMap = {
3007
+ sm: 280,
3008
+ md: 320,
3009
+ lg: 400
3010
+ };
3011
+ const name = user.fullName || user.name || 'User';
3012
+ const email = user.primaryEmailAddress || user.email || '';
3013
+ const initials = name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2);
3014
+ return /*#__PURE__*/jsx(Box, {
3015
+ p: padded ? gapMap[size] : 0,
3016
+ w: widthMap[size],
3017
+ style: style,
3018
+ ...others,
3019
+ children: /*#__PURE__*/jsxs(Stack, {
3020
+ gap: gapMap[size],
3021
+ children: [/*#__PURE__*/jsxs(Group, {
3022
+ wrap: "nowrap",
3023
+ gap: "xs",
3024
+ children: [/*#__PURE__*/jsx(Avatar, {
3025
+ src: user.imageUrl || user.image,
3026
+ size: avatarSizeMap[size],
3027
+ radius: "xl",
3028
+ bg: "gray.1",
3029
+ c: "gray.6",
3030
+ styles: {
3031
+ placeholder: {
3032
+ fontSize: rem(avatarSizeMap[size] / 2.2),
3033
+ fontWeight: 600
3034
+ }
3035
+ },
3036
+ children: initials || 'CC'
3037
+ }), /*#__PURE__*/jsxs(Box, {
3038
+ style: {
3039
+ flex: 1,
3040
+ overflow: 'hidden'
3041
+ },
3042
+ children: [/*#__PURE__*/jsx(Text, {
3043
+ size: fontSizeTitleMap[size],
3044
+ fw: 700,
3045
+ truncate: "end",
3046
+ c: "dark.9",
3047
+ lh: 1.1,
3048
+ children: name
3049
+ }), /*#__PURE__*/jsx(Text, {
3050
+ size: fontSizeEmailMap[size],
3051
+ c: "gray.5",
3052
+ truncate: "end",
3053
+ lh: 1.1,
3054
+ children: email
3055
+ })]
3056
+ }), /*#__PURE__*/jsx(ActionIcon, {
3057
+ variant: "subtle",
3058
+ color: "gray.4",
3059
+ size: size,
3060
+ onClick: signOut,
3061
+ children: /*#__PURE__*/jsx(IconLogout, {
3062
+ size: avatarSizeMap[size] * 0.45
3063
+ })
3064
+ })]
3065
+ }), /*#__PURE__*/jsxs(Group, {
3066
+ gap: gapMap[size] === 'xs' ? 6 : 8,
3067
+ grow: true,
3068
+ children: [/*#__PURE__*/jsx(Button, {
3069
+ variant: "default",
3070
+ size: btnSizeMap[size],
3071
+ leftSection: /*#__PURE__*/jsx(IconSettings, {
3072
+ size: avatarSizeMap[size] * 0.45
3073
+ }),
3074
+ onClick: onAccountClick,
3075
+ fw: 700,
3076
+ fz: gapMap[size] === 'xs' ? "10px" : "xs",
3077
+ radius: "md",
3078
+ children: accountLabel
3079
+ }), /*#__PURE__*/jsx(Button, {
3080
+ variant: "default",
3081
+ size: btnSizeMap[size],
3082
+ leftSection: /*#__PURE__*/jsx(IconCreditCard, {
3083
+ size: avatarSizeMap[size] * 0.45
3084
+ }),
3085
+ onClick: onBillingClick,
3086
+ fw: 700,
3087
+ fz: gapMap[size] === 'xs' ? "10px" : "xs",
3088
+ radius: "md",
3089
+ children: billingLabel
3090
+ })]
3091
+ }), /*#__PURE__*/jsxs(Group, {
3092
+ justify: "center",
3093
+ gap: 4,
3094
+ opacity: 0.3,
3095
+ children: [/*#__PURE__*/jsx(Text, {
3096
+ size: "10px",
3097
+ c: "gray.6",
3098
+ fw: 600,
3099
+ children: "Secured by"
3100
+ }), /*#__PURE__*/jsxs(Group, {
3101
+ gap: 2,
3102
+ children: [/*#__PURE__*/jsx(IconShieldCheck, {
3103
+ size: 10,
3104
+ stroke: 2
3105
+ }), /*#__PURE__*/jsx(Text, {
3106
+ size: "10px",
3107
+ fw: 800,
3108
+ c: "dark.9",
3109
+ children: "Auth"
3110
+ })]
3111
+ })]
3112
+ })]
3113
+ })
3114
+ });
3115
+ }
3116
+
2974
3117
  /**
2975
3118
  * Renderiza children apenas quando o usuário está autenticado
2976
3119
  * Equivalente ao <SignedIn> do Clerk
@@ -3072,5 +3215,5 @@ function SignOutButton({
3072
3215
  });
3073
3216
  }
3074
3217
 
3075
- export { UserProfile as AccountModal, AuthCard, AuthLoaded, AuthLoading, AuthProvider, ForgotPassword, ForgotPassword as ForgotPasswordForm, MagicLink, MagicLinkCallback, MagicLink as MagicLinkForm, MagicLinkCallback as MagicLinkVerify, Protect, Protect as ProtectedRoute, ResetPassword, ResetPassword as ResetPasswordForm, SignIn, SignInButton, SignIn as SignInForm, SignOutButton, SignUp, SignUpButton, SignUp as SignUpForm, SignedIn, SignedOut, UserProfile, VerifyEmail, VerifyEmail as VerifyEmailCard, changeEmail, changePassword, configure, decodeJWT, forgotPassword, getApplicationInfo, getCurrentUser, getSession, isAuthenticated, isInternal, listSessions, refreshToken, resendVerification, resetPassword, revokeOtherSessions, revokeSession, sendMagicLink, signIn, signOut, signUp, socialRedirect, updateProfile, useApplicationLogo, useAuth, useAuthLoading, useAuthStore, useCheckToken, useEmailVerification, useMagicLink, usePasswordReset, useUser as useProfile, useSession, useSessions, useSignIn, useSignOut, useSignUp, useUser, verifyEmail, verifyMagicLink };
3218
+ export { UserProfile as AccountModal, AuthCard, AuthLoaded, AuthLoading, AuthProvider, ForgotPassword, ForgotPassword as ForgotPasswordForm, MagicLink, MagicLinkCallback, MagicLink as MagicLinkForm, MagicLinkCallback as MagicLinkVerify, Protect, Protect as ProtectedRoute, ResetPassword, ResetPassword as ResetPasswordForm, SignIn, SignInButton, SignIn as SignInForm, SignOutButton, SignUp, SignUpButton, SignUp as SignUpForm, SignedIn, SignedOut, UserInformation, UserProfile, VerifyEmail, VerifyEmail as VerifyEmailCard, changeEmail, changePassword, configure, decodeJWT, forgotPassword, getApplicationInfo, getCurrentUser, getSession, isAuthenticated, isInternal, listSessions, refreshToken, resendVerification, resetPassword, revokeOtherSessions, revokeSession, sendMagicLink, signIn, signOut, signUp, socialRedirect, updateProfile, useApplicationLogo, useAuth, useAuthLoading, useAuthStore, useCheckToken, useEmailVerification, useMagicLink, usePasswordReset, useUser as useProfile, useSession, useSessions, useSignIn, useSignOut, useSignUp, useUser, verifyEmail, verifyMagicLink };
3076
3219
  //# sourceMappingURL=index.esm.js.map