{"version":3,"sources":["core/context/modals/index.ts","core/utils/formatDate.ts","core/context/number/index.ts","components/Typography/styles.tsx","components/Typography/index.tsx","core/context/index.ts","core/context/address/index.ts","core/context/auth/hooks.ts","core/context/cards/index.ts","core/context/first-access/index.tsx","core/context/password/index.tsx","core/context/toast/index.tsx","core/context/toast/hooks.ts","core/context/usage/index.tsx","core/context/recharge/index.ts","core/interfaces/index.ts","core/validations/login.ts","core/validations/changePassword.ts","core/validations/recharge.ts","core/validations/createCard.ts","core/validations/recoverPassword.ts","core/validations/recoverPasswordEmail.ts","core/validations/firstAccessPersonalData.ts","core/validations/firstAccessToken.ts","core/validations/firstAccessNumber.ts","core/context/usage/hooks/useUsage.ts","core/context/usage/hooks/useUsageItems.ts","core/context/usage/hooks/useUsageUnlimited.ts","core/context/usage/hooks/useUsageStatus.ts","core/context/usage/hooks/useUsageDisplay.ts","core/context/usage/hooks/useUsageTranslatedName.ts","core/context/usage/hooks/useUsagePercentage.ts","core/context/usage/hooks/useUsageValues.ts","core/context/first-access/hooks/useValidateEmail.ts","core/context/first-access/hooks/useFirstAccess.ts","core/context/first-access/hooks/useCreateUser.ts","core/context/first-access/hooks/useResendSMS.ts","core/context/first-access/hooks/useValidateToken.ts","core/context/first-access/hooks/useCheckNumber.ts","core/context/number/hooks/useNumbers.ts","core/context/number/hooks/useCurrentNumber.ts","core/context/number/hooks/useCurrentMSISDN.ts","core/context/number/hooks/useNumbersStatus.ts","core/hooks/useShowPassword.ts","core/hooks/useStepper.tsx","core/context/recharge/errors.ts","core/context/modals/hooks/useModals.ts","core/context/password/hooks/useRecoverPassword.ts","core/index.ts","core/utils/formatCurrency.ts","core/utils/getNumberDetails.ts","core/utils/mask.ts","core/api/constants.ts","core/api/api.ts","hooks/useReactGA.tsx","hooks/useSentry.tsx","styles/themes/material-ui.ts","components/ToastContainer/components/Toast/index.tsx","components/ToastContainer/styles.ts","components/ToastContainer/index.tsx","assets/images/icons/phone.svg","components/Route/components/Loading/styles.ts","components/Route/components/Loading/index.tsx","components/Route/styles.ts","components/Route/index.tsx","routes/index.tsx","utils/AuthStorage.ts","app.tsx","reportWebVitals.ts","index.tsx","core/utils/usageFormat.ts","core/context/auth/index.tsx","core/utils/stringUtils.ts","routes/router.tsx","core/utils/formatNumber.ts","core/context/address/context.tsx","core/context/address/reducer.ts","core/context/modals/context.tsx","core/context/auth/reducer.ts","core/context/cards/context.tsx","core/context/cards/reducer.ts","core/utils/formatToPattern.ts","core/context/first-access/context.tsx","core/context/number/context.tsx","core/context/number/reducer.ts","core/context/toast/context.tsx","core/context/usage/context.tsx","core/context/usage/reducer.ts","core/context/recharge/context.tsx","core/context/recharge/reducer.ts","core/context/auth/storage.ts","core/context/auth/context.tsx","core/context/auth/interceptors.ts"],"names":["formatDate","date","options","pattern","dateString","Date","toString","formatOptions","locale","ptBR","onlyTimestamp","format","showTimestamp","Typography","styled","capitalize","weight","flex","props","theme","variant","textTransform","fontWeight","typography","fontWeightBold","fontWeightRegular","fontWeightMedium","fontWeightLight","children","rest","memo","useAuth","context","useContext","AuthContext","defaultValue","Error","useToast","ToastContext","toastContextDefaultValue","loginSchema","Yup","shape","email","required","password","oldPassword","newPassword","passwordConfirmation","oneOf","name","when","is","value","then","otherwise","number","test","validateBr","telefone","removeCountryCode","amount","ownerCard","cpf","card","id","cvv","cardValidator","isValid","exp","matches","expirationDate","cardNumber","addressIdValidation","recoverPasswordSchema","ownerPhone","ownerName","expiration","validate","billingName","uppercase","address","addressId","zip","street","city","state","neighborhood","complement","token","min","recoverPasswordEmailSchema","firstAccessPersonalDataSchema","firstName","lastName","firstAccessTokenSchema","code","terms","privacy","firstAccessNumberSchema","msisdn","useUsage","UsageContext","usageContextDefaultValue","useUsageItems","useMemo","usage","itens","useUsageUnlimited","type","endValueAccountCounter","initialAccountCounter","useUsageStatus","requestUsageStatus","useUsageDisplay","startDate","currentAccountCounter","unitsAccountCounter","useUsageOptions","translatedName","names","dados","sms","Object","keys","includes","toLowerCase","firstLetter","slice","toUpperCase","replace","v","useUsageTranslatedName","isUnlimited","usedPercent","freePercent","useUsagePercentage","usedValue","freeValue","useUsageValues","expiryDate","endDateFormatted","formattedUsedPercent","toFixed","formattedFreePercent","formattedUsedValue","timeConvert","formatBytes","formattedFreeValue","startLabel","endLabel","progressBarCurrent","progressBarMax","useValidateEmail","useState","valid","loading","message","status","setStatus","validateEmail","useCallback","a","prev","api","get","params","userName","response","data","available","useFirstAccess","FirstAccessContext","firstAccessContextDefaultValue","useCreateUser","setUserData","userData","setCurrentStep","REQUEST_STATUS_INITIAL","createUserStatus","createUser","user","REQUEST_STATUS_LOADING","newUser","removeSymbols","post","REQUEST_STATUS_SUCCESS","REQUEST_STATUS_ERROR","errorMessage","useResendSMS","remainingSeconds","setRemainingSeconds","canResend","useEffect","timer","setTimeout","clearTimeout","resendSMS","useValidateToken","validateTokenStatus","validateToken","timeout","useCheckNumber","checkNumberStatus","checkNumber","removeSpaces","CustomerDataDetails","registeredsc","useNumbers","NumbersContext","numbersContextDefaultValue","useCurrentNumber","currentNumber","useCurrentMSISDN","useNumbersStatus","requestNumbersStatus","useShowPassword","initialState","showPassword","setShowPassword","toggleShowPassword","StepperContext","createContext","undefined","Provider","Consumer","useModals","ModalsContext","modalsContextDefaultValue","useRecoverPassword","requestRecoverPasswordStatus","recoverPassword","credentials","useCreateNewPassword","createNewPassword","resetState","formatCurrency","showCurrencyPreffix","Number","getNumberDetails","formattedNumber","extractNumbers","ddd","parseInt","phoneNumber","error","success","axios","create","baseURL","process","responseType","useReactGA","useLayoutEffect","ReactGA","initialize","debug","testMode","useSentry","Sentry","dsn","materialTheme","createTheme","fontFamily","join","h3","h5","palette","primary","main","contrastText","secondary","warning","background","default","overrides","MuiButton","outlined","borderColor","color","containedPrimary","boxShadow","text","contained","responsiveFontSizes","ToastItem","title","removeToast","Snackbar","open","TransitionComponent","Fade","anchorOrigin","horizontal","vertical","elevation","severity","Container","div","display","flexDirection","ToastContainer","toasts","listToasts","map","e","Toast","height","justifyContent","alignItems","phoneAnimation","keyframes","transform","PhoneIcon","img","animation","getName","Loading","getProfile","src","phoneIcon","Main","Route","access","component","isAuthenticated","requestProfileStatus","requestTokenStatus","tokenRestored","routeTitle","redirectLink","HOME","LOGIN","to","Helmet","Home","loadable","Login","NotFound","RecoverPassword","Stores","Routes","path","exact","STORES","RECOVER_PASSWORD","authStorage","getItem","key","rawToken","localStorage","setItem","item","removeItem","GlobalStyles","App","StylesProvider","injectFirst","CssBaseline","storage","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById","bytes","decimals","k","dm","sizes","i","Math","floor","log","parseFloat","duration","seconds","minutes","addCountryCode","onlyNumbers","match","formatted","startsWith","concat","formatNumber","countryCode","baseValue","formatToPattern","formattedValue","addressesContextDefaultValue","AddressesContext","addressesInitialState","addresses","requestAddressesStatus","addressesReducer","action","payload","ModalsProvider","activeModal","setActiveModal","closeModal","openModal","authInitialState","authReducer","cardsContextDefaultValue","CardsContext","cardsInitialState","cards","requestCardsStatus","cardsReducer","mask","r","im","length","charAt","FirstAccessProvider","currentStep","reset","NumbersProvider","initialProps","useReducer","numbersReducer","numbersInitialState","dispatch","numbers","currentNumberIndex","setCurrentNumber","newNumber","numberIndex","findIndex","target","getNumbers","ToastProvider","setToasts","showToast","newToast","getTime","toast","UsageProvider","usageReducer","usageInitialState","currentMsisdn","getUsage","orderItems","items","networkIndex","ordered","filter","_","index","sort","b","nameA","nameB","updatedAt","rechargesContextDefaultValue","RechargesContext","rechargesInitialState","recharges","requestRechargesStatus","rechargeMeta","usedCard","rechargeResult","rechargesReducer","meta","AUTH_STORAGE_KEY","getToken","JSON","parse","setToken","stringify","clearToken","AuthProvider","signOut","headers","authorization","accessToken","signIn","base64","encode","restoreToken","defaults","interceptors","onLogout","onTokenChange","responseInterceptor","use","originalRequest","config","url","Promise","reject","refreshToken","setupInterceptors","eject"],"mappings":"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","file":"static/js/main.2bdbc163.chunk.js","sourcesContent":["export * from './context';\r\nexport * from './props';\r\nexport * from './hooks';\r\n","import { format } from 'date-fns';\nimport ptBR from 'date-fns/locale/pt-BR';\n\ninterface FormatDateOptions {\n showTimestamp?: boolean;\n onlyTimestamp?: boolean;\n}\n\n/**\n *\n * @param {*} date\n */\nexport function formatDate(date: string | Date, options?: FormatDateOptions) {\n let pattern = 'dd/MM/yyyy - hh:mm:ss';\n\n const dateString = new Date(date.toString());\n const formatOptions = {\n locale: ptBR,\n };\n if (!options) return format(dateString, pattern, formatOptions);\n if (options.onlyTimestamp) {\n pattern = 'hh:mm:ss';\n return format(dateString, pattern, formatOptions);\n }\n if (!options.showTimestamp) {\n pattern = 'dd/MM/yyyy';\n }\n return format(dateString, pattern, formatOptions);\n}\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n","import React from 'react';\nimport styled from 'styled-components';\nimport MuiTypography from '@material-ui/core/Typography';\nimport { TypographyProps } from './props';\n\nexport const Typography = styled(\n ({ capitalize, weight, flex, ...props }: TypographyProps) => (\n \n ),\n)(({ theme, capitalize, weight, variant, flex }) => {\n if (variant == 'inherit' || variant == 'srOnly') {\n return {\n textTransform: capitalize || 'none',\n flex,\n };\n }\n\n let { fontWeight } = theme.typography[variant || 'body1'];\n switch (weight) {\n case 'bold':\n fontWeight = theme.typography.fontWeightBold;\n break;\n case 'regular':\n fontWeight = theme.typography.fontWeightRegular;\n break;\n case 'medium':\n fontWeight = theme.typography.fontWeightMedium;\n break;\n case 'light':\n fontWeight = theme.typography.fontWeightLight;\n break;\n default:\n fontWeight = theme.typography[variant || 'body1'].fontWeight;\n break;\n }\n return {\n textTransform: capitalize || 'none',\n fontWeight,\n flex,\n };\n});\n","import React, { memo, FC } from 'react';\r\nimport { TypographyProps } from './props';\r\nimport * as Styled from './styles';\r\n\r\nconst Typography: FC = props => {\r\n const { children, ...rest } = props;\r\n\r\n return {children};\r\n};\r\n\r\nexport default memo(Typography);\r\n","export * from './address';\r\nexport * from './auth';\r\nexport * from './cards';\r\nexport * from './first-access';\r\nexport * from './number';\r\nexport * from './password';\r\nexport * from './toast';\r\nexport * from './usage';\r\nexport * from './modals';\r\nexport * from './recharge';\r\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n","import { useContext, useMemo } from 'react';\r\nimport { AuthContext, defaultValue } from './context';\r\nimport { AuthContextData } from './props';\r\n\r\nexport function useAuth(): AuthContextData {\r\n const context = useContext(AuthContext);\r\n\r\n if (!context || context == defaultValue) {\r\n throw new Error('useAuth must be used within a AuthProvider');\r\n }\r\n\r\n return context;\r\n}\r\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n","export * from './props';\r\nexport * from './hooks';\r\nexport * from './context';\r\n","export * from './props';\r\nexport * from './hooks';\r\n","export * from './context';\r\nexport * from './props';\r\nexport * from './hooks';\r\n","import { useMemo, useContext } from 'react';\r\nimport { ToastContext, toastContextDefaultValue } from './context';\r\n\r\nexport function useToast() {\r\n const context = useContext(ToastContext);\r\n\r\n if (!context || context == toastContextDefaultValue) {\r\n throw new Error('useToast must be used within a ToastProvider');\r\n }\r\n\r\n return context;\r\n}\r\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n","export * from './request';\nexport * from './token';\nexport * from './user';\nexport * from './recurrence';\n","import * as Yup from 'yup';\r\n\r\nexport const loginSchema = Yup.object().shape({\r\n email: Yup.string().email('Email inválido').required('Campo obrigatório'),\r\n password: Yup.string().required('Campo obrigatório'),\r\n});\r\n","import * as Yup from 'yup';\r\n\r\nexport const changePasswordSchema = Yup.object().shape({\r\n oldPassword: Yup.string().required('Campo obrigatório'),\r\n newPassword: Yup.string().required('Campo obrigatório'),\r\n passwordConfirmation: Yup.string()\r\n .oneOf([Yup.ref('newPassword')], 'Senhas não conferem')\r\n .required('Campo obrigatório'),\r\n});\r\n","import { validateBr } from '@b3coded/js-brasil';\r\nimport cardValidator from 'card-validator';\r\nimport * as Yup from 'yup';\r\nimport { removeCountryCode } from '../utils/formatNumber';\r\n\r\nexport const rechargeSchema = Yup.object().shape({\r\n name: Yup.string().when('card.id', {\r\n is: (value: string) => !value,\r\n then: Yup.string().required('Campo obrigatório'),\r\n otherwise: Yup.string(),\r\n }),\r\n number: Yup.string()\r\n .test(\r\n 'number',\r\n 'Número inválido',\r\n number => number && validateBr.telefone(removeCountryCode(number)),\r\n )\r\n .required('Campo obrigatório'),\r\n amount: Yup.string().required('Campo obrigatório'),\r\n ownerCard: Yup.boolean(),\r\n cpf: Yup.string().when('ownerCard', {\r\n is: false,\r\n then: Yup.string().required('Campo obrigatório'),\r\n }),\r\n card: Yup.object().shape({\r\n id: Yup.string(),\r\n cvv: Yup.string()\r\n .test('cvv', 'Código inválido', cvv => cardValidator.cvv(cvv).isValid)\r\n .required('Campo obrigatório'),\r\n exp: Yup.string().when('id', {\r\n is: (value: string) => !value,\r\n then: Yup.string()\r\n .matches(\r\n /[0-9]{2}\\/[0-9]{4}/,\r\n 'Data inválida, use 4 números para o ano',\r\n )\r\n .test(\r\n 'exp',\r\n 'Expiração inválida',\r\n exp => cardValidator.expirationDate(exp).isValid,\r\n )\r\n .required('Campo obrigatório'),\r\n }),\r\n number: Yup.string().when('id', {\r\n is: (value: string) => !value,\r\n then: Yup.string()\r\n .test(\r\n 'cardNumber',\r\n 'Número inválida',\r\n cardNumber => cardValidator.number(cardNumber).isValid,\r\n )\r\n .required('Campo obrigatório'),\r\n }),\r\n }),\r\n});\r\n","import { validateBr } from '@b3coded/js-brasil';\r\nimport validate from 'card-validator';\r\nimport * as Yup from 'yup';\r\nimport { removeCountryCode } from '../utils';\r\n\r\nconst addressIdValidation = {\r\n is: (value?: string) => !value,\r\n then: Yup.string().required('Campo obrigatório'),\r\n};\r\n\r\nexport const createCardSchema = Yup.object().shape({\r\n ownerCard: Yup.boolean(),\r\n cpf: Yup.string().when('ownerCard', {\r\n is: false,\r\n then: Yup.string()\r\n .required('Campo obrigatório')\r\n .test('isCPF', 'CPF inválido', value => value && validateBr.cpf(value)),\r\n }),\r\n ownerPhone: Yup.string().when('ownerCard', {\r\n is: false,\r\n then: Yup.string()\r\n .required('Campo obrigatório')\r\n .test(\r\n 'number',\r\n 'Número inválido',\r\n number => number && validateBr.telefone(removeCountryCode(number)),\r\n ),\r\n }),\r\n ownerName: Yup.string().when('ownerCard', {\r\n is: false,\r\n then: Yup.string().required('Campo obrigatório'),\r\n }),\r\n email: Yup.string().when('ownerCard', {\r\n is: false,\r\n then: Yup.string().required('Campo obrigatório'),\r\n }),\r\n\r\n expiration: Yup.string()\r\n .required('Campo obrigatório')\r\n .matches(/[0-9]{2}\\/[0-9]{4}/, 'Data inválida, use 4 números para o ano')\r\n .test(\r\n 'isCardExp',\r\n 'Data inválida',\r\n value => validate.expirationDate(value).isValid,\r\n ),\r\n number: Yup.string()\r\n .required('Campo obrigatório')\r\n .test(\r\n 'isCardNumber',\r\n 'Número inválido',\r\n value => validate.number(value).isValid,\r\n ),\r\n billingName: Yup.string()\r\n .required('Campo obrigatório')\r\n .uppercase('Necessário ser maiúsculo'),\r\n\r\n address: Yup.object().shape({\r\n addressId: Yup.string(),\r\n zip: Yup.string().when('addressId', addressIdValidation),\r\n street: Yup.string().when('addressId', addressIdValidation),\r\n city: Yup.string().when('addressId', addressIdValidation),\r\n state: Yup.string().when('addressId', addressIdValidation),\r\n neighborhood: Yup.string().when('addressId', addressIdValidation),\r\n complement: Yup.string(),\r\n number: Yup.string().when('addressId', addressIdValidation),\r\n }),\r\n});\r\n","import * as Yup from 'yup';\r\n\r\nexport const recoverPasswordSchema = Yup.object().shape({\r\n token: Yup.string(),\r\n password: Yup.string()\r\n .min(6, 'A senha precisa ter no minímo 6 digitos, letras e números')\r\n .matches(/[0-9]/, 'A senha precisa ter no minímo 1 número')\r\n .matches(/[a-zA-Z]/, 'A senha precisa ter no minímo 1 letra')\r\n .required('Campo obrigatório'),\r\n passwordConfirmation: Yup.string()\r\n .oneOf([Yup.ref('password')], 'Senhas não conferem')\r\n .required('Campo obrigatório'),\r\n});\r\n","import * as Yup from 'yup';\r\n\r\nexport const recoverPasswordEmailSchema = Yup.object().shape({\r\n email: Yup.string().email('Email inválido').required('Campo obrigatório'),\r\n});\r\n","import * as Yup from 'yup';\n\nexport const firstAccessPersonalDataSchema = Yup.object().shape({\n email: Yup.string().email('Email inválido').required('Campo obrigatório'),\n firstName: Yup.string().required('Campo obrigatório'),\n lastName: Yup.string().required('Campo obrigatório'),\n password: Yup.string()\n .min(6, 'A senha precisa ter no minímo 6 digitos, letras e números')\n .matches(/[0-9]/, 'A senha precisa ter no minímo 1 número')\n .matches(/[a-zA-Z]/, 'A senha precisa ter no minímo 1 letra')\n .required('Campo obrigatório'),\n passwordConfirmation: Yup.string()\n .oneOf([Yup.ref('password')], 'Senhas não conferem')\n .required('Campo obrigatório'),\n});\n","import * as Yup from 'yup';\n\nexport const firstAccessTokenSchema = Yup.object().shape({\n code: Yup.string().required('Campo obrigatório'),\n terms: Yup.boolean().oneOf([true], 'Termos precisam ser aceitos'),\n privacy: Yup.boolean().oneOf(\n [true],\n 'Politica de privacidade precisa ser aceita',\n ),\n});\n","import { validateBr } from '@b3coded/js-brasil';\r\nimport * as Yup from 'yup';\r\n\r\nexport const firstAccessNumberSchema = Yup.object().shape({\r\n msisdn: Yup.string()\r\n .test(\r\n 'isPhone',\r\n 'Número inválido',\r\n value => value && validateBr.telefone(value),\r\n )\r\n .required('Campo obrigatório'),\r\n});\r\n","import { useContext } from 'react';\r\nimport { UsageContext, usageContextDefaultValue } from '../context';\r\n\r\nexport function useUsage() {\r\n const context = useContext(UsageContext);\r\n\r\n if (!context || context == usageContextDefaultValue) {\r\n throw new Error('useUsage must be used within a UsageProvider');\r\n }\r\n\r\n return context;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { useUsage } from './useUsage';\r\n\r\nexport function useUsageItems() {\r\n const context = useUsage();\r\n const items = useMemo(() => {\r\n if (!context.usage?.itens) return [];\r\n return context.usage.itens;\r\n }, [context.usage]);\r\n return items;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { UseUsagePercentageOptions } from '../props';\r\n\r\nexport function useUsageUnlimited(options: UseUsagePercentageOptions) {\r\n const { type, endValueAccountCounter, initialAccountCounter } = options;\r\n\r\n const isUnlimited = useMemo(() => {\r\n if (type === 'voz') {\r\n const minutes = initialAccountCounter / 1000 / 60;\r\n return minutes <= 5000;\r\n }\r\n if (type === 'sms') {\r\n return endValueAccountCounter === null || endValueAccountCounter == 0;\r\n }\r\n return false;\r\n }, [endValueAccountCounter, initialAccountCounter, type]);\r\n\r\n return isUnlimited;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { useUsage } from './useUsage';\r\n\r\nexport function useUsageStatus() {\r\n const context = useUsage();\r\n const status = useMemo(\r\n () => context.requestUsageStatus,\r\n [context.requestUsageStatus],\r\n );\r\n return status;\r\n}\r\n","import { useMemo } from 'react';\nimport { formatDate } from '../../../utils/formatDate';\nimport { formatBytes, timeConvert } from '../../../utils/usageFormat';\nimport { UsageItem } from '../props';\nimport { useUsagePercentage } from './useUsagePercentage';\nimport { useUsageTranslatedName } from './useUsageTranslatedName';\nimport { useUsageUnlimited } from './useUsageUnlimited';\nimport { useUsageValues } from './useUsageValues';\n\nexport function useUsageDisplay(props: UsageItem) {\n const {\n name,\n startDate,\n expirationDate,\n currentAccountCounter,\n initialAccountCounter,\n type,\n unitsAccountCounter,\n endValueAccountCounter,\n } = props;\n\n const useUsageOptions = {\n currentAccountCounter,\n initialAccountCounter,\n type,\n unitsAccountCounter,\n endValueAccountCounter,\n };\n\n const translatedName = useUsageTranslatedName(name);\n const isUnlimited = useUsageUnlimited(useUsageOptions);\n const { freePercent, usedPercent } = useUsagePercentage(useUsageOptions);\n const { freeValue, usedValue } = useUsageValues(useUsageOptions);\n\n const expiryDate = useMemo(() => {\n if (expirationDate == null) return null;\n const endDateFormatted = formatDate(expirationDate);\n return `Válido até ${endDateFormatted}`;\n }, [expirationDate]);\n\n const formattedUsedPercent = useMemo(() => {\n if (usedPercent == null) return null;\n return `${usedPercent.toFixed(2).replace('.', ',')}%`;\n }, [usedPercent]);\n\n const formattedFreePercent = useMemo(() => {\n if (freePercent == null) return null;\n return `${freePercent.toFixed(2).replace('.', ',')}%`;\n }, [freePercent]);\n\n const formattedUsedValue = useMemo(() => {\n if (usedValue == null) return null;\n if (type === 'voz') return timeConvert(usedValue);\n if (type === 'dados') return formatBytes(usedValue);\n return usedValue;\n }, [type, usedValue]);\n\n const formattedFreeValue = useMemo(() => {\n if (typeof freeValue === 'string') return freeValue;\n if (type === 'voz') return timeConvert(freeValue);\n if (type === 'dados') return formatBytes(freeValue);\n return freeValue;\n }, [freeValue, type]);\n\n const startLabel = useMemo(() => {\n if (isUnlimited) return 'Ilimitado';\n if (type === 'dados') return '0 GB';\n if (type === 'voz') return '0 min';\n return '0';\n }, [isUnlimited, type]);\n\n const endLabel = useMemo(() => {\n if (isUnlimited) return undefined;\n if (type === 'dados') return formatBytes(initialAccountCounter);\n if (type === 'voz') return timeConvert(initialAccountCounter);\n return '0';\n }, [initialAccountCounter, isUnlimited, type]);\n\n const progressBarCurrent = useMemo(\n () => (isUnlimited ? 0 : usedValue),\n [isUnlimited, usedValue],\n );\n\n const progressBarMax = useMemo(\n () => (isUnlimited ? 100 : initialAccountCounter),\n [initialAccountCounter, isUnlimited],\n );\n\n return {\n isUnlimited,\n freeValue,\n usedValue,\n translatedName,\n progressBarMax,\n progressBarCurrent,\n endLabel,\n startLabel,\n formattedFreeValue,\n formattedFreePercent,\n expiryDate,\n formattedUsedPercent,\n formattedUsedValue,\n };\n}\n","import { useMemo } from 'react';\r\n\r\nexport function useUsageTranslatedName(name: string) {\r\n const translatedName = useMemo(() => {\r\n const names = {\r\n 'voz onnet': 'Ligações para Brisa Móvel, Brisa Fixo e Vivo',\r\n 'voz offnet': 'Ligações para móvel e fixo de outras operadoras do Brasil',\r\n dados: 'Consumo da franquia Internet',\r\n sms: 'Consumo de SMS',\r\n 'sms onnet': 'Consumo de SMS para Brisamóvel e Vivo',\r\n };\r\n if (Object.keys(names).includes(name.toLowerCase())) {\r\n return names[name.toLowerCase() as keyof typeof names];\r\n }\r\n\r\n const firstLetter = name.slice(0, 1).toUpperCase();\r\n const rest = name.slice(1).toLowerCase();\r\n\r\n return `${firstLetter}${rest}`.replace(/(GB){1}/gi, v => v.toUpperCase());\r\n }, [name]);\r\n\r\n return translatedName;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { UseUsagePercentageOptions } from '../props';\r\nimport { useUsageUnlimited } from './useUsageUnlimited';\r\n\r\nexport function useUsagePercentage(options: UseUsagePercentageOptions) {\r\n const { currentAccountCounter, initialAccountCounter } = options;\r\n\r\n const isUnlimited = useUsageUnlimited(options);\r\n\r\n const usedPercent = useMemo(() => {\r\n if (isUnlimited) return null;\r\n const percent = 100 - 100 / (initialAccountCounter / currentAccountCounter);\r\n return percent;\r\n }, [currentAccountCounter, initialAccountCounter, isUnlimited]);\r\n\r\n const freePercent = useMemo(() => {\r\n if (isUnlimited || usedPercent == null) return null;\r\n const percent = 100 / (initialAccountCounter / currentAccountCounter);\r\n return percent;\r\n }, [isUnlimited, usedPercent, initialAccountCounter, currentAccountCounter]);\r\n\r\n return {\r\n usedPercent,\r\n freePercent,\r\n };\r\n}\r\n","import { useMemo } from 'react';\r\nimport { UseUsagePercentageOptions } from '../props';\r\nimport { useUsageUnlimited } from './useUsageUnlimited';\r\n\r\nexport function useUsageValues(options: UseUsagePercentageOptions) {\r\n const { currentAccountCounter, initialAccountCounter } = options;\r\n\r\n const isUnlimited = useUsageUnlimited(options);\r\n\r\n const usedValue = useMemo(\r\n () => initialAccountCounter - currentAccountCounter,\r\n [currentAccountCounter, initialAccountCounter],\r\n );\r\n\r\n const freeValue = useMemo(() => {\r\n if (isUnlimited) return 'Ilimitado';\r\n return currentAccountCounter;\r\n }, [currentAccountCounter, isUnlimited]);\r\n\r\n return {\r\n usedValue,\r\n freeValue,\r\n };\r\n}\r\n","import { useState, useCallback } from 'react';\nimport { api } from '../../../api';\n\nfunction useValidateEmail() {\n const [status, setStatus] = useState({\n valid: false,\n loading: false,\n message: '',\n });\n\n const validateEmail = useCallback(async (email: string) => {\n try {\n setStatus(prev => ({ ...prev, loading: true, message: '' }));\n const response = await api.get(`/customer/available`, {\n params: {\n userName: email,\n },\n });\n const isValid = response.data.available;\n setStatus(prev => ({\n ...prev,\n loading: false,\n valid: isValid,\n message: isValid ? '' : 'Email já cadastrado',\n }));\n } catch (error) {\n setStatus(prev => ({\n ...prev,\n loading: false,\n valid: false,\n message: 'Ocorreu um erro ao verificar email',\n }));\n }\n }, []);\n\n return { validateEmail, status };\n}\n\nexport default useValidateEmail;\n","import { useContext } from 'react';\r\nimport { FirstAccessContext, firstAccessContextDefaultValue } from '../context';\r\n\r\nexport default function useFirstAccess() {\r\n const context = useContext(FirstAccessContext);\r\n if (!context || context === firstAccessContextDefaultValue) {\r\n throw new Error('useFirstAccess must be used within a FirstAccessProvider');\r\n }\r\n return context;\r\n}\r\n","import { useState, useCallback } from 'react';\nimport {\n REQUEST_STATUS_INITIAL,\n REQUEST_STATUS_LOADING,\n api,\n REQUEST_STATUS_SUCCESS,\n REQUEST_STATUS_ERROR,\n} from '../../../api';\nimport { RequestStatus } from '../../../interfaces';\nimport { removeSymbols } from '../../../utils';\nimport { FirstAccessCreateUser } from '../props';\nimport useFirstAccess from './useFirstAccess';\n\nexport default function useCreateUser() {\n const { setUserData, userData, setCurrentStep } = useFirstAccess();\n const [createUserStatus, setStatus] = useState(\n REQUEST_STATUS_INITIAL,\n );\n\n const createUser = useCallback(\n async (user: FirstAccessCreateUser) => {\n try {\n setStatus(REQUEST_STATUS_LOADING);\n const { email, firstName, lastName, password } = user;\n const newUser = {\n firstName,\n lastName,\n password,\n userName: email,\n msisdn: removeSymbols(userData.msisdn || ''),\n };\n await api.post('/customer', newUser);\n setUserData(prev => ({ ...prev, user }));\n setStatus(REQUEST_STATUS_SUCCESS);\n setCurrentStep('checkSMSToken');\n } catch (error) {\n setStatus({ ...REQUEST_STATUS_ERROR, errorMessage: error.message });\n }\n },\n [setCurrentStep, setUserData, userData],\n );\n\n return { createUser, createUserStatus };\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport useCreateUser from './useCreateUser';\r\nimport useFirstAccess from './useFirstAccess';\r\n\r\nexport default function useResendSMS() {\r\n const context = useCreateUser();\r\n const { userData } = useFirstAccess();\r\n\r\n const [remainingSeconds, setRemainingSeconds] = useState(60);\r\n\r\n const canResend = useMemo(() => remainingSeconds == 0, [remainingSeconds]);\r\n\r\n useEffect(() => {\r\n let timer: null | ReturnType = null;\r\n if (remainingSeconds > 0) {\r\n timer = setTimeout(() => {\r\n setRemainingSeconds(remainingSeconds - 1);\r\n }, 1000); // 60 segundos\r\n }\r\n\r\n return () => {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n };\r\n }, [canResend, remainingSeconds]);\r\n\r\n const resendSMS = useCallback(() => {\r\n setRemainingSeconds(60);\r\n context.createUser(userData);\r\n }, [context, userData]);\r\n\r\n return {\r\n canResend,\r\n resendSMS,\r\n remainingSeconds,\r\n };\r\n}\r\n","import { useState, useCallback } from 'react';\nimport {\n REQUEST_STATUS_INITIAL,\n REQUEST_STATUS_LOADING,\n api,\n REQUEST_STATUS_SUCCESS,\n REQUEST_STATUS_ERROR,\n} from '../../../api';\nimport { RequestStatus } from '../../../interfaces';\nimport { FirstAccessVerifyToken } from '../props';\n\nexport default function useValidateToken() {\n const [validateTokenStatus, setStatus] = useState(\n REQUEST_STATUS_INITIAL,\n );\n const validateToken = useCallback(async (value: FirstAccessVerifyToken) => {\n try {\n if (!value.code) {\n throw new Error('CODE not defined');\n }\n setStatus(REQUEST_STATUS_LOADING);\n await api.get(`/msisdn/validate-sms-token/${value.code}`, {\n timeout: 450000,\n });\n\n setStatus(REQUEST_STATUS_SUCCESS);\n } catch (error) {\n if (error.response) {\n setStatus({\n ...REQUEST_STATUS_ERROR,\n errorMessage: 'Código incorreto',\n });\n } else {\n setStatus({\n ...REQUEST_STATUS_ERROR,\n errorMessage: 'Ocorreu um erro, tente novamente mais tarde',\n });\n }\n }\n }, []);\n\n return { validateToken, validateTokenStatus };\n}\n","import { useState, useCallback } from 'react';\r\nimport {\r\n REQUEST_STATUS_INITIAL,\r\n REQUEST_STATUS_LOADING,\r\n api,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_ERROR,\r\n} from '../../../api';\r\nimport { RequestStatus } from '../../../interfaces';\r\nimport { removeSpaces, removeSymbols } from '../../../utils';\r\nimport { FirstAccessCheckNumber } from '../props';\r\nimport useFirstAccess from './useFirstAccess';\r\n\r\nexport default function useCheckNumber() {\r\n const { setUserData, setCurrentStep } = useFirstAccess();\r\n const [checkNumberStatus, setStatus] = useState(\r\n REQUEST_STATUS_INITIAL,\r\n );\r\n\r\n const checkNumber = useCallback(\r\n async (value: FirstAccessCheckNumber) => {\r\n try {\r\n if (!value.msisdn) {\r\n throw new Error('Número vazio');\r\n }\r\n setStatus(REQUEST_STATUS_LOADING);\r\n\r\n const { data } = await api.get('/msisdn/available', {\r\n params: {\r\n msisdn: removeSymbols(removeSpaces(value.msisdn)),\r\n },\r\n });\r\n\r\n const { registeredsc, firstName, lastName } = data.CustomerDataDetails;\r\n if (registeredsc == null) {\r\n throw new Error('Número não encontrado');\r\n }\r\n if (registeredsc == 1) {\r\n throw new Error('Número já cadastrado');\r\n }\r\n setUserData(prev => ({\r\n ...prev,\r\n msisdn: value.msisdn,\r\n firstName,\r\n lastName,\r\n }));\r\n\r\n setStatus(REQUEST_STATUS_SUCCESS);\r\n setCurrentStep('personalData');\r\n } catch (error) {\r\n setStatus({ ...REQUEST_STATUS_ERROR, errorMessage: error.message });\r\n }\r\n },\r\n [setCurrentStep, setUserData],\r\n );\r\n\r\n return {\r\n checkNumber,\r\n checkNumberStatus,\r\n };\r\n}\r\n","import { useContext } from 'react';\r\nimport { NumbersContext, numbersContextDefaultValue } from '../context';\r\n\r\nexport function useNumbers() {\r\n const context = useContext(NumbersContext);\r\n if (!context || context == numbersContextDefaultValue) {\r\n throw new Error('useNumbers must be used within a NumbersProvider');\r\n }\r\n return context;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { useNumbers } from './useNumbers';\r\n\r\nexport function useCurrentNumber() {\r\n const context = useNumbers();\r\n const currentNumber = useMemo(\r\n () => context.currentNumber,\r\n [context.currentNumber],\r\n );\r\n return currentNumber;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { useCurrentNumber } from './useCurrentNumber';\r\n\r\nexport function useCurrentMSISDN() {\r\n const context = useCurrentNumber();\r\n const msisdn = useMemo(() => context?.msisdn || '', [context?.msisdn]);\r\n return msisdn;\r\n}\r\n","import { useMemo } from 'react';\r\nimport { useNumbers } from './useNumbers';\r\n\r\nexport function useNumbersStatus() {\r\n const context = useNumbers();\r\n const status = useMemo(\r\n () => context.requestNumbersStatus,\r\n [context.requestNumbersStatus],\r\n );\r\n return status;\r\n}\r\n","import { useState, useCallback, useMemo } from 'react';\r\n\r\nexport function useShowPassword(initialState = false) {\r\n const [showPassword, setShowPassword] = useState(initialState);\r\n\r\n const toggleShowPassword = useCallback(\r\n () => setShowPassword(prev => !prev),\r\n [setShowPassword],\r\n );\r\n\r\n return {\r\n showPassword,\r\n setShowPassword,\r\n toggleShowPassword,\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\nimport { RequestStatus } from '../interfaces';\n\nexport interface StepperContextProps {\n step: StepNames;\n nextStep(): void;\n previousStep(): void;\n goToStep(step: StepNames): void;\n requestStatus: RequestStatus;\n}\n\nexport const StepperContext = createContext>(\n undefined as any,\n);\nexport const StepperProvider = StepperContext.Provider;\nexport const StepperConsumer = StepperContext.Consumer;\n\nexport function useStepper() {\n const stepper = useContext>(StepperContext);\n if (!stepper) {\n throw new Error('useStepper should be in StepperProvider');\n }\n return stepper;\n}\n","const INVALID_CREDENTIALS = 'InvalidCredentials';\nconst UNAVAILABLE_OPERATION = 'UnavailableOperation';\nconst EXPIRED_SESSION = 'ExpiredSession';\nconst INVALID_SESSION_KEY = 'InvalidSessionKey';\nconst SESSION_NOT_FOUND = 'SessionNotFound';\nconst DATA_NOT_FOUND = 'NotDataFound';\nconst COSTUMER_CREATE_ERROR = 'createCustomerError';\nconst INVALID_SMS_TOKEN = 'validateSMSTokenError';\nconst CHECK_REGISTERED_CUSTOMER_ERROR = 'CheckCustomerRegisteredError';\nconst INVALID_MSISDN = 'ValidateMsisdnError';\n\nconst errors = {\n [EXPIRED_SESSION]: 'Sua sessão expirou, por favor, faça um novo login',\n [INVALID_SESSION_KEY]: 'Sua sessão expirou, por favor, faça um novo login',\n [INVALID_CREDENTIALS]: 'Ops, verifique seu login e senha',\n [UNAVAILABLE_OPERATION]: 'Está ação está indisponível',\n [SESSION_NOT_FOUND]: 'Sessão expirada',\n [DATA_NOT_FOUND]: 'Dado não encontrado',\n [COSTUMER_CREATE_ERROR]:\n 'Erro ao criar conta, favor contactar nossa central de atendimento',\n [INVALID_SMS_TOKEN]: 'Token inválido',\n [CHECK_REGISTERED_CUSTOMER_ERROR]:\n 'Erro ao criar sua conta, tente novamente ou entre em contato com o nosso atendimento.',\n [INVALID_MSISDN]: 'Número inválido',\n\n UNAVAILABLE_SERVICE: 'Serviço indisponível',\n CONNECTION_ERROR: 'Erro de conexão com o serviço',\n AUTHENTICATION_ERROR:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n ERROR_ON_MAKE_SALE:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n UNAVAILABLE_CONNECTION_CHANNEL:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n INVALID_PARAM: 'Informação inválida',\n REQUIRED_FIELD_NOT_PROVIDED: 'Campo obrigatório não foi preenchido',\n UNEXPECTED_ERROR:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n SALE_NOT_FOUND:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n WAS_NOT_POSSIBLE_CONFIRM_SALE:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n WAS_NOT_POSSIBLE_CANCEL_SALE:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n SALE_NOT_PERFORMED:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n LOCKED_PHONE: 'Telefone bloqueado',\n RESET_TRANSACTION:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n INVALID_PHONE: 'Telefone inválido',\n VALUE_NOT_ALLOWED:\n 'Não conseguimos realizar sua recarga pois o valor informado é inválido. Tente novamente com um valor válido.',\n WITHOUT_COMMUNICATION:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n INVALID_CARD: 'Cartão inválido',\n ERROR_ON_CHECKOUT:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n CONSUMER_NOT_FOUND:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n CARD_NOT_FOUND: 'Cartão não encontrado',\n ERROR_ON_MAXI_PAGO:\n 'Não conseguimos realizar sua recarga por algum motivo. Tente novamente ou entre em contato com o emissor do cartão.',\n INVALID_RECEIPT: 'Comprovante inválido',\n PAGE_LIMIT_EXCEEDED: 'Limite de páginas excedido',\n ADDRESS_NOT_FOUND: 'Endereço não encontrado',\n ADDRESS_LIMIT_EXCEEDED: 'Limite de endereços excedido',\n CARD_LIMIT_EXCEEDED: 'Limite de cartões excedido',\n};\n\nfunction translateMessage(message?: keyof typeof errors): string {\n if (!message || !errors[message]) return errors.ERROR_ON_CHECKOUT;\n return errors[message];\n}\n\nexport default translateMessage;\n","import { useMemo, useState, useCallback, useEffect, useContext } from 'react';\r\nimport { ModalsContext, modalsContextDefaultValue } from '../context';\r\n\r\nexport function useModals() {\r\n const context = useContext(ModalsContext);\r\n if (!context || context == modalsContextDefaultValue) {\r\n throw new Error('useModals must be used within a ModalsProvider');\r\n }\r\n return context;\r\n}\r\n","import { useState, useCallback } from 'react';\r\nimport {\r\n REQUEST_STATUS_INITIAL,\r\n REQUEST_STATUS_LOADING,\r\n api,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_ERROR,\r\n} from '../../../api';\r\nimport { RequestStatus } from '../../../interfaces';\r\nimport {\r\n RecoverCreatePasswordCredentials,\r\n RecoverPasswordCredentials,\r\n} from '../props';\r\n\r\nexport function useRecoverPassword() {\r\n const [requestRecoverPasswordStatus, setStatus] = useState(\r\n REQUEST_STATUS_INITIAL,\r\n );\r\n\r\n const recoverPassword = useCallback(\r\n async (credentials: RecoverPasswordCredentials) => {\r\n try {\r\n setStatus(REQUEST_STATUS_LOADING);\r\n await api.get(`/auth/recovery/send-mail/${credentials.email}`, {\r\n timeout: 450000,\r\n });\r\n setStatus(REQUEST_STATUS_SUCCESS);\r\n } catch (err) {\r\n setStatus(REQUEST_STATUS_ERROR);\r\n }\r\n },\r\n [],\r\n );\r\n\r\n return { requestRecoverPasswordStatus, recoverPassword };\r\n}\r\n\r\nexport function useCreateNewPassword() {\r\n const [requestRecoverPasswordStatus, setStatus] = useState(\r\n REQUEST_STATUS_INITIAL,\r\n );\r\n\r\n const createNewPassword = useCallback(\r\n async (credentials: RecoverCreatePasswordCredentials) => {\r\n try {\r\n setStatus(REQUEST_STATUS_LOADING);\r\n await api.post(\r\n `/auth/recovery/recovery-password/${credentials.token}`,\r\n { password: credentials.password },\r\n );\r\n setStatus(REQUEST_STATUS_SUCCESS);\r\n } catch (err) {\r\n setStatus(REQUEST_STATUS_ERROR);\r\n }\r\n },\r\n [],\r\n );\r\n\r\n const resetState = useCallback(() => {\r\n setStatus(REQUEST_STATUS_INITIAL);\r\n }, []);\r\n\r\n return { requestRecoverPasswordStatus, createNewPassword, resetState };\r\n}\r\n","export * from './api';\r\nexport * from './context';\r\nexport * from './interfaces';\r\nexport * from './utils';\r\nexport * from './hooks';\r\nexport * from './validations';\r\nexport * from './constants';\r\n","interface FormatCurrencyOptions {\n value: number | string;\n showCurrencyPreffix?: boolean;\n}\nexport function formatCurrency(options: FormatCurrencyOptions) {\n const { value, showCurrencyPreffix = false } = options;\n const number = Number(value);\n if (showCurrencyPreffix) {\n return `R$ ${number.toFixed(2).replace('.', ',')}`;\n }\n return number.toFixed(2).replace('.', ',');\n}\n","import { extractNumbers } from './formatNumber';\r\n\r\nexport function getNumberDetails(number: string) {\r\n const formattedNumber = extractNumbers(number).slice(2);\r\n const ddd = parseInt(formattedNumber.slice(0, 2), 10);\r\n const phoneNumber = formattedNumber.slice(2);\r\n return {\r\n ddd,\r\n phoneNumber,\r\n };\r\n}\r\n","import { removeSymbols } from './stringUtils';\r\n\r\nconst DIGIT = '9';\r\nconst DIGIT_PATTERN = /[0-9]/;\r\n\r\nconst ALPHA = 'a';\r\nconst ALPHA_PATTERN = /[a-zA-Z]/;\r\n\r\nconst ALPHA_UPPER = 'A';\r\nconst ALPHA_UPPER_PATTERN = /[A-Z]/;\r\n\r\nconst ALPHANUM = 'S';\r\nconst ALPHANUM_PATTERN = /[0-9a-zA-Z]/;\r\n\r\nconst patternMap: Record = {\r\n [ALPHA]: ALPHA_PATTERN,\r\n [ALPHA_UPPER]: ALPHA_UPPER_PATTERN,\r\n [ALPHANUM]: ALPHANUM_PATTERN,\r\n [DIGIT]: DIGIT_PATTERN,\r\n};\r\n\r\n/**\r\n * Verifica se o caractere atual obedece ao Pattern atual\r\n *\r\n * @param char caractere atual\r\n * @param currentPattern tipo de caractere: `9`, `a` , `A` ou `S`\r\n */\r\nfunction matchPattern(char: string, currentPattern: string) {\r\n if (!patternMap[currentPattern]) return false;\r\n const regexpPattern = patternMap[currentPattern];\r\n return regexpPattern.test(char);\r\n}\r\n\r\n/**\r\n * Mascara uma string para um padrão customizado\r\n *\r\n * @param pattern padrão de formatação\r\n * @description\r\n * descrição do padrão de formatação\r\n *\r\n * `a`: qualquer letra\r\n *\r\n * `A`: qualquer letra maiúscula\r\n *\r\n * `9`: qualquer número\r\n *\r\n * `S`: qualquer letra ou número\r\n *\r\n * @param value valor a ser mascarado\r\n * @returns string formatada\r\n */\r\nexport function maskValue(pattern: string, value: string) {\r\n // remove símbolos já que não serão usados na função de mascarar\r\n const rawValue = removeSymbols(value);\r\n const characters = rawValue.split('');\r\n let maskedValue = '';\r\n let currentPatternIndex = 0;\r\n for (let index = 0; index < characters.length; index++) {\r\n const char = characters[index];\r\n if (maskedValue.length >= pattern.length) {\r\n break;\r\n }\r\n const out = pattern[currentPatternIndex];\r\n const matchesPattern = matchPattern(char, out);\r\n if (matchesPattern) {\r\n currentPatternIndex = currentPatternIndex + 1;\r\n maskedValue = maskedValue.concat(char);\r\n } else {\r\n currentPatternIndex = currentPatternIndex + 1;\r\n index--;\r\n maskedValue = maskedValue.concat(out);\r\n }\r\n }\r\n return maskedValue;\r\n}\r\n","import { RequestStatus } from '../interfaces';\n\nexport const REQUEST_STATUS_INITIAL: RequestStatus = {\n error: false,\n loading: false,\n success: false,\n};\n\nexport const REQUEST_STATUS_LOADING: RequestStatus = {\n error: false,\n loading: true,\n success: false,\n};\n\nexport const REQUEST_STATUS_SUCCESS: RequestStatus = {\n error: false,\n loading: false,\n success: true,\n};\n\nexport const REQUEST_STATUS_ERROR: RequestStatus = {\n error: true,\n loading: false,\n success: false,\n};\n\nexport const BASE_URL = process.env.REACT_APP_API_URL;\n","import axios from 'axios';\r\nimport { BASE_URL } from './constants';\r\n\r\nexport const api = axios.create({\r\n baseURL: BASE_URL, /// your API url goes here\r\n responseType: 'json',\r\n timeout: 15000,\r\n});\r\n","import React, { useLayoutEffect } from 'react';\r\nimport ReactGA from 'react-ga';\r\n\r\nfunction useReactGA() {\r\n useLayoutEffect(() => {\r\n ReactGA.initialize('UA-151102057-1', {\r\n debug: process.env.NODE_ENV === 'development',\r\n testMode: process.env.NODE_ENV === 'development',\r\n });\r\n }, []);\r\n}\r\n\r\nexport default useReactGA;\r\n","import { useLayoutEffect } from 'react';\r\nimport * as Sentry from '@sentry/browser';\r\n\r\nfunction useSentry() {\r\n useLayoutEffect(() => {\r\n if (process.env.NODE_ENV !== 'development') {\r\n Sentry.init({\r\n dsn: 'https://23f23a1abbaf4c54851b04134fe48324@o353260.ingest.sentry.io/5200371',\r\n });\r\n }\r\n }, []);\r\n}\r\n\r\nexport default useSentry;\r\n","import { createTheme, responsiveFontSizes } from '@material-ui/core';\r\nimport { ptBR } from '@material-ui/core/locale';\r\n\r\nconst materialTheme = createTheme(\r\n {\r\n typography: {\r\n fontFamily: ['Barlow', 'Roboto', 'sans-serif'].join(','),\r\n h3: {\r\n fontWeight: 500,\r\n },\r\n h5: {\r\n fontWeight: 500,\r\n },\r\n },\r\n palette: {\r\n primary: {\r\n main: '#8cc83c',\r\n contrastText: '#fff',\r\n },\r\n secondary: {\r\n main: '#1d306a',\r\n contrastText: '#fff',\r\n },\r\n warning: {\r\n main: '#FFCB66',\r\n },\r\n error: {\r\n main: '#FF563A',\r\n },\r\n background: {\r\n default: '#fff',\r\n },\r\n },\r\n overrides: {\r\n MuiButton: {\r\n outlined: {\r\n borderColor: '#FFFFFF',\r\n color: '#FFFFFF',\r\n textTransform: 'none',\r\n },\r\n containedPrimary: {\r\n boxShadow: '0 3px 6px 0 rgba(128, 241, 0, 0.38)',\r\n },\r\n text: {\r\n textTransform: 'none',\r\n },\r\n contained: {\r\n textTransform: 'none',\r\n },\r\n },\r\n },\r\n },\r\n ptBR,\r\n);\r\n\r\nexport default responsiveFontSizes(materialTheme);\r\n","import React, { FC, memo, useEffect } from 'react';\r\nimport Fade from '@material-ui/core/Fade';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport MuiAlert from '@material-ui/lab/Alert';\r\nimport MuiAlertTitle from '@material-ui/lab/AlertTitle';\r\nimport { Toast, useToast } from 'core';\r\n\r\nconst ToastItem: FC = props => {\r\n const { title, message, timeout = 3000, type } = props;\r\n\r\n const { removeToast } = useToast();\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n removeToast();\r\n }, timeout);\r\n\r\n return () => {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n };\r\n }, [removeToast, timeout]);\r\n\r\n return (\r\n \r\n \r\n {title && {title}}\r\n {message}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default memo(ToastItem);\r\n","import styled from 'styled-components';\r\n\r\nexport const Container = styled.div(({ theme }) => ({\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n}));\r\n","import React, { FC, useMemo } from 'react';\nimport { ToastProvider, useToast, withContextProvider } from 'core';\nimport Toast from './components/Toast';\nimport * as Styled from './styles';\n\nconst ToastContainer: FC = props => {\n const { children } = props;\n\n const { toasts } = useToast();\n\n const listToasts = useMemo(\n () => toasts.map(e => ),\n [toasts],\n );\n\n return (\n \n {children}\n\n {listToasts}\n \n );\n};\n\nexport default ToastContainer;\n","export default __webpack_public_path__ + \"static/media/phone.79fd9164.svg\";","import styled, { keyframes } from 'styled-components';\r\n\r\nexport const Container = styled.div(({ theme }) => ({\r\n height: '100%',\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n}));\r\n\r\nconst phoneAnimation = keyframes({\r\n '0%': {\r\n transform: 'rotate(0deg)',\r\n },\r\n '25%': {\r\n transform: 'rotate(-30deg)',\r\n },\r\n '50%': {\r\n transform: 'rotate(0deg)',\r\n },\r\n '75%': {\r\n transform: 'rotate(30deg)',\r\n },\r\n '100%': {\r\n transform: 'rotate(0deg)',\r\n },\r\n});\r\n\r\n// export const PhoneIcon = styled.img`\r\n// animation: ${phoneAnimation} infinite 2s linear;\r\n// `;\r\n\r\nexport const PhoneIcon = styled.img(({ theme }) => ({\r\n animation: `${phoneAnimation.getName()} infinite 2s linear`,\r\n}));\r\n","import React, { FC, useEffect } from 'react';\r\nimport phoneIcon from 'assets/images/icons/phone.svg';\r\nimport Typography from 'components/Typography';\r\nimport { useAuth } from 'core';\r\nimport * as Styled from './styles';\r\n\r\nconst Loading: FC = () => {\r\n const { getProfile } = useAuth();\r\n\r\n useEffect(() => {\r\n getProfile();\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n Carregando dados, por favor aguarde\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Loading;\r\n","import styled from 'styled-components';\r\n\r\nexport const Main = styled.main({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flex: 1,\r\n});\r\n","import React, { FC, useMemo, memo, useRef, useEffect } from 'react';\nimport { useAuth } from 'core';\nimport { Helmet } from 'react-helmet';\nimport { Redirect, Route as DomRoute } from 'react-router-dom';\nimport { LOGIN, HOME } from 'routes/router';\nimport Loading from './components/Loading';\nimport { RouteProps } from './props';\nimport { Main } from './styles';\n\nconst Route: FC = props => {\n const { title, access, component, ...rest } = props;\n\n const {\n isAuthenticated,\n requestProfileStatus,\n requestTokenStatus,\n token,\n tokenRestored,\n } = useAuth();\n\n const routeTitle = useMemo(() => {\n if (!title) return 'Brisamóvel';\n return `${title} | Brisamóvel`;\n }, [title]);\n\n const redirectLink = useMemo(() => {\n if (access === 'auth' && !isAuthenticated) return LOGIN;\n if (access === 'guest' && isAuthenticated) return HOME;\n return null;\n }, [access, isAuthenticated]);\n\n if (!tokenRestored) return ;\n if (!isAuthenticated && token) return ;\n if (redirectLink) return ;\n\n return (\n <>\n \n {routeTitle}\n \n \n \n \n >\n );\n};\n\nexport default memo(Route);\n","import React, { FC } from 'react';\r\nimport loadable from '@loadable/component';\r\nimport Route from 'components/Route';\r\nimport { BrowserRouter as Router, Switch } from 'react-router-dom';\r\nimport { HOME, LOGIN, RECOVER_PASSWORD, STORES } from './router';\r\n\r\nconst Home = loadable(\r\n () => import(/* webpackChunkName: \"home\" */ 'pages/Home'),\r\n);\r\nconst Login = loadable(\r\n () => import(/* webpackChunkName: \"login\" */ 'pages/Login'),\r\n);\r\nconst NotFound = loadable(\r\n () => import(/* webpackChunkName: \"not-found\" */ 'pages/NotFound'),\r\n);\r\nconst RecoverPassword = loadable(\r\n () => import(/* webpackChunkName: \"recover\" */ 'pages/RecoverPassword'),\r\n);\r\nconst Stores = loadable(\r\n () => import(/* webpackChunkName: \"stores\" */ 'pages/Stores'),\r\n);\r\n\r\nconst Routes: FC = () => {\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Routes;\r\n","export const authStorage = {\r\n getItem: async (key: string): Promise => {\r\n const rawToken = localStorage.getItem(key);\r\n if (!rawToken) return null;\r\n return rawToken;\r\n },\r\n setItem: async (key: string, item: string): Promise => {\r\n localStorage.setItem(key, item);\r\n },\r\n removeItem: async (key: string): Promise => {\r\n localStorage.removeItem(key);\r\n },\r\n};\r\n","import React, { FC } from 'react';\nimport { ThemeProvider as StyledProvider } from 'styled-components';\nimport loadable from '@loadable/component';\nimport {\n ThemeProvider as MaterialProvider,\n CssBaseline,\n StylesProvider,\n} from '@material-ui/core';\nimport {\n AuthProvider,\n NumbersProvider,\n UsageProvider,\n ModalsProvider,\n ToastProvider,\n} from 'core';\nimport useReactGA from 'hooks/useReactGA';\nimport useSentry from 'hooks/useSentry';\nimport materialTheme from 'styles/themes/material-ui';\nimport NotificationContainer from './components/ToastContainer';\nimport Routes from './routes';\nimport { authStorage } from './utils/AuthStorage';\n\nconst GlobalStyles = loadable(() => import('styles/global'));\n\nconst App: FC = () => {\n useReactGA();\n useSentry();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './app';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","/**\n * Return size with suffix 'Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB' or 'YB'\n * @param bytes size in bytes\n * @param decimals floating point lenght (default: `2`)\n */\nexport function formatBytes(bytes: number, decimals = 2) {\n if (bytes === 0) return '0 bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))\n .toString()\n .replace('.', ',')} ${sizes[i]}`;\n}\n\nexport function timeConvert(duration: number) {\n // const milliseconds = parseInt(((duration % 1000) / 100).toString(), 10);\n // const hours = Math.floor((duration / (1000 * 60 * 60)) % 24);\n const seconds = Math.floor((duration / 1000) % 60);\n const minutes = Math.floor((duration / (1000 * 60)) % 60);\n\n if (minutes > 0) return `${minutes}min`;\n return `${seconds}s`;\n}\n","export * from './context';\r\nexport * from './props';\r\nexport * from './reducer';\r\nexport * from './hooks';\r\n// export * from './store';\r\n","export function removeParentheses(value: string) {\r\n return value.replace(/([(]|[)])/g, '');\r\n}\r\n\r\nexport function removeSpaces(value: string) {\r\n return value.replace(/\\s/g, '');\r\n}\r\n\r\nexport function removeTraces(value: string) {\r\n return value.replace(/-/, '');\r\n}\r\n\r\nexport function removeSymbols(value: string) {\r\n return value.replace(/[^a-zA-Z0-9]+/gi, '');\r\n}\r\n","export const LOGIN = '/';\r\nexport const HOME = '/app';\r\nexport const RECOVER_PASSWORD = '/auth/recovery/:token';\r\nexport const STORES = '/stores';\r\n","import { formatToPattern } from './formatToPattern';\r\nimport { removeSpaces } from './stringUtils';\r\n\r\nexport function extractNumbers(value: string, addCountryCode = true) {\r\n const pattern = /\\d+/g;\r\n const onlyNumbers = value.match(pattern)?.join('') || '';\r\n let formatted = removeSpaces(onlyNumbers);\r\n if (!formatted.startsWith('55') && addCountryCode) {\r\n formatted = '55'.concat(formatted);\r\n }\r\n return formatted;\r\n}\r\n\r\nexport function addCountryCode(value: string) {\r\n if (value.startsWith('55')) return value;\r\n return '55'.concat(value);\r\n}\r\n\r\nexport function removeCountryCode(value: string) {\r\n if (!value.startsWith('55')) return value;\r\n return value.replace(/^55/, '');\r\n}\r\n\r\ninterface FormatNumberExtraOptions {\r\n countryCode: boolean;\r\n}\r\nexport function formatNumber(\r\n value: string,\r\n options?: FormatNumberExtraOptions,\r\n) {\r\n if (options?.countryCode) {\r\n const baseValue = addCountryCode(value);\r\n return formatToPattern('+XX (XX) X XXXX-XXXX', baseValue);\r\n }\r\n const formattedValue = removeCountryCode(value);\r\n return formatToPattern('(XX) X XXXX-XXXX', formattedValue);\r\n}\r\n","import React, { createContext, useCallback, FC, useReducer } from 'react';\r\nimport { api } from '../../api';\r\nimport {\r\n AddressesContextData,\r\n AddressesContextProviderProps,\r\n AddressesResponse,\r\n} from './props';\r\nimport { addressesReducer, addressesInitialState } from './reducer';\r\n\r\nexport const addressesContextDefaultValue = {} as AddressesContextData;\r\nexport const AddressesContext = createContext(addressesContextDefaultValue);\r\n\r\nexport const AddressesProvider: FC = props => {\r\n const { children, initialProps } = props;\r\n\r\n const [state, dispatch] = useReducer(\r\n addressesReducer,\r\n initialProps || addressesInitialState,\r\n );\r\n\r\n const getAddresses = useCallback(async () => {\r\n try {\r\n dispatch({ type: 'REQUEST_ADDRESSES' });\r\n const { data } = await api.get('/consumer/address');\r\n\r\n dispatch({ type: 'REQUEST_ADDRESSES_SUCCESS', payload: data.adresses });\r\n } catch (error) {\r\n dispatch({ type: 'REQUEST_ADDRESSES_ERROR' });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { AddressesState, AddressesActions } from './props';\r\n\r\nexport const addressesInitialState: AddressesState = {\r\n addresses: [],\r\n requestAddressesStatus: REQUEST_STATUS_INITIAL,\r\n};\r\n\r\nexport function addressesReducer(\r\n state: AddressesState,\r\n action: AddressesActions,\r\n): AddressesState {\r\n switch (action.type) {\r\n case 'REQUEST_ADDRESSES':\r\n return {\r\n ...state,\r\n requestAddressesStatus: REQUEST_STATUS_LOADING,\r\n addresses: [],\r\n };\r\n case 'REQUEST_ADDRESSES_SUCCESS':\r\n return {\r\n ...state,\r\n requestAddressesStatus: REQUEST_STATUS_SUCCESS,\r\n addresses: action.payload,\r\n };\r\n case 'REQUEST_ADDRESSES_ERROR':\r\n return {\r\n ...state,\r\n requestAddressesStatus: REQUEST_STATUS_ERROR,\r\n addresses: [],\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import React, {\r\n createContext,\r\n useCallback,\r\n useEffect,\r\n FC,\r\n useMemo,\r\n useReducer,\r\n useState,\r\n} from 'react';\r\nimport { ModalNames, ModalsContextData } from './props';\r\n\r\nexport const modalsContextDefaultValue = {} as ModalsContextData;\r\nexport const ModalsContext = createContext(modalsContextDefaultValue);\r\n\r\nexport const ModalsProvider: FC = props => {\r\n const { children } = props;\r\n\r\n const [activeModal, setActiveModal] = useState(null);\r\n\r\n const closeModal = useCallback(() => {\r\n setActiveModal(null);\r\n }, []);\r\n\r\n const openModal = useCallback(\r\n (name: ModalNames) => {\r\n if (activeModal != null) {\r\n closeModal();\r\n setTimeout(() => {\r\n setActiveModal(name);\r\n }, 400);\r\n } else {\r\n setActiveModal(name);\r\n }\r\n },\r\n [activeModal, closeModal],\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { AuthState, AuthActions } from './props';\r\n\r\nexport const authInitialState: AuthState = {\r\n requestProfileStatus: REQUEST_STATUS_INITIAL,\r\n requestTokenStatus: REQUEST_STATUS_INITIAL,\r\n token: null,\r\n user: null,\r\n tokenRestored: false,\r\n};\r\n\r\nexport function authReducer(state: AuthState | undefined, action: AuthActions) {\r\n if (!state) return authInitialState;\r\n switch (action.type) {\r\n case 'REQUEST_PROFILE':\r\n return {\r\n ...state,\r\n requestProfileStatus: REQUEST_STATUS_LOADING,\r\n };\r\n\r\n case 'REQUEST_PROFILE_SUCCESS':\r\n return {\r\n ...state,\r\n requestProfileStatus: REQUEST_STATUS_SUCCESS,\r\n user: action.payload,\r\n };\r\n\r\n case 'REQUEST_PROFILE_ERROR':\r\n return {\r\n ...state,\r\n requestProfileStatus: REQUEST_STATUS_ERROR,\r\n user: null,\r\n };\r\n\r\n case 'REQUEST_USER':\r\n return {\r\n ...state,\r\n requestTokenStatus: REQUEST_STATUS_LOADING,\r\n };\r\n\r\n case 'REQUEST_USER_SUCCESS':\r\n return {\r\n ...state,\r\n requestTokenStatus: REQUEST_STATUS_SUCCESS,\r\n token: action.payload,\r\n };\r\n\r\n case 'REQUEST_USER_ERROR':\r\n return {\r\n ...state,\r\n requestTokenStatus: {\r\n ...REQUEST_STATUS_ERROR,\r\n errorMessage: action.payload,\r\n },\r\n user: null,\r\n };\r\n\r\n case 'SIGN_OUT':\r\n return {\r\n ...authInitialState,\r\n token: null,\r\n user: null,\r\n tokenRestored: true,\r\n };\r\n\r\n case 'SET_TOKEN':\r\n return {\r\n ...state,\r\n token: action.payload,\r\n };\r\n case 'RESTORE_TOKEN':\r\n return {\r\n ...state,\r\n token: action.payload,\r\n tokenRestored: true,\r\n };\r\n default:\r\n return authInitialState;\r\n }\r\n}\r\n","import React, {\r\n createContext,\r\n useCallback,\r\n FC,\r\n useReducer,\r\n useEffect,\r\n} from 'react';\r\nimport { api } from '../../api';\r\nimport { useAuth } from '../auth';\r\nimport { CardItem, CardsContextData, CardsContextProviderProps } from './props';\r\nimport { cardsReducer, cardsInitialState } from './reducer';\r\nexport const cardsContextDefaultValue = {} as CardsContextData;\r\nexport const CardsContext = createContext(cardsContextDefaultValue);\r\n\r\nexport const CardsProvider: FC = props => {\r\n const { children, initialProps } = props;\r\n const [state, dispatch] = useReducer(\r\n cardsReducer,\r\n initialProps || cardsInitialState,\r\n );\r\n\r\n const { isAuthenticated } = useAuth();\r\n useEffect(() => {\r\n if (!isAuthenticated) {\r\n dispatch({ type: 'RESET' });\r\n }\r\n }, [isAuthenticated]);\r\n\r\n const getCards = useCallback(async () => {\r\n try {\r\n dispatch({ type: 'REQUEST_CARDS' });\r\n const { data } = await api.get('/card');\r\n\r\n dispatch({ type: 'REQUEST_CARDS_SUCCESS', payload: data });\r\n } catch (error) {\r\n dispatch({ type: 'REQUEST_CARDS_ERROR' });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { CardsState, CardsActions } from './props';\r\n\r\nexport const cardsInitialState: CardsState = {\r\n cards: [],\r\n requestCardsStatus: REQUEST_STATUS_INITIAL,\r\n};\r\n\r\nexport function cardsReducer(\r\n state: CardsState,\r\n action: CardsActions,\r\n): CardsState {\r\n switch (action.type) {\r\n case 'REQUEST_CARDS':\r\n return {\r\n ...state,\r\n requestCardsStatus: REQUEST_STATUS_LOADING,\r\n cards: [],\r\n };\r\n case 'REQUEST_CARDS_SUCCESS':\r\n return {\r\n ...state,\r\n requestCardsStatus: REQUEST_STATUS_SUCCESS,\r\n cards: action.payload,\r\n };\r\n case 'REQUEST_CARDS_ERROR':\r\n return {\r\n ...state,\r\n requestCardsStatus: REQUEST_STATUS_ERROR,\r\n cards: [],\r\n };\r\n case 'RESET':\r\n return cardsInitialState;\r\n default:\r\n return state;\r\n }\r\n}\r\n","export function formatToPattern(mask: string, value: string) {\r\n let r = '';\r\n for (let im = 0, is = 0; im < mask.length && is < value.length; im++) {\r\n r += mask.charAt(im) == 'X' ? value.charAt(is++) : mask.charAt(im);\r\n }\r\n return r;\r\n}\r\n","import React, { createContext, useCallback, FC, useState } from 'react';\nimport {\n FirstAccessContextData,\n FirstAccessUserData,\n FirstAccessSteps,\n} from './props';\n\nexport const firstAccessContextDefaultValue = {} as FirstAccessContextData;\nexport const FirstAccessContext = createContext(firstAccessContextDefaultValue);\n\nexport const FirstAccessProvider: FC = props => {\n const { children } = props;\n\n const [currentStep, setCurrentStep] =\n useState('checkNumber');\n const [userData, setUserData] = useState({});\n\n const reset = useCallback(() => {\n setUserData({});\n setCurrentStep('checkNumber');\n }, []);\n\n return (\n \n {children}\n \n );\n};\n","import React, {\r\n createContext,\r\n useCallback,\r\n useEffect,\r\n FC,\r\n useMemo,\r\n useReducer,\r\n} from 'react';\r\nimport { api } from '../../api';\r\nimport { CustomerAccount } from '../../interfaces';\r\nimport { useAuth } from '../auth';\r\nimport {\r\n NumbersContextData,\r\n NumbersContextProviderProps,\r\n NumbersSetCurrentNumber,\r\n} from './props';\r\nimport { numbersReducer, numbersInitialState } from './reducer';\r\n\r\nexport const numbersContextDefaultValue = {} as NumbersContextData;\r\nexport const NumbersContext = createContext(numbersContextDefaultValue);\r\n\r\nexport const NumbersProvider: FC = props => {\r\n const { children, initialProps } = props;\r\n\r\n const [state, dispatch] = useReducer(\r\n numbersReducer,\r\n initialProps || numbersInitialState,\r\n );\r\n\r\n const { isAuthenticated } = useAuth();\r\n\r\n useEffect(() => {\r\n if (!isAuthenticated) {\r\n dispatch({ type: 'RESET' });\r\n }\r\n }, [isAuthenticated]);\r\n\r\n useEffect(() => {\r\n if (state.numbers.length > 0) {\r\n dispatch({ type: 'SET_CURRENT_NUMBER', payload: 0 });\r\n }\r\n }, [state.numbers]);\r\n\r\n const currentNumber = useMemo(() => {\r\n if (state.numbers.length == 0 || state.currentNumberIndex === -1)\r\n return null;\r\n return state.numbers[state.currentNumberIndex];\r\n }, [state.numbers, state.currentNumberIndex]);\r\n\r\n const setCurrentNumber = useCallback(\r\n newNumber => {\r\n if (state.currentNumberIndex === -1 || !newNumber) return;\r\n\r\n if (typeof newNumber === 'string') {\r\n const numberIndex = state.numbers.findIndex(\r\n number => number.msisdn === newNumber,\r\n );\r\n if (numberIndex != -1) {\r\n dispatch({ type: 'SET_CURRENT_NUMBER', payload: numberIndex });\r\n }\r\n } else {\r\n const numberIndex = state.numbers.findIndex(\r\n number => number.msisdn === newNumber.target.value,\r\n );\r\n if (numberIndex != -1) {\r\n dispatch({ type: 'SET_CURRENT_NUMBER', payload: numberIndex });\r\n }\r\n }\r\n },\r\n [state.currentNumberIndex, state.numbers],\r\n );\r\n\r\n const getNumbers = useCallback(async () => {\r\n try {\r\n dispatch({ type: 'REQUEST_NUMBERS' });\r\n const { data } = await api.get('/msisdn');\r\n dispatch({ type: 'REQUEST_NUMBERS_SUCCESS', payload: data });\r\n } catch (error) {\r\n dispatch({ type: 'REQUEST_NUMBERS_ERROR' });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { NumbersState, NumbersActions } from './props';\r\n\r\nexport const numbersInitialState: NumbersState = {\r\n numbers: [],\r\n currentNumberIndex: -1,\r\n requestNumbersStatus: REQUEST_STATUS_INITIAL,\r\n};\r\n\r\nexport function numbersReducer(\r\n state: NumbersState,\r\n action: NumbersActions,\r\n): NumbersState {\r\n switch (action.type) {\r\n case 'REQUEST_NUMBERS':\r\n return {\r\n ...state,\r\n currentNumberIndex: -1,\r\n requestNumbersStatus: REQUEST_STATUS_LOADING,\r\n numbers: [],\r\n };\r\n case 'REQUEST_NUMBERS_SUCCESS':\r\n return {\r\n ...state,\r\n numbers: action.payload,\r\n requestNumbersStatus: REQUEST_STATUS_SUCCESS,\r\n };\r\n case 'REQUEST_NUMBERS_ERROR':\r\n return {\r\n ...state,\r\n requestNumbersStatus: REQUEST_STATUS_ERROR,\r\n numbers: [],\r\n };\r\n case 'SET_CURRENT_NUMBER':\r\n return {\r\n ...state,\r\n currentNumberIndex: action.payload,\r\n };\r\n case 'RESET':\r\n return numbersInitialState;\r\n default:\r\n return state;\r\n }\r\n}\r\n","import React, {\r\n FC,\r\n createContext,\r\n useContext,\r\n useCallback,\r\n useState,\r\n} from 'react';\r\nimport { Toast, ToastType, ToastContextData } from './props';\r\n\r\nexport const toastContextDefaultValue = {} as ToastContextData;\r\nexport const ToastContext = createContext(toastContextDefaultValue);\r\n\r\nexport const ToastProvider: FC = props => {\r\n const { children } = props;\r\n\r\n const [toasts, setToasts] = useState([]);\r\n\r\n const showToast = useCallback((newToast: Omit) => {\r\n const id = new Date().getTime().toString();\r\n const toast = { ...newToast, id };\r\n setToasts([toast]);\r\n }, []);\r\n\r\n const removeToast = useCallback(() => {\r\n setToasts([]);\r\n }, []);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import React, {\r\n createContext,\r\n useCallback,\r\n useEffect,\r\n FC,\r\n useMemo,\r\n useReducer,\r\n} from 'react';\r\nimport { api } from '../../api';\r\nimport { useAuth } from '../auth';\r\nimport { useCurrentMSISDN } from '../number';\r\nimport {\r\n UsageContextData,\r\n UsageContextProviderProps,\r\n UsageItem,\r\n UsageResponse,\r\n} from './props';\r\nimport { usageReducer, usageInitialState } from './reducer';\r\n\r\nexport const usageContextDefaultValue = {} as UsageContextData;\r\nexport const UsageContext = createContext(usageContextDefaultValue);\r\n\r\nexport const UsageProvider: FC = props => {\r\n const { children, initialProps } = props;\r\n\r\n const [state, dispatch] = useReducer(\r\n usageReducer,\r\n initialProps || usageInitialState,\r\n );\r\n\r\n const { isAuthenticated } = useAuth();\r\n\r\n useEffect(() => {\r\n if (!isAuthenticated) {\r\n dispatch({ type: 'RESET' });\r\n }\r\n }, [isAuthenticated]);\r\n\r\n const currentMsisdn = useCurrentMSISDN();\r\n useEffect(() => {\r\n if (currentMsisdn) {\r\n getUsage(currentMsisdn);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [currentMsisdn]);\r\n\r\n const orderItems = useCallback((items: UsageItem[]) => {\r\n if (items.length == 0) return [];\r\n const networkIndex = items.findIndex(\r\n item => item.name.toUpperCase() == 'DADOS',\r\n );\r\n\r\n const ordered = items\r\n .filter((_, index) => index != networkIndex)\r\n .sort((a, b) => {\r\n const nameA = a.type.toUpperCase();\r\n const nameB = b.type.toUpperCase();\r\n\r\n if (nameA > nameB) return 1;\r\n if (nameA < nameB) return -1;\r\n\r\n return 0;\r\n });\r\n return [items[networkIndex], ...ordered];\r\n }, []);\r\n\r\n const getUsage = useCallback(\r\n async (msisdn: string) => {\r\n try {\r\n dispatch({ type: 'REQUEST_USAGE' });\r\n\r\n const { data } = await api.get('/msisdn/usage', {\r\n params: { msisdn },\r\n });\r\n\r\n data.itens = orderItems(data.itens);\r\n\r\n dispatch({ type: 'REQUEST_USAGE_SUCCESS', payload: data });\r\n } catch (e) {\r\n dispatch({ type: 'REQUEST_USAGE_ERROR' });\r\n }\r\n },\r\n [orderItems],\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { UsageActions, UsageState } from './props';\r\n\r\nexport const usageInitialState: UsageState = {\r\n requestUsageStatus: REQUEST_STATUS_INITIAL,\r\n usage: null,\r\n updatedAt: null,\r\n};\r\n\r\nexport function usageReducer(\r\n state: UsageState,\r\n action: UsageActions,\r\n): UsageState {\r\n switch (action.type) {\r\n case 'REQUEST_USAGE':\r\n return {\r\n ...state,\r\n requestUsageStatus: REQUEST_STATUS_LOADING,\r\n usage: null,\r\n updatedAt: null,\r\n };\r\n\r\n case 'REQUEST_USAGE_SUCCESS':\r\n return {\r\n ...state,\r\n requestUsageStatus: REQUEST_STATUS_SUCCESS,\r\n usage: action.payload,\r\n updatedAt: new Date(),\r\n };\r\n\r\n case 'REQUEST_USAGE_ERROR':\r\n return {\r\n ...state,\r\n requestUsageStatus: REQUEST_STATUS_ERROR,\r\n usage: null,\r\n updatedAt: null,\r\n };\r\n case 'RESET':\r\n return usageInitialState;\r\n default:\r\n return state;\r\n }\r\n}\r\n","import React, {\r\n createContext,\r\n useCallback,\r\n FC,\r\n useReducer,\r\n useMemo,\r\n} from 'react';\r\nimport { api } from '../../api';\r\nimport {\r\n RechargeDataResponse,\r\n RechargesContextData,\r\n RechargesContextProviderProps,\r\n RechargesResponse,\r\n SaveCardData,\r\n} from './props';\r\nimport { rechargesReducer, rechargesInitialState } from './reducer';\r\n\r\nexport const rechargesContextDefaultValue = {} as RechargesContextData;\r\nexport const RechargesContext = createContext(rechargesContextDefaultValue);\r\n\r\nexport const RechargesProvider: FC = props => {\r\n const { children, initialProps } = props;\r\n\r\n const [state, dispatch] = useReducer(\r\n rechargesReducer,\r\n initialProps || rechargesInitialState,\r\n );\r\n\r\n const getRecharges = useCallback(async () => {\r\n try {\r\n dispatch({ type: 'REQUEST_RECHARGES' });\r\n if (\r\n state.rechargeMeta != null &&\r\n state.rechargeMeta.page > state.rechargeMeta.maxPages\r\n ) {\r\n return;\r\n }\r\n\r\n const { data } = await api.get('/recharge', {\r\n params: {\r\n page: (state.rechargeMeta?.page || 0) + 1,\r\n },\r\n });\r\n\r\n dispatch({ type: 'REQUEST_RECHARGES_SUCCESS', payload: data });\r\n } catch (error) {\r\n dispatch({ type: 'REQUEST_RECHARGES_ERROR' });\r\n }\r\n }, [state.rechargeMeta]);\r\n\r\n const addCardToSave = useCallback((card: SaveCardData) => {\r\n dispatch({ type: 'ADD_CARD_TO_SAVE', payload: card });\r\n }, []);\r\n\r\n const addRechargeResult = useCallback((card: RechargeDataResponse) => {\r\n dispatch({ type: 'ADD_RECHARGE_RESPONSE', payload: card });\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n dispatch({ type: 'RESET' });\r\n }, []);\r\n\r\n const clearCardToSave = useCallback(() => {\r\n dispatch({ type: 'CLEAR_CARD_TO_SAVE' });\r\n }, []);\r\n\r\n const clearRechargeResponse = useCallback(() => {\r\n dispatch({ type: 'CLEAR_RECHARGE_RESPONSE' });\r\n }, []);\r\n\r\n const value = useMemo(\r\n () => ({\r\n ...state,\r\n getRecharges,\r\n reset,\r\n addCardToSave,\r\n addRechargeResult,\r\n clearCardToSave,\r\n clearRechargeResponse,\r\n }),\r\n [\r\n addCardToSave,\r\n addRechargeResult,\r\n clearCardToSave,\r\n clearRechargeResponse,\r\n getRecharges,\r\n reset,\r\n state,\r\n ],\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import {\r\n REQUEST_STATUS_ERROR,\r\n REQUEST_STATUS_LOADING,\r\n REQUEST_STATUS_SUCCESS,\r\n REQUEST_STATUS_INITIAL,\r\n} from '../../api';\r\nimport { RechargesState, RechargesActions } from './props';\r\n\r\nexport const rechargesInitialState: RechargesState = {\r\n recharges: [],\r\n requestRechargesStatus: REQUEST_STATUS_INITIAL,\r\n rechargeMeta: null,\r\n usedCard: null,\r\n rechargeResult: null,\r\n};\r\n\r\nexport function rechargesReducer(\r\n state: RechargesState,\r\n action: RechargesActions,\r\n): RechargesState {\r\n switch (action.type) {\r\n case 'REQUEST_RECHARGES':\r\n return {\r\n ...state,\r\n requestRechargesStatus: REQUEST_STATUS_LOADING,\r\n };\r\n case 'REQUEST_RECHARGES_SUCCESS': {\r\n return {\r\n ...state,\r\n requestRechargesStatus: REQUEST_STATUS_SUCCESS,\r\n recharges: [...state.recharges, ...action.payload.data],\r\n rechargeMeta: action.payload.meta,\r\n };\r\n }\r\n case 'REQUEST_RECHARGES_ERROR':\r\n return {\r\n ...state,\r\n requestRechargesStatus: REQUEST_STATUS_ERROR,\r\n };\r\n case 'ADD_CARD_TO_SAVE':\r\n return {\r\n ...state,\r\n usedCard: action.payload,\r\n };\r\n case 'CLEAR_CARD_TO_SAVE':\r\n return {\r\n ...state,\r\n usedCard: null,\r\n };\r\n case 'ADD_RECHARGE_RESPONSE':\r\n return {\r\n ...state,\r\n rechargeResult: action.payload,\r\n };\r\n case 'CLEAR_RECHARGE_RESPONSE':\r\n return {\r\n ...state,\r\n rechargeResult: null,\r\n };\r\n case 'RESET':\r\n return rechargesInitialState;\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AuthToken } from '../../interfaces';\r\nimport { AuthStorage } from './props';\r\n\r\nconst AUTH_STORAGE_KEY = '@Brisamovel:token';\r\n\r\nexport async function getToken(storage: AuthStorage) {\r\n const rawToken = await storage.getItem(AUTH_STORAGE_KEY);\r\n if (!rawToken) return null;\r\n const token = JSON.parse(rawToken);\r\n if (!token) return null;\r\n return token as AuthToken;\r\n}\r\n\r\nexport async function setToken(storage: AuthStorage, token: AuthToken | null) {\r\n if (token) {\r\n await storage.setItem(AUTH_STORAGE_KEY, JSON.stringify(token));\r\n } else {\r\n await storage.removeItem(AUTH_STORAGE_KEY);\r\n }\r\n}\r\n\r\nexport async function clearToken(storage: AuthStorage) {\r\n await storage.removeItem(AUTH_STORAGE_KEY);\r\n await storage.getItem(AUTH_STORAGE_KEY);\r\n}\r\n","import React, {\n createContext,\n useCallback,\n useEffect,\n FC,\n useMemo,\n useReducer,\n memo,\n} from 'react';\nimport base64 from 'base-64';\nimport { api } from '../../api';\nimport { useModals } from '../modals';\nimport { setupInterceptors } from './interceptors';\nimport { AuthProviderProps } from './props';\nimport { AuthContextData, LoginCredentials } from './props';\nimport { authReducer, authInitialState } from './reducer';\nimport { clearToken, getToken, setToken } from './storage';\n\nexport const defaultValue = {} as AuthContextData;\nexport const AuthContext = createContext(defaultValue);\n\nexport const AuthProvider: FC = memo(props => {\n const { children, storage } = props;\n\n const [state, dispatch] = useReducer(authReducer, authInitialState);\n const { closeModal } = useModals();\n\n const isAuthenticated = useMemo(\n () => state.user != null && state.token != null,\n [state.user, state.token],\n );\n\n const signOut = useCallback(async () => {\n closeModal();\n await clearToken(storage);\n dispatch({ type: 'SIGN_OUT' });\n }, [closeModal, storage]);\n\n const getProfile = useCallback(async () => {\n try {\n const token = await getToken(storage);\n\n dispatch({ type: 'REQUEST_PROFILE' });\n const { data } = await api.get('/customer', {\n headers: { authorization: `Bearer ${token?.accessToken}` },\n });\n dispatch({ type: 'REQUEST_PROFILE_SUCCESS', payload: data });\n } catch (e) {\n dispatch({ type: 'REQUEST_PROFILE_ERROR' });\n }\n }, [storage]);\n\n const signIn = useCallback(\n async (credentials: LoginCredentials) => {\n try {\n dispatch({ type: 'REQUEST_USER' });\n const { email, password } = credentials;\n const authorization = `Basic ${base64.encode(email + ':' + password)}`;\n\n const response = await api.get('/auth/login', {\n headers: {\n authorization,\n },\n });\n await setToken(storage, response.data);\n\n dispatch({ type: 'REQUEST_USER_SUCCESS', payload: response.data });\n } catch (error) {\n if (error.response) {\n dispatch({\n type: 'REQUEST_USER_ERROR',\n payload: 'Email ou Senha incorretos',\n });\n } else {\n dispatch({ type: 'REQUEST_USER_ERROR', payload: 'Ocorreu um erro' });\n }\n }\n },\n [storage],\n );\n\n useEffect(() => {\n async function restoreToken() {\n const token = await getToken(storage);\n dispatch({ type: 'RESTORE_TOKEN', payload: token });\n }\n\n restoreToken();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // console.log(`Bearer ${state.token?.accessToken}`);\n\n api.defaults.headers.authorization = `Bearer ${state.token?.accessToken}`;\n\n const interceptors = setupInterceptors({\n token: state.token,\n onLogout: signOut,\n onTokenChange: async token => {\n await setToken(storage, token);\n dispatch({ type: 'SET_TOKEN', payload: token });\n },\n });\n\n return () => {\n api.interceptors.response.eject(interceptors.responseInterceptor);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.token]);\n\n const value = useMemo(\n () => ({ ...state, isAuthenticated, signIn, signOut, getProfile }),\n [getProfile, isAuthenticated, signIn, signOut, state],\n );\n\n return {children};\n});\n","import { api } from '../../api';\r\nimport { AuthToken } from '../../interfaces';\r\n\r\ninterface SetupInterceptorsOptions {\r\n onLogout(): void;\r\n token: AuthToken | null;\r\n onTokenChange(token: AuthToken): Promise;\r\n}\r\n\r\nexport function setupInterceptors({\r\n onLogout,\r\n token,\r\n onTokenChange,\r\n}: SetupInterceptorsOptions) {\r\n const responseInterceptor = api.interceptors.response.use(\r\n response => response,\r\n async error => {\r\n const originalRequest = error.config;\r\n\r\n if (!originalRequest.url?.includes('login')) {\r\n if (error.response?.status === 401 && !token?.accessToken) {\r\n onLogout();\r\n return Promise.reject(error);\r\n }\r\n\r\n if (error.response?.status === 401 && token?.accessToken) {\r\n const { data } = await api.post('/auth/refresh-session', {\r\n refreshToken: token?.refreshToken,\r\n });\r\n if (data) {\r\n // 1) put token to LocalStorage\r\n await onTokenChange(data);\r\n\r\n // 2) Change Authorization header\r\n originalRequest.headers.authorization = `Bearer ${data.accessToken}`;\r\n // 3) return originalRequest object with Axios.\r\n return api(originalRequest);\r\n }\r\n }\r\n }\r\n return Promise.reject(error);\r\n },\r\n );\r\n\r\n return {\r\n responseInterceptor,\r\n };\r\n}\r\n"],"sourceRoot":""}