UNPKG

react-with-sanctum

Version:

React package for easy authenticate with Laravel Sanctum

1 lines 13.5 kB
{"version":3,"file":"index.cjs.ts","sources":["../src/SanctumContext.tsx","../src/Sanctum.tsx"],"sourcesContent":["import * as React from 'react'\nimport {AxiosError} from 'axios'\n\nexport interface ContextProps {\n user: Record<string, never> | null | false\n authenticated: null | boolean\n signIn: (signInData: Record<string, never>) => Promise<() => Promise<Record<string, never> | AxiosError | boolean>>\n signUp: (signUpData: Record<string, never>) => Promise<() => Promise<Record<string, never> | AxiosError | boolean>>\n forgotPassword: (signUpData: Record<string, never>) => Promise<boolean | AxiosError>\n resetPassword: (signUpData: Record<string, never>) => Promise<boolean | AxiosError>\n signOut: () => Promise<boolean | AxiosError>\n setUser: (user: Record<string, never> | null | false, authenticated?: boolean) => void\n checkAuthentication: () => Promise<boolean | AxiosError>\n}\n\nconst SanctumContext = React.createContext<Partial<ContextProps>>({})\n\nexport default SanctumContext\n","import * as React from 'react'\nimport axios, {AxiosError} from 'axios'\nimport SanctumContext from './SanctumContext'\n\naxios.defaults.withCredentials = true\n\nconst token = localStorage.getItem('access_token')\n\nif (token) {\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`\n}\n\ninterface Props {\n config: {\n apiUrl: string\n csrfCookieRoute: string\n signInRoute: string\n signUpRoute: string\n signOutRoute: string\n forgotPasswordRoute: string\n resetPasswordRoute: string\n userObjectRoute: string\n };\n checkOnInit?: boolean\n}\n\ninterface State {\n user: null | Record<string, never> | false\n authenticated: null | boolean\n}\n\nclass Sanctum extends React.Component<Props, State> {\n static defaultProps = {\n checkOnInit: true\n }\n\n constructor(props: Props) {\n super(props)\n\n this.state = {\n user: null,\n authenticated: null\n }\n\n this.getCSRF = this.getCSRF.bind(this)\n this.handleError = this.handleError.bind(this)\n this.getUserData = this.getUserData.bind(this)\n this.signIn = this.signIn.bind(this)\n this.signUp = this.signUp.bind(this)\n this.signOut = this.signOut.bind(this)\n this.forgotPassword = this.forgotPassword.bind(this)\n this.resetPassword = this.resetPassword.bind(this)\n this.setUser = this.setUser.bind(this)\n this.checkAuthentication = this.checkAuthentication.bind(this)\n }\n\n /**\n * Error handler\n * @param error\n */\n handleError(error: AxiosError): boolean | AxiosError {\n if (error.response && error.response.status === 401) {\n this.setState({user: false, authenticated: false})\n return false\n } else {\n return error\n }\n }\n\n /**\n * Get CSRF cookie function\n */\n async getCSRF(): Promise<boolean | AxiosError> {\n const {apiUrl, csrfCookieRoute} = this.props.config\n\n return await axios\n .get(`${apiUrl}/${csrfCookieRoute}`)\n .then(() => {\n return true\n })\n .catch((error: AxiosError) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Get user data function\n */\n async getUserData(): Promise<Record<string, never> | AxiosError | boolean> {\n const {apiUrl, userObjectRoute} = this.props.config\n const token = localStorage.getItem('access_token')\n\n return await axios\n .get(`${apiUrl}/${userObjectRoute}`, {\n headers: {\n 'Authorization': `Bearer ${token}`\n }\n })\n .then(({data}) => {\n this.setState({user: data, authenticated: true})\n return data\n })\n .catch((error) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Check authentication\n */\n async checkAuthentication(): Promise<boolean | AxiosError> {\n const {apiUrl, userObjectRoute} = this.props.config\n\n return await axios\n .get(`${apiUrl}/${userObjectRoute}`)\n .then(({data}) => {\n this.setState({user: data, authenticated: true})\n return true\n })\n .catch((error: AxiosError) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Sign in function\n * @param signInData\n */\n async signIn(signInData: Record<string, never>): Promise<() =>\n Promise<Record<string, never> | AxiosError | boolean>> {\n const {apiUrl, signInRoute} = this.props.config\n await this.getCSRF\n\n axios\n .post(`${apiUrl}/${signInRoute}`, signInData)\n .then(({data}) => localStorage.setItem('access_token', data))\n .catch((error) => {\n return this.handleError(error)\n })\n\n return this.getUserData\n }\n\n /**\n * Sign up function\n * @param signUpData\n */\n async signUp(signUpData: Record<string, never>): Promise<() =>\n Promise<Record<string, never> | AxiosError | boolean>> {\n const {apiUrl, signUpRoute} = this.props.config\n await this.getCSRF\n\n axios\n .post(`${apiUrl}/${signUpRoute}`, signUpData)\n .then(({data}) => localStorage.setItem('access_token', data))\n .catch((error) => {\n return this.handleError(error)\n })\n\n return this.getUserData\n }\n\n /**\n * Forgot password function\n * @param forgotPasswordData\n */\n async forgotPassword(forgotPasswordData: Record<string, never>): Promise<boolean | AxiosError> {\n const {apiUrl, forgotPasswordRoute} = this.props.config\n\n return axios\n .post(`${apiUrl}/${forgotPasswordRoute}`, forgotPasswordData)\n .then(() => {\n return true\n })\n .catch((error) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Reset password function\n * @param resetPasswordData\n */\n async resetPassword(resetPasswordData: Record<string, never>): Promise<boolean | AxiosError> {\n const {apiUrl, resetPasswordRoute} = this.props.config\n\n return axios\n .post(`${apiUrl}/${resetPasswordRoute}`, resetPasswordData)\n .then(() => {\n return true\n })\n .catch((error) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Sign out function\n */\n async signOut(): Promise<boolean | AxiosError> {\n const {apiUrl, signOutRoute} = this.props.config\n\n return axios\n .post(`${apiUrl}/${signOutRoute}`)\n .then(() => {\n this.setState({user: false, authenticated: false})\n return true\n })\n .catch((error) => {\n return this.handleError(error)\n })\n }\n\n /**\n * Set user to state\n * @param user\n * @param authenticated\n */\n setUser(user: Record<string, never> | false | null, authenticated = true) {\n this.setState({user, authenticated})\n }\n\n componentDidMount(): void {\n if (this.props.checkOnInit) {\n this.checkAuthentication()\n }\n }\n\n render(): JSX.Element {\n return <SanctumContext.Provider\n value={{\n user: this.state.user,\n authenticated: this.state.authenticated,\n signIn: this.signIn,\n signUp: this.signUp,\n signOut: this.signOut,\n forgotPassword: this.forgotPassword,\n resetPassword: this.resetPassword,\n setUser: this.setUser,\n checkAuthentication: this.checkAuthentication\n }}>\n {this.props.children || null}\n </SanctumContext.Provider>\n }\n}\n\nexport default Sanctum\n"],"names":["React.createContext","axios","React.Component","React.createElement"],"mappings":"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"}