@gen3/core 0.10.48 → 0.10.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/hooks.ts","../../src/api.ts","../../src/features/fence/utils.ts","../../src/features/user/userSliceRTK.ts","../../src/features/gen3/gen3Api.ts","../../src/features/fence/fenceApi.ts","../../src/features/fence/credentialsApi.ts","../../src/features/fence/jwtApi.ts","../../src/dataAccess.ts","../../src/features/user/userSlice.ts","../../src/features/user/externalLoginsSlice.ts","../../src/types/index.ts","../../src/features/gen3Apps/gen3AppRegistry.ts","../../src/features/gen3Apps/gen3AppsSlice.ts","../../src/features/drsResolver/drsHostnameSlice.ts","../../src/features/modals/modalsSlice.ts","../../src/features/cohort/cohortSlice.ts","../../src/features/guppy/guppyApi.ts","../../src/reducers.ts","../../src/store.ts","../../src/provider.tsx","../../src/features/authz/authzMappingSlice.ts","../../src/features/metadata/metadataSlice.ts","../../src/features/gen3Apps/constants.ts","../../src/features/gen3Apps/Gen3App.tsx","../../src/features/gen3Apps/Gen3AppRTKQ.ts","../../src/features/graphQL/graphQLSlice.ts","../../src/features/filters/filters.ts","../../src/features/filters/utils.ts","../../src/features/guppy/guppySlice.ts","../../src/features/guppy/conversion.ts","../../src/features/guppy/utils.ts","../../src/features/guppy/guppyDownloadSlice.ts","../../src/features/aiSearch/aiSearchSlice.ts","../../src/features/workspace/workspacesSlice.ts","../../src/features/submission/authMappingUtils.ts","../../src/utils/extractvalues.ts","../../src/features/submission/submissionApi.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME = process.env.GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || GEN3_API;\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_STATUS_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n","import React from 'react';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport { Store } from '@reduxjs/toolkit';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\n// From here down is react-related code. If we wanted to create a UI-agnotic core,\n// we could need to move the following code and the provider into a new workspace,\n// such as core-react.\n\n/**\n * The initial context is never used in practice. A little casting voodoo to satisfy TS.\n *\n * Note: Should the action type be AnyAction (from redux) or PayloadAction (from redux-toolkit)?\n * If we are creating all of our actions through RTK, then PayloadAction might be the\n * correct opinionated type.\n */\n\nexport const CoreContext = React.createContext(\n undefined as unknown as ReactReduxContextValue<CoreState>,\n);\n\nexport const useCoreSelector: TypedUseSelectorHook<CoreState> =\n createSelectorHook(CoreContext);\n\nexport const useCoreDispatch: () => CoreDispatch =\n createDispatchHook(CoreContext);\n\nexport const useCoreStore: () => Store = createStoreHook(CoreContext);\n","import {\n buildCreateApi,\n coreModule,\n reactHooksModule,\n CreateApi,\n ApiModules,\n} from '@reduxjs/toolkit/query/react';\nimport { useCoreSelector, useCoreStore, useCoreDispatch } from './hooks';\n\n/**\n * Creates a custom Redux Toolkit core API\n * See: https://redux-toolkit.js.org/rtk-query/usage/customizing-create-api\n * @returns: created core API.\n */\nconst coreCreateApi: CreateApi<keyof ApiModules<any, any, any, any>> =\n buildCreateApi(\n coreModule(),\n reactHooksModule({\n hooks: {\n useSelector: useCoreSelector,\n useStore: useCoreStore as never,\n useDispatch: useCoreDispatch as never,\n },\n }),\n );\n\nexport { coreCreateApi };\n","import { FetchError, Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API } from '../../constants';\nimport { FetchRequest } from './fenceApi';\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n return {\n url: res.url,\n status: res.status,\n statusText: res.statusText,\n text: await res.text(),\n request: request,\n };\n};\n/**\n * Template for a standard fence request\n * @returns: response data\n */\nexport const fetchFence = async <T>({\n endpoint,\n headers,\n body = {},\n method = 'GET',\n isJSON = true,\n}: FetchRequest): Promise<Gen3FenceResponse<T>> => {\n const res = await fetch(`${GEN3_FENCE_API}${endpoint}`, {\n method: method,\n headers: headers,\n body: 'POST' === method ? JSON.stringify(body) : null,\n });\n\n if (res.ok)\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n\n throw await buildFetchError(res, {\n endpoint,\n method,\n headers,\n body,\n });\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { coreCreateApi } from '../../api';\nimport { fetchFence } from '../fence/utils';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { Gen3User, LoginStatus } from './types';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\n\ninterface StatusWithCSRFTokenResponse {\n csrf: string;\n message?: string;\n}\n\nexport interface CSRFToken {\n readonly csrfToken: string;\n}\n\nexport interface UserAuthResponse {\n readonly data: Gen3User;\n readonly loginStatus: LoginStatus;\n}\n\nconst userAuthApi = coreCreateApi({\n reducerPath: 'userAuthApi',\n refetchOnMountOrArgChange: 1800,\n refetchOnReconnect: true,\n baseQuery: async ({ endpoint }, { getState }) => {\n let results;\n const csrfToken = selectCSRFToken(getState() as CoreState);\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n credentials: 'include',\n };\n\n try {\n results = await fetchFence({ endpoint, headers });\n } catch (e) {\n /*\n Because an \"error\" response is valid for the auth requests we don't want to\n put the request in an error state, or it will attempt the request over and over again\n */\n return { data: {} };\n }\n\n return { data: results };\n },\n endpoints: (builder) => ({\n fetchUserDetails: builder.query<UserAuthResponse, void>({\n query: () => ({ endpoint: '/user/user' }),\n transformResponse(response: Gen3FenceResponse<Gen3User>) {\n return {\n data: response.data,\n // TODO: check if this is the correct status code\n\n loginStatus:\n response.status === 200 && response.data?.username\n ? 'authenticated'\n : 'unauthenticated',\n };\n },\n }),\n getCSRF: builder.query<CSRFToken, void>({\n query: () => ({ endpoint: '/_status' }),\n transformResponse: (\n response: Gen3FenceResponse<StatusWithCSRFTokenResponse>,\n ): CSRFToken => {\n return { csrfToken: response?.data?.csrf ?? '' };\n },\n }),\n }),\n});\n\nconst EMPTY_USER: Gen3User = {\n username: undefined,\n};\n\nexport const {\n useFetchUserDetailsQuery,\n useLazyFetchUserDetailsQuery,\n useGetCSRFQuery,\n} = userAuthApi;\nexport const userAuthApiMiddleware = userAuthApi.middleware;\nexport const userAuthApiReducerPath = userAuthApi.reducerPath;\nexport const userAuthApiReducer = userAuthApi.reducer;\n\nexport const selectUserDetailsFromState =\n userAuthApi.endpoints.fetchUserDetails.select();\n\nexport const selectUserDetails = createSelector(\n selectUserDetailsFromState,\n (userDetails) => userDetails?.data?.data ?? EMPTY_USER,\n);\n\nexport const selectUserAuthStatus = createSelector(\n selectUserDetailsFromState,\n (userLoginState) =>\n userLoginState.status === QueryStatus.pending\n ? ('pending' as LoginStatus)\n : userLoginState.status === QueryStatus.uninitialized\n ? ('not present' as LoginStatus)\n : userLoginState?.data?.loginStatus ?? ('unauthenticated' as LoginStatus),\n);\n\nexport const selectCSRFTokenData = userAuthApi.endpoints.getCSRF.select();\n\nconst passThroughTheState = (state: CoreState) => state.gen3Services;\n\nexport const selectCSRFToken = createSelector(\n [selectCSRFTokenData, passThroughTheState],\n (state) => state?.data?.csrfToken,\n);\n\nexport const selectHeadersWithCSRFToken = createSelector(\n [selectCSRFToken, passThroughTheState],\n (csrfToken) => ({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n }),\n);\n","import { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { coreCreateApi } from '../../api';\nimport { fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { selectCSRFToken } from '../user/userSliceRTK';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Creates a base class core API for building other API endpoints on top of.\n * @param reducerPath - The root key name that the other slices will be derived from\n * @param baseQuery: - The template query which the slices will addon to\n * @param endpoints - Base API endpoints that should exist in every slice\n * @returns: The generated base API\n */\nexport const gen3Api = coreCreateApi({\n reducerPath: 'gen3Services',\n baseQuery: fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers, { getState }) => {\n const csrfToken = selectCSRFToken(getState() as CoreState);\n headers.set('Content-Type', 'application/json');\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n return headers;\n },\n }),\n endpoints: () => ({}),\n});\n\nexport const gen3ServicesReducer: Reducer = gen3Api.reducer as Reducer;\nexport const gen3ServicesReducerMiddleware = gen3Api.middleware as Middleware;\n","import { gen3Api } from '../gen3/gen3Api';\nimport { GEN3_FENCE_API, GEN3_REDIRECT_URL } from '../../constants';\nimport { fetchFence } from './utils';\n\nexport interface NameUrl {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface Gen3LoginProvider {\n readonly desc?: string;\n readonly id: string;\n readonly idp: string;\n readonly name: string;\n readonly secondary: boolean;\n readonly url: string;\n readonly urls: Array<NameUrl>;\n}\n\nexport interface Gen3FenceLoginProviders {\n readonly default_provider: Gen3LoginProvider;\n readonly providers: Array<Gen3LoginProvider>;\n}\n\n/**\n * Creates a fence API endpoint for handling login processes\n * @param endpoints - defined endpoint query for logging in\n * @returns: The generated fence login API slice\n */\nexport const loginProvidersApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getLoginProviders: builder.query<Gen3FenceLoginProviders, void>({\n query: () => `${GEN3_FENCE_API}/user/login`,\n }),\n }),\n});\n\nexport const { useGetLoginProvidersQuery } = loginProvidersApi;\n\nexport interface FetchRequest {\n readonly endpoint: string;\n readonly method?: 'GET' | 'POST';\n readonly body?: object;\n readonly headers?: Record<string, string>;\n readonly isJSON?: boolean;\n}\n\n/**\n * Logout from fence\n */\n\nexport const logoutFence = async (redirect = '/') =>\n await fetchFence({\n endpoint: `${GEN3_FENCE_API}/user/logout?next=${GEN3_REDIRECT_URL}${redirect}`,\n method: 'GET',\n });\n","import { gen3Api } from '../gen3';\nimport { GEN3_FENCE_API } from '../../constants';\n\nexport interface APIKey {\n readonly jti: string;\n readonly exp: number;\n}\nexport interface Gen3FenceCredentials {\n readonly jtis: ReadonlyArray<APIKey>;\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Credentials'],\n});\n\ninterface DeleteCredentialParams {\n readonly csrfToken?: string;\n readonly id: string;\n}\n\ninterface AuthorizeFromCredentialsParams {\n api_key: string;\n key_id: string;\n}\nexport interface AuthTokenResponse {\n access_token: string;\n}\n\n/**\n * Adds a credentialsApi into the base gen3Api\n * @endpoints Includes get, add, and remove credential operations\n * @see https://github.com/uc-cdis/fence/blob/master/openapis/swagger.yaml#L972-L1033\n * @param getCredentials - List all the API keys for the current user\n * @param addNewCredential - Get a new API key for the current user\n * @param removeCredential - Delete API access key with given ID for current user\n * @returns: A fence credential API for manipulating user credentials\n */\nexport const credentialsApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getCredentials: builder.query<ReadonlyArray<APIKey>, void>({\n query: () => `${GEN3_FENCE_API}/user/credentials/api`,\n transformResponse: (\n response: Gen3FenceCredentials,\n ): ReadonlyArray<APIKey> => response['jtis'], // the response is a JSON object with a single key,\n // \"jtis\", which is an array of API keys\n // no need to transform the response, since the API returns the correct format\n providesTags: ['Credentials'],\n }),\n addNewCredential: builder.mutation({\n query: (csrfToken: string) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-csrf-token': csrfToken,\n },\n body: {\n scope: ['user', 'data'],\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n removeCredential: builder.mutation<void, DeleteCredentialParams>({\n query: ({ csrfToken, id }) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api/${id}`,\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'x-csrf-token': csrfToken }),\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n authorizeFromCredentials: builder.mutation<AuthTokenResponse, AuthorizeFromCredentialsParams>({\n query: (params) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api/access_token`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: {\n api_key: params.api_key,\n key_id: params.key_id,\n },\n }),\n }),\n })\n});\n\nexport const {\n useGetCredentialsQuery,\n useAddNewCredentialMutation,\n useRemoveCredentialMutation,\n useAuthorizeFromCredentialsMutation\n} = credentialsApi;\n","import { gen3Api } from '../gen3';\n\nexport interface JWTKeys {\n keys: ReadonlyArray<string[2]>\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['fenceJWT'],\n});\n\n/**\n * A fence API for getting the public keys which can be used to validate\n * JWTs issued and signed by fence\n * @returns: Fence public keys\n */\nexport const jwtApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getJWKKeys: builder.query<ReadonlyArray<JWTKeys>, void>({\n query: () => 'user/jwt/keys',\n providesTags: ['fenceJWT'],\n }),\n }),\n});\n\nexport const {\n useGetJWKKeysQuery,\n} = jwtApi;\n","import { useEffect, useRef } from 'react';\nimport { useCoreDispatch, useCoreSelector } from './hooks';\nimport { CoreState } from './reducers';\nimport { isEqual } from 'lodash';\n\nexport type UnknownJson = Record<string, unknown>;\n\nexport type DataStatus = 'uninitialized' | 'pending' | 'fulfilled' | 'rejected';\n\nexport interface Gen3Response<H = UnknownJson> {\n readonly data: H;\n readonly warnings?: Record<string, string>;\n readonly errors?: Record<string, string>;\n}\n\nexport interface UseCoreDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface CoreDataSelectorResponse<T, S = DataStatus> {\n readonly data?: T;\n readonly status: S;\n readonly error?: string;\n}\n\nexport interface CoreDataSelector<T> {\n (state: CoreState): CoreDataSelectorResponse<T>;\n}\n\nexport interface FetchDataActionCreator<P, A> {\n (...params: P[]): A;\n}\n\nexport interface UseCoreDataHook<P, T> {\n (...params: P[]): UseCoreDataResponse<T>;\n}\n\nexport const usePrevious = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const createUseCoreDataHook = <P, A, T>(\n fetchDataActionCreator: FetchDataActionCreator<P, A>,\n dataSelector: CoreDataSelector<T>,\n): UseCoreDataHook<P, T> => {\n return (...params: P[]) => {\n const coreDispatch = useCoreDispatch();\n const { data, status, error } = useCoreSelector(dataSelector);\n const action = fetchDataActionCreator(...params);\n const prevParams = usePrevious<P[]>(params);\n\n useEffect(() => {\n if (status === 'uninitialized' || !isEqual(prevParams, params)) {\n // createDispatchHook types forces the input to AnyAction, which is\n // not compatible with thunk actions. hence, the `as any` cast. ;(\n coreDispatch(action as any); // eslint-disable-line\n }\n }, [status, coreDispatch, action, params, prevParams]);\n\n return {\n data,\n error,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n };\n};\n\nexport interface CoreDataValueSelector<T> {\n (state: CoreState): T;\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport { fetchFence, Gen3FenceResponse } from '../fence';\nimport { CoreDispatch } from '../../store';\nimport { CoreState } from '../../reducers';\nimport {\n CoreDataSelectorResponse,\n createUseCoreDataHook,\n DataStatus,\n} from '../../dataAccess';\nimport { useCoreDispatch, useCoreSelector } from '../../hooks';\nimport { useEffect } from 'react';\nimport { Gen3User, LoginStatus } from './types';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from './userSliceRTK';\n\nexport interface Gen3UserLoginResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly loginStatus: LoginStatus;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\n/**\n * Creates an async thunk for fetching user permissions details from fence\n * @see https://redux-toolkit.js.org/api/createAsyncThunk\n * @returns: A fence response dict containing user details\n */\nexport const fetchUserState = createAsyncThunk<\n Gen3FenceResponse<Gen3User>,\n void,\n { dispatch: CoreDispatch; state: CoreState }\n>('fence/user/user', async (_, meta) => {\n // Get an access token from a cookie if in development mode\n const csrfToken = selectCSRFToken(meta.getState());\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n\n return await fetchFence({\n endpoint: '/user/user',\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n credentials: 'include',\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n },\n });\n});\n\nexport const isAuthenticated = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'authenticated';\n\nexport const isPending = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'pending';\n\nexport interface Gen3UserState {\n readonly data?: Gen3User;\n readonly status: DataStatus;\n readonly loginStatus: LoginStatus;\n readonly error?: string;\n}\n\nconst initialState: Gen3UserState = {\n status: 'uninitialized',\n loginStatus: 'unauthenticated',\n error: undefined,\n};\n\n/**\n * Wraps a slice on top of fetchUserState async thunk to keep track of\n * query state. authenticated/not-authenticated vs. ejected/fulfilled/pending\n * @returns: status messages wrapped around fetchUserState response dict\n */\nconst slice = createSlice({\n name: 'fence/user',\n initialState,\n reducers: {\n resetUserState: () => initialState,\n },\n extraReducers: (builder) => {\n builder\n .addCase(fetchUserState.fulfilled, (_, action) => {\n const response = action.payload;\n if (response.status !== 200) {\n return {\n status: 'rejected',\n loginStatus: 'unauthenticated',\n };\n }\n\n return {\n data: { ...response.data },\n status: 'fulfilled',\n loginStatus: 'authenticated',\n };\n })\n .addCase(fetchUserState.pending, () => {\n return { status: 'pending', loginStatus: 'unauthenticated' };\n })\n .addCase(fetchUserState.rejected, () => {\n return { status: 'rejected', loginStatus: 'unauthenticated' };\n });\n },\n});\n\nexport const userReducer = slice.reducer;\n\nexport const { resetUserState } = slice.actions;\n\nexport interface Gen3UserSelectorResponse<T>\n extends CoreDataSelectorResponse<T> {\n readonly loginStatus: LoginStatus;\n}\n\nexport const selectUserData = (\n state: CoreState,\n): Gen3UserSelectorResponse<Gen3User> => {\n return state.user;\n};\n\nexport const selectUser = (state: CoreState): Gen3UserState => state.user;\n\nexport const selectUserLoginStatus = (state: CoreState): LoginStatus =>\n state.user.loginStatus;\n\nexport const useUser = createUseCoreDataHook(fetchUserState, selectUserData);\n\nexport const useIsUserLoggedIn = (): boolean => {\n return useCoreSelector((state) =>\n isAuthenticated(selectUserLoginStatus(state)),\n );\n};\n\n/**\n * Hook to return get the authenticated state of the user and if logged in,\n * the user's profile and access api.\n * Note that if fetchUserState gets called, the user's session is renewed.\n */\nexport const useUserAuth = (renew = false): Gen3UserLoginResponse<Gen3User> => {\n const coreDispatch = useCoreDispatch();\n const { data, status, loginStatus, error } = useCoreSelector(selectUserData);\n\n useEffect(() => {\n if (status === 'uninitialized' || renew) {\n // TODO: need to determine what other states require dispatch\n coreDispatch(fetchUserState());\n }\n }, [status, coreDispatch, renew]);\n\n return {\n data: data,\n error,\n loginStatus,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n};\n","import { gen3Api } from '../gen3';\nimport { ExternalProvider } from './types';\nimport { GEN3_WTS_API } from '../../constants';\n\nexport interface ExternalProviderResponse {\n providers: ExternalProvider[];\n}\n\n/**\n * @description Creates a externalLoginApi for listing the configured identity providers\n * in workspace token service. Includes user token expiration time.\n * @see https://github.com/uc-cdis/workspace-token-service/tree/master\n */\nexport const externalLoginApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getExternalLogins: builder.query<ExternalProviderResponse, void>({\n query: () => ({\n url: `${GEN3_WTS_API}/external_oidc/`,\n }),\n }),\n isExternalConnected: builder.query<boolean, string>({\n query: (idp: string) => ({\n url: `${GEN3_WTS_API}/oauth2/connected?idp=${idp}`,\n }),\n transformResponse: () => {\n return true; // if success then connected is true\n },\n }),\n }),\n});\n\nexport const {\n useGetExternalLoginsQuery,\n useLazyGetExternalLoginsQuery,\n useLazyIsExternalConnectedQuery,\n useIsExternalConnectedQuery,\n} = externalLoginApi;\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\nexport type JSONValue = string | number | boolean | JSONValue[] | JSONObject;\n\nexport type JSONObject = {\n [k: string]: JSONValue;\n};\nexport type JSONArray = Array<JSONValue>;\n\n// type guard functions\nexport const isHistogramRangeData = (key: any): key is [number, number] => {\n return (\n Array.isArray(key) &&\n key.length === 2 &&\n key.every((item) => typeof item === 'number')\n );\n};\n\nexport const isJSONObject = (data: any): data is JSONObject => {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n};\n\nexport const isJSONValue = (data: any): data is JSONValue => {\n return (\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean' ||\n (Array.isArray(data) && data.every(isJSONValue)) ||\n isJSONObject(data)\n );\n};\n\nexport const isJSONValueArray = (data: JSONValue): data is JSONArray => {\n return Array.isArray(data) && data.every(isJSONValue);\n};\n\nexport interface HistogramData {\n key: string | [number, number];\n count: number;\n}\n\nexport type HistogramDataArray = Array<HistogramData>;\n\nconst isValidObject = (input: any): boolean =>\n typeof input === 'object' && input !== null;\n\nexport const isHistogramData = (data: any): data is HistogramData => {\n return isValidObject(data) && 'key' in data && 'count' in data;\n};\n\nexport const isHistogramDataArray = (input: any): input is HistogramData[] => {\n if (!isValidObject(input) || !Array.isArray(input.histogram)) {\n return false;\n }\n return input.histogram.every(isHistogramData);\n};\n\nexport interface HistogramDataCollection {\n histogram: HistogramDataArray;\n}\n\nexport const isHistogramDataCollection = (\n obj: any,\n): obj is HistogramDataCollection => {\n return (\n isValidObject(obj) && 'histogram' in obj && isHistogramData(obj.histogram)\n );\n};\n\nexport interface GuppyAggregationData {\n [key: string]: HistogramDataCollection;\n}\n\n// Type guard function for GuppyAggregationData interface\nexport const isGuppyAggregationData = (\n obj: any,\n): obj is GuppyAggregationData => {\n if (!isValidObject(obj)) return false;\n\n for (const key in obj) {\n if (!isHistogramDataCollection(obj[key])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isHistogramDataAnEnum = (data: unknown): data is HistogramData => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'key' in data &&\n 'count' in data &&\n typeof data.key === 'string' &&\n typeof data.count === 'number'\n );\n};\n\nexport const isHistogramDataAArray = (\n data: any,\n): data is HistogramDataArray => {\n return Array.isArray(data) && data.every(isHistogramData);\n};\n\nexport const isHistogramDataArrayAnEnum = (data: any): boolean => {\n return Array.isArray(data) && data.every(isHistogramDataAnEnum);\n};\n\nexport const isHistogramDataArrayARange = (data: any): boolean => {\n return (\n Array.isArray(data) && data.every((item) => isHistogramRangeData(item.key))\n );\n};\n\n/**\n * Type predicate to narrow an unknown error to `FetchBaseQueryError`\n */\nexport function isFetchBaseQueryError(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error != null && 'status' in error;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isErrorWithMessage(\n error: unknown,\n): error is { message: string } {\n return (\n typeof error === 'object' &&\n error != null &&\n 'message' in error &&\n typeof (error as any).message === 'string'\n );\n}\n\ninterface ParsingError {\n status: 'PARSING_ERROR';\n originalStatus: number;\n data: string;\n error: string;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isFetchParseError(error: unknown): error is ParsingError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'originalStatus' in error &&\n 'status' in error &&\n error['status'] === 'PARSING_ERROR'\n );\n}\n\nexport type AggregationsData = Record<string, HistogramDataArray>;\n","/**\n * A registry for the Gen3 Apps.\n */\nexport const REGISTRY: Record<string, React.ReactNode> = {};\n\nexport const registerGen3App = (id: string, gen3App: React.ReactNode): void => {\n REGISTRY[id] = gen3App;\n};\n\nexport const lookupGen3App = (id: string): React.ReactNode => {\n return REGISTRY[id];\n};\n\nexport const computeGen3AppId = (name: string, version: string): string => {\n return `${name}@${version}`;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport React from 'react';\nimport { CoreState } from '../../reducers';\nimport { lookupGen3App } from './gen3AppRegistry';\n\nexport interface Gen3AppsState {\n readonly gen3Apps: Readonly<Record<string, Gen3AppMetadata>>;\n readonly currentAppId?: string;\n}\n\nexport interface Gen3AppMetadata {\n readonly id: string;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport type EntityType = 'case' | 'gene' | 'ssm' | 'cnv' | 'file';\n\nconst initialState: Gen3AppsState = {\n gen3Apps: {},\n};\n\nconst slice = createSlice({\n name: 'gen3Apps',\n initialState,\n reducers: {\n addGen3AppMetadata: (state, action: PayloadAction<Gen3AppMetadata>) => {\n const { name, requiredEntityTypes } = action.payload;\n\n state.gen3Apps[name] = {\n ...action.payload,\n // need to turn a ReadonlyArray into a mutable array for immer's WritableDraft\n requiredEntityTypes: [...requiredEntityTypes],\n };\n },\n },\n});\n\nexport const gen3AppReducer = slice.reducer;\n\nexport const { addGen3AppMetadata } = slice.actions;\n\nexport const selectGen3AppIds = (state: CoreState): ReadonlyArray<string> =>\n Object.keys(state.gen3Apps.gen3Apps);\n\nexport const selectAllGen3AppMetadata = (\n state: CoreState,\n): ReadonlyArray<Gen3AppMetadata> => Object.values(state.gen3Apps.gen3Apps);\n\nexport const selectGen3AppMetadataByName = (\n state: CoreState,\n appName: string,\n): Gen3AppMetadata => state.gen3Apps.gen3Apps[appName];\n\nexport const selectGen3AppByName = (appName: string): React.ReactNode =>\n lookupGen3App(appName); // TODO: memoize this selector\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\nexport type DRSHostnameMap = Record<string, string>;\n\nconst initialState : Record<string, string> = {};\n\n// TODO: document what this does\nconst slice = createSlice({\n name: 'drsResolver',\n initialState,\n reducers: {\n setDRSHostnames: (_state, action: PayloadAction<DRSHostnameMap>) => {\n return action.payload;\n },\n },\n});\n\nexport const drsHostnamesReducer = slice.reducer;\n\nexport const { setDRSHostnames } = slice.actions;\n\nexport const drsHostnamesSelector = (id:string, state: CoreState) =>\n state.drsHostnames?.[id];\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\n/**\n * Defines the modals slice of the Redux store.\n * This slice is used to control the display of standard Gen3 modals.\n * and can be extended to add custom modals by representing them as strings.\n */\nexport enum Modals {\n 'FirstTimeModal' = 'FirstTimeModal',\n 'SessionExpireModal' = 'SessionExpireModal',\n 'NoAccessModal' = 'NoAccessModal',\n 'CreateCredentialsAPIKeyModal' = 'CreateCredentialsAPIKeyModal',\n 'GeneralErrorModal' = 'GeneralErrorModal',\n}\n\n// Type for the current modal in the store\n// This can be a standard Gen3 modal, a custom modal (via string), or null\ntype CurrentModal = Modals | string | null;\n\nexport interface ModalState {\n currentModal: CurrentModal;\n message?: string;\n}\n\nconst initialState: ModalState = {\n currentModal: null,\n};\n\n//Creates a modal slice for tracking showModal and hideModal state.\nconst slice = createSlice({\n name: 'modals',\n initialState,\n reducers: {\n showModal: (\n state: ModalState,\n action: PayloadAction<{ modal: Modals; message?: string }>,\n ) => {\n state.currentModal = action.payload.modal;\n state.message = action.payload.message;\n return state;\n },\n hideModal: (state: ModalState) => {\n state.currentModal = null;\n return state;\n },\n },\n});\n\nexport const modalReducer = slice.reducer;\nexport const { showModal, hideModal } = slice.actions;\n\nexport const selectCurrentModal = (state: CoreState): CurrentModal =>\n state.modals.currentModal;\n\nexport const selectCurrentMessage = (state: CoreState): string | undefined =>\n state.modals.message;\n","import { createSlice, Draft, type PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { Operation, FilterSet, IndexedFilterSet } from '../filters';\n\nexport interface Cohort {\n readonly id: string;\n readonly name: string;\n readonly filters: IndexedFilterSet; // maps of index to filter set\n readonly modified?: boolean; // flag which is set to true if modified and unsaved\n readonly modified_datetime: string; // last time cohort was modified\n}\n\nexport interface CohortState {\n cohort: Cohort;\n}\n\nconst initialCohortState: CohortState = {\n cohort: {\n id: 'default',\n name: 'Filters',\n filters: {},\n modified_datetime: new Date().toISOString(),\n },\n};\n\ninterface UpdateFilterParams {\n index: string;\n field: string;\n filter: Operation;\n}\n\ninterface RemoveFilterParams {\n index: string;\n field: string;\n}\n\ninterface ClearAllFilterParams {\n index: string;\n}\n\n// TODO: start using this adapter\n/*\nconst cohortsAdapter = createEntityAdapter<Cohort>({\n sortComparer: (a, b) => {\n if (a.modified_datetime <= b.modified_datetime) return 1;\n else return -1;\n },\n});\n*/\n\n/**\n * Redux slice for cohort filters\n */\n\nexport const cohortSlice = createSlice({\n name: 'cohort',\n initialState: initialCohortState,\n reducers: {\n // adds a filter to the cohort filter set at the given index\n updateCohortFilter: (\n state: Draft<CohortState>,\n action: PayloadAction<UpdateFilterParams>,\n ) => {\n const { index, field, filter } = action.payload;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n mode: state.cohort.filters?.[index]?.mode ?? 'and',\n root: {\n ...(state.cohort.filters?.[index]?.root ?? {}),\n [field]: filter,\n },\n },\n },\n },\n };\n },\n // removes a filter to the cohort filter set at the given index\n removeCohortFilter: (\n state: Draft<CohortState>,\n action: PayloadAction<RemoveFilterParams>,\n ) => {\n const { index, field } = action.payload;\n const filters = state.cohort?.filters?.[index]?.root;\n if (!filters) {\n return;\n }\n const { [field]: _a, ...updated } = filters;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n mode: state.cohort.filters[index].mode,\n root: updated,\n },\n },\n },\n };\n },\n // removes all filters from the cohort filter set at the given index\n clearCohortFilters: (\n state: Draft<CohortState>,\n action: PayloadAction<ClearAllFilterParams>,\n ) => {\n const { index } = action.payload;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n // empty filter set\n mode: 'and',\n root: {},\n } as FilterSet,\n },\n },\n };\n },\n },\n});\n\n// Filter actions: addFilter, removeFilter, updateFilter\nexport const { updateCohortFilter, removeCohortFilter, clearCohortFilters } =\n cohortSlice.actions;\n\nexport const selectCohortFilters = (state: CoreState): IndexedFilterSet =>\n state.cohorts.cohort.filters;\n\nexport const selectCurrentCohortId = (state: CoreState): string =>\n state.cohorts.cohort.id;\n\nexport const selectCurrentCohort = (state: CoreState): Cohort =>\n state.cohorts.cohort;\n\nexport const selectCurrentCohortName = (state: CoreState): string =>\n state.cohorts.cohort.name;\n\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n * @param name name of the filter to select\n */\nexport const selectIndexedFilterByName = (\n state: CoreState,\n index: string,\n name: string,\n): Operation | undefined => {\n return state.cohorts.cohort.filters[index]?.root[name];\n};\n\nconst EmptyFilterSet: FilterSet = { mode: 'and', root: {} };\n/**\n * Select a filter from the index.\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n */\nexport const selectIndexFilters = (\n state: CoreState,\n index: string,\n): FilterSet => {\n return state.cohorts.cohort.filters?.[index] ?? EmptyFilterSet; // TODO: check if this is undefined\n};\n\nexport const cohortReducer = cohortSlice.reducer;\n","import type { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { coreCreateApi } from '../../api';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from '../user';\n\nexport interface guppyFetchError {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly text: string;\n readonly variables?: Record<string, any>;\n}\n\nexport interface guppyApiSliceRequest {\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n}\n\nexport interface guppyApiResponse<H = JSONObject> {\n readonly data: H;\n readonly errors: Record<string, string>;\n}\n\nexport interface SortOption {\n field: string;\n order: string;\n}\n\nexport interface TablePageOffsetProps {\n readonly pageSize?: number;\n readonly offset?: number;\n readonly sorts?: Array<SortOption>;\n readonly searchTerm?: string;\n}\n\n/**\n * Creates a base class core API for guppy API calls.\n * @returns: guppy core API with guppyAPIFetch base query\n */\nexport const guppyApi = coreCreateApi({\n reducerPath: 'guppy',\n\n // TODO: refactor to use fetchBaseQuery\n baseQuery: async (query: guppyApiSliceRequest, api) => {\n const csrfToken = selectCSRFToken(api.getState() as CoreState);\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n const headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n };\n try {\n const response = await fetch(`${GEN3_GUPPY_API}/graphql`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify(query),\n });\n return { data: await response.json() };\n } catch (e: unknown) {\n if (e instanceof Error) return { error: e.message };\n return { error: e };\n }\n },\n endpoints: () => ({}),\n});\n\nexport const guppyAPISliceMiddleware = guppyApi.middleware as Middleware;\nexport const guppyApiSliceReducerPath: string = guppyApi.reducerPath;\nexport const guppyApiReducer: Reducer = guppyApi.reducer as Reducer;\n","import { gen3ServicesReducer } from './features/gen3/gen3Api';\nimport { combineReducers } from '@reduxjs/toolkit';\nimport { userReducer } from './features/user/userSlice';\nimport { gen3AppReducer } from './features/gen3Apps/gen3AppsSlice';\nimport { drsHostnamesReducer } from './features/drsResolver';\nimport { modalReducer } from './features/modals/modalsSlice';\nimport { cohortReducer } from './features/cohort';\nimport { userAuthApiReducerPath, userAuthApiReducer} from './features/user/userSliceRTK';\n\nimport {\n guppyApiReducer,\n guppyApiSliceReducerPath,\n} from './features/guppy/guppyApi';\n\nexport const rootReducer = combineReducers({\n gen3Services: gen3ServicesReducer,\n user: userReducer,\n gen3Apps: gen3AppReducer,\n drsHostnames: drsHostnamesReducer,\n modals: modalReducer,\n cohorts: cohortReducer,\n [guppyApiSliceReducerPath]: guppyApiReducer,\n [userAuthApiReducerPath]: userAuthApiReducer,\n});\n\nexport type CoreState = ReturnType<typeof rootReducer>;\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport { rootReducer } from './reducers';\nimport { gen3ServicesReducerMiddleware } from './features/gen3/gen3Api';\nimport { guppyAPISliceMiddleware } from './features/guppy/guppyApi';\nimport { userAuthApiMiddleware } from './features/user/userSliceRTK';\n\nexport const coreStore = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware().concat(\n gen3ServicesReducerMiddleware,\n guppyAPISliceMiddleware,\n userAuthApiMiddleware,\n ),\n});\n\nsetupListeners(coreStore.dispatch);\n\nexport type CoreDispatch = typeof coreStore.dispatch;\n","import React, { PropsWithChildren } from 'react';\nimport { Provider } from 'react-redux';\nimport { coreStore } from './store';\nimport { CoreContext } from './hooks';\n\nexport const CoreProvider: React.FC<Record<string, unknown>> = ({\n children,\n}: PropsWithChildren) => {\n return (\n <Provider store={coreStore} context={CoreContext}>\n {children}\n </Provider>\n );\n};\n","import { gen3Api } from '../gen3';\nimport { createSelector } from '@reduxjs/toolkit';\nimport { type AuthzMapping } from './types';\nimport { GEN3_AUTHZ_API } from '../../constants';\n\n/**\n * Creates the authzApi for checking arborist permissions for a selected user\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/arborist/master/docs/openapi.yaml#/auth/get_auth_mapping\n * @see https://github.com/uc-cdis/arborist/blob/master/docs/relationships.simplified.png\n * @returns: An arborist response dict of user permissions {method, service} for each resource path.\n */\nexport const authzApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAuthzMappings: builder.query<AuthzMapping, void>({\n query: () => `${GEN3_AUTHZ_API}/mapping`,\n }),\n }),\n});\n\nexport const { useGetAuthzMappingsQuery } = authzApi;\n\nexport const selectAuthzMapping= authzApi.endpoints.getAuthzMappings.select();\n\nexport const selectAuthzMappingData = createSelector(\n selectAuthzMapping,\n authzMapping => authzMapping?.data ?? { mappings: [] }\n);\n","import { JSONObject } from '../../types';\nimport { gen3Api } from '../gen3';\nimport Queue from 'queue';\nimport { GEN3_CROSSWALK_API, GEN3_MDS_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport { CrosswalkInfo, IndexedMetadataFilters } from './types';\n\nexport interface Metadata {\n readonly entries: Array<Record<string, unknown>>;\n}\n\nexport type CrosswalkArray = Array<CrosswalkInfo>;\n\ninterface ToMapping {\n id: string;\n dataPath: string[];\n}\n\ninterface CrossWalkParams {\n readonly ids: string[];\n readonly toPaths: Array<ToMapping>;\n}\n\nexport interface MetadataResponse {\n data: Array<JSONObject>;\n hits: number;\n}\n\nexport interface MetadataPaginationParams {\n pageSize: number;\n offset: number;\n}\n\nexport interface MetadataRequestParams extends MetadataPaginationParams {\n guidType: string;\n studyField: string;\n}\n\ninterface IndexedMetadataRequestParams extends MetadataRequestParams {\n indexKeys: Array<string>;\n filterEmpty?: IndexedMetadataFilters;\n}\n\nconst HasEnoughData = (\n data: Record<string, any>,\n keys: string[],\n limit: number,\n) => {\n const numEmptyKeys = keys.filter(\n (k) =>\n Object.hasOwn(data, k) &&\n typeof data[k] === 'string' &&\n data[k].trim() === '',\n ).length;\n return numEmptyKeys < limit;\n};\n\n/**\n * Defines metadataApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param getAggMDS - Queries aggregate metadata service\n * @see https://github.com/uc-cdis/metadata-service/blob/master/docs/agg_mds.md\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_metadata_aggregate_metadata_get\n * @param getMDS - Queries normal metadata service\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Query/search_metadata_metadata_get\n * @param getIndexAggMDS - queries the Aggregate Metadata service and returns all common passed in indexKeys\n * @param getTags - Probably refering to Aggregate metadata service summary statistics query\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_tags_aggregate_tags_get\n * @param getData - Looks like a duplicate of getMDS handler. unused in ./frontend package\n * @param getCrosswalkData - Maps ids from one source to another\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const metadataApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAggMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ offset, pageSize }: MetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?flatten=true&pagination=true&offset=${offset}&limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return {\n data: response.results.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n return firstValue ? firstValue[params.studyField] : undefined;\n }),\n hits: response.pagination.hits,\n };\n },\n }),\n getIndexAggMDS: builder.query<\n MetadataResponse,\n IndexedMetadataRequestParams\n >({\n query: ({ pageSize }: IndexedMetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n const dataFromIndexes = params.indexKeys.reduce(\n (acc, key) => {\n if (response[key]) {\n acc.push(...response[key]);\n }\n return acc;\n },\n [] as Array<Record<string, any>>,\n );\n\n return {\n data: (\n dataFromIndexes.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const objIds = Object.keys(x);\n let firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n\n if (params?.filterEmpty) {\n // remove any data that has < limit if defined\n if (\n firstValue &&\n !HasEnoughData(\n firstValue[params.studyField] as Record<string, any>,\n params.filterEmpty.keys,\n params.filterEmpty.limit,\n )\n )\n firstValue = undefined;\n }\n return firstValue\n ? {\n gen3MDSGUID: objIds.at(0),\n ...(firstValue[params.studyField] as Record<string, any>),\n }\n : undefined;\n }) as JSONObject[]\n ).filter((x: JSONObject | undefined) => x !== undefined),\n hits: dataFromIndexes.length,\n };\n },\n }),\n getMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ guidType, offset, pageSize }) => {\n return `${GEN3_MDS_API}/metadata?data=True&_guid_type=${guidType}&limit=${pageSize}&offset=${offset}`;\n },\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n data: Object.keys(response).map((guid) => response[guid]),\n hits: Object.keys(response).length,\n };\n },\n }),\n getTags: builder.query<Metadata, string>({\n query: () => 'tags',\n }),\n getData: builder.query<Metadata, string>({\n query: (params) => ({ url: `metadata?${params}` }),\n }),\n // TODO: Move this to own slice\n getCrosswalkData: builder.query<CrosswalkArray, CrossWalkParams>({\n queryFn: async (arg, _queryApi, _extraOptions, fetchWithBQ) => {\n const queryMultiple = async (): Promise<CrosswalkInfo[]> => {\n let result = [] as CrosswalkInfo[];\n const queue = Queue({ concurrency: 15 });\n for (const id of arg.ids) {\n queue.push(async (callback?: () => void) => {\n const response = await fetchWithBQ({\n url: `${GEN3_CROSSWALK_API}/metadata/${id}`,\n });\n\n if (response.error) {\n return { error: response.error };\n }\n\n const toData = arg.toPaths.reduce(\n (acc, path) => {\n acc[path.id] =\n JSONPath<string>({\n json: response.data as Record<string, any>,\n path: `$.[${path.dataPath}]`,\n resultType: 'value',\n })?.[0] ?? 'n/a';\n return acc;\n },\n {} as Record<string, string>,\n );\n\n result = [\n ...result,\n {\n from: id,\n to: toData,\n },\n ];\n if (callback) callback();\n\n return result;\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n };\n\n const result = await queryMultiple();\n return { data: result };\n },\n }),\n }),\n});\n\nexport const {\n useGetAggMDSQuery,\n useGetMDSQuery,\n useGetTagsQuery,\n useGetDataQuery,\n useGetCrosswalkDataQuery,\n useLazyGetCrosswalkDataQuery,\n useGetIndexAggMDSQuery,\n} = metadataApi;\n","// using a random uuid v4 as the namespace\nexport const GEN3_APP_NAMESPACE = '7bfaa818-c69c-457e-8d87-413cf60c25f0';\n","import React, { ComponentType, useEffect } from 'react';\nimport { coreStore } from '../../store';\nimport { v5 as uuidv5 } from 'uuid';\nimport { addGen3AppMetadata, EntityType } from './gen3AppsSlice';\nimport {\n configureStore,\n Dispatch,\n Middleware,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport { Action, Store } from 'redux';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n Provider,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { registerGen3App } from './gen3AppRegistry';\nimport { DataStatus } from '../../dataAccess';\nimport { CookiesProvider } from 'react-cookie';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport interface CreateGen3AppOptions<T> {\n readonly App: ComponentType<T>;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport const getGen3AppId = (name: string, version: string): string => {\n const nameVersion = `${name}::${version}`;\n return uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n};\n\n/**\n * Creates a Gen3App that is dynamically loaded\n */\nexport const createGen3App = <\n T extends Record<any, any> = Record<string, any>,\n>({\n App,\n name,\n version,\n requiredEntityTypes,\n}: CreateGen3AppOptions<T>): React.FC<T> => {\n // create a stable id for this app\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n // const store = configureStore({\n // // TODO allow user to pass in a reducer in CreateGen3AppOptions?\n // reducer: (state) => state,\n // devTools: {\n // name: `${nameVersion}::${id}`,\n // },\n // });\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return <App {...props} />;\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n\n return Gen3AppWrapper;\n};\n\nexport interface AppDataSelectorResponse<T> {\n readonly data?: T;\n readonly status: DataStatus;\n readonly error?: string;\n}\n\nexport interface UseAppDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface UseAppDataHook<P, T> {\n (...params: P[]): UseAppDataResponse<T>;\n}\n\nexport interface CreateGEN3AppStore {\n readonly name: string;\n readonly version: string;\n readonly reducers: (...args: any) => any;\n middleware?: Middleware<unknown, any, Dispatch<UnknownAction>>;\n}\n\n// ----------------------------------------------------------------------------------------\n// Apps with Local Storage\n//\n\nexport const createAppStore = (\n options: CreateGEN3AppStore,\n): Record<any, any> => {\n const { name, version, reducers, middleware } = options;\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const store = configureStore({\n reducer: reducers,\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n middleware: (getDefaultMiddleware) =>\n middleware\n ? getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }).concat(middleware)\n : getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }),\n });\n type AppState = ReturnType<typeof reducers>;\n const context = React.createContext(\n undefined as unknown as ReactReduxContextValue<AppState, UnknownAction>,\n );\n\n type AppDispatch = typeof store.dispatch;\n const useAppSelector: TypedUseSelectorHook<AppState> =\n createSelectorHook(context);\n const useAppDispatch: () => AppDispatch = createDispatchHook(context);\n const useAppStore = createStoreHook(context);\n\n return {\n id: id,\n AppStore: store,\n AppContext: context,\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n };\n};\n\nexport interface CreateGen3AppWithOwnStoreOptions<\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n> {\n readonly App: ComponentType<T>;\n readonly id: string; // unique id for this app\n readonly name: string; // name of the app\n readonly version: string; // version of the app, should be unique\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n readonly store: Store<S, A>; // the redux-store for this app\n readonly context: any;\n}\n\nexport const createGen3AppWithOwnStore = <\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n>(\n options: CreateGen3AppWithOwnStoreOptions<T, A, S>,\n): React.ReactNode => {\n const { App, id, name, version, requiredEntityTypes, store, context } =\n options;\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return (\n <Provider store={store} context={context}>\n <CookiesProvider>\n <App {...props} />\n </CookiesProvider>\n </Provider>\n );\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n return Gen3AppWrapper as unknown as React.ReactNode;\n};\n","import * as React from 'react';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport {\n ApiModules,\n buildCreateApi,\n coreModule,\n CreateApi,\n reactHooksModule,\n BaseQueryFn,\n fetchBaseQuery,\n} from '@reduxjs/toolkit/query/react';\nimport { configureStore, UnknownAction } from '@reduxjs/toolkit';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { GEN3_API } from '../../constants';\nimport { getCookie } from 'cookies-next';\n\nexport const createAppApiForRTKQ = (\n reducerPath: string,\n baseQuery?: BaseQueryFn,\n) => {\n const appContext = React.createContext(\n undefined as unknown as ReactReduxContextValue<any, UnknownAction>,\n );\n\n type AppState = any;\n const useAppSelector: TypedUseSelectorHook<AppState> =\n createSelectorHook(appContext);\n const useAppDispatch = createDispatchHook(appContext);\n const useAppStore = createStoreHook(appContext);\n\n const appCreateApi: CreateApi<keyof ApiModules<any, any, any, any>> =\n buildCreateApi(\n coreModule(),\n reactHooksModule({\n hooks: {\n useDispatch: useAppDispatch,\n useSelector: useAppSelector,\n useStore: useAppStore,\n },\n }),\n );\n\n const appRTKQApi = appCreateApi({\n reducerPath: reducerPath,\n baseQuery:\n baseQuery ??\n fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers) => {\n headers.set('Content-Type', 'application/json');\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n if (accessToken)\n headers.set('Authorization', `Bearer ${accessToken}`);\n return headers;\n },\n }),\n endpoints: () => ({}),\n });\n\n const appMiddleware = appRTKQApi.middleware;\n const appStore = configureStore({\n reducer: {\n [appRTKQApi.reducerPath]: appRTKQApi.reducer,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n }).concat(appMiddleware),\n });\n\n return {\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n AppContext: appContext,\n appApi: appRTKQApi,\n appContext: appContext,\n appStore: appStore,\n };\n};\n","import { gen3Api } from '../gen3';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\n\nexport const graphQLWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['graphQL'],\n});\n\n/**\n * Creates a graphQLAPI for graphql queries to elasticsearch indices via guppy\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md\n * @param query - Resolver function which configures the graphql query with graphQLParams argument\n * @returns: A guppy search API for fetching metadata\n */\nexport const graphQLAPI = graphQLWithTags.injectEndpoints({\n endpoints: (builder) => ({\n graphQL: builder.query<JSONObject, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_GUPPY_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n }),\n }),\n});\n\nexport const { useGraphQLQuery } = graphQLAPI;\n","import { isEqual } from 'lodash';\nimport {\n EnumFilterValue,\n Equals,\n ExcludeIfAny,\n Excludes,\n FilterSet,\n FilterValue,\n GreaterThan,\n GreaterThanOrEquals,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n OperationWithField,\n Union,\n} from './types';\n\nexport const isOperationWithField = (\n operation: OperationWithField | Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField)?.field !== undefined;\n};\nexport const extractFilterValue = (op: Operation): FilterValue => {\n const valueExtractorHandler = new ValueExtractorHandler();\n return handleOperation<FilterValue>(valueExtractorHandler, op);\n};\nexport const extractEnumFilterValue = (op: Operation): EnumFilterValue => {\n const enumValueExtractorHandler = new EnumValueExtractorHandler();\n const results = handleOperation<EnumFilterValue | undefined>(\n enumValueExtractorHandler,\n op,\n );\n return results ?? [];\n};\n\nconst assertNever = (x: never): never => {\n throw Error(`Exhaustive comparison did not handle: ${x}`);\n};\n\nexport const handleOperation = <T>(\n handler: OperationHandler<T>,\n op: Operation,\n): T => {\n switch (op.operator) {\n case '=':\n return handler.handleEquals(op);\n case '!=':\n return handler.handleNotEquals(op);\n case '<':\n return handler.handleLessThan(op);\n case '<=':\n return handler.handleLessThanOrEquals(op);\n case '>':\n return handler.handleGreaterThan(op);\n case '>=':\n return handler.handleGreaterThanOrEquals(op);\n case 'and':\n return handler.handleIntersection(op);\n case 'or':\n return handler.handleUnion(op);\n case 'nested':\n return handler.handleNestedFilter(op);\n case 'in':\n return handler.handleIncludes(op);\n case 'excludeifany':\n return handler.handleExcludeIfAny(op);\n case 'excludes':\n return handler.handleExcludes(op);\n default:\n return assertNever(op);\n }\n};\n\n/**\n * Return true if a FilterSet's root value is an empty object\n * @param fs - FilterSet to test\n */\nexport const isFilterEmpty = (fs: FilterSet): boolean => isEqual({}, fs);\n\nexport interface FilterGroup {\n readonly filterIndex: number;\n readonly filter: FilterSet;\n}\n\nexport interface GQLEqual {\n '=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLNotEqual {\n '!=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThan {\n '<': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThanOrEquals {\n '<=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThan {\n '>': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThanOrEquals {\n '>=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLIncludes {\n in: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludes {\n exclude: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludeIfAny {\n excludeifany: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLIntersection {\n and: ReadonlyArray<GQLFilter>;\n}\n\nexport interface GQLUnion {\n or: ReadonlyArray<GQLFilter>;\n}\n\ntype NestedContents = GQLFilter & {\n path: string;\n};\n\nexport interface GQLNestedFilter {\n nested: NestedContents;\n}\n\nexport type GQLFilter =\n | GQLEqual\n | GQLNotEqual\n | GQLLessThan\n | GQLLessThanOrEquals\n | GQLGreaterThan\n | GQLGreaterThanOrEquals\n | GQLIncludes\n | GQLExcludes\n | GQLExcludeIfAny\n | GQLIntersection\n | GQLUnion\n | GQLNestedFilter;\n\nexport class ToGqlHandler implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual => ({\n '=': {\n [op.field]: op.operand,\n },\n });\n handleNotEquals = (op: NotEquals): GQLNotEqual => ({\n '!=': {\n [op.field]: op.operand,\n },\n });\n handleLessThan = (op: LessThan): GQLLessThan => ({\n '<': {\n [op.field]: op.operand,\n },\n });\n handleLessThanOrEquals = (op: LessThanOrEquals): GQLLessThanOrEquals => ({\n '<=': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan => ({\n '>': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals => ({\n '>=': {\n [op.field]: op.operand,\n },\n });\n\n handleIncludes = (op: Includes): GQLIncludes => ({\n in: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludes = (op: Excludes): GQLExcludes => ({\n exclude: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludeIfAny = (op: ExcludeIfAny): GQLExcludeIfAny => ({\n excludeifany: {\n [op.field]: op.operands,\n },\n });\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nconst convertFilterToGqlFilter = (filter: Operation): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlHandler();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) };\n};\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class ValueExtractorHandler implements OperationHandler<FilterValue> {\n handleEquals: (op: Equals) => string | number = (op: Equals) => op.operand;\n handleNotEquals: (op: NotEquals) => string | number = (op: NotEquals) =>\n op.operand;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => string | number = (\n op: GreaterThanOrEquals,\n ) => op.operand;\n handleGreaterThan: (op: GreaterThan) => string | number = (op: GreaterThan) =>\n op.operand;\n handleLessThan: (op: LessThan) => string | number = (op: LessThan) =>\n op.operand;\n handleLessThanOrEquals: (op: LessThanOrEquals) => string | number = (\n op: LessThanOrEquals,\n ) => op.operand;\n handleIntersection: (op: Intersection) => undefined = (_arg: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => undefined = (_: NestedFilter) =>\n undefined;\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class EnumValueExtractorHandler\n implements OperationHandler<EnumFilterValue | undefined>\n{\n handleEquals: (_: Equals) => undefined = (_: Equals) => undefined;\n handleNotEquals: (_: NotEquals) => undefined = (_: NotEquals) => undefined;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (_: GreaterThanOrEquals) => undefined = (\n _: GreaterThanOrEquals,\n ) => undefined;\n handleGreaterThan: (_: GreaterThan) => undefined = (_: GreaterThan) =>\n undefined;\n handleLessThan: (op: LessThan) => undefined = (_: LessThan) => undefined;\n handleLessThanOrEquals: (op: LessThanOrEquals) => undefined = (\n _: LessThanOrEquals,\n ) => undefined;\n handleIntersection: (op: Intersection) => undefined = (_: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => EnumFilterValue | undefined = (\n op: NestedFilter,\n ) => {\n return extractEnumFilterValue(op.operand);\n };\n}\n","const FieldNameOverrides: Record<string, string> = {};\n\nconst COMMON_PREPOSITIONS = [\n 'a',\n 'an',\n 'and',\n 'at',\n 'but',\n 'by',\n 'for',\n 'in',\n 'is',\n 'nor',\n 'of',\n 'on',\n 'or',\n 'out',\n 'so',\n 'the',\n 'to',\n 'up',\n 'yet',\n];\n\nconst capitalize = (s: string): string =>\n s.length > 0 ? s[0].toUpperCase() + s.slice(1) : '';\n\nexport const trimFirstFieldNameToTitle = (\n fieldName: string,\n trim = false,\n): string => {\n if (trim) {\n const source = fieldName.slice(fieldName.indexOf('.') + 1);\n return fieldNameToTitle(source ? source : fieldName, 0);\n }\n return fieldNameToTitle(fieldName);\n};\n\n/**\n * Converts a filter name to a title,\n * For example files.input.experimental_strategy will get converted to Experimental Strategy\n * if sections == 2 then the output would be Input Experimental Strategy\n * @param fieldName input filter expected to be: string.firstpart_secondpart\n * @param sections number of \"sections\" string.string.string to got back from the end of the field\n */\n\nexport const fieldNameToTitle = (fieldName: string, sections = 1): string => {\n if (fieldName in FieldNameOverrides) {\n return FieldNameOverrides[fieldName];\n }\n if (fieldName === undefined) return 'No Title';\n\n return fieldName\n .split('.')\n .slice(-sections)\n .map((s) => s.split('_'))\n .flat()\n .map((word) =>\n COMMON_PREPOSITIONS.includes(word) ? word : capitalize(word),\n )\n .join(' ');\n};\n\n/**\n * Extracts the index name from the field name\n * @param fieldName\n */\nexport const extractIndexFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.')[0];\n\n/**\n * prepend the index name to the field name\n */\nexport const prependIndexToFieldName = (\n fieldName: string,\n index: string,\n): string => `${index}.${fieldName}`;\n\n/**\n * extract the field name from the index.field name\n */\nexport const extractFieldNameFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.').slice(1).join('.');\n\n/**\n * extract the field name and the index from the index.field name returning as a tuple\n */\nexport const extractIndexAndFieldNameFromFullFieldName = (\n fieldName: string,\n): [string, string] => {\n const [index, ...rest] = fieldName.split('.');\n return [index, rest.join('.')];\n};\n","import useSWR, { Fetcher, SWRResponse } from 'swr';\nimport { AggregationsData, JSONObject } from '../../types';\nimport { Accessibility, GEN3_GUPPY_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport {\n convertFilterSetToGqlFilter,\n FilterSet,\n isFilterEmpty,\n} from '../filters';\nimport { guppyApi, guppyApiSliceRequest } from './guppyApi';\n\nconst statusEndpoint = '/_status';\n\nconst processHistogramResponse = (\n data: Record<string, any>,\n): AggregationsData => {\n const pathData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'all',\n });\n const results = pathData.reduce(\n (acc: AggregationsData, element: Record<string, any>) => {\n const key = element.pointer\n .slice(1)\n .replace(/\\/histogram/g, '')\n .replace(/\\//g, '.');\n return {\n ...acc,\n [key]: element.value,\n };\n },\n {} as AggregationsData,\n );\n return results as AggregationsData;\n};\n\nexport interface GraphQLQuery {\n query: string;\n variables?: Record<string, unknown>;\n}\n\nexport const fetchJson: Fetcher<JSONObject, string> = async (url: string) => {\n const res = await fetch(url, {\n method: 'GET',\n headers: { 'Content-type': 'application/json' },\n });\n if (!res.ok) throw new Error('An error occurred while fetching the data.');\n return (await res.json()) as JSONObject;\n};\n\nexport const useGetStatus = (): SWRResponse<JSONObject, Error> => {\n const fetcher = () => fetchJson(`${GEN3_GUPPY_API}${statusEndpoint}`);\n return useSWR('explorerStatus', fetcher);\n};\n\nexport type AggregationResponse = Record<string, JSONObject>;\n\nexport interface RawDataAndTotalCountsParams {\n type: string;\n fields: string[];\n filters: FilterSet;\n sort?: ReadonlyArray<Record<string, 'asc' | 'desc'>>;\n offset?: number;\n size?: number;\n accessibility?: Accessibility;\n format?: string;\n}\n\n/*\n returns all the fields for a given type\n @param type: the type to get fields for\n @returns: a list of fields for the given type\n */\n\ninterface AccessibleDataSliceParams {\n type: string;\n fields: ReadonlyArray<string>;\n accessType: Accessibility;\n}\n\ninterface QueryAggsParams {\n type: string;\n fields: ReadonlyArray<string>;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryForSubAggsParams {\n type: string;\n mainField: string;\n numericAggAsText: boolean;\n termsFields?: ReadonlyArray<string>;\n missingFields?: ReadonlyArray<string>;\n gqlFilter?: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryCountsParams {\n type: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryForFileCountSummaryParams {\n type: string;\n field: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\n/**\n * The main endpoint used in templating Exploration page queries.\n * Includes table, filter and aggregation query types and leverages guppyApi defined in ./gupplApi.ts\n * Query templates support filters where applicable\n *\n * @param endpoints - Defines endpoints used in Exploration page:\n * @param getAllFieldsForType - A mapping query that returns all property key names vertex types specified.\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#mapping-query\n * @param getAccessibleData - An aggregation histogram counts query that filters based on access type\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#accessibility-argument-for-regular-tier-access-level\n * @param getRawDataAndTotalCounts - Queries both _totalCount for selected vertex types and\n * tabular results containing the raw data in the rows of selected vertex types\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#1-total-count-aggregation\n * @param getAggs - An aggregated histogram counts query which outputs vertex property frequencies\n * @param getSubAggs - TODO: not sure what this one does. Looks like nested aggregation\n * @param getCounts - Returns total counts of a vertex type\n * @returns: A guppy API endpoint for templating queriable data displayed on the exploration page\n */\nconst explorerApi = guppyApi.injectEndpoints({\n endpoints: (builder) => ({\n getAllFieldsForType: builder.query({\n query: (type: { type: string }) => ({\n query: `{ _mapping ${type} } }`,\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return response[params.type];\n },\n }),\n getAccessibleData: builder.query({\n query: ({ type, fields, accessType }: AccessibleDataSliceParams) => {\n const fieldParts = fields.map(\n (field) => `${field} { histogram { key count } }`,\n );\n return {\n query: `_aggregation {\n ${type} (accessibility: ${accessType}) {\n ${fieldParts.join(',')}\n }\n }`,\n };\n },\n }),\n getRawDataAndTotalCounts: builder.query({\n query: ({\n type,\n fields,\n filters,\n sort,\n offset = 0,\n size = 20,\n accessibility = Accessibility.ALL,\n format = undefined,\n }: RawDataAndTotalCountsParams) => {\n const gqlFilter = convertFilterSetToGqlFilter(filters);\n const params = [\n ...(sort ? ['$sort: JSON'] : []),\n ...(gqlFilter ? ['$filter: JSON'] : []),\n ...(format ? ['$format: Format'] : []),\n ].join(',');\n const queryLine = `query getRawDataAndTotalCounts (${params}) {`;\n\n const dataParams = [\n ...(format ? ['format: $format'] : []),\n ...(sort ? ['sort: $sort'] : []),\n ...(gqlFilter ? ['filter: $filter'] : []),\n ].join(',');\n const dataTypeLine = `${type} (accessibility: ${accessibility}, offset: ${offset}, first: ${size},\n ${dataParams}) {`;\n\n const typeAggsLine = `${type} (${\n gqlFilter && 'filter: $filter,'\n } accessibility: ${accessibility}) {`;\n\n const processedFields = fields.map((field) =>\n rawDataQueryStrForEachField(field),\n );\n\n const query = `${queryLine}\n ${dataTypeLine}\n ${processedFields.join(' ')}\n }\n _aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n const variables = {\n ...(sort && { sort }),\n ...(gqlFilter && { filter: gqlFilter }),\n ...(format && { format }),\n };\n return { query, variables };\n },\n }),\n getAggs: builder.query<AggregationsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryAggsParams) => {\n const queryStart = isFilterEmpty(filters)\n ? `\n query getAggs {\n _aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getAggs ($filter: JSON) {\n _aggregation {\n ${type} (filter: $filter, filterSelf: false, accessibility: ${accessibility}) {`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n histogramQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { filter: convertFilterSetToGqlFilter(filters) },\n };\n return queryBody;\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse(response.data._aggregation[args.type]);\n },\n }),\n getSubAggs: builder.query<AggregationsData, QueryForSubAggsParams>({\n query: ({\n type,\n mainField,\n termsFields = undefined,\n missingFields = undefined,\n numericAggAsText = false,\n gqlFilter = undefined,\n accessibility = Accessibility.ALL,\n }: QueryForSubAggsParams) => {\n const nestedAggFields = {\n termsFields: termsFields,\n missingFields: missingFields,\n };\n\n const query = `query getSubAggs ( ${\n gqlFilter ?? '$filter: JSON,'\n } $nestedAggFields: JSON) {\n _aggregation {\n ${type} ( ${\n gqlFilter ?? 'filter: $filter, filterSelf: false,'\n } nestedAggFields: $nestedAggFields, accessibility: ${accessibility}) {\n ${nestedHistogramQueryStrForEachField(mainField, numericAggAsText)}\n }`;\n\n return {\n query: query,\n variables: {\n ...(gqlFilter && {\n filter: convertFilterSetToGqlFilter(gqlFilter),\n }),\n nestedAggFields: nestedAggFields,\n },\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse(response.data._aggregation[args.type]);\n },\n }),\n getCounts: builder.query<number, QueryCountsParams>({\n query: ({\n type,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryCountsParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const queryLine = `query totalCounts ${\n gqlFilters ? '($filter: JSON)' : ''\n }{`;\n const typeAggsLine = `${type} ${\n gqlFilters ? '(filter: $filter, ' : '('\n } accessibility: ${accessibility}) {`;\n\n const query = `${queryLine} _aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n filter: gqlFilters,\n }),\n },\n };\n },\n transformResponse: (\n response: Record<string, any>,\n _meta,\n args,\n ): number => {\n return response.data._aggregation[args.type]._totalCount;\n },\n }),\n getFieldCountSummary: builder.query<\n Record<string, any>,\n QueryForFileCountSummaryParams\n >({\n query: ({\n type,\n field,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryForFileCountSummaryParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const query = `query summary ($filter: JSON) {\n _aggregation {\n ${type} (filter: $filter, accessibility: ${accessibility}) {\n ${field} {\n histogram {\n sum,\n }\n }\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n filter: gqlFilters,\n }),\n },\n };\n },\n }),\n getFieldsForIndex: builder.query({\n query: (index: string) => {\n return {\n query: `{\n _mapping ${index}\n }`,\n };\n },\n transformResponse: (response: Record<string, any>) => {\n return response['_mapping'];\n },\n }),\n generalGQL: builder.query<Record<string, unknown>, guppyApiSliceRequest>({\n query: ({ query, variables }) => {\n return {\n query: query,\n variables: variables,\n };\n },\n }),\n }),\n});\n\n// query for aggregate data\n// convert the function below to typescript\n\nconst histogramQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n key\n count\n }\n }`;\n }\n return `\n ${splittedField} {\n ${histogramQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nconst nestedHistogramQueryStrForEachField = (\n mainField: string,\n numericAggAsText: boolean,\n) => `\n ${mainField} {\n ${numericAggAsText ? 'asTextHistogram' : 'histogram'} {\n key\n count\n missingFields {\n field\n count\n }\n termsFields {\n field\n count\n terms {\n key\n count\n }\n }\n }\n }`;\n\nexport const rawDataQueryStrForEachField = (field: string): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n if (splitFieldArray.length === 0) {\n return `\n ${splitField}\n `;\n }\n return `\n ${splitField} {\n ${rawDataQueryStrForEachField(splitFieldArray.join('.'))}\n }`;\n};\n\nexport const useGetArrayTypes = () => {\n {\n const { data, error } = useGetStatus();\n if (error) {\n return {};\n }\n return data ? data['indices'] : {};\n }\n};\n\nexport const {\n useGetRawDataAndTotalCountsQuery,\n useGetAccessibleDataQuery,\n useGetAllFieldsForTypeQuery,\n useGetAggsQuery,\n useLazyGetAggsQuery,\n useGetSubAggsQuery,\n useGetCountsQuery,\n useGetFieldCountSummaryQuery,\n useGetFieldsForIndexQuery,\n useGeneralGQLQuery,\n useLazyGeneralGQLQuery,\n} = explorerApi;\n","import { JSONArray, JSONObject } from '../../types';\nimport { FILE_DELIMITERS } from '../../constants';\nimport { flatten } from 'flat';\nimport Papa, { UnparseConfig } from 'papaparse';\n\n/**\n * Flattens a deep nested JSON object skipping\n * the first level to avoid potentially flattening\n * non-nested data.\n * @param {JSON} json\n */\nexport function flattenJson(json: JSONObject) {\n const flattenedJson: JSONArray = [];\n Object.keys(json).forEach((key) => {\n flattenedJson.push(flatten(json[key], { delimiter: '_' }));\n });\n return flattenedJson;\n}\n\n/**\n * Converts JSON based on a config.\n * @param {JSON} json\n * @param {Object} config\n */\nexport async function conversion(json: JSONArray, config: UnparseConfig) {\n return Papa.unparse(json, config);\n}\n\n/**\n * Converts JSON to a specified file format.\n * Defaults to JSON if file format is not supported.\n * @param {JSON} json\n * @param {string} format\n */\nexport async function jsonToFormat(\n json: JSONObject,\n format: keyof typeof FILE_DELIMITERS,\n) {\n if (Object.keys(FILE_DELIMITERS).includes(format)) {\n const flatJson = await flattenJson(json);\n const data = await conversion(flatJson, {\n delimiter: FILE_DELIMITERS[format] as string,\n });\n return data;\n }\n return json;\n}\n","import { DownloadFromGuppyParams, GuppyDownloadDataParams } from './types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { selectCSRFToken } from '../user';\nimport { coreStore } from '../../store';\nimport { convertFilterSetToGqlFilter } from '../filters';\nimport { jsonToFormat } from './conversion';\nimport { isJSONObject } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\nimport { useGetFieldsForIndexQuery } from './guppySlice';\n\n/**\n * Represents a configuration for making a fetch request.\n *\n * @typedef {Object} FetchConfig\n * @property {string} method - The HTTP method to use for the request.\n * @property {Object<string, string>} headers - The headers to include in the request.\n * @property {string} body - The request body.\n */\nexport type FetchConfig = {\n method: string;\n headers: Record<string, string>;\n body: string;\n};\n\n/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nconst prepareUrl = (apiUrl: string) => new URL(apiUrl + '/download');\n\n/**\n * Prepares a fetch configuration object for downloading files from Guppy.\n *\n * @param {GuppyFileDownloadRequestParams} parameters - The parameters to include in the request body.\n * @param {string} csrfToken - The CSRF token to include in the request headers.\n * @returns {FetchConfig} - The prepared fetch configuration object.\n */\nconst prepareFetchConfig = (\n parameters: GuppyDownloadDataParams,\n csrfToken?: string,\n): FetchConfig => {\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken !== undefined && { 'X-CSRF-Token': csrfToken }),\n // TODO: Add credentials\n },\n body: JSON.stringify({\n type: parameters.type,\n filter: convertFilterSetToGqlFilter(parameters.filter),\n accessibility: parameters.accessibility,\n fields: parameters?.fields,\n sort: parameters?.sort,\n }),\n };\n};\n\n/**\n * Downloads a file from Guppy using the provided parameters.\n * It will optionally convert the data to the specified format.\n *\n * @param {DownloadFromGuppyParams} parameters - The parameters to use for the download request.\n * @param onStart - The function to call when the download starts.\n * @param onDone - The function to call when the download is done.\n * @param onError - The function to call when the download fails.\n * @param onAbort - The function to call when the download is aborted.\n * @param signal - AbortSignal to use for the request.\n */\nexport const downloadFromGuppyToBlob = async ({\n parameters,\n onStart = () => null,\n onDone = (_: Blob) => null,\n onError = (_: Error) => null,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n onStart?.();\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit)\n .then(async (response: Response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n let str = '';\n if (parameters.format === 'json') {\n str = JSON.stringify(jsonData);\n } else {\n const convertedData = await jsonToFormat(jsonData, parameters.format);\n if (isJSONObject(convertedData)) {\n str = JSON.stringify(convertedData, null, 2);\n } else {\n str = convertedData;\n }\n }\n return new Blob([str], {\n type: 'application/json',\n });\n })\n .then((blob) => onDone?.(blob))\n .catch((error) => {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n onError?.(error);\n });\n};\n\nexport const downloadJSONDataFromGuppy = async ({\n parameters,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n try {\n const response = await fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n return jsonData;\n } catch (error: any) {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n throw new Error(error);\n }\n};\n\nexport const useGetIndexFields = (index: string) => {\n const { data } = useGetFieldsForIndexQuery(index);\n return data ?? [];\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, GQLFilter } from '../filters';\nimport { BaseGuppyDataRequest, GuppyDownloadDataParams } from './types';\n\nexport interface GuppyDownloadDataQueryParams extends BaseGuppyDataRequest {\n filter: GQLFilter;\n}\n\ninterface DownloadRequestStatus {\n readonly status: string;\n readonly message: string;\n}\n\n/**\n * Creates a Guppy API for fetching bulk (> 10K rows) elasticsearch data\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/download.md\n * @param endpoints - Resolver function which configures the query with\n * type, filter, accessibility, fields, and sort arguments\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const downloadRequestApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n downloadFromGuppy: builder.mutation({\n query: ({\n type,\n filter,\n accessibility,\n fields,\n sort,\n }: GuppyDownloadDataParams) => {\n const queryBody: GuppyDownloadDataQueryParams = {\n filter: convertFilterSetToGqlFilter(filter),\n ...{ type, accessibility, fields, sort },\n };\n return {\n url: `${GEN3_GUPPY_API}/download`,\n method: 'POST',\n queryBody,\n cache: 'no-cache',\n };\n },\n transformResponse: (response: DownloadRequestStatus) => {\n return response;\n },\n }),\n }),\n});\n\nexport const { useDownloadFromGuppyMutation } = downloadRequestApi;\n","import { GEN3_AI_SEARCH_API } from '../../constants';\nimport { gen3Api } from '../gen3';\n\ninterface AiSearchParams {\n readonly query: string;\n}\n\ninterface AiSearchRequestParams extends AiSearchParams {\n readonly topic?: string;\n readonly conversationId?: string;\n}\n\nexport interface AiSearchResponse extends AiSearchParams {\n readonly topic: string;\n readonly conversationId: string;\n readonly response: string;\n readonly documents: {\n readonly page_content: string;\n readonly metadata: {\n readonly row: number;\n readonly source: string;\n };\n }[];\n}\n\n/**\n * returns a response from the AI search service\n * @param searchParams - the parameters for the AI search service\n * @returns the response from the AI search service\n */\nexport const aiSearchApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n askQuestion: builder.mutation<AiSearchResponse, AiSearchRequestParams>({\n query: (searchParams: AiSearchRequestParams) => ({\n url: `${GEN3_AI_SEARCH_API}/ask`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: searchParams.query,\n ...(searchParams.topic ? { topic: searchParams.topic } : {}),\n ...(searchParams.conversationId ? { conversation_id: searchParams.conversationId } : {}),\n }),\n }),\n transformResponse: (data: Record<string, any>, _, arg) => {\n return {\n query: arg.query,\n response: data.response,\n topic: data.topic,\n conversationId: data.conversation_id,\n documents: data.documents,\n };\n },\n }),\n /**\n * returns the status of the AI search service\n * @returns {\n * status: string\n * timestamp: string\n * }\n */\n getAISearchStatus: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_status`,\n }),\n getAISearchVersion: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_version`,\n }),\n })\n});\n\n// Add more endpoints here\n\nexport const {\n useAskQuestionMutation,\n useGetAISearchStatusQuery,\n useGetAISearchVersionQuery\n} = aiSearchApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_WORKSPACE_STATUS_API } from '../../constants';\n\n\n\nexport const workspacesApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getWorkspaceOptions: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/options`,\n }),\n getWorkspacePayModels: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/allpaymodels`,\n }),\n getWorkspaceStatus: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/status`,\n }),\n } as const),\n });\n\nexport const {\n useGetWorkspaceOptionsQuery,\n useGetWorkspacePayModelsQuery,\n useGetWorkspaceStatusQuery,\n\n} = workspacesApi;\n","export const resourcePathFromProjectID = (projectID: string): string => {\n const split = projectID.split('-');\n const program = split[0];\n const project = split.slice(1).join('-');\n const resourcePath = ['/programs', program, 'projects', project].join('/');\n return resourcePath;\n};\n\nexport const isRootUrl = (urlFragment: string): boolean => urlFragment === '_root';\n\nexport const isProgramUrl = (urlFragment: string): boolean => urlFragment !== '_root' && !urlFragment.includes('-');\n\nexport const userHasSheepdogProgramAdmin = (userAuthMapping: Record<string, any> = {}): boolean => userAuthMapping['/services/sheepdog/submission/program'] !== undefined;\n\nexport const userHasSheepdogProjectAdmin = (userAuthMapping: Record<string, any> = {}): boolean => userAuthMapping['/services/sheepdog/submission/project'] !== undefined;\n\nexport const projectCodeFromResourcePath = (resourcePath: string): string => {\n const split = resourcePath.split('/');\n return (split.length < 5 || split[1] !== 'programs' || split[3] !== 'projects') ? '' : split[4];\n};\n\nexport const listifyMethodsFromMapping = (actions: { service: string, method: string }[]): string[] => {\n const reducer = (accumulator: string[], currval: { service: string, method: string }): string[] => accumulator.concat([currval.method]);\n return actions.reduce(reducer, []);\n};\n\nexport const userHasDataUpload = (userAuthMapping: Record<string, any> = {}): boolean => {\n const actionIsFileUpload = (x: { method: string }): boolean => x.method === 'file_upload';\n const resource = userAuthMapping['/data_file'];\n return resource !== undefined && resource.some(actionIsFileUpload);\n};\n\nexport const userHasMethodForServiceOnResource = (method: string, service: string, resourcePath: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const actions = userAuthMapping[resourcePath];\n return actions !== undefined && actions.some((x: { service: string, method: string }) => ((x.service === service || x.service === '*') && (x.method === method || x.method === '*')));\n};\n\nexport const userHasMethodForServiceOnProject = (method: string, service: string, projectID: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const resourcePath = resourcePathFromProjectID(projectID);\n return userHasMethodForServiceOnResource(method, service, resourcePath, userAuthMapping);\n};\n\nexport const userHasMethodOnAnyProject = (method: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const actionHasMethod = (x: { method: string }): boolean => (x.method === method);\n const actionArrays = Object.values(userAuthMapping);\n const hasMethod = actionArrays.some((x: { method: string }[]) => x.some(actionHasMethod));\n return hasMethod;\n};\n\nexport const userHasCreateOrUpdateOnAnyProject = (userAuthMapping: Record<string, any> = {}): boolean => (userHasMethodOnAnyProject('create', userAuthMapping)\n || userHasMethodOnAnyProject('update', userAuthMapping));\n","type JsonPathMapping = { [key: string]: string };\n\nexport interface JSONObject {\n [k: string]: JSONValue;\n}\n\nexport type JSONValue = string | number | boolean | JSONValue[] | JSONObject;\n\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const extractValuesFromObject = (jsonPathMappings: JsonPathMapping, obj: JSONObject): JSONObject =>{\n const result: { [key: string]: any } = {};\n\n const extractObjectValue = (jsonPath: string, obj: JSONObject): JSONValue | undefined => {\n const extractedValues = JSONPath({ path: jsonPath, json: obj });\n return extractedValues.length > 0 ? extractedValues[0] : undefined;\n };\n\n for (const key in jsonPathMappings) {\n if (key in Object.keys(jsonPathMappings)) {\n // Extract value from object and store it in the result.\n result[key] = extractObjectValue(jsonPathMappings[key], obj);\n }\n }\n\n return result;\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_SUBMISSION_API } from '../../constants';\nimport {\n Project,\n ProjectResponse,\n ProjectsListRequestParams,\n SubmissionInfo,\n SubmissionGraphqlParams,\n SubmissionGraphqlResponse,\n} from './types';\nimport { JSONObject } from '../../types';\nimport { extractValuesFromObject } from '../../utils/extractvalues';\nimport type { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\ninterface ProjectFetchQueryResponse {\n data: {\n data: {\n project: Array<Project>;\n };\n };\n}\n\n/**\n * Project details from the project query\n */\ninterface ProjectInfoFromProjectDetails {\n name: string;\n id: string;\n code: string;\n}\n\ninterface ProjectDetailsResponse\n extends Record<\n string,\n string | number | Array<ProjectInfoFromProjectDetails>\n > {\n project: Array<ProjectInfoFromProjectDetails>;\n}\n\ninterface ProjectDetailsFetchQueryResponse {\n data: {\n data: ProjectDetailsResponse;\n };\n}\n\n/**\n * Project details results a list of project details\n * and the project information\n */\ninterface ProjectDetailsResults {\n [key: string]: string | number | ProjectInfoFromProjectDetails;\n project: ProjectInfoFromProjectDetails;\n}\n\nexport interface ProjectDetailsQueryResponse {\n details: ProjectDetailsResults[];\n hits: number;\n}\n\ninterface SubmissionQueryResponse {\n transactionList: SubmissionInfo[];\n}\n\nconst SubmissionGraphqlQuery = `query transactionList {\n transactionList: transaction_log(last: 20) {\n id\n submitter\n project_id\n created_datetime\n documents {\n doc_size\n doc\n id\n }\n state\n }\n}`;\n\n/**\n * Defines submissionApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n * @param endpoints - Defines endpoints used in submission page\n * @param getProjects - Queries the list of projects\n * @param getProjectsDetails - Queries the list of projects and their details\n * @param getSubmissionGraphQL - Queries the submission graphql with a query and variables\n * @returns: A submission API for fetching project details\n */\nexport const submissionApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getProjects: builder.query<ProjectResponse, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n projects: response.data.project,\n };\n },\n }),\n getSubmissions: builder.query<SubmissionQueryResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: SubmissionGraphqlQuery,\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n transactionList: response.data.transactionList,\n };\n },\n }),\n getProjectsDetails: builder.query<\n ProjectDetailsQueryResponse,\n ProjectsListRequestParams\n >({\n async queryFn(args, _queryApi, _extraOptions, fetchWithBQ) {\n // get the list of projects\n const projectsResponse = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(args.projectQuery),\n });\n if (projectsResponse.error)\n return { error: projectsResponse.error as FetchBaseQueryError };\n\n const projects = (projectsResponse as ProjectFetchQueryResponse)?.data\n .data.project;\n const projectIds = projects.map((p) => p.project_id);\n\n // given the list of projects, get all of them by executing the projectDetailsQuery for each project\n const projectDetails = await Promise.all(\n projectIds.map(async (projectId) => {\n const result = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n ...args.projectDetailsQuery,\n variables: {\n name: projectId,\n },\n }),\n });\n const { project, ...values } = (\n result as ProjectDetailsFetchQueryResponse\n ).data.data;\n\n return result.data\n ? {\n data: args.mapping\n ? ({\n ...extractValuesFromObject(\n args.mapping,\n values as JSONObject,\n ),\n project: project[0],\n } as ProjectDetailsResults)\n : ({\n ...values,\n project: project[0],\n } as ProjectDetailsResults),\n }\n : { error: result.error };\n }),\n );\n\n // if any of the projectDetails has an error, return the error\n if (projectDetails.some((detail) => 'error' in detail)) {\n return {\n error: projectDetails.find(\n (detail) => 'error' in detail,\n ) as FetchBaseQueryError,\n };\n } else\n return {\n data: {\n details: projectDetails.reduce((acc, detail) => {\n acc.push(\n detail.data ?? {\n project: {\n name: '',\n id: '',\n code: '',\n },\n },\n );\n return acc;\n }, [] as ProjectDetailsResults[]),\n hits: projectIds.length, // TODO this needs to be changed to show the total number of projects\n },\n };\n },\n }),\n getSubmissionGraphQL: builder.query<\n SubmissionGraphqlResponse,\n SubmissionGraphqlParams\n >({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: graphQLParams.query,\n ...(graphQLParams.variables\n ? { variables: graphQLParams.variables }\n : {}),\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n if (params.mapping) {\n return {\n data: extractValuesFromObject(params.mapping, response.data),\n };\n }\n return response.data;\n },\n }),\n getDictionary: builder.query<SubmissionGraphqlResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/_dictionary/_all/`,\n }),\n }),\n }),\n});\n\nexport const {\n useGetProjectsQuery,\n useGetSubmissionGraphQLQuery,\n useGetProjectsDetailsQuery,\n useLazyGetProjectsQuery,\n useLazyGetSubmissionGraphQLQuery,\n useGetSubmissionsQuery,\n useGetDictionaryQuery,\n} = submissionApi;\n"],"names":["GEN3_COMMONS_NAME","process","env","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_AI_SEARCH_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_STATUS_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","GEN3_WTS_API","NEXT_PUBLIC_GEN3_WTS_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","Accessibility","FILE_DELIMITERS","tsv","csv","CoreContext","React","createContext","undefined","useCoreSelector","createSelectorHook","useCoreDispatch","createDispatchHook","useCoreStore","createStoreHook","coreCreateApi","buildCreateApi","coreModule","reactHooksModule","hooks","useSelector","useStore","useDispatch","buildFetchError","res","request","url","status","statusText","text","fetchFence","endpoint","headers","body","method","isJSON","fetch","JSON","stringify","ok","data","json","userAuthApi","reducerPath","refetchOnMountOrArgChange","refetchOnReconnect","baseQuery","getState","results","csrfToken","selectCSRFToken","accessToken","NODE_ENV","getCookie","Accept","Authorization","credentials","e","endpoints","builder","fetchUserDetails","query","transformResponse","response","loginStatus","username","getCSRF","csrf","EMPTY_USER","useFetchUserDetailsQuery","useLazyFetchUserDetailsQuery","useGetCSRFQuery","userAuthApiMiddleware","middleware","userAuthApiReducerPath","userAuthApiReducer","reducer","selectUserDetailsFromState","select","selectUserDetails","createSelector","userDetails","selectUserAuthStatus","userLoginState","QueryStatus","pending","uninitialized","selectCSRFTokenData","passThroughTheState","state","gen3Services","selectHeadersWithCSRFToken","gen3Api","fetchBaseQuery","baseUrl","prepareHeaders","set","gen3ServicesReducer","gen3ServicesReducerMiddleware","loginProvidersApi","injectEndpoints","getLoginProviders","useGetLoginProvidersQuery","logoutFence","redirect","credentialsWithTags","enhanceEndpoints","addTagTypes","credentialsApi","getCredentials","providesTags","addNewCredential","mutation","scope","invalidatesTags","removeCredential","id","authorizeFromCredentials","params","api_key","key_id","useGetCredentialsQuery","useAddNewCredentialMutation","useRemoveCredentialMutation","useAuthorizeFromCredentialsMutation","jwtApi","getJWKKeys","useGetJWKKeysQuery","usePrevious","value","ref","useRef","useEffect","current","createUseCoreDataHook","fetchDataActionCreator","dataSelector","coreDispatch","error","action","prevParams","isEqual","isUninitialized","isFetching","isSuccess","isError","fetchUserState","createAsyncThunk","_","meta","isAuthenticated","isPending","initialState","slice","createSlice","name","reducers","resetUserState","extraReducers","addCase","fulfilled","payload","rejected","userReducer","actions","selectUserData","user","selectUser","selectUserLoginStatus","useUser","useIsUserLoggedIn","useUserAuth","renew","externalLoginApi","getExternalLogins","isExternalConnected","idp","useGetExternalLoginsQuery","useLazyGetExternalLoginsQuery","useLazyIsExternalConnectedQuery","useIsExternalConnectedQuery","isHistogramRangeData","key","Array","isArray","length","every","item","isJSONObject","isJSONValue","isJSONValueArray","isValidObject","input","isHistogramData","isHistogramDataArray","histogram","isHistogramDataCollection","obj","isGuppyAggregationData","isHistogramDataAnEnum","count","isHistogramDataAArray","isHistogramDataArrayAnEnum","isHistogramDataArrayARange","isFetchBaseQueryError","isErrorWithMessage","message","isFetchParseError","REGISTRY","registerGen3App","gen3App","lookupGen3App","gen3Apps","addGen3AppMetadata","requiredEntityTypes","gen3AppReducer","selectGen3AppMetadataByName","appName","selectGen3AppByName","setDRSHostnames","_state","drsHostnamesReducer","Modals","currentModal","showModal","modal","hideModal","modalReducer","selectCurrentModal","modals","selectCurrentMessage","initialCohortState","cohort","filters","modified_datetime","Date","toISOString","cohortSlice","updateCohortFilter","index","field","filter","mode","root","removeCohortFilter","_a","updated","clearCohortFilters","selectCohortFilters","cohorts","selectCurrentCohortId","selectCurrentCohort","selectCurrentCohortName","selectIndexedFilterByName","EmptyFilterSet","selectIndexFilters","cohortReducer","guppyApi","api","Error","guppyAPISliceMiddleware","guppyApiSliceReducerPath","guppyApiReducer","rootReducer","combineReducers","drsHostnames","coreStore","configureStore","getDefaultMiddleware","concat","setupListeners","dispatch","CoreProvider","children","Provider","store","context","authzApi","getAuthzMappings","useGetAuthzMappingsQuery","selectAuthzMapping","selectAuthzMappingData","authzMapping","mappings","HasEnoughData","keys","limit","numEmptyKeys","k","Object","hasOwn","trim","metadataApi","getAggMDS","offset","pageSize","_meta","map","x","objValues","values","firstValue","at","studyField","hits","pagination","getIndexAggMDS","dataFromIndexes","indexKeys","reduce","acc","push","objIds","filterEmpty","gen3MDSGUID","getMDS","guidType","guid","getTags","getData","getCrosswalkData","queryFn","arg","_queryApi","_extraOptions","fetchWithBQ","queryMultiple","result","queue","Queue","concurrency","ids","callback","toData","toPaths","path","JSONPath","dataPath","resultType","from","to","Promise","resolve","reject","start","err","useGetAggMDSQuery","useGetMDSQuery","useGetTagsQuery","useGetDataQuery","useGetCrosswalkDataQuery","useLazyGetCrosswalkDataQuery","useGetIndexAggMDSQuery","GEN3_APP_NAMESPACE","getGen3AppId","version","nameVersion","uuidv5","createGen3App","App","Gen3AppWrapper","props","document","title","createAppStore","options","devTools","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","useAppSelector","useAppDispatch","useAppStore","AppStore","AppContext","createGen3AppWithOwnStore","CookiesProvider","createAppApiForRTKQ","appContext","appCreateApi","appRTKQApi","appMiddleware","appStore","appApi","graphQLWithTags","graphQLAPI","graphQL","graphQLParams","useGraphQLQuery","isOperationWithField","operation","extractFilterValue","op","valueExtractorHandler","ValueExtractorHandler","handleOperation","extractEnumFilterValue","enumValueExtractorHandler","EnumValueExtractorHandler","assertNever","handler","operator","handleEquals","handleNotEquals","handleLessThan","handleLessThanOrEquals","handleGreaterThan","handleGreaterThanOrEquals","handleIntersection","handleUnion","handleNestedFilter","handleIncludes","handleExcludeIfAny","handleExcludes","isFilterEmpty","fs","ToGqlHandler","operand","in","operands","exclude","excludeifany","and","convertFilterToGqlFilter","or","child","nested","convertFilterSetToGqlFilter","toplevelOp","fsKeys","_arg","FieldNameOverrides","COMMON_PREPOSITIONS","capitalize","s","toUpperCase","trimFirstFieldNameToTitle","fieldName","source","indexOf","fieldNameToTitle","sections","split","flat","word","includes","join","extractIndexFromFullFieldName","prependIndexToFieldName","extractFieldNameFromFullFieldName","extractIndexAndFieldNameFromFullFieldName","rest","statusEndpoint","processHistogramResponse","pathData","element","pointer","replace","fetchJson","useGetStatus","fetcher","useSWR","explorerApi","getAllFieldsForType","type","getAccessibleData","fields","accessType","fieldParts","getRawDataAndTotalCounts","sort","size","accessibility","ALL","format","gqlFilter","queryLine","dataParams","dataTypeLine","typeAggsLine","processedFields","rawDataQueryStrForEachField","variables","getAggs","queryStart","histogramQueryStrForEachField","queryBody","args","_aggregation","getSubAggs","mainField","termsFields","missingFields","numericAggAsText","nestedAggFields","nestedHistogramQueryStrForEachField","getCounts","gqlFilters","_totalCount","getFieldCountSummary","getFieldsForIndex","generalGQL","splittedFieldArray","splittedField","shift","splitFieldArray","splitField","useGetArrayTypes","useGetRawDataAndTotalCountsQuery","useGetAccessibleDataQuery","useGetAllFieldsForTypeQuery","useGetAggsQuery","useLazyGetAggsQuery","useGetSubAggsQuery","useGetCountsQuery","useGetFieldCountSummaryQuery","useGetFieldsForIndexQuery","useGeneralGQLQuery","useLazyGeneralGQLQuery","flattenJson","flattenedJson","forEach","flatten","delimiter","conversion","config","Papa","unparse","jsonToFormat","flatJson","prepareUrl","apiUrl","URL","prepareFetchConfig","parameters","downloadFromGuppyToBlob","onStart","onDone","onError","onAbort","signal","fetchConfig","toString","then","jsonData","rootPath","str","convertedData","Blob","blob","catch","downloadJSONDataFromGuppy","useGetIndexFields","downloadRequestApi","downloadFromGuppy","cache","useDownloadFromGuppyMutation","aiSearchApi","askQuestion","searchParams","topic","conversationId","conversation_id","documents","getAISearchStatus","getAISearchVersion","useAskQuestionMutation","useGetAISearchStatusQuery","useGetAISearchVersionQuery","workspacesApi","getWorkspaceOptions","getWorkspacePayModels","getWorkspaceStatus","useGetWorkspaceOptionsQuery","useGetWorkspacePayModelsQuery","useGetWorkspaceStatusQuery","resourcePathFromProjectID","projectID","program","project","resourcePath","isRootUrl","urlFragment","isProgramUrl","userHasSheepdogProgramAdmin","userAuthMapping","userHasSheepdogProjectAdmin","projectCodeFromResourcePath","listifyMethodsFromMapping","accumulator","currval","userHasDataUpload","actionIsFileUpload","resource","some","userHasMethodForServiceOnResource","service","userHasMethodForServiceOnProject","userHasMethodOnAnyProject","actionHasMethod","actionArrays","hasMethod","userHasCreateOrUpdateOnAnyProject","extractValuesFromObject","jsonPathMappings","extractObjectValue","jsonPath","extractedValues","SubmissionGraphqlQuery","submissionApi","getProjects","projects","getSubmissions","transactionList","getProjectsDetails","projectsResponse","projectQuery","projectIds","p","project_id","projectDetails","all","projectId","projectDetailsQuery","mapping","detail","find","details","code","getSubmissionGraphQL","getDictionary","useGetProjectsQuery","useGetSubmissionGraphQLQuery","useGetProjectsDetailsQuery","useLazyGetProjectsQuery","useLazyGetSubmissionGraphQLQuery","useGetSubmissionsQuery","useGetDictionaryQuery"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/features/fence/utils.ts","../../src/features/user/userSliceRTK.ts","../../src/features/gen3/gen3Api.ts","../../src/features/fence/fenceApi.ts","../../src/features/fence/credentialsApi.ts","../../src/features/fence/jwtApi.ts","../../src/hooks.ts","../../src/dataAccess.ts","../../src/features/user/userSlice.ts","../../src/features/user/externalLoginsSlice.ts","../../src/types/index.ts","../../src/features/gen3Apps/gen3AppRegistry.ts","../../src/features/gen3Apps/gen3AppsSlice.ts","../../src/features/drsResolver/drsHostnameSlice.ts","../../src/features/modals/modalsSlice.ts","../../src/features/cohort/cohortSlice.ts","../../src/features/guppy/guppyApi.ts","../../src/reducers.ts","../../src/store.ts","../../src/provider.tsx","../../src/features/authz/authzMappingSlice.ts","../../src/features/metadata/metadataSlice.ts","../../src/features/gen3Apps/constants.ts","../../src/features/gen3Apps/Gen3App.tsx","../../src/features/gen3Apps/Gen3AppRTKQ.ts","../../src/features/graphQL/graphQLSlice.ts","../../src/features/filters/filters.ts","../../src/features/filters/utils.ts","../../src/features/guppy/guppySlice.ts","../../src/features/guppy/conversion.ts","../../src/features/guppy/utils.ts","../../src/features/guppy/guppyDownloadSlice.ts","../../src/features/aiSearch/aiSearchSlice.ts","../../src/features/workspace/workspacesSlice.ts","../../src/features/submission/authMappingUtils.ts","../../src/utils/extractvalues.ts","../../src/features/submission/submissionApi.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME = process.env.GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || GEN3_API;\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_STATUS_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n","import { FetchError, Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API } from '../../constants';\nimport { FetchRequest } from './fenceApi';\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n return {\n url: res.url,\n status: res.status,\n statusText: res.statusText,\n text: await res.text(),\n request: request,\n };\n};\n/**\n * Template for a standard fence request\n * @returns: response data\n */\nexport const fetchFence = async <T>({\n endpoint,\n headers,\n body = {},\n method = 'GET',\n isJSON = true,\n}: FetchRequest): Promise<Gen3FenceResponse<T>> => {\n const res = await fetch(`${GEN3_FENCE_API}${endpoint}`, {\n method: method,\n headers: headers,\n body: 'POST' === method ? JSON.stringify(body) : null,\n });\n\n if (res.ok)\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n\n throw await buildFetchError(res, {\n endpoint,\n method,\n headers,\n body,\n });\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { fetchFence } from '../fence/utils';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { Gen3User, LoginStatus } from './types';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\nimport { createApi } from '@reduxjs/toolkit/query/react';\n\ninterface StatusWithCSRFTokenResponse {\n csrf: string;\n message?: string;\n}\n\nexport interface CSRFToken {\n readonly csrfToken: string;\n}\n\nexport interface UserAuthResponse {\n readonly data: Gen3User;\n readonly loginStatus: LoginStatus;\n}\n\nconst userAuthApi = createApi({\n reducerPath: 'userAuthApi',\n refetchOnMountOrArgChange: 1800,\n refetchOnReconnect: true,\n baseQuery: async ({ endpoint }, { getState }) => {\n let results;\n const csrfToken = selectCSRFToken(getState() as CoreState);\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n credentials: 'include',\n };\n\n try {\n results = await fetchFence({ endpoint, headers });\n } catch (e) {\n /*\n Because an \"error\" response is valid for the auth requests we don't want to\n put the request in an error state, or it will attempt the request over and over again\n */\n return { data: {} };\n }\n\n return { data: results };\n },\n endpoints: (builder) => ({\n fetchUserDetails: builder.query<UserAuthResponse, void>({\n query: () => ({ endpoint: '/user/user' }),\n transformResponse(response: Gen3FenceResponse<Gen3User>) {\n return {\n data: response.data,\n // TODO: check if this is the correct status code\n\n loginStatus:\n response.status === 200 && response.data?.username\n ? 'authenticated'\n : 'unauthenticated',\n };\n },\n }),\n getCSRF: builder.query<CSRFToken, void>({\n query: () => ({ endpoint: '/_status' }),\n transformResponse: (\n response: Gen3FenceResponse<StatusWithCSRFTokenResponse>,\n ): CSRFToken => {\n return { csrfToken: response?.data?.csrf ?? '' };\n },\n }),\n }),\n});\n\nconst EMPTY_USER: Gen3User = {\n username: undefined,\n};\n\nexport const {\n useFetchUserDetailsQuery,\n useLazyFetchUserDetailsQuery,\n useGetCSRFQuery,\n} = userAuthApi;\nexport const userAuthApiMiddleware = userAuthApi.middleware;\nexport const userAuthApiReducerPath = userAuthApi.reducerPath;\nexport const userAuthApiReducer = userAuthApi.reducer;\n\nexport const selectUserDetailsFromState =\n userAuthApi.endpoints.fetchUserDetails.select();\n\nexport const selectUserDetails = createSelector(\n selectUserDetailsFromState,\n (userDetails) => userDetails?.data?.data ?? EMPTY_USER,\n);\n\nexport const selectUserAuthStatus = createSelector(\n selectUserDetailsFromState,\n (userLoginState) =>\n userLoginState.status === QueryStatus.pending\n ? ('pending' as LoginStatus)\n : userLoginState.status === QueryStatus.uninitialized\n ? ('not present' as LoginStatus)\n : (userLoginState?.data?.loginStatus ??\n ('unauthenticated' as LoginStatus)),\n);\n\nexport const selectCSRFTokenData = userAuthApi.endpoints.getCSRF.select();\n\nconst passThroughTheState = (state: CoreState) => state.gen3Services;\n\nexport const selectCSRFToken = createSelector(\n [selectCSRFTokenData, passThroughTheState],\n (state) => state?.data?.csrfToken,\n);\n\nexport const selectHeadersWithCSRFToken = createSelector(\n [selectCSRFToken, passThroughTheState],\n (csrfToken) => ({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n }),\n);\n","import { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { fetchBaseQuery, createApi } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { selectCSRFToken } from '../user/userSliceRTK';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Creates a base class core API for building other API endpoints on top of.\n * @param reducerPath - The root key name that the other slices will be derived from\n * @param baseQuery: - The template query which the slices will addon to\n * @param endpoints - Base API endpoints that should exist in every slice\n * @returns: The generated base API\n */\nexport const gen3Api = createApi({\n reducerPath: 'gen3Services',\n baseQuery: fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers, { getState }) => {\n const csrfToken = selectCSRFToken(getState() as CoreState);\n headers.set('Content-Type', 'application/json');\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n return headers;\n },\n }),\n endpoints: () => ({}),\n});\n\nexport const gen3ServicesReducer: Reducer = gen3Api.reducer as Reducer;\nexport const gen3ServicesReducerMiddleware = gen3Api.middleware as Middleware;\n","import { gen3Api } from '../gen3/gen3Api';\nimport { GEN3_FENCE_API, GEN3_REDIRECT_URL } from '../../constants';\nimport { fetchFence } from './utils';\n\nexport interface NameUrl {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface Gen3LoginProvider {\n readonly desc?: string;\n readonly id: string;\n readonly idp: string;\n readonly name: string;\n readonly secondary: boolean;\n readonly url: string;\n readonly urls: Array<NameUrl>;\n}\n\nexport interface Gen3FenceLoginProviders {\n readonly default_provider: Gen3LoginProvider;\n readonly providers: Array<Gen3LoginProvider>;\n}\n\n/**\n * Creates a fence API endpoint for handling login processes\n * @param endpoints - defined endpoint query for logging in\n * @returns: The generated fence login API slice\n */\nexport const loginProvidersApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getLoginProviders: builder.query<Gen3FenceLoginProviders, void>({\n query: () => `${GEN3_FENCE_API}/user/login`,\n }),\n }),\n});\n\nexport const { useGetLoginProvidersQuery } = loginProvidersApi;\n\nexport interface FetchRequest {\n readonly endpoint: string;\n readonly method?: 'GET' | 'POST';\n readonly body?: object;\n readonly headers?: Record<string, string>;\n readonly isJSON?: boolean;\n}\n\n/**\n * Logout from fence\n */\n\nexport const logoutFence = async (redirect = '/') =>\n await fetchFence({\n endpoint: `${GEN3_FENCE_API}/user/logout?next=${GEN3_REDIRECT_URL}${redirect}`,\n method: 'GET',\n });\n","import { gen3Api } from '../gen3';\nimport { GEN3_FENCE_API } from '../../constants';\n\nexport interface APIKey {\n readonly jti: string;\n readonly exp: number;\n}\nexport interface Gen3FenceCredentials {\n readonly jtis: ReadonlyArray<APIKey>;\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Credentials'],\n});\n\ninterface DeleteCredentialParams {\n readonly csrfToken?: string;\n readonly id: string;\n}\n\ninterface AuthorizeFromCredentialsParams {\n api_key: string;\n key_id: string;\n}\nexport interface AuthTokenResponse {\n access_token: string;\n}\n\n/**\n * Adds a credentialsApi into the base gen3Api\n * @endpoints Includes get, add, and remove credential operations\n * @see https://github.com/uc-cdis/fence/blob/master/openapis/swagger.yaml#L972-L1033\n * @param getCredentials - List all the API keys for the current user\n * @param addNewCredential - Get a new API key for the current user\n * @param removeCredential - Delete API access key with given ID for current user\n * @returns: A fence credential API for manipulating user credentials\n */\nexport const credentialsApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getCredentials: builder.query<ReadonlyArray<APIKey>, void>({\n query: () => `${GEN3_FENCE_API}/user/credentials/api`,\n transformResponse: (\n response: Gen3FenceCredentials,\n ): ReadonlyArray<APIKey> => response['jtis'], // the response is a JSON object with a single key,\n // \"jtis\", which is an array of API keys\n // no need to transform the response, since the API returns the correct format\n providesTags: ['Credentials'],\n }),\n addNewCredential: builder.mutation({\n query: (csrfToken: string) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-csrf-token': csrfToken,\n },\n body: {\n scope: ['user', 'data'],\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n removeCredential: builder.mutation<void, DeleteCredentialParams>({\n query: ({ csrfToken, id }) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api/${id}`,\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'x-csrf-token': csrfToken }),\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n authorizeFromCredentials: builder.mutation<AuthTokenResponse, AuthorizeFromCredentialsParams>({\n query: (params) => ({\n url: `${GEN3_FENCE_API}/user/credentials/api/access_token`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: {\n api_key: params.api_key,\n key_id: params.key_id,\n },\n }),\n }),\n })\n});\n\nexport const {\n useGetCredentialsQuery,\n useAddNewCredentialMutation,\n useRemoveCredentialMutation,\n useAuthorizeFromCredentialsMutation\n} = credentialsApi;\n","import { gen3Api } from '../gen3';\n\nexport interface JWTKeys {\n keys: ReadonlyArray<string[2]>\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['fenceJWT'],\n});\n\n/**\n * A fence API for getting the public keys which can be used to validate\n * JWTs issued and signed by fence\n * @returns: Fence public keys\n */\nexport const jwtApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getJWKKeys: builder.query<ReadonlyArray<JWTKeys>, void>({\n query: () => 'user/jwt/keys',\n providesTags: ['fenceJWT'],\n }),\n }),\n});\n\nexport const {\n useGetJWKKeysQuery,\n} = jwtApi;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\n// From here down is react-related code. If we wanted to create a UI-agnotic core,\n// we could need to move the following code and the provider into a new workspace,\n// such as core-react.\n\n/**\n * The initial context is never used in practice. A little casting voodoo to satisfy TS.\n *\n * Note: Should the action type be AnyAction (from redux) or PayloadAction (from redux-toolkit)?\n * If we are creating all of our actions through RTK, then PayloadAction might be the\n * correct opinionated type.\n */\n\nexport const useCoreSelector = useSelector.withTypes<CoreState>();\nexport const useCoreDispatch = useDispatch.withTypes<CoreDispatch>();\n","import { useEffect, useRef } from 'react';\nimport { useCoreDispatch, useCoreSelector } from './hooks';\nimport { CoreState } from './reducers';\nimport { isEqual } from 'lodash';\n\nexport type UnknownJson = Record<string, unknown>;\n\nexport type DataStatus = 'uninitialized' | 'pending' | 'fulfilled' | 'rejected';\n\nexport interface Gen3Response<H = UnknownJson> {\n readonly data: H;\n readonly warnings?: Record<string, string>;\n readonly errors?: Record<string, string>;\n}\n\nexport interface UseCoreDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface CoreDataSelectorResponse<T, S = DataStatus> {\n readonly data?: T;\n readonly status: S;\n readonly error?: string;\n}\n\nexport interface CoreDataSelector<T> {\n (state: CoreState): CoreDataSelectorResponse<T>;\n}\n\nexport interface FetchDataActionCreator<P, A> {\n (...params: P[]): A;\n}\n\nexport interface UseCoreDataHook<P, T> {\n (...params: P[]): UseCoreDataResponse<T>;\n}\n\nexport const usePrevious = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const createUseCoreDataHook = <P, A, T>(\n fetchDataActionCreator: FetchDataActionCreator<P, A>,\n dataSelector: CoreDataSelector<T>,\n): UseCoreDataHook<P, T> => {\n return (...params: P[]) => {\n const coreDispatch = useCoreDispatch();\n const { data, status, error } = useCoreSelector(dataSelector);\n const action = fetchDataActionCreator(...params);\n const prevParams = usePrevious<P[]>(params);\n\n useEffect(() => {\n if (status === 'uninitialized' || !isEqual(prevParams, params)) {\n // createDispatchHook types forces the input to AnyAction, which is\n // not compatible with thunk actions. hence, the `as any` cast. ;(\n coreDispatch(action as any); // eslint-disable-line\n }\n }, [status, coreDispatch, action, params, prevParams]);\n\n return {\n data,\n error,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n };\n};\n\nexport interface CoreDataValueSelector<T> {\n (state: CoreState): T;\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport { fetchFence, Gen3FenceResponse } from '../fence';\nimport { CoreDispatch } from '../../store';\nimport { CoreState } from '../../reducers';\nimport {\n CoreDataSelectorResponse,\n createUseCoreDataHook,\n DataStatus,\n} from '../../dataAccess';\nimport { useCoreDispatch, useCoreSelector } from '../../hooks';\nimport { useEffect } from 'react';\nimport { Gen3User, LoginStatus } from './types';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from './userSliceRTK';\n\nexport interface Gen3UserLoginResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly loginStatus: LoginStatus;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\n/**\n * Creates an async thunk for fetching user permissions details from fence\n * @see https://redux-toolkit.js.org/api/createAsyncThunk\n * @returns: A fence response dict containing user details\n */\nexport const fetchUserState = createAsyncThunk<\n Gen3FenceResponse<Gen3User>,\n void,\n { dispatch: CoreDispatch; state: CoreState }\n>('fence/user/user', async (_, meta) => {\n // Get an access token from a cookie if in development mode\n const csrfToken = selectCSRFToken(meta.getState());\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n\n return await fetchFence({\n endpoint: '/user/user',\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n credentials: 'include',\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n },\n });\n});\n\nexport const isAuthenticated = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'authenticated';\n\nexport const isPending = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'pending';\n\nexport interface Gen3UserState {\n readonly data?: Gen3User;\n readonly status: DataStatus;\n readonly loginStatus: LoginStatus;\n readonly error?: string;\n}\n\nconst initialState: Gen3UserState = {\n status: 'uninitialized',\n loginStatus: 'unauthenticated',\n error: undefined,\n};\n\n/**\n * Wraps a slice on top of fetchUserState async thunk to keep track of\n * query state. authenticated/not-authenticated vs. ejected/fulfilled/pending\n * @returns: status messages wrapped around fetchUserState response dict\n */\nconst slice = createSlice({\n name: 'fence/user',\n initialState,\n reducers: {\n resetUserState: () => initialState,\n },\n extraReducers: (builder) => {\n builder\n .addCase(fetchUserState.fulfilled, (_, action) => {\n const response = action.payload;\n if (response.status !== 200) {\n return {\n status: 'rejected',\n loginStatus: 'unauthenticated',\n };\n }\n\n return {\n data: { ...response.data },\n status: 'fulfilled',\n loginStatus: 'authenticated',\n };\n })\n .addCase(fetchUserState.pending, () => {\n return { status: 'pending', loginStatus: 'unauthenticated' };\n })\n .addCase(fetchUserState.rejected, () => {\n return { status: 'rejected', loginStatus: 'unauthenticated' };\n });\n },\n});\n\nexport const userReducer = slice.reducer;\n\nexport const { resetUserState } = slice.actions;\n\nexport interface Gen3UserSelectorResponse<T>\n extends CoreDataSelectorResponse<T> {\n readonly loginStatus: LoginStatus;\n}\n\nexport const selectUserData = (\n state: CoreState,\n): Gen3UserSelectorResponse<Gen3User> => {\n return state.user;\n};\n\nexport const selectUser = (state: CoreState): Gen3UserState => state.user;\n\nexport const selectUserLoginStatus = (state: CoreState): LoginStatus =>\n state.user.loginStatus;\n\nexport const useUser = createUseCoreDataHook(fetchUserState, selectUserData);\n\nexport const useIsUserLoggedIn = (): boolean => {\n return useCoreSelector((state) =>\n isAuthenticated(selectUserLoginStatus(state)),\n );\n};\n\n/**\n * Hook to return get the authenticated state of the user and if logged in,\n * the user's profile and access api.\n * Note that if fetchUserState gets called, the user's session is renewed.\n */\nexport const useUserAuth = (renew = false): Gen3UserLoginResponse<Gen3User> => {\n const coreDispatch = useCoreDispatch();\n const { data, status, loginStatus, error } = useCoreSelector(selectUserData);\n\n useEffect(() => {\n if (status === 'uninitialized' || renew) {\n // TODO: need to determine what other states require dispatch\n coreDispatch(fetchUserState());\n }\n }, [status, coreDispatch, renew]);\n\n return {\n data: data,\n error,\n loginStatus,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n};\n","import { gen3Api } from '../gen3';\nimport { ExternalProvider } from './types';\nimport { GEN3_WTS_API } from '../../constants';\n\nexport interface ExternalProviderResponse {\n providers: ExternalProvider[];\n}\n\n/**\n * @description Creates a externalLoginApi for listing the configured identity providers\n * in workspace token service. Includes user token expiration time.\n * @see https://github.com/uc-cdis/workspace-token-service/tree/master\n */\nexport const externalLoginApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getExternalLogins: builder.query<ExternalProviderResponse, void>({\n query: () => ({\n url: `${GEN3_WTS_API}/external_oidc/`,\n }),\n }),\n isExternalConnected: builder.query<boolean, string>({\n query: (idp: string) => ({\n url: `${GEN3_WTS_API}/oauth2/connected?idp=${idp}`,\n }),\n transformResponse: () => {\n return true; // if success then connected is true\n },\n }),\n }),\n});\n\nexport const {\n useGetExternalLoginsQuery,\n useLazyGetExternalLoginsQuery,\n useLazyIsExternalConnectedQuery,\n useIsExternalConnectedQuery,\n} = externalLoginApi;\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\nexport type JSONValue = string | number | boolean | JSONValue[] | JSONObject;\n\nexport type JSONObject = {\n [k: string]: JSONValue;\n};\nexport type JSONArray = Array<JSONValue>;\n\n// type guard functions\nexport const isHistogramRangeData = (key: any): key is [number, number] => {\n return (\n Array.isArray(key) &&\n key.length === 2 &&\n key.every((item) => typeof item === 'number')\n );\n};\n\nexport const isJSONObject = (data: any): data is JSONObject => {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n};\n\nexport const isJSONValue = (data: any): data is JSONValue => {\n return (\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean' ||\n (Array.isArray(data) && data.every(isJSONValue)) ||\n isJSONObject(data)\n );\n};\n\nexport const isJSONValueArray = (data: JSONValue): data is JSONArray => {\n return Array.isArray(data) && data.every(isJSONValue);\n};\n\nexport interface HistogramData {\n key: string | [number, number];\n count: number;\n}\n\nexport type HistogramDataArray = Array<HistogramData>;\n\nconst isValidObject = (input: any): boolean =>\n typeof input === 'object' && input !== null;\n\nexport const isHistogramData = (data: any): data is HistogramData => {\n return isValidObject(data) && 'key' in data && 'count' in data;\n};\n\nexport const isHistogramDataArray = (input: any): input is HistogramData[] => {\n if (!isValidObject(input) || !Array.isArray(input.histogram)) {\n return false;\n }\n return input.histogram.every(isHistogramData);\n};\n\nexport interface HistogramDataCollection {\n histogram: HistogramDataArray;\n}\n\nexport const isHistogramDataCollection = (\n obj: any,\n): obj is HistogramDataCollection => {\n return (\n isValidObject(obj) && 'histogram' in obj && isHistogramData(obj.histogram)\n );\n};\n\nexport interface GuppyAggregationData {\n [key: string]: HistogramDataCollection;\n}\n\n// Type guard function for GuppyAggregationData interface\nexport const isGuppyAggregationData = (\n obj: any,\n): obj is GuppyAggregationData => {\n if (!isValidObject(obj)) return false;\n\n for (const key in obj) {\n if (!isHistogramDataCollection(obj[key])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isHistogramDataAnEnum = (data: unknown): data is HistogramData => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'key' in data &&\n 'count' in data &&\n typeof data.key === 'string' &&\n typeof data.count === 'number'\n );\n};\n\nexport const isHistogramDataAArray = (\n data: any,\n): data is HistogramDataArray => {\n return Array.isArray(data) && data.every(isHistogramData);\n};\n\nexport const isHistogramDataArrayAnEnum = (data: any): boolean => {\n return Array.isArray(data) && data.every(isHistogramDataAnEnum);\n};\n\nexport const isHistogramDataArrayARange = (data: any): boolean => {\n return (\n Array.isArray(data) && data.every((item) => isHistogramRangeData(item.key))\n );\n};\n\n/**\n * Type predicate to narrow an unknown error to `FetchBaseQueryError`\n */\nexport function isFetchBaseQueryError(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error != null && 'status' in error;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isErrorWithMessage(\n error: unknown,\n): error is { message: string } {\n return (\n typeof error === 'object' &&\n error != null &&\n 'message' in error &&\n typeof (error as any).message === 'string'\n );\n}\n\ninterface ParsingError {\n status: 'PARSING_ERROR';\n originalStatus: number;\n data: string;\n error: string;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isFetchParseError(error: unknown): error is ParsingError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'originalStatus' in error &&\n 'status' in error &&\n error['status'] === 'PARSING_ERROR'\n );\n}\n\nexport type AggregationsData = Record<string, HistogramDataArray>;\n","/**\n * A registry for the Gen3 Apps.\n */\nexport const REGISTRY: Record<string, React.ReactNode> = {};\n\nexport const registerGen3App = (id: string, gen3App: React.ReactNode): void => {\n REGISTRY[id] = gen3App;\n};\n\nexport const lookupGen3App = (id: string): React.ReactNode => {\n return REGISTRY[id];\n};\n\nexport const computeGen3AppId = (name: string, version: string): string => {\n return `${name}@${version}`;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport React from 'react';\nimport { CoreState } from '../../reducers';\nimport { lookupGen3App } from './gen3AppRegistry';\n\nexport interface Gen3AppsState {\n readonly gen3Apps: Readonly<Record<string, Gen3AppMetadata>>;\n readonly currentAppId?: string;\n}\n\nexport interface Gen3AppMetadata {\n readonly id: string;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport type EntityType = 'case' | 'gene' | 'ssm' | 'cnv' | 'file';\n\nconst initialState: Gen3AppsState = {\n gen3Apps: {},\n};\n\nconst slice = createSlice({\n name: 'gen3Apps',\n initialState,\n reducers: {\n addGen3AppMetadata: (state, action: PayloadAction<Gen3AppMetadata>) => {\n const { name, requiredEntityTypes } = action.payload;\n\n state.gen3Apps[name] = {\n ...action.payload,\n // need to turn a ReadonlyArray into a mutable array for immer's WritableDraft\n requiredEntityTypes: [...requiredEntityTypes],\n };\n },\n },\n});\n\nexport const gen3AppReducer = slice.reducer;\n\nexport const { addGen3AppMetadata } = slice.actions;\n\nexport const selectGen3AppIds = (state: CoreState): ReadonlyArray<string> =>\n Object.keys(state.gen3Apps.gen3Apps);\n\nexport const selectAllGen3AppMetadata = (\n state: CoreState,\n): ReadonlyArray<Gen3AppMetadata> => Object.values(state.gen3Apps.gen3Apps);\n\nexport const selectGen3AppMetadataByName = (\n state: CoreState,\n appName: string,\n): Gen3AppMetadata => state.gen3Apps.gen3Apps[appName];\n\nexport const selectGen3AppByName = (appName: string): React.ReactNode =>\n lookupGen3App(appName); // TODO: memoize this selector\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\nexport type DRSHostnameMap = Record<string, string>;\n\nconst initialState : Record<string, string> = {};\n\n// TODO: document what this does\nconst slice = createSlice({\n name: 'drsResolver',\n initialState,\n reducers: {\n setDRSHostnames: (_state, action: PayloadAction<DRSHostnameMap>) => {\n return action.payload;\n },\n },\n});\n\nexport const drsHostnamesReducer = slice.reducer;\n\nexport const { setDRSHostnames } = slice.actions;\n\nexport const drsHostnamesSelector = (id:string, state: CoreState) =>\n state.drsHostnames?.[id];\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\n/**\n * Defines the modals slice of the Redux store.\n * This slice is used to control the display of standard Gen3 modals.\n * and can be extended to add custom modals by representing them as strings.\n */\nexport enum Modals {\n 'FirstTimeModal' = 'FirstTimeModal',\n 'SessionExpireModal' = 'SessionExpireModal',\n 'NoAccessModal' = 'NoAccessModal',\n 'CreateCredentialsAPIKeyModal' = 'CreateCredentialsAPIKeyModal',\n 'GeneralErrorModal' = 'GeneralErrorModal',\n}\n\n// Type for the current modal in the store\n// This can be a standard Gen3 modal, a custom modal (via string), or null\ntype CurrentModal = Modals | string | null;\n\nexport interface ModalState {\n currentModal: CurrentModal;\n message?: string;\n}\n\nconst initialState: ModalState = {\n currentModal: null,\n};\n\n//Creates a modal slice for tracking showModal and hideModal state.\nconst slice = createSlice({\n name: 'modals',\n initialState,\n reducers: {\n showModal: (\n state: ModalState,\n action: PayloadAction<{ modal: Modals; message?: string }>,\n ) => {\n state.currentModal = action.payload.modal;\n state.message = action.payload.message;\n return state;\n },\n hideModal: (state: ModalState) => {\n state.currentModal = null;\n return state;\n },\n },\n});\n\nexport const modalReducer = slice.reducer;\nexport const { showModal, hideModal } = slice.actions;\n\nexport const selectCurrentModal = (state: CoreState): CurrentModal =>\n state.modals.currentModal;\n\nexport const selectCurrentMessage = (state: CoreState): string | undefined =>\n state.modals.message;\n","import { createSlice, Draft, type PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { Operation, FilterSet, IndexedFilterSet } from '../filters';\n\nexport interface Cohort {\n readonly id: string;\n readonly name: string;\n readonly filters: IndexedFilterSet; // maps of index to filter set\n readonly modified?: boolean; // flag which is set to true if modified and unsaved\n readonly modified_datetime: string; // last time cohort was modified\n}\n\nexport interface CohortState {\n cohort: Cohort;\n}\n\nconst initialCohortState: CohortState = {\n cohort: {\n id: 'default',\n name: 'Filters',\n filters: {},\n modified_datetime: new Date().toISOString(),\n },\n};\n\ninterface UpdateFilterParams {\n index: string;\n field: string;\n filter: Operation;\n}\n\ninterface RemoveFilterParams {\n index: string;\n field: string;\n}\n\ninterface ClearAllFilterParams {\n index: string;\n}\n\n// TODO: start using this adapter\n/*\nconst cohortsAdapter = createEntityAdapter<Cohort>({\n sortComparer: (a, b) => {\n if (a.modified_datetime <= b.modified_datetime) return 1;\n else return -1;\n },\n});\n*/\n\n/**\n * Redux slice for cohort filters\n */\n\nexport const cohortSlice = createSlice({\n name: 'cohort',\n initialState: initialCohortState,\n reducers: {\n // adds a filter to the cohort filter set at the given index\n updateCohortFilter: (\n state: Draft<CohortState>,\n action: PayloadAction<UpdateFilterParams>,\n ) => {\n const { index, field, filter } = action.payload;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n mode: state.cohort.filters?.[index]?.mode ?? 'and',\n root: {\n ...(state.cohort.filters?.[index]?.root ?? {}),\n [field]: filter,\n },\n },\n },\n },\n };\n },\n // removes a filter to the cohort filter set at the given index\n removeCohortFilter: (\n state: Draft<CohortState>,\n action: PayloadAction<RemoveFilterParams>,\n ) => {\n const { index, field } = action.payload;\n const filters = state.cohort?.filters?.[index]?.root;\n if (!filters) {\n return;\n }\n const { [field]: _a, ...updated } = filters;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n mode: state.cohort.filters[index].mode,\n root: updated,\n },\n },\n },\n };\n },\n // removes all filters from the cohort filter set at the given index\n clearCohortFilters: (\n state: Draft<CohortState>,\n action: PayloadAction<ClearAllFilterParams>,\n ) => {\n const { index } = action.payload;\n return {\n cohort: {\n ...state.cohort,\n filters: {\n ...state.cohort.filters,\n [index]: {\n // empty filter set\n mode: 'and',\n root: {},\n } as FilterSet,\n },\n },\n };\n },\n },\n});\n\n// Filter actions: addFilter, removeFilter, updateFilter\nexport const { updateCohortFilter, removeCohortFilter, clearCohortFilters } =\n cohortSlice.actions;\n\nexport const selectCohortFilters = (state: CoreState): IndexedFilterSet =>\n state.cohorts.cohort.filters;\n\nexport const selectCurrentCohortId = (state: CoreState): string =>\n state.cohorts.cohort.id;\n\nexport const selectCurrentCohort = (state: CoreState): Cohort =>\n state.cohorts.cohort;\n\nexport const selectCurrentCohortName = (state: CoreState): string =>\n state.cohorts.cohort.name;\n\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n * @param name name of the filter to select\n */\nexport const selectIndexedFilterByName = (\n state: CoreState,\n index: string,\n name: string,\n): Operation | undefined => {\n return state.cohorts.cohort.filters[index]?.root[name];\n};\n\nconst EmptyFilterSet: FilterSet = { mode: 'and', root: {} };\n/**\n * Select a filter from the index.\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n */\nexport const selectIndexFilters = (\n state: CoreState,\n index: string,\n): FilterSet => {\n return state.cohorts.cohort.filters?.[index] ?? EmptyFilterSet; // TODO: check if this is undefined\n};\n\nexport const cohortReducer = cohortSlice.reducer;\n","import type { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from '../user';\n\nexport interface guppyFetchError {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly text: string;\n readonly variables?: Record<string, any>;\n}\n\nexport interface guppyApiSliceRequest {\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n}\n\nexport interface guppyApiResponse<H = JSONObject> {\n readonly data: H;\n readonly errors: Record<string, string>;\n}\n\nexport interface SortOption {\n field: string;\n order: string;\n}\n\nexport interface TablePageOffsetProps {\n readonly pageSize?: number;\n readonly offset?: number;\n readonly sorts?: Array<SortOption>;\n readonly searchTerm?: string;\n}\n\n/**\n * Creates a base class core API for guppy API calls.\n * @returns: guppy core API with guppyAPIFetch base query\n */\nexport const guppyApi = createApi({\n reducerPath: 'guppy',\n\n // TODO: refactor to use fetchBaseQuery\n baseQuery: async (query: guppyApiSliceRequest, api) => {\n const csrfToken = selectCSRFToken(api.getState() as CoreState);\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n const headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n };\n try {\n const response = await fetch(`${GEN3_GUPPY_API}/graphql`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify(query),\n });\n return { data: await response.json() };\n } catch (e: unknown) {\n if (e instanceof Error) return { error: e.message };\n return { error: e };\n }\n },\n endpoints: () => ({}),\n});\n\nexport const guppyAPISliceMiddleware = guppyApi.middleware as Middleware;\nexport const guppyApiSliceReducerPath: string = guppyApi.reducerPath;\nexport const guppyApiReducer: Reducer = guppyApi.reducer as Reducer;\n","import { gen3ServicesReducer } from './features/gen3/gen3Api';\nimport { combineReducers } from '@reduxjs/toolkit';\nimport { userReducer } from './features/user/userSlice';\nimport { gen3AppReducer } from './features/gen3Apps/gen3AppsSlice';\nimport { drsHostnamesReducer } from './features/drsResolver';\nimport { modalReducer } from './features/modals/modalsSlice';\nimport { cohortReducer } from './features/cohort';\nimport { userAuthApiReducerPath, userAuthApiReducer} from './features/user/userSliceRTK';\n\nimport {\n guppyApiReducer,\n guppyApiSliceReducerPath,\n} from './features/guppy/guppyApi';\n\nexport const rootReducer = combineReducers({\n gen3Services: gen3ServicesReducer,\n user: userReducer,\n gen3Apps: gen3AppReducer,\n drsHostnames: drsHostnamesReducer,\n modals: modalReducer,\n cohorts: cohortReducer,\n [guppyApiSliceReducerPath]: guppyApiReducer,\n [userAuthApiReducerPath]: userAuthApiReducer,\n});\n\nexport type CoreState = ReturnType<typeof rootReducer>;\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport { rootReducer } from './reducers';\nimport { gen3ServicesReducerMiddleware } from './features/gen3/gen3Api';\nimport { guppyAPISliceMiddleware } from './features/guppy/guppyApi';\nimport { userAuthApiMiddleware } from './features/user/userSliceRTK';\n\nexport const coreStore = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware().concat(\n gen3ServicesReducerMiddleware,\n guppyAPISliceMiddleware,\n userAuthApiMiddleware,\n ),\n});\n\nsetupListeners(coreStore.dispatch);\n\nexport type CoreDispatch = typeof coreStore.dispatch;\n","import React, { PropsWithChildren } from 'react';\nimport { Provider } from 'react-redux';\nimport { coreStore } from './store';\n\nexport const CoreProvider: React.FC<Record<string, unknown>> = ({\n children,\n}: PropsWithChildren) => {\n return <Provider store={coreStore}>{children}</Provider>;\n};\n","import { gen3Api } from '../gen3';\nimport { createSelector } from '@reduxjs/toolkit';\nimport { type AuthzMapping } from './types';\nimport { GEN3_AUTHZ_API } from '../../constants';\n\n/**\n * Creates the authzApi for checking arborist permissions for a selected user\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/arborist/master/docs/openapi.yaml#/auth/get_auth_mapping\n * @see https://github.com/uc-cdis/arborist/blob/master/docs/relationships.simplified.png\n * @returns: An arborist response dict of user permissions {method, service} for each resource path.\n */\nexport const authzApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAuthzMappings: builder.query<AuthzMapping, void>({\n query: () => `${GEN3_AUTHZ_API}/mapping`,\n }),\n }),\n});\n\nexport const { useGetAuthzMappingsQuery } = authzApi;\n\nexport const selectAuthzMapping= authzApi.endpoints.getAuthzMappings.select();\n\nexport const selectAuthzMappingData = createSelector(\n selectAuthzMapping,\n authzMapping => authzMapping?.data ?? { mappings: [] }\n);\n","import { JSONObject } from '../../types';\nimport { gen3Api } from '../gen3';\nimport Queue from 'queue';\nimport { GEN3_CROSSWALK_API, GEN3_MDS_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport { CrosswalkInfo, IndexedMetadataFilters } from './types';\n\nexport interface Metadata {\n readonly entries: Array<Record<string, unknown>>;\n}\n\nexport type CrosswalkArray = Array<CrosswalkInfo>;\n\ninterface ToMapping {\n id: string;\n dataPath: string[];\n}\n\ninterface CrossWalkParams {\n readonly ids: string[];\n readonly toPaths: Array<ToMapping>;\n}\n\nexport interface MetadataResponse {\n data: Array<JSONObject>;\n hits: number;\n}\n\nexport interface MetadataPaginationParams {\n pageSize: number;\n offset: number;\n}\n\nexport interface MetadataRequestParams extends MetadataPaginationParams {\n guidType: string;\n studyField: string;\n}\n\ninterface IndexedMetadataRequestParams extends MetadataRequestParams {\n indexKeys: Array<string>;\n filterEmpty?: IndexedMetadataFilters;\n}\n\nconst HasEnoughData = (\n data: Record<string, any>,\n keys: string[],\n limit: number,\n) => {\n const numEmptyKeys = keys.filter(\n (k) =>\n Object.hasOwn(data, k) &&\n typeof data[k] === 'string' &&\n data[k].trim() === '',\n ).length;\n return numEmptyKeys < limit;\n};\n\n/**\n * Defines metadataApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param getAggMDS - Queries aggregate metadata service\n * @see https://github.com/uc-cdis/metadata-service/blob/master/docs/agg_mds.md\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_metadata_aggregate_metadata_get\n * @param getMDS - Queries normal metadata service\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Query/search_metadata_metadata_get\n * @param getIndexAggMDS - queries the Aggregate Metadata service and returns all common passed in indexKeys\n * @param getTags - Probably refering to Aggregate metadata service summary statistics query\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_tags_aggregate_tags_get\n * @param getData - Looks like a duplicate of getMDS handler. unused in ./frontend package\n * @param getCrosswalkData - Maps ids from one source to another\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const metadataApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAggMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ offset, pageSize }: MetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?flatten=true&pagination=true&offset=${offset}&limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return {\n data: response.results.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n return firstValue ? firstValue[params.studyField] : undefined;\n }),\n hits: response.pagination.hits,\n };\n },\n }),\n getIndexAggMDS: builder.query<\n MetadataResponse,\n IndexedMetadataRequestParams\n >({\n query: ({ pageSize }: IndexedMetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n const dataFromIndexes = params.indexKeys.reduce(\n (acc, key) => {\n if (response[key]) {\n acc.push(...response[key]);\n }\n return acc;\n },\n [] as Array<Record<string, any>>,\n );\n\n return {\n data: (\n dataFromIndexes.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const objIds = Object.keys(x);\n let firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n\n if (params?.filterEmpty) {\n // remove any data that has < limit if defined\n if (\n firstValue &&\n !HasEnoughData(\n firstValue[params.studyField] as Record<string, any>,\n params.filterEmpty.keys,\n params.filterEmpty.limit,\n )\n )\n firstValue = undefined;\n }\n return firstValue\n ? {\n gen3MDSGUID: objIds.at(0),\n ...(firstValue[params.studyField] as Record<string, any>),\n }\n : undefined;\n }) as JSONObject[]\n ).filter((x: JSONObject | undefined) => x !== undefined),\n hits: dataFromIndexes.length,\n };\n },\n }),\n getMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ guidType, offset, pageSize }) => {\n return `${GEN3_MDS_API}/metadata?data=True&_guid_type=${guidType}&limit=${pageSize}&offset=${offset}`;\n },\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n data: Object.keys(response).map((guid) => response[guid]),\n hits: Object.keys(response).length,\n };\n },\n }),\n getTags: builder.query<Metadata, string>({\n query: () => 'tags',\n }),\n getData: builder.query<Metadata, string>({\n query: (params) => ({ url: `metadata?${params}` }),\n }),\n // TODO: Move this to own slice\n getCrosswalkData: builder.query<CrosswalkArray, CrossWalkParams>({\n queryFn: async (arg, _queryApi, _extraOptions, fetchWithBQ) => {\n const queryMultiple = async (): Promise<CrosswalkInfo[]> => {\n let result = [] as CrosswalkInfo[];\n const queue = Queue({ concurrency: 15 });\n for (const id of arg.ids) {\n queue.push(async (callback?: () => void) => {\n const response = await fetchWithBQ({\n url: `${GEN3_CROSSWALK_API}/metadata/${id}`,\n });\n\n if (response.error) {\n return { error: response.error };\n }\n\n const toData = arg.toPaths.reduce(\n (acc, path) => {\n acc[path.id] =\n JSONPath<string>({\n json: response.data as Record<string, any>,\n path: `$.[${path.dataPath}]`,\n resultType: 'value',\n })?.[0] ?? 'n/a';\n return acc;\n },\n {} as Record<string, string>,\n );\n\n result = [\n ...result,\n {\n from: id,\n to: toData,\n },\n ];\n if (callback) callback();\n\n return result;\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n };\n\n const result = await queryMultiple();\n return { data: result };\n },\n }),\n }),\n});\n\nexport const {\n useGetAggMDSQuery,\n useGetMDSQuery,\n useGetTagsQuery,\n useGetDataQuery,\n useGetCrosswalkDataQuery,\n useLazyGetCrosswalkDataQuery,\n useGetIndexAggMDSQuery,\n} = metadataApi;\n","// using a random uuid v4 as the namespace\nexport const GEN3_APP_NAMESPACE = '7bfaa818-c69c-457e-8d87-413cf60c25f0';\n","import React, { ComponentType, useEffect } from 'react';\nimport { coreStore } from '../../store';\nimport { v5 as uuidv5 } from 'uuid';\nimport { addGen3AppMetadata, EntityType } from './gen3AppsSlice';\nimport {\n configureStore,\n Dispatch,\n Middleware,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport { Action, Store } from 'redux';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n Provider,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { registerGen3App } from './gen3AppRegistry';\nimport { DataStatus } from '../../dataAccess';\nimport { CookiesProvider } from 'react-cookie';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport interface CreateGen3AppOptions<T> {\n readonly App: ComponentType<T>;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport const getGen3AppId = (name: string, version: string): string => {\n const nameVersion = `${name}::${version}`;\n return uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n};\n\n/**\n * Creates a Gen3App that is dynamically loaded\n */\nexport const createGen3App = <\n T extends Record<any, any> = Record<string, any>,\n>({\n App,\n name,\n version,\n requiredEntityTypes,\n}: CreateGen3AppOptions<T>): React.FC<T> => {\n // create a stable id for this app\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n // const store = configureStore({\n // // TODO allow user to pass in a reducer in CreateGen3AppOptions?\n // reducer: (state) => state,\n // devTools: {\n // name: `${nameVersion}::${id}`,\n // },\n // });\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return <App {...props} />;\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n\n return Gen3AppWrapper;\n};\n\nexport interface AppDataSelectorResponse<T> {\n readonly data?: T;\n readonly status: DataStatus;\n readonly error?: string;\n}\n\nexport interface UseAppDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface UseAppDataHook<P, T> {\n (...params: P[]): UseAppDataResponse<T>;\n}\n\nexport interface CreateGEN3AppStore {\n readonly name: string;\n readonly version: string;\n readonly reducers: (...args: any) => any;\n middleware?: Middleware<unknown, any, Dispatch<UnknownAction>>;\n}\n\n// ----------------------------------------------------------------------------------------\n// Apps with Local Storage\n//\n\nexport const createAppStore = (\n options: CreateGEN3AppStore,\n): Record<any, any> => {\n const { name, version, reducers, middleware } = options;\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const store = configureStore({\n reducer: reducers,\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n middleware: (getDefaultMiddleware) =>\n middleware\n ? getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }).concat(middleware)\n : getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }),\n });\n type AppState = ReturnType<typeof reducers>;\n const context = React.createContext<ReactReduxContextValue | null>(null);\n\n type AppDispatch = typeof store.dispatch;\n const useAppSelector: TypedUseSelectorHook<AppState> =\n createSelectorHook(context);\n const useAppDispatch: () => AppDispatch = createDispatchHook(context);\n const useAppStore = createStoreHook(context);\n\n return {\n id: id,\n AppStore: store,\n AppContext: context,\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n };\n};\n\nexport interface CreateGen3AppWithOwnStoreOptions<\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n> {\n readonly App: ComponentType<T>;\n readonly id: string; // unique id for this app\n readonly name: string; // name of the app\n readonly version: string; // version of the app, should be unique\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n readonly store: Store<S, A>; // the redux-store for this app\n readonly context: any;\n}\n\nexport const createGen3AppWithOwnStore = <\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n>(\n options: CreateGen3AppWithOwnStoreOptions<T, A, S>,\n): React.ReactNode => {\n const { App, id, name, version, requiredEntityTypes, store, context } =\n options;\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return (\n <Provider store={store} context={context}>\n <CookiesProvider>\n <App {...props} />\n </CookiesProvider>\n </Provider>\n );\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n return Gen3AppWrapper as unknown as React.ReactNode;\n};\n","import * as React from 'react';\nimport {\n createDispatchHook,\n createStoreHook,\n ReactReduxContextValue,\n useSelector,\n} from 'react-redux';\nimport {\n ApiModules,\n buildCreateApi,\n coreModule,\n CreateApi,\n reactHooksModule,\n BaseQueryFn,\n fetchBaseQuery,\n} from '@reduxjs/toolkit/query/react';\nimport { configureStore } from '@reduxjs/toolkit';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { GEN3_API } from '../../constants';\nimport { getCookie } from 'cookies-next';\n\nexport const createAppApiForRTKQ = (\n reducerPath: string,\n baseQuery?: BaseQueryFn,\n) => {\n const appContext = React.createContext<ReactReduxContextValue | null>(null);\n\n type AppState = any;\n const useAppSelector = useSelector.withTypes<AppState>();\n const useAppDispatch = createDispatchHook(appContext);\n const useAppStore = createStoreHook(appContext);\n\n const appCreateApi: CreateApi<keyof ApiModules<any, any, any, any>> =\n buildCreateApi(\n coreModule(),\n reactHooksModule({\n hooks: {\n useDispatch: useAppDispatch,\n useSelector: useAppSelector,\n useStore: useAppStore,\n },\n }),\n );\n\n const appRTKQApi = appCreateApi({\n reducerPath: reducerPath,\n baseQuery:\n baseQuery ??\n fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers) => {\n headers.set('Content-Type', 'application/json');\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n if (accessToken)\n headers.set('Authorization', `Bearer ${accessToken}`);\n return headers;\n },\n }),\n endpoints: () => ({}),\n });\n\n const appMiddleware = appRTKQApi.middleware;\n const appStore = configureStore({\n reducer: {\n [appRTKQApi.reducerPath]: appRTKQApi.reducer,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n }).concat(appMiddleware),\n });\n\n return {\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n AppContext: appContext,\n appApi: appRTKQApi,\n appContext: appContext,\n appStore: appStore,\n };\n};\n","import { gen3Api } from '../gen3';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\n\nexport const graphQLWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['graphQL'],\n});\n\n/**\n * Creates a graphQLAPI for graphql queries to elasticsearch indices via guppy\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md\n * @param query - Resolver function which configures the graphql query with graphQLParams argument\n * @returns: A guppy search API for fetching metadata\n */\nexport const graphQLAPI = graphQLWithTags.injectEndpoints({\n endpoints: (builder) => ({\n graphQL: builder.query<JSONObject, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_GUPPY_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n }),\n }),\n});\n\nexport const { useGraphQLQuery } = graphQLAPI;\n","import { isEqual } from 'lodash';\nimport {\n EnumFilterValue,\n Equals,\n ExcludeIfAny,\n Excludes,\n FilterSet,\n FilterValue,\n GreaterThan,\n GreaterThanOrEquals,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n OperationWithField,\n Union,\n} from './types';\n\nexport const isOperationWithField = (\n operation: OperationWithField | Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField)?.field !== undefined;\n};\nexport const extractFilterValue = (op: Operation): FilterValue => {\n const valueExtractorHandler = new ValueExtractorHandler();\n return handleOperation<FilterValue>(valueExtractorHandler, op);\n};\nexport const extractEnumFilterValue = (op: Operation): EnumFilterValue => {\n const enumValueExtractorHandler = new EnumValueExtractorHandler();\n const results = handleOperation<EnumFilterValue | undefined>(\n enumValueExtractorHandler,\n op,\n );\n return results ?? [];\n};\n\nconst assertNever = (x: never): never => {\n throw Error(`Exhaustive comparison did not handle: ${x}`);\n};\n\nexport const handleOperation = <T>(\n handler: OperationHandler<T>,\n op: Operation,\n): T => {\n switch (op.operator) {\n case '=':\n return handler.handleEquals(op);\n case '!=':\n return handler.handleNotEquals(op);\n case '<':\n return handler.handleLessThan(op);\n case '<=':\n return handler.handleLessThanOrEquals(op);\n case '>':\n return handler.handleGreaterThan(op);\n case '>=':\n return handler.handleGreaterThanOrEquals(op);\n case 'and':\n return handler.handleIntersection(op);\n case 'or':\n return handler.handleUnion(op);\n case 'nested':\n return handler.handleNestedFilter(op);\n case 'in':\n return handler.handleIncludes(op);\n case 'excludeifany':\n return handler.handleExcludeIfAny(op);\n case 'excludes':\n return handler.handleExcludes(op);\n default:\n return assertNever(op);\n }\n};\n\n/**\n * Return true if a FilterSet's root value is an empty object\n * @param fs - FilterSet to test\n */\nexport const isFilterEmpty = (fs: FilterSet): boolean => isEqual({}, fs);\n\nexport interface FilterGroup {\n readonly filterIndex: number;\n readonly filter: FilterSet;\n}\n\nexport interface GQLEqual {\n '=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLNotEqual {\n '!=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThan {\n '<': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThanOrEquals {\n '<=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThan {\n '>': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThanOrEquals {\n '>=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLIncludes {\n in: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludes {\n exclude: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludeIfAny {\n excludeifany: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLIntersection {\n and: ReadonlyArray<GQLFilter>;\n}\n\nexport interface GQLUnion {\n or: ReadonlyArray<GQLFilter>;\n}\n\ntype NestedContents = GQLFilter & {\n path: string;\n};\n\nexport interface GQLNestedFilter {\n nested: NestedContents;\n}\n\nexport type GQLFilter =\n | GQLEqual\n | GQLNotEqual\n | GQLLessThan\n | GQLLessThanOrEquals\n | GQLGreaterThan\n | GQLGreaterThanOrEquals\n | GQLIncludes\n | GQLExcludes\n | GQLExcludeIfAny\n | GQLIntersection\n | GQLUnion\n | GQLNestedFilter;\n\nexport class ToGqlHandler implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual => ({\n '=': {\n [op.field]: op.operand,\n },\n });\n handleNotEquals = (op: NotEquals): GQLNotEqual => ({\n '!=': {\n [op.field]: op.operand,\n },\n });\n handleLessThan = (op: LessThan): GQLLessThan => ({\n '<': {\n [op.field]: op.operand,\n },\n });\n handleLessThanOrEquals = (op: LessThanOrEquals): GQLLessThanOrEquals => ({\n '<=': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan => ({\n '>': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals => ({\n '>=': {\n [op.field]: op.operand,\n },\n });\n\n handleIncludes = (op: Includes): GQLIncludes => ({\n in: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludes = (op: Excludes): GQLExcludes => ({\n exclude: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludeIfAny = (op: ExcludeIfAny): GQLExcludeIfAny => ({\n excludeifany: {\n [op.field]: op.operands,\n },\n });\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nconst convertFilterToGqlFilter = (filter: Operation): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlHandler();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) };\n};\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class ValueExtractorHandler implements OperationHandler<FilterValue> {\n handleEquals: (op: Equals) => string | number = (op: Equals) => op.operand;\n handleNotEquals: (op: NotEquals) => string | number = (op: NotEquals) =>\n op.operand;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => string | number = (\n op: GreaterThanOrEquals,\n ) => op.operand;\n handleGreaterThan: (op: GreaterThan) => string | number = (op: GreaterThan) =>\n op.operand;\n handleLessThan: (op: LessThan) => string | number = (op: LessThan) =>\n op.operand;\n handleLessThanOrEquals: (op: LessThanOrEquals) => string | number = (\n op: LessThanOrEquals,\n ) => op.operand;\n handleIntersection: (op: Intersection) => undefined = (_arg: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => undefined = (_: NestedFilter) =>\n undefined;\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class EnumValueExtractorHandler\n implements OperationHandler<EnumFilterValue | undefined>\n{\n handleEquals: (_: Equals) => undefined = (_: Equals) => undefined;\n handleNotEquals: (_: NotEquals) => undefined = (_: NotEquals) => undefined;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (_: GreaterThanOrEquals) => undefined = (\n _: GreaterThanOrEquals,\n ) => undefined;\n handleGreaterThan: (_: GreaterThan) => undefined = (_: GreaterThan) =>\n undefined;\n handleLessThan: (op: LessThan) => undefined = (_: LessThan) => undefined;\n handleLessThanOrEquals: (op: LessThanOrEquals) => undefined = (\n _: LessThanOrEquals,\n ) => undefined;\n handleIntersection: (op: Intersection) => undefined = (_: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => EnumFilterValue | undefined = (\n op: NestedFilter,\n ) => {\n return extractEnumFilterValue(op.operand);\n };\n}\n","const FieldNameOverrides: Record<string, string> = {};\n\nconst COMMON_PREPOSITIONS = [\n 'a',\n 'an',\n 'and',\n 'at',\n 'but',\n 'by',\n 'for',\n 'in',\n 'is',\n 'nor',\n 'of',\n 'on',\n 'or',\n 'out',\n 'so',\n 'the',\n 'to',\n 'up',\n 'yet',\n];\n\nconst capitalize = (s: string): string =>\n s.length > 0 ? s[0].toUpperCase() + s.slice(1) : '';\n\nexport const trimFirstFieldNameToTitle = (\n fieldName: string,\n trim = false,\n): string => {\n if (trim) {\n const source = fieldName.slice(fieldName.indexOf('.') + 1);\n return fieldNameToTitle(source ? source : fieldName, 0);\n }\n return fieldNameToTitle(fieldName);\n};\n\n/**\n * Converts a filter name to a title,\n * For example files.input.experimental_strategy will get converted to Experimental Strategy\n * if sections == 2 then the output would be Input Experimental Strategy\n * @param fieldName input filter expected to be: string.firstpart_secondpart\n * @param sections number of \"sections\" string.string.string to got back from the end of the field\n */\n\nexport const fieldNameToTitle = (fieldName: string, sections = 1): string => {\n if (fieldName in FieldNameOverrides) {\n return FieldNameOverrides[fieldName];\n }\n if (fieldName === undefined) return 'No Title';\n\n return fieldName\n .split('.')\n .slice(-sections)\n .map((s) => s.split('_'))\n .flat()\n .map((word) =>\n COMMON_PREPOSITIONS.includes(word) ? word : capitalize(word),\n )\n .join(' ');\n};\n\n/**\n * Extracts the index name from the field name\n * @param fieldName\n */\nexport const extractIndexFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.')[0];\n\n/**\n * prepend the index name to the field name\n */\nexport const prependIndexToFieldName = (\n fieldName: string,\n index: string,\n): string => `${index}.${fieldName}`;\n\n/**\n * extract the field name from the index.field name\n */\nexport const extractFieldNameFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.').slice(1).join('.');\n\n/**\n * extract the field name and the index from the index.field name returning as a tuple\n */\nexport const extractIndexAndFieldNameFromFullFieldName = (\n fieldName: string,\n): [string, string] => {\n const [index, ...rest] = fieldName.split('.');\n return [index, rest.join('.')];\n};\n","import useSWR, { Fetcher, SWRResponse } from 'swr';\nimport { AggregationsData, JSONObject } from '../../types';\nimport { Accessibility, GEN3_GUPPY_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport {\n convertFilterSetToGqlFilter,\n FilterSet,\n isFilterEmpty,\n} from '../filters';\nimport { guppyApi, guppyApiSliceRequest } from './guppyApi';\n\nconst statusEndpoint = '/_status';\n\nconst processHistogramResponse = (\n data: Record<string, any>,\n): AggregationsData => {\n const pathData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'all',\n });\n const results = pathData.reduce(\n (acc: AggregationsData, element: Record<string, any>) => {\n const key = element.pointer\n .slice(1)\n .replace(/\\/histogram/g, '')\n .replace(/\\//g, '.');\n return {\n ...acc,\n [key]: element.value,\n };\n },\n {} as AggregationsData,\n );\n return results as AggregationsData;\n};\n\nexport interface GraphQLQuery {\n query: string;\n variables?: Record<string, unknown>;\n}\n\nexport const fetchJson: Fetcher<JSONObject, string> = async (url: string) => {\n const res = await fetch(url, {\n method: 'GET',\n headers: { 'Content-type': 'application/json' },\n });\n if (!res.ok) throw new Error('An error occurred while fetching the data.');\n return (await res.json()) as JSONObject;\n};\n\nexport const useGetStatus = (): SWRResponse<JSONObject, Error> => {\n const fetcher = () => fetchJson(`${GEN3_GUPPY_API}${statusEndpoint}`);\n return useSWR('explorerStatus', fetcher);\n};\n\nexport type AggregationResponse = Record<string, JSONObject>;\n\nexport interface RawDataAndTotalCountsParams {\n type: string;\n fields: string[];\n filters: FilterSet;\n sort?: ReadonlyArray<Record<string, 'asc' | 'desc'>>;\n offset?: number;\n size?: number;\n accessibility?: Accessibility;\n format?: string;\n}\n\n/*\n returns all the fields for a given type\n @param type: the type to get fields for\n @returns: a list of fields for the given type\n */\n\ninterface AccessibleDataSliceParams {\n type: string;\n fields: ReadonlyArray<string>;\n accessType: Accessibility;\n}\n\ninterface QueryAggsParams {\n type: string;\n fields: ReadonlyArray<string>;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryForSubAggsParams {\n type: string;\n mainField: string;\n numericAggAsText: boolean;\n termsFields?: ReadonlyArray<string>;\n missingFields?: ReadonlyArray<string>;\n gqlFilter?: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryCountsParams {\n type: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\ninterface QueryForFileCountSummaryParams {\n type: string;\n field: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n}\n\n/**\n * The main endpoint used in templating Exploration page queries.\n * Includes table, filter and aggregation query types and leverages guppyApi defined in ./gupplApi.ts\n * Query templates support filters where applicable\n *\n * @param endpoints - Defines endpoints used in Exploration page:\n * @param getAllFieldsForType - A mapping query that returns all property key names vertex types specified.\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#mapping-query\n * @param getAccessibleData - An aggregation histogram counts query that filters based on access type\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#accessibility-argument-for-regular-tier-access-level\n * @param getRawDataAndTotalCounts - Queries both _totalCount for selected vertex types and\n * tabular results containing the raw data in the rows of selected vertex types\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#1-total-count-aggregation\n * @param getAggs - An aggregated histogram counts query which outputs vertex property frequencies\n * @param getSubAggs - TODO: not sure what this one does. Looks like nested aggregation\n * @param getCounts - Returns total counts of a vertex type\n * @returns: A guppy API endpoint for templating queriable data displayed on the exploration page\n */\nconst explorerApi = guppyApi.injectEndpoints({\n endpoints: (builder) => ({\n getAllFieldsForType: builder.query({\n query: (type: { type: string }) => ({\n query: `{ _mapping ${type} } }`,\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return response[params.type];\n },\n }),\n getAccessibleData: builder.query({\n query: ({ type, fields, accessType }: AccessibleDataSliceParams) => {\n const fieldParts = fields.map(\n (field) => `${field} { histogram { key count } }`,\n );\n return {\n query: `_aggregation {\n ${type} (accessibility: ${accessType}) {\n ${fieldParts.join(',')}\n }\n }`,\n };\n },\n }),\n getRawDataAndTotalCounts: builder.query({\n query: ({\n type,\n fields,\n filters,\n sort,\n offset = 0,\n size = 20,\n accessibility = Accessibility.ALL,\n format = undefined,\n }: RawDataAndTotalCountsParams) => {\n const gqlFilter = convertFilterSetToGqlFilter(filters);\n const params = [\n ...(sort ? ['$sort: JSON'] : []),\n ...(gqlFilter ? ['$filter: JSON'] : []),\n ...(format ? ['$format: Format'] : []),\n ].join(',');\n const queryLine = `query getRawDataAndTotalCounts (${params}) {`;\n\n const dataParams = [\n ...(format ? ['format: $format'] : []),\n ...(sort ? ['sort: $sort'] : []),\n ...(gqlFilter ? ['filter: $filter'] : []),\n ].join(',');\n const dataTypeLine = `${type} (accessibility: ${accessibility}, offset: ${offset}, first: ${size},\n ${dataParams}) {`;\n\n const typeAggsLine = `${type} (${\n gqlFilter && 'filter: $filter,'\n } accessibility: ${accessibility}) {`;\n\n const processedFields = fields.map((field) =>\n rawDataQueryStrForEachField(field),\n );\n\n const query = `${queryLine}\n ${dataTypeLine}\n ${processedFields.join(' ')}\n }\n _aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n const variables = {\n ...(sort && { sort }),\n ...(gqlFilter && { filter: gqlFilter }),\n ...(format && { format }),\n };\n return { query, variables };\n },\n }),\n getAggs: builder.query<AggregationsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryAggsParams) => {\n const queryStart = isFilterEmpty(filters)\n ? `\n query getAggs {\n _aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getAggs ($filter: JSON) {\n _aggregation {\n ${type} (filter: $filter, filterSelf: false, accessibility: ${accessibility}) {`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n histogramQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { filter: convertFilterSetToGqlFilter(filters) },\n };\n return queryBody;\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse(response.data._aggregation[args.type]);\n },\n }),\n getSubAggs: builder.query<AggregationsData, QueryForSubAggsParams>({\n query: ({\n type,\n mainField,\n termsFields = undefined,\n missingFields = undefined,\n numericAggAsText = false,\n gqlFilter = undefined,\n accessibility = Accessibility.ALL,\n }: QueryForSubAggsParams) => {\n const nestedAggFields = {\n termsFields: termsFields,\n missingFields: missingFields,\n };\n\n const query = `query getSubAggs ( ${\n gqlFilter ?? '$filter: JSON,'\n } $nestedAggFields: JSON) {\n _aggregation {\n ${type} ( ${\n gqlFilter ?? 'filter: $filter, filterSelf: false,'\n } nestedAggFields: $nestedAggFields, accessibility: ${accessibility}) {\n ${nestedHistogramQueryStrForEachField(mainField, numericAggAsText)}\n }`;\n\n return {\n query: query,\n variables: {\n ...(gqlFilter && {\n filter: convertFilterSetToGqlFilter(gqlFilter),\n }),\n nestedAggFields: nestedAggFields,\n },\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse(response.data._aggregation[args.type]);\n },\n }),\n getCounts: builder.query<number, QueryCountsParams>({\n query: ({\n type,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryCountsParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const queryLine = `query totalCounts ${\n gqlFilters ? '($filter: JSON)' : ''\n }{`;\n const typeAggsLine = `${type} ${\n gqlFilters ? '(filter: $filter, ' : '('\n } accessibility: ${accessibility}) {`;\n\n const query = `${queryLine} _aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n filter: gqlFilters,\n }),\n },\n };\n },\n transformResponse: (\n response: Record<string, any>,\n _meta,\n args,\n ): number => {\n return response.data._aggregation[args.type]._totalCount;\n },\n }),\n getFieldCountSummary: builder.query<\n Record<string, any>,\n QueryForFileCountSummaryParams\n >({\n query: ({\n type,\n field,\n filters,\n accessibility = Accessibility.ALL,\n }: QueryForFileCountSummaryParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const query = `query summary ($filter: JSON) {\n _aggregation {\n ${type} (filter: $filter, accessibility: ${accessibility}) {\n ${field} {\n histogram {\n sum,\n }\n }\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n filter: gqlFilters,\n }),\n },\n };\n },\n }),\n getFieldsForIndex: builder.query({\n query: (index: string) => {\n return {\n query: `{\n _mapping ${index}\n }`,\n };\n },\n transformResponse: (response: Record<string, any>) => {\n return response['_mapping'];\n },\n }),\n generalGQL: builder.query<Record<string, unknown>, guppyApiSliceRequest>({\n query: ({ query, variables }) => {\n return {\n query: query,\n variables: variables,\n };\n },\n }),\n }),\n});\n\n// query for aggregate data\n// convert the function below to typescript\n\nconst histogramQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n key\n count\n }\n }`;\n }\n return `\n ${splittedField} {\n ${histogramQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nconst nestedHistogramQueryStrForEachField = (\n mainField: string,\n numericAggAsText: boolean,\n) => `\n ${mainField} {\n ${numericAggAsText ? 'asTextHistogram' : 'histogram'} {\n key\n count\n missingFields {\n field\n count\n }\n termsFields {\n field\n count\n terms {\n key\n count\n }\n }\n }\n }`;\n\nexport const rawDataQueryStrForEachField = (field: string): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n if (splitFieldArray.length === 0) {\n return `\n ${splitField}\n `;\n }\n return `\n ${splitField} {\n ${rawDataQueryStrForEachField(splitFieldArray.join('.'))}\n }`;\n};\n\nexport const useGetArrayTypes = () => {\n {\n const { data, error } = useGetStatus();\n if (error) {\n return {};\n }\n return data ? data['indices'] : {};\n }\n};\n\nexport const {\n useGetRawDataAndTotalCountsQuery,\n useGetAccessibleDataQuery,\n useGetAllFieldsForTypeQuery,\n useGetAggsQuery,\n useLazyGetAggsQuery,\n useGetSubAggsQuery,\n useGetCountsQuery,\n useGetFieldCountSummaryQuery,\n useGetFieldsForIndexQuery,\n useGeneralGQLQuery,\n useLazyGeneralGQLQuery,\n} = explorerApi;\n","import { JSONArray, JSONObject } from '../../types';\nimport { FILE_DELIMITERS } from '../../constants';\nimport { flatten } from 'flat';\nimport Papa, { UnparseConfig } from 'papaparse';\n\n/**\n * Flattens a deep nested JSON object skipping\n * the first level to avoid potentially flattening\n * non-nested data.\n * @param {JSON} json\n */\nexport function flattenJson(json: JSONObject) {\n const flattenedJson: JSONArray = [];\n Object.keys(json).forEach((key) => {\n flattenedJson.push(flatten(json[key], { delimiter: '_' }));\n });\n return flattenedJson;\n}\n\n/**\n * Converts JSON based on a config.\n * @param {JSON} json\n * @param {Object} config\n */\nexport async function conversion(json: JSONArray, config: UnparseConfig) {\n return Papa.unparse(json, config);\n}\n\n/**\n * Converts JSON to a specified file format.\n * Defaults to JSON if file format is not supported.\n * @param {JSON} json\n * @param {string} format\n */\nexport async function jsonToFormat(\n json: JSONObject,\n format: keyof typeof FILE_DELIMITERS,\n) {\n if (Object.keys(FILE_DELIMITERS).includes(format)) {\n const flatJson = await flattenJson(json);\n const data = await conversion(flatJson, {\n delimiter: FILE_DELIMITERS[format] as string,\n });\n return data;\n }\n return json;\n}\n","import { DownloadFromGuppyParams, GuppyDownloadDataParams } from './types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { selectCSRFToken } from '../user';\nimport { coreStore } from '../../store';\nimport { convertFilterSetToGqlFilter } from '../filters';\nimport { jsonToFormat } from './conversion';\nimport { isJSONObject } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\nimport { useGetFieldsForIndexQuery } from './guppySlice';\n\n/**\n * Represents a configuration for making a fetch request.\n *\n * @typedef {Object} FetchConfig\n * @property {string} method - The HTTP method to use for the request.\n * @property {Object<string, string>} headers - The headers to include in the request.\n * @property {string} body - The request body.\n */\nexport type FetchConfig = {\n method: string;\n headers: Record<string, string>;\n body: string;\n};\n\n/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nconst prepareUrl = (apiUrl: string) => new URL(apiUrl + '/download');\n\n/**\n * Prepares a fetch configuration object for downloading files from Guppy.\n *\n * @param {GuppyFileDownloadRequestParams} parameters - The parameters to include in the request body.\n * @param {string} csrfToken - The CSRF token to include in the request headers.\n * @returns {FetchConfig} - The prepared fetch configuration object.\n */\nconst prepareFetchConfig = (\n parameters: GuppyDownloadDataParams,\n csrfToken?: string,\n): FetchConfig => {\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken !== undefined && { 'X-CSRF-Token': csrfToken }),\n // TODO: Add credentials\n },\n body: JSON.stringify({\n type: parameters.type,\n filter: convertFilterSetToGqlFilter(parameters.filter),\n accessibility: parameters.accessibility,\n fields: parameters?.fields,\n sort: parameters?.sort,\n }),\n };\n};\n\n/**\n * Downloads a file from Guppy using the provided parameters.\n * It will optionally convert the data to the specified format.\n *\n * @param {DownloadFromGuppyParams} parameters - The parameters to use for the download request.\n * @param onStart - The function to call when the download starts.\n * @param onDone - The function to call when the download is done.\n * @param onError - The function to call when the download fails.\n * @param onAbort - The function to call when the download is aborted.\n * @param signal - AbortSignal to use for the request.\n */\nexport const downloadFromGuppyToBlob = async ({\n parameters,\n onStart = () => null,\n onDone = (_: Blob) => null,\n onError = (_: Error) => null,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n onStart?.();\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit)\n .then(async (response: Response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n let str = '';\n if (parameters.format === 'json') {\n str = JSON.stringify(jsonData);\n } else {\n const convertedData = await jsonToFormat(jsonData, parameters.format);\n if (isJSONObject(convertedData)) {\n str = JSON.stringify(convertedData, null, 2);\n } else {\n str = convertedData;\n }\n }\n return new Blob([str], {\n type: 'application/json',\n });\n })\n .then((blob) => onDone?.(blob))\n .catch((error) => {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n onError?.(error);\n });\n};\n\nexport const downloadJSONDataFromGuppy = async ({\n parameters,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n try {\n const response = await fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n return jsonData;\n } catch (error: any) {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n throw new Error(error);\n }\n};\n\nexport const useGetIndexFields = (index: string) => {\n const { data } = useGetFieldsForIndexQuery(index);\n return data ?? [];\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, GQLFilter } from '../filters';\nimport { BaseGuppyDataRequest, GuppyDownloadDataParams } from './types';\n\nexport interface GuppyDownloadDataQueryParams extends BaseGuppyDataRequest {\n filter: GQLFilter;\n}\n\ninterface DownloadRequestStatus {\n readonly status: string;\n readonly message: string;\n}\n\n/**\n * Creates a Guppy API for fetching bulk (> 10K rows) elasticsearch data\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/download.md\n * @param endpoints - Resolver function which configures the query with\n * type, filter, accessibility, fields, and sort arguments\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const downloadRequestApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n downloadFromGuppy: builder.mutation({\n query: ({\n type,\n filter,\n accessibility,\n fields,\n sort,\n }: GuppyDownloadDataParams) => {\n const queryBody: GuppyDownloadDataQueryParams = {\n filter: convertFilterSetToGqlFilter(filter),\n ...{ type, accessibility, fields, sort },\n };\n return {\n url: `${GEN3_GUPPY_API}/download`,\n method: 'POST',\n queryBody,\n cache: 'no-cache',\n };\n },\n transformResponse: (response: DownloadRequestStatus) => {\n return response;\n },\n }),\n }),\n});\n\nexport const { useDownloadFromGuppyMutation } = downloadRequestApi;\n","import { GEN3_AI_SEARCH_API } from '../../constants';\nimport { gen3Api } from '../gen3';\n\ninterface AiSearchParams {\n readonly query: string;\n}\n\ninterface AiSearchRequestParams extends AiSearchParams {\n readonly topic?: string;\n readonly conversationId?: string;\n}\n\nexport interface AiSearchResponse extends AiSearchParams {\n readonly topic: string;\n readonly conversationId: string;\n readonly response: string;\n readonly documents: {\n readonly page_content: string;\n readonly metadata: {\n readonly row: number;\n readonly source: string;\n };\n }[];\n}\n\n/**\n * returns a response from the AI search service\n * @param searchParams - the parameters for the AI search service\n * @returns the response from the AI search service\n */\nexport const aiSearchApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n askQuestion: builder.mutation<AiSearchResponse, AiSearchRequestParams>({\n query: (searchParams: AiSearchRequestParams) => ({\n url: `${GEN3_AI_SEARCH_API}/ask`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: searchParams.query,\n ...(searchParams.topic ? { topic: searchParams.topic } : {}),\n ...(searchParams.conversationId ? { conversation_id: searchParams.conversationId } : {}),\n }),\n }),\n transformResponse: (data: Record<string, any>, _, arg) => {\n return {\n query: arg.query,\n response: data.response,\n topic: data.topic,\n conversationId: data.conversation_id,\n documents: data.documents,\n };\n },\n }),\n /**\n * returns the status of the AI search service\n * @returns {\n * status: string\n * timestamp: string\n * }\n */\n getAISearchStatus: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_status`,\n }),\n getAISearchVersion: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_version`,\n }),\n })\n});\n\n// Add more endpoints here\n\nexport const {\n useAskQuestionMutation,\n useGetAISearchStatusQuery,\n useGetAISearchVersionQuery\n} = aiSearchApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_WORKSPACE_STATUS_API } from '../../constants';\n\n\n\nexport const workspacesApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getWorkspaceOptions: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/options`,\n }),\n getWorkspacePayModels: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/allpaymodels`,\n }),\n getWorkspaceStatus: builder.query<any, void>({\n query: () => `${GEN3_WORKSPACE_STATUS_API}/status`,\n }),\n } as const),\n });\n\nexport const {\n useGetWorkspaceOptionsQuery,\n useGetWorkspacePayModelsQuery,\n useGetWorkspaceStatusQuery,\n\n} = workspacesApi;\n","export const resourcePathFromProjectID = (projectID: string): string => {\n const split = projectID.split('-');\n const program = split[0];\n const project = split.slice(1).join('-');\n const resourcePath = ['/programs', program, 'projects', project].join('/');\n return resourcePath;\n};\n\nexport const isRootUrl = (urlFragment: string): boolean => urlFragment === '_root';\n\nexport const isProgramUrl = (urlFragment: string): boolean => urlFragment !== '_root' && !urlFragment.includes('-');\n\nexport const userHasSheepdogProgramAdmin = (userAuthMapping: Record<string, any> = {}): boolean => userAuthMapping['/services/sheepdog/submission/program'] !== undefined;\n\nexport const userHasSheepdogProjectAdmin = (userAuthMapping: Record<string, any> = {}): boolean => userAuthMapping['/services/sheepdog/submission/project'] !== undefined;\n\nexport const projectCodeFromResourcePath = (resourcePath: string): string => {\n const split = resourcePath.split('/');\n return (split.length < 5 || split[1] !== 'programs' || split[3] !== 'projects') ? '' : split[4];\n};\n\nexport const listifyMethodsFromMapping = (actions: { service: string, method: string }[]): string[] => {\n const reducer = (accumulator: string[], currval: { service: string, method: string }): string[] => accumulator.concat([currval.method]);\n return actions.reduce(reducer, []);\n};\n\nexport const userHasDataUpload = (userAuthMapping: Record<string, any> = {}): boolean => {\n const actionIsFileUpload = (x: { method: string }): boolean => x.method === 'file_upload';\n const resource = userAuthMapping['/data_file'];\n return resource !== undefined && resource.some(actionIsFileUpload);\n};\n\nexport const userHasMethodForServiceOnResource = (method: string, service: string, resourcePath: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const actions = userAuthMapping[resourcePath];\n return actions !== undefined && actions.some((x: { service: string, method: string }) => ((x.service === service || x.service === '*') && (x.method === method || x.method === '*')));\n};\n\nexport const userHasMethodForServiceOnProject = (method: string, service: string, projectID: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const resourcePath = resourcePathFromProjectID(projectID);\n return userHasMethodForServiceOnResource(method, service, resourcePath, userAuthMapping);\n};\n\nexport const userHasMethodOnAnyProject = (method: string, userAuthMapping: Record<string, any> = {}): boolean => {\n const actionHasMethod = (x: { method: string }): boolean => (x.method === method);\n const actionArrays = Object.values(userAuthMapping);\n const hasMethod = actionArrays.some((x: { method: string }[]) => x.some(actionHasMethod));\n return hasMethod;\n};\n\nexport const userHasCreateOrUpdateOnAnyProject = (userAuthMapping: Record<string, any> = {}): boolean => (userHasMethodOnAnyProject('create', userAuthMapping)\n || userHasMethodOnAnyProject('update', userAuthMapping));\n","type JsonPathMapping = { [key: string]: string };\n\nexport interface JSONObject {\n [k: string]: JSONValue;\n}\n\nexport type JSONValue = string | number | boolean | JSONValue[] | JSONObject;\n\nimport { JSONPath } from 'jsonpath-plus';\n\nexport const extractValuesFromObject = (jsonPathMappings: JsonPathMapping, obj: JSONObject): JSONObject =>{\n const result: { [key: string]: any } = {};\n\n const extractObjectValue = (jsonPath: string, obj: JSONObject): JSONValue | undefined => {\n const extractedValues = JSONPath({ path: jsonPath, json: obj });\n return extractedValues.length > 0 ? extractedValues[0] : undefined;\n };\n\n for (const key in jsonPathMappings) {\n if (key in Object.keys(jsonPathMappings)) {\n // Extract value from object and store it in the result.\n result[key] = extractObjectValue(jsonPathMappings[key], obj);\n }\n }\n\n return result;\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_SUBMISSION_API } from '../../constants';\nimport {\n Project,\n ProjectResponse,\n ProjectsListRequestParams,\n SubmissionInfo,\n SubmissionGraphqlParams,\n SubmissionGraphqlResponse,\n} from './types';\nimport { JSONObject } from '../../types';\nimport { extractValuesFromObject } from '../../utils/extractvalues';\nimport type { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\ninterface ProjectFetchQueryResponse {\n data: {\n data: {\n project: Array<Project>;\n };\n };\n}\n\n/**\n * Project details from the project query\n */\ninterface ProjectInfoFromProjectDetails {\n name: string;\n id: string;\n code: string;\n}\n\ninterface ProjectDetailsResponse\n extends Record<\n string,\n string | number | Array<ProjectInfoFromProjectDetails>\n > {\n project: Array<ProjectInfoFromProjectDetails>;\n}\n\ninterface ProjectDetailsFetchQueryResponse {\n data: {\n data: ProjectDetailsResponse;\n };\n}\n\n/**\n * Project details results a list of project details\n * and the project information\n */\ninterface ProjectDetailsResults {\n [key: string]: string | number | ProjectInfoFromProjectDetails;\n project: ProjectInfoFromProjectDetails;\n}\n\nexport interface ProjectDetailsQueryResponse {\n details: ProjectDetailsResults[];\n hits: number;\n}\n\ninterface SubmissionQueryResponse {\n transactionList: SubmissionInfo[];\n}\n\nconst SubmissionGraphqlQuery = `query transactionList {\n transactionList: transaction_log(last: 20) {\n id\n submitter\n project_id\n created_datetime\n documents {\n doc_size\n doc\n id\n }\n state\n }\n}`;\n\n/**\n * Defines submissionApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n * @param endpoints - Defines endpoints used in submission page\n * @param getProjects - Queries the list of projects\n * @param getProjectsDetails - Queries the list of projects and their details\n * @param getSubmissionGraphQL - Queries the submission graphql with a query and variables\n * @returns: A submission API for fetching project details\n */\nexport const submissionApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getProjects: builder.query<ProjectResponse, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n projects: response.data.project,\n };\n },\n }),\n getSubmissions: builder.query<SubmissionQueryResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: SubmissionGraphqlQuery,\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n transactionList: response.data.transactionList,\n };\n },\n }),\n getProjectsDetails: builder.query<\n ProjectDetailsQueryResponse,\n ProjectsListRequestParams\n >({\n async queryFn(args, _queryApi, _extraOptions, fetchWithBQ) {\n // get the list of projects\n const projectsResponse = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(args.projectQuery),\n });\n if (projectsResponse.error)\n return { error: projectsResponse.error as FetchBaseQueryError };\n\n const projects = (projectsResponse as ProjectFetchQueryResponse)?.data\n .data.project;\n const projectIds = projects.map((p) => p.project_id);\n\n // given the list of projects, get all of them by executing the projectDetailsQuery for each project\n const projectDetails = await Promise.all(\n projectIds.map(async (projectId) => {\n const result = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n ...args.projectDetailsQuery,\n variables: {\n name: projectId,\n },\n }),\n });\n const { project, ...values } = (\n result as ProjectDetailsFetchQueryResponse\n ).data.data;\n\n return result.data\n ? {\n data: args.mapping\n ? ({\n ...extractValuesFromObject(\n args.mapping,\n values as JSONObject,\n ),\n project: project[0],\n } as ProjectDetailsResults)\n : ({\n ...values,\n project: project[0],\n } as ProjectDetailsResults),\n }\n : { error: result.error };\n }),\n );\n\n // if any of the projectDetails has an error, return the error\n if (projectDetails.some((detail) => 'error' in detail)) {\n return {\n error: projectDetails.find(\n (detail) => 'error' in detail,\n ) as FetchBaseQueryError,\n };\n } else\n return {\n data: {\n details: projectDetails.reduce((acc, detail) => {\n acc.push(\n detail.data ?? {\n project: {\n name: '',\n id: '',\n code: '',\n },\n },\n );\n return acc;\n }, [] as ProjectDetailsResults[]),\n hits: projectIds.length, // TODO this needs to be changed to show the total number of projects\n },\n };\n },\n }),\n getSubmissionGraphQL: builder.query<\n SubmissionGraphqlResponse,\n SubmissionGraphqlParams\n >({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: graphQLParams.query,\n ...(graphQLParams.variables\n ? { variables: graphQLParams.variables }\n : {}),\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n if (params.mapping) {\n return {\n data: extractValuesFromObject(params.mapping, response.data),\n };\n }\n return response.data;\n },\n }),\n getDictionary: builder.query<SubmissionGraphqlResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/_dictionary/_all/`,\n }),\n }),\n }),\n});\n\nexport const {\n useGetProjectsQuery,\n useGetSubmissionGraphQLQuery,\n useGetProjectsDetailsQuery,\n useLazyGetProjectsQuery,\n useLazyGetSubmissionGraphQLQuery,\n useGetSubmissionsQuery,\n useGetDictionaryQuery,\n} = submissionApi;\n"],"names":["GEN3_COMMONS_NAME","process","env","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_AI_SEARCH_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_STATUS_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","GEN3_WTS_API","NEXT_PUBLIC_GEN3_WTS_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","Accessibility","FILE_DELIMITERS","tsv","csv","buildFetchError","res","request","url","status","statusText","text","fetchFence","endpoint","headers","body","method","isJSON","fetch","JSON","stringify","ok","data","json","userAuthApi","createApi","reducerPath","refetchOnMountOrArgChange","refetchOnReconnect","baseQuery","getState","results","csrfToken","selectCSRFToken","accessToken","undefined","NODE_ENV","getCookie","Accept","Authorization","credentials","e","endpoints","builder","fetchUserDetails","query","transformResponse","response","loginStatus","username","getCSRF","csrf","EMPTY_USER","useFetchUserDetailsQuery","useLazyFetchUserDetailsQuery","useGetCSRFQuery","userAuthApiMiddleware","middleware","userAuthApiReducerPath","userAuthApiReducer","reducer","selectUserDetailsFromState","select","selectUserDetails","createSelector","userDetails","selectUserAuthStatus","userLoginState","QueryStatus","pending","uninitialized","selectCSRFTokenData","passThroughTheState","state","gen3Services","selectHeadersWithCSRFToken","gen3Api","fetchBaseQuery","baseUrl","prepareHeaders","set","gen3ServicesReducer","gen3ServicesReducerMiddleware","loginProvidersApi","injectEndpoints","getLoginProviders","useGetLoginProvidersQuery","logoutFence","redirect","credentialsWithTags","enhanceEndpoints","addTagTypes","credentialsApi","getCredentials","providesTags","addNewCredential","mutation","scope","invalidatesTags","removeCredential","id","authorizeFromCredentials","params","api_key","key_id","useGetCredentialsQuery","useAddNewCredentialMutation","useRemoveCredentialMutation","useAuthorizeFromCredentialsMutation","jwtApi","getJWKKeys","useGetJWKKeysQuery","useCoreSelector","useSelector","withTypes","useCoreDispatch","useDispatch","usePrevious","value","ref","useRef","useEffect","current","createUseCoreDataHook","fetchDataActionCreator","dataSelector","coreDispatch","error","action","prevParams","isEqual","isUninitialized","isFetching","isSuccess","isError","fetchUserState","createAsyncThunk","_","meta","isAuthenticated","isPending","initialState","slice","createSlice","name","reducers","resetUserState","extraReducers","addCase","fulfilled","payload","rejected","userReducer","actions","selectUserData","user","selectUser","selectUserLoginStatus","useUser","useIsUserLoggedIn","useUserAuth","renew","externalLoginApi","getExternalLogins","isExternalConnected","idp","useGetExternalLoginsQuery","useLazyGetExternalLoginsQuery","useLazyIsExternalConnectedQuery","useIsExternalConnectedQuery","isHistogramRangeData","key","Array","isArray","length","every","item","isJSONObject","isJSONValue","isJSONValueArray","isValidObject","input","isHistogramData","isHistogramDataArray","histogram","isHistogramDataCollection","obj","isGuppyAggregationData","isHistogramDataAnEnum","count","isHistogramDataAArray","isHistogramDataArrayAnEnum","isHistogramDataArrayARange","isFetchBaseQueryError","isErrorWithMessage","message","isFetchParseError","REGISTRY","registerGen3App","gen3App","lookupGen3App","gen3Apps","addGen3AppMetadata","requiredEntityTypes","gen3AppReducer","selectGen3AppMetadataByName","appName","selectGen3AppByName","setDRSHostnames","_state","drsHostnamesReducer","Modals","currentModal","showModal","modal","hideModal","modalReducer","selectCurrentModal","modals","selectCurrentMessage","initialCohortState","cohort","filters","modified_datetime","Date","toISOString","cohortSlice","updateCohortFilter","index","field","filter","mode","root","removeCohortFilter","_a","updated","clearCohortFilters","selectCohortFilters","cohorts","selectCurrentCohortId","selectCurrentCohort","selectCurrentCohortName","selectIndexedFilterByName","EmptyFilterSet","selectIndexFilters","cohortReducer","guppyApi","api","Error","guppyAPISliceMiddleware","guppyApiSliceReducerPath","guppyApiReducer","rootReducer","combineReducers","drsHostnames","coreStore","configureStore","getDefaultMiddleware","concat","setupListeners","dispatch","CoreProvider","children","Provider","store","authzApi","getAuthzMappings","useGetAuthzMappingsQuery","selectAuthzMapping","selectAuthzMappingData","authzMapping","mappings","HasEnoughData","keys","limit","numEmptyKeys","k","Object","hasOwn","trim","metadataApi","getAggMDS","offset","pageSize","_meta","map","x","objValues","values","firstValue","at","studyField","hits","pagination","getIndexAggMDS","dataFromIndexes","indexKeys","reduce","acc","push","objIds","filterEmpty","gen3MDSGUID","getMDS","guidType","guid","getTags","getData","getCrosswalkData","queryFn","arg","_queryApi","_extraOptions","fetchWithBQ","queryMultiple","result","queue","Queue","concurrency","ids","callback","toData","toPaths","path","JSONPath","dataPath","resultType","from","to","Promise","resolve","reject","start","err","useGetAggMDSQuery","useGetMDSQuery","useGetTagsQuery","useGetDataQuery","useGetCrosswalkDataQuery","useLazyGetCrosswalkDataQuery","useGetIndexAggMDSQuery","GEN3_APP_NAMESPACE","getGen3AppId","version","nameVersion","uuidv5","createGen3App","App","Gen3AppWrapper","props","document","title","createAppStore","options","devTools","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","context","React","createContext","useAppSelector","createSelectorHook","useAppDispatch","createDispatchHook","useAppStore","createStoreHook","AppStore","AppContext","createGen3AppWithOwnStore","CookiesProvider","createAppApiForRTKQ","appContext","appCreateApi","buildCreateApi","coreModule","reactHooksModule","hooks","useStore","appRTKQApi","appMiddleware","appStore","appApi","graphQLWithTags","graphQLAPI","graphQL","graphQLParams","useGraphQLQuery","isOperationWithField","operation","extractFilterValue","op","valueExtractorHandler","ValueExtractorHandler","handleOperation","extractEnumFilterValue","enumValueExtractorHandler","EnumValueExtractorHandler","assertNever","handler","operator","handleEquals","handleNotEquals","handleLessThan","handleLessThanOrEquals","handleGreaterThan","handleGreaterThanOrEquals","handleIntersection","handleUnion","handleNestedFilter","handleIncludes","handleExcludeIfAny","handleExcludes","isFilterEmpty","fs","ToGqlHandler","operand","in","operands","exclude","excludeifany","and","convertFilterToGqlFilter","or","child","nested","convertFilterSetToGqlFilter","toplevelOp","fsKeys","_arg","FieldNameOverrides","COMMON_PREPOSITIONS","capitalize","s","toUpperCase","trimFirstFieldNameToTitle","fieldName","source","indexOf","fieldNameToTitle","sections","split","flat","word","includes","join","extractIndexFromFullFieldName","prependIndexToFieldName","extractFieldNameFromFullFieldName","extractIndexAndFieldNameFromFullFieldName","rest","statusEndpoint","processHistogramResponse","pathData","element","pointer","replace","fetchJson","useGetStatus","fetcher","useSWR","explorerApi","getAllFieldsForType","type","getAccessibleData","fields","accessType","fieldParts","getRawDataAndTotalCounts","sort","size","accessibility","ALL","format","gqlFilter","queryLine","dataParams","dataTypeLine","typeAggsLine","processedFields","rawDataQueryStrForEachField","variables","getAggs","queryStart","histogramQueryStrForEachField","queryBody","args","_aggregation","getSubAggs","mainField","termsFields","missingFields","numericAggAsText","nestedAggFields","nestedHistogramQueryStrForEachField","getCounts","gqlFilters","_totalCount","getFieldCountSummary","getFieldsForIndex","generalGQL","splittedFieldArray","splittedField","shift","splitFieldArray","splitField","useGetArrayTypes","useGetRawDataAndTotalCountsQuery","useGetAccessibleDataQuery","useGetAllFieldsForTypeQuery","useGetAggsQuery","useLazyGetAggsQuery","useGetSubAggsQuery","useGetCountsQuery","useGetFieldCountSummaryQuery","useGetFieldsForIndexQuery","useGeneralGQLQuery","useLazyGeneralGQLQuery","flattenJson","flattenedJson","forEach","flatten","delimiter","conversion","config","Papa","unparse","jsonToFormat","flatJson","prepareUrl","apiUrl","URL","prepareFetchConfig","parameters","downloadFromGuppyToBlob","onStart","onDone","onError","onAbort","signal","fetchConfig","toString","then","jsonData","rootPath","str","convertedData","Blob","blob","catch","downloadJSONDataFromGuppy","useGetIndexFields","downloadRequestApi","downloadFromGuppy","cache","useDownloadFromGuppyMutation","aiSearchApi","askQuestion","searchParams","topic","conversationId","conversation_id","documents","getAISearchStatus","getAISearchVersion","useAskQuestionMutation","useGetAISearchStatusQuery","useGetAISearchVersionQuery","workspacesApi","getWorkspaceOptions","getWorkspacePayModels","getWorkspaceStatus","useGetWorkspaceOptionsQuery","useGetWorkspacePayModelsQuery","useGetWorkspaceStatusQuery","resourcePathFromProjectID","projectID","program","project","resourcePath","isRootUrl","urlFragment","isProgramUrl","userHasSheepdogProgramAdmin","userAuthMapping","userHasSheepdogProjectAdmin","projectCodeFromResourcePath","listifyMethodsFromMapping","accumulator","currval","userHasDataUpload","actionIsFileUpload","resource","some","userHasMethodForServiceOnResource","service","userHasMethodForServiceOnProject","userHasMethodOnAnyProject","actionHasMethod","actionArrays","hasMethod","userHasCreateOrUpdateOnAnyProject","extractValuesFromObject","jsonPathMappings","extractObjectValue","jsonPath","extractedValues","SubmissionGraphqlQuery","submissionApi","getProjects","projects","getSubmissions","transactionList","getProjectsDetails","projectsResponse","projectQuery","projectIds","p","project_id","projectDetails","all","projectId","projectDetailsQuery","mapping","detail","find","details","code","getSubmissionGraphQL","getDictionary","useGetProjectsQuery","useGetSubmissionGraphQLQuery","useGetProjectsDetailsQuery","useLazyGetProjectsQuery","useLazyGetSubmissionGraphQLQuery","useGetSubmissionsQuery","useGetDictionaryQuery"],"mappings":"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"}