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 | 80x 80x 80x 240x 85x 47x 89x 80x 80x 80x 68x 68x 12x | import { scripts } from './scripts'
import { TypedEnv } from './types'
import { getIdentificationPageUrls, getProtectedApis, getRoutePrefix } from './env'
import { Script } from '../shared/scripts'
import { findMatchingRoute, parseRoutes } from '@fingerprintjs/url-matcher'
import { ProtectedApiHttpMethod } from '../shared/types'
export type UrlType =
| {
type: 'identification'
}
| {
type: 'protection'
method: ProtectedApiHttpMethod
}
| {
type: 'script'
script: Script
}
| {
type: 'browserCache'
}
export function matchUrl(url: URL, method: string, env: TypedEnv): UrlType | undefined {
console.debug('Matching url', url.toString())
const routePrefix = getRoutePrefix(env)
const routes = parseRoutes<UrlType>(
[
...scripts.map((script) => {
return {
url: new URL(`/${routePrefix}/${script}`, url.origin).toString(),
metadata: {
type: 'script' as const,
script,
},
}
}),
{
url: new URL(`/${routePrefix}/*`, url.origin).toString(),
metadata: {
type: 'browserCache' as const,
},
},
...getProtectedApis(env)
.filter((protectedApi) => protectedApi.method === method)
.map((protectedApi) => {
return {
url: protectedApi.url,
metadata: {
type: 'protection' as const,
method: protectedApi.method,
},
}
}),
...getIdentificationPageUrls(env).map((identificationPageUrl) => {
return {
url: identificationPageUrl,
metadata: {
type: 'identification' as const,
},
}
}),
],
{ sortBySpecificity: true }
)
console.debug('Created routes', routes)
const matchedRoute = findMatchingRoute(url, routes)
if (matchedRoute) {
console.debug('Matched route', matchedRoute)
return matchedRoute.metadata
}
return undefined
}
|