All files / src types.ts

100% Statements 7/7
100% Branches 4/4
100% Functions 2/2
100% Lines 7/7

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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103    9x 9x 9x 9x     9x 9x 9x                                                                                                                                                                                        
import { components, operations, paths } from './generatedApiTypes'
 
export enum Region {
  EU = 'EU',
  AP = 'AP',
  Global = 'Global',
}
 
export enum AuthenticationMode {
  AuthHeader = 'AuthHeader',
  QueryParameter = 'QueryParameter',
}
 
/**
 * Options for FingerprintJS server API client
 */
export interface Options {
  /**
   * Secret API key
   */
  apiKey: string
  /**
   * Region of the FingerprintJS service server
   */
  region?: Region
  /**
   * Authentication mode
   * Optional, default value is AuthHeader
   */
  authenticationMode?: AuthenticationMode
 
  /**
   * Optional fetch implementation
   * */
  fetch?: typeof fetch
}
 
/**
 * More info: https://dev.fingerprintjs.com/docs/server-api#query-parameters
 */
export type VisitorHistoryFilter = paths['/visitors/{visitor_id}']['get']['parameters']['query']
 
export type ErrorPlainResponse = components['schemas']['ErrorPlainResponse']
export type ErrorResponse = components['schemas']['ErrorResponse']
 
/**
 * More info: https://dev.fingerprintjs.com/docs/server-api#response
 */
export type VisitorsResponse = paths['/visitors/{visitor_id}']['get']['responses']['200']['content']['application/json']
 
export type EventResponse = paths['/events/{request_id}']['get']['responses']['200']['content']['application/json']
 
export type RelatedVisitorsResponse =
  paths['/related-visitors']['get']['responses']['200']['content']['application/json']
export type RelatedVisitorsFilter = paths['/related-visitors']['get']['parameters']['query']
 
/**
 * More info: https://dev.fingerprintjs.com/docs/webhooks#identification-webhook-object-format
 */
export type Webhook = components['schemas']['Webhook']
 
export type EventsUpdateRequest = components['schemas']['EventsUpdateRequest']
 
// Extract just the `path` parameters as a tuple of strings
type ExtractPathParamStrings<Path> = Path extends { parameters: { path: infer P } }
  ? P extends Record<string, any>
    ? [P[keyof P]] // We extract the path parameter values as a tuple of strings
    : []
  : []
 
// Utility type to extract query parameters from an operation and differentiate required/optional
export type ExtractQueryParams<Path> = Path extends { parameters: { query?: infer Q } }
  ? undefined extends Q // Check if Q can be undefined (meaning it's optional)
    ? Q | undefined // If so, it's optional
    : Q // Otherwise, it's required
  : never // If no query parameters, return never
 
// Utility type to extract request body from an operation (for POST, PUT, etc.)
type ExtractRequestBody<Path> = Path extends { requestBody: { content: { 'application/json': infer B } } } ? B : never
 
// Utility type to extract the response type for 200 status code
type ExtractResponse<Path> = Path extends { responses: { 200: { content: { 'application/json': infer R } } } }
  ? R
  : void
 
// Extracts args to given API method
type ApiMethodArgs<Path extends keyof operations> = [
  // If method has body, extract it as first parameter
  ...(ExtractRequestBody<operations[Path]> extends never ? [] : [body: ExtractRequestBody<operations[Path]>]),
  // Next are path params, e.g. for path "/events/{request_id}" it will be one string parameter,
  ...ExtractPathParamStrings<operations[Path]>,
  // Last parameter will be the query params, if any
  ...(ExtractQueryParams<operations[Path]> extends never ? [] : [params: ExtractQueryParams<operations[Path]>]),
]
 
type ApiMethod<Path extends keyof operations> = (
  ...args: ApiMethodArgs<Path>
) => Promise<ExtractResponse<operations[Path]>>
 
export type FingerprintApi = {
  [Path in keyof operations]: ApiMethod<Path>
}