{"version":3,"sources":["/opt/build/repo/src/components/store.tsx","/opt/build/repo/src/components/mobile/App.tsx","/opt/build/repo/src/lib/apollo-fetch.ts","/opt/build/repo/src/components/web/common/Header.tsx","/opt/build/repo/src/components/web/LoginPage/Index.tsx","/opt/build/repo/src/graphql/queries/main.ts","/opt/build/repo/src/components/web/Dashboard/Index.tsx","/opt/build/repo/src/components/web/CreateUser/Index.tsx","/opt/build/repo/src/graphql/mutations/main.js","/opt/build/repo/src/components/web/EditAccount/Index.tsx","/opt/build/repo/src/components/web/App.tsx","/opt/build/repo/src/components/Main.tsx","/opt/build/repo/App.tsx","/opt/build/repo/src/config/config.js"],"names":["context","createContext","initialState","jwt","ipAddress","reducer","state","action","type","payload","property","value","platform","console","error","App","Text","envURI","ENV","apolloFetch","createApolloFetch","uri","props","useState","history","useHistory","useContext","user","setUser","useEffect","a","async","AsyncStorage","getItem","JWTSecretKey","err","decoded","verify","Navbar","bg","expand","Brand","onClick","push","Toggle","aria-controls","Collapse","id","Nav","className","userRole","NavDropdown","title","Item","style","textDecoration","color","width","firstName","lastName","removeItem","LoginPage","isLoading","setIsLoading","email","setEmail","password","setPassword","Header","View","display","justifyContent","margin","minWidth","Card","as","Body","Form","Group","controlId","Label","Control","placeholder","defaultValue","onChange","event","target","Button","variant","preventDefault","query","variables","response","data","loginUser","setItem","alert","ActivityIndicator","LandingPage","CreateUser","setFirstName","setLastName","setUserRole","confirmPassword","setConfirmPassword","custom","length","test","toLowerCase","createUser","EditAccount","infoPassword","setInfoPassword","isLoadingInfo","setIsLoadingInfo","oldPassword","setOldPassword","isLoadingPassword","setIsLoadingPassword","editAccountInfo","message","marginTop","newPassword","editPassword","path","exact","component","Dashboard","Main","useReducer","dispatch","Platform","OS","fetch","json","ip","Provider","Sentry","dsn","sampleRate","release","process","npm_package_version","module","exports","STRIPE_PK","apolloClientConnectionURI"],"mappings":"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","file":"static/js/app.6384fc5d.chunk.js","sourcesContent":["import { createContext } from \"react\";\n\nexport const context = createContext(initialState);\n\nexport const initialState = {\n    jwt: null,\n    ipAddress: null,\n};\n\nexport const reducer = (state, action) => {\n    const { type, payload } = action;\n\n    switch (type) {\n        case \"SET_SINGLE_VALUE\": {\n            return {\n                ...state,\n                [payload.property]: payload.value,\n            };\n        }\n        case \"initial app load\": {\n            return {\n                ...state,\n                platform: payload.platform,\n                ipAddress: payload.ipAddress,\n            };\n        }\n        default:\n            console.error(\"The dispatch TYPE '\" + type + \"' does not exist.\");\n            return state;\n    }\n};\n","import React from 'react';\nimport { Text } from 'react-native';\n\nexport default function App() {\n  return (\n    <Text>Mobile</Text>\n  );\n}\n","import { ENV } from \"../config/config\";\nimport { createApolloFetch } from \"apollo-fetch\";\n\nlet envURI = null;\n\nif (ENV === \"LOCAL\") envURI = \"http://localhost:8080/\";\n\nif (ENV === \"STAGING\")\n    envURI = \"https://admin-fitkabdao-staging.herokuapp.com/\";\n\nif (ENV === \"PRODUCTION\")\n    envURI = \"https://admin-fitkabdao-production.herokuapp.com/\";\n\nexport const apolloFetch = createApolloFetch({\n    uri: envURI,\n});\n","import React, { useState, useContext, useEffect } from \"react\";\nimport { context } from \"../../store\";\nimport { AsyncStorage } from \"react-native\";\nimport { useHistory, Link } from \"react-router-dom\";\nimport { Navbar, Nav, NavDropdown } from \"react-bootstrap\";\nimport jwt from \"jsonwebtoken\";\nimport { JWTSecretKey } from \"../../../config/config.js\";\n\nexport default (props) => {\n    const [isOpen, setIsOpen] = useState(false);\n    const history = useHistory();\n    const [state, dispatch] = useContext(context);\n    const [user, setUser] = useState(null);\n\n    useEffect(() => {\n        (async function checkJWT() {\n            jwt.verify(\n                await AsyncStorage.getItem(\"jwt\"),\n                JWTSecretKey,\n                (err, decoded) => {\n                    if (decoded?.user) {\n                        setUser(decoded?.user);\n                    }\n                },\n            );\n        })();\n    }, []);\n\n    return (\n        <Navbar bg=\"light\" expand=\"lg\">\n            <Navbar.Brand\n                onClick={() => {\n                    history.push(\"/dashboard\");\n                }}\n            >\n                FitKabDao\n            </Navbar.Brand>\n            <Navbar.Toggle aria-controls=\"basic-navbar-nav\" />\n\n            {user && (\n                <Navbar.Collapse id=\"basic-navbar-nav\">\n                    <Nav className=\"mr-auto\">\n                        {user?.userRole === \"admin\" && (\n                            <NavDropdown title=\"Admin\" id=\"basic-nav-dropdown\">\n                                <NavDropdown.Item\n                                    onClick={() => {\n                                        history.push(\"/create-user\");\n                                    }}\n                                    style={{\n                                        textDecoration: \"none\",\n                                        color: \"black\",\n                                    }}\n                                >\n                                    Create A New User\n                                </NavDropdown.Item>\n                                <NavDropdown.Item\n                                    style={{\n                                        textDecoration: \"none\",\n                                        color: \"black\",\n                                    }}\n                                >\n                                    Remove A User\n                                </NavDropdown.Item>\n                            </NavDropdown>\n                        )}\n\n                        <NavDropdown title=\"Mobile App\" id=\"basic-nav-dropdown\">\n                            <NavDropdown.Item\n                                style={{\n                                    textDecoration: \"none\",\n                                    color: \"black\",\n                                }}\n                            >\n                                Create Post\n                            </NavDropdown.Item>\n                            <NavDropdown.Item\n                                style={{\n                                    textDecoration: \"none\",\n                                    color: \"black\",\n                                }}\n                            >\n                                Send Push Notifications\n                            </NavDropdown.Item>\n                        </NavDropdown>\n\n                        <NavDropdown title=\"Tools\" id=\"basic-nav-dropdown\">\n                            <NavDropdown.Item\n                                style={{\n                                    textDecoration: \"none\",\n                                    color: \"black\",\n                                }}\n                            >\n                                Auto-Fill Orders\n                            </NavDropdown.Item>\n                        </NavDropdown>\n                    </Nav>\n\n                    <Nav\n                        className=\"justify-content-end\"\n                        style={{ width: \"100%\" }}\n                    >\n                        <NavDropdown\n                            title={`Logged in as ${user.firstName} ${user.lastName}`}\n                            id=\"basic-nav-dropdown\"\n                        >\n                            <NavDropdown.Item\n                                style={{\n                                    textDecoration: \"none\",\n                                    color: \"black\",\n                                }}\n                                onClick={async () => {\n                                    history.push(\"/edit-account\");\n                                }}\n                            >\n                                Edit Account\n                            </NavDropdown.Item>\n                            <NavDropdown.Item\n                                style={{\n                                    textDecoration: \"none\",\n                                    color: \"black\",\n                                }}\n                                onClick={async () => {\n                                    await AsyncStorage.removeItem(\"jwt\");\n                                    history.push(\"/\");\n                                }}\n                            >\n                                Logout\n                            </NavDropdown.Item>\n                        </NavDropdown>\n                    </Nav>\n                </Navbar.Collapse>\n            )}\n        </Navbar>\n    );\n};\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { View, ActivityIndicator, AsyncStorage } from \"react-native\";\nimport { context } from \"../../store\";\nimport { useHistory } from \"react-router-dom\";\nimport { apolloFetch } from \"../../../lib/apollo-fetch\";\nimport { loginUser } from \"../../../graphql/queries/main\";\nimport jwt from \"jsonwebtoken\";\nimport { JWTSecretKey } from \"../../../config/config.js\";\nimport Card from \"react-bootstrap/Card\";\nimport Header from \"../common/Header\";\n\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\n\nexport default function LoginPage() {\n    const [state, dispatch] = useContext(context);\n    const history = useHistory();\n    const [isLoading, setIsLoading] = useState(false);\n    const [email, setEmail] = useState(\"\");\n    const [password, setPassword] = useState(\"\");\n\n    useEffect(() => {\n        (async function checkJWT() {\n            jwt.verify(\n                await AsyncStorage.getItem(\"jwt\"),\n                JWTSecretKey,\n                (err, decoded) => {\n                    if (!err) history.push(\"/dashboard\");\n                },\n            );\n        })();\n    }, []);\n\n    return (\n        <>\n            <Header />\n            <View\n                style={{\n                    width: \"30%\",\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                    margin: \"auto\",\n                    minWidth: \"400px\",\n                }}\n            >\n                <Card>\n                    <Card.Header as=\"h5\">Login</Card.Header>\n                    <Card.Body>\n                        <Form>\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>Email address</Form.Label>\n                                <Form.Control\n                                    type=\"email\"\n                                    placeholder=\"you@example.com\"\n                                    defaultValue={email}\n                                    onChange={(event) => {\n                                        setEmail(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Password</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={password}\n                                    onChange={(event) => {\n                                        setPassword(event.target.value);\n                                    }}\n                                />\n                                <Form.Text className=\"text-muted\">\n                                    Please reach out to a manager if you are\n                                    unable to login.\n                                </Form.Text>\n                            </Form.Group>\n\n                            <Button\n                                variant=\"primary\"\n                                type=\"submit\"\n                                style={{ minWidth: 75 }}\n                                onClick={async (event) => {\n                                    event.preventDefault();\n                                    setIsLoading(true);\n                                    const response = await apolloFetch({\n                                        query: loginUser,\n                                        variables: {\n                                            email,\n                                            password,\n                                        },\n                                    });\n\n                                    if (response.data?.loginUser?.jwt) {\n                                        AsyncStorage.setItem(\n                                            \"jwt\",\n                                            response.data.loginUser.jwt,\n                                        );\n                                        history.push(\"/dashboard\");\n                                    } else {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Login failed. Please try again.\",\n                                        );\n                                    }\n                                }}\n                            >\n                                {!isLoading ? (\n                                    \"Submit\"\n                                ) : (\n                                    <ActivityIndicator color=\"white\" />\n                                )}\n                            </Button>\n                        </Form>\n                    </Card.Body>\n                </Card>\n            </View>\n        </>\n    );\n}\n","export const loginUser = `\n    query($email: String! $password: String!) {\n        loginUser(email: $email password: $password)\n    }\n`;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { Text, AsyncStorage } from \"react-native\";\nimport Header from \"../common/Header\";\nimport { context } from \"../../store\";\nimport { useHistory } from \"react-router-dom\";\nimport jwt from \"jsonwebtoken\";\nimport { JWTSecretKey } from \"../../../config/config.js\";\n\nexport default function LandingPage() {\n    const [state, dispatch] = useContext(context);\n    const history = useHistory();\n\n    useEffect(() => {\n        (async function checkJWT() {\n            jwt.verify(\n                await AsyncStorage.getItem(\"jwt\"),\n                JWTSecretKey,\n                (err, decoded) => {\n                    if (err) history.push(\"/\");\n                },\n            );\n        })();\n    }, []);\n\n    return (\n        <>\n            <Header />\n            <Text style={{ margin: 10 }}>\n                Please select an option from the navbar.\n            </Text>\n        </>\n    );\n}\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { View, ActivityIndicator, AsyncStorage } from \"react-native\";\nimport { context } from \"../../store\";\nimport { useHistory } from \"react-router-dom\";\nimport { apolloFetch } from \"../../../lib/apollo-fetch\";\nimport { createUser } from \"../../../graphql/mutations/main\";\nimport jwt from \"jsonwebtoken\";\nimport { JWTSecretKey } from \"../../../config/config.js\";\nimport Header from \"../common/Header\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport Card from \"react-bootstrap/Card\";\n\nexport default function CreateUser() {\n    const [state, dispatch] = useContext(context);\n    const history = useHistory();\n    const [isLoading, setIsLoading] = useState(false);\n    const [firstName, setFirstName] = useState(\"\");\n    const [lastName, setLastName] = useState(\"\");\n    const [userRole, setUserRole] = useState(\"Staff\");\n    const [email, setEmail] = useState(\"\");\n    const [password, setPassword] = useState(\"\");\n    const [confirmPassword, setConfirmPassword] = useState(\"\");\n\n    useEffect(() => {\n        (async function checkJWT() {\n            jwt.verify(\n                await AsyncStorage.getItem(\"jwt\"),\n                JWTSecretKey,\n                (err, decoded) => {\n                    if (err || decoded.user.userRole !== \"admin\") {\n                        history.push(\"/\");\n                        return;\n                    }\n                },\n            );\n        })();\n    }, []);\n\n    return (\n        <>\n            <Header />\n\n            <View\n                style={{\n                    width: \"30%\",\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                    margin: \"auto\",\n                    minWidth: \"400px\",\n                }}\n            >\n                <Card>\n                    <Card.Header as=\"h5\">Create A New User</Card.Header>\n                    <Card.Body>\n                        <Form>\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>First Name*</Form.Label>\n                                <Form.Control\n                                    type=\"firstName\"\n                                    placeholder=\"Dao\"\n                                    defaultValue={firstName}\n                                    onChange={(event) => {\n                                        setFirstName(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>Last Name*</Form.Label>\n                                <Form.Control\n                                    type=\"lastName\"\n                                    placeholder=\"Arthitaurai\"\n                                    defaultValue={lastName}\n                                    onChange={(event) => {\n                                        setLastName(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"exampleForm.SelectCustom\">\n                                <Form.Label>User Role*</Form.Label>\n                                <Form.Control\n                                    as=\"select\"\n                                    custom\n                                    onChange={(event) => {\n                                        setUserRole(event.target.value);\n                                    }}\n                                    defaultValue={userRole}\n                                >\n                                    <option>Staff</option>\n                                    <option>Admin</option>\n                                </Form.Control>\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>Email*</Form.Label>\n                                <Form.Control\n                                    type=\"email\"\n                                    placeholder=\"you@example.com\"\n                                    defaultValue={email}\n                                    onChange={(event) => {\n                                        setEmail(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Password*</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={password}\n                                    onChange={(event) => {\n                                        setPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Confirm Password</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={confirmPassword}\n                                    onChange={(event) => {\n                                        setConfirmPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Button\n                                variant=\"primary\"\n                                type=\"submit\"\n                                style={{ minWidth: 75 }}\n                                onClick={async (event) => {\n                                    event.preventDefault();\n                                    setIsLoading(true);\n\n                                    if (!firstName.length) {\n                                        setIsLoading(false);\n                                        alert(\"First name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!lastName.length) {\n                                        setIsLoading(false);\n                                        alert(\"Last name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!userRole.length) {\n                                        setIsLoading(false);\n                                        alert(\"User role cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!email.length) {\n                                        setIsLoading(false);\n                                        alert(\"Email cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (\n                                        !/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/.test(\n                                            email,\n                                        )\n                                    ) {\n                                        setIsLoading(false);\n                                        alert(\"Must be a valid email.\");\n                                        return;\n                                    }\n\n                                    if (password !== confirmPassword) {\n                                        setIsLoading(false);\n                                        alert(\"Passwords do not match!\");\n                                        return;\n                                    }\n\n                                    if (password.length < 8) {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Password is too short. Must contain 8+ characters.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[a-z]/.test(password)) {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Password must contain at least one lowercase character.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[A-Z]/.test(password)) {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Password must contain at least one uppercase character.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[0-9]/.test(password)) {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Password must contain at least one number.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (password.length < 8) {\n                                        setIsLoading(false);\n                                        alert(\n                                            \"Password is too short. Must contain 8+ characters.\",\n                                        );\n                                        return;\n                                    }\n\n                                    const response = await apolloFetch({\n                                        query: createUser,\n                                        variables: {\n                                            firstName,\n                                            lastName,\n                                            userRole: userRole.toLowerCase(),\n                                            email,\n                                            password,\n                                            jwt: await AsyncStorage.getItem(\n                                                \"jwt\",\n                                            ),\n                                        },\n                                    });\n\n                                    if (response.data?.createUser) {\n                                        setIsLoading(false);\n                                        alert(response.data?.createUser);\n                                    }\n                                }}\n                            >\n                                {!isLoading ? (\n                                    \"Submit\"\n                                ) : (\n                                    <ActivityIndicator color=\"white\" />\n                                )}\n                            </Button>\n                        </Form>\n                    </Card.Body>\n                </Card>\n            </View>\n        </>\n    );\n}\n","export const createUser = `\n    mutation createUser(\n        $firstName: String!\n        $lastName: String!\n        $userRole: String!\n        $email: String!\n        $password: String!\n        $jwt: String!\n    ) {\n        createUser(\n            firstName: $firstName\n            lastName: $lastName\n            userRole: $userRole\n            email: $email\n            password: $password\n            jwt: $jwt\n        )\n    }\n`;\n\nexport const editAccountInfo = `\n    mutation editAccountInfo(\n        $firstName: String!\n        $lastName: String!\n        $email: String!\n        $password: String!\n        $jwt: String!\n    ) {\n        editAccountInfo(\n            firstName: $firstName\n            lastName: $lastName\n            email: $email\n            password: $password\n            jwt: $jwt\n        )\n    }\n`;\n\nexport const editPassword = `\n    mutation editPassword(\n        $oldPassword: String!\n        $newPassword: String!\n        $jwt: String!\n    ) {\n        editPassword(\n            oldPassword: $oldPassword\n            newPassword: $newPassword\n            jwt: $jwt\n        )\n    }\n`;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { View, ActivityIndicator, AsyncStorage } from \"react-native\";\nimport { context } from \"../../store\";\nimport { useHistory } from \"react-router-dom\";\nimport { apolloFetch } from \"../../../lib/apollo-fetch\";\nimport { editAccountInfo, editPassword } from \"../../../graphql/mutations/main\";\nimport jwt from \"jsonwebtoken\";\nimport { JWTSecretKey } from \"../../../config/config.js\";\nimport Header from \"../common/Header\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport Card from \"react-bootstrap/Card\";\n\nexport default function EditAccount() {\n    const [state, dispatch] = useContext(context);\n    const history = useHistory();\n\n    const [firstName, setFirstName] = useState(\"\");\n    const [lastName, setLastName] = useState(\"\");\n    const [email, setEmail] = useState(\"\");\n    const [infoPassword, setInfoPassword] = useState(\"\");\n    const [isLoadingInfo, setIsLoadingInfo] = useState(false);\n\n    const [oldPassword, setOldPassword] = useState(\"\");\n    const [password, setPassword] = useState(\"\");\n    const [confirmPassword, setConfirmPassword] = useState(\"\");\n    const [isLoadingPassword, setIsLoadingPassword] = useState(false);\n\n    useEffect(() => {\n        (async function checkJWT() {\n            jwt.verify(\n                await AsyncStorage.getItem(\"jwt\"),\n                JWTSecretKey,\n                (err, decoded) => {\n                    if (err) {\n                        history.push(\"/\");\n                        return;\n                    }\n\n                    setFirstName(decoded.user.firstName);\n                    setLastName(decoded.user.lastName);\n                    setEmail(decoded.user.email);\n                },\n            );\n        })();\n    }, []);\n\n    return (\n        <>\n            <Header />\n\n            <View\n                style={{\n                    width: \"30%\",\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                    margin: \"auto\",\n                    minWidth: \"400px\",\n                }}\n            >\n                <Card>\n                    <Card.Header as=\"h5\">Edit your information</Card.Header>\n                    <Card.Body>\n                        <Form>\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>First Name*</Form.Label>\n                                <Form.Control\n                                    type=\"firstName\"\n                                    placeholder=\"Dao\"\n                                    defaultValue={firstName}\n                                    onChange={(event) => {\n                                        setFirstName(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>Last Name*</Form.Label>\n                                <Form.Control\n                                    type=\"lastName\"\n                                    placeholder=\"Arthitaurai\"\n                                    defaultValue={lastName}\n                                    onChange={(event) => {\n                                        setLastName(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicEmail\">\n                                <Form.Label>Email*</Form.Label>\n                                <Form.Control\n                                    type=\"email\"\n                                    placeholder=\"you@example.com\"\n                                    defaultValue={email}\n                                    onChange={(event) => {\n                                        setEmail(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Password*</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={infoPassword}\n                                    onChange={(event) => {\n                                        setInfoPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Button\n                                variant=\"primary\"\n                                type=\"submit\"\n                                style={{ minWidth: 75 }}\n                                onClick={async (event) => {\n                                    event.preventDefault();\n                                    setIsLoadingInfo(true);\n\n                                    if (!firstName.length) {\n                                        setIsLoadingInfo(false);\n                                        alert(\"First name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!lastName.length) {\n                                        setIsLoadingInfo(false);\n                                        alert(\"Last name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!email.length) {\n                                        setIsLoadingInfo(false);\n                                        alert(\"Email cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (\n                                        !/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/.test(\n                                            email,\n                                        )\n                                    ) {\n                                        setIsLoadingInfo(false);\n                                        alert(\"Must be a valid email.\");\n                                        return;\n                                    }\n\n                                    if (!infoPassword.length) {\n                                        setIsLoadingInfo(false);\n                                        alert(\"Password cannot be blank.\");\n                                        return;\n                                    }\n\n                                    const response = await apolloFetch({\n                                        query: editAccountInfo,\n                                        variables: {\n                                            firstName,\n                                            lastName,\n                                            email,\n                                            password: infoPassword,\n                                            jwt: await AsyncStorage.getItem(\n                                                \"jwt\",\n                                            ),\n                                        },\n                                    });\n\n                                    setIsLoadingInfo(false);\n\n                                    if (\n                                        response.data?.editAccountInfo?.message\n                                    ) {\n                                        alert(\n                                            response.data.editAccountInfo\n                                                .message,\n                                        );\n                                        if (\n                                            response.data?.editAccountInfo?.jwt\n                                        ) {\n                                            AsyncStorage.setItem(\n                                                \"jwt\",\n                                                response.data?.editAccountInfo\n                                                    ?.jwt,\n                                            );\n                                        }\n                                    } else {\n                                        alert(\n                                            \"There was an error saving your information.\",\n                                        );\n                                    }\n                                }}\n                            >\n                                {!isLoadingInfo ? (\n                                    \"Submit\"\n                                ) : (\n                                    <ActivityIndicator color=\"white\" />\n                                )}\n                            </Button>\n                        </Form>\n                    </Card.Body>\n                </Card>\n\n                <Card style={{ marginTop: 20 }}>\n                    <Card.Header as=\"h5\">Edit your password</Card.Header>\n                    <Card.Body>\n                        <Form>\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Old Password*</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={oldPassword}\n                                    onChange={(event) => {\n                                        setOldPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>New Password*</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={password}\n                                    onChange={(event) => {\n                                        setPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Form.Group controlId=\"formBasicPassword\">\n                                <Form.Label>Confirm New Password</Form.Label>\n                                <Form.Control\n                                    type=\"password\"\n                                    placeholder=\"********\"\n                                    defaultValue={confirmPassword}\n                                    onChange={(event) => {\n                                        setConfirmPassword(event.target.value);\n                                    }}\n                                />\n                            </Form.Group>\n\n                            <Button\n                                variant=\"primary\"\n                                type=\"submit\"\n                                style={{ minWidth: 75 }}\n                                onClick={async (event) => {\n                                    event.preventDefault();\n                                    setIsLoadingPassword(true);\n\n                                    if (!firstName.length) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"First name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!lastName.length) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"Last name cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (!email.length) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"Email cannot be empty.\");\n                                        return;\n                                    }\n\n                                    if (\n                                        !/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/.test(\n                                            email,\n                                        )\n                                    ) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"Must be a valid email.\");\n                                        return;\n                                    }\n\n                                    if (!oldPassword.length) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"Old password cannot be blank.\");\n                                        return;\n                                    }\n\n                                    if (password !== confirmPassword) {\n                                        setIsLoadingPassword(false);\n                                        alert(\"Passwords do not match!\");\n                                        return;\n                                    }\n\n                                    if (password.length < 8) {\n                                        setIsLoadingPassword(false);\n                                        alert(\n                                            \"Password is too short. Must contain 8+ characters.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[a-z]/.test(password)) {\n                                        setIsLoadingPassword(false);\n                                        alert(\n                                            \"Password must contain at least one lowercase character.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[A-Z]/.test(password)) {\n                                        setIsLoadingPassword(false);\n                                        alert(\n                                            \"Password must contain at least one uppercase character.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (!/[0-9]/.test(password)) {\n                                        setIsLoadingPassword(false);\n                                        alert(\n                                            \"Password must contain at least one number.\",\n                                        );\n                                        return;\n                                    }\n\n                                    if (password.length < 8) {\n                                        setIsLoadingPassword(false);\n                                        alert(\n                                            \"Password is too short. Must contain 8+ characters.\",\n                                        );\n                                        return;\n                                    }\n\n                                    const response = await apolloFetch({\n                                        query: editPassword,\n                                        variables: {\n                                            oldPassword,\n                                            newPassword: password,\n                                            jwt: await AsyncStorage.getItem(\n                                                \"jwt\",\n                                            ),\n                                        },\n                                    });\n\n                                    setIsLoadingPassword(false);\n\n                                    if (response.data?.editPassword.message) {\n                                        alert(\n                                            response.data?.editPassword.message,\n                                        );\n                                    } else {\n                                        alert(\n                                            \"There was an error updating your password\",\n                                        );\n                                    }\n                                }}\n                            >\n                                {!isLoadingPassword ? (\n                                    \"Submit\"\n                                ) : (\n                                    <ActivityIndicator color=\"white\" />\n                                )}\n                            </Button>\n                        </Form>\n                    </Card.Body>\n                </Card>\n            </View>\n        </>\n    );\n}\n","import React from \"react\";\nimport { BrowserRouter, Switch, Route } from \"react-router-dom\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\n\n// pages\nimport LoginPage from \"./LoginPage/Index\";\nimport Dashboard from \"./Dashboard/Index\";\nimport CreateUser from \"./CreateUser/Index\";\nimport EditAccount from \"./EditAccount/Index\";\n\nexport default function App() {\n    return (\n        <BrowserRouter>\n            <Switch>\n                <Route path=\"/\" exact component={LoginPage} />\n                <Route path=\"/dashboard\" exact component={Dashboard} />\n                <Route path=\"/create-user\" exact component={CreateUser} />\n                <Route path=\"/edit-account\" exact component={EditAccount} />\n            </Switch>\n        </BrowserRouter>\n    );\n}\n","import React, { useEffect, useReducer } from \"react\";\nimport { Platform } from \"react-native\";\nimport { initialState, reducer, context } from \"./store\";\n\n// need to import bootstrap css here in order for reactstrap to work\nimport \"bootstrap/dist/css/bootstrap.min.css\";\n\nimport Mobile from \"./mobile/App\";\nimport Web from \"./web/App\";\n\nexport default function Main() {\n    const [state, dispatch] = useReducer(reducer, initialState);\n\n    useEffect(() => {\n        (async function fetchData() {\n            dispatch({\n                type: \"initial app load\",\n                payload: {\n                    platform: Platform.OS,\n                    ipAddress: (\n                        await (\n                            await fetch(\"https://api.ipify.org?format=json\")\n                        ).json()\n                    ).ip,\n                },\n            });\n        })();\n    }, []);\n\n    return (\n        <context.Provider value={[state, dispatch]}>\n            {state.platform === \"mobile\" ? (\n                <Mobile state={state} />\n            ) : (\n                <Web state={state} />\n            )}\n        </context.Provider>\n    );\n}\n","import React from \"react\";\nimport Main from \"./src/components/Main\";\n\nimport * as Sentry from \"@sentry/browser\";\nSentry.init({\n    dsn:\n        \"https://aae0c55ad05b46e5b3c61b9d5f6b5882@o189240.ingest.sentry.io/1870051\",\n    sampleRate: 1.0,\n    release: \"bestremotejobs-backend@\" + process.env.npm_package_version,\n});\n\nexport default function App() {\n    return <Main />;\n}\n","module.exports = {\n    ENV: 'PRODUCTION',\n    STRIPE_PK: 'pk_live_ggr0N8DYzYvXeweivkcUmXO300iyWBhHJV',\n    apolloClientConnectionURI: 'https://api.bestremotejobs.co/',\n    JWTSecretKey: 'aYU$coy#@M%vNPkh$8a!6FpEEeASn%L9akE1KB*4Oz8&&5d9&#',\n};"],"sourceRoot":""}