1 | type Cloudflare = { |
2 | token: string; |
3 | email: string; |
4 | key: string; |
5 | }; |
6 | |
7 | * Get Top Attack Pairs (origin and target locations) By Layer 7 Attacks |
8 | * Get the top attacks from origin to target location. Values are a percentage out of the total layer 7 attacks (with billing country). The attack magnitude can be defined by the number of mitigated requests or by the number of zones affected. You can optionally limit the number of attacks per origin/target location (useful if all the top attacks are from or to the same location). |
9 | */ |
10 | export async function main( |
11 | auth: Cloudflare, |
12 | limit: string | undefined, |
13 | name: string | undefined, |
14 | dateRange: string | undefined, |
15 | dateStart: string | undefined, |
16 | dateEnd: string | undefined, |
17 | asn: string | undefined, |
18 | location: string | undefined, |
19 | limitDirection: "ORIGIN" | "TARGET" | undefined, |
20 | limitPerLocation: string | undefined, |
21 | magnitude: "AFFECTED_ZONES" | "MITIGATED_REQUESTS" | undefined, |
22 | format: "JSON" | "CSV" | undefined |
23 | ) { |
24 | const url = new URL( |
25 | `https://api.cloudflare.com/client/v4/radar/attacks/layer7/top/attacks` |
26 | ); |
27 | for (const [k, v] of [ |
28 | ["limit", limit], |
29 | ["name", name], |
30 | ["dateRange", dateRange], |
31 | ["dateStart", dateStart], |
32 | ["dateEnd", dateEnd], |
33 | ["asn", asn], |
34 | ["location", location], |
35 | ["limitDirection", limitDirection], |
36 | ["limitPerLocation", limitPerLocation], |
37 | ["magnitude", magnitude], |
38 | ["format", format], |
39 | ]) { |
40 | if (v !== undefined && v !== "") { |
41 | url.searchParams.append(k, v); |
42 | } |
43 | } |
44 | const response = await fetch(url, { |
45 | method: "GET", |
46 | headers: { |
47 | "X-AUTH-EMAIL": auth.email, |
48 | "X-AUTH-KEY": auth.key, |
49 | Authorization: "Bearer " + auth.token, |
50 | }, |
51 | body: undefined, |
52 | }); |
53 | if (!response.ok) { |
54 | const text = await response.text(); |
55 | throw new Error(`${response.status} ${text}`); |
56 | } |
57 | return await response.json(); |
58 | } |
59 |
|