All files / src fpjs-context.ts

80% Statements 4/5
100% Branches 0/0
0% Functions 0/1
80% Lines 4/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 553x                                                                       3x       3x                         3x  
import { createContext } from 'react'
import { VisitorData, GetOptions } from '@fingerprintjs/fingerprintjs-pro-spa'
 
export interface QueryResult<TData, TError = Error> {
  /**
   * Stores current query data
   * */
  data?: TData
  /**
   * Is true while query is loading
   * */
  isLoading?: boolean
  /**
   * Stores current query error
   * */
  error?: TError
}
 
export interface VisitorQueryResult<TExtended extends boolean> extends QueryResult<VisitorData<TExtended>> {
  data?: VisitorData<TExtended>
}
 
export interface GetDataOptions<TExtended extends boolean> extends GetOptions<TExtended> {
  /**
   * When set to true, the visitor data will always be fetched from our API.
   * */
  ignoreCache?: boolean
}
 
export interface VisitorQueryContext<TExtended extends boolean> extends VisitorQueryResult<TExtended> {
  /**
   * Performs identification request to server and returns visitors data.
   * */
  getData: (getDataOptions?: GetDataOptions<TExtended>) => Promise<VisitorData<TExtended>>
}
 
const stub = (): never => {
  throw new Error('You forgot to wrap your component in <FpjsProvider>.')
}
 
const initialContext = {
  getVisitorData: stub,
  clearCache: stub,
}
 
/**
 * The FingerprintJS Context
 */
export interface FpjsContextInterface<TExtended extends boolean> {
  getVisitorData: (config?: GetOptions<TExtended>, ignoreCache?: boolean) => Promise<VisitorData<TExtended>>
  clearCache: () => void
}
 
export const FpjsContext = createContext<FpjsContextInterface<any>>(initialContext)