{"version":3,"file":"static/chunks/app/layout-f7090f06fc91db34.js","mappings":"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","sources":["webpack://_N_E/?5918","webpack://_N_E/./src/app/layout.tsx","webpack://_N_E/./src/constants/Endpoints.ts","webpack://_N_E/./src/constants/QueryTypes.ts","webpack://_N_E/./src/lib/useUser.ts","webpack://_N_E/./src/services/api.ts","webpack://_N_E/./src/services/auth0.ts","webpack://_N_E/./src/services/jwt.ts","webpack://_N_E/./src/state/user/context.ts","webpack://_N_E/./src/state/user/actions.ts","webpack://_N_E/./src/state/user/reducer.ts","webpack://_N_E/./src/state/user/state.ts","webpack://_N_E/./src/utils/fetchJson.ts","webpack://_N_E/./src/utils/user.ts","webpack://_N_E/./src/styles/chat.css","webpack://_N_E/./src/styles/globals.css","webpack://_N_E/./src/styles/order.css","webpack://_N_E/./src/styles/otp.css","webpack://_N_E/./src/styles/profile.css","webpack://_N_E/./src/styles/team.css","webpack://_N_E/"],"sourcesContent":["import(/* webpackMode: \"eager\" */ \"/codebuild/output/src1388073277/src/supplier-web/src/app/layout.tsx\")","/* eslint-disable @typescript-eslint/no-confusing-void-expression */\n'use client';\n\nimport React, { useTransition, useEffect, useReducer, useState } from 'react';\nimport '@/styles/chat.css';\nimport '@/styles/globals.css';\nimport '@/styles/order.css';\nimport '@/styles/otp.css';\nimport '@/styles/profile.css';\nimport '@/styles/team.css';\n\nimport { get } from 'lodash';\nimport { useRouter } from 'next/navigation';\nimport { GoogleAnalytics } from 'nextjs-google-analytics';\nimport { default as GA4, default as UA } from 'react-ga4';\nimport { hotjar } from 'react-hotjar';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { ReactQueryDevtools } from 'react-query/devtools';\nimport { ToastContainer } from 'react-toastify';\n\nimport useUser from '@/lib/useUser';\nimport { JWTService } from '@/services/jwt';\nimport { UserContext } from '@/state/user/context';\nimport { setUser, userReducer } from '@/state/user/reducer';\nimport { initialUserState } from '@/state/user/state';\n\nimport 'react-toastify/dist/ReactToastify.css';\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n const router = useRouter();\n const segment = get(children, 'props.childProp.segment');\n const { fetchUser } = useUser({ isLanding: segment !== 'dashboard' });\n\n const [queryClient] = useState(() => new QueryClient());\n const [state, dispatch] = useReducer(userReducer, initialUserState);\n const [loadingUser, setLoadingUser] = useState(true);\n const [isPending, startTransition] = useTransition();\n const [isReady, setIsReady] = useState(false);\n\n useEffect(() => {\n if (process.env.NODE_ENV === 'production') {\n if (process.env.NEXT_PUBLIC_HOTJAR_ID && process.env.NEXT_PUBLIC_HOTJAR_SNIPPET_VERSION) {\n hotjar.initialize(+process.env.NEXT_PUBLIC_HOTJAR_ID, +process.env.NEXT_PUBLIC_HOTJAR_SNIPPET_VERSION);\n }\n UA.initialize('UA-237619107-1');\n GA4.initialize('G-8TEG8J9F50');\n }\n }, []);\n\n useEffect(() => {\n if (!isPending && isReady) {\n hideLoading();\n }\n }, [isPending, isReady]);\n\n useEffect(() => {\n const getUser = async () => {\n const isValidToken = JWTService.isValidToken();\n const user = await fetchUser('/api/user', 'GET');\n if (isValidToken && user && user?.accessToken !== '') {\n await getStoredUser();\n if (segment === 'auth' || segment === '__PAGE__') {\n startTransition(() => {\n router.push('/dashboard/orders');\n });\n }\n setIsReady(true);\n } else {\n try {\n localStorage.clear();\n await fetchUser('/api/logout', 'POST');\n hideLoading();\n } catch (error) {\n router.push('/');\n hideLoading();\n }\n }\n };\n getUser();\n }, []);\n\n const getStoredUser = async () => {\n const storedUser: string | null = localStorage.getItem('user');\n if (storedUser) {\n JWTService.refreshToken();\n const user: User = JSON.parse(storedUser);\n dispatch(setUser(user));\n }\n };\n\n const hideLoading = () => {\n setLoadingUser(false);\n };\n\n return (\n \n \n Alisto Web Suppliers\n \n \n {process.env.NEXT_PUBLIC_GA_MEASUREMENT_ID && }\n \n \n \n \n {loadingUser ? (\n
\n
\n \n \n \n \n
\n
\n ) : (\n
{children}
\n )}\n \n \n
\n
\n \n \n );\n}\n","/* eslint-disable import/no-anonymous-default-export */\nexport default {\n AD_BROADCASTS: '/ad-broadcasts',\n AUTH0_OAUTH_TOKEN: '/oauth/token',\n AUTH0_PASSWORDLESS_START: '/passwordless/start',\n AUTH0_ROLES: 'api/v2/roles',\n AUTH0_UPDATE_USER_METADATA: '/api/v2/users/',\n AUTH0_UPDATE_USERS: '/api/v2/users',\n BD_USER_PROFILE: '/users/profile',\n FAVORITE_PRODUCTS: '/favorite-products/',\n FILE_UPLOADS: '/file-uploads',\n ORDER_BULK_CONFIRM: '/orders/bulk-confirm',\n ORDER_EXPORT: '/orders/export',\n ORDER_GET: '/orders/',\n ORDER_UPDATE_TOKEN: '/orders/approve_anonymously',\n ORDERS: '/orders',\n PRODUCT_CATEGORIES: '/product-categories',\n PRODUCT_TO_FAVORITES: '/favorite-products/',\n PRODUCT_UNITS: '/products-measurement-units',\n PRODUCTS_BULK: '/products/bulk-update',\n PRODUCTS_DELETE_BULK: '/products/bulk-remove',\n PRODUCTS: '/products/',\n ADD_PRODUCT_CATALOG: '/products/add-catalog/',\n RESTAURANT_FAVORITES: '/products',\n RESTAURANT_GET: '/restaurants/',\n RESTAURANT_REGISTRATION: '/registrations/restaurants',\n RESTAURANT_SEARCH_AUTOCOMPLETE: '/searches/restaurants',\n RESTAURANT_SUPPLIER: '/restaurants-suppliers/',\n RESTAURANT_USER_INVITATIONS_DETAIL: '/supplier-user-invitations/details',\n RESTAURANT_USER_INVITATIONS: '/restaurant-invitations',\n SUPPLIER_CATALOG: '/products/',\n SUPPLIER_CATEGORIES: '/supplier-categories',\n SUPPLIER_GET: '/suppliers/',\n SUPPLIER_INVITE: '/supplier-invites',\n SUPPLIER_REGISTRATION: '/registrations/suppliers',\n SUPPLIER_REQUEST_ACCESS: '/access-requests/supplier',\n SUPPLIER_RESTAURANTS_BULK: '/restaurants-suppliers/bulk-update',\n SUPPLIER_RESTAURANTS: '/restaurants-suppliers',\n SUPPLIER_SEARCH_AUTOCOMPLETE: '/searches/suppliers',\n SUPPLIER_USER_INVITATION_POST: '/supplier-user-invitations',\n SUPPLIER_USER_INVITATIONS_DETAIL: '/supplier-user-invitations/details',\n SUPPLIER_USER_INVITATIONS: '/supplier-user-invitations',\n SUPPLIER_USER_VALIDATION: '/user-validations/supplier',\n UPLOAD_CSV: '/product-uploads/upload',\n UPLOAD_FILE: '/file-uploads',\n UPLOAD_FILES: '/file-uploads/multiple',\n PRODUCT_THUMBNAIL: '/file-uploads/product',\n USER_UPDATE_DATA: '/users/',\n SUPPLIER_USERS: '/supplier-users',\n};\n","export enum QueryTypes {\n PROFILE = 'profile',\n CATALOG = 'catalog',\n CATEGORY = 'category',\n FAVORITES = 'favorites',\n DBPROFILE = 'dbprofile',\n RESTAURANT_SUPPLIER = 'restaurant-supplier',\n ORDER = 'order',\n INVITATION = 'invitation',\n ORDERS = 'orders',\n PENDING_ORDERS = 'pending_orders',\n SUPPLIER = 'supplier',\n PRODUCTS = 'products',\n FAVORITE_PRODUCTS = 'favorite_products',\n PRODUCT_CATEGORIES = 'product-categories',\n PRODUCT_UNITS = 'product-units',\n SUPPLIER_CATEGORIES = 'supplier-categories',\n ORDERS_EXPORT_PDF = 'orders_export_pdf',\n USERS_BY_COMPANY_WITH_DOMAIN = 'users-by-company-with-domain',\n USERS_BY_COMPANY = 'users-by-company',\n SUPPLIER_USERS = 'supplier-users',\n}\n\nexport interface BaseApiRequest {\n data: T[];\n links: {\n current: string;\n };\n meta: {\n currentPage: number;\n itemsPerPage: number;\n sortBy: string[][];\n totalItems: number;\n totalPages: number;\n };\n}\n","'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useRouter } from 'next/navigation';\n\nimport { JWTService } from '@/services/jwt';\nimport fetchJson from '@/utils/fetchJson';\n\nexport default function useUser({ redirectTo = '', redirectIfFound = false, isLanding = false } = {}) {\n const router = useRouter();\n const [user, setUser] = useState();\n\n useEffect(() => {\n fetchUser();\n }, []);\n\n useEffect(() => {\n const isValidToken = JWTService.isValidToken();\n if (redirectTo && redirectIfFound && user?.accessToken && isValidToken) {\n router.push(redirectTo);\n return;\n }\n\n if (!isLanding && redirectTo === '' && user?.accessToken === '' && !isValidToken) {\n router.push('/');\n }\n }, [user, redirectTo, redirectIfFound, isLanding]);\n\n const fetchUser = useCallback(async (route: string = '/api/user', method: string = 'GET', body?: object) => {\n const fetchedUser = await fetchJson(route, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n });\n setUser(fetchedUser);\n return fetchedUser;\n }, []);\n\n return { user, fetchUser };\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { get } from 'lodash';\n\nimport useUser from '@/lib/useUser';\nimport { JWTService } from '@/services/jwt';\n\nconst apiURL = process.env.NEXT_PUBLIC_API_URL;\nconst auth0ApiURL = process.env.NEXT_PUBLIC_AUTH0_ISSUER_BASE_URL;\nconst axiosInstance: AxiosInstance = axios.create({ baseURL: apiURL });\nexport const axiosAuth0Instance: AxiosInstance = axios.create({ baseURL: auth0ApiURL });\n\naxiosInstance.interceptors.request.use(\n async request => {\n const storedUser: string | null = localStorage.getItem('user');\n const anonymous = get(request, 'anonymous', false);\n\n if (request.headers) {\n request.headers['access-control-allow-origin'] = '*';\n request.headers.Tenant = 'supplier';\n }\n if (!anonymous && storedUser && request.headers) {\n const user: User = JSON.parse(storedUser || '');\n request.headers.Authorization = `Bearer ${user.accessToken}`;\n }\n\n return request;\n },\n async err => {\n return await Promise.reject(err);\n },\n);\n\naxiosInstance.interceptors.response.use(\n response => response,\n async error => {\n if (error.response) {\n const isConfirmLocation = window.location.pathname.split('/')[1] === 'confirm';\n if (\n !isConfirmLocation &&\n error.response &&\n (error.response.status === 401 || error.response.status === 403 || !JWTService.isValidToken())\n ) {\n const { fetchUser } = useUser();\n localStorage.clear();\n fetchUser('/api/logout', 'POST');\n }\n }\n\n return await Promise.reject(error.response.data);\n },\n);\n\naxiosAuth0Instance.interceptors.request.use(\n async request => {\n const storedMngmtToken: string | null = localStorage.getItem('mngmtAccessToken');\n if (storedMngmtToken && request.headers) {\n const accessToken: string = JSON.parse(storedMngmtToken || '');\n request.headers.authorization = `Bearer ${accessToken}`;\n request.headers['content-type'] = 'application/json';\n }\n return request;\n },\n async err => {\n return await Promise.reject(err);\n },\n);\n\naxiosAuth0Instance.interceptors.response.use(\n response => response,\n async error => {\n const isConfirmLocation = window.location.pathname.split('/')[1] === 'confirm';\n if (!isConfirmLocation && error.response && error.response.data.statusCode === 401) {\n const { fetchUser } = useUser();\n localStorage.clear();\n fetchUser('/api/logout', 'POST');\n }\n\n return await Promise.reject(error.response.data);\n },\n);\n\nexport default axiosInstance;\n","import {\n useMutation,\n type UseMutationOptions,\n type UseMutationResult,\n useQuery,\n type UseQueryResult,\n type UseQueryOptions,\n} from 'react-query';\n\nimport Endpoints from '@/constants/Endpoints';\nimport { QueryTypes } from '@/constants/QueryTypes';\nimport { axiosAuth0Instance } from '@/services/api';\nimport { JWTService } from '@/services/jwt';\n\ninterface PasswordlessStartFormData {\n client_id: string;\n client_secret?: string; // For Regular Web Applications\n connection: 'email' | 'sms';\n email?: string; // set for connection=email\n phone_number?: string; // set for connection=sms\n send?: 'link' | 'code'; // if left null defaults to link\n authParams?: {\n // any authentication parameters that you would like to add\n scope?: string; // used when asking for a magic link\n state?: string; // used when asking for a magic link, or from the custom login page\n };\n}\n\ninterface PasswordlessStartResponse {\n _id: string;\n phone_number: string;\n phone_verified: boolean;\n request_language: string; // en-US,en;q=0.9\n}\n\ninterface OAuthTokenFormData {\n grant_type: 'http://auth0.com/oauth/grant-type/passwordless/otp' | 'refresh_token';\n client_id: string;\n client_secret?: string; // only for web apps, native apps don’t have a client secret\n username?: string; // or \"\"\n otp?: string;\n realm?: 'email' | 'sms'; // or \"sms\"\n audience?: string; // in case you need an access token for a specific API\n scope?: string; // \"openid\" | \"profile\" | \"email\" whatever scopes you need\n refresh_token?: string;\n}\n\nexport interface OAuthTokenResponse {\n access_token: string;\n refresh_token: string;\n id_token: string; // Too much personal information, maybe this will be not sent\n token_type: string;\n expires_in: number;\n}\n\ninterface UpdateUserFormData {\n blocked?: boolean;\n email_verified?: boolean;\n email?: string;\n phone_number?: string;\n phone_verified?: boolean;\n user_metadata?: object;\n app_metadata?: object;\n given_name?: string;\n family_name?: string;\n name?: string;\n nickname?: string;\n picture?: string;\n verify_email?: boolean;\n verify_phone_number?: boolean;\n password?: string;\n connection?: string;\n client_id?: string;\n username?: string;\n}\n\ninterface UpdateUserResponse {\n user_id: string;\n email: string;\n email_verified: boolean;\n username: string;\n phone_number: string;\n phone_verified: boolean;\n created_at: string;\n updated_at: string;\n identities: Array<{\n connection: string;\n user_id: string;\n provider: string;\n isSocial: boolean;\n }>;\n app_metadata: object;\n user_metadata: object;\n picture: string;\n name: string;\n nickname: string;\n multifactor: string[];\n last_ip: string;\n last_login: string;\n logins_count: number;\n blocked: boolean;\n given_name: string;\n family_name: string;\n}\n\ninterface OAuthMngmtTokenFormData {\n grant_type: string;\n client_id: string;\n client_secret: string; // only for web apps, native apps don’t have a client secret\n audience: string; // in case you need an access token for a specific API\n}\n\ninterface OAuthMngmtTokenResponse {\n access_token: string;\n expires_in: number;\n scope: string;\n token_type: string;\n}\n\ninterface RoleItem {\n description: string;\n id: string;\n name: string;\n}\n\nexport interface OAuthUserRolesResponse extends Array {}\n\ninterface setUserRolesFormData {\n roles: string[];\n userId?: string;\n}\n\nexport class Auth0Service {\n /**\n * @description Sends sms OTP\n * @param username\n */\n static _passwordlessStart = async (username: string): Promise => {\n const formData: PasswordlessStartFormData = {\n connection: 'sms',\n client_id: process.env.NEXT_PUBLIC_AUTH0_CLIENT_ID || '',\n phone_number: username,\n send: 'code',\n };\n\n try {\n const response: any = (await axiosAuth0Instance.post(`${Endpoints.AUTH0_PASSWORDLESS_START}`, formData)).data;\n return response || null;\n } catch (error) {\n throw new Error(`Unknown error: ${JSON.stringify(error)}`);\n }\n };\n\n /**\n * @description Used to log-in based on OTP received from sms.\n * *WARNING: You cannot use this endpoint from Single Page Applications.*\n * @param phone\n * @param code\n */\n static _oauthToken = async (phone: string, code: string): Promise => {\n const formData: OAuthTokenFormData = {\n grant_type: 'http://auth0.com/oauth/grant-type/passwordless/otp',\n client_id: process.env.NEXT_PUBLIC_AUTH0_CLIENT_ID || '',\n client_secret: process.env.NEXT_PUBLIC_AUTH0_CLIENT_SECRET || '',\n username: phone,\n otp: code,\n realm: 'sms', // or \"sms\"\n scope: 'offline_access', // whatever scopes you need\n audience: process.env.NEXT_PUBLIC_AUTH0_AUDIENCE, // THIS MUST BE SET OTHERWISE WE WILL RECEIVE AN OPAQUE TOKEN (CAN'T BE DECODED)\n };\n\n try {\n const response: OAuthTokenResponse = (await axiosAuth0Instance.post(`${Endpoints.AUTH0_OAUTH_TOKEN}`, formData))\n .data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n /**\n * @description Get user metadata using auth0 user id\n * @param userId\n */\n private static readonly _getUserProfile = async (userId: string): Promise => {\n try {\n const response: Auth0Profile = (await axiosAuth0Instance.get(`${Endpoints.AUTH0_UPDATE_USER_METADATA}${userId}`))\n .data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n public static useUserProfile = (\n userId: string,\n { ...opts }: UseQueryOptions,\n ): UseQueryResult => {\n return useQuery(QueryTypes.PROFILE, async () => await this._getUserProfile(userId), {\n refetchOnWindowFocus: false,\n cacheTime: 0,\n ...opts,\n });\n };\n\n /**\n * @description Patch user metadata using auth0 user id\n * @param userId\n * @param data\n */\n static _patchUserMetaData = async (userId: string, data: object, extraData?: any): Promise => {\n const formData: UpdateUserFormData = {\n user_metadata: data,\n // client_id: Constants.manifest && Constants.manifest.extra ? Constants.manifest.extra.auth0ClientID || '' : '',\n };\n\n if (extraData) {\n formData.name = extraData.name;\n formData.given_name = extraData.given_name;\n formData.family_name = extraData.family_name;\n formData.picture = extraData?.picture;\n }\n\n try {\n const response: UpdateUserResponse = (\n await axiosAuth0Instance.patch(`${Endpoints.AUTH0_UPDATE_USER_METADATA}${userId}`, formData)\n ).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n /**\n * @description Used to log-in based on OTP received from sms.\n * *WARNING: You cannot use this endpoint from Single Page Applications.*\n */\n static _oauthMngmtToken = async (): Promise => {\n const formData: OAuthMngmtTokenFormData = {\n grant_type: 'client_credentials',\n client_id: process.env.NEXT_PUBLIC_AUTH0_MNGMNT_CLIENT_ID || '',\n client_secret: process.env.NEXT_PUBLIC_AUTH0_MNGMNT_CLIENT_SECRET || '',\n audience: process.env.NEXT_PUBLIC_AUTH0_MNGMNT_AUDIENCE || '',\n };\n try {\n const response: OAuthMngmtTokenResponse = (\n await axiosAuth0Instance.post(`${Endpoints.AUTH0_OAUTH_TOKEN}`, formData)\n ).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n static UserRoles(accessToken: string): string[] {\n return JWTService.decodeUserRoles(accessToken);\n }\n\n /**\n * @description Get user roles permissions\n */\n private static readonly _getUserRoles = async (): Promise => {\n try {\n const response: OAuthUserRolesResponse = (await axiosAuth0Instance.get(`${Endpoints.AUTH0_ROLES}`)).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error);\n }\n };\n\n public static useMutationGetUserRoles = (\n options?: UseMutationOptions,\n ): UseMutationResult => {\n return useMutation(async () => await Auth0Service._getUserRoles(), options);\n };\n\n /**\n * @description Set user roles\n * @param formData\n */\n static _setUserRoles = async (formData: setUserRolesFormData): Promise => {\n const { userId } = formData;\n delete formData.userId;\n\n try {\n const response: OAuthUserRolesResponse = (\n await axiosAuth0Instance.post(`${Endpoints.AUTH0_UPDATE_USER_METADATA}${userId}/roles`, formData)\n ).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error);\n }\n };\n\n public static useSetUserRoles = (\n options?: UseMutationOptions,\n ): UseMutationResult => {\n return useMutation(\n async inviteSupplierFormData => await Auth0Service._setUserRoles(inviteSupplierFormData),\n options,\n );\n };\n\n /**\n * @description Used to log-in based on OTP received from sms.\n * *WARNING: You cannot use this endpoint from Single Page Applications.*\n * @param refreshToken\n */\n static _refreshToken = async (refreshToken: string): Promise => {\n const formData: OAuthTokenFormData = {\n grant_type: 'refresh_token',\n client_id: process.env.NEXT_PUBLIC_AUTH0_CLIENT_ID || '',\n client_secret: process.env.NEXT_PUBLIC_AUTH0_CLIENT_SECRET || '',\n refresh_token: refreshToken,\n };\n\n try {\n const response: OAuthTokenResponse = (await axiosAuth0Instance.post(`${Endpoints.AUTH0_OAUTH_TOKEN}`, formData))\n .data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n /**\n * @description Get users by company id\n * @param companyId\n */\n private static readonly _getUsersByCompanyWithDomain = async (companyId: number): Promise => {\n try {\n const response: Auth0Profile = (\n await axiosAuth0Instance.get(`${Endpoints.AUTH0_UPDATE_USERS}`, {\n params: {\n q: `user_metadata.company_id:${companyId} AND _exists_:user_metadata.restaurants_domain`,\n search_engine: 'v3',\n },\n })\n ).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n public static useGetUsersByCompanyWithDomain = (\n companyId: number,\n { ...opts }: UseQueryOptions,\n ): UseQueryResult => {\n return useQuery(\n QueryTypes.USERS_BY_COMPANY_WITH_DOMAIN,\n async () => await this._getUsersByCompanyWithDomain(companyId),\n {\n refetchOnWindowFocus: false,\n cacheTime: 0,\n ...opts,\n },\n );\n };\n\n private static readonly _getUsersByCompany = async (companyId: number): Promise => {\n try {\n const response: Auth0Profile[] = (\n await axiosAuth0Instance.get(`${Endpoints.AUTH0_UPDATE_USERS}`, {\n params: {\n q: `user_metadata.company_id:${companyId}`,\n search_engine: 'v3',\n },\n })\n ).data;\n return response || null;\n } catch (error: any) {\n throw new Error(error.error_description);\n }\n };\n\n public static useGetUsersByCompany = (\n companyId: number,\n { ...opts }: UseQueryOptions,\n ): UseQueryResult => {\n return useQuery(QueryTypes.USERS_BY_COMPANY, async () => await this._getUsersByCompany(companyId), {\n refetchOnWindowFocus: false,\n cacheTime: 0,\n ...opts,\n });\n };\n}\n","import * as Sentry from '@sentry/nextjs';\nimport jwt_decode, { type JwtPayload } from 'jwt-decode';\n\nimport { Auth0Service, type OAuthTokenResponse } from '@/services/auth0';\nimport fetchJson from '@/utils/fetchJson';\nimport { userParse } from '@/utils/user';\n\nconst oneDay = 86400000;\nexport interface DecodedUser extends JwtPayload {\n nickname: string;\n name: string;\n picture: string;\n updated_at: string;\n iss: string;\n sub: string;\n aud: string;\n iat: number;\n exp: number;\n}\n\ninterface DecodedUserAccessToken extends JwtPayload {\n 'http://dev-suppliers-uselisto.com/roles': string[];\n 'http://dev-suppliers-uselisto.com/user_metadata': {\n name?: string;\n company_id: number;\n };\n iss: 'https://dev-suppliers-uselisto.us.auth0.com/';\n sub: string;\n aud: string[];\n iat: number;\n exp: number;\n azp: string;\n scope: string;\n gty: string;\n}\n\nexport class JWTService {\n static decodeUser = (auth0User: OAuthTokenResponse): DecodedUser => {\n return jwt_decode(auth0User.access_token);\n };\n\n static decodeUserRoles = (accessToken: string): string[] => {\n const decodedAccessToken: any = jwt_decode(accessToken);\n return decodedAccessToken[process.env.NEXT_PUBLIC_AUTH0_ROLES_URL || 'http://dev-suppliers-uselisto.com/roles'];\n };\n\n static isValidToken = (): boolean => {\n const storedUser: string | null = localStorage.getItem('user');\n if (!storedUser) {\n return false;\n }\n const user: User = JSON.parse(storedUser || '');\n const token = user.accessToken;\n const decodedToken: DecodedUser = jwt_decode(token);\n const currentDate = new Date();\n // JWT exp is in seconds\n if (decodedToken.exp * 1000 < currentDate.getTime()) {\n return false;\n } else {\n return true;\n }\n };\n\n static getManagmentToken = async (responseToken: OAuthTokenResponse) => {\n const response = await Auth0Service._oauthMngmtToken();\n if (responseToken && response) {\n localStorage.setItem('mngmtAccessToken', JSON.stringify(response.access_token));\n const decodedUserData = JWTService.decodeUser(responseToken);\n const user = userParse(decodedUserData, responseToken.access_token, responseToken.refresh_token);\n localStorage.setItem('user', JSON.stringify(user));\n await fetchJson('/api/login', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(user),\n });\n }\n };\n\n static refreshToken = async () => {\n try {\n const currentTime = (Date.now() + oneDay) / 1000;\n const storedUser: string | null = localStorage.getItem('user');\n const user: User = JSON.parse(storedUser || '');\n if (user.expire && user.expire < currentTime) {\n const response = await Auth0Service._refreshToken(user.refreshToken);\n await this.getManagmentToken(response);\n }\n } catch (err) {\n Sentry.captureException(err);\n }\n };\n}\n","import React from 'react';\n\nimport { UserActions } from '@/state/user/actions';\nimport { UserState, initialUserState } from '@/state/user/state';\n\nexport const UserContext = React.createContext<{\n state: UserState;\n dispatch: React.Dispatch;\n}>({\n state: initialUserState,\n dispatch: () => undefined,\n});\n","export enum UserActionTypes {\n SetUser,\n SetUserToken,\n SetUserShowOnboarding,\n}\n\nexport interface SetUser {\n type: UserActionTypes.SetUser;\n payload: User;\n}\n\nexport interface SetUserToken {\n type: UserActionTypes.SetUserToken;\n payload: { accessToken: string };\n}\n\nexport interface SetUserShowOnboarding {\n type: UserActionTypes.SetUserShowOnboarding;\n payload: { showOnboarding: boolean };\n}\n\nexport type UserActions = SetUser | SetUserToken | SetUserShowOnboarding;\n","import {\n type UserActions,\n UserActionTypes,\n type SetUser,\n type SetUserToken,\n type SetUserShowOnboarding,\n} from '@/state/user/actions';\nimport { type UserState } from '@/state/user/state';\n\nexport const userReducer = (state: UserState, action: UserActions): UserState => {\n switch (action.type) {\n case UserActionTypes.SetUser:\n return { ...state, user: action.payload };\n case UserActionTypes.SetUserToken:\n return {\n ...state,\n user: { ...state.user, accessToken: action.payload.accessToken },\n };\n case UserActionTypes.SetUserShowOnboarding:\n return {\n ...state,\n user: { ...state.user, showOnboarding: action.payload.showOnboarding },\n };\n default:\n return state;\n }\n};\n\nexport const getUserToken = (state: UserState): string | null => state.user.accessToken;\n\nexport const setUserToken = (accessToken: string): SetUserToken => ({\n type: UserActionTypes.SetUserToken,\n payload: { accessToken },\n});\n\nexport const getUser = (state: UserState): User => state.user;\n\nexport const setUser = (user: User): SetUser => ({\n type: UserActionTypes.SetUser,\n payload: user,\n});\n\nexport const getUserShowOnboarding = (state: UserState): boolean => state.user.showOnboarding;\n\nexport const setUserShowOnboarding = (showOnboarding: boolean): SetUserShowOnboarding => ({\n type: UserActionTypes.SetUserShowOnboarding,\n payload: { showOnboarding },\n});\n","export interface UserState {\n user: User;\n}\n\nexport const initialUserState: UserState = {\n user: {\n email: '',\n name: '',\n accessToken: '',\n showOnboarding: false,\n id: '',\n roles: [],\n refreshToken: '',\n },\n};\n","export default async function fetchJson(input: RequestInfo, init?: RequestInit): Promise {\n const response = await fetch(input, init);\n\n // if the server replies, there's always some data in json\n // if there's a network error, it will throw at the previous line\n const data = await response.json();\n\n // response.ok is true when res.status is 2xx\n // https://developer.mozilla.org/en-US/docs/Web/API/Response/ok\n if (response.ok) {\n return data;\n }\n\n throw new FetchError({\n message: response.statusText,\n response,\n data,\n });\n}\n\nclass FetchError extends Error {\n response: Response;\n data: {\n message: string;\n };\n\n constructor({\n message,\n response,\n data,\n }: {\n message: string;\n response: Response;\n data: {\n message: string;\n };\n }) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FetchError);\n }\n\n this.name = 'FetchError';\n this.response = response;\n this.data = data ?? { message };\n }\n}\n","import { Auth0Service } from '@/services/auth0';\nimport { type DecodedUser } from '@/services/jwt';\n\nexport const userParse = (decodedUser: DecodedUser, accessToken: string, refreshToken: string): User => ({\n email: '',\n name: decodedUser.name,\n accessToken,\n showOnboarding: false,\n id: decodedUser.sub,\n roles: Auth0Service.UserRoles(accessToken),\n refreshToken,\n expire: decodedUser.exp,\n});\n","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin"],"names":["Promise","resolve","then","__webpack_require__","bind","RootLayout","param","children","router","useRouter","segment","get","fetchUser","useUser","isLanding","queryClient","useState","QueryClient","state","dispatch","useReducer","userReducer","initialUserState","loadingUser","setLoadingUser","isPending","startTransition","useTransition","isReady","setIsReady","useEffect","hotjar","initialize","UA","GA4","hideLoading","getUser","isValidToken","JWTService","user","accessToken","getStoredUser","push","localStorage","clear","error","storedUser","getItem","refreshToken","JSON","parse","setUser","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","html","lang","head","jsx","title","meta","name","content","link","rel","href","GoogleAnalytics","trackPageViews","body","className","QueryClientProvider","client","UserContext","Provider","value","div","role","svg","aria-hidden","viewBox","fill","xmlns","path","d","ToastContainer","ReactQueryDevtools","initialIsOpen","__webpack_exports__","Z","AD_BROADCASTS","AUTH0_OAUTH_TOKEN","AUTH0_PASSWORDLESS_START","AUTH0_ROLES","AUTH0_UPDATE_USER_METADATA","AUTH0_UPDATE_USERS","BD_USER_PROFILE","FAVORITE_PRODUCTS","FILE_UPLOADS","ORDER_BULK_CONFIRM","ORDER_EXPORT","ORDER_GET","ORDER_UPDATE_TOKEN","ORDERS","PRODUCT_CATEGORIES","PRODUCT_TO_FAVORITES","PRODUCT_UNITS","PRODUCTS_BULK","PRODUCTS_DELETE_BULK","PRODUCTS","ADD_PRODUCT_CATALOG","RESTAURANT_FAVORITES","RESTAURANT_GET","RESTAURANT_REGISTRATION","RESTAURANT_SEARCH_AUTOCOMPLETE","RESTAURANT_SUPPLIER","RESTAURANT_USER_INVITATIONS_DETAIL","RESTAURANT_USER_INVITATIONS","SUPPLIER_CATALOG","SUPPLIER_CATEGORIES","SUPPLIER_GET","SUPPLIER_INVITE","SUPPLIER_REGISTRATION","SUPPLIER_REQUEST_ACCESS","SUPPLIER_RESTAURANTS_BULK","SUPPLIER_RESTAURANTS","SUPPLIER_SEARCH_AUTOCOMPLETE","SUPPLIER_USER_INVITATION_POST","SUPPLIER_USER_INVITATIONS_DETAIL","SUPPLIER_USER_INVITATIONS","SUPPLIER_USER_VALIDATION","UPLOAD_CSV","UPLOAD_FILE","UPLOAD_FILES","PRODUCT_THUMBNAIL","USER_UPDATE_DATA","SUPPLIER_USERS","QueryTypes","redirectTo","redirectIfFound","arguments","length","useCallback","route","method","fetchedUser","fetchJson","headers","stringify","axiosInstance","axios","baseURL","process","axiosAuth0Instance","interceptors","request","use","anonymous","Tenant","Authorization","concat","err","reject","response","isConfirmLocation","window","location","pathname","split","status","data","storedMngmtToken","authorization","statusCode","Auth0Service","UserRoles","decodeUserRoles","_passwordlessStart","username","post","Endpoints","connection","client_id","phone_number","send","formData","_oauthToken","phone","code","grant_type","client_secret","otp","realm","scope","audience","error_description","_getUserProfile","userId","useUserProfile","opts","useQuery","PROFILE","refetchOnWindowFocus","cacheTime","_patchUserMetaData","extraData","user_metadata","given_name","family_name","picture","patch","_oauthMngmtToken","_getUserRoles","useMutationGetUserRoles","useMutation","options","_setUserRoles","useSetUserRoles","inviteSupplierFormData","_refreshToken","refresh_token","_getUsersByCompanyWithDomain","companyId","params","q","search_engine","useGetUsersByCompanyWithDomain","USERS_BY_COMPANY_WITH_DOMAIN","_getUsersByCompany","useGetUsersByCompany","USERS_BY_COMPANY","decodeUser","jwt_decode","auth0User","access_token","decodedAccessToken","token","decodedToken","currentDate","Date","exp","getTime","getManagmentToken","responseToken","setItem","decodedUserData","userParse","currentTime","now","oneDay","expire","Sentry","React","undefined","UserActionTypes","action","type","SetUser","payload","SetUserToken","SetUserShowOnboarding","showOnboarding","email","id","roles","input","init","fetch","json","ok","FetchError","message","statusText","Error","constructor","captureStackTrace","decodedUser","sub"],"sourceRoot":""}