{"version":3,"sources":["components/Shared/Toast/global.tsx","components/Shared/Toast/index.tsx","formatters/errorMessage.ts","components/Shared/PageLoading.tsx","services/storage.ts","services/token.ts","formatters/apiResponse.ts","formatters/date.ts","components/Shared/PermissionHide.tsx","components/Shared/Alert/global.tsx","components/Shared/Alert/index.tsx","errors/serviceError.ts","errors/api.ts","services/api.ts","components/Shared/Pagination/EmptyAndErrorMessages.tsx","components/Shared/IconMessage.tsx","helpers/rxjs-operators/bindComponent.ts","components/Shared/PermissionRoute.tsx","assets/theme/context.tsx","components/Shared/ErrorMessage.tsx","helpers/rxjs-operators/cache.ts","helpers/rxjs-operators/tapSubscrible.ts","yupLocale.tsx","assets/theme/overrides.tsx","assets/theme/props.tsx","assets/theme/variables.tsx","assets/theme/index.tsx","components/Pages/index.tsx","services/loader.ts","components/Shared/Loader.tsx","App.tsx","index.tsx","services/log.ts","helpers/rxjs-operators/logError.ts","services/auth.ts","settings.tsx"],"names":["globalToast","lastPromise","Promise","resolve","async","showGlobalToast","message","error","timeout","Error","then","setTimeout","ToastGlobalProvider","memo","opened","setOpened","useState","params","setParams","promiseResolve","setPromiseResolve","handleShow","useCallback","result","handleClose","useEffect","React","createElement","Toast","Object","assign","onClose","useStyles","makeStyles","theme","wrapper","breakpoints","up","top","left","right","contentError","background","palette","main","close","width","spacing","height","props","classes","anchorOrigin","vertical","horizontal","isError","useMemo","errorMessageFormatter","event","reason","Snackbar","open","autoHideDuration","className","ContentProps","action","IconButton","key","color","onClick","CloseIcon","Global","show","TOAST_DEFAULT_TIMEOUT","TOAST_ERROR_TIMEOUT","err","_err$data","console","log","status","400","401","403","404","422","data","root","minWidth","minHeight","display","flexDirection","justifyContent","card","maxWidth","alignItems","loader","primary","dark","PageLoading","Grid","container","justify","CircularProgress","size","storageService","get","Rx","pipe","map","localStorage","getItem","apiResponseFormatter","JSON","parse","catchError","set","value","setItem","stringify","clear","regexp","keys","filter","k","test","forEach","removeItem","tokenService","constructor","token$","this","ReplaySubject","logError","subscribe","token","next","getToken","distinctUntilChanged","setToken","tap","clearToken","decode","atob","split","Date","now","exp","obj","Array","isArray","i","format","arguments","length","undefined","date","dateFnsParse","locale","dateFnsIsValid","dateParse","reduce","acc","PermissionHide","canAccess","useObservable","roles","role","authService","inverse","children","globalAlert","showGlobalAlert","AlertGlobalProvider","confirmation","title","ok","Alert","useStyle","zIndex","content","handleOk","handleCancel","Dialog","keepMounted","TransitionComponent","Transition","DialogTitle","DialogContent","DialogContentText","DialogActions","Button","autoFocus","confirm","forwardRef","ref","Slide","direction","ServiceError","extraData","ignoreLog","super","ApiError","request","axiosResponse","response","config","baseURL","url","method","headers","apiService","apiEndpoint","options","_ref","post","body","_ref2","put","_ref3","delete","_ref4","upload","send","_ref5","retry","progress$","first","Authorization","switchMap","FormData","axios","onUploadProgress","progress","loaded","total","res","catch","checkNewToken","startWith","combineLatest","complete","handleError","shouldOpenLogin","openLogin","getUser","skip","user","API_ENDPOINT","EmptyAndErrorMessages","hasData","loading","colSpan","onTryAgain","Fragment","TableRow","TableCell","ErrorMessage","tryAgain","IconMessage","icon","AlertCircleOutlineIcon","textAlign","padding","margin","opacity","Typography","variant","BindComponentOperator","component","call","subscriber","source","subscription","bindComponentSubscriptions","originalWillUnmount","componentWillUnmount","s","unsubscribe","push","PermissionRoute","Route","search","location","searchParams","pop","param","arr","curr","state","authParams","componentDidMount","isAuthenticated","lift","setState","u","h","login","render","Table","window","href","ThemeContext","createContext","button","marginTop","AlertCircleIcon","globalCacheService","keysCreated","peddingCache","cache","MemoryCache","CacheOperator","refresh","persist","expirationMinutes","cacheClean","from","all","initalStream$","of","expireAt","getTime","toISOString","shareReplay","setLocale","mixed","default","required","oneOf","notOneOf","string","min","max","email","trim","lowercase","uppercase","number","lessThan","moreThan","positive","negative","integer","array","overrides","MuiTablePagination","input","marginLeft","marginRight","selectRoot","select","paddingRight","MuiExpansionPanel","marginBottom","MuiExpansionPanelDetails","MuiDialogContent","maxHeight","MuiDrawer","paperAnchorDockedLeft","borderRight","MuiFormControl","marginNormal","MuiFormHelperText","contained","MuiTypography","body1","lineHeight","gutterBottom","MuiFormControlLabel","MuiTextField","variables","drawerWidthFull","drawerWidthMini","headerHeight","headerHeightUpSm","tabbarHeight","contentPadding","contentPaddingUpSm","boxShadow","colors","facebook","google","themes","light","createMuiTheme","type","contrastText","secondary","AdminPage","lazy","NewPasswordPage","Pages","renderEmpty","renderRedirect","Redirect","to","Suspense","fallback","BrowserRouter","Switch","path","exact","loaderService","refs","BehaviorSubject","shouldShow","asObservable","includes","hide","r","paper","outline","backgroundColor","Loader","visible","paperProps","PaperProps","Dialogs","App","_localStorage$getItem","currentTheme","setCurrentTheme","themeContext","toogleTheme","newTheme","Provider","MuiThemeProvider","CssBaseline","ReactDOM","document","getElementById","navigator","serviceWorker","ready","registration","unregister","logService","sentryKey","Sentry","dsn","environment","ENV","setUser","id","toString","username","extra","breadcrumb","category","IS_DEVELOPMENT","SENTRY_KEY","showToaster","LogErrorOperator","LogErrorSubscriber","Subscriber","destination","_next","_complete","_error","api","user$","openLogin$","openChangePassword$","a","b","password","accessToken","logout","sendResetPassword","resetPassword","openChangePassword","closeChangePassword","shouldOpenChangePassword","changePassword","currentPassword","newPassword","_len","_key","some","process","REACT_APP_CDN_ENDPOINT"],"mappings":"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","file":"static/js/main.f9002fc8.chunk.js","sourcesContent":["import React, { useCallback, memo, useState, useEffect } from 'react';\n\nimport Toast from '.';\n\ninterface IParams {\n message: string;\n error: any;\n timeout?: number;\n}\n\nlet lastPromise = Promise.resolve();\nlet globalToast: (message: string, error: any, timeout?: number) => Promise;\n\nconst ToastGlobalProvider = memo(() => {\n const [opened, setOpened] = useState(false);\n const [params, setParams] = useState();\n const [promiseResolve, setPromiseResolve] = useState<() => void>();\n\n const handleShow = useCallback((message: string, error: any, timeout?: number): Promise => {\n const result = new Promise(resolve => {\n setPromiseResolve(() => resolve);\n setOpened(true);\n setParams({ message, error, timeout });\n });\n\n result.then(() => setOpened(false));\n return result;\n }, []);\n\n const handleClose = useCallback(() => {\n promiseResolve && promiseResolve();\n }, [promiseResolve]);\n\n useEffect(() => {\n if (globalToast) throw new Error('Only one Toast.Global can be initialized');\n globalToast = handleShow;\n }, [handleShow]);\n\n return ;\n});\n\nexport async function showGlobalToast(message: string, error: any, timeout?: number): Promise {\n if (!globalToast) throw new Error('Please, initialize an Toast.Global before');\n\n //prevent an alert to overhide another\n return (lastPromise = lastPromise.then(async () => {\n await new Promise(resolve => setTimeout(() => resolve(), 300));\n return globalToast(message, error, timeout);\n }));\n}\n\nexport default ToastGlobalProvider;\n","import IconButton from '@material-ui/core/IconButton';\nimport Snackbar, { SnackbarOrigin } from '@material-ui/core/Snackbar';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\nimport { errorMessageFormatter } from 'formatters/errorMessage';\nimport CloseIcon from 'mdi-react/CloseIcon';\nimport React, { ComponentType, memo, MemoExoticComponent, useCallback, useMemo, useState } from 'react';\nimport { TOAST_DEFAULT_TIMEOUT, TOAST_ERROR_TIMEOUT } from 'settings';\n\nimport ToastGlobalProvider, { showGlobalToast } from './global';\n\ninterface IProps {\n opened: boolean;\n message?: string;\n timeout?: number;\n error?: Error;\n onClose: () => void;\n}\n\ntype ToastComponent = MemoExoticComponent> & {\n Global?: typeof ToastGlobalProvider;\n\n show?(message: string, timeout?: number): Promise;\n error?(error: any): Promise;\n};\n\nconst useStyles = makeStyles(theme => ({\n wrapper: {\n [theme.breakpoints.up('sm')]: {\n top: '24px',\n left: 'auto',\n right: '24px'\n }\n },\n contentError: {\n background: theme.palette.error.main\n },\n close: {\n width: theme.spacing(4),\n height: theme.spacing(4)\n }\n}));\n\nconst Toast: ToastComponent = memo((props: IProps) => {\n const classes = useStyles(props);\n const [anchorOrigin] = useState({ vertical: 'top', horizontal: 'right' });\n\n const [message, isError] = useMemo(() => {\n return props.message ? [props.message, false] : [errorMessageFormatter(props.error), true];\n }, [props.error, props.message]);\n\n const handleClose = useCallback(\n (event: any, reason?: string) => {\n if (reason === 'clickaway') return;\n props.onClose();\n },\n [props]\n );\n\n return (\n {message}}\n className={classes.wrapper}\n ContentProps={{ className: isError ? classes.contentError : null }}\n action={[\n \n \n \n ]}\n />\n );\n});\n\nToast.Global = ToastGlobalProvider;\n\nToast.show = (message: string, timeout?: number) => {\n return showGlobalToast(message, null, timeout || TOAST_DEFAULT_TIMEOUT);\n};\n\nToast.error = (error: any) => {\n return showGlobalToast(null, error, TOAST_ERROR_TIMEOUT);\n};\n\nexport default Toast;\n","export function errorMessageFormatter(err: any): string {\n console.log(typeof err, err);\n if (typeof err === 'string') {\n return err;\n }\n\n const status: any = {\n '-1': 'Servidor não encontrado',\n 400: 'Dados inválidos',\n 401: 'Sem permissão de acesso',\n 403: 'Sem permissão de acesso',\n 404: 'Não encontrado',\n 422: 'Dados inválidos'\n };\n switch ((err || {}).message) {\n case 'no-internet':\n case 'NETWORK_ERROR':\n return 'Sem conexão com a internet';\n case 'zipcode-not-found':\n return 'CEP não encontrado';\n\n case 'api-error':\n if (err.status === -1) {\n return 'Não conseguimos se comunicar com o servidor';\n }\n\n if (err.status === 400) {\n switch ((err?.data || {}).message) {\n case 'email-unavailable':\n return 'Email já está em uso';\n case 'username-unavailable':\n return 'Nome de usuário já está em uso';\n case 'document-unavailable':\n return 'Documento já está em uso';\n case 'invalid-credentials':\n return 'Credenciais inválidas';\n case 'bank-file-processing':\n return 'Não é possível enviar um arquivo de uma empresa enquanto processa um outro.';\n case 'non-standard-file':\n return 'Arquivo fora dos padrões CNAB 240';\n case 'no-payment-slips-from-return':\n return 'Nenhum dos primeiros retornos deste arquivo existem no sistema. Certifique-se de ter enviado o arquivo de REMESSA antes!';\n default:\n return `Dados inválidos: ${err.data?.message || ''}`;\n }\n }\n\n if (err.status === 403) {\n switch ((err?.data || {}).message) {\n case 'user-has-no-person':\n return 'O usuário não administra nenhuma pessoa física ou jurídica';\n case 'user-cant-access-person':\n return 'O usuário não tem acesso à esta pessoa';\n case 'not-permited':\n return 'Operação não permitida';\n }\n }\n\n if (err.status === 404) {\n switch ((err?.data || {}).message) {\n case 'issuer-not-found':\n return 'Emitente não encontrado';\n case 'no-bank-contract-found':\n return 'Contrato Bancário não encontrado';\n case 'issuer-has-no-addresses':\n return 'O emitente não possui endereços cadastrados';\n }\n }\n\n if (err.status === 409) {\n switch ((err?.data || {}).message) {\n case 'roles-required':\n return 'Função do usuário obrigatória';\n case 'invalid-roles':\n return 'Função inválida';\n case 'not-allowed-remove-current-user':\n return 'Não é permitido remover o próprio usuário';\n case 'bank-file-already-processed':\n return 'Este arquivo já foi enviado anteriormente...';\n case 'bank-file-processing':\n return 'Já existe um arquivo desta empresa sendo processado';\n case 'not-allowed-remove-sysAdmin':\n return 'Não é permitido remover o Sys Admin';\n case 'invalid-credentials':\n return 'Credenciais inválidas';\n case 'wrong-current-password':\n return 'Senha atual errada';\n case 'token-type-not-match':\n return 'Tipo do token não compatível';\n case 'token-expired':\n return 'Token expirado';\n case 'token-invalid':\n return 'Token inválido';\n case 'changing-folder-forbidden':\n return 'Mudança de pastas não permitida';\n }\n }\n\n return status[err.status] || 'Algo deu errado...';\n default:\n return 'Algo deu errado...';\n }\n}\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { CircularProgress } from '@material-ui/core';\nimport Grid from '@material-ui/core/Grid';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n background: 'transparent',\n minWidth: '100%',\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n },\n card: {\n maxWidth: '40%',\n minHeight: '20vh',\n display: 'flex',\n alignItems: 'center',\n background: 'transparent'\n },\n loader: {\n width: 70,\n height: 70,\n color: theme.palette.primary.dark\n }\n}));\n\nconst PageLoading = () => {\n const classes = useStyles();\n return (\n \n
\n \n
\n
\n );\n};\nexport default PageLoading;\n","import * as Rx from 'rxjs';\n\nimport { apiResponseFormatter } from '../formatters/apiResponse';\nimport { catchError, map } from 'rxjs/operators';\n\nexport class StorageService {\n public get(key: string): Rx.Observable {\n return Rx.of(true).pipe(\n map(() => localStorage.getItem(key)),\n map(data => (data ? apiResponseFormatter(JSON.parse(data)) : null)),\n catchError(() => Rx.of(null))\n );\n }\n\n public set(key: string, value: T): Rx.Observable {\n return Rx.of(true).pipe(\n map(() => localStorage.setItem(key, JSON.stringify(value))),\n map(() => value)\n );\n }\n\n public clear(regexp: RegExp): Rx.Observable {\n return Rx.of(Object.keys(localStorage)).pipe(\n map(keys => {\n if (regexp) {\n keys = keys.filter(k => regexp.test(k));\n }\n\n keys.forEach(k => localStorage.removeItem(k));\n return null;\n })\n );\n }\n}\n\nconst storageService = new StorageService();\nexport default storageService;\n","import { Observable, ReplaySubject } from 'rxjs';\n\nimport storageService, { StorageService } from './storage';\nimport { logError } from 'helpers/rxjs-operators/logError';\nimport { distinctUntilChanged, tap, map } from 'rxjs/operators';\n\nexport class TokenService {\n private token$: ReplaySubject;\n\n constructor(private storageService: StorageService) {\n this.token$ = new ReplaySubject(1);\n\n this.storageService\n .get('authToken')\n .pipe(logError())\n .subscribe(token => this.token$.next(token));\n }\n\n public getToken(): Observable {\n return this.token$.pipe(distinctUntilChanged());\n }\n\n public setToken(token: string): Observable {\n return this.storageService.set('authToken', token).pipe(tap(() => this.token$.next(token)));\n }\n\n public clearToken(): Observable {\n return this.setToken(null).pipe(map(() => null));\n }\n\n public decode(token: string): T {\n try {\n const data = JSON.parse(atob(token.split('.')[1]));\n const currentTime = Date.now() / 1000;\n\n return currentTime > data.exp ? null : data;\n } catch (err) {\n return null;\n }\n }\n}\n\nconst tokenService = new TokenService(storageService);\nexport default tokenService;\n","import { dateParse } from 'formatters/date';\n\nexport function apiResponseFormatter(obj: T): T {\n if (!obj) return obj;\n\n if (Array.isArray(obj)) {\n return obj.map(i => apiResponseFormatter(i)) as any;\n }\n\n if (typeof obj === 'string' && isValidDateString(obj)) {\n return dateParse(obj) as any;\n }\n\n if (typeof obj === 'object' && !(obj instanceof Date)) {\n return Object.keys(obj).reduce((acc, key) => {\n acc[key] = apiResponseFormatter(obj[key]);\n return acc;\n }, {}) as any;\n }\n return obj;\n}\n\nfunction isValidDateString(value: any): boolean {\n return /^(\\d{4})-(\\d{2})-(\\d{2})([T\\s](\\d{2}):(\\d{2}):(\\d{2})(\\.(\\d+)(Z)?)?)?$/.test(value);\n}\n","import dateFnsFormat from 'date-fns/format';\nimport dateFnsIsValid from 'date-fns/isValid';\nimport locale from 'date-fns/locale/pt-BR';\nimport dateFnsParse from 'date-fns/parse';\n\nexport function dateParse(value: any, format: string = null): Date {\n if (!value) return value;\n if (value instanceof Date) return value;\n\n const date = !format ? new Date(value) : dateFnsParse(value, format, new Date(), { locale });\n if (!dateFnsIsValid(date)) return value;\n\n return date;\n}\n\nexport function dateFormat(date: Date, format: string = 'dd/MM/yyyy'): string {\n return dateFnsFormat(date, format, { locale });\n}\n","import { logError } from 'helpers/rxjs-operators/logError';\nimport { enRoles } from 'interfaces/models/user/user';\nimport { memo, Props } from 'react';\nimport { useObservable } from 'react-use-observable';\nimport authService from 'services/auth';\n\ninterface IProps extends Props<{}> {\n passIfNull?: boolean;\n role?: enRoles | enRoles[];\n inverse?: boolean;\n}\n\nconst PermissionHide = memo(props => {\n const [canAccess] = useObservable(() => {\n const roles = Array.isArray(props.role) ? props.role : props.role ? [props.role] : [];\n return authService.canAccess(...roles).pipe(logError());\n }, [props.role]);\n\n if (canAccess === undefined || canAccess === null) {\n return null;\n }\n\n if (props.inverse && !canAccess) {\n return props.children as any;\n }\n\n if (props.inverse || !canAccess) {\n return null;\n }\n\n return props.children as any;\n});\n\nexport default PermissionHide;\n","import React, { memo, useCallback, useEffect, useState } from 'react';\n\nimport Alert, { IAlertShowParams } from '.';\n\nlet lastPromise = Promise.resolve(false);\nlet globalAlert: (params: IAlertShowParams) => Promise;\n\nconst AlertGlobalProvider = memo(() => {\n const [opened, setOpened] = useState(false);\n const [params, setParams] = useState();\n const [promiseResolve, setPromiseResolve] = useState<(result: boolean) => void>();\n\n const handleShow = useCallback((params: IAlertShowParams): Promise => {\n const result = new Promise(resolve => {\n setPromiseResolve(() => resolve);\n setOpened(true);\n setParams({ confirmation: false, title: null, ...params });\n });\n\n result.then(() => setOpened(false));\n return result;\n }, []);\n\n const onClose = useCallback(\n (ok: boolean) => {\n promiseResolve && promiseResolve(ok);\n },\n [promiseResolve]\n );\n\n useEffect(() => {\n if (globalAlert) throw new Error('Only one Alert.Global can be initialized');\n globalAlert = handleShow;\n }, [handleShow]);\n\n return ;\n});\n\nexport async function showGlobalAlert(params: IAlertShowParams): Promise {\n if (!globalAlert) throw new Error('Please, initialize an Alert.Global before');\n\n //prevent an alert to overhide another\n return (lastPromise = lastPromise.then(async () => {\n await new Promise(resolve => setTimeout(() => resolve(), 300));\n return globalAlert(params);\n }));\n}\n\nexport default AlertGlobalProvider;\n","import Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Slide from '@material-ui/core/Slide';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\nimport React, { ComponentType, forwardRef, memo, MemoExoticComponent, useCallback } from 'react';\n\nimport AlertGlobalProvider, { showGlobalAlert } from './global';\n\ninterface IProps {\n opened: boolean;\n message: React.ReactNode;\n title?: string;\n confirmation?: boolean;\n global?: boolean;\n onClose: (ok: boolean) => void;\n}\n\nexport interface IAlertShowParams {\n message: React.ReactNode;\n title?: string;\n confirmation?: boolean;\n}\n\ntype AlertComponent = MemoExoticComponent> & {\n Global?: typeof AlertGlobalProvider;\n\n show?(params: string): Promise;\n show?(params: IAlertShowParams): Promise;\n\n confirm?(params: string): Promise;\n confirm?(params: IAlertShowParams): Promise;\n};\n\nconst useStyle = makeStyles({\n root: {\n zIndex: 1600\n },\n content: {\n minWidth: '250px'\n }\n});\n\nconst Alert: AlertComponent = memo((props: IProps) => {\n const classes = useStyle(props);\n\n const handleOk = useCallback(() => props.onClose(true), [props]);\n const handleCancel = useCallback(() => props.onClose(false), [props]);\n\n return (\n \n {props.title || (props.confirmation ? 'Confirmação' : 'Atenção')}\n \n {props.message}\n \n \n {props.confirmation && (\n \n )}\n \n \n \n );\n});\n\nAlert.Global = AlertGlobalProvider;\n\nAlert.show = (params: string | IAlertShowParams) => {\n const paramsData = typeof params === 'string' ? { message: params } : params;\n return showGlobalAlert(paramsData);\n};\n\nAlert.confirm = (params: string | IAlertShowParams) => {\n const paramsData = typeof params === 'string' ? { message: params } : params;\n return showGlobalAlert({ ...paramsData, confirmation: true });\n};\n\nconst Transition = memo(\n forwardRef((props: any, ref: any) => {\n return ;\n })\n);\n\nexport default Alert;\n","export default class ServiceError extends Error {\n public readonly ignoreLog: boolean;\n public readonly extraData: T;\n\n constructor(message: string, extraData?: T, ignoreLog: boolean = true) {\n super(message);\n this.extraData = extraData || null;\n this.ignoreLog = ignoreLog;\n }\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios';\n\nimport ServiceError from './serviceError';\n\ninterface IApiErrorMeta {\n request: {\n baseURL: string;\n url: string;\n method: string;\n params: any;\n data: any;\n headers: any;\n };\n response?: {\n status: number;\n data?: any;\n };\n err: any;\n}\n\nexport default class ApiError extends ServiceError {\n public readonly status: number;\n public readonly data: any;\n\n constructor(request: AxiosRequestConfig, axiosResponse: AxiosResponse, err: any) {\n const response = !axiosResponse\n ? { status: -1, data: '' }\n : { status: axiosResponse.status, data: axiosResponse.data };\n\n delete err.request;\n delete err.response;\n delete err.config;\n\n super(\n 'api-error',\n {\n request: {\n baseURL: request.baseURL,\n url: request.url,\n method: request.method,\n params: request.params,\n data: request.data,\n headers: request.headers\n },\n response,\n err\n },\n response.status < 500\n );\n\n this.status = response.status;\n this.data = response.data;\n }\n}\n","import axios, { AxiosError, AxiosResponse, Method } from 'axios';\r\nimport ApiError from 'errors/api';\r\nimport { apiRequestFormatter } from 'formatters/apiRequest';\r\nimport * as Rx from 'rxjs';\r\nimport {\r\n catchError,\r\n combineLatest,\r\n distinctUntilChanged,\r\n filter,\r\n first,\r\n map,\r\n skip,\r\n startWith,\r\n switchMap,\r\n tap\r\n} from 'rxjs/operators';\r\n\r\nimport { API_ENDPOINT } from '../settings';\r\nimport { apiResponseFormatter } from '../formatters/apiResponse';\r\nimport authService from './auth';\r\nimport tokenService, { TokenService } from './token';\r\n\r\nexport class ApiService {\r\n constructor(private apiEndpoint: string, private tokenService: TokenService) {}\r\n\r\n public get(url: string, params?: any, options?: any): Rx.Observable {\r\n return this.request('GET', url, params, options).pipe(\r\n map(({ response }) => response),\r\n filter(response => response !== undefined)\r\n );\r\n }\r\n\r\n public post(url: string, body: any, options?: any): Rx.Observable {\r\n return this.request('POST', url, body).pipe(\r\n map(({ response }) => response),\r\n filter(response => response !== undefined)\r\n );\r\n }\r\n\r\n public put(url: string, body: any, options?: any): Rx.Observable {\r\n return this.request('PUT', url, body).pipe(\r\n map(({ response }) => response),\r\n filter(response => response !== undefined)\r\n );\r\n }\r\n\r\n public delete(url: string, params?: any, options?: any): Rx.Observable {\r\n return this.request('DELETE', url, params).pipe(\r\n map(({ response }) => response),\r\n filter(response => response !== undefined)\r\n );\r\n }\r\n\r\n public upload(url: string, data: FormData, options?: any) {\r\n return this.request('POST', url, data);\r\n }\r\n\r\n public send(url: string, params?: any) {\r\n \r\n return this.request('GET', url, params).pipe(\r\n map(({ response }) => response),\r\n filter(response => response !== undefined)\r\n )\r\n }\r\n\r\n private request(\r\n method: Method,\r\n url: string,\r\n data: any = null,\r\n options: any = {},\r\n retry: boolean = true\r\n ): Rx.Observable<{ response: T; progress: number }> {\r\n const progress$ = new Rx.BehaviorSubject(0);\r\n \r\n return this.tokenService.getToken().pipe(\r\n first(),\r\n map(token => {\r\n if (!token) return {};\r\n return { Authorization: `Bearer ${token}` };\r\n }),\r\n switchMap(headers => {\r\n if (options?.headers) {\r\n headers = {\r\n ...headers,\r\n 'Content-Type': data instanceof FormData ? 'multipart/form-data' : 'application/json',\r\n ...options.headers\r\n };\r\n delete options.headers;\r\n }\r\n \r\n const response = axios.request({\r\n baseURL: this.apiEndpoint,\r\n url,\r\n method,\r\n headers,\r\n ...(options || {}),\r\n params: method === 'GET' ? apiRequestFormatter(data) : null,\r\n data: method === 'POST' || method === 'PUT' ? apiRequestFormatter(data) : null,\r\n onUploadProgress: (progress: ProgressEvent) => {\r\n const result = progress.loaded / progress.total;\r\n progress$.next(result * 100);\r\n }\r\n });\r\n response.then(res =>{\r\n console.log({res});\r\n }).catch(error => console.log(error))\r\n return response;\r\n }),\r\n tap(() => progress$.next(100)),\r\n switchMap(res => this.checkNewToken(res)),\r\n map(res => apiResponseFormatter(res.data) || null),\r\n startWith(undefined),\r\n combineLatest(progress$.pipe(distinctUntilChanged()), (response, progress) => ({ response, progress })),\r\n catchError(err => {\r\n progress$.complete();\r\n return this.handleError(err, retry);\r\n })\r\n );\r\n }\r\n\r\n private checkNewToken(response: AxiosResponse): Rx.Observable {\r\n const token = response.headers['x-token'];\r\n\r\n if (!token) {\r\n return Rx.of(response);\r\n }\r\n\r\n return this.tokenService.setToken(token).pipe(map(() => response));\r\n }\r\n\r\n private handleError(err: AxiosError, retry: boolean) {\r\n if (!err.config || !err.response) return Rx.throwError(err);\r\n\r\n if (err.response.status !== 401 || !retry) {\r\n return Rx.throwError(new ApiError(err.config, err.response, err));\r\n }\r\n\r\n return authService.shouldOpenLogin().pipe(\r\n first(),\r\n switchMap(opened => {\r\n if (opened) {\r\n return Rx.throwError(new ApiError(err.config, err.response, err));\r\n }\r\n\r\n authService.openLogin();\r\n return authService.getUser();\r\n }),\r\n skip(1),\r\n switchMap(user => {\r\n if (!user) {\r\n return Rx.throwError(new ApiError(err.config, err.response, err));\r\n }\r\n\r\n return this.request(err.config.method, err.config.url, err.config.data || err.config.params, false);\r\n })\r\n );\r\n }\r\n}\r\n\r\nconst apiService = new ApiService(API_ENDPOINT, tokenService);\r\nexport default apiService;\r\n","import TableCell from '@material-ui/core/TableCell';\nimport TableRow from '@material-ui/core/TableRow';\nimport AlertCircleOutlineIcon from 'mdi-react/AlertCircleOutlineIcon';\nimport React, { Fragment, memo } from 'react';\n\nimport ErrorMessage from '../ErrorMessage';\nimport IconMessage from '../IconMessage';\n\ninterface IProps {\n colSpan: number;\n error?: any;\n loading?: boolean;\n hasData: boolean;\n onTryAgain: () => void;\n}\n\nconst EmptyAndErrorMessages = memo((props: IProps) => {\n const { error, hasData, loading, colSpan, onTryAgain } = props;\n\n return (\n \n {loading && !hasData && (\n \n \n Carregando...\n \n \n )}\n {error && !loading && (\n \n \n \n \n \n )}\n {!error && !hasData && !loading && (\n \n \n \n \n \n )}\n \n );\n});\n\nexport default EmptyAndErrorMessages;\n","import makeStyles from '@material-ui/core/styles/makeStyles';\nimport Typography from '@material-ui/core/Typography';\nimport MoreIcon from 'mdi-react/MoreIcon';\nimport React, { memo } from 'react';\n\ninterface IProps {\n icon: typeof MoreIcon;\n message: any;\n}\n\nconst useStyle = makeStyles({\n root: {\n textAlign: 'center',\n padding: '20px',\n width: 350,\n maxWidth: '100%',\n margin: 'auto'\n },\n icon: {\n opacity: 0.7\n }\n});\n\nconst IconMessage = memo((props: IProps) => {\n const classes = useStyle(props);\n\n return (\n
\n \n {props.message}\n
\n );\n});\n\nexport default IconMessage;\n","import { Observable, Operator, Subscriber, Subscription, TeardownLogic } from 'rxjs';\nimport { Component } from 'react';\n\ninterface IBindableComponent {\n bindComponentSubscriptions?: Subscription[];\n componentWillUnmount?(): void;\n}\n\nexport function bindComponent(component: Component) {\n return (source: Observable) => source.lift(new BindComponentOperator(component));\n}\n\nclass BindComponentOperator implements Operator {\n constructor(private component: IBindableComponent) {}\n\n public call(subscriber: Subscriber, source: Observable): TeardownLogic {\n const subscription = source.subscribe(subscriber);\n\n if (!this.component.bindComponentSubscriptions) {\n this.component.bindComponentSubscriptions = [];\n\n const originalWillUnmount = this.component.componentWillUnmount;\n this.component.componentWillUnmount = () => {\n this.component.bindComponentSubscriptions.forEach((s: Subscription) => {\n s.unsubscribe();\n });\n\n originalWillUnmount && originalWillUnmount();\n };\n }\n\n this.component.bindComponentSubscriptions.push(subscription);\n return subscription;\n }\n}\n","import { bindComponent } from 'helpers/rxjs-operators/bindComponent';\nimport { logError } from 'helpers/rxjs-operators/logError';\nimport { enRoles } from 'interfaces/models/user/user';\nimport React, { Fragment } from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\nimport { tap } from 'rxjs/operators';\nimport authService from 'services/auth';\n\nimport PermissionHide from './PermissionHide';\nimport { Table } from '@material-ui/core';\nimport EmptyAndErrorMessages from './Pagination/EmptyAndErrorMessages';\nimport Toast from './Toast';\nimport { errorMessageFormatter } from '../../formatters/errorMessage';\n\ninterface IProps extends RouteProps {\n role?: enRoles;\n}\n\nexport default class PermissionRoute extends Route {\n constructor(props: IProps) {\n super(props);\n const search = props.location.search.split('?');\n let searchParams;\n if (search.length > 1) {\n searchParams = search\n .pop()\n .split('&')\n .map(param => {\n return param.split('=');\n })\n .reduce((arr, curr) => {\n return {\n ...arr,\n [curr[0]]: curr[1]\n };\n }, Object.assign({}));\n }\n\n this.state = { ...(this.state || {}), authParams: searchParams || {} };\n }\n\n componentDidMount() {\n super.componentDidMount && super.componentDidMount();\n\n authService\n .isAuthenticated()\n .pipe(\n logError(),\n bindComponent(this),\n tap(isAuthenticated => {\n if (isAuthenticated) return;\n authService.openLogin();\n })\n )\n .subscribe(isAuthenticated => {\n this.setState({ isAuthenticated });\n });\n\n if (!this.state.isAuthenticated && this.state.authParams && this.state.authParams.u && this.state.authParams.h) {\n authService\n .login(this.state.authParams.u, this.state.authParams.h)\n .pipe(logError(true))\n .subscribe(\n () => {},\n (error: any) => {\n Toast.error(errorMessageFormatter(error));\n }\n );\n }\n }\n\n render() {\n const { isAuthenticated } = this.state;\n\n if (!isAuthenticated) {\n return null;\n }\n\n return (\n \n {super.render()}\n\n \n \n {\n window.location.href = '/';\n }}\n />\n
\n
\n
\n );\n }\n}\n","import React from 'react';\n\nexport type ThemesTypes = 'light' | 'dark';\n\nexport interface IThemeContext {\n currentTheme: ThemesTypes;\n toogleTheme: () => void;\n}\n\nconst ThemeContext = React.createContext(null);\n\nexport default ThemeContext;\n","import Button from '@material-ui/core/Button';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\nimport Typography from '@material-ui/core/Typography';\nimport { errorMessageFormatter } from 'formatters/errorMessage';\nimport AlertCircleIcon from 'mdi-react/AlertCircleIcon';\nimport React, { memo } from 'react';\n\ninterface IProps {\n error: any;\n tryAgain?: () => void;\n}\n\nconst useStyle = makeStyles(theme => ({\n root: {\n textAlign: 'center',\n margin: '20px 0'\n },\n icon: {\n opacity: 0.8,\n color: theme.palette.error.main\n },\n button: {\n marginTop: 20\n }\n}));\n\nconst ErrorMessage = memo((props: IProps) => {\n const { error, tryAgain } = props;\n const classes = useStyle(props);\n\n if (!error) {\n return null;\n }\n\n return (\n
\n \n {errorMessageFormatter(error)}\n\n {tryAgain && (\n \n )}\n
\n );\n});\n\nexport default ErrorMessage;\n","import { from, Observable, of, Operator, Subscriber, Subscription } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\n\nimport { tapSubscribe } from './tapSubscrible';\n\nlet globalCacheService: ICacheService;\nlet keysCreated: string[] = [];\nlet peddingCache: { [key: string]: any } = {};\n\nexport interface ICacheService {\n getItem(key: string): T | Promise;\n setItem(key: string, data: T, persist?: boolean): void | Promise;\n removeItem(key: string): void | Promise;\n}\n\nexport function setupCacheOperator(cacheService: ICacheService) {\n globalCacheService = cacheService;\n}\n\nexport default function cache(\n key: string,\n options: { refresh?: boolean; persist?: boolean; expirationMinutes?: number } = {}\n) {\n if (!globalCacheService) {\n globalCacheService = new MemoryCache();\n }\n\n return (source: Observable) =>\n source.lift(\n new CacheOperator(key, { refresh: false, persist: true, expirationMinutes: 5, ...options })\n );\n}\n\nexport function cacheClean(key?: string) {\n return (source: Observable) =>\n source.pipe(\n tapSubscribe(() =>\n from(\n key\n ? Promise.resolve(globalCacheService.removeItem(key))\n : Promise.all(keysCreated.map(key => Promise.resolve(globalCacheService.removeItem(key)))).then(\n () => (keysCreated = [])\n )\n )\n )\n );\n}\n\nclass CacheOperator implements Operator {\n constructor(\n private key: string,\n private options: { refresh?: boolean; persist?: boolean; expirationMinutes?: number }\n ) {}\n\n public call(subscriber: Subscriber, source: Observable): Subscription {\n let initalStream$ = of(null);\n\n if (!this.options.refresh) {\n initalStream$ = from(Promise.resolve(globalCacheService.getItem<{ expireAt: string; data: T }>(this.key))).pipe(\n map(cache => {\n if (!cache || new Date(cache.expireAt) < new Date()) return null;\n return cache.data;\n })\n );\n }\n\n if (!peddingCache[this.key]) {\n peddingCache[this.key] = initalStream$.pipe(\n switchMap(cache => {\n if (cache) return of(cache);\n\n return source.pipe(\n switchMap(data => {\n return from(\n Promise.resolve(\n globalCacheService.setItem(\n this.key,\n {\n expireAt: new Date(new Date().getTime() + this.options.expirationMinutes * 60000).toISOString(),\n data\n },\n this.options.persist\n )\n ).then(() => {\n keysCreated.push(this.key);\n return data;\n })\n );\n })\n );\n }),\n tap(() => setTimeout(() => (peddingCache[this.key] = null), 500)),\n shareReplay(1)\n );\n }\n\n return peddingCache[this.key].subscribe(subscriber);\n }\n}\n\nclass MemoryCache implements ICacheService {\n private data: { [key: string]: any } = {};\n\n getItem(key: string): T {\n return this.data[key];\n }\n\n setItem(key: string, data: T): void {\n this.data[key] = data;\n }\n\n removeItem(key: string) {\n delete this.data[key];\n }\n}\n","import { Observable } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\nexport function tapSubscribe(next: (x: T) => Observable) {\n return (source: Observable) => source.pipe(switchMap(value => next(value).pipe(map(() => value))));\n}\n","/* eslint-disable no-template-curly-in-string */\nimport { setLocale } from 'yup';\n\nsetLocale({\n mixed: {\n default: 'Inválido',\n required: 'Obrigatório',\n oneOf: 'Deve ser um dos seguintes valores: ${values}',\n notOneOf: 'Não pode ser um dos seguintes valores: ${values}'\n },\n string: {\n length: 'Deve ter exatamente ${length} caracteres',\n min: 'Deve ter pelo menos ${min} caracteres',\n max: 'Deve ter no máximo ${max} caracteres',\n email: 'E-mail inválido',\n url: 'Deve ter um formato de URL válida',\n trim: 'Não deve conter espaços no início ou no fim.',\n lowercase: 'Deve estar em maiúsculo',\n uppercase: 'Deve estar em minúsculo',\n\n },\n number: {\n min: 'Deve ser no mínimo ${min}',\n max: 'Deve ser no máximo ${max}',\n lessThan: 'Deve ser menor que ${less}',\n moreThan: 'Deve ser maior que ${more}',\n // notEqual: 'Não pode ser igual à ${notEqual}',\n positive: 'Deve ser um número posítivo',\n negative: 'Deve ser um número negativo',\n integer: 'Deve ser um número inteiro'\n },\n date: {\n min: 'Deve ser maior que a data ${min}',\n max: 'Deve ser menor que a data ${max}'\n },\n array: {\n min: 'Deve ter no mínimo ${min} itens',\n max: 'Deve ter no máximo ${max} itens'\n }\n});\n","import { Overrides } from '@material-ui/core/styles/overrides';\n\nconst overrides: Overrides = {\n MuiTablePagination: {\n input: {\n padding: 0,\n marginLeft: 7,\n marginRight: 32\n },\n selectRoot: {\n marginLeft: 0,\n marginRight: 0\n },\n select: {\n paddingRight: 20\n }\n },\n MuiExpansionPanel: {\n root: {\n '&$expanded': {\n marginTop: 0,\n marginBottom: 0\n }\n }\n },\n MuiExpansionPanelDetails: {\n root: {\n display: 'block'\n }\n },\n MuiDialogContent: {\n root: {\n maxHeight: 'calc(100vh - 200px)'\n }\n },\n MuiDrawer: {\n paperAnchorDockedLeft: {\n borderRight: 'none'\n }\n },\n MuiFormControl: {\n marginNormal: {\n marginTop: 0,\n marginBottom: 16\n }\n },\n MuiFormHelperText: {\n contained: {\n marginLeft: 0,\n marginRight: 0\n }\n },\n MuiTypography: {\n body1: {\n lineHeight: 'normal'\n },\n gutterBottom: {\n marginBottom: 16\n }\n },\n MuiFormControlLabel: {\n root: {\n marginBottom: 8\n }\n }\n};\n\nexport default overrides;\n","import { ComponentsProps } from '@material-ui/core/styles/props';\n\nconst props: ComponentsProps = {\n MuiTextField: {\n variant: 'filled',\n margin: 'normal'\n }\n};\n\nexport default props;\n","import { ThemeVariables } from '@material-ui/core/styles/createMuiTheme';\n\nconst variables: ThemeVariables = {\n drawerWidthFull: 240,\n drawerWidthMini: 55,\n headerHeight: 67,\n headerHeightUpSm: 64,\n tabbarHeight: 48,\n contentPadding: 12,\n contentPaddingUpSm: 24,\n boxShadow:\n '0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12)',\n colors: {\n facebook: '#3b5998',\n google: '#de5245'\n }\n};\n\nexport default variables;\n","import createMuiTheme from '@material-ui/core/styles/createMuiTheme';\r\n\r\nimport { ThemesTypes } from './context';\r\nimport overrides from './overrides';\r\nimport props from './props';\r\nimport variables from './variables';\r\n\r\nconst themes: { [key in ThemesTypes]: ReturnType } = {\r\n light: createMuiTheme({\r\n palette: {\r\n type: 'light',\r\n primary: {\r\n light: '#00A886',\r\n main: '#00A886',\r\n dark: '#00A886',\r\n contrastText: '#fff'\r\n },\r\n secondary: {\r\n light: '#00A886',\r\n main: '#00A886',\r\n dark: '#00A886',\r\n contrastText: '#fff'\r\n }\r\n },\r\n overrides,\r\n variables,\r\n props\r\n }),\r\n dark: createMuiTheme({\r\n palette: {\r\n type: 'dark',\r\n primary: {\r\n light: '#00A886',\r\n main: '#00A886',\r\n dark: '#00A886',\r\n contrastText: '#fff'\r\n },\r\n secondary: {\r\n light: '#00A886',\r\n main: '#00A886',\r\n dark: '#00A886',\r\n contrastText: '#fff'\r\n }\r\n },\r\n overrides,\r\n variables,\r\n props\r\n })\r\n};\r\n\r\nexport default themes;\r\n","import PermissionRoute from 'components/Shared/PermissionRoute';\nimport React, { memo, useCallback } from 'react';\nimport { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom';\nimport PageLoading from '../Shared/PageLoading';\n\nconst AdminPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"Admin\" */\n /* webpackPrefetch: true */\n './Admin'\n )\n);\n\nconst NewPasswordPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"Admin\" */\n /* webpackPrefetch: true */\n './Public/NewPassword'\n )\n);\n\nconst Pages = memo(() => {\n const renderEmpty = useCallback(() =>
, []);\n const renderRedirect = useCallback(() => , []);\n\n return (\n }>\n \n \n \n \n\n \n \n \n \n \n );\n});\n\nexport default Pages;\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport class LoaderService {\n private refs = new BehaviorSubject([]);\n\n public shouldShow(): Observable {\n return this.refs.asObservable().pipe(map(refs => refs.length > 0));\n }\n\n public show(ref: string): void {\n if (typeof ref !== 'string') {\n throw new Error('Loader.show needs a ref string value');\n }\n\n if (this.refs.value.includes(ref)) return;\n this.refs.next([...this.refs.value, ref]);\n }\n\n public hide(ref: string): void {\n if (typeof ref !== 'string') {\n throw new Error('Loader.hide needs a ref string value');\n }\n\n this.refs.next([...this.refs.value.filter(r => r !== ref)]);\n }\n}\n\nconst loaderService = new LoaderService();\nexport default loaderService;\n","import CircularProgress from '@material-ui/core/CircularProgress';\nimport Dialog from '@material-ui/core/Dialog';\nimport Slide from '@material-ui/core/Slide';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\nimport { logError } from 'helpers/rxjs-operators/logError';\nimport React, { forwardRef, memo, useMemo } from 'react';\nimport { useObservable } from 'react-use-observable';\nimport loaderService from 'services/loader';\n\nconst useStyle = makeStyles(theme => ({\n loader: {\n width: 70,\n height: 70,\n color: theme.palette.secondary.light\n },\n paper: {\n boxShadow: 'none',\n outline: 'none',\n backgroundColor: 'transparent'\n }\n}));\n\nconst Loader = memo((props: {}) => {\n const classes = useStyle(props);\n const [visible] = useObservable(() => loaderService.shouldShow().pipe(logError()), []);\n\n const paperProps = useMemo(() => ({ className: classes.paper }), [classes.paper]);\n\n return (\n \n \n \n );\n});\n\nconst Transition = memo(\n forwardRef((props: any, ref: any) => {\n return ;\n })\n);\n\nexport default Loader;\n","import './assets/global.css';\nimport './yupLocale';\n\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\nimport themes from 'assets/theme';\nimport ThemeContext, { IThemeContext, ThemesTypes } from 'assets/theme/context';\nimport Pages from 'components/Pages';\nimport Alert from 'components/Shared/Alert';\nimport Loader from 'components/Shared/Loader';\nimport Toast from 'components/Shared/Toast';\nimport React, { memo, useMemo, useState } from 'react';\nimport PageLoading from './components/Shared/PageLoading';\n\nconst Dialogs = React.lazy(() =>\n import(\n /* webpackChunkName: \"Dialogs\" */\n /* webpackPrefetch: true */\n 'components/Dialogs'\n )\n);\nconst App = memo(() => {\n const [currentTheme, setCurrentTheme] = useState(\n (localStorage.getItem('app-theme') ?? 'light') as ThemesTypes\n );\n\n const themeContext = useMemo(() => {\n return {\n currentTheme,\n toogleTheme: () => {\n const newTheme: ThemesTypes = currentTheme === 'light' ? 'dark' : 'light';\n localStorage.setItem('app-theme', newTheme);\n setCurrentTheme(newTheme);\n }\n };\n }, [currentTheme]);\n\n return (\n \n \n }>\n \n \n\n \n\n \n \n\n \n \n \n \n );\n});\n\nexport default App;\n","import React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport App from './App';\n\nReactDOM.render(, document.getElementById('root') as HTMLElement);\n\nif ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n}\n","import * as Sentry from '@sentry/browser';\n\nimport IUserToken from '../interfaces/tokens/userToken';\nimport { ENV, IS_DEVELOPMENT, SENTRY_KEY } from '../settings';\n\nexport class LogService {\n constructor(sentryKey: string) {\n Sentry.init({\n dsn: sentryKey,\n environment: ENV\n });\n }\n\n public setUser(user: IUserToken): void {\n if (!user) {\n Sentry.setUser({\n id: null,\n email: null,\n username: null,\n extra: {}\n });\n return;\n }\n\n Sentry.setUser({\n id: user.id.toString(),\n email: user.email,\n username: user.email,\n extra: { ...user }\n });\n }\n\n public breadcrumb(message: string, category: string = 'manual', data: any = {}): void {\n data = data || {};\n delete data.type;\n\n Sentry.addBreadcrumb({ message, category, data });\n }\n\n public handleError(err: any): void {\n if (!err) return;\n\n if (typeof err === 'string') {\n err = new Error(err);\n }\n\n if (IS_DEVELOPMENT) {\n console.error(err);\n }\n\n Sentry.withScope(() => {\n Sentry.setExtras({ extra: err.extraData || {} });\n Sentry.captureException(err);\n });\n }\n}\n\nconst logService = new LogService(SENTRY_KEY);\nexport default logService;\n","import Toast from 'components/Shared/Toast';\nimport { Observable, Operator, Subscriber, Subscription } from 'rxjs';\nimport logService from 'services/log';\n\nexport function logError(showToaster: boolean = false) {\n return (source: Observable) => source.lift(new LogErrorOperator(showToaster));\n}\n\nclass LogErrorOperator implements Operator {\n constructor(private showToaster: boolean) {}\n\n public call(subscriber: Subscriber, source: Observable): Subscription {\n return source.subscribe(new LogErrorSubscriber(subscriber, this.showToaster));\n }\n}\n\nclass LogErrorSubscriber extends Subscriber {\n constructor(protected destination: Subscriber, private showToaster: boolean) {\n super(destination);\n }\n\n public _next(value: any): void {\n this.destination.next(value);\n }\n\n public _complete(): void {\n this.destination.complete();\n }\n\n public _error(err: any): void {\n logService.handleError(err);\n if (this.showToaster) {\n Toast.error(err);\n }\n\n this.destination.error(err);\n }\n}\n","import { cacheClean } from 'helpers/rxjs-operators/cache';\nimport { logError } from 'helpers/rxjs-operators/logError';\nimport IUserToken from 'interfaces/tokens/userToken';\nimport * as Rx from 'rxjs';\nimport { catchError, distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\n\nimport apiService, { ApiService } from './api';\nimport tokenService, { TokenService } from './token';\n\nexport class AuthService {\n private user$: Rx.Observable;\n private openLogin$: Rx.BehaviorSubject;\n private openChangePassword$: Rx.BehaviorSubject;\n\n constructor(private api: ApiService, private tokenService: TokenService) {\n this.openLogin$ = new Rx.BehaviorSubject(false);\n this.openChangePassword$ = new Rx.BehaviorSubject(false);\n\n this.user$ = this.tokenService.getToken().pipe(\n map(token => {\n if (!token) return null;\n\n const user = this.tokenService.decode(token);\n if (!user) return null;\n user.roles = user.roles || [];\n return user;\n }),\n catchError(() => Rx.of(null)),\n shareReplay(1)\n );\n\n this.getUser()\n .pipe(\n distinctUntilChanged((a, b) => (a || ({} as IUserToken)).id !== (b || ({} as IUserToken)).id),\n cacheClean(),\n logError()\n )\n .subscribe();\n }\n\n public openLogin(): void {\n this.openLogin$.next(true);\n }\n\n public shouldOpenLogin(): Rx.Observable {\n return this.openLogin$.asObservable();\n }\n\n public login(login: string, password: string): Rx.Observable {\n return this.api.post('/auth/login', { login, password }).pipe(\n switchMap(accessToken => this.tokenService.setToken(accessToken)),\n map(() => this.openLogin$.next(false))\n );\n }\n\n public logout(): Rx.Observable {\n return this.tokenService.clearToken();\n }\n\n public sendResetPassword(email: string): Rx.Observable {\n return this.api.post('/auth/send-reset', { email });\n }\n\n public resetPassword(token: string, password: string): Rx.Observable {\n return this.api.post('/auth/reset-password', { token, password });\n }\n\n public openChangePassword(): void {\n this.openChangePassword$.next(true);\n }\n\n public closeChangePassword(): void {\n this.openChangePassword$.next(false);\n }\n\n public shouldOpenChangePassword(): Rx.Observable {\n return this.openChangePassword$.asObservable();\n }\n\n public changePassword(currentPassword: string, newPassword: string): Rx.Observable {\n return this.api.post('/auth/change-password', {\n currentPassword,\n newPassword\n });\n }\n\n public getUser(): Rx.Observable {\n return this.user$;\n }\n\n public canAccess(...roles: string[]): Rx.Observable {\n return this.getUser().pipe(\n map(user => {\n if (!user) return false;\n\n if (!roles || roles.length === 0) return true;\n if (user.roles.includes('sysAdmin') || user.roles.includes('admin')) return true;\n\n return roles.some(r => user.roles.includes(r));\n })\n );\n }\n\n public isAuthenticated(): Rx.Observable {\n return this.getUser().pipe(map(user => !!user));\n }\n}\n\nconst authService = new AuthService(apiService, tokenService);\nexport default authService;\n","export const ENV = (process.env.REACT_APP_ENV || 'production').trim();\n\nexport const API_ENDPOINT = (process.env.REACT_APP_API_ENDPOINT || '').trim();\nexport const CDN_ENDPOINT = (process.env.REACT_APP_CDN_ENDPOINT || '').trim();\n\nif (!API_ENDPOINT) throw new Error('Please provide an API_ENDPOINT');\n\nexport const SENTRY_KEY = (process.env.REACT_APP_SENTRY_KEY || '').trim();\n\nexport const TOAST_DEFAULT_TIMEOUT = 3000;\nexport const TOAST_ERROR_TIMEOUT = 4000;\n\nexport const IS_DEVELOPMENT = ENV === 'development';\n"],"sourceRoot":""}