All files / src urlUtils.ts

94.28% Statements 33/35
71.42% Branches 5/7
100% Functions 7/7
94.28% Lines 33/35

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 989x 9x   9x 9x 9x               51x           9x 19x       19x 1x     19x           9x 11x       11x       11x 11x   11x           9x           21x         21x       21x 20x   20x       50x   50x       32x 31x 31x       51x   39x   2x   9x   1x      
import { Region, VisitorHistoryFilter } from './types'
import { version } from '../package.json'
 
const euRegionUrl = 'https://eu.api.fpjs.io/'
const apRegionUrl = 'https://ap.api.fpjs.io/'
const globalRegionUrl = 'https://api.fpjs.io/'
 
type QueryStringParameters = VisitorHistoryFilter & {
  api_key?: string
  ii: string
}
 
function getIntegrationInfo() {
  return `fingerprint-pro-server-node-sdk/${version}`
}
 
/**
 * @private
 * */
export function getEventUrl(requestId: string, region: Region, apiKey?: string) {
  const params: QueryStringParameters = {
    ii: getIntegrationInfo(),
  }
 
  if (apiKey) {
    params.api_key = apiKey
  }
 
  return `${getServerApiUrl(region)}events/${requestId}?${serializeQueryStringParams(params)}`
}
 
/**
 * @private
 * */
export function getDeleteVisitorDataUrl(region: Region, visitorId: string, apiKey?: string): string {
  const queryStringParameters: QueryStringParameters = {
    ii: getIntegrationInfo(),
  }
 
  Iif (apiKey) {
    queryStringParameters.api_key = apiKey
  }
 
  const serverApiPath = getVisitorsPath(region, visitorId)
  const queryString = serializeQueryStringParams(queryStringParameters)
 
  return `${serverApiPath}?${queryString}`
}
 
/**
 * @private
 * */
export function getVisitorsUrl(
  region: Region,
  visitorId: string,
  filter?: VisitorHistoryFilter,
  apiKey?: string
): string {
  const queryStringParameters: QueryStringParameters = {
    ...filter,
    ii: getIntegrationInfo(),
  }
 
  Iif (apiKey) {
    queryStringParameters.api_key = apiKey
  }
 
  const serverApiPath = getVisitorsPath(region, visitorId)
  const queryString = serializeQueryStringParams(queryStringParameters)
 
  return `${serverApiPath}?${queryString}`
}
 
function serializeQueryStringParams(params: QueryStringParameters): string {
  const urlSearchParams = new URLSearchParams(Object.entries(params) as Array<[string, string]>)
 
  return urlSearchParams.toString()
}
 
function getVisitorsPath(region: Region, visitorId: string): string {
  const serverApiUrl = getServerApiUrl(region)
  const serverApiPath = `${serverApiUrl}visitors/${visitorId}`
  return serverApiPath
}
 
function getServerApiUrl(region: Region): string {
  switch (region) {
    case Region.EU:
      return euRegionUrl
    case Region.AP:
      return apRegionUrl
    case Region.Global:
      return globalRegionUrl
    default:
      throw new Error('Unsupported region')
  }
}