Google Ads Scraper Pro beta
Pricing
Pay per usage
Go to Store
Google Ads Scraper Pro beta
Google Ads Scraper beta
5.0 (3)
Pricing
Pay per usage
3
Total users
1
Monthly users
1
Runs succeeded
>99%
Last modified
3 days ago
.actor/Dockerfile
1# Specify the base Docker image. You can read more about
2# the available images at https://docs.apify.com/sdk/js/docs/guides/docker-images
3# You can also use any other image from Docker Hub.
4FROM apify/actor-node:20
5
6# Check preinstalled packages
7RUN npm ls crawlee apify puppeteer playwright
8
9# Copy just package.json and package-lock.json
10# to speed up the build using Docker layer cache.
11COPY package*.json ./
12
13# Install NPM packages, skip optional and development dependencies to
14# keep the image small. Avoid logging too much and print the dependency
15# tree for debugging
16RUN npm --quiet set progress=false \
17 && npm install --omit=dev --omit=optional \
18 && echo "Installed NPM packages:" \
19 && (npm list --omit=dev --all || true) \
20 && echo "Node.js version:" \
21 && node --version \
22 && echo "NPM version:" \
23 && npm --version \
24 && rm -r ~/.npm
25
26# Next, copy the remaining files and directories with the source code.
27# Since we do this after NPM install, quick build will be really fast
28# for most source file changes.
29COPY . ./
30
31
32# Run the image.
33CMD npm start --silent
.actor/actor.json
1{
2 "actorSpecification": 1,
3 "name": "my-actor-2",
4 "title": "Google Ads Transparency Scraper",
5 "description": "Crawlee and Cheerio project in javascript.",
6 "version": "0.0",
7 "meta": {
8 "templateId": "js-crawlee-cheerio"
9 },
10 "input": "./input_schema.json",
11 "dockerfile": "./Dockerfile",
12 "readme": "./README.md",
13 "storages": {
14 "dataset": {
15 "actorSpecification": 1,
16 "title": "Results",
17 "views": {
18 "results": {
19 "title": "results to scan",
20 "transformation": {
21 "fields": ["advertiserId", "creativeId", "format", "previewUrls", "creativeRegions", "adTransparencyUrl", "regionStats"]
22 },
23 "display": {
24 "component": "table",
25 "properties": {
26 "advertiserId": {
27 "label": "advertiser Id",
28 "format": "text"
29 },
30 "creativeId": {
31 "label": "creative Id",
32 "format": "text"
33 },
34 "format": {
35 "label": "format",
36 "format": "text"
37 },
38 "previewUrls": {
39 "label": "previewUrls",
40 "format": "text"
41 },
42 "creativeRegions": {
43 "label": "creative Regions",
44 "format": "text"
45 },
46 "adTransparencyUrl": {
47 "label": "adTransparency Url",
48 "format": "link"
49 },
50 "regionStats": {
51 "label": "region Stats",
52 "format": "text"
53 }
54 }
55 }
56 }
57 }
58 }
59}
60}
.actor/input_schema.json
1{
2 "title": "Ad Search Configuration",
3 "type": "object",
4 "schemaVersion": 1,
5 "properties": {
6 "Use_URL_Filter": {
7 "title": "Use parameter URL as a filter",
8 "type": "boolean",
9 "description": "Debug messages will be included in the log.",
10 "default": true,
11 "groupCaption": "Options",
12 "groupDescription": "Various options for this Actor"
13 },
14 "isPolitical": {
15 "title": "isPolitical",
16 "type": "boolean",
17 "description": "Debug messages will be included in the log.",
18 "default": true,
19 "groupCaption": "Options",
20 "groupDescription": "Various options for this Actor"
21 },
22 "keyword_domain_advertiserid": {
23 "title": "Search Keywords",
24 "type": "array",
25 "description": "Enter one or more keywords to search for relevant ads.",
26 "editor": "stringList",
27 "default":
28 [
29 "AR05789404224659914753",
30 "https://adstransparency.google.com/advertiser/AR05789404224659914753?region=US&topic=political&preset-date=Last+7+days&format=VIDEO&platform=YOUTUBE"
31 ]
32 },
33 "limitResults": {
34 "title": "limit Results",
35 "type": "integer",
36 "description": "Specify the maximum number of unique domains to retrieve.",
37 "editor": "number",
38 "default": 3
39
40 },
41 "maxDomains": {
42 "title": "Maximum Domains",
43 "type": "integer",
44 "description": "Specify the maximum number of unique domains to retrieve.",
45 "default": 0,
46 "editor": "number"
47 },
48 "maxAdvertisers": {
49 "title": "Maximum Advertisers",
50 "type": "integer",
51 "description": "Set the maximum number of advertisers to fetch results from.",
52 "default": 10,
53 "editor": "number"
54 },
55 "platform": {
56 "title": "",
57 "type": "string",
58 "description": "",
59 "editor": "select",
60 "default": "0",
61 "enum": ["0", "2", "1", "4", "3", "5"],
62 "enumTitles": ["All platforms", "Google Maps", "Google Play", "Google Shopping", "Google Search", "YouTube"]
63 },
64 "format": {
65 "title": "Ad Format",
66 "type": "string",
67 "description": "Select the preferred ad format to filter results.",
68 "editor": "select",
69 "default": "0",
70 "enum": ["0", "1", "2", "3"],
71 "enumTitles": ["All formats", "Text", "Image", "Video"]
72 },
73 "presetDate": {
74 "title": "Date Range",
75 "type": "string",
76 "description": "Select a predefined date range for filtering ads.",
77 "editor": "select",
78 "default": "0",
79 "enum": ["0", "1", "7", "30", "-1"],
80 "enumTitles": ["Today", "Yesterday", "Last 7 days", "Last 30 days", "Any time"]
81 },
82 "startDate": {
83 "title": "Start Date",
84 "type": "string",
85 "description": "Specify a custom start date for filtering ads (YYYYMMDD).",
86 "editor": "datepicker",
87 "default": "2024-01-01"
88
89 },
90 "endDate": {
91 "title": "End Date",
92 "type": "string",
93 "description": "Specify a custom end date for filtering ads (YYYYMMDD).",
94 "editor": "datepicker"
95 },
96 "region": {
97 "title": "Target Region",
98 "type": "string",
99 "description": "Select a specific country/region to filter ads.",
100 "editor": "select",
101 "enum": [
102 "Albania",
103 "Algeria",
104 "American Samoa",
105 "Andorra",
106 "Angola",
107 "Antarctica",
108 "Antigua and Barbuda",
109 "Argentina",
110 "Armenia",
111 "Australia",
112 "Austria",
113 "Azerbaijan",
114 "Bahrain",
115 "Bangladesh",
116 "Barbados",
117 "Belarus",
118 "Belgium",
119 "Belize",
120 "Benin",
121 "Bhutan",
122 "Bolivia",
123 "Bosnia and Herzegovina",
124 "Botswana",
125 "Brazil",
126 "Brunei",
127 "Bulgaria",
128 "Burkina Faso",
129 "Burundi",
130 "Cambodia",
131 "Cameroon",
132 "Canada",
133 "Cabo Verde",
134 "Caribbean Netherlands",
135 "Central African Republic",
136 "Chad",
137 "Chile",
138 "China",
139 "Christmas Island",
140 "Cocos (Keeling) Islands",
141 "Colombia",
142 "Comoros",
143 "Cook Islands",
144 "Costa Rica",
145 "Cote d'Ivoire",
146 "Croatia",
147 "Curacao",
148 "Cyprus",
149 "Czechia",
150 "Democratic Republic of the Congo",
151 "Denmark",
152 "Djibouti",
153 "Dominica",
154 "Dominican Republic",
155 "Ecuador",
156 "Egypt",
157 "El Salvador",
158 "Equatorial Guinea",
159 "Eritrea",
160 "Estonia",
161 "Eswatini",
162 "Ethiopia",
163 "Micronesia",
164 "Fiji",
165 "Finland",
166 "France",
167 "French Polynesia",
168 "French Southern and Antarctic Lands",
169 "Gabon",
170 "Georgia",
171 "Germany",
172 "Ghana",
173 "Greece",
174 "Grenada",
175 "Guam",
176 "Guatemala",
177 "Guernsey",
178 "Guinea",
179 "Guinea-Bissau",
180 "Guyana",
181 "Haiti",
182 "Heard Island and McDonald Islands",
183 "Honduras",
184 "Hungary",
185 "Iceland",
186 "India",
187 "Indonesia",
188 "Iraq",
189 "Ireland",
190 "Israel",
191 "Italy",
192 "Jamaica",
193 "Japan",
194 "Jersey",
195 "Jordan",
196 "Kazakhstan",
197 "Kenya",
198 "Kiribati",
199 "Kuwait",
200 "Kyrgyzstan",
201 "Laos",
202 "Latvia",
203 "Lebanon",
204 "Lesotho",
205 "Liberia",
206 "Libya",
207 "Liechtenstein",
208 "Lithuania",
209 "Luxembourg",
210 "Madagascar",
211 "Malawi",
212 "Malaysia",
213 "Maldives",
214 "Malta",
215 "Mali",
216 "Marshall Islands",
217 "Mauritania",
218 "Mauritius",
219 "Mexico",
220 "Moldova",
221 "Monaco",
222 "Mongolia",
223 "Montenegro",
224 "Morocco",
225 "Mozambique",
226 "Myanmar (Burma)",
227 "Namibia",
228 "Nauru",
229 "Nepal",
230 "Netherlands",
231 "New Caledonia",
232 "New Zealand",
233 "Nicaragua",
234 "Niger",
235 "Nigeria",
236 "Niue",
237 "Norfolk Island",
238 "North Macedonia",
239 "Northern Mariana Islands",
240 "Norway",
241 "Oman",
242 "Pakistan",
243 "Palau",
244 "Panama",
245 "Papua New Guinea",
246 "Paraguay",
247 "Peru",
248 "Philippines",
249 "Pitcairn Islands",
250 "Poland",
251 "Portugal",
252 "Qatar",
253 "Republic of the Congo",
254 "Romania",
255 "Rwanda",
256 "Saint Helena, Ascension and Tristan da Cunha",
257 "Saint Kitts and Nevis",
258 "Saint Lucia",
259 "Saint Pierre and Miquelon",
260 "Saint Vincent and the Grenadines",
261 "Samoa",
262 "San Marino",
263 "Sao Tome and Principe",
264 "Saudi Arabia",
265 "Senegal",
266 "Seychelles",
267 "Sierra Leone",
268 "Singapore",
269 "Sint Maarten",
270 "Slovakia",
271 "Slovenia",
272 "Solomon Islands",
273 "Somalia",
274 "South Africa",
275 "South Georgia and the South Sandwich Islands",
276 "South Korea",
277 "Spain",
278 "Sri Lanka",
279 "Suriname",
280 "Switzerland",
281 "Sweden",
282 "Tajikistan",
283 "Tanzania",
284 "Thailand",
285 "The Bahamas",
286 "The Gambia",
287 "Timor-Leste",
288 "Togo",
289 "Tokelau",
290 "Tonga",
291 "Trinidad and Tobago",
292 "Tunisia",
293 "Turkiye",
294 "Turkmenistan",
295 "Tuvalu",
296 "Uganda",
297 "Ukraine",
298 "United Arab Emirates",
299 "United Kingdom",
300 "United States",
301 "Uruguay",
302 "Uzbekistan",
303 "Vanuatu",
304 "Vatican City",
305 "Venezuela",
306 "Vietnam",
307 "Yemen",
308 "Zambia",
309 "Zimbabwe",
310 "Bermuda",
311 "Bouvet Island",
312 "British Indian Ocean Territory",
313 "British Virgin Islands",
314 "Canary Islands",
315 "Cayman Islands",
316 "Taiwan",
317 "Mayotte",
318 "Faroe Islands",
319 "Falkland Islands (Islas Malvinas)",
320 "French Guiana",
321 "Palestine",
322 "Gibraltar",
323 "Greenland",
324 "Guadeloupe",
325 "Hong Kong",
326 "Isle of Man",
327 "Macao",
328 "Martinique",
329 "Montserrat",
330 "Aruba",
331 "Puerto Rico",
332 "Reunion",
333 "Anguilla",
334 "Western Sahara",
335 "Saint Martin",
336 "Svalbard and Jan Mayen",
337 "Turks and Caicos Islands",
338 "United States Minor Outlying Islands",
339 "U.S. Virgin Islands",
340 "Wallis and Futuna"
341 ],
342 "enumTitles": [
343 "Albania",
344 "Algeria",
345 "American Samoa",
346 "Andorra",
347 "Angola",
348 "Antarctica",
349 "Antigua and Barbuda",
350 "Argentina",
351 "Armenia",
352 "Australia",
353 "Austria",
354 "Azerbaijan",
355 "Bahrain",
356 "Bangladesh",
357 "Barbados",
358 "Belarus",
359 "Belgium",
360 "Belize",
361 "Benin",
362 "Bhutan",
363 "Bolivia",
364 "Bosnia and Herzegovina",
365 "Botswana",
366 "Brazil",
367 "Brunei",
368 "Bulgaria",
369 "Burkina Faso",
370 "Burundi",
371 "Cambodia",
372 "Cameroon",
373 "Canada",
374 "Cabo Verde",
375 "Caribbean Netherlands",
376 "Central African Republic",
377 "Chad",
378 "Chile",
379 "China",
380 "Christmas Island",
381 "Cocos (Keeling) Islands",
382 "Colombia",
383 "Comoros",
384 "Cook Islands",
385 "Costa Rica",
386 "Cote d'Ivoire",
387 "Croatia",
388 "Curacao",
389 "Cyprus",
390 "Czechia",
391 "Democratic Republic of the Congo",
392 "Denmark",
393 "Djibouti",
394 "Dominica",
395 "Dominican Republic",
396 "Ecuador",
397 "Egypt",
398 "El Salvador",
399 "Equatorial Guinea",
400 "Eritrea",
401 "Estonia",
402 "Eswatini",
403 "Ethiopia",
404 "Micronesia",
405 "Fiji",
406 "Finland",
407 "France",
408 "French Polynesia",
409 "French Southern and Antarctic Lands",
410 "Gabon",
411 "Georgia",
412 "Germany",
413 "Ghana",
414 "Greece",
415 "Grenada",
416 "Guam",
417 "Guatemala",
418 "Guernsey",
419 "Guinea",
420 "Guinea-Bissau",
421 "Guyana",
422 "Haiti",
423 "Heard Island and McDonald Islands",
424 "Honduras",
425 "Hungary",
426 "Iceland",
427 "India",
428 "Indonesia",
429 "Iraq",
430 "Ireland",
431 "Israel",
432 "Italy",
433 "Jamaica",
434 "Japan",
435 "Jersey",
436 "Jordan",
437 "Kazakhstan",
438 "Kenya",
439 "Kiribati",
440 "Kuwait",
441 "Kyrgyzstan",
442 "Laos",
443 "Latvia",
444 "Lebanon",
445 "Lesotho",
446 "Liberia",
447 "Libya",
448 "Liechtenstein",
449 "Lithuania",
450 "Luxembourg",
451 "Madagascar",
452 "Malawi",
453 "Malaysia",
454 "Maldives",
455 "Malta",
456 "Mali",
457 "Marshall Islands",
458 "Mauritania",
459 "Mauritius",
460 "Mexico",
461 "Moldova",
462 "Monaco",
463 "Mongolia",
464 "Montenegro",
465 "Morocco",
466 "Mozambique",
467 "Myanmar (Burma)",
468 "Namibia",
469 "Nauru",
470 "Nepal",
471 "Netherlands",
472 "New Caledonia",
473 "New Zealand",
474 "Nicaragua",
475 "Niger",
476 "Nigeria",
477 "Niue",
478 "Norfolk Island",
479 "North Macedonia",
480 "Northern Mariana Islands",
481 "Norway",
482 "Oman",
483 "Pakistan",
484 "Palau",
485 "Panama",
486 "Papua New Guinea",
487 "Paraguay",
488 "Peru",
489 "Philippines",
490 "Pitcairn Islands",
491 "Poland",
492 "Portugal",
493 "Qatar",
494 "Republic of the Congo",
495 "Romania",
496 "Rwanda",
497 "Saint Helena, Ascension and Tristan da Cunha",
498 "Saint Kitts and Nevis",
499 "Saint Lucia",
500 "Saint Pierre and Miquelon",
501 "Saint Vincent and the Grenadines",
502 "Samoa",
503 "San Marino",
504 "Sao Tome and Principe",
505 "Saudi Arabia",
506 "Senegal",
507 "Seychelles",
508 "Sierra Leone",
509 "Singapore",
510 "Sint Maarten",
511 "Slovakia",
512 "Slovenia",
513 "Solomon Islands",
514 "Somalia",
515 "South Africa",
516 "South Georgia and the South Sandwich Islands",
517 "South Korea",
518 "Spain",
519 "Sri Lanka",
520 "Suriname",
521 "Switzerland",
522 "Sweden",
523 "Tajikistan",
524 "Tanzania",
525 "Thailand",
526 "The Bahamas",
527 "The Gambia",
528 "Timor-Leste",
529 "Togo",
530 "Tokelau",
531 "Tonga",
532 "Trinidad and Tobago",
533 "Tunisia",
534 "Turkiye",
535 "Turkmenistan",
536 "Tuvalu",
537 "Uganda",
538 "Ukraine",
539 "United Arab Emirates",
540 "United Kingdom",
541 "United States",
542 "Uruguay",
543 "Uzbekistan",
544 "Vanuatu",
545 "Vatican City",
546 "Venezuela",
547 "Vietnam",
548 "Yemen",
549 "Zambia",
550 "Zimbabwe",
551 "Bermuda",
552 "Bouvet Island",
553 "British Indian Ocean Territory",
554 "British Virgin Islands",
555 "Canary Islands",
556 "Cayman Islands",
557 "Taiwan",
558 "Mayotte",
559 "Faroe Islands",
560 "Falkland Islands (Islas Malvinas)",
561 "French Guiana",
562 "Palestine",
563 "Gibraltar",
564 "Greenland",
565 "Guadeloupe",
566 "Hong Kong",
567 "Isle of Man",
568 "Macao",
569 "Martinique",
570 "Montserrat",
571 "Aruba",
572 "Puerto Rico",
573 "Reunion",
574 "Anguilla",
575 "Western Sahara",
576 "Saint Martin",
577 "Svalbard and Jan Mayen",
578 "Turks and Caicos Islands",
579 "United States Minor Outlying Islands",
580 "U.S. Virgin Islands",
581 "Wallis and Futuna"
582 ]
583 },
584 "proxyConfig": {
585 "sectionCaption": "Proxy Configuration",
586 "sectionDescription": "Configure proxy settings to use during the scan. Utilizing proxies can help you avoid IP bans, bypass WAF (Web Application Firewall) restrictions, and access specific geographical regions. This ensures smooth crawling across various environments and enhances the overall efficiency and reliability of your scanning activities.",
587 "title": "Proxy",
588 "type": "object",
589 "description": "Configure proxy settings to use during the scan. Utilizing proxies can help you avoid IP bans, bypass WAF (Web Application Firewall) restrictions, and access specific geographical regions. This ensures smooth crawling across various environments and enhances the overall efficiency and reliability of your scanning activities.",
590 "default": {"useApifyProxy": false},
591 "editor": "proxy"
592 }
593 }
594 }
src/fetchWithProxyRotation.js
1import { Actor } from 'apify';
2
3await Actor.init();
4
5// Load and parse input parameters
6const input = await Actor.getInput() ?? {};
7const { proxyConfig } = input;
8
9// Create a helper function to handle proxy rotation and retries
10export async function fetchWithProxyRotation(options, postData, maxRetries = 3) {
11 const { request } = await import('https');
12 let retryCount = 0;
13 let lastError = null;
14 let proxyConfiguration = null;
15 let useProxy = !!proxyConfig; // Check if proxyConfig is provided
16
17 if (useProxy) {
18 try {
19 proxyConfiguration = await Actor.createProxyConfiguration(proxyConfig);
20 if (!proxyConfiguration) {
21 console.warn("⚠️ Proxy configuration failed. Running without proxy.");
22 useProxy = false;
23 }
24 } catch (error) {
25 console.warn("⚠️ Failed to initialize proxy configuration. Running without proxy.");
26 useProxy = false;
27 }
28 }
29
30 while (retryCount < maxRetries) {
31 try {
32 let proxyAgent = null;
33 let proxyUrl = null;
34
35 if (useProxy && proxyConfiguration) {
36 try {
37 proxyUrl = await proxyConfiguration.newUrl();
38 if (!proxyUrl) {
39 console.warn("⚠️ Failed to retrieve proxy URL. Continuing without a proxy.");
40 useProxy = false;
41 } else {
42 const { HttpsProxyAgent } = await import('https-proxy-agent');
43 proxyAgent = new HttpsProxyAgent(proxyUrl);
44 console.log(`🔄 Attempt ${retryCount + 1}/${maxRetries} using proxy: ${proxyUrl.replace(/:[^:]*@/, ':****@')}`);
45 }
46 } catch (error) {
47 console.warn("⚠️ Error getting new proxy URL. Running without proxy.");
48 useProxy = false;
49 }
50 } else {
51 console.log(`🔄 Attempt ${retryCount + 1}/${maxRetries} without a proxy.`);
52 }
53
54 // Update options with proxy settings if available
55 const proxyOptions = {
56 ...options,
57 agent: proxyAgent || undefined
58 };
59
60 // Make the request with the current proxy
61 const response = await new Promise((resolve, reject) => {
62 const req = request(proxyOptions, (res) => {
63 let data = "";
64
65 res.on("data", (chunk) => { data += chunk; });
66
67 res.on("end", () => {
68 // Check for blocks or CAPTCHA
69 if (res.statusCode >= 400) {
70 reject(new Error(`HTTP ${res.statusCode}: ${data}`));
71 return;
72 }
73
74 if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
75 reject(new Error("CAPTCHA detected or request blocked by Google."));
76 return;
77 }
78
79 resolve({
80 data,
81 headers: res.headers, // ✅ Capturing response headers
82 });
83 });
84 });
85
86 req.on("error", reject);
87
88 if (postData) {
89 req.write(postData);
90 }
91
92 req.end();
93 });
94
95 return response;
96
97 } catch (error) {
98 lastError = error;
99 console.error(`❌ Request failed (attempt ${retryCount + 1}/${maxRetries}): ${error.message}`);
100
101 // Only retry if it's a block or CAPTCHA
102 if (error.message.includes("CAPTCHA") ||
103 error.message.includes("sorry") ||
104 error.message.includes("302 Moved") ||
105 error.message.includes("429") ||
106 error.message.includes("403")) {
107
108 retryCount++;
109
110 // Add exponential backoff
111 const waitTime = 2000 * Math.pow(2, retryCount - 1);
112 console.log(`⏱️ Waiting ${waitTime / 1000} seconds before retry...`);
113 await new Promise(resolve => setTimeout(resolve, waitTime));
114
115 } else {
116 // For other errors, don't retry
117 throw error;
118 }
119 }
120 }
121
122 // If we've exhausted all retries
123 throw lastError || new Error('Maximum retries reached');
124}
src/filterAdvertiser.js
1import { getDateRange } from './getDateRange.js';
2import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
3
4
5export const filterAdvertiser = async (kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults,domainExists) => {
6 const parsedData = parseAdvertiserUrl(kw);
7 try {
8 const filterData = Use_URL_Filter
9 ? {
10 advertiserId_OR_kw: parsedData.advertiserId_domain,
11 maxDomains,
12 maxAdvertisers,
13 RegionCode: parsedData.RegionCode,
14 format: parseInt(parsedData.format),
15 dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
16 platform: parseInt(parsedData.platform),
17 startDate: parsedData.startDate,
18 endDate: parsedData.endDate,
19 limitResults,
20 domainExists : parsedData.domainExists
21 }
22 : {
23 advertiserId_OR_kw: parsedData.advertiserId_domain,
24 maxDomains,
25 maxAdvertisers,
26 RegionCode,
27 format: parseInt(format),
28 platform: parseInt(platform),
29 dateRange: getDateRange(presetDate, startDate, endDate),
30 startDate,
31 endDate,
32 limitResults,
33 domainExists
34 };
35 console.log(Use_URL_Filter ? 'If Use_URL_Filter is true, override input filter:' : 'Use Actor.getInput() filtering:', filterData);
36 return {
37 advertiserId_OR_kw: parsedData.advertiserId_domain,
38 maxAdvertisers,
39 maxDomains,
40 RegionCode: Use_URL_Filter ? parsedData.RegionCode : RegionCode,
41 format: parseInt(Use_URL_Filter ? parsedData.format : format),
42 dateRange: getDateRange(
43 Use_URL_Filter ? parsedData.presetDate : presetDate,
44 Use_URL_Filter ? parsedData.startDate : startDate,
45 Use_URL_Filter ? parsedData.endDate : endDate
46 ),
47 platform: parseInt(Use_URL_Filter ? parsedData.platform : platform),
48 limitResults,
49 domainExists: parsedData.domainExists
50 };
51 } catch (error) {
52 console.error(`❌ Error processing advertiser ID "${parsedData.advertiserId_domain}":`, error);
53 }
54};
src/getDateRange.js
1import dayjs from 'dayjs';
2
3function validateCustomDates(Start_Date, End_Date) {
4 const isValidDate = (date) => /^\d{4}-\d{2}-\d{2}$/.test(date);
5
6 let fromDate = isValidDate(Start_Date) ? parseInt(Start_Date.replace(/-/g, ""), 10) : null;
7 let toDate = isValidDate(End_Date) ? parseInt(End_Date.replace(/-/g, ""), 10) : null;
8
9 if (fromDate && toDate) {
10 if (fromDate > toDate) {
11 console.error("❌ Error: Start_Date cannot be after End_Date.");
12 return null; // Do not return error, let it fall back to default
13 }
14 return { fromDate, toDate, anyTime: false, dateRangeLabel: "Custom Range" };
15 }
16
17 if ((Start_Date && !isValidDate(Start_Date)) || (End_Date && !isValidDate(End_Date))) {
18 console.error("❌ Error: Invalid date format. Expected YYYY-MM-DD. Falling back to default values.");
19 return null; // Do not return error, let it fall back to default
20 }
21
22 return null;
23}
24
25export function getDateRange(days, Start_Date, End_Date) {
26 let customDateRange = validateCustomDates(Start_Date, End_Date);
27 if (customDateRange) return customDateRange;
28
29 let yesterday = parseInt(dayjs().subtract(1, "day").format("YYYYMMDD"), 10);
30 let defaultToDate = yesterday;
31 let defaultFromDate;
32 let anyTime = false;
33 let dateRangeLabel = "";
34
35 if (days === "0") {
36 defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
37 dateRangeLabel = "Today";
38 } else if (days === "1") {
39 defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
40 dateRangeLabel = "Yesterday";
41 } else if (days === "7") {
42 defaultFromDate = parseInt(dayjs().subtract(8, "day").format("YYYYMMDD"), 10);
43 dateRangeLabel = "Last 7 days";
44 } else if (days === "30") {
45 defaultFromDate = parseInt(dayjs().subtract(31, "day").format("YYYYMMDD"), 10);
46 dateRangeLabel = "Last 30 days";
47 } else if (days === "-1") {
48 dateRangeLabel = "Any time";
49 return { anyTime: true, dateRangeLabel };
50 } else {
51 return null;
52 }
53
54 return { fromDate: defaultFromDate, toDate: defaultToDate, anyTime, dateRangeLabel };
55}
src/get_creative_details.js
1import https from "https";
2import { processAds } from "./processAds.js"; // Import function
3import { fetchWithProxyRotation } from "./fetchWithProxyRotation.js"; // Import function
4/**
5 * Function to get creative details by ID
6 * @param {string} creativeId - The creative ID to fetch details for
7 * @param {string} advertiserId - The advertiser ID associated with the creative
8 * @param {number} regionCode - The region code (default is worldwide: 2012)
9 * @returns {Promise<Object>} - The creative details
10 */
11export async function getCreativeDetails(creativeId, advertiserId, regionCode = 2012) {
12 const requestPayload = {
13 "1": advertiserId,
14 "2": creativeId,
15 "5": {
16 "1": 1, // Page number
17 "2": 30, // Page size
18 "3": 2012
19 }
20 };
21
22 const postData = new URLSearchParams({
23 "f.req": JSON.stringify(requestPayload)
24 }).toString();
25
26 const options = {
27 hostname: "adstransparency.google.com",
28 path: "/anji/_/rpc/LookupService/GetCreativeById?authuser=0",
29 method: "POST",
30 headers: {
31 "Content-Type": "application/x-www-form-urlencoded",
32 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
33 "Connection": "keep-alive",
34 "Content-Length": Buffer.byteLength(postData),
35 }
36 };
37
38 try {
39 // Use our new proxy rotation function
40 const response = await fetchWithProxyRotation(options, postData, 5); // Try up to 5 times
41
42 try {
43 const parsedResponse = JSON.parse(response.data);
44 console.log(`✅ Successfully fetched creative ID: ${creativeId}`);
45 return parsedResponse;
46 } catch (error) {
47 console.error("❌ JSON Parsing Error:", error);
48 throw error;
49 }
50
51 } catch (error) {
52 console.error(`❌ Failed to fetch creative ID ${creativeId} after multiple attempts:`, error.message);
53 throw error;
54 }
55}
56
57/**
58 * Function to process each ad as soon as it's fetched
59 * @param {Array<Object>} allResults - The array of results from searchForAds
60 * @param {number} regionCode - The region code (default is worldwide: 2012)
61 */
62
63async function sleep(ms) {
64 return new Promise(resolve => setTimeout(resolve, ms));
65}
66
67export async function processCreativeDetails(allResults, regionCode = 2012) {
68 for (const result of allResults) {
69 if (result["2"]) {
70 try {
71 const creativeDetail = await getCreativeDetails(result["2"], result["1"], regionCode);
72 console.log(`✅ Processed creative: ${result["2"]}`);
73
74 // Process each creative detail as soon as it's fetched
75 processAds([creativeDetail]);
76
77 // Optional delay to avoid detection (increase if needed)
78 //await sleep(300); // 3 seconds delay
79
80 } catch (error) {
81 console.error(`❌ Failed to process creative: ${result["2"]}`, error);
82 }
83 }
84 }
85}
src/main.js
1const startTime = performance.now();
2import { Actor } from 'apify';
3import { Dataset } from 'crawlee';
4import { getDateRange } from './getDateRange.js';
5import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
6import { searchForAdsList } from './search_for_an_ads.js';
7import { searchForPoliticalAdsList } from './search_for_an_political_ads.js';
8import { filterAdvertiser } from './filterAdvertiser.js';
9import fs from 'fs';
10
11await Actor.init();
12
13// Load and parse input parameters
14const input = await Actor.getInput() ?? {};
15const {
16 keyword_domain_advertiserid,
17 maxAdvertisers,
18 maxDomains,
19 region,
20 format,
21 platform,
22 presetDate,
23 startDate,
24 endDate,
25 Use_URL_Filter,
26 limitResults,
27 isPolitical
28} = input;
29
30// Load regions.json and resolve region code
31const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
32const regionEntry = regionMapping.regions.region.find(r => r["4"] === region);
33const RegionCode = regionEntry ? regionEntry["1"] : undefined;
34
35// Determine date range
36const dateRange = getDateRange(presetDate, startDate, endDate);
37
38// Function to detect URLs
39const isGenericUrl = (kw) => /^https?:\/\//.test(kw);
40const advertiserIdPattern = (kw) => /^AR\d+$/.test(kw);
41
42const isAdvertiserUrl = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
43const isDomainUrl = /[?&]domain=([^&]+)/;
44const isTopic = /[?&]topic=([^&]+)/;
45
46let domainExists
47
48const processKeyword = async (kw) => {
49 try {
50 let filterData;
51
52 if (kw.match(isTopic) || isPolitical && !kw.match(isAdvertiserUrl) && !kw.match(isDomainUrl)) {
53 kw = kw.replace(/\s+/g, "+"); // Replace spaces with '+'
54 console.log(`✅✅ Political : ${kw}`);
55 const parsedData = parseAdvertiserUrl(kw);
56
57 const filterData = {
58 adveritserId_OR_kw: parsedData.advertiserId_domain,
59 maxAdvertisers,
60 RegionCode: parsedData.RegionCode,
61 format: parseInt(parsedData.format),
62 platform: parseInt(parsedData.platform),
63 dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
64 startDate: parsedData.startDate,
65 endDate: parsedData.endDate,
66 limitResults,
67 }
68 console.log("Filter Data:", JSON.stringify(filterData, null, 2));
69 let adsData = await searchForPoliticalAdsList(
70 parsedData.advertiserId_domain,
71 maxAdvertisers,
72 parsedData.RegionCode,
73 parseInt(parsedData.format),
74 getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
75 parseInt(parsedData.platform),
76 limitResults
77 );
78
79 await Dataset.pushData({ advertiserId_OR_kw: kw, adsData });
80
81 }
82 else if (kw.match(isAdvertiserUrl) || kw.match(isDomainUrl)) {
83 const advertiserMatch = kw.match(isAdvertiserUrl);
84 const domainMatch = kw.match(isDomainUrl);
85 const parsedData = parseAdvertiserUrl(kw);
86
87 if (advertiserMatch && domainMatch) {
88 console.error(`❌ Invalid URL: Cannot contain both advertiser ID and domain -> ${kw}`);
89 return; // Skip processing this invalid URL
90 }
91 if (advertiserMatch) {
92 // Advertiser ID detected
93 if (!parsedData) throw new Error("Invalid advertiser URL");
94 await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
95 } else if (domainMatch) {
96 // Domain detected
97 console.log('🔹 Processing Domain:', parsedData.advertiserId_domain,);
98 let Filter_Advertiser = await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
99 //console.log(`Filter_Advertiser ${JSON.stringify(Filter_Advertiser, null, 2)}`);
100 let adsData = await searchForAdsList(
101 parsedData.advertiserId_domain,
102 maxAdvertisers,
103 maxDomains,
104 Filter_Advertiser.RegionCode,
105 Filter_Advertiser.format,
106 Filter_Advertiser.dateRange,
107 Filter_Advertiser.platform,
108 limitResults,
109 Filter_Advertiser.domainExists
110 );
111
112 //console.log(`adsData ${JSON.stringify(adsData, null, 2)}`);
113
114 }
115 }
116 else {
117 // Handle generic keywords (not URLs)
118 if (isGenericUrl(kw)) console.warn(`⚠️ Detected a generic URL: ${kw}.\nTreating as a regular keyword.`);
119 kw = kw.replace(/\s+/g, "+"); // Replace spaces with '+'
120 if (advertiserIdPattern(kw)) console.log(`✅ Advertiser ID: ${kw}`);
121 filterData = {
122 advertiserId_OR_kw: kw,
123 maxDomains,
124 maxAdvertisers,
125 RegionCode,
126 format: parseInt(format),
127 platform: parseInt(platform),
128 dateRange,
129 startDate,
130 endDate
131 };
132
133 let adsData = await searchForAdsList(
134 kw,
135 maxAdvertisers,
136 maxDomains,
137 RegionCode,
138 parseInt(format),
139 getDateRange(presetDate, startDate, endDate),
140 parseInt(platform),
141 limitResults
142 );
143 //await Dataset.pushData({ advertiserId_OR_kw0: kw, adsData });
144 }
145 } catch (error) {
146 console.error(`❌ Error processing "${kw}":`, error);
147 }
148};
149
150
151// Process all queries in parallel
152await Promise.all(keyword_domain_advertiserid.map(processKeyword));
153
154const endTime = performance.now();
155console.log(`⏳ Execution time: ${(endTime - startTime).toFixed(2)} ms`);
156await Actor.exit();
src/parseAdvertiserUrl.js
1import fs from "fs";
2
3export function parseAdvertiserUrl(url) {
4 const advertiserPattern = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
5 const match = url.match(advertiserPattern);
6
7 const urlParams = new URL(url).searchParams;
8 const advertiserId = match ? match[1] : null;
9 const domain = urlParams.has("domain") ? urlParams.get("domain") : null;
10
11 // Ensure that only one of advertiserId or domain exists
12 if (advertiserId && domain) {
13 return null; // Invalid URL structure
14 }
15
16 // Determine advertiserId_domain
17 const advertiserId_domain = advertiserId || domain || null;
18
19 // Extract query parameters
20 const region = urlParams.get("region") || null;
21 const format = urlParams.get("format") || null;
22 const presetDate = urlParams.get("preset-date")?.replace(/ /g, "+") || null;
23 const startDate = urlParams.get("start-date") || null;
24 const endDate = urlParams.get("end-date") || null;
25 const platform = urlParams.get("platform") || null;
26
27 // Load regions.json and resolve region code
28 const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
29 const regionEntry = regionMapping.regions.region.find(r => r["3"] === region);
30 const RegionCode = regionEntry ? regionEntry["1"] : undefined;
31
32 // Platform Mapping
33 const platformMap = {
34 "MAPS": "2",
35 "PLAY": "1",
36 "SHOPPING": "4",
37 "SEARCH": "3",
38 "YOUTUBE": "5"
39 };
40
41 // Format Mapping
42 const formatMap = {
43 "VIDEO": "3",
44 "TEXT": "1",
45 "IMAGE": "2"
46 };
47
48 // Preset Date Mapping
49 const presetDateMap = {
50 "Today": "0",
51 "Yesterday": "1",
52 "Last+7+days": "7",
53 "Last+30+days": "30"
54 };
55
56 return {
57 advertiserId_domain,
58 domainExists: !!domain, // ✅ Returns true if domain exists, false otherwise
59 RegionCode,
60 format: formatMap[format] || "0", // Default to "0" (All formats)
61 presetDate: presetDateMap[presetDate] || "-1", // Default to "-1" (Any Time)
62 startDate,
63 endDate,
64 platform: platformMap[platform] || "0" // Default to "0" (All platforms)
65 };
66}
src/processAds.js
1import fs from "fs";
2import { Dataset } from 'crawlee';
3
4// Load the region mapping file
5let regionMapping;
6try {
7 regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
8} catch (error) {
9 console.error("Error loading region mapping file:", error);
10 process.exit(1);
11}
12
13// Platform mapping for `"8"` field (Google services)
14const platformMapping = {
15 1: "Google Play",
16 2: "Google Maps",
17 3: "Google Search",
18 4: "Google Shopping",
19 5: "YouTube"
20};
21
22// Format mapping for `"1": {"8": ...}`
23const formatMapping = {
24 1: "TEXT",
25 2: "IMAGE",
26 3: "VIDEO"
27};
28
29// Convert region codes to readable names
30function getRegionName(regionCode) {
31 const regionEntry = regionMapping.regions.region.find(r => r["1"] === regionCode);
32 return regionEntry
33 ? { regionCode: regionEntry["3"], regionName: regionEntry["4"] } // "3" = Country Code, "4" = Country Name
34 : { regionCode: "Unknown", regionName: "N/A" };
35}
36
37export async function processAds(allResults) {
38 if (!allResults || allResults.length === 0) {
39 console.log("No ad data available to process.");
40 return [];
41 }
42
43 const formattedAds = allResults.map(ad => {
44 const rawRegions = ad?.["1"]?.["17"];
45
46 const regionStats = Array.isArray(rawRegions)
47 ? rawRegions.map(region => {
48 if (!region || typeof region !== "object") return {}; // Prevent errors on missing data
49
50 const { regionCode, regionName } = getRegionName(region["1"]);
51
52 // Extract platform stats from "8"
53 const platformStats = Array.isArray(region["8"])
54 ? region["8"].map(platform => ({
55 surfaceName: platformMapping[platform["1"]] || "Unknown Platform",
56 impressions: {
57 lowerBound: platform["2"] ?? 0,
58 upperBound: platform["3"] ?? 0
59 }
60 }))
61 : [];
62
63 return {
64 regionNumber: region["1"] ?? "Unknown",
65 regionCode,
66 regionName,
67 firstShown: region.hasOwnProperty("4") ? region["4"] : "Unknown",
68 lastShown: region.hasOwnProperty("5") ? region["5"] : "Unknown",
69 impressions: {
70 lowerBound: region["2"] ?? 0,
71 upperBound: region["3"] ?? 0
72 },
73 platformStats
74 };
75 })
76 : [];
77
78 // Get format from `ad["1"]["8"]`
79 const formatType = formatMapping[ad?.["1"]?.["8"]] || "UNKNOWN";
80
81 // Extract preview URLs from both possible locations
82 const previewUrls = Array.isArray(ad?.["1"]?.["5"])
83 ? ad["1"]["5"].map(item =>
84 item?.["1"]?.["4"] ?? // Case 1: "1": { "4": "URL" }
85 item?.["3"]?.["2"] ?? // Case 2: "3": { "2": "URL" }
86 "Unknown"
87 )
88 : [];
89
90 // Construct Ad Transparency URL
91 const advertiserId = ad?.["1"]?.["1"] ?? "Unknown";
92 const creativeId = ad?.["1"]?.["2"] ?? "Unknown";
93 const adTransparencyUrl =
94 advertiserId !== "Unknown" && creativeId !== "Unknown"
95 ? `https://adstransparency.google.com/advertiser/${advertiserId}/creative/${creativeId}?region=anywhere`
96 : "Unknown";
97
98 return {
99 advertiserId,
100 creativeId,
101 creativeRegions: [...new Set(regionStats.map(r => r.regionName))], // Unique region names
102 adTransparencyUrl, // Added ad transparency link
103 previewUrls, // Now properly extracting URLs
104 format: formatType, // Updated format assignment
105 regionStats
106 };
107 });
108
109 let advertiserId = formattedAds[0].advertiserId
110 let creativeId = formattedAds[0].creativeId
111 let creativeRegions = formattedAds[0].creativeRegions
112 let adTransparencyUrl = formattedAds[0].adTransparencyUrl
113 let previewUrls = formattedAds[0].previewUrls
114 let format = formattedAds[0].format
115 let regionStats = formattedAds[0].regionStats
116
117 console.log(`✅ Processed ${formattedAds.length} ads.`);
118 return await Dataset.pushData({
119 advertiserId,
120 creativeId,
121 creativeRegions,
122 adTransparencyUrl,
123 previewUrls,
124 format,
125 regionStats
126 });
127}
src/regions.json
1{
2 "regions": {
3 "region": [
4 {
5 "1": 2008,
6 "3": "AL",
7 "4": "Albania",
8 "8": {
9 "1": 411533320,
10 "2": 201683310
11 },
12 "10": 1
13 },
14 {
15 "1": 2012,
16 "3": "DZ",
17 "4": "Algeria",
18 "8": {
19 "1": 280338860,
20 "2": 16596260
21 },
22 "10": 1
23 },
24 {
25 "1": 2016,
26 "3": "AS",
27 "4": "American Samoa",
28 "8": {
29 "1": -142709720,
30 "2": -1701322170
31 },
32 "10": 1
33 },
34 {
35 "1": 2020,
36 "3": "AD",
37 "4": "Andorra",
38 "8": {
39 "1": 425062850,
40 "2": 15218010
41 },
42 "10": 1
43 },
44 {
45 "1": 2024,
46 "3": "AO",
47 "4": "Angola",
48 "8": {
49 "1": -112026920,
50 "2": 178738870
51 },
52 "10": 1
53 },
54 {
55 "1": 2010,
56 "3": "AQ",
57 "4": "Antarctica",
58 "8": {
59 "1": -752509730,
60 "2": -713890
61 },
62 "10": 1
63 },
64 {
65 "1": 2028,
66 "3": "AG",
67 "4": "Antigua and Barbuda",
68 "8": {
69 "1": 170608160,
70 "2": -617964280
71 },
72 "10": 1
73 },
74 {
75 "1": 2032,
76 "3": "AR",
77 "4": "Argentina",
78 "8": {
79 "1": -384160970,
80 "2": -636166720
81 },
82 "10": 1
83 },
84 {
85 "1": 2051,
86 "3": "AM",
87 "4": "Armenia",
88 "8": {
89 "1": 400690990,
90 "2": 450381890
91 },
92 "10": 1
93 },
94 {
95 "1": 2036,
96 "3": "AU",
97 "4": "Australia",
98 "8": {
99 "1": -252743980,
100 "2": 1337751360
101 },
102 "10": 1
103 },
104 {
105 "1": 2040,
106 "3": "AT",
107 "4": "Austria",
108 "5": "Austria",
109 "8": {
110 "1": 475162310,
111 "2": 145500720
112 },
113 "10": 1
114 },
115 {
116 "1": 2031,
117 "3": "AZ",
118 "4": "Azerbaijan",
119 "8": {
120 "1": 401431050,
121 "2": 475769270
122 },
123 "10": 1
124 },
125 {
126 "1": 2048,
127 "3": "BH",
128 "4": "Bahrain",
129 "8": {
130 "1": 260667000,
131 "2": 505577000
132 },
133 "10": 1
134 },
135 {
136 "1": 2050,
137 "3": "BD",
138 "4": "Bangladesh",
139 "8": {
140 "1": 236849940,
141 "2": 903563310
142 },
143 "10": 1
144 },
145 {
146 "1": 2052,
147 "3": "BB",
148 "4": "Barbados",
149 "8": {
150 "1": 131938870,
151 "2": -595431980
152 },
153 "10": 1
154 },
155 {
156 "1": 2112,
157 "3": "BY",
158 "4": "Belarus",
159 "8": {
160 "1": 537098070,
161 "2": 279533890
162 },
163 "10": 1
164 },
165 {
166 "1": 2056,
167 "3": "BE",
168 "4": "Belgium",
169 "5": "Belgium",
170 "8": {
171 "1": 505038870,
172 "2": 44699360
173 },
174 "10": 1
175 },
176 {
177 "1": 2084,
178 "3": "BZ",
179 "4": "Belize",
180 "8": {
181 "1": 171898770,
182 "2": -884976500
183 },
184 "10": 1
185 },
186 {
187 "1": 2204,
188 "3": "BJ",
189 "4": "Benin",
190 "8": {
191 "1": 93076900,
192 "2": 23158340
193 },
194 "10": 1
195 },
196 {
197 "1": 2064,
198 "3": "BT",
199 "4": "Bhutan",
200 "8": {
201 "1": 275141620,
202 "2": 904336010
203 },
204 "10": 1
205 },
206 {
207 "1": 2068,
208 "3": "BO",
209 "4": "Bolivia",
210 "8": {
211 "1": -162901540,
212 "2": -635886530
213 },
214 "10": 1
215 },
216 {
217 "1": 2070,
218 "3": "BA",
219 "4": "Bosnia and Herzegovina",
220 "8": {
221 "1": 439158860,
222 "2": 176790760
223 },
224 "10": 1
225 },
226 {
227 "1": 2072,
228 "3": "BW",
229 "4": "Botswana",
230 "8": {
231 "1": -223284740,
232 "2": 246848660
233 },
234 "10": 1
235 },
236 {
237 "1": 2076,
238 "3": "BR",
239 "4": "Brazil",
240 "8": {
241 "1": -142350040,
242 "2": -519252800
243 },
244 "10": 1
245 },
246 {
247 "1": 2096,
248 "3": "BN",
249 "4": "Brunei",
250 "8": {
251 "1": 45352770,
252 "2": 1147276690
253 },
254 "10": 1
255 },
256 {
257 "1": 2100,
258 "3": "BG",
259 "4": "Bulgaria",
260 "8": {
261 "1": 427338830,
262 "2": 254858300
263 },
264 "10": 1
265 },
266 {
267 "1": 2854,
268 "3": "BF",
269 "4": "Burkina Faso",
270 "8": {
271 "1": 122383330,
272 "2": -15615930
273 },
274 "10": 1
275 },
276 {
277 "1": 2108,
278 "3": "BI",
279 "4": "Burundi",
280 "8": {
281 "1": -33730560,
282 "2": 299188860
283 },
284 "10": 1
285 },
286 {
287 "1": 2116,
288 "3": "KH",
289 "4": "Cambodia",
290 "8": {
291 "1": 125656790,
292 "2": 1049909630
293 },
294 "10": 1
295 },
296 {
297 "1": 2120,
298 "3": "CM",
299 "4": "Cameroon",
300 "8": {
301 "1": 73697220,
302 "2": 123547220
303 },
304 "10": 1
305 },
306 {
307 "1": 2124,
308 "3": "CA",
309 "4": "Canada",
310 "5": "Canada",
311 "8": {
312 "1": 561303660,
313 "2": -1063467710
314 },
315 "10": 1
316 },
317 {
318 "1": 2132,
319 "3": "CV",
320 "4": "Cabo Verde",
321 "5": "Cabo Verde",
322 "8": {
323 "1": 165388000,
324 "2": -230418000
325 },
326 "10": 1
327 },
328 {
329 "1": 2535,
330 "3": "BQ",
331 "4": "Caribbean Netherlands",
332 "8": {
333 "1": 121783611,
334 "2": -682385339
335 },
336 "10": 1
337 },
338 {
339 "1": 2140,
340 "3": "CF",
341 "4": "Central African Republic",
342 "8": {
343 "1": 66111110,
344 "2": 209394440
345 },
346 "10": 1
347 },
348 {
349 "1": 2148,
350 "3": "TD",
351 "4": "Chad",
352 "8": {
353 "1": 154541660,
354 "2": 187322070
355 },
356 "10": 1
357 },
358 {
359 "1": 2152,
360 "3": "CL",
361 "4": "Chile",
362 "8": {
363 "1": -356751470,
364 "2": -715429690
365 },
366 "10": 1
367 },
368 {
369 "1": 2156,
370 "3": "CN",
371 "4": "China",
372 "8": {
373 "1": 358616600,
374 "2": 1041953970
375 },
376 "10": 1
377 },
378 {
379 "1": 2162,
380 "3": "CX",
381 "4": "Christmas Island",
382 "8": {
383 "1": -104475250,
384 "2": 1056904490
385 },
386 "10": 1
387 },
388 {
389 "1": 2166,
390 "3": "CC",
391 "4": "Cocos (Keeling) Islands",
392 "8": {
393 "1": -121641650,
394 "2": 968709560
395 },
396 "10": 1
397 },
398 {
399 "1": 2170,
400 "3": "CO",
401 "4": "Colombia",
402 "8": {
403 "1": 45708680,
404 "2": -742973330
405 },
406 "10": 1
407 },
408 {
409 "1": 2174,
410 "3": "KM",
411 "4": "Comoros",
412 "8": {
413 "1": -116455000,
414 "2": 433333000
415 },
416 "10": 1
417 },
418 {
419 "1": 2184,
420 "3": "CK",
421 "4": "Cook Islands",
422 "8": {
423 "1": -212367360,
424 "2": -1597776710
425 },
426 "10": 1
427 },
428 {
429 "1": 2188,
430 "3": "CR",
431 "4": "Costa Rica",
432 "8": {
433 "1": 97489170,
434 "2": -837534280
435 },
436 "10": 1
437 },
438 {
439 "1": 2384,
440 "3": "CI",
441 "4": "Cote d'Ivoire",
442 "8": {
443 "1": 75399890,
444 "2": -55470800
445 },
446 "10": 1
447 },
448 {
449 "1": 2191,
450 "3": "HR",
451 "4": "Croatia",
452 "8": {
453 "1": 451000000,
454 "2": 152000000
455 },
456 "10": 1
457 },
458 {
459 "1": 2531,
460 "3": "CW",
461 "4": "Curacao",
462 "8": {
463 "1": 121695700,
464 "2": -689900200
465 },
466 "10": 1
467 },
468 {
469 "1": 2196,
470 "3": "CY",
471 "4": "Cyprus",
472 "8": {
473 "1": 351264130,
474 "2": 334298590
475 },
476 "10": 1
477 },
478 {
479 "1": 2203,
480 "3": "CZ",
481 "4": "Czechia",
482 "5": "Czechia",
483 "8": {
484 "1": 498174920,
485 "2": 154729620
486 },
487 "10": 1
488 },
489 {
490 "1": 2180,
491 "3": "CD",
492 "4": "Democratic Republic of the Congo",
493 "8": {
494 "1": -40383330,
495 "2": 217586640
496 },
497 "10": 1
498 },
499 {
500 "1": 2208,
501 "3": "DK",
502 "4": "Denmark",
503 "5": "Denmark",
504 "8": {
505 "1": 562639200,
506 "2": 95017850
507 },
508 "10": 1
509 },
510 {
511 "1": 2262,
512 "3": "DJ",
513 "4": "Djibouti",
514 "8": {
515 "1": 118251380,
516 "2": 425902750
517 },
518 "10": 1
519 },
520 {
521 "1": 2212,
522 "3": "DM",
523 "4": "Dominica",
524 "8": {
525 "1": 154149990,
526 "2": -613709760
527 },
528 "10": 1
529 },
530 {
531 "1": 2214,
532 "3": "DO",
533 "4": "Dominican Republic",
534 "8": {
535 "1": 187356930,
536 "2": -701626510
537 },
538 "10": 1
539 },
540 {
541 "1": 2218,
542 "3": "EC",
543 "4": "Ecuador",
544 "8": {
545 "1": -18312390,
546 "2": -781834060
547 },
548 "10": 1
549 },
550 {
551 "1": 2818,
552 "3": "EG",
553 "4": "Egypt",
554 "8": {
555 "1": 268205530,
556 "2": 308024980
557 },
558 "10": 1
559 },
560 {
561 "1": 2222,
562 "3": "SV",
563 "4": "El Salvador",
564 "8": {
565 "1": 137941850,
566 "2": -888965300
567 },
568 "10": 1
569 },
570 {
571 "1": 2226,
572 "3": "GQ",
573 "4": "Equatorial Guinea",
574 "8": {
575 "1": 16508010,
576 "2": 102678950
577 },
578 "10": 1
579 },
580 {
581 "1": 2232,
582 "3": "ER",
583 "4": "Eritrea",
584 "8": {
585 "1": 151793840,
586 "2": 397823340
587 },
588 "10": 1
589 },
590 {
591 "1": 2233,
592 "3": "EE",
593 "4": "Estonia",
594 "8": {
595 "1": 585952720,
596 "2": 250136070
597 },
598 "10": 1
599 },
600 {
601 "1": 2748,
602 "3": "SZ",
603 "4": "Eswatini",
604 "5": "Eswatini",
605 "8": {
606 "1": -265225030,
607 "2": 314658660
608 },
609 "10": 1
610 },
611 {
612 "1": 2231,
613 "3": "ET",
614 "4": "Ethiopia",
615 "8": {
616 "1": 91450000,
617 "2": 404896730
618 },
619 "10": 1
620 },
621 {
622 "1": 2583,
623 "3": "FM",
624 "4": "Micronesia",
625 "8": {
626 "1": 74255540,
627 "2": 1505508120
628 },
629 "10": 1
630 },
631 {
632 "1": 2242,
633 "3": "FJ",
634 "4": "Fiji",
635 "8": {
636 "1": -177133710,
637 "2": 1780650320
638 },
639 "10": 1
640 },
641 {
642 "1": 2246,
643 "3": "FI",
644 "4": "Finland",
645 "8": {
646 "1": 619241100,
647 "2": 257481510
648 },
649 "10": 1
650 },
651 {
652 "1": 2250,
653 "3": "FR",
654 "4": "France",
655 "8": {
656 "1": 462276380,
657 "2": 22137490
658 },
659 "10": 1
660 },
661 {
662 "1": 2258,
663 "3": "PF",
664 "4": "French Polynesia",
665 "8": {
666 "1": -176797420,
667 "2": -1494068430
668 },
669 "10": 1
670 },
671 {
672 "1": 2260,
673 "3": "TF",
674 "4": "French Southern and Antarctic Lands",
675 "8": {
676 "1": -492803660,
677 "2": 693485570
678 },
679 "10": 1
680 },
681 {
682 "1": 2266,
683 "3": "GA",
684 "4": "Gabon",
685 "8": {
686 "1": -8036890,
687 "2": 116094440
688 },
689 "10": 1
690 },
691 {
692 "1": 2268,
693 "3": "GE",
694 "4": "Georgia",
695 "8": {
696 "1": 423154070,
697 "2": 433568920
698 },
699 "10": 1
700 },
701 {
702 "1": 2276,
703 "3": "DE",
704 "4": "Germany",
705 "5": "Germany",
706 "8": {
707 "1": 511656910,
708 "2": 104515260
709 },
710 "10": 1
711 },
712 {
713 "1": 2288,
714 "3": "GH",
715 "4": "Ghana",
716 "8": {
717 "1": 79465270,
718 "2": -10231940
719 },
720 "10": 1
721 },
722 {
723 "1": 2300,
724 "3": "GR",
725 "4": "Greece",
726 "8": {
727 "1": 390742080,
728 "2": 218243120
729 },
730 "10": 1
731 },
732 {
733 "1": 2308,
734 "3": "GD",
735 "4": "Grenada",
736 "8": {
737 "1": 121165000,
738 "2": -616790000
739 },
740 "10": 1
741 },
742 {
743 "1": 2316,
744 "3": "GU",
745 "4": "Guam",
746 "8": {
747 "1": 133823791,
748 "2": 1446972774
749 },
750 "10": 1
751 },
752 {
753 "1": 2320,
754 "3": "GT",
755 "4": "Guatemala",
756 "8": {
757 "1": 157834710,
758 "2": -902307590
759 },
760 "10": 1
761 },
762 {
763 "1": 2831,
764 "3": "GG",
765 "4": "Guernsey",
766 "8": {
767 "1": 494481808,
768 "2": -25894685
769 },
770 "10": 1
771 },
772 {
773 "1": 2324,
774 "3": "GN",
775 "4": "Guinea",
776 "8": {
777 "1": 99455870,
778 "2": -96966450
779 },
780 "10": 1
781 },
782 {
783 "1": 2624,
784 "3": "GW",
785 "4": "Guinea-Bissau",
786 "8": {
787 "1": 118037490,
788 "2": -151804130
789 },
790 "10": 1
791 },
792 {
793 "1": 2328,
794 "3": "GY",
795 "4": "Guyana",
796 "8": {
797 "1": 48604160,
798 "2": -589301800
799 },
800 "10": 1
801 },
802 {
803 "1": 2332,
804 "3": "HT",
805 "4": "Haiti",
806 "8": {
807 "1": 189711870,
808 "2": -722852150
809 },
810 "10": 1
811 },
812 {
813 "1": 2334,
814 "3": "HM",
815 "4": "Heard Island and McDonald Islands",
816 "8": {
817 "1": -530818100,
818 "2": 735041580
819 },
820 "10": 1
821 },
822 {
823 "1": 2340,
824 "3": "HN",
825 "4": "Honduras",
826 "8": {
827 "1": 151999990,
828 "2": -862419050
829 },
830 "10": 1
831 },
832 {
833 "1": 2348,
834 "3": "HU",
835 "4": "Hungary",
836 "8": {
837 "1": 471624940,
838 "2": 195033040
839 },
840 "10": 1
841 },
842 {
843 "1": 2352,
844 "3": "IS",
845 "4": "Iceland",
846 "8": {
847 "1": 649630510,
848 "2": -190208350
849 },
850 "10": 1
851 },
852 {
853 "1": 2356,
854 "3": "IN",
855 "4": "India",
856 "8": {
857 "1": 205936840,
858 "2": 789628800
859 },
860 "10": 1
861 },
862 {
863 "1": 2360,
864 "3": "ID",
865 "4": "Indonesia",
866 "8": {
867 "1": -7892750,
868 "2": 1139213270
869 },
870 "10": 1
871 },
872 {
873 "1": 2368,
874 "3": "IQ",
875 "4": "Iraq",
876 "8": {
877 "1": 332231910,
878 "2": 436792910
879 },
880 "10": 1
881 },
882 {
883 "1": 2372,
884 "3": "IE",
885 "4": "Ireland",
886 "8": {
887 "1": 534129100,
888 "2": -82438900
889 },
890 "10": 1
891 },
892 {
893 "1": 2376,
894 "3": "IL",
895 "4": "Israel",
896 "8": {
897 "1": 310460510,
898 "2": 348516120
899 },
900 "10": 1
901 },
902 {
903 "1": 2380,
904 "3": "IT",
905 "4": "Italy",
906 "8": {
907 "1": 418719400,
908 "2": 125673800
909 },
910 "10": 1
911 },
912 {
913 "1": 2388,
914 "3": "JM",
915 "4": "Jamaica",
916 "8": {
917 "1": 181095810,
918 "2": -772975080
919 },
920 "10": 1
921 },
922 {
923 "1": 2392,
924 "3": "JP",
925 "4": "Japan",
926 "8": {
927 "1": 362048240,
928 "2": 1382529240
929 },
930 "10": 1
931 },
932 {
933 "1": 2832,
934 "3": "JE",
935 "4": "Jersey",
936 "8": {
937 "1": 492137711,
938 "2": -21357662
939 },
940 "10": 1
941 },
942 {
943 "1": 2400,
944 "3": "JO",
945 "4": "Jordan",
946 "8": {
947 "1": 305851640,
948 "2": 362384140
949 },
950 "10": 1
951 },
952 {
953 "1": 2398,
954 "3": "KZ",
955 "4": "Kazakhstan",
956 "8": {
957 "1": 480195730,
958 "2": 669236840
959 },
960 "10": 1
961 },
962 {
963 "1": 2404,
964 "3": "KE",
965 "4": "Kenya",
966 "8": {
967 "1": -235590,
968 "2": 379061930
969 },
970 "10": 1
971 },
972 {
973 "1": 2296,
974 "3": "KI",
975 "4": "Kiribati",
976 "8": {
977 "1": 14421300,
978 "2": 1729829763
979 },
980 "10": 1
981 },
982 {
983 "1": 2414,
984 "3": "KW",
985 "4": "Kuwait",
986 "8": {
987 "1": 293116600,
988 "2": 474817660
989 },
990 "10": 1
991 },
992 {
993 "1": 2417,
994 "3": "KG",
995 "4": "Kyrgyzstan",
996 "8": {
997 "1": 412043800,
998 "2": 747660980
999 },
1000 "10": 1
1001 },
1002 {
1003 "1": 2418,
1004 "3": "LA",
1005 "4": "Laos",
1006 "8": {
1007 "1": 198562700,
1008 "2": 1024954960
1009 },
1010 "10": 1
1011 },
1012 {
1013 "1": 2428,
1014 "3": "LV",
1015 "4": "Latvia",
1016 "8": {
1017 "1": 568796350,
1018 "2": 246031890
1019 },
1020 "10": 1
1021 },
1022 {
1023 "1": 2422,
1024 "3": "LB",
1025 "4": "Lebanon",
1026 "8": {
1027 "1": 338547210,
1028 "2": 358622850
1029 },
1030 "10": 1
1031 },
1032 {
1033 "1": 2426,
1034 "3": "LS",
1035 "4": "Lesotho",
1036 "8": {
1037 "1": -296099880,
1038 "2": 282336080
1039 },
1040 "10": 1
1041 },
1042 {
1043 "1": 2430,
1044 "3": "LR",
1045 "4": "Liberia",
1046 "8": {
1047 "1": 64280550,
1048 "2": -94294990
1049 },
1050 "10": 1
1051 },
1052 {
1053 "1": 2434,
1054 "3": "LY",
1055 "4": "Libya",
1056 "8": {
1057 "1": 263351000,
1058 "2": 172283310
1059 },
1060 "10": 1
1061 },
1062 {
1063 "1": 2438,
1064 "3": "LI",
1065 "4": "Liechtenstein",
1066 "8": {
1067 "1": 471410392,
1068 "2": 95209350
1069 },
1070 "10": 1
1071 },
1072 {
1073 "1": 2440,
1074 "3": "LT",
1075 "4": "Lithuania",
1076 "8": {
1077 "1": 551694380,
1078 "2": 238812750
1079 },
1080 "10": 1
1081 },
1082 {
1083 "1": 2442,
1084 "3": "LU",
1085 "4": "Luxembourg",
1086 "5": "Luxembourg",
1087 "8": {
1088 "1": 498152730,
1089 "2": 61295830
1090 },
1091 "10": 1
1092 },
1093 {
1094 "1": 2450,
1095 "3": "MG",
1096 "4": "Madagascar",
1097 "8": {
1098 "1": -187669470,
1099 "2": 468691070
1100 },
1101 "10": 1
1102 },
1103 {
1104 "1": 2454,
1105 "3": "MW",
1106 "4": "Malawi",
1107 "8": {
1108 "1": -132543080,
1109 "2": 343015250
1110 },
1111 "10": 1
1112 },
1113 {
1114 "1": 2458,
1115 "3": "MY",
1116 "4": "Malaysia",
1117 "8": {
1118 "1": 42104840,
1119 "2": 1019757660
1120 },
1121 "10": 1
1122 },
1123 {
1124 "1": 2462,
1125 "3": "MV",
1126 "4": "Maldives",
1127 "8": {
1128 "1": 32027780,
1129 "2": 732206800
1130 },
1131 "10": 1
1132 },
1133 {
1134 "1": 2470,
1135 "3": "MT",
1136 "4": "Malta",
1137 "8": {
1138 "1": 359374960,
1139 "2": 143754160
1140 },
1141 "10": 1
1142 },
1143 {
1144 "1": 2466,
1145 "3": "ML",
1146 "4": "Mali",
1147 "8": {
1148 "1": 175706920,
1149 "2": -39961660
1150 },
1151 "10": 1
1152 },
1153 {
1154 "1": 2584,
1155 "3": "MH",
1156 "4": "Marshall Islands",
1157 "8": {
1158 "1": 71314740,
1159 "2": 1711844780
1160 },
1161 "10": 1
1162 },
1163 {
1164 "1": 2478,
1165 "3": "MR",
1166 "4": "Mauritania",
1167 "8": {
1168 "1": 210078900,
1169 "2": -109408350
1170 },
1171 "10": 1
1172 },
1173 {
1174 "1": 2480,
1175 "3": "MU",
1176 "4": "Mauritius",
1177 "8": {
1178 "1": -203484040,
1179 "2": 575521520
1180 },
1181 "10": 1
1182 },
1183 {
1184 "1": 2484,
1185 "3": "MX",
1186 "4": "Mexico",
1187 "8": {
1188 "1": 236345010,
1189 "2": -1025527840
1190 },
1191 "10": 1
1192 },
1193 {
1194 "1": 2498,
1195 "3": "MD",
1196 "4": "Moldova",
1197 "8": {
1198 "1": 474116310,
1199 "2": 283698850
1200 },
1201 "10": 1
1202 },
1203 {
1204 "1": 2492,
1205 "3": "MC",
1206 "4": "Monaco",
1207 "8": {
1208 "1": 437384176,
1209 "2": 74246158
1210 },
1211 "10": 1
1212 },
1213 {
1214 "1": 2496,
1215 "3": "MN",
1216 "4": "Mongolia",
1217 "8": {
1218 "1": 468624960,
1219 "2": 1038466560
1220 },
1221 "10": 1
1222 },
1223 {
1224 "1": 2499,
1225 "3": "ME",
1226 "4": "Montenegro",
1227 "8": {
1228 "1": 427086780,
1229 "2": 193743900
1230 },
1231 "10": 1
1232 },
1233 {
1234 "1": 2504,
1235 "3": "MA",
1236 "4": "Morocco",
1237 "8": {
1238 "1": 317917020,
1239 "2": -70926200
1240 },
1241 "10": 1
1242 },
1243 {
1244 "1": 2508,
1245 "3": "MZ",
1246 "4": "Mozambique",
1247 "8": {
1248 "1": -186656950,
1249 "2": 355295620
1250 },
1251 "10": 1
1252 },
1253 {
1254 "1": 2104,
1255 "3": "MM",
1256 "4": "Myanmar (Burma)",
1257 "8": {
1258 "1": 219162210,
1259 "2": 959559740
1260 },
1261 "10": 1
1262 },
1263 {
1264 "1": 2516,
1265 "3": "NA",
1266 "4": "Namibia",
1267 "8": {
1268 "1": -229576400,
1269 "2": 184904100
1270 },
1271 "10": 1
1272 },
1273 {
1274 "1": 2520,
1275 "3": "NR",
1276 "4": "Nauru",
1277 "8": {
1278 "1": -5227780,
1279 "2": 1669315030
1280 },
1281 "10": 1
1282 },
1283 {
1284 "1": 2524,
1285 "3": "NP",
1286 "4": "Nepal",
1287 "8": {
1288 "1": 283948570,
1289 "2": 841240080
1290 },
1291 "10": 1
1292 },
1293 {
1294 "1": 2528,
1295 "3": "NL",
1296 "4": "Netherlands",
1297 "5": "Netherlands",
1298 "8": {
1299 "1": 521326330,
1300 "2": 52912660
1301 },
1302 "10": 1
1303 },
1304 {
1305 "1": 2540,
1306 "3": "NC",
1307 "4": "New Caledonia",
1308 "8": {
1309 "1": -209043050,
1310 "2": 1656180420
1311 },
1312 "10": 1
1313 },
1314 {
1315 "1": 2554,
1316 "3": "NZ",
1317 "4": "New Zealand",
1318 "8": {
1319 "1": -409005570,
1320 "2": 1748859710
1321 },
1322 "10": 1
1323 },
1324 {
1325 "1": 2558,
1326 "3": "NI",
1327 "4": "Nicaragua",
1328 "8": {
1329 "1": 128654160,
1330 "2": -852072290
1331 },
1332 "10": 1
1333 },
1334 {
1335 "1": 2562,
1336 "3": "NE",
1337 "4": "Niger",
1338 "8": {
1339 "1": 176077890,
1340 "2": 80816660
1341 },
1342 "10": 1
1343 },
1344 {
1345 "1": 2566,
1346 "3": "NG",
1347 "4": "Nigeria",
1348 "8": {
1349 "1": 90819990,
1350 "2": 86752770
1351 },
1352 "10": 1
1353 },
1354 {
1355 "1": 2570,
1356 "3": "NU",
1357 "4": "Niue",
1358 "8": {
1359 "1": -190544450,
1360 "2": -1698672330
1361 },
1362 "10": 1
1363 },
1364 {
1365 "1": 2574,
1366 "3": "NF",
1367 "4": "Norfolk Island",
1368 "8": {
1369 "1": -290408350,
1370 "2": 1679547120
1371 },
1372 "10": 1
1373 },
1374 {
1375 "1": 2807,
1376 "3": "MK",
1377 "4": "North Macedonia",
1378 "5": "North Macedonia",
1379 "8": {
1380 "1": 416086350,
1381 "2": 217452750
1382 },
1383 "10": 1
1384 },
1385 {
1386 "1": 2580,
1387 "3": "MP",
1388 "4": "Northern Mariana Islands",
1389 "8": {
1390 "1": 150979000,
1391 "2": 1456739000
1392 },
1393 "10": 1
1394 },
1395 {
1396 "1": 2578,
1397 "3": "NO",
1398 "4": "Norway",
1399 "8": {
1400 "1": 604720240,
1401 "2": 84689460
1402 },
1403 "10": 1
1404 },
1405 {
1406 "1": 2512,
1407 "3": "OM",
1408 "4": "Oman",
1409 "8": {
1410 "1": 214735329,
1411 "2": 559754130
1412 },
1413 "10": 1
1414 },
1415 {
1416 "1": 2586,
1417 "3": "PK",
1418 "4": "Pakistan",
1419 "8": {
1420 "1": 303753210,
1421 "2": 693451160
1422 },
1423 "10": 1
1424 },
1425 {
1426 "1": 2585,
1427 "3": "PW",
1428 "4": "Palau",
1429 "8": {
1430 "1": 75149800,
1431 "2": 1345825200
1432 },
1433 "10": 1
1434 },
1435 {
1436 "1": 2591,
1437 "3": "PA",
1438 "4": "Panama",
1439 "8": {
1440 "1": 85379810,
1441 "2": -807821270
1442 },
1443 "10": 1
1444 },
1445 {
1446 "1": 2598,
1447 "3": "PG",
1448 "4": "Papua New Guinea",
1449 "8": {
1450 "1": -63149930,
1451 "2": 1439555500
1452 },
1453 "10": 1
1454 },
1455 {
1456 "1": 2600,
1457 "3": "PY",
1458 "4": "Paraguay",
1459 "8": {
1460 "1": -234425030,
1461 "2": -584438320
1462 },
1463 "10": 1
1464 },
1465 {
1466 "1": 2604,
1467 "3": "PE",
1468 "4": "Peru",
1469 "8": {
1470 "1": -91899670,
1471 "2": -750151520
1472 },
1473 "10": 1
1474 },
1475 {
1476 "1": 2608,
1477 "3": "PH",
1478 "4": "Philippines",
1479 "8": {
1480 "1": 128797210,
1481 "2": 1217740170
1482 },
1483 "10": 1
1484 },
1485 {
1486 "1": 2612,
1487 "3": "PN",
1488 "4": "Pitcairn Islands",
1489 "8": {
1490 "1": -243767537,
1491 "2": -1283242376
1492 },
1493 "10": 1
1494 },
1495 {
1496 "1": 2616,
1497 "3": "PL",
1498 "4": "Poland",
1499 "8": {
1500 "1": 519194380,
1501 "2": 191451360
1502 },
1503 "10": 1
1504 },
1505 {
1506 "1": 2620,
1507 "3": "PT",
1508 "4": "Portugal",
1509 "8": {
1510 "1": 393998720,
1511 "2": -82244540
1512 },
1513 "10": 1
1514 },
1515 {
1516 "1": 2634,
1517 "3": "QA",
1518 "4": "Qatar",
1519 "8": {
1520 "1": 253548260,
1521 "2": 511838840
1522 },
1523 "10": 1
1524 },
1525 {
1526 "1": 2178,
1527 "3": "CG",
1528 "4": "Republic of the Congo",
1529 "8": {
1530 "1": -2280210,
1531 "2": 158276590
1532 },
1533 "10": 1
1534 },
1535 {
1536 "1": 2642,
1537 "3": "RO",
1538 "4": "Romania",
1539 "8": {
1540 "1": 459431610,
1541 "2": 249667600
1542 },
1543 "10": 1
1544 },
1545 {
1546 "1": 2646,
1547 "3": "RW",
1548 "4": "Rwanda",
1549 "8": {
1550 "1": -19402780,
1551 "2": 298738880
1552 },
1553 "10": 1
1554 },
1555 {
1556 "1": 2654,
1557 "3": "SH",
1558 "4": "Saint Helena, Ascension and Tristan da Cunha",
1559 "5": "St Helena, Ascension and Tristan da Cunha",
1560 "8": {
1561 "1": -159583317,
1562 "2": -57019989
1563 },
1564 "10": 1
1565 },
1566 {
1567 "1": 2659,
1568 "3": "KN",
1569 "4": "Saint Kitts and Nevis",
1570 "5": "St Kitts & Nevis",
1571 "8": {
1572 "1": 173578220,
1573 "2": -627829980
1574 },
1575 "10": 1
1576 },
1577 {
1578 "1": 2662,
1579 "3": "LC",
1580 "4": "Saint Lucia",
1581 "5": "St Lucia",
1582 "8": {
1583 "1": 139094440,
1584 "2": -609788930
1585 },
1586 "10": 1
1587 },
1588 {
1589 "1": 2666,
1590 "3": "PM",
1591 "4": "Saint Pierre and Miquelon",
1592 "5": "St Pierre and Miquelon",
1593 "8": {
1594 "1": 468852000,
1595 "2": -563159000
1596 },
1597 "10": 1
1598 },
1599 {
1600 "1": 2670,
1601 "3": "VC",
1602 "4": "Saint Vincent and the Grenadines",
1603 "5": "St Vincent and the Grenadines",
1604 "8": {
1605 "1": 129843050,
1606 "2": -612872280
1607 },
1608 "10": 1
1609 },
1610 {
1611 "1": 2882,
1612 "3": "WS",
1613 "4": "Samoa",
1614 "8": {
1615 "1": -137590290,
1616 "2": -1721046290
1617 },
1618 "10": 1
1619 },
1620 {
1621 "1": 2674,
1622 "3": "SM",
1623 "4": "San Marino",
1624 "8": {
1625 "1": 439423600,
1626 "2": 124577770
1627 },
1628 "10": 1
1629 },
1630 {
1631 "1": 2678,
1632 "3": "ST",
1633 "4": "Sao Tome and Principe",
1634 "8": {
1635 "1": 1863600,
1636 "2": 66130810
1637 },
1638 "10": 1
1639 },
1640 {
1641 "1": 2682,
1642 "3": "SA",
1643 "4": "Saudi Arabia",
1644 "8": {
1645 "1": 238859420,
1646 "2": 450791620
1647 },
1648 "10": 1
1649 },
1650 {
1651 "1": 2686,
1652 "3": "SN",
1653 "4": "Senegal",
1654 "8": {
1655 "1": 144974010,
1656 "2": -144523620
1657 },
1658 "10": 1
1659 },
1660 {
1661 "1": 2690,
1662 "3": "SC",
1663 "4": "Seychelles",
1664 "8": {
1665 "1": -46795740,
1666 "2": 554919770
1667 },
1668 "10": 1
1669 },
1670 {
1671 "1": 2694,
1672 "3": "SL",
1673 "4": "Sierra Leone",
1674 "8": {
1675 "1": 84605550,
1676 "2": -117798890
1677 },
1678 "10": 1
1679 },
1680 {
1681 "1": 2702,
1682 "3": "SG",
1683 "4": "Singapore",
1684 "8": {
1685 "1": 13520830,
1686 "2": 1038198360
1687 },
1688 "10": 1
1689 },
1690 {
1691 "1": 2534,
1692 "3": "SX",
1693 "4": "Sint Maarten",
1694 "8": {
1695 "1": 180424800,
1696 "2": -630548300
1697 },
1698 "10": 1
1699 },
1700 {
1701 "1": 2703,
1702 "3": "SK",
1703 "4": "Slovakia",
1704 "5": "Slovakia",
1705 "8": {
1706 "1": 486690260,
1707 "2": 196990240
1708 },
1709 "10": 1
1710 },
1711 {
1712 "1": 2705,
1713 "3": "SI",
1714 "4": "Slovenia",
1715 "8": {
1716 "1": 461512410,
1717 "2": 149954630
1718 },
1719 "10": 1
1720 },
1721 {
1722 "1": 2090,
1723 "3": "SB",
1724 "4": "Solomon Islands",
1725 "8": {
1726 "1": -96457100,
1727 "2": 1601561940
1728 },
1729 "10": 1
1730 },
1731 {
1732 "1": 2706,
1733 "3": "SO",
1734 "4": "Somalia",
1735 "8": {
1736 "1": 51521490,
1737 "2": 461996160
1738 },
1739 "10": 1
1740 },
1741 {
1742 "1": 2710,
1743 "3": "ZA",
1744 "4": "South Africa",
1745 "8": {
1746 "1": -305594820,
1747 "2": 229375060
1748 },
1749 "10": 1
1750 },
1751 {
1752 "1": 2239,
1753 "3": "GS",
1754 "4": "South Georgia and the South Sandwich Islands",
1755 "8": {
1756 "1": -544295790,
1757 "2": -365879090
1758 },
1759 "10": 1
1760 },
1761 {
1762 "1": 2410,
1763 "3": "KR",
1764 "4": "South Korea",
1765 "8": {
1766 "1": 359077570,
1767 "2": 1277669220
1768 },
1769 "10": 1
1770 },
1771 {
1772 "1": 2724,
1773 "3": "ES",
1774 "4": "Spain",
1775 "8": {
1776 "1": 404636670,
1777 "2": -37492200
1778 },
1779 "10": 1
1780 },
1781 {
1782 "1": 2144,
1783 "3": "LK",
1784 "4": "Sri Lanka",
1785 "8": {
1786 "1": 78730540,
1787 "2": 807717970
1788 },
1789 "10": 1
1790 },
1791 {
1792 "1": 2740,
1793 "3": "SR",
1794 "4": "Suriname",
1795 "8": {
1796 "1": 39193050,
1797 "2": -560277830
1798 },
1799 "10": 1
1800 },
1801 {
1802 "1": 2756,
1803 "3": "CH",
1804 "4": "Switzerland",
1805 "8": {
1806 "1": 468181880,
1807 "2": 82275120
1808 },
1809 "10": 1
1810 },
1811 {
1812 "1": 2752,
1813 "3": "SE",
1814 "4": "Sweden",
1815 "8": {
1816 "1": 601281610,
1817 "2": 186435010
1818 },
1819 "10": 1
1820 },
1821 {
1822 "1": 2762,
1823 "3": "TJ",
1824 "4": "Tajikistan",
1825 "8": {
1826 "1": 388610340,
1827 "2": 712760930
1828 },
1829 "10": 1
1830 },
1831 {
1832 "1": 2834,
1833 "3": "TZ",
1834 "4": "Tanzania",
1835 "8": {
1836 "1": -63690280,
1837 "2": 348888220
1838 },
1839 "10": 1
1840 },
1841 {
1842 "1": 2764,
1843 "3": "TH",
1844 "4": "Thailand",
1845 "8": {
1846 "1": 158700320,
1847 "2": 1009925410
1848 },
1849 "10": 1
1850 },
1851 {
1852 "1": 2044,
1853 "3": "BS",
1854 "4": "The Bahamas",
1855 "8": {
1856 "1": 250342800,
1857 "2": -773962800
1858 },
1859 "10": 1
1860 },
1861 {
1862 "1": 2270,
1863 "3": "GM",
1864 "4": "The Gambia",
1865 "8": {
1866 "1": 134431820,
1867 "2": -153101390
1868 },
1869 "10": 1
1870 },
1871 {
1872 "1": 2626,
1873 "3": "TL",
1874 "4": "Timor-Leste",
1875 "8": {
1876 "1": -88742170,
1877 "2": 1257275390
1878 },
1879 "10": 1
1880 },
1881 {
1882 "1": 2768,
1883 "3": "TG",
1884 "4": "Togo",
1885 "8": {
1886 "1": 86195430,
1887 "2": 8247820
1888 },
1889 "10": 1
1890 },
1891 {
1892 "1": 2772,
1893 "3": "TK",
1894 "4": "Tokelau",
1895 "8": {
1896 "1": -92002000,
1897 "2": -1718484000
1898 },
1899 "10": 1
1900 },
1901 {
1902 "1": 2776,
1903 "3": "TO",
1904 "4": "Tonga",
1905 "8": {
1906 "1": -211789860,
1907 "2": -1751982420
1908 },
1909 "10": 1
1910 },
1911 {
1912 "1": 2780,
1913 "3": "TT",
1914 "4": "Trinidad and Tobago",
1915 "8": {
1916 "1": 106918030,
1917 "2": -612225030
1918 },
1919 "10": 1
1920 },
1921 {
1922 "1": 2788,
1923 "3": "TN",
1924 "4": "Tunisia",
1925 "8": {
1926 "1": 338869170,
1927 "2": 95374990
1928 },
1929 "10": 1
1930 },
1931 {
1932 "1": 2792,
1933 "3": "TR",
1934 "4": "Turkiye",
1935 "5": "Türkiye",
1936 "8": {
1937 "1": 389637450,
1938 "2": 352433220
1939 },
1940 "10": 1
1941 },
1942 {
1943 "1": 2795,
1944 "3": "TM",
1945 "4": "Turkmenistan",
1946 "8": {
1947 "1": 389697190,
1948 "2": 595562780
1949 },
1950 "10": 1
1951 },
1952 {
1953 "1": 2798,
1954 "3": "TV",
1955 "4": "Tuvalu",
1956 "8": {
1957 "1": -71095350,
1958 "2": 1776493300
1959 },
1960 "10": 1
1961 },
1962 {
1963 "1": 2800,
1964 "3": "UG",
1965 "4": "Uganda",
1966 "8": {
1967 "1": 13733330,
1968 "2": 322902750
1969 },
1970 "10": 1
1971 },
1972 {
1973 "1": 2804,
1974 "3": "UA",
1975 "4": "Ukraine",
1976 "8": {
1977 "1": 483794330,
1978 "2": 311655800
1979 },
1980 "10": 1
1981 },
1982 {
1983 "1": 2784,
1984 "3": "AE",
1985 "4": "United Arab Emirates",
1986 "8": {
1987 "1": 234240760,
1988 "2": 538478180
1989 },
1990 "10": 1
1991 },
1992 {
1993 "1": 2826,
1994 "3": "GB",
1995 "4": "United Kingdom",
1996 "8": {
1997 "1": 553780510,
1998 "2": -34359730
1999 },
2000 "10": 1
2001 },
2002 {
2003 "1": 2840,
2004 "3": "US",
2005 "4": "United States",
2006 "5": "United States",
2007 "8": {
2008 "1": 387945952,
2009 "2": -1065348379
2010 },
2011 "10": 1
2012 },
2013 {
2014 "1": 2858,
2015 "3": "UY",
2016 "4": "Uruguay",
2017 "8": {
2018 "1": -325227790,
2019 "2": -557658350
2020 },
2021 "10": 1
2022 },
2023 {
2024 "1": 2860,
2025 "3": "UZ",
2026 "4": "Uzbekistan",
2027 "8": {
2028 "1": 413774910,
2029 "2": 645852620
2030 },
2031 "10": 1
2032 },
2033 {
2034 "1": 2548,
2035 "3": "VU",
2036 "4": "Vanuatu",
2037 "5": "Vanuatu",
2038 "8": {
2039 "1": -153767060,
2040 "2": 1669591580
2041 },
2042 "10": 1
2043 },
2044 {
2045 "1": 2336,
2046 "3": "VA",
2047 "4": "Vatican City",
2048 "5": "Vatican City",
2049 "8": {
2050 "1": 419029160,
2051 "2": 124533890
2052 },
2053 "10": 1
2054 },
2055 {
2056 "1": 2862,
2057 "3": "VE",
2058 "4": "Venezuela",
2059 "8": {
2060 "1": 64237500,
2061 "2": -665897300
2062 },
2063 "10": 1
2064 },
2065 {
2066 "1": 2704,
2067 "3": "VN",
2068 "4": "Vietnam",
2069 "8": {
2070 "1": 140583240,
2071 "2": 1082771990
2072 },
2073 "10": 1
2074 },
2075 {
2076 "1": 2887,
2077 "3": "YE",
2078 "4": "Yemen",
2079 "8": {
2080 "1": 155527270,
2081 "2": 485163880
2082 },
2083 "10": 1
2084 },
2085 {
2086 "1": 2894,
2087 "3": "ZM",
2088 "4": "Zambia",
2089 "8": {
2090 "1": -131338970,
2091 "2": 278493320
2092 },
2093 "10": 1
2094 },
2095 {
2096 "1": 2716,
2097 "3": "ZW",
2098 "4": "Zimbabwe",
2099 "8": {
2100 "1": -190154380,
2101 "2": 291548570
2102 },
2103 "10": 1
2104 },
2105 {
2106 "1": 2060,
2107 "3": "BM",
2108 "4": "Bermuda",
2109 "8": {
2110 "1": 323078000,
2111 "2": -647505000
2112 },
2113 "10": 2
2114 },
2115 {
2116 "1": 2074,
2117 "3": "BV",
2118 "4": "Bouvet Island",
2119 "8": {
2120 "1": -544231990,
2121 "2": 34131940
2122 },
2123 "10": 2
2124 },
2125 {
2126 "1": 2086,
2127 "3": "IO",
2128 "4": "British Indian Ocean Territory",
2129 "8": {
2130 "1": -63431940,
2131 "2": 718765190
2132 },
2133 "10": 2
2134 },
2135 {
2136 "1": 2092,
2137 "3": "VG",
2138 "4": "British Virgin Islands",
2139 "8": {
2140 "1": 184206950,
2141 "2": -646399680
2142 },
2143 "10": 2
2144 },
2145 {
2146 "1": 20277,
2147 "3": "IC",
2148 "4": "Canary Islands",
2149 "5": "Canary Islands",
2150 "8": {
2151 "1": 282915637,
2152 "2": -166291304
2153 },
2154 "10": 5
2155 },
2156 {
2157 "1": 2136,
2158 "3": "KY",
2159 "4": "Cayman Islands",
2160 "8": {
2161 "1": 193133000,
2162 "2": -812546000
2163 },
2164 "10": 2
2165 },
2166 {
2167 "1": 2158,
2168 "3": "TW",
2169 "4": "Taiwan",
2170 "8": {
2171 "1": 236978100,
2172 "2": 1209605150
2173 },
2174 "10": 2
2175 },
2176 {
2177 "1": 2175,
2178 "3": "YT",
2179 "4": "Mayotte",
2180 "8": {
2181 "1": -128275000,
2182 "2": 451662440
2183 },
2184 "10": 2
2185 },
2186 {
2187 "1": 2234,
2188 "3": "FO",
2189 "4": "Faroe Islands",
2190 "8": {
2191 "1": 618926350,
2192 "2": -69118060
2193 },
2194 "10": 2
2195 },
2196 {
2197 "1": 2238,
2198 "3": "FK",
2199 "4": "Falkland Islands (Islas Malvinas)",
2200 "8": {
2201 "1": -517962530,
2202 "2": -595236130
2203 },
2204 "10": 2
2205 },
2206 {
2207 "1": 2254,
2208 "3": "GF",
2209 "4": "French Guiana",
2210 "8": {
2211 "1": 39338890,
2212 "2": -531257820
2213 },
2214 "10": 2
2215 },
2216 {
2217 "1": 2275,
2218 "3": "PS",
2219 "4": "Palestine",
2220 "5": "Palestine",
2221 "8": {
2222 "1": 319521620,
2223 "2": 352331540
2224 },
2225 "10": 2
2226 },
2227 {
2228 "1": 2292,
2229 "3": "GI",
2230 "4": "Gibraltar",
2231 "8": {
2232 "1": 361407510,
2233 "2": -53535850
2234 },
2235 "10": 2
2236 },
2237 {
2238 "1": 2304,
2239 "3": "GL",
2240 "4": "Greenland",
2241 "8": {
2242 "1": 717069360,
2243 "2": -426043030
2244 },
2245 "10": 2
2246 },
2247 {
2248 "1": 2312,
2249 "3": "GP",
2250 "4": "Guadeloupe",
2251 "8": {
2252 "1": 162650000,
2253 "2": -615510000
2254 },
2255 "10": 2
2256 },
2257 {
2258 "1": 2344,
2259 "3": "HK",
2260 "4": "Hong Kong",
2261 "8": {
2262 "1": 223193039,
2263 "2": 1141693611
2264 },
2265 "10": 2
2266 },
2267 {
2268 "1": 2833,
2269 "3": "IM",
2270 "4": "Isle of Man",
2271 "8": {
2272 "1": 542361070,
2273 "2": -45480560
2274 },
2275 "10": 1
2276 },
2277 {
2278 "1": 2446,
2279 "3": "MO",
2280 "4": "Macao",
2281 "5": "Macao",
2282 "8": {
2283 "1": 221987450,
2284 "2": 1135438730
2285 },
2286 "10": 2
2287 },
2288 {
2289 "1": 2474,
2290 "3": "MQ",
2291 "4": "Martinique",
2292 "8": {
2293 "1": 146415280,
2294 "2": -610241740
2295 },
2296 "10": 2
2297 },
2298 {
2299 "1": 2500,
2300 "3": "MS",
2301 "4": "Montserrat",
2302 "8": {
2303 "1": 167424980,
2304 "2": -621873660
2305 },
2306 "10": 2
2307 },
2308 {
2309 "1": 2533,
2310 "3": "AW",
2311 "4": "Aruba",
2312 "8": {
2313 "1": 125211100,
2314 "2": -699683380
2315 },
2316 "10": 2
2317 },
2318 {
2319 "1": 2630,
2320 "3": "PR",
2321 "4": "Puerto Rico",
2322 "8": {
2323 "1": 182208330,
2324 "2": -665901490
2325 },
2326 "10": 2
2327 },
2328 {
2329 "1": 2638,
2330 "3": "RE",
2331 "4": "Reunion",
2332 "5": "Réunion",
2333 "8": {
2334 "1": -211151410,
2335 "2": 555363840
2336 },
2337 "10": 2
2338 },
2339 {
2340 "1": 2660,
2341 "3": "AI",
2342 "4": "Anguilla",
2343 "8": {
2344 "1": 182205540,
2345 "2": -630686150
2346 },
2347 "10": 2
2348 },
2349 {
2350 "1": 2732,
2351 "3": "EH",
2352 "4": "Western Sahara",
2353 "8": {
2354 "1": 242155270,
2355 "2": -128858340
2356 },
2357 "10": 2
2358 },
2359 {
2360 "1": 2663,
2361 "3": "MF",
2362 "4": "Saint Martin",
2363 "5": "St Martin",
2364 "8": {
2365 "1": 180825500,
2366 "2": -630522510
2367 },
2368 "10": 1
2369 },
2370 {
2371 "1": 2744,
2372 "3": "SJ",
2373 "4": "Svalbard and Jan Mayen",
2374 "8": {
2375 "1": 775536040,
2376 "2": 236702720
2377 },
2378 "10": 2
2379 },
2380 {
2381 "1": 2796,
2382 "3": "TC",
2383 "4": "Turks and Caicos Islands",
2384 "8": {
2385 "1": 216940250,
2386 "2": -717979280
2387 },
2388 "10": 2
2389 },
2390 {
2391 "1": 2581,
2392 "3": "UM",
2393 "4": "United States Minor Outlying Islands",
2394 "8": {
2395 "1": 192823192,
2396 "2": 1666470470
2397 },
2398 "10": 1
2399 },
2400 {
2401 "1": 2850,
2402 "3": "VI",
2403 "4": "U.S. Virgin Islands",
2404 "5": "U.S. Virgin Islands",
2405 "8": {
2406 "1": 183357650,
2407 "2": -648963350
2408 },
2409 "10": 2
2410 },
2411 {
2412 "1": 2876,
2413 "3": "WF",
2414 "4": "Wallis and Futuna",
2415 "8": {
2416 "1": -142938000,
2417 "2": -1781165000
2418 },
2419 "10": 1
2420 }
2421 ]
2422 }
2423}
src/search_advertiser_creatives.js
1import { processCreativeDetails } from "./get_creative_details.js";
2import { fetchWithProxyRotation } from "./fetchWithProxyRotation.js";
3
4export async function searchForAds(
5 advertiserId,
6 RegionCode = null,
7 format,
8 dateRange,
9 platform,
10 limitResults = null,
11 isPolitical
12) {
13 let selectedRegion;
14 let nextPageToken = null;
15 const isDomain = advertiserId.includes(".");
16 const adjustedLimit = limitResults ? Math.min(limitResults, 100) : 40; // Max limit 100, default 40
17 let allResults = [];
18
19 do {
20 const requestPayload = isPolitical
21 ? {
22 "2": adjustedLimit,
23 "3": {
24 "1": advertiserId,
25 ...(format !== 0 && { "4": format }),
26 ...(RegionCode && { "8": [RegionCode] }),
27 "12": { "1": "", "2": true },
28 ...(platform && { "14": [platform] })
29 },
30 "6": { "1": 3, "2": true },
31 "7": { "1": 2, "2": 30, "3": selectedRegion || 1 }
32 }
33 : isDomain
34 ? {
35 "2": adjustedLimit,
36 "3": {
37 ...(format !== 0 && { "4": format }),
38 ...(RegionCode && { "8": [RegionCode] }),
39 "12": { "1": advertiserId, "2": true },
40 ...(platform && { "14": [platform] })
41 },
42 "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
43 }
44 : {
45 "2": adjustedLimit,
46 "3": {
47 ...(format !== 0 && { "4": format }),
48 ...(RegionCode && { "8": [RegionCode] }),
49 "12": { "1": "", "2": true },
50 "13": { "1": [advertiserId] },
51 ...(platform && { "14": [platform] })
52 },
53 "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
54 };
55
56 if (!dateRange?.anyTime) {
57 requestPayload["3"]["6"] = dateRange.fromDate;
58 requestPayload["3"]["7"] = dateRange.toDate;
59 }
60
61 if (nextPageToken) {
62 requestPayload["4"] = nextPageToken;
63 }
64
65 const postData = new URLSearchParams({
66 "f.req": JSON.stringify(requestPayload)
67 }).toString();
68
69 const options = {
70 hostname: "adstransparency.google.com",
71 path: "/anji/_/rpc/SearchService/SearchCreatives?authuser=0",
72 method: "POST",
73 headers: {
74 "Content-Type": "application/x-www-form-urlencoded",
75 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
76 "Connection": "keep-alive",
77 "Content-Length": Buffer.byteLength(String(postData)),
78 }
79 };
80
81 try {
82 // Fetch with proxy rotation
83 const jsonResponse = await fetchWithProxyRotation(options, postData, 5);
84
85 if (jsonResponse?.data) {
86 let parsedResponse;
87 try {
88 parsedResponse = JSON.parse(jsonResponse.data);
89 } catch (error) {
90 console.error("❌ JSON Parsing Error:", error.message);
91 throw new Error(`Invalid JSON response: ${jsonResponse.data}`);
92 }
93
94 if (!parsedResponse || typeof parsedResponse !== "object") {
95 throw new Error("Invalid JSON response");
96 }
97
98 if (parsedResponse["1"]) {
99 allResults = allResults.concat(parsedResponse["1"]);
100 await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
101 }
102
103 nextPageToken = parsedResponse["2"] || null;
104 console.log(`🔹 Next Page Token: ${nextPageToken ? nextPageToken : "None"}`);
105 }
106 } catch (error) {
107 console.error(`❌ Request failed: ${error.message}`);
108 return allResults; // Return what was collected before failure
109 }
110
111 if (limitResults && allResults.length >= limitResults) {
112 console.log(`✅ Limit reached: Returning first ${limitResults} results.`);
113 return allResults.slice(0, limitResults);
114 }
115 } while (nextPageToken);
116
117 console.log(`✅ Total results fetched for ${advertiserId}: ${allResults.length}`);
118 return allResults;
119}
src/search_for_an_ads.js
1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10 const match = url.match(/advertiser\/(AR\d+)/);
11 return match ? match[1] : null;
12}
13
14export async function searchForAdsList(keyword_domain_advertiserid, maxAdvertisers, maxDomains, RegionCode = null, format, dateRange, platform, limitResults, domainExists) {
15 let advertiserid_domain = []; // Store valid advertiser IDs
16 let keywords_domains = []; // Store non-advertiser keywords_domains
17
18 console.log('domain Exists', domainExists);
19
20 // Normalize input into an array
21 const inputList = Array.isArray(keyword_domain_advertiserid) ? keyword_domain_advertiserid : [keyword_domain_advertiserid];
22
23 // Validate each item
24 inputList.forEach(item => {
25 if (typeof item !== "string") return;
26
27 let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
28
29 if (advertiserIdPattern.test(extractedId)|| domainExists) {
30 advertiserid_domain.push(extractedId); // Store advertiser ID and domains
31 } else {
32 keywords_domains.push(item); // Treat as a keyword/domain
33 }
34 });
35
36 // If advertiser IDs exist OR domainExists is true, process them immediately and SKIP API request
37 if (advertiserid_domain.length > 0 || domainExists) {
38 console.log(`🚀 Processing advertiser IDs directly (domainExists: ${domainExists}):`, advertiserid_domain);
39 const adPromises = advertiserid_domain.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults));
40 const adResults = await Promise.all(adPromises);
41 }
42
43
44 // If no keywords_domains exist, return no data (avoids unnecessary request)
45 if (keywords_domains.length === 0) {
46 console.warn(`⚠️ No valid keywords_domains found. Skipping API request.`);
47 return { message: "No data", keyword_domain_advertiserid };
48 }
49
50 console.log(`📡 Sending API request for keywords_domains:`, keywords_domains);
51
52 // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
53 const requestPayload = {
54 "1": keywords_domains.length === 1 ? keywords_domains[0] : keywords_domains,
55 "2": maxAdvertisers,
56 "3": maxDomains,
57 "4": RegionCode ? [RegionCode] : []
58 };
59
60 console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
61
62 const postData = new URLSearchParams({
63 "f.req": JSON.stringify(requestPayload)
64 }).toString();
65
66 const agent = new https.Agent({ keepAlive: true });
67 const options = {
68 agent,
69 hostname: "adstransparency.google.com",
70 path: "/anji/_/rpc/SearchService/SearchSuggestions?authuser=0",
71 method: "POST",
72 headers: {
73 "Content-Type": "application/x-www-form-urlencoded",
74 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
75 "Connection": "keep-alive",
76 "Content-Length": Buffer.byteLength(String(postData)),
77 }
78 };
79
80 return new Promise((resolve, reject) => {
81 const req = https.request(options, (res) => {
82 let data = "";
83
84 res.on("data", (chunk) => (data += chunk));
85
86 res.on("end", async () => {
87 if (res.statusCode >= 400) {
88 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
89 return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
90 }
91 // Check for CAPTCHA or blocking
92 if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
93 console.error("❌ CAPTCHA or Block Detected: Google has blocked the request.");
94 reject(new Error("CAPTCHA detected or request blocked by Google."));
95 return;
96 }
97 try {
98 const jsonResponse = JSON.parse(data);
99 const promises = [];
100 //console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
101
102 // Ensure jsonResponse["1"] is an array before processing
103 if (Array.isArray(jsonResponse["1"])) {
104 promises.push(...jsonResponse["1"].map(async (item) => {
105 let advertiserId = null;
106
107 if (item["1"] && item["1"]["2"]) {
108 advertiserId = item["1"]["2"];
109 } else if (item["2"] && item["2"]["1"]) {
110 advertiserId = item["2"]["1"];
111 }
112
113 return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults) : null;
114 }));
115 }
116
117 // Wait for all promises to resolve
118 const allResults = await Promise.all(promises);
119 const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
120 resolve(creativeDetails.flat().filter(Boolean));
121
122 } catch (error) {
123 console.error("❌ JSON Parsing Error:", error);
124 reject(error);
125 }
126 });
127 });
128
129 req.on("error", (err) => {
130 console.error("❌ Request Error:", err.message);
131 reject(err);
132 });
133
134 req.write(postData);
135 req.end();
136 });
137}
src/search_for_an_political_ads.js
1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10 const match = url.match(/advertiser\/(AR\d+)/);
11 return match ? match[1] : null;
12}
13
14export async function searchForPoliticalAdsList(keyword_advertiserid, maxAdvertisers, RegionCode = null, format, dateRange, platform, limitResults) {
15 let advertiserid = []; // Store valid advertiser IDs
16 let key_advid = []; // Store non-advertiser keyword or advertiserid
17 let isPolitical = true
18 // Normalize input into an array
19 const inputList = Array.isArray(keyword_advertiserid) ? keyword_advertiserid : [keyword_advertiserid];
20
21 // Validate each item
22 inputList.forEach(item => {
23 if (typeof item !== "string") return;
24
25 let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
26
27 if (advertiserIdPattern.test(extractedId)) {
28 advertiserid.push(extractedId); // Store advertiser ID
29 } else {
30 key_advid.push(item); // Treat as a keyword
31 }
32 });
33
34 // If advertiser IDs exist, process it immediately and SKIP API request
35 if (advertiserid.length > 0) {
36 console.log(`🚀 Processing advertiser IDs directly :`, advertiserid);
37 const adPromises = advertiserid.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults, isPolitical));
38 const adResults = await Promise.all(adPromises);
39 const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
40 return creativeDetails.flat().filter(Boolean);
41 }
42
43 // If no keyword or advertiserid exist, return no data (avoids unnecessary request)
44 if (key_advid.length === 0) {
45 console.warn(`⚠️ No valid keyword or advertiserid found. Skipping API request.`);
46 return { message: "No data", keyword_advertiserid };
47 }
48
49 console.log(`📡 Sending API request for keyword or advertiserid:`, key_advid);
50
51 // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
52 const requestPayload = {
53 "2": maxAdvertisers,
54 "4": {
55 "2": RegionCode ? [RegionCode] : [],
56 "3": Array.isArray(key_advid) ? key_advid.join(",") : key_advid // Ensure a string
57 },
58 "7": {
59 "1": 2
60 }
61 };
62
63 console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
64 const postData = new URLSearchParams({
65 "f.req": JSON.stringify(requestPayload)
66 }).toString();
67
68 const agent = new https.Agent({ keepAlive: true });
69 const options = {
70 agent,
71 hostname: "adstransparency.google.com",
72 path: "/anji/_/rpc/SearchService/SearchAdvertisers?authuser=0",
73 method: "POST",
74 headers: {
75 "Content-Type": "application/x-www-form-urlencoded",
76 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77 "Connection": "keep-alive",
78 "Content-Length": Buffer.byteLength(String(postData)),
79 }
80 };
81
82 return new Promise((resolve, reject) => {
83 const req = https.request(options, (res) => {
84 let data = "";
85
86 res.on("data", (chunk) => (data += chunk));
87
88 res.on("end", async () => {
89 if (res.statusCode >= 400) {
90 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91 return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92 }
93 // Check for CAPTCHA or blocking
94 if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
95 console.error("❌ CAPTCHA or Block Detected: Google has blocked the request.");
96 reject(new Error("CAPTCHA detected or request blocked by Google."));
97 return;
98 }
99 try {
100 const jsonResponse = JSON.parse(data);
101 const promises = [];
102
103 console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
104 // Ensure jsonResponse["1"] is an array before processing
105 if (Array.isArray(jsonResponse["1"])) {
106 promises.push(...jsonResponse["1"].map(async (item) => {
107 let advertiserId = null;
108
109 // New response format handling
110 if (item["1"]) {
111 advertiserId = item["1"];
112 }
113
114 return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults, isPolitical ) : null;
115 }));
116 }
117
118 // Wait for all promises to resolve
119 const allResults = await Promise.all(promises);
120 const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
121 resolve(creativeDetails.flat().filter(Boolean));
122
123 } catch (error) {
124 console.error("❌ JSON Parsing Error:", error);
125 reject(error);
126 }
127 });
128 });
129
130 req.on("error", (err) => {
131 console.error("❌ Request Error:", err.message);
132 reject(err);
133 });
134
135 req.write(postData);
136 req.end();
137 });
138}
src0/filterAdvertiser.js
1import { Dataset } from 'crawlee';
2import { getDateRange } from './getDateRange.js';
3import { searchForAdsList } from './search_for_an_ads.js';
4import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
5
6
7export const filterAdvertiser = async (kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults,domainExists) => {
8 const parsedData = parseAdvertiserUrl(kw);
9 try {
10 const filterData = Use_URL_Filter
11 ? {
12 advertiserId_OR_kw: parsedData.advertiserId_domain,
13 maxDomains,
14 maxAdvertisers,
15 RegionCode: parsedData.RegionCode,
16 format: parseInt(parsedData.format),
17 dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
18 platform: parseInt(parsedData.platform),
19 startDate: parsedData.startDate,
20 endDate: parsedData.endDate,
21 limitResults,
22 domainExists : parsedData.domainExists
23 }
24 : {
25 advertiserId_OR_kw: parsedData.advertiserId_domain,
26 maxDomains,
27 maxAdvertisers,
28 RegionCode,
29 format: parseInt(format),
30 platform: parseInt(platform),
31 dateRange: getDateRange(presetDate, startDate, endDate),
32 startDate,
33 endDate,
34 limitResults,
35 domainExists
36 };
37
38 //console.log(Use_URL_Filter ? 'If Use_URL_Filter is true, override input filter:' : 'Use Actor.getInput() filtering:', filterData);
39
40 let adsData = await searchForAdsList(
41 parsedData.advertiserId_domain,
42 maxAdvertisers,
43 maxDomains,
44 Use_URL_Filter ? parsedData.RegionCode : RegionCode,
45 parseInt(Use_URL_Filter ? parsedData.format : format),
46 getDateRange(Use_URL_Filter ? parsedData.presetDate : presetDate, Use_URL_Filter ? parsedData.startDate : startDate, Use_URL_Filter ? parsedData.endDate : endDate),
47 parseInt(Use_URL_Filter ? parsedData.platform : platform),
48 limitResults,
49 parsedData.domainExists
50 );
51
52 await Dataset.pushData({ advertiserId_OR_kw1: parsedData.advertiserId_domain, adsData });
53 } catch (error) {
54 console.error(`❌ Error processing advertiser ID "${parsedData.advertiserId_domain}":`, error);
55 }
56};
src0/getDateRange.js
1import dayjs from 'dayjs';
2
3function validateCustomDates(Start_Date, End_Date) {
4 const isValidDate = (date) => /^\d{4}-\d{2}-\d{2}$/.test(date);
5
6 let fromDate = isValidDate(Start_Date) ? parseInt(Start_Date.replace(/-/g, ""), 10) : null;
7 let toDate = isValidDate(End_Date) ? parseInt(End_Date.replace(/-/g, ""), 10) : null;
8
9 if (fromDate && toDate) {
10 if (fromDate > toDate) {
11 console.error("❌ Error: Start_Date cannot be after End_Date.");
12 return null; // Do not return error, let it fall back to default
13 }
14 return { fromDate, toDate, anyTime: false, dateRangeLabel: "Custom Range" };
15 }
16
17 if ((Start_Date && !isValidDate(Start_Date)) || (End_Date && !isValidDate(End_Date))) {
18 console.error("❌ Error: Invalid date format. Expected YYYY-MM-DD. Falling back to default values.");
19 return null; // Do not return error, let it fall back to default
20 }
21
22 return null;
23}
24
25export function getDateRange(days, Start_Date, End_Date) {
26 let customDateRange = validateCustomDates(Start_Date, End_Date);
27 if (customDateRange) return customDateRange;
28
29 let yesterday = parseInt(dayjs().subtract(1, "day").format("YYYYMMDD"), 10);
30 let defaultToDate = yesterday;
31 let defaultFromDate;
32 let anyTime = false;
33 let dateRangeLabel = "";
34
35 if (days === "0") {
36 defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
37 dateRangeLabel = "Today";
38 } else if (days === "1") {
39 defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
40 dateRangeLabel = "Yesterday";
41 } else if (days === "7") {
42 defaultFromDate = parseInt(dayjs().subtract(8, "day").format("YYYYMMDD"), 10);
43 dateRangeLabel = "Last 7 days";
44 } else if (days === "30") {
45 defaultFromDate = parseInt(dayjs().subtract(31, "day").format("YYYYMMDD"), 10);
46 dateRangeLabel = "Last 30 days";
47 } else if (days === "-1") {
48 dateRangeLabel = "Any time";
49 return { anyTime: true, dateRangeLabel };
50 } else {
51 return null;
52 }
53
54 return { fromDate: defaultFromDate, toDate: defaultToDate, anyTime, dateRangeLabel };
55}
src0/get_creative_details.js
1import https from "https";
2import pLimit from "p-limit";
3import { processAds } from "./processAds.js"; // Import function
4
5/**
6 * Function to get creative details by ID
7 * @param {string} creativeId - The creative ID to fetch details for
8 * @param {string} advertiserId - The advertiser ID associated with the creative
9 * @param {number} regionCode - The region code (default is worldwide: 2012)
10 * @returns {Promise<Object>} - The creative details
11 */
12export async function getCreativeDetails(creativeId, advertiserId, regionCode = null) {
13 //const startTime = performance.now();
14 const requestPayload = {
15 "1": advertiserId,
16 "2": creativeId,
17 "5": {
18 "1": 1, // Page number
19 "2": 30, // Page size
20 "3": 2012
21 //"3": regionCode ? [regionCode] : [] // Region filter
22 }
23 };
24
25 const postData = new URLSearchParams({
26 "f.req": JSON.stringify(requestPayload)
27 }).toString();
28 const agent = new https.Agent({ keepAlive: true });
29
30 const options = {
31 agent, // Reuse connections
32 hostname: "adstransparency.google.com",
33 path: "/anji/_/rpc/LookupService/GetCreativeById?authuser=0",
34 method: "POST",
35 headers: {
36 "Content-Type": "application/x-www-form-urlencoded",
37 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
38 "Connection": "keep-alive",
39 "Content-Length": Buffer.byteLength(String(postData)),
40 }
41 };
42
43 return new Promise((resolve, reject) => {
44 const req = https.request(options, (res) => {
45 let data = "";
46
47 //console.log(`get_creative_details - 🔹 Status Code: ${res.statusCode}`);
48
49 res.on("data", (chunk) => {
50 data += chunk;
51 });
52
53 res.on("end", () => {
54
55 //const endTime = performance.now();
56 //console.log(`⏳ Creative ID ${creativeId} took ${(endTime - startTime).toFixed(2)} ms`);
57
58 if (res.statusCode >= 400) {
59 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
60 //console.log(`${res.statusCode}: ${JSON.stringify(requestPayload, null, 2)}`);
61 reject(new Error(`HTTP ${res.statusCode}: ${data}`));
62 } else {
63 try {
64 const parsedResponse = JSON.parse(data);
65 console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
66 resolve(parsedResponse);
67 } catch (error) {
68 console.error("❌ JSON Parsing Error:", error);
69 reject(error);
70 }
71 }
72 });
73 });
74
75 req.on("error", (err) => {
76 console.error("❌ Request Error:", err.message);
77 reject(err);
78 });
79
80 req.write(postData);
81 req.end();
82 });
83}
84
85/**
86 * Function to process allResults and fetch creative details
87 * @param {Array<Object>} allResults - The array of results from searchForAds
88 * @param {number} regionCode - The region code (default is worldwide: 2012)
89 * @returns {Promise<Array<Object>>} - Array of creative details
90 */
91
92const limit = pLimit(2); // Limit to 5 concurrent requests
93
94export async function processCreativeDetails(allResults, regionCode = 2012) {
95 const results = await Promise.allSettled(
96 allResults.map((result) => {
97 if (result["2"]) {
98 return getCreativeDetails(result["2"], result["1"], regionCode);
99 }
100 return null;
101 })
102 );
103
104 // Extract only successful responses
105 const fulfilledResults = results
106 .filter((res) => res.status === "fulfilled")
107 .map((res) => res.value);
108
109 console.log(`✅ Successfully fetched ${fulfilledResults.length} creative details.`);
110
111 // Send data to processAds.js for formatting
112 //return fulfilledResults;
113 return processAds(fulfilledResults);
114}
src0/main.js
1const startTime = performance.now();
2import { Actor } from 'apify';
3import { Dataset } from 'crawlee';
4import { getDateRange } from './getDateRange.js';
5import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
6import { searchForAdsList } from './search_for_an_ads.js';
7import { searchForPoliticalAdsList } from './search_for_an_political_ads.js';
8import { filterAdvertiser } from './filterAdvertiser.js';
9import fs from 'fs';
10
11await Actor.init();
12
13// Load and parse input parameters
14const input = await Actor.getInput() ?? {};
15const {
16 keyword_domain_advertiserid,
17 maxAdvertisers,
18 maxDomains,
19 region,
20 format,
21 platform,
22 presetDate,
23 startDate,
24 endDate,
25 Use_URL_Filter,
26 limitResults,
27 isPolitical
28} = input;
29
30// Load regions.json and resolve region code
31const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
32const regionEntry = regionMapping.regions.region.find(r => r["4"] === region);
33const RegionCode = regionEntry ? regionEntry["1"] : undefined;
34
35// Determine date range
36const dateRange = getDateRange(presetDate, startDate, endDate);
37
38// Function to detect URLs
39const isGenericUrl = (kw) => /^https?:\/\//.test(kw);
40const advertiserIdPattern = (kw) => /^AR\d+$/.test(kw);
41
42const isAdvertiserUrl = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
43const isDomainUrl = /[?&]domain=([^&]+)/;
44const isTopic = /[?&]topic=([^&]+)/;
45
46let domainExists
47
48const processKeyword = async (kw) => {
49 try {
50 let filterData;
51
52 if (kw.match(isTopic) || isPolitical && !kw.match(isAdvertiserUrl) && !kw.match(isDomainUrl)) {
53 kw = kw.replace(/\s+/g, "+"); // Replace spaces with '+'
54 console.log(`✅✅ Political : ${kw}`);
55 const parsedData = parseAdvertiserUrl(kw);
56
57 const filterData = {
58 adveritserId_OR_kw: parsedData.advertiserId_domain,
59 maxAdvertisers,
60 RegionCode: parsedData.RegionCode,
61 format: parseInt(parsedData.format),
62 platform: parseInt(parsedData.platform),
63 dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
64 startDate: parsedData.startDate,
65 endDate: parsedData.endDate,
66 limitResults,
67 }
68 console.log("Filter Data:", JSON.stringify(filterData, null, 2));
69 let adsData = await searchForPoliticalAdsList(
70 parsedData.advertiserId_domain,
71 maxAdvertisers,
72 parsedData.RegionCode,
73 parseInt(parsedData.format),
74 getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
75 parseInt(parsedData.platform),
76 limitResults
77 );
78
79 await Dataset.pushData({ advertiserId_OR_kw: kw, adsData });
80
81 }
82 else if (kw.match(isAdvertiserUrl) || kw.match(isDomainUrl)) {
83 const advertiserMatch = kw.match(isAdvertiserUrl);
84 const domainMatch = kw.match(isDomainUrl);
85 const parsedData = parseAdvertiserUrl(kw);
86
87 if (advertiserMatch && domainMatch) {
88 console.error(`❌ Invalid URL: Cannot contain both advertiser ID and domain -> ${kw}`);
89 return; // Skip processing this invalid URL
90 }
91 if (advertiserMatch) {
92 // Advertiser ID detected
93 if (!parsedData) throw new Error("Invalid advertiser URL");
94 await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
95 } else if (domainMatch) {
96 // Domain detected
97 console.log('🔹 Processing Domain:', parsedData.advertiserId_domain,);
98 await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
99 }
100 }
101 else {
102 // Handle generic keywords (not URLs)
103 if (isGenericUrl(kw)) console.warn(`⚠️ Detected a generic URL: ${kw}.\nTreating as a regular keyword.`);
104 kw = kw.replace(/\s+/g, "+"); // Replace spaces with '+'
105 if (advertiserIdPattern(kw)) console.log(`✅ Advertiser ID: ${kw}`);
106 filterData = {
107 advertiserId_OR_kw: kw,
108 maxDomains,
109 maxAdvertisers,
110 RegionCode,
111 format: parseInt(format),
112 platform: parseInt(platform),
113 dateRange,
114 startDate,
115 endDate
116 };
117
118 let adsData = await searchForAdsList(
119 kw,
120 maxAdvertisers,
121 maxDomains,
122 RegionCode,
123 parseInt(format),
124 getDateRange(presetDate, startDate, endDate),
125 parseInt(platform),
126 limitResults
127 );
128 await Dataset.pushData({ advertiserId_OR_kw0: kw, adsData });
129 }
130 } catch (error) {
131 console.error(`❌ Error processing "${kw}":`, error);
132 }
133};
134
135
136// Process all queries in parallel
137await Promise.all(keyword_domain_advertiserid.map(processKeyword));
138
139const endTime = performance.now();
140console.log(`⏳ Execution time: ${(endTime - startTime).toFixed(2)} ms`);
141await Actor.exit();
src0/parseAdvertiserUrl.js
1import fs from "fs";
2
3export function parseAdvertiserUrl(url) {
4 const advertiserPattern = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
5 const match = url.match(advertiserPattern);
6
7 const urlParams = new URL(url).searchParams;
8 const advertiserId = match ? match[1] : null;
9 const domain = urlParams.has("domain") ? urlParams.get("domain") : null;
10
11 // Ensure that only one of advertiserId or domain exists
12 if (advertiserId && domain) {
13 return null; // Invalid URL structure
14 }
15
16 // Determine advertiserId_domain
17 const advertiserId_domain = advertiserId || domain || null;
18
19 // Extract query parameters
20 const region = urlParams.get("region") || null;
21 const format = urlParams.get("format") || null;
22 const presetDate = urlParams.get("preset-date")?.replace(/ /g, "+") || null;
23 const startDate = urlParams.get("start-date") || null;
24 const endDate = urlParams.get("end-date") || null;
25 const platform = urlParams.get("platform") || null;
26
27 // Load regions.json and resolve region code
28 const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
29 const regionEntry = regionMapping.regions.region.find(r => r["3"] === region);
30 const RegionCode = regionEntry ? regionEntry["1"] : undefined;
31
32 // Platform Mapping
33 const platformMap = {
34 "MAPS": "2",
35 "PLAY": "1",
36 "SHOPPING": "4",
37 "SEARCH": "3",
38 "YOUTUBE": "5"
39 };
40
41 // Format Mapping
42 const formatMap = {
43 "VIDEO": "3",
44 "TEXT": "1",
45 "IMAGE": "2"
46 };
47
48 // Preset Date Mapping
49 const presetDateMap = {
50 "Today": "0",
51 "Yesterday": "1",
52 "Last+7+days": "7",
53 "Last+30+days": "30"
54 };
55
56 return {
57 advertiserId_domain,
58 domainExists: !!domain, // ✅ Returns true if domain exists, false otherwise
59 RegionCode,
60 format: formatMap[format] || "0", // Default to "0" (All formats)
61 presetDate: presetDateMap[presetDate] || "-1", // Default to "-1" (Any Time)
62 startDate,
63 endDate,
64 platform: platformMap[platform] || "0" // Default to "0" (All platforms)
65 };
66}
src0/processAds.js
1import fs from "fs";
2
3// Load the region mapping file
4const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
5
6// Platform mapping for `"8"` field (Google services)
7const platformMapping = {
8 1: "Google Play",
9 2: "Google Maps",
10 3: "Google Search",
11 4: "Google Shopping",
12 5: "YouTube"
13};
14
15// Format mapping for `"1": {"8": ...}`
16const formatMapping = {
17 1: "TEXT",
18 2: "IMAGE",
19 3: "VIDEO"
20};
21
22// Convert region codes to readable names
23function getRegionName(regionCode) {
24 const regionEntry = regionMapping.regions.region.find(r => r["1"] === regionCode);
25 return regionEntry
26 ? { regionCode: regionEntry["3"], regionName: regionEntry["4"] } // "3" = Country Code, "4" = Country Name
27 : { regionCode: "Unknown", regionName: "N/A" };
28}
29
30export function processAds(allResults) {
31 if (!allResults || allResults.length === 0) {
32 console.log("No ad data available to process.");
33 return [];
34 }
35
36 const formattedAds = allResults.map(ad => {
37 const rawRegions = ad?.["1"]?.["17"];
38
39 //console.log("🔍 Raw region data:", JSON.stringify(rawRegions, null, 2)); // Debugging
40
41 const regionStats = Array.isArray(rawRegions)
42 ? rawRegions.map(region => {
43 if (!region || typeof region !== "object") return {}; // Prevent errors on missing data
44
45 const { regionCode, regionName } = getRegionName(region["1"]);
46
47 // ✅ Extract platform stats from "8"
48 const platformStats = Array.isArray(region["8"])
49 ? region["8"].map(platform => ({
50 surfaceName: platformMapping[platform["1"]] || "Unknown Platform",
51 impressions: {
52 lowerBound: platform["2"] ?? 0,
53 upperBound: platform["3"] ?? 0
54 }
55 }))
56 : [];
57
58 return {
59 regionNumber: region["1"] ?? "Unknown",
60 regionCode,
61 regionName,
62 firstShown: region.hasOwnProperty("4") ? region["4"] : "Unknown",
63 lastShown: region.hasOwnProperty("5") ? region["5"] : "Unknown",
64 impressions: {
65 lowerBound: region["2"] ?? 0,
66 upperBound: region["3"] ?? 0
67 },
68 platformStats
69 };
70 })
71 : [];
72
73 // ✅ Get format from `ad["1"]["8"]`
74 const formatType = formatMapping[ad?.["1"]?.["8"]] || "UNKNOWN";
75
76 // ✅ Extract preview URLs from both possible locations
77 const previewUrls = Array.isArray(ad?.["1"]?.["5"])
78 ? ad["1"]["5"].map(item =>
79 item?.["1"]?.["4"] ?? // Case 1: "1": { "4": "URL" }
80 item?.["3"]?.["2"] ?? // Case 2: "3": { "2": "URL" }
81 "Unknown"
82 )
83 : [];
84
85 // ✅ Construct Ad Transparency URL
86 const advertiserId = ad?.["1"]?.["1"] ?? "Unknown";
87 const creativeId = ad?.["1"]?.["2"] ?? "Unknown";
88 const adTransparencyUrl =
89 advertiserId !== "Unknown" && creativeId !== "Unknown"
90 ? `https://adstransparency.google.com/advertiser/${advertiserId}/creative/${creativeId}?region=anywhere`
91 : "Unknown";
92
93 return {
94 advertiserId,
95 creativeId,
96 creativeRegions: [...new Set(regionStats.map(r => r.regionName))], // ✅ Unique region names
97 adTransparencyUrl, // ✅ Added ad transparency link
98 previewUrls, // ✅ Now properly extracting URLs
99 format: formatType, // ✅ Updated format assignment
100 regionStats
101 };
102 });
103
104 console.log(`✅ Processed ${formattedAds.length} ads.`);
105
106 return formattedAds;
107}
src0/regions.json
1{
2 "regions": {
3 "region": [
4 {
5 "1": 2008,
6 "3": "AL",
7 "4": "Albania",
8 "8": {
9 "1": 411533320,
10 "2": 201683310
11 },
12 "10": 1
13 },
14 {
15 "1": 2012,
16 "3": "DZ",
17 "4": "Algeria",
18 "8": {
19 "1": 280338860,
20 "2": 16596260
21 },
22 "10": 1
23 },
24 {
25 "1": 2016,
26 "3": "AS",
27 "4": "American Samoa",
28 "8": {
29 "1": -142709720,
30 "2": -1701322170
31 },
32 "10": 1
33 },
34 {
35 "1": 2020,
36 "3": "AD",
37 "4": "Andorra",
38 "8": {
39 "1": 425062850,
40 "2": 15218010
41 },
42 "10": 1
43 },
44 {
45 "1": 2024,
46 "3": "AO",
47 "4": "Angola",
48 "8": {
49 "1": -112026920,
50 "2": 178738870
51 },
52 "10": 1
53 },
54 {
55 "1": 2010,
56 "3": "AQ",
57 "4": "Antarctica",
58 "8": {
59 "1": -752509730,
60 "2": -713890
61 },
62 "10": 1
63 },
64 {
65 "1": 2028,
66 "3": "AG",
67 "4": "Antigua and Barbuda",
68 "8": {
69 "1": 170608160,
70 "2": -617964280
71 },
72 "10": 1
73 },
74 {
75 "1": 2032,
76 "3": "AR",
77 "4": "Argentina",
78 "8": {
79 "1": -384160970,
80 "2": -636166720
81 },
82 "10": 1
83 },
84 {
85 "1": 2051,
86 "3": "AM",
87 "4": "Armenia",
88 "8": {
89 "1": 400690990,
90 "2": 450381890
91 },
92 "10": 1
93 },
94 {
95 "1": 2036,
96 "3": "AU",
97 "4": "Australia",
98 "8": {
99 "1": -252743980,
100 "2": 1337751360
101 },
102 "10": 1
103 },
104 {
105 "1": 2040,
106 "3": "AT",
107 "4": "Austria",
108 "5": "Austria",
109 "8": {
110 "1": 475162310,
111 "2": 145500720
112 },
113 "10": 1
114 },
115 {
116 "1": 2031,
117 "3": "AZ",
118 "4": "Azerbaijan",
119 "8": {
120 "1": 401431050,
121 "2": 475769270
122 },
123 "10": 1
124 },
125 {
126 "1": 2048,
127 "3": "BH",
128 "4": "Bahrain",
129 "8": {
130 "1": 260667000,
131 "2": 505577000
132 },
133 "10": 1
134 },
135 {
136 "1": 2050,
137 "3": "BD",
138 "4": "Bangladesh",
139 "8": {
140 "1": 236849940,
141 "2": 903563310
142 },
143 "10": 1
144 },
145 {
146 "1": 2052,
147 "3": "BB",
148 "4": "Barbados",
149 "8": {
150 "1": 131938870,
151 "2": -595431980
152 },
153 "10": 1
154 },
155 {
156 "1": 2112,
157 "3": "BY",
158 "4": "Belarus",
159 "8": {
160 "1": 537098070,
161 "2": 279533890
162 },
163 "10": 1
164 },
165 {
166 "1": 2056,
167 "3": "BE",
168 "4": "Belgium",
169 "5": "Belgium",
170 "8": {
171 "1": 505038870,
172 "2": 44699360
173 },
174 "10": 1
175 },
176 {
177 "1": 2084,
178 "3": "BZ",
179 "4": "Belize",
180 "8": {
181 "1": 171898770,
182 "2": -884976500
183 },
184 "10": 1
185 },
186 {
187 "1": 2204,
188 "3": "BJ",
189 "4": "Benin",
190 "8": {
191 "1": 93076900,
192 "2": 23158340
193 },
194 "10": 1
195 },
196 {
197 "1": 2064,
198 "3": "BT",
199 "4": "Bhutan",
200 "8": {
201 "1": 275141620,
202 "2": 904336010
203 },
204 "10": 1
205 },
206 {
207 "1": 2068,
208 "3": "BO",
209 "4": "Bolivia",
210 "8": {
211 "1": -162901540,
212 "2": -635886530
213 },
214 "10": 1
215 },
216 {
217 "1": 2070,
218 "3": "BA",
219 "4": "Bosnia and Herzegovina",
220 "8": {
221 "1": 439158860,
222 "2": 176790760
223 },
224 "10": 1
225 },
226 {
227 "1": 2072,
228 "3": "BW",
229 "4": "Botswana",
230 "8": {
231 "1": -223284740,
232 "2": 246848660
233 },
234 "10": 1
235 },
236 {
237 "1": 2076,
238 "3": "BR",
239 "4": "Brazil",
240 "8": {
241 "1": -142350040,
242 "2": -519252800
243 },
244 "10": 1
245 },
246 {
247 "1": 2096,
248 "3": "BN",
249 "4": "Brunei",
250 "8": {
251 "1": 45352770,
252 "2": 1147276690
253 },
254 "10": 1
255 },
256 {
257 "1": 2100,
258 "3": "BG",
259 "4": "Bulgaria",
260 "8": {
261 "1": 427338830,
262 "2": 254858300
263 },
264 "10": 1
265 },
266 {
267 "1": 2854,
268 "3": "BF",
269 "4": "Burkina Faso",
270 "8": {
271 "1": 122383330,
272 "2": -15615930
273 },
274 "10": 1
275 },
276 {
277 "1": 2108,
278 "3": "BI",
279 "4": "Burundi",
280 "8": {
281 "1": -33730560,
282 "2": 299188860
283 },
284 "10": 1
285 },
286 {
287 "1": 2116,
288 "3": "KH",
289 "4": "Cambodia",
290 "8": {
291 "1": 125656790,
292 "2": 1049909630
293 },
294 "10": 1
295 },
296 {
297 "1": 2120,
298 "3": "CM",
299 "4": "Cameroon",
300 "8": {
301 "1": 73697220,
302 "2": 123547220
303 },
304 "10": 1
305 },
306 {
307 "1": 2124,
308 "3": "CA",
309 "4": "Canada",
310 "5": "Canada",
311 "8": {
312 "1": 561303660,
313 "2": -1063467710
314 },
315 "10": 1
316 },
317 {
318 "1": 2132,
319 "3": "CV",
320 "4": "Cabo Verde",
321 "5": "Cabo Verde",
322 "8": {
323 "1": 165388000,
324 "2": -230418000
325 },
326 "10": 1
327 },
328 {
329 "1": 2535,
330 "3": "BQ",
331 "4": "Caribbean Netherlands",
332 "8": {
333 "1": 121783611,
334 "2": -682385339
335 },
336 "10": 1
337 },
338 {
339 "1": 2140,
340 "3": "CF",
341 "4": "Central African Republic",
342 "8": {
343 "1": 66111110,
344 "2": 209394440
345 },
346 "10": 1
347 },
348 {
349 "1": 2148,
350 "3": "TD",
351 "4": "Chad",
352 "8": {
353 "1": 154541660,
354 "2": 187322070
355 },
356 "10": 1
357 },
358 {
359 "1": 2152,
360 "3": "CL",
361 "4": "Chile",
362 "8": {
363 "1": -356751470,
364 "2": -715429690
365 },
366 "10": 1
367 },
368 {
369 "1": 2156,
370 "3": "CN",
371 "4": "China",
372 "8": {
373 "1": 358616600,
374 "2": 1041953970
375 },
376 "10": 1
377 },
378 {
379 "1": 2162,
380 "3": "CX",
381 "4": "Christmas Island",
382 "8": {
383 "1": -104475250,
384 "2": 1056904490
385 },
386 "10": 1
387 },
388 {
389 "1": 2166,
390 "3": "CC",
391 "4": "Cocos (Keeling) Islands",
392 "8": {
393 "1": -121641650,
394 "2": 968709560
395 },
396 "10": 1
397 },
398 {
399 "1": 2170,
400 "3": "CO",
401 "4": "Colombia",
402 "8": {
403 "1": 45708680,
404 "2": -742973330
405 },
406 "10": 1
407 },
408 {
409 "1": 2174,
410 "3": "KM",
411 "4": "Comoros",
412 "8": {
413 "1": -116455000,
414 "2": 433333000
415 },
416 "10": 1
417 },
418 {
419 "1": 2184,
420 "3": "CK",
421 "4": "Cook Islands",
422 "8": {
423 "1": -212367360,
424 "2": -1597776710
425 },
426 "10": 1
427 },
428 {
429 "1": 2188,
430 "3": "CR",
431 "4": "Costa Rica",
432 "8": {
433 "1": 97489170,
434 "2": -837534280
435 },
436 "10": 1
437 },
438 {
439 "1": 2384,
440 "3": "CI",
441 "4": "Cote d'Ivoire",
442 "8": {
443 "1": 75399890,
444 "2": -55470800
445 },
446 "10": 1
447 },
448 {
449 "1": 2191,
450 "3": "HR",
451 "4": "Croatia",
452 "8": {
453 "1": 451000000,
454 "2": 152000000
455 },
456 "10": 1
457 },
458 {
459 "1": 2531,
460 "3": "CW",
461 "4": "Curacao",
462 "8": {
463 "1": 121695700,
464 "2": -689900200
465 },
466 "10": 1
467 },
468 {
469 "1": 2196,
470 "3": "CY",
471 "4": "Cyprus",
472 "8": {
473 "1": 351264130,
474 "2": 334298590
475 },
476 "10": 1
477 },
478 {
479 "1": 2203,
480 "3": "CZ",
481 "4": "Czechia",
482 "5": "Czechia",
483 "8": {
484 "1": 498174920,
485 "2": 154729620
486 },
487 "10": 1
488 },
489 {
490 "1": 2180,
491 "3": "CD",
492 "4": "Democratic Republic of the Congo",
493 "8": {
494 "1": -40383330,
495 "2": 217586640
496 },
497 "10": 1
498 },
499 {
500 "1": 2208,
501 "3": "DK",
502 "4": "Denmark",
503 "5": "Denmark",
504 "8": {
505 "1": 562639200,
506 "2": 95017850
507 },
508 "10": 1
509 },
510 {
511 "1": 2262,
512 "3": "DJ",
513 "4": "Djibouti",
514 "8": {
515 "1": 118251380,
516 "2": 425902750
517 },
518 "10": 1
519 },
520 {
521 "1": 2212,
522 "3": "DM",
523 "4": "Dominica",
524 "8": {
525 "1": 154149990,
526 "2": -613709760
527 },
528 "10": 1
529 },
530 {
531 "1": 2214,
532 "3": "DO",
533 "4": "Dominican Republic",
534 "8": {
535 "1": 187356930,
536 "2": -701626510
537 },
538 "10": 1
539 },
540 {
541 "1": 2218,
542 "3": "EC",
543 "4": "Ecuador",
544 "8": {
545 "1": -18312390,
546 "2": -781834060
547 },
548 "10": 1
549 },
550 {
551 "1": 2818,
552 "3": "EG",
553 "4": "Egypt",
554 "8": {
555 "1": 268205530,
556 "2": 308024980
557 },
558 "10": 1
559 },
560 {
561 "1": 2222,
562 "3": "SV",
563 "4": "El Salvador",
564 "8": {
565 "1": 137941850,
566 "2": -888965300
567 },
568 "10": 1
569 },
570 {
571 "1": 2226,
572 "3": "GQ",
573 "4": "Equatorial Guinea",
574 "8": {
575 "1": 16508010,
576 "2": 102678950
577 },
578 "10": 1
579 },
580 {
581 "1": 2232,
582 "3": "ER",
583 "4": "Eritrea",
584 "8": {
585 "1": 151793840,
586 "2": 397823340
587 },
588 "10": 1
589 },
590 {
591 "1": 2233,
592 "3": "EE",
593 "4": "Estonia",
594 "8": {
595 "1": 585952720,
596 "2": 250136070
597 },
598 "10": 1
599 },
600 {
601 "1": 2748,
602 "3": "SZ",
603 "4": "Eswatini",
604 "5": "Eswatini",
605 "8": {
606 "1": -265225030,
607 "2": 314658660
608 },
609 "10": 1
610 },
611 {
612 "1": 2231,
613 "3": "ET",
614 "4": "Ethiopia",
615 "8": {
616 "1": 91450000,
617 "2": 404896730
618 },
619 "10": 1
620 },
621 {
622 "1": 2583,
623 "3": "FM",
624 "4": "Micronesia",
625 "8": {
626 "1": 74255540,
627 "2": 1505508120
628 },
629 "10": 1
630 },
631 {
632 "1": 2242,
633 "3": "FJ",
634 "4": "Fiji",
635 "8": {
636 "1": -177133710,
637 "2": 1780650320
638 },
639 "10": 1
640 },
641 {
642 "1": 2246,
643 "3": "FI",
644 "4": "Finland",
645 "8": {
646 "1": 619241100,
647 "2": 257481510
648 },
649 "10": 1
650 },
651 {
652 "1": 2250,
653 "3": "FR",
654 "4": "France",
655 "8": {
656 "1": 462276380,
657 "2": 22137490
658 },
659 "10": 1
660 },
661 {
662 "1": 2258,
663 "3": "PF",
664 "4": "French Polynesia",
665 "8": {
666 "1": -176797420,
667 "2": -1494068430
668 },
669 "10": 1
670 },
671 {
672 "1": 2260,
673 "3": "TF",
674 "4": "French Southern and Antarctic Lands",
675 "8": {
676 "1": -492803660,
677 "2": 693485570
678 },
679 "10": 1
680 },
681 {
682 "1": 2266,
683 "3": "GA",
684 "4": "Gabon",
685 "8": {
686 "1": -8036890,
687 "2": 116094440
688 },
689 "10": 1
690 },
691 {
692 "1": 2268,
693 "3": "GE",
694 "4": "Georgia",
695 "8": {
696 "1": 423154070,
697 "2": 433568920
698 },
699 "10": 1
700 },
701 {
702 "1": 2276,
703 "3": "DE",
704 "4": "Germany",
705 "5": "Germany",
706 "8": {
707 "1": 511656910,
708 "2": 104515260
709 },
710 "10": 1
711 },
712 {
713 "1": 2288,
714 "3": "GH",
715 "4": "Ghana",
716 "8": {
717 "1": 79465270,
718 "2": -10231940
719 },
720 "10": 1
721 },
722 {
723 "1": 2300,
724 "3": "GR",
725 "4": "Greece",
726 "8": {
727 "1": 390742080,
728 "2": 218243120
729 },
730 "10": 1
731 },
732 {
733 "1": 2308,
734 "3": "GD",
735 "4": "Grenada",
736 "8": {
737 "1": 121165000,
738 "2": -616790000
739 },
740 "10": 1
741 },
742 {
743 "1": 2316,
744 "3": "GU",
745 "4": "Guam",
746 "8": {
747 "1": 133823791,
748 "2": 1446972774
749 },
750 "10": 1
751 },
752 {
753 "1": 2320,
754 "3": "GT",
755 "4": "Guatemala",
756 "8": {
757 "1": 157834710,
758 "2": -902307590
759 },
760 "10": 1
761 },
762 {
763 "1": 2831,
764 "3": "GG",
765 "4": "Guernsey",
766 "8": {
767 "1": 494481808,
768 "2": -25894685
769 },
770 "10": 1
771 },
772 {
773 "1": 2324,
774 "3": "GN",
775 "4": "Guinea",
776 "8": {
777 "1": 99455870,
778 "2": -96966450
779 },
780 "10": 1
781 },
782 {
783 "1": 2624,
784 "3": "GW",
785 "4": "Guinea-Bissau",
786 "8": {
787 "1": 118037490,
788 "2": -151804130
789 },
790 "10": 1
791 },
792 {
793 "1": 2328,
794 "3": "GY",
795 "4": "Guyana",
796 "8": {
797 "1": 48604160,
798 "2": -589301800
799 },
800 "10": 1
801 },
802 {
803 "1": 2332,
804 "3": "HT",
805 "4": "Haiti",
806 "8": {
807 "1": 189711870,
808 "2": -722852150
809 },
810 "10": 1
811 },
812 {
813 "1": 2334,
814 "3": "HM",
815 "4": "Heard Island and McDonald Islands",
816 "8": {
817 "1": -530818100,
818 "2": 735041580
819 },
820 "10": 1
821 },
822 {
823 "1": 2340,
824 "3": "HN",
825 "4": "Honduras",
826 "8": {
827 "1": 151999990,
828 "2": -862419050
829 },
830 "10": 1
831 },
832 {
833 "1": 2348,
834 "3": "HU",
835 "4": "Hungary",
836 "8": {
837 "1": 471624940,
838 "2": 195033040
839 },
840 "10": 1
841 },
842 {
843 "1": 2352,
844 "3": "IS",
845 "4": "Iceland",
846 "8": {
847 "1": 649630510,
848 "2": -190208350
849 },
850 "10": 1
851 },
852 {
853 "1": 2356,
854 "3": "IN",
855 "4": "India",
856 "8": {
857 "1": 205936840,
858 "2": 789628800
859 },
860 "10": 1
861 },
862 {
863 "1": 2360,
864 "3": "ID",
865 "4": "Indonesia",
866 "8": {
867 "1": -7892750,
868 "2": 1139213270
869 },
870 "10": 1
871 },
872 {
873 "1": 2368,
874 "3": "IQ",
875 "4": "Iraq",
876 "8": {
877 "1": 332231910,
878 "2": 436792910
879 },
880 "10": 1
881 },
882 {
883 "1": 2372,
884 "3": "IE",
885 "4": "Ireland",
886 "8": {
887 "1": 534129100,
888 "2": -82438900
889 },
890 "10": 1
891 },
892 {
893 "1": 2376,
894 "3": "IL",
895 "4": "Israel",
896 "8": {
897 "1": 310460510,
898 "2": 348516120
899 },
900 "10": 1
901 },
902 {
903 "1": 2380,
904 "3": "IT",
905 "4": "Italy",
906 "8": {
907 "1": 418719400,
908 "2": 125673800
909 },
910 "10": 1
911 },
912 {
913 "1": 2388,
914 "3": "JM",
915 "4": "Jamaica",
916 "8": {
917 "1": 181095810,
918 "2": -772975080
919 },
920 "10": 1
921 },
922 {
923 "1": 2392,
924 "3": "JP",
925 "4": "Japan",
926 "8": {
927 "1": 362048240,
928 "2": 1382529240
929 },
930 "10": 1
931 },
932 {
933 "1": 2832,
934 "3": "JE",
935 "4": "Jersey",
936 "8": {
937 "1": 492137711,
938 "2": -21357662
939 },
940 "10": 1
941 },
942 {
943 "1": 2400,
944 "3": "JO",
945 "4": "Jordan",
946 "8": {
947 "1": 305851640,
948 "2": 362384140
949 },
950 "10": 1
951 },
952 {
953 "1": 2398,
954 "3": "KZ",
955 "4": "Kazakhstan",
956 "8": {
957 "1": 480195730,
958 "2": 669236840
959 },
960 "10": 1
961 },
962 {
963 "1": 2404,
964 "3": "KE",
965 "4": "Kenya",
966 "8": {
967 "1": -235590,
968 "2": 379061930
969 },
970 "10": 1
971 },
972 {
973 "1": 2296,
974 "3": "KI",
975 "4": "Kiribati",
976 "8": {
977 "1": 14421300,
978 "2": 1729829763
979 },
980 "10": 1
981 },
982 {
983 "1": 2414,
984 "3": "KW",
985 "4": "Kuwait",
986 "8": {
987 "1": 293116600,
988 "2": 474817660
989 },
990 "10": 1
991 },
992 {
993 "1": 2417,
994 "3": "KG",
995 "4": "Kyrgyzstan",
996 "8": {
997 "1": 412043800,
998 "2": 747660980
999 },
1000 "10": 1
1001 },
1002 {
1003 "1": 2418,
1004 "3": "LA",
1005 "4": "Laos",
1006 "8": {
1007 "1": 198562700,
1008 "2": 1024954960
1009 },
1010 "10": 1
1011 },
1012 {
1013 "1": 2428,
1014 "3": "LV",
1015 "4": "Latvia",
1016 "8": {
1017 "1": 568796350,
1018 "2": 246031890
1019 },
1020 "10": 1
1021 },
1022 {
1023 "1": 2422,
1024 "3": "LB",
1025 "4": "Lebanon",
1026 "8": {
1027 "1": 338547210,
1028 "2": 358622850
1029 },
1030 "10": 1
1031 },
1032 {
1033 "1": 2426,
1034 "3": "LS",
1035 "4": "Lesotho",
1036 "8": {
1037 "1": -296099880,
1038 "2": 282336080
1039 },
1040 "10": 1
1041 },
1042 {
1043 "1": 2430,
1044 "3": "LR",
1045 "4": "Liberia",
1046 "8": {
1047 "1": 64280550,
1048 "2": -94294990
1049 },
1050 "10": 1
1051 },
1052 {
1053 "1": 2434,
1054 "3": "LY",
1055 "4": "Libya",
1056 "8": {
1057 "1": 263351000,
1058 "2": 172283310
1059 },
1060 "10": 1
1061 },
1062 {
1063 "1": 2438,
1064 "3": "LI",
1065 "4": "Liechtenstein",
1066 "8": {
1067 "1": 471410392,
1068 "2": 95209350
1069 },
1070 "10": 1
1071 },
1072 {
1073 "1": 2440,
1074 "3": "LT",
1075 "4": "Lithuania",
1076 "8": {
1077 "1": 551694380,
1078 "2": 238812750
1079 },
1080 "10": 1
1081 },
1082 {
1083 "1": 2442,
1084 "3": "LU",
1085 "4": "Luxembourg",
1086 "5": "Luxembourg",
1087 "8": {
1088 "1": 498152730,
1089 "2": 61295830
1090 },
1091 "10": 1
1092 },
1093 {
1094 "1": 2450,
1095 "3": "MG",
1096 "4": "Madagascar",
1097 "8": {
1098 "1": -187669470,
1099 "2": 468691070
1100 },
1101 "10": 1
1102 },
1103 {
1104 "1": 2454,
1105 "3": "MW",
1106 "4": "Malawi",
1107 "8": {
1108 "1": -132543080,
1109 "2": 343015250
1110 },
1111 "10": 1
1112 },
1113 {
1114 "1": 2458,
1115 "3": "MY",
1116 "4": "Malaysia",
1117 "8": {
1118 "1": 42104840,
1119 "2": 1019757660
1120 },
1121 "10": 1
1122 },
1123 {
1124 "1": 2462,
1125 "3": "MV",
1126 "4": "Maldives",
1127 "8": {
1128 "1": 32027780,
1129 "2": 732206800
1130 },
1131 "10": 1
1132 },
1133 {
1134 "1": 2470,
1135 "3": "MT",
1136 "4": "Malta",
1137 "8": {
1138 "1": 359374960,
1139 "2": 143754160
1140 },
1141 "10": 1
1142 },
1143 {
1144 "1": 2466,
1145 "3": "ML",
1146 "4": "Mali",
1147 "8": {
1148 "1": 175706920,
1149 "2": -39961660
1150 },
1151 "10": 1
1152 },
1153 {
1154 "1": 2584,
1155 "3": "MH",
1156 "4": "Marshall Islands",
1157 "8": {
1158 "1": 71314740,
1159 "2": 1711844780
1160 },
1161 "10": 1
1162 },
1163 {
1164 "1": 2478,
1165 "3": "MR",
1166 "4": "Mauritania",
1167 "8": {
1168 "1": 210078900,
1169 "2": -109408350
1170 },
1171 "10": 1
1172 },
1173 {
1174 "1": 2480,
1175 "3": "MU",
1176 "4": "Mauritius",
1177 "8": {
1178 "1": -203484040,
1179 "2": 575521520
1180 },
1181 "10": 1
1182 },
1183 {
1184 "1": 2484,
1185 "3": "MX",
1186 "4": "Mexico",
1187 "8": {
1188 "1": 236345010,
1189 "2": -1025527840
1190 },
1191 "10": 1
1192 },
1193 {
1194 "1": 2498,
1195 "3": "MD",
1196 "4": "Moldova",
1197 "8": {
1198 "1": 474116310,
1199 "2": 283698850
1200 },
1201 "10": 1
1202 },
1203 {
1204 "1": 2492,
1205 "3": "MC",
1206 "4": "Monaco",
1207 "8": {
1208 "1": 437384176,
1209 "2": 74246158
1210 },
1211 "10": 1
1212 },
1213 {
1214 "1": 2496,
1215 "3": "MN",
1216 "4": "Mongolia",
1217 "8": {
1218 "1": 468624960,
1219 "2": 1038466560
1220 },
1221 "10": 1
1222 },
1223 {
1224 "1": 2499,
1225 "3": "ME",
1226 "4": "Montenegro",
1227 "8": {
1228 "1": 427086780,
1229 "2": 193743900
1230 },
1231 "10": 1
1232 },
1233 {
1234 "1": 2504,
1235 "3": "MA",
1236 "4": "Morocco",
1237 "8": {
1238 "1": 317917020,
1239 "2": -70926200
1240 },
1241 "10": 1
1242 },
1243 {
1244 "1": 2508,
1245 "3": "MZ",
1246 "4": "Mozambique",
1247 "8": {
1248 "1": -186656950,
1249 "2": 355295620
1250 },
1251 "10": 1
1252 },
1253 {
1254 "1": 2104,
1255 "3": "MM",
1256 "4": "Myanmar (Burma)",
1257 "8": {
1258 "1": 219162210,
1259 "2": 959559740
1260 },
1261 "10": 1
1262 },
1263 {
1264 "1": 2516,
1265 "3": "NA",
1266 "4": "Namibia",
1267 "8": {
1268 "1": -229576400,
1269 "2": 184904100
1270 },
1271 "10": 1
1272 },
1273 {
1274 "1": 2520,
1275 "3": "NR",
1276 "4": "Nauru",
1277 "8": {
1278 "1": -5227780,
1279 "2": 1669315030
1280 },
1281 "10": 1
1282 },
1283 {
1284 "1": 2524,
1285 "3": "NP",
1286 "4": "Nepal",
1287 "8": {
1288 "1": 283948570,
1289 "2": 841240080
1290 },
1291 "10": 1
1292 },
1293 {
1294 "1": 2528,
1295 "3": "NL",
1296 "4": "Netherlands",
1297 "5": "Netherlands",
1298 "8": {
1299 "1": 521326330,
1300 "2": 52912660
1301 },
1302 "10": 1
1303 },
1304 {
1305 "1": 2540,
1306 "3": "NC",
1307 "4": "New Caledonia",
1308 "8": {
1309 "1": -209043050,
1310 "2": 1656180420
1311 },
1312 "10": 1
1313 },
1314 {
1315 "1": 2554,
1316 "3": "NZ",
1317 "4": "New Zealand",
1318 "8": {
1319 "1": -409005570,
1320 "2": 1748859710
1321 },
1322 "10": 1
1323 },
1324 {
1325 "1": 2558,
1326 "3": "NI",
1327 "4": "Nicaragua",
1328 "8": {
1329 "1": 128654160,
1330 "2": -852072290
1331 },
1332 "10": 1
1333 },
1334 {
1335 "1": 2562,
1336 "3": "NE",
1337 "4": "Niger",
1338 "8": {
1339 "1": 176077890,
1340 "2": 80816660
1341 },
1342 "10": 1
1343 },
1344 {
1345 "1": 2566,
1346 "3": "NG",
1347 "4": "Nigeria",
1348 "8": {
1349 "1": 90819990,
1350 "2": 86752770
1351 },
1352 "10": 1
1353 },
1354 {
1355 "1": 2570,
1356 "3": "NU",
1357 "4": "Niue",
1358 "8": {
1359 "1": -190544450,
1360 "2": -1698672330
1361 },
1362 "10": 1
1363 },
1364 {
1365 "1": 2574,
1366 "3": "NF",
1367 "4": "Norfolk Island",
1368 "8": {
1369 "1": -290408350,
1370 "2": 1679547120
1371 },
1372 "10": 1
1373 },
1374 {
1375 "1": 2807,
1376 "3": "MK",
1377 "4": "North Macedonia",
1378 "5": "North Macedonia",
1379 "8": {
1380 "1": 416086350,
1381 "2": 217452750
1382 },
1383 "10": 1
1384 },
1385 {
1386 "1": 2580,
1387 "3": "MP",
1388 "4": "Northern Mariana Islands",
1389 "8": {
1390 "1": 150979000,
1391 "2": 1456739000
1392 },
1393 "10": 1
1394 },
1395 {
1396 "1": 2578,
1397 "3": "NO",
1398 "4": "Norway",
1399 "8": {
1400 "1": 604720240,
1401 "2": 84689460
1402 },
1403 "10": 1
1404 },
1405 {
1406 "1": 2512,
1407 "3": "OM",
1408 "4": "Oman",
1409 "8": {
1410 "1": 214735329,
1411 "2": 559754130
1412 },
1413 "10": 1
1414 },
1415 {
1416 "1": 2586,
1417 "3": "PK",
1418 "4": "Pakistan",
1419 "8": {
1420 "1": 303753210,
1421 "2": 693451160
1422 },
1423 "10": 1
1424 },
1425 {
1426 "1": 2585,
1427 "3": "PW",
1428 "4": "Palau",
1429 "8": {
1430 "1": 75149800,
1431 "2": 1345825200
1432 },
1433 "10": 1
1434 },
1435 {
1436 "1": 2591,
1437 "3": "PA",
1438 "4": "Panama",
1439 "8": {
1440 "1": 85379810,
1441 "2": -807821270
1442 },
1443 "10": 1
1444 },
1445 {
1446 "1": 2598,
1447 "3": "PG",
1448 "4": "Papua New Guinea",
1449 "8": {
1450 "1": -63149930,
1451 "2": 1439555500
1452 },
1453 "10": 1
1454 },
1455 {
1456 "1": 2600,
1457 "3": "PY",
1458 "4": "Paraguay",
1459 "8": {
1460 "1": -234425030,
1461 "2": -584438320
1462 },
1463 "10": 1
1464 },
1465 {
1466 "1": 2604,
1467 "3": "PE",
1468 "4": "Peru",
1469 "8": {
1470 "1": -91899670,
1471 "2": -750151520
1472 },
1473 "10": 1
1474 },
1475 {
1476 "1": 2608,
1477 "3": "PH",
1478 "4": "Philippines",
1479 "8": {
1480 "1": 128797210,
1481 "2": 1217740170
1482 },
1483 "10": 1
1484 },
1485 {
1486 "1": 2612,
1487 "3": "PN",
1488 "4": "Pitcairn Islands",
1489 "8": {
1490 "1": -243767537,
1491 "2": -1283242376
1492 },
1493 "10": 1
1494 },
1495 {
1496 "1": 2616,
1497 "3": "PL",
1498 "4": "Poland",
1499 "8": {
1500 "1": 519194380,
1501 "2": 191451360
1502 },
1503 "10": 1
1504 },
1505 {
1506 "1": 2620,
1507 "3": "PT",
1508 "4": "Portugal",
1509 "8": {
1510 "1": 393998720,
1511 "2": -82244540
1512 },
1513 "10": 1
1514 },
1515 {
1516 "1": 2634,
1517 "3": "QA",
1518 "4": "Qatar",
1519 "8": {
1520 "1": 253548260,
1521 "2": 511838840
1522 },
1523 "10": 1
1524 },
1525 {
1526 "1": 2178,
1527 "3": "CG",
1528 "4": "Republic of the Congo",
1529 "8": {
1530 "1": -2280210,
1531 "2": 158276590
1532 },
1533 "10": 1
1534 },
1535 {
1536 "1": 2642,
1537 "3": "RO",
1538 "4": "Romania",
1539 "8": {
1540 "1": 459431610,
1541 "2": 249667600
1542 },
1543 "10": 1
1544 },
1545 {
1546 "1": 2646,
1547 "3": "RW",
1548 "4": "Rwanda",
1549 "8": {
1550 "1": -19402780,
1551 "2": 298738880
1552 },
1553 "10": 1
1554 },
1555 {
1556 "1": 2654,
1557 "3": "SH",
1558 "4": "Saint Helena, Ascension and Tristan da Cunha",
1559 "5": "St Helena, Ascension and Tristan da Cunha",
1560 "8": {
1561 "1": -159583317,
1562 "2": -57019989
1563 },
1564 "10": 1
1565 },
1566 {
1567 "1": 2659,
1568 "3": "KN",
1569 "4": "Saint Kitts and Nevis",
1570 "5": "St Kitts & Nevis",
1571 "8": {
1572 "1": 173578220,
1573 "2": -627829980
1574 },
1575 "10": 1
1576 },
1577 {
1578 "1": 2662,
1579 "3": "LC",
1580 "4": "Saint Lucia",
1581 "5": "St Lucia",
1582 "8": {
1583 "1": 139094440,
1584 "2": -609788930
1585 },
1586 "10": 1
1587 },
1588 {
1589 "1": 2666,
1590 "3": "PM",
1591 "4": "Saint Pierre and Miquelon",
1592 "5": "St Pierre and Miquelon",
1593 "8": {
1594 "1": 468852000,
1595 "2": -563159000
1596 },
1597 "10": 1
1598 },
1599 {
1600 "1": 2670,
1601 "3": "VC",
1602 "4": "Saint Vincent and the Grenadines",
1603 "5": "St Vincent and the Grenadines",
1604 "8": {
1605 "1": 129843050,
1606 "2": -612872280
1607 },
1608 "10": 1
1609 },
1610 {
1611 "1": 2882,
1612 "3": "WS",
1613 "4": "Samoa",
1614 "8": {
1615 "1": -137590290,
1616 "2": -1721046290
1617 },
1618 "10": 1
1619 },
1620 {
1621 "1": 2674,
1622 "3": "SM",
1623 "4": "San Marino",
1624 "8": {
1625 "1": 439423600,
1626 "2": 124577770
1627 },
1628 "10": 1
1629 },
1630 {
1631 "1": 2678,
1632 "3": "ST",
1633 "4": "Sao Tome and Principe",
1634 "8": {
1635 "1": 1863600,
1636 "2": 66130810
1637 },
1638 "10": 1
1639 },
1640 {
1641 "1": 2682,
1642 "3": "SA",
1643 "4": "Saudi Arabia",
1644 "8": {
1645 "1": 238859420,
1646 "2": 450791620
1647 },
1648 "10": 1
1649 },
1650 {
1651 "1": 2686,
1652 "3": "SN",
1653 "4": "Senegal",
1654 "8": {
1655 "1": 144974010,
1656 "2": -144523620
1657 },
1658 "10": 1
1659 },
1660 {
1661 "1": 2690,
1662 "3": "SC",
1663 "4": "Seychelles",
1664 "8": {
1665 "1": -46795740,
1666 "2": 554919770
1667 },
1668 "10": 1
1669 },
1670 {
1671 "1": 2694,
1672 "3": "SL",
1673 "4": "Sierra Leone",
1674 "8": {
1675 "1": 84605550,
1676 "2": -117798890
1677 },
1678 "10": 1
1679 },
1680 {
1681 "1": 2702,
1682 "3": "SG",
1683 "4": "Singapore",
1684 "8": {
1685 "1": 13520830,
1686 "2": 1038198360
1687 },
1688 "10": 1
1689 },
1690 {
1691 "1": 2534,
1692 "3": "SX",
1693 "4": "Sint Maarten",
1694 "8": {
1695 "1": 180424800,
1696 "2": -630548300
1697 },
1698 "10": 1
1699 },
1700 {
1701 "1": 2703,
1702 "3": "SK",
1703 "4": "Slovakia",
1704 "5": "Slovakia",
1705 "8": {
1706 "1": 486690260,
1707 "2": 196990240
1708 },
1709 "10": 1
1710 },
1711 {
1712 "1": 2705,
1713 "3": "SI",
1714 "4": "Slovenia",
1715 "8": {
1716 "1": 461512410,
1717 "2": 149954630
1718 },
1719 "10": 1
1720 },
1721 {
1722 "1": 2090,
1723 "3": "SB",
1724 "4": "Solomon Islands",
1725 "8": {
1726 "1": -96457100,
1727 "2": 1601561940
1728 },
1729 "10": 1
1730 },
1731 {
1732 "1": 2706,
1733 "3": "SO",
1734 "4": "Somalia",
1735 "8": {
1736 "1": 51521490,
1737 "2": 461996160
1738 },
1739 "10": 1
1740 },
1741 {
1742 "1": 2710,
1743 "3": "ZA",
1744 "4": "South Africa",
1745 "8": {
1746 "1": -305594820,
1747 "2": 229375060
1748 },
1749 "10": 1
1750 },
1751 {
1752 "1": 2239,
1753 "3": "GS",
1754 "4": "South Georgia and the South Sandwich Islands",
1755 "8": {
1756 "1": -544295790,
1757 "2": -365879090
1758 },
1759 "10": 1
1760 },
1761 {
1762 "1": 2410,
1763 "3": "KR",
1764 "4": "South Korea",
1765 "8": {
1766 "1": 359077570,
1767 "2": 1277669220
1768 },
1769 "10": 1
1770 },
1771 {
1772 "1": 2724,
1773 "3": "ES",
1774 "4": "Spain",
1775 "8": {
1776 "1": 404636670,
1777 "2": -37492200
1778 },
1779 "10": 1
1780 },
1781 {
1782 "1": 2144,
1783 "3": "LK",
1784 "4": "Sri Lanka",
1785 "8": {
1786 "1": 78730540,
1787 "2": 807717970
1788 },
1789 "10": 1
1790 },
1791 {
1792 "1": 2740,
1793 "3": "SR",
1794 "4": "Suriname",
1795 "8": {
1796 "1": 39193050,
1797 "2": -560277830
1798 },
1799 "10": 1
1800 },
1801 {
1802 "1": 2756,
1803 "3": "CH",
1804 "4": "Switzerland",
1805 "8": {
1806 "1": 468181880,
1807 "2": 82275120
1808 },
1809 "10": 1
1810 },
1811 {
1812 "1": 2752,
1813 "3": "SE",
1814 "4": "Sweden",
1815 "8": {
1816 "1": 601281610,
1817 "2": 186435010
1818 },
1819 "10": 1
1820 },
1821 {
1822 "1": 2762,
1823 "3": "TJ",
1824 "4": "Tajikistan",
1825 "8": {
1826 "1": 388610340,
1827 "2": 712760930
1828 },
1829 "10": 1
1830 },
1831 {
1832 "1": 2834,
1833 "3": "TZ",
1834 "4": "Tanzania",
1835 "8": {
1836 "1": -63690280,
1837 "2": 348888220
1838 },
1839 "10": 1
1840 },
1841 {
1842 "1": 2764,
1843 "3": "TH",
1844 "4": "Thailand",
1845 "8": {
1846 "1": 158700320,
1847 "2": 1009925410
1848 },
1849 "10": 1
1850 },
1851 {
1852 "1": 2044,
1853 "3": "BS",
1854 "4": "The Bahamas",
1855 "8": {
1856 "1": 250342800,
1857 "2": -773962800
1858 },
1859 "10": 1
1860 },
1861 {
1862 "1": 2270,
1863 "3": "GM",
1864 "4": "The Gambia",
1865 "8": {
1866 "1": 134431820,
1867 "2": -153101390
1868 },
1869 "10": 1
1870 },
1871 {
1872 "1": 2626,
1873 "3": "TL",
1874 "4": "Timor-Leste",
1875 "8": {
1876 "1": -88742170,
1877 "2": 1257275390
1878 },
1879 "10": 1
1880 },
1881 {
1882 "1": 2768,
1883 "3": "TG",
1884 "4": "Togo",
1885 "8": {
1886 "1": 86195430,
1887 "2": 8247820
1888 },
1889 "10": 1
1890 },
1891 {
1892 "1": 2772,
1893 "3": "TK",
1894 "4": "Tokelau",
1895 "8": {
1896 "1": -92002000,
1897 "2": -1718484000
1898 },
1899 "10": 1
1900 },
1901 {
1902 "1": 2776,
1903 "3": "TO",
1904 "4": "Tonga",
1905 "8": {
1906 "1": -211789860,
1907 "2": -1751982420
1908 },
1909 "10": 1
1910 },
1911 {
1912 "1": 2780,
1913 "3": "TT",
1914 "4": "Trinidad and Tobago",
1915 "8": {
1916 "1": 106918030,
1917 "2": -612225030
1918 },
1919 "10": 1
1920 },
1921 {
1922 "1": 2788,
1923 "3": "TN",
1924 "4": "Tunisia",
1925 "8": {
1926 "1": 338869170,
1927 "2": 95374990
1928 },
1929 "10": 1
1930 },
1931 {
1932 "1": 2792,
1933 "3": "TR",
1934 "4": "Turkiye",
1935 "5": "Türkiye",
1936 "8": {
1937 "1": 389637450,
1938 "2": 352433220
1939 },
1940 "10": 1
1941 },
1942 {
1943 "1": 2795,
1944 "3": "TM",
1945 "4": "Turkmenistan",
1946 "8": {
1947 "1": 389697190,
1948 "2": 595562780
1949 },
1950 "10": 1
1951 },
1952 {
1953 "1": 2798,
1954 "3": "TV",
1955 "4": "Tuvalu",
1956 "8": {
1957 "1": -71095350,
1958 "2": 1776493300
1959 },
1960 "10": 1
1961 },
1962 {
1963 "1": 2800,
1964 "3": "UG",
1965 "4": "Uganda",
1966 "8": {
1967 "1": 13733330,
1968 "2": 322902750
1969 },
1970 "10": 1
1971 },
1972 {
1973 "1": 2804,
1974 "3": "UA",
1975 "4": "Ukraine",
1976 "8": {
1977 "1": 483794330,
1978 "2": 311655800
1979 },
1980 "10": 1
1981 },
1982 {
1983 "1": 2784,
1984 "3": "AE",
1985 "4": "United Arab Emirates",
1986 "8": {
1987 "1": 234240760,
1988 "2": 538478180
1989 },
1990 "10": 1
1991 },
1992 {
1993 "1": 2826,
1994 "3": "GB",
1995 "4": "United Kingdom",
1996 "8": {
1997 "1": 553780510,
1998 "2": -34359730
1999 },
2000 "10": 1
2001 },
2002 {
2003 "1": 2840,
2004 "3": "US",
2005 "4": "United States",
2006 "5": "United States",
2007 "8": {
2008 "1": 387945952,
2009 "2": -1065348379
2010 },
2011 "10": 1
2012 },
2013 {
2014 "1": 2858,
2015 "3": "UY",
2016 "4": "Uruguay",
2017 "8": {
2018 "1": -325227790,
2019 "2": -557658350
2020 },
2021 "10": 1
2022 },
2023 {
2024 "1": 2860,
2025 "3": "UZ",
2026 "4": "Uzbekistan",
2027 "8": {
2028 "1": 413774910,
2029 "2": 645852620
2030 },
2031 "10": 1
2032 },
2033 {
2034 "1": 2548,
2035 "3": "VU",
2036 "4": "Vanuatu",
2037 "5": "Vanuatu",
2038 "8": {
2039 "1": -153767060,
2040 "2": 1669591580
2041 },
2042 "10": 1
2043 },
2044 {
2045 "1": 2336,
2046 "3": "VA",
2047 "4": "Vatican City",
2048 "5": "Vatican City",
2049 "8": {
2050 "1": 419029160,
2051 "2": 124533890
2052 },
2053 "10": 1
2054 },
2055 {
2056 "1": 2862,
2057 "3": "VE",
2058 "4": "Venezuela",
2059 "8": {
2060 "1": 64237500,
2061 "2": -665897300
2062 },
2063 "10": 1
2064 },
2065 {
2066 "1": 2704,
2067 "3": "VN",
2068 "4": "Vietnam",
2069 "8": {
2070 "1": 140583240,
2071 "2": 1082771990
2072 },
2073 "10": 1
2074 },
2075 {
2076 "1": 2887,
2077 "3": "YE",
2078 "4": "Yemen",
2079 "8": {
2080 "1": 155527270,
2081 "2": 485163880
2082 },
2083 "10": 1
2084 },
2085 {
2086 "1": 2894,
2087 "3": "ZM",
2088 "4": "Zambia",
2089 "8": {
2090 "1": -131338970,
2091 "2": 278493320
2092 },
2093 "10": 1
2094 },
2095 {
2096 "1": 2716,
2097 "3": "ZW",
2098 "4": "Zimbabwe",
2099 "8": {
2100 "1": -190154380,
2101 "2": 291548570
2102 },
2103 "10": 1
2104 },
2105 {
2106 "1": 2060,
2107 "3": "BM",
2108 "4": "Bermuda",
2109 "8": {
2110 "1": 323078000,
2111 "2": -647505000
2112 },
2113 "10": 2
2114 },
2115 {
2116 "1": 2074,
2117 "3": "BV",
2118 "4": "Bouvet Island",
2119 "8": {
2120 "1": -544231990,
2121 "2": 34131940
2122 },
2123 "10": 2
2124 },
2125 {
2126 "1": 2086,
2127 "3": "IO",
2128 "4": "British Indian Ocean Territory",
2129 "8": {
2130 "1": -63431940,
2131 "2": 718765190
2132 },
2133 "10": 2
2134 },
2135 {
2136 "1": 2092,
2137 "3": "VG",
2138 "4": "British Virgin Islands",
2139 "8": {
2140 "1": 184206950,
2141 "2": -646399680
2142 },
2143 "10": 2
2144 },
2145 {
2146 "1": 20277,
2147 "3": "IC",
2148 "4": "Canary Islands",
2149 "5": "Canary Islands",
2150 "8": {
2151 "1": 282915637,
2152 "2": -166291304
2153 },
2154 "10": 5
2155 },
2156 {
2157 "1": 2136,
2158 "3": "KY",
2159 "4": "Cayman Islands",
2160 "8": {
2161 "1": 193133000,
2162 "2": -812546000
2163 },
2164 "10": 2
2165 },
2166 {
2167 "1": 2158,
2168 "3": "TW",
2169 "4": "Taiwan",
2170 "8": {
2171 "1": 236978100,
2172 "2": 1209605150
2173 },
2174 "10": 2
2175 },
2176 {
2177 "1": 2175,
2178 "3": "YT",
2179 "4": "Mayotte",
2180 "8": {
2181 "1": -128275000,
2182 "2": 451662440
2183 },
2184 "10": 2
2185 },
2186 {
2187 "1": 2234,
2188 "3": "FO",
2189 "4": "Faroe Islands",
2190 "8": {
2191 "1": 618926350,
2192 "2": -69118060
2193 },
2194 "10": 2
2195 },
2196 {
2197 "1": 2238,
2198 "3": "FK",
2199 "4": "Falkland Islands (Islas Malvinas)",
2200 "8": {
2201 "1": -517962530,
2202 "2": -595236130
2203 },
2204 "10": 2
2205 },
2206 {
2207 "1": 2254,
2208 "3": "GF",
2209 "4": "French Guiana",
2210 "8": {
2211 "1": 39338890,
2212 "2": -531257820
2213 },
2214 "10": 2
2215 },
2216 {
2217 "1": 2275,
2218 "3": "PS",
2219 "4": "Palestine",
2220 "5": "Palestine",
2221 "8": {
2222 "1": 319521620,
2223 "2": 352331540
2224 },
2225 "10": 2
2226 },
2227 {
2228 "1": 2292,
2229 "3": "GI",
2230 "4": "Gibraltar",
2231 "8": {
2232 "1": 361407510,
2233 "2": -53535850
2234 },
2235 "10": 2
2236 },
2237 {
2238 "1": 2304,
2239 "3": "GL",
2240 "4": "Greenland",
2241 "8": {
2242 "1": 717069360,
2243 "2": -426043030
2244 },
2245 "10": 2
2246 },
2247 {
2248 "1": 2312,
2249 "3": "GP",
2250 "4": "Guadeloupe",
2251 "8": {
2252 "1": 162650000,
2253 "2": -615510000
2254 },
2255 "10": 2
2256 },
2257 {
2258 "1": 2344,
2259 "3": "HK",
2260 "4": "Hong Kong",
2261 "8": {
2262 "1": 223193039,
2263 "2": 1141693611
2264 },
2265 "10": 2
2266 },
2267 {
2268 "1": 2833,
2269 "3": "IM",
2270 "4": "Isle of Man",
2271 "8": {
2272 "1": 542361070,
2273 "2": -45480560
2274 },
2275 "10": 1
2276 },
2277 {
2278 "1": 2446,
2279 "3": "MO",
2280 "4": "Macao",
2281 "5": "Macao",
2282 "8": {
2283 "1": 221987450,
2284 "2": 1135438730
2285 },
2286 "10": 2
2287 },
2288 {
2289 "1": 2474,
2290 "3": "MQ",
2291 "4": "Martinique",
2292 "8": {
2293 "1": 146415280,
2294 "2": -610241740
2295 },
2296 "10": 2
2297 },
2298 {
2299 "1": 2500,
2300 "3": "MS",
2301 "4": "Montserrat",
2302 "8": {
2303 "1": 167424980,
2304 "2": -621873660
2305 },
2306 "10": 2
2307 },
2308 {
2309 "1": 2533,
2310 "3": "AW",
2311 "4": "Aruba",
2312 "8": {
2313 "1": 125211100,
2314 "2": -699683380
2315 },
2316 "10": 2
2317 },
2318 {
2319 "1": 2630,
2320 "3": "PR",
2321 "4": "Puerto Rico",
2322 "8": {
2323 "1": 182208330,
2324 "2": -665901490
2325 },
2326 "10": 2
2327 },
2328 {
2329 "1": 2638,
2330 "3": "RE",
2331 "4": "Reunion",
2332 "5": "Réunion",
2333 "8": {
2334 "1": -211151410,
2335 "2": 555363840
2336 },
2337 "10": 2
2338 },
2339 {
2340 "1": 2660,
2341 "3": "AI",
2342 "4": "Anguilla",
2343 "8": {
2344 "1": 182205540,
2345 "2": -630686150
2346 },
2347 "10": 2
2348 },
2349 {
2350 "1": 2732,
2351 "3": "EH",
2352 "4": "Western Sahara",
2353 "8": {
2354 "1": 242155270,
2355 "2": -128858340
2356 },
2357 "10": 2
2358 },
2359 {
2360 "1": 2663,
2361 "3": "MF",
2362 "4": "Saint Martin",
2363 "5": "St Martin",
2364 "8": {
2365 "1": 180825500,
2366 "2": -630522510
2367 },
2368 "10": 1
2369 },
2370 {
2371 "1": 2744,
2372 "3": "SJ",
2373 "4": "Svalbard and Jan Mayen",
2374 "8": {
2375 "1": 775536040,
2376 "2": 236702720
2377 },
2378 "10": 2
2379 },
2380 {
2381 "1": 2796,
2382 "3": "TC",
2383 "4": "Turks and Caicos Islands",
2384 "8": {
2385 "1": 216940250,
2386 "2": -717979280
2387 },
2388 "10": 2
2389 },
2390 {
2391 "1": 2581,
2392 "3": "UM",
2393 "4": "United States Minor Outlying Islands",
2394 "8": {
2395 "1": 192823192,
2396 "2": 1666470470
2397 },
2398 "10": 1
2399 },
2400 {
2401 "1": 2850,
2402 "3": "VI",
2403 "4": "U.S. Virgin Islands",
2404 "5": "U.S. Virgin Islands",
2405 "8": {
2406 "1": 183357650,
2407 "2": -648963350
2408 },
2409 "10": 2
2410 },
2411 {
2412 "1": 2876,
2413 "3": "WF",
2414 "4": "Wallis and Futuna",
2415 "8": {
2416 "1": -142938000,
2417 "2": -1781165000
2418 },
2419 "10": 1
2420 }
2421 ]
2422 }
2423}
src0/search_advertiser_creatives.js
1import https from "https";
2
3export async function searchForAds(
4 advertiserId,
5 RegionCode = null,
6 format,
7 dateRange,
8 platform,
9 limitResults = null,
10 isPolitical
11) {
12 let selectedRegion;
13 let allResults = [];
14 let nextPageToken = null;
15 const isDomain = advertiserId.includes(".");
16 const adjustedLimit = limitResults ? Math.min(limitResults, 100) : 40; // Ensure limitResults does not exceed 100, default to 40
17
18
19 do {
20 const requestPayload = isPolitical
21 ? {
22 "2": adjustedLimit,
23 "3": {
24 "1": advertiserId,
25 ...(format !== 0 && { "4": format }), // Ensure format is added only if non-zero
26 ...(RegionCode && { "8": [RegionCode] }),
27 "12": { "1": "", "2": true },
28 ...(platform && { "14": [platform] })
29 },
30 "6": { "1": 3, "2": true },
31 "7": { "1": 2, "2": 30, "3": selectedRegion || 1 } // Ensure fallback for selectedRegion
32 }
33 : isDomain
34 ? {
35 "2": adjustedLimit,
36 "3": {
37 ...(format !== 0 && { "4": format }),
38 ...(RegionCode && { "8": [RegionCode] }),
39 "12": { "1": advertiserId, "2": true },
40 ...(platform && { "14": [platform] })
41 },
42 "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
43 }
44 : {
45 "2": adjustedLimit,
46 "3": {
47 ...(format !== 0 && { "4": format }),
48 ...(RegionCode && { "8": [RegionCode] }),
49 "12": { "1": "", "2": true },
50 "13": { "1": [advertiserId] },
51 ...(platform && { "14": [platform] })
52 },
53 "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
54 };
55
56 console.log(`isPolitical ${isPolitical}`);
57 if (!dateRange?.anyTime) {
58 requestPayload["3"]["6"] = dateRange.fromDate;
59 requestPayload["3"]["7"] = dateRange.toDate;
60 }
61
62 if (nextPageToken) {
63 requestPayload["4"] = nextPageToken;
64 }
65
66 const postData = new URLSearchParams({
67 "f.req": JSON.stringify(requestPayload)
68 }).toString();
69
70 const agent = new https.Agent({ keepAlive: true });
71 const options = {
72 agent,
73 hostname: "adstransparency.google.com",
74 path: "/anji/_/rpc/SearchService/SearchCreatives?authuser=0",
75 method: "POST",
76 headers: {
77 "Content-Type": "application/x-www-form-urlencoded",
78 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
79 "Connection": "keep-alive",
80 "Content-Length": Buffer.byteLength(String(postData)),
81 }
82 };
83
84 //console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
85 const jsonResponse = await new Promise((resolve, reject) => {
86 const req = https.request(options, (res) => {
87 let data = "";
88 //console.log(`statusCode : ${res.statusCode} | requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
89
90 res.on("data", (chunk) => { data += chunk; });
91
92 //console.log(`data : ${data} `);
93 res.on("end", () => {
94 if (res.statusCode >= 400) {
95 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
96 reject(new Error(`HTTP ${res.statusCode}: ${data}`));
97 return;
98 }
99
100 if (!data) {
101 console.error("❌ Empty response received");
102 reject(new Error("Empty response from server"));
103 return;
104 }
105
106 let parsedResponse;
107 try {
108 parsedResponse = JSON.parse(data);
109 } catch (error) {
110 console.error("❌ JSON Parsing Error:", error.message);
111 reject(new Error(`Invalid JSON response: ${data}`));
112 return;
113 }
114
115 //console.log(`parsedResponse ${JSON.stringify(parsedResponse, null, 2)}`);
116
117 if (!parsedResponse || typeof parsedResponse !== "object") {
118 reject(new Error("Invalid JSON response"));
119 return;
120 }
121
122 resolve(parsedResponse);
123 });
124 });
125
126 req.on("error", (err) => {
127 console.error("❌ Request Error:", err.message);
128 reject(err);
129 });
130
131 req.write(postData);
132 req.end();
133 });
134
135 if (jsonResponse["1"]) {
136 allResults = allResults.concat(jsonResponse["1"]);
137 }
138
139 nextPageToken = jsonResponse["2"] || null;
140 console.log(`search_advertiser_creatives - 🔹 Next Page Token: ${nextPageToken ? nextPageToken : "None"}`);
141
142 // Stop fetching if limitResults is reached
143 if (limitResults && allResults.length >= limitResults) {
144 console.log(`✅ Limit reached: Returning first ${limitResults} results.`);
145 return allResults.slice(0, limitResults);
146 }
147 } while (nextPageToken);
148 console.log(`data for : ${advertiserId} - ✅ Total results fetched: ${allResults.length}`);
149 return allResults; // Process and save the results ;
150}
src0/search_for_an_ads.js
1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10 const match = url.match(/advertiser\/(AR\d+)/);
11 return match ? match[1] : null;
12}
13
14export async function searchForAdsList(keyword_domain_advertiserid, maxAdvertisers, maxDomains, RegionCode = null, format, dateRange, platform, limitResults, domainExists) {
15 let advertiserid_domain = []; // Store valid advertiser IDs
16 let keywords_domains = []; // Store non-advertiser keywords_domains
17
18 console.log('domain Exists', domainExists);
19
20 // Normalize input into an array
21 const inputList = Array.isArray(keyword_domain_advertiserid) ? keyword_domain_advertiserid : [keyword_domain_advertiserid];
22
23 // Validate each item
24 inputList.forEach(item => {
25 if (typeof item !== "string") return;
26
27 let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
28
29 if (advertiserIdPattern.test(extractedId)|| domainExists) {
30 advertiserid_domain.push(extractedId); // Store advertiser ID and domains
31 } else {
32 keywords_domains.push(item); // Treat as a keyword/domain
33 }
34 });
35
36 // If advertiser IDs exist OR domainExists is true, process them immediately and SKIP API request
37 if (advertiserid_domain.length > 0 || domainExists) {
38 console.log(`🚀 Processing advertiser IDs directly (domainExists: ${domainExists}):`, advertiserid_domain);
39 const adPromises = advertiserid_domain.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults));
40 const adResults = await Promise.all(adPromises);
41 const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
42 return creativeDetails.flat().filter(Boolean);
43 }
44
45
46 // If no keywords_domains exist, return no data (avoids unnecessary request)
47 if (keywords_domains.length === 0) {
48 console.warn(`⚠️ No valid keywords_domains found. Skipping API request.`);
49 return { message: "No data", keyword_domain_advertiserid };
50 }
51
52 console.log(`📡 Sending API request for keywords_domains:`, keywords_domains);
53
54 // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
55 const requestPayload = {
56 "1": keywords_domains.length === 1 ? keywords_domains[0] : keywords_domains,
57 "2": maxAdvertisers,
58 "3": maxDomains,
59 "4": RegionCode ? [RegionCode] : []
60 };
61
62 console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
63
64 const postData = new URLSearchParams({
65 "f.req": JSON.stringify(requestPayload)
66 }).toString();
67
68 const agent = new https.Agent({ keepAlive: true });
69 const options = {
70 agent,
71 hostname: "adstransparency.google.com",
72 path: "/anji/_/rpc/SearchService/SearchSuggestions?authuser=0",
73 method: "POST",
74 headers: {
75 "Content-Type": "application/x-www-form-urlencoded",
76 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77 "Connection": "keep-alive",
78 "Content-Length": Buffer.byteLength(String(postData)),
79 }
80 };
81
82 return new Promise((resolve, reject) => {
83 const req = https.request(options, (res) => {
84 let data = "";
85
86 res.on("data", (chunk) => (data += chunk));
87
88 res.on("end", async () => {
89 if (res.statusCode >= 400) {
90 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91 return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92 }
93
94 try {
95 const jsonResponse = JSON.parse(data);
96 const promises = [];
97 //console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
98
99 // Ensure jsonResponse["1"] is an array before processing
100 if (Array.isArray(jsonResponse["1"])) {
101 promises.push(...jsonResponse["1"].map(async (item) => {
102 let advertiserId = null;
103
104 if (item["1"] && item["1"]["2"]) {
105 advertiserId = item["1"]["2"];
106 } else if (item["2"] && item["2"]["1"]) {
107 advertiserId = item["2"]["1"];
108 }
109
110 return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults) : null;
111 }));
112 }
113
114 // Wait for all promises to resolve
115 const allResults = await Promise.all(promises);
116 const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
117 resolve(creativeDetails.flat().filter(Boolean));
118
119 } catch (error) {
120 console.error("❌ JSON Parsing Error:", error);
121 reject(error);
122 }
123 });
124 });
125
126 req.on("error", (err) => {
127 console.error("❌ Request Error:", err.message);
128 reject(err);
129 });
130
131 req.write(postData);
132 req.end();
133 });
134}
src0/search_for_an_political_ads.js
1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10 const match = url.match(/advertiser\/(AR\d+)/);
11 return match ? match[1] : null;
12}
13
14export async function searchForPoliticalAdsList(keyword_advertiserid, maxAdvertisers, RegionCode = null, format, dateRange, platform, limitResults) {
15 let advertiserid = []; // Store valid advertiser IDs
16 let key_advid = []; // Store non-advertiser keyword or advertiserid
17 let isPolitical = true
18 // Normalize input into an array
19 const inputList = Array.isArray(keyword_advertiserid) ? keyword_advertiserid : [keyword_advertiserid];
20
21 // Validate each item
22 inputList.forEach(item => {
23 if (typeof item !== "string") return;
24
25 let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
26
27 if (advertiserIdPattern.test(extractedId)) {
28 advertiserid.push(extractedId); // Store advertiser ID
29 } else {
30 key_advid.push(item); // Treat as a keyword
31 }
32 });
33
34 // If advertiser IDs exist, process it immediately and SKIP API request
35 if (advertiserid.length > 0) {
36 console.log(`🚀 Processing advertiser IDs directly :`, advertiserid);
37 const adPromises = advertiserid.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults, isPolitical));
38 const adResults = await Promise.all(adPromises);
39 const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
40 return creativeDetails.flat().filter(Boolean);
41 }
42
43 // If no keyword or advertiserid exist, return no data (avoids unnecessary request)
44 if (key_advid.length === 0) {
45 console.warn(`⚠️ No valid keyword or advertiserid found. Skipping API request.`);
46 return { message: "No data", keyword_advertiserid };
47 }
48
49 console.log(`📡 Sending API request for keyword or advertiserid:`, key_advid);
50
51 // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
52 const requestPayload = {
53 "2": maxAdvertisers,
54 "4": {
55 "2": RegionCode ? [RegionCode] : [],
56 "3": Array.isArray(key_advid) ? key_advid.join(",") : key_advid // Ensure a string
57 },
58 "7": {
59 "1": 2
60 }
61 };
62
63 console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
64 const postData = new URLSearchParams({
65 "f.req": JSON.stringify(requestPayload)
66 }).toString();
67
68 const agent = new https.Agent({ keepAlive: true });
69 const options = {
70 agent,
71 hostname: "adstransparency.google.com",
72 path: "/anji/_/rpc/SearchService/SearchAdvertisers?authuser=0",
73 method: "POST",
74 headers: {
75 "Content-Type": "application/x-www-form-urlencoded",
76 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77 "Connection": "keep-alive",
78 "Content-Length": Buffer.byteLength(String(postData)),
79 }
80 };
81
82 return new Promise((resolve, reject) => {
83 const req = https.request(options, (res) => {
84 let data = "";
85
86 res.on("data", (chunk) => (data += chunk));
87
88 res.on("end", async () => {
89 if (res.statusCode >= 400) {
90 console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91 return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92 }
93
94 try {
95 const jsonResponse = JSON.parse(data);
96 const promises = [];
97
98 console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
99 // Ensure jsonResponse["1"] is an array before processing
100 if (Array.isArray(jsonResponse["1"])) {
101 promises.push(...jsonResponse["1"].map(async (item) => {
102 let advertiserId = null;
103
104 // New response format handling
105 if (item["1"]) {
106 advertiserId = item["1"];
107 }
108
109 return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults, isPolitical ) : null;
110 }));
111 }
112
113 // Wait for all promises to resolve
114 const allResults = await Promise.all(promises);
115 const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
116 resolve(creativeDetails.flat().filter(Boolean));
117
118 } catch (error) {
119 console.error("❌ JSON Parsing Error:", error);
120 reject(error);
121 }
122 });
123 });
124
125 req.on("error", (err) => {
126 console.error("❌ Request Error:", err.message);
127 reject(err);
128 });
129
130 req.write(postData);
131 req.end();
132 });
133}
src3/main.js
1import { Actor } from 'apify';
2import { CheerioCrawler, Dataset } from 'crawlee';
3
4await Actor.init();
5
6// Structure of input is defined in input_schema.json
7const {
8 keyword_domain_advertiserid,
9 proxyConfig
10} = await Actor.getInput() ?? {};
11
12const proxyConfiguration = await Actor.createProxyConfiguration(proxyConfig);
13const crawler = new CheerioCrawler({
14 proxyConfiguration,
15 useSessionPool: true,
16 persistCookiesPerSession: true,
17 additionalMimeTypes: ['application/json', 'text/plain'],
18 // Use requestHandler to process the response
19 async requestHandler({ request, response, $, body, log }) {
20 log.info('Processing URL', { url: request.url });
21
22 const responseHeaders = response.headers;
23 const requestHeaders = response.request.options.headers;
24
25 // Try to parse the response as JSON
26 let responseData = null;
27 try {
28 // First attempt to use the body directly
29 responseData = JSON.parse(body.toString());
30 log.info('Response data parsed from body:', responseData);
31 } catch (e) {
32 // If that fails, try to extract it from the HTML if available
33 if ($) {
34 try {
35 const bodyText = $('body').text();
36 responseData = JSON.parse(bodyText);
37 log.info('Response data parsed from HTML body:', responseData);
38 } catch (e2) {
39 log.error('Failed to parse JSON response', { error: e2.message });
40 }
41 } else {
42 log.error('Failed to parse JSON response and no HTML found', { error: e.message });
43 }
44 }
45
46 // Save data to Dataset
47 await Dataset.pushData({
48 url: request.url,
49 requestHeaders: requestHeaders,
50 responseHeaders: responseHeaders,
51 statusCode: response.statusCode,
52 responseBodyRaw: body.toString(), // Add the raw response body
53 responseData: responseData // Save the JSON response if parsed
54 });
55 },
56});
57
58await crawler.run(keyword_domain_advertiserid);
59
60// Gracefully exit the Actor process
61await Actor.exit();
src3/routes.js
1import { Dataset, createPuppeteerRouter } from 'crawlee';
2
3export const router = createPuppeteerRouter();
4
5router.addDefaultHandler(async ({ enqueueLinks, log, page, request }) => {
6 log.info(`Enqueueing new URLs`);
7
8 // Capture all network requests and their headers
9 const requestHeaders = [];
10 page.on('request', (req) => {
11 requestHeaders.push({
12 url: req.url(),
13 method: req.method(),
14 headers: req.headers(),
15 });
16 });
17
18 // Wait for the page to fully load
19 await page.waitForLoadState('networkidle');
20
21 // Get all cookies
22 const cookies = await page.cookies();
23
24 // Get User-Agent
25 const userAgent = await page.evaluate(() => navigator.userAgent);
26
27 await Dataset.pushData({
28 url: request.url,
29 cookies,
30 userAgent,
31 requestHeaders, // Store all captured request headers
32 });
33});
34
35router.addHandler('detail', async ({ request, page, log }) => {
36 const title = await page.title();
37 log.info(`${title}`, { url: request.loadedUrl });
38
39 // Capture all network requests and their headers
40 const requestHeaders = [];
41 page.on('request', (req) => {
42 requestHeaders.push({
43 url: req.url(),
44 method: req.method(),
45 headers: req.headers(),
46 });
47 });
48
49 // Wait for the page to fully load
50 await page.waitForLoadState('networkidle');
51
52 // Get all cookies
53 const cookies = await page.cookies();
54
55 // Get User-Agent
56 const userAgent = await page.evaluate(() => navigator.userAgent);
57
58 await Dataset.pushData({
59 url: request.loadedUrl,
60 title,
61 cookies,
62 userAgent,
63 requestHeaders, // Store all captured request headers
64 });
65});
.dockerignore
1# configurations
2.idea
3
4# crawlee and apify storage folders
5apify_storage
6crawlee_storage
7storage
8
9# installed files
10node_modules
11
12# git folder
13.git
.editorconfig
1root = true
2
3[*]
4indent_style = space
5indent_size = 4
6charset = utf-8
7trim_trailing_whitespace = true
8insert_final_newline = true
9end_of_line = lf
.eslintrc
1{
2 "extends": "@apify",
3 "root": true
4}
.gitignore
1# This file tells Git which files shouldn't be added to source control
2
3.DS_Store
4.idea
5dist
6node_modules
7apify_storage
8storage
package.json
1{
2 "name": "crawlee-puppeteer-javascript",
3 "version": "0.0.1",
4 "type": "module",
5 "description": "This is an example of an Apify actor.",
6 "dependencies": {
7 "apify": "^3.2.6",
8 "crawlee": "^3.11.5",
9 "dayjs": "^1.11.13",
10 "puppeteer": "^24.4.0"
11 },
12 "devDependencies": {
13 "@apify/eslint-config": "^0.4.0",
14 "eslint": "^8.50.0"
15 },
16 "scripts": {
17 "start": "node src/main.js",
18 "test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
19 },
20 "author": "It's not you it's me",
21 "license": "ISC"
22}
package0.json
1{
2 "name": "crawlee-cheerio-javascript",
3 "version": "0.0.1",
4 "type": "module",
5 "description": "This is a boilerplate of an Apify actor.",
6 "engines": {
7 "node": ">=18.0.0"
8 },
9 "dependencies": {
10 "apify": "^3.3.2",
11 "crawlee": "^3.12.2",
12 "dayjs": "^1.11.13"
13 },
14 "devDependencies": {
15 "@apify/eslint-config": "^0.4.0",
16 "eslint": "^9.21.0"
17 },
18 "scripts": {
19 "start": "node src/main.js",
20 "lint": "eslint ./src --ext .js,.jsx",
21 "lint:fix": "eslint ./src --ext .js,.jsx --fix",
22 "test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
23 },
24 "author": "It's not you it's me",
25 "license": "ISC"
26}
pnpm-lock.yaml
1lockfileVersion: '9.0'
2
3settings:
4 autoInstallPeers: true
5 excludeLinksFromLockfile: false
6
7importers:
8
9 .:
10 dependencies:
11 apify:
12 specifier: ^3.3.2
13 version: 3.3.2
14 crawlee:
15 specifier: ^3.12.2
16 version: 3.12.2
17 devDependencies:
18 '@apify/eslint-config':
19 specifier: ^0.4.0
20 version: 0.4.0(eslint@9.21.0)
21 eslint:
22 specifier: ^9.21.0
23 version: 9.21.0
24
25packages:
26
27 '@apify/consts@2.37.0':
28 resolution: {integrity: sha512-GCK7wZcUPnHMUpoxd1tgbDgojdgcdxpnaF8UX5h5/hq5ZPdlik7EP2CkU6MpRfYxYl8T5LOsANUJvdB6bGthKA==}
29
30 '@apify/datastructures@2.0.2':
31 resolution: {integrity: sha512-IN9A0s2SCHoZZE1tf4xKgk4fxHM5/0I/UrXhWbn/rSv7E5sA2o0NyHdwcMY2Go9f5qd+E7VAbX6WnESTE6GLeA==}
32
33 '@apify/eslint-config@0.4.0':
34 resolution: {integrity: sha512-cXYQUstZ5wjIQMX9HM9GOg8+s0lWp9xF7Zee8bCl5QAkNJs5gKtCsKStv7v6A2hexUZ+N5HAEN2MFex9IIw2/g==}
35 peerDependencies:
36 eslint: '*'
37
38 '@apify/input_secrets@1.1.65':
39 resolution: {integrity: sha512-1KGrkrG7nWWN0JFg1VxMKHJFjlEC21mncKkNV03QqQ1XeQg1h9hBoCM5yqWeBZt8AmAfJ8kju87ObukWD3ETbA==}
40
41 '@apify/log@2.5.13':
42 resolution: {integrity: sha512-gxvWyD9JWBkLoTX7UfQ4s0F32/UfF4T8TG4jAl2CE0vNKr0COOJFkLmmyWnTNSVDL+yGC+LZp3mtbPnB+l6Sog==}
43
44 '@apify/ps-tree@1.2.0':
45 resolution: {integrity: sha512-VHIswI7rD/R4bToeIDuJ9WJXt+qr5SdhfoZ9RzdjmCs9mgy7l0P4RugQEUCcU+WB4sfImbd4CKwzXcn0uYx1yw==}
46 engines: {node: '>= 0.10'}
47 hasBin: true
48
49 '@apify/pseudo_url@2.0.54':
50 resolution: {integrity: sha512-HYUQvTgFHxnPS3mOL/xDvNv9Thp4ahW4Dwgim6txtsHRLRNuRBmrRtPNBuYIbpIO9LUKVpboXuA6D9nQXtBAlg==}
51
52 '@apify/timeout@0.3.1':
53 resolution: {integrity: sha512-sLIuOqfySki/7AXiQ1yZoCI07vX6aYFLgP6YaJ8e8YLn8CFsRERma/Crxcz0zyCaxhc7C7EPgcs1O+p/djZchw==}
54
55 '@apify/utilities@2.13.1':
56 resolution: {integrity: sha512-czQz2oANACVuwE7KrJKB8LrbhvMZyB1bvwO9jTL2SCmKQHxzY34XLQnSfblq/qsLWrwKynKxWXSvAVRZH2oIlA==}
57
58 '@asamuzakjp/css-color@2.8.3':
59 resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
60
61 '@crawlee/basic@3.12.2':
62 resolution: {integrity: sha512-avSeHqjtvjtQoUgRqBc2HbSV4SijP1zvriLXNoz3V1lEQN63S6CTjQoHVrkG+EG7pD2+OeHILZUKAKgRQ2fSwg==}
63 engines: {node: '>=16.0.0'}
64
65 '@crawlee/browser-pool@3.12.2':
66 resolution: {integrity: sha512-R2LhLpaKpL1bbmC2EMZFsEOpN50MJBSPHqTuFYldC5PIAAF4PyWgKBc3jSf40866iupw9ZpWA0ckzL9PxFNAPw==}
67 engines: {node: '>=16.0.0'}
68 peerDependencies:
69 playwright: '*'
70 puppeteer: '*'
71 peerDependenciesMeta:
72 playwright:
73 optional: true
74 puppeteer:
75 optional: true
76
77 '@crawlee/browser@3.12.2':
78 resolution: {integrity: sha512-Y883TJa+T1kEA8zK2qLhn6qYmZsm9cSEoT4LdgVec4j9kPHbnmlSdLZ1Edk9axHz0LH6cfaR8u0MwAhwx64Z+w==}
79 engines: {node: '>=16.0.0'}
80 peerDependencies:
81 playwright: '*'
82 puppeteer: '*'
83 peerDependenciesMeta:
84 playwright:
85 optional: true
86 puppeteer:
87 optional: true
88
89 '@crawlee/cheerio@3.12.2':
90 resolution: {integrity: sha512-8pJ87szeA1Sm25VRvrKjof8SExdQyZ1rI7vyU295Lh5O3p8pLQG3ktqzCssu9ldXan027vuifIoP/qSz98ysCA==}
91 engines: {node: '>=16.0.0'}
92
93 '@crawlee/cli@3.12.2':
94 resolution: {integrity: sha512-d8LoB44kRPYKxm6uPqAmw6wEOAcWCRGG9kjUHP1ESFWgAnW+lPThWFpljqAfoTr21KQNIpdd27rnRhLzfSoo7Q==}
95 engines: {node: '>=16.0.0'}
96 hasBin: true
97
98 '@crawlee/core@3.12.2':
99 resolution: {integrity: sha512-vwHO1Rg1uxS1oEkF9VMHGiKhLc4ojy0FoJeX2Pq08ibiOIkWkcx8EvA32aEPeAVAvnpwy1TNCFpiiawtUgNKxA==}
100 engines: {node: '>=16.0.0'}
101
102 '@crawlee/http@3.12.2':
103 resolution: {integrity: sha512-rT86gx9JYBJnsgl22cZVMDm0Xm3tnvClJk6MiilprW0GGwXvAwEz4DKRtsSPWD2A1/xy90SdEac7GVtuCGdmKQ==}
104 engines: {node: '>=16.0.0'}
105
106 '@crawlee/jsdom@3.12.2':
107 resolution: {integrity: sha512-9+6GzV6BSb7HlSZ//zpE2TeimzoaqRarQbNlqBz39SRv2cn4+ApasTlB8qJaZnHX4/Mt9QExAv4AaB4FG0miFA==}
108 engines: {node: '>=16.0.0'}
109
110 '@crawlee/linkedom@3.12.2':
111 resolution: {integrity: sha512-x/xw8aFYqFv1iAuVlnn4Akh/LM5FsmSryE16f0cYFtPegboOeq+Iw3ebCBI2VGx9CLjH2xnrpv/kGzgH+JYs0Q==}
112 engines: {node: '>=16.0.0'}
113
114 '@crawlee/memory-storage@3.12.2':
115 resolution: {integrity: sha512-KUnTpYIzYy8Fnyqf2JdufyM6Nd/1/nUsrHF3hFUdQhEfby0yX8kgc9UIF8OKieGfqUuYMKdfpeWyB8jRPp6Jyw==}
116 engines: {node: '>= 16'}
117
118 '@crawlee/playwright@3.12.2':
119 resolution: {integrity: sha512-a+JgVs+PBt/ePyi4Y9PnLtEHsJ+BYCsAu+fKFxt5SfLFbgfreIpSN5LnlSGPlUOdFxaD0I+qz3H02dxtQDpGug==}
120 engines: {node: '>=16.0.0'}
121 peerDependencies:
122 playwright: '*'
123 peerDependenciesMeta:
124 playwright:
125 optional: true
126
127 '@crawlee/puppeteer@3.12.2':
128 resolution: {integrity: sha512-XZu0NrTXEo3WufXVpJZjqFrtzxwg6Zp4rW2Mrsny2nPzcsMXX5nFsudj0N1elXXmf5ZANUD9p1T803RBcK49mg==}
129 engines: {node: '>=16.0.0'}
130 peerDependencies:
131 puppeteer: '*'
132 peerDependenciesMeta:
133 puppeteer:
134 optional: true
135
136 '@crawlee/templates@3.12.2':
137 resolution: {integrity: sha512-3dn0bdoagX1IsKHQh4YCrXTmQyUR1IgDKBwfcJGUThiiIOwn53hyO0/KsETqn8Fb0l2//10Q+xxJEDLxNN5ksA==}
138 engines: {node: '>=16.0.0'}
139
140 '@crawlee/types@3.12.2':
141 resolution: {integrity: sha512-mdSN8FSOGLzPDyO3wC5k6BvZKv467rvrLsIqqAkiN87TgQI5lwV+k2bBQGdajzcjDQn+taWG67xDbbZg6BvFVw==}
142 engines: {node: '>=16.0.0'}
143
144 '@crawlee/utils@3.12.2':
145 resolution: {integrity: sha512-Yly1WSm1y0Te1/BtrsbPnrZTIL2eoRvk/kmAgyBOC2o1Icu0QnFqWJh0iAuH7Ed92wYVgk4E/Cr5jYls35xcbQ==}
146 engines: {node: '>=16.0.0'}
147
148 '@csstools/color-helpers@5.0.1':
149 resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
150 engines: {node: '>=18'}
151
152 '@csstools/css-calc@2.1.1':
153 resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
154 engines: {node: '>=18'}
155 peerDependencies:
156 '@csstools/css-parser-algorithms': ^3.0.4
157 '@csstools/css-tokenizer': ^3.0.3
158
159 '@csstools/css-color-parser@3.0.7':
160 resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
161 engines: {node: '>=18'}
162 peerDependencies:
163 '@csstools/css-parser-algorithms': ^3.0.4
164 '@csstools/css-tokenizer': ^3.0.3
165
166 '@csstools/css-parser-algorithms@3.0.4':
167 resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
168 engines: {node: '>=18'}
169 peerDependencies:
170 '@csstools/css-tokenizer': ^3.0.3
171
172 '@csstools/css-tokenizer@3.0.3':
173 resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
174 engines: {node: '>=18'}
175
176 '@eslint-community/eslint-utils@4.4.1':
177 resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
178 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
179 peerDependencies:
180 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
181
182 '@eslint-community/regexpp@4.12.1':
183 resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
184 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
185
186 '@eslint/config-array@0.19.2':
187 resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
188 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
189
190 '@eslint/core@0.12.0':
191 resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
192 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
193
194 '@eslint/eslintrc@3.3.0':
195 resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
196 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
197
198 '@eslint/js@9.21.0':
199 resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==}
200 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
201
202 '@eslint/object-schema@2.1.6':
203 resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
204 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
205
206 '@eslint/plugin-kit@0.2.7':
207 resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
208 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
209
210 '@humanfs/core@0.19.1':
211 resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
212 engines: {node: '>=18.18.0'}
213
214 '@humanfs/node@0.16.6':
215 resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
216 engines: {node: '>=18.18.0'}
217
218 '@humanwhocodes/module-importer@1.0.1':
219 resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
220 engines: {node: '>=12.22'}
221
222 '@humanwhocodes/retry@0.3.1':
223 resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
224 engines: {node: '>=18.18'}
225
226 '@humanwhocodes/retry@0.4.2':
227 resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
228 engines: {node: '>=18.18'}
229
230 '@inquirer/figures@1.0.10':
231 resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==}
232 engines: {node: '>=18'}
233
234 '@rtsao/scc@1.1.0':
235 resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
236
237 '@sapphire/async-queue@1.5.5':
238 resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==}
239 engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
240
241 '@sapphire/shapeshift@3.9.7':
242 resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==}
243 engines: {node: '>=v16'}
244
245 '@sec-ant/readable-stream@0.4.1':
246 resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
247
248 '@sindresorhus/is@4.6.0':
249 resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
250 engines: {node: '>=10'}
251
252 '@sindresorhus/is@5.6.0':
253 resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
254 engines: {node: '>=14.16'}
255
256 '@sindresorhus/is@7.0.1':
257 resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
258 engines: {node: '>=18'}
259
260 '@szmarczak/http-timer@5.0.1':
261 resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
262 engines: {node: '>=14.16'}
263
264 '@tokenizer/inflate@0.2.6':
265 resolution: {integrity: sha512-SdR/i05U7Xhnsq36iyIq/ZiGGw4PKzw4ww3bOq80Pjj4wyXpqyTcgrgdDdGlcatnlvzNJx8CQw3hp6QZvkUwhA==}
266 engines: {node: '>=16'}
267
268 '@tokenizer/token@0.3.0':
269 resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
270
271 '@types/content-type@1.1.8':
272 resolution: {integrity: sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg==}
273
274 '@types/estree@1.0.6':
275 resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
276
277 '@types/http-cache-semantics@4.0.4':
278 resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
279
280 '@types/jsdom@21.1.7':
281 resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
282
283 '@types/json-schema@7.0.15':
284 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
285
286 '@types/json5@0.0.29':
287 resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
288
289 '@types/node@22.13.5':
290 resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
291
292 '@types/sax@1.2.7':
293 resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
294
295 '@types/tough-cookie@4.0.5':
296 resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
297
298 '@vladfrangu/async_event_emitter@2.4.6':
299 resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==}
300 engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
301
302 acorn-jsx@5.3.2:
303 resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
304 peerDependencies:
305 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
306
307 acorn@8.14.0:
308 resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
309 engines: {node: '>=0.4.0'}
310 hasBin: true
311
312 adm-zip@0.5.16:
313 resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
314 engines: {node: '>=12.0'}
315
316 agent-base@7.1.3:
317 resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
318 engines: {node: '>= 14'}
319
320 agentkeepalive@4.6.0:
321 resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
322 engines: {node: '>= 8.0.0'}
323
324 ajv@6.12.6:
325 resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
326
327 ansi-colors@4.1.3:
328 resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
329 engines: {node: '>=6'}
330
331 ansi-escapes@4.3.2:
332 resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
333 engines: {node: '>=8'}
334
335 ansi-regex@2.1.1:
336 resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
337 engines: {node: '>=0.10.0'}
338
339 ansi-regex@5.0.1:
340 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
341 engines: {node: '>=8'}
342
343 ansi-styles@2.2.1:
344 resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
345 engines: {node: '>=0.10.0'}
346
347 ansi-styles@4.3.0:
348 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
349 engines: {node: '>=8'}
350
351 apify-client@2.12.0:
352 resolution: {integrity: sha512-h04rPVft8tNjnwZswqF2k46bdHZWsDsfOE8PkmklZ9+/s/mb/Q/dMOXCx0u2+RTc8QoAkYS9LYs97wZyUWpoag==}
353
354 apify@3.3.2:
355 resolution: {integrity: sha512-OFP5YVshd0KxUP4yueUjX/hR5PGC0zzYy0xdcxX8OFAcrkrh8VaeGcOJza5uHpPFRwDnPKhiNa3YzcA3rnAHSQ==}
356 engines: {node: '>=16.0.0'}
357
358 argparse@2.0.1:
359 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
360
361 aria-query@5.3.2:
362 resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
363 engines: {node: '>= 0.4'}
364
365 array-buffer-byte-length@1.0.2:
366 resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
367 engines: {node: '>= 0.4'}
368
369 array-includes@3.1.8:
370 resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
371 engines: {node: '>= 0.4'}
372
373 array.prototype.findlast@1.2.5:
374 resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
375 engines: {node: '>= 0.4'}
376
377 array.prototype.findlastindex@1.2.5:
378 resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
379 engines: {node: '>= 0.4'}
380
381 array.prototype.flat@1.3.3:
382 resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
383 engines: {node: '>= 0.4'}
384
385 array.prototype.flatmap@1.3.3:
386 resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
387 engines: {node: '>= 0.4'}
388
389 array.prototype.tosorted@1.1.4:
390 resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
391 engines: {node: '>= 0.4'}
392
393 arraybuffer.prototype.slice@1.0.4:
394 resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
395 engines: {node: '>= 0.4'}
396
397 ast-types-flow@0.0.8:
398 resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
399
400 async-function@1.0.0:
401 resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
402 engines: {node: '>= 0.4'}
403
404 async-retry@1.3.3:
405 resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
406
407 asynckit@0.4.0:
408 resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
409
410 available-typed-arrays@1.0.7:
411 resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
412 engines: {node: '>= 0.4'}
413
414 axe-core@4.10.2:
415 resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==}
416 engines: {node: '>=4'}
417
418 axios@1.7.9:
419 resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
420
421 axobject-query@4.1.0:
422 resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
423 engines: {node: '>= 0.4'}
424
425 balanced-match@1.0.2:
426 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
427
428 base64-js@1.5.1:
429 resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
430
431 bl@4.1.0:
432 resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
433
434 boolbase@1.0.0:
435 resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
436
437 brace-expansion@1.1.11:
438 resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
439
440 brace-expansion@2.0.1:
441 resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
442
443 browserslist@4.24.4:
444 resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
445 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
446 hasBin: true
447
448 buffer@5.7.1:
449 resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
450
451 cacheable-lookup@7.0.0:
452 resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
453 engines: {node: '>=14.16'}
454
455 cacheable-request@12.0.1:
456 resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==}
457 engines: {node: '>=18'}
458
459 call-bind-apply-helpers@1.0.2:
460 resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
461 engines: {node: '>= 0.4'}
462
463 call-bind@1.0.8:
464 resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
465 engines: {node: '>= 0.4'}
466
467 call-bound@1.0.3:
468 resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
469 engines: {node: '>= 0.4'}
470
471 callsites@3.1.0:
472 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
473 engines: {node: '>=6'}
474
475 callsites@4.2.0:
476 resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==}
477 engines: {node: '>=12.20'}
478
479 caniuse-lite@1.0.30001700:
480 resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
481
482 chalk@1.1.3:
483 resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
484 engines: {node: '>=0.10.0'}
485
486 chalk@4.1.2:
487 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
488 engines: {node: '>=10'}
489
490 chardet@0.7.0:
491 resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
492
493 cheerio-select@2.1.0:
494 resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
495
496 cheerio@1.0.0-rc.12:
497 resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
498 engines: {node: '>= 6'}
499
500 cli-cursor@3.1.0:
501 resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
502 engines: {node: '>=8'}
503
504 cli-spinners@2.9.2:
505 resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
506 engines: {node: '>=6'}
507
508 cli-width@3.0.0:
509 resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
510 engines: {node: '>= 10'}
511
512 cli-width@4.1.0:
513 resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
514 engines: {node: '>= 12'}
515
516 cliui@8.0.1:
517 resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
518 engines: {node: '>=12'}
519
520 clone@1.0.4:
521 resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
522 engines: {node: '>=0.8'}
523
524 color-convert@2.0.1:
525 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
526 engines: {node: '>=7.0.0'}
527
528 color-name@1.1.4:
529 resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
530
531 combined-stream@1.0.8:
532 resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
533 engines: {node: '>= 0.8'}
534
535 concat-map@0.0.1:
536 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
537
538 confusing-browser-globals@1.0.11:
539 resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
540
541 content-type@1.0.5:
542 resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
543 engines: {node: '>= 0.6'}
544
545 crawlee@3.12.2:
546 resolution: {integrity: sha512-+toTCJ1HUEsaRdvYhaQy1nZ4rh6zMVeDOduv9bLYI/26oCff/FG1F+dgCDfngnMcFCyZMuM89bDPUxrzB3bH8A==}
547 engines: {node: '>=16.0.0'}
548 hasBin: true
549 peerDependencies:
550 playwright: '*'
551 puppeteer: '*'
552 peerDependenciesMeta:
553 playwright:
554 optional: true
555 puppeteer:
556 optional: true
557
558 cross-spawn@7.0.6:
559 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
560 engines: {node: '>= 8'}
561
562 css-select@5.1.0:
563 resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
564
565 css-what@6.1.0:
566 resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
567 engines: {node: '>= 6'}
568
569 cssom@0.5.0:
570 resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
571
572 cssstyle@4.2.1:
573 resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
574 engines: {node: '>=18'}
575
576 csv-stringify@6.5.2:
577 resolution: {integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==}
578
579 damerau-levenshtein@1.0.8:
580 resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
581
582 data-urls@5.0.0:
583 resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
584 engines: {node: '>=18'}
585
586 data-view-buffer@1.0.2:
587 resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
588 engines: {node: '>= 0.4'}
589
590 data-view-byte-length@1.0.2:
591 resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
592 engines: {node: '>= 0.4'}
593
594 data-view-byte-offset@1.0.1:
595 resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
596 engines: {node: '>= 0.4'}
597
598 debug@3.2.7:
599 resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
600 peerDependencies:
601 supports-color: '*'
602 peerDependenciesMeta:
603 supports-color:
604 optional: true
605
606 debug@4.4.0:
607 resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
608 engines: {node: '>=6.0'}
609 peerDependencies:
610 supports-color: '*'
611 peerDependenciesMeta:
612 supports-color:
613 optional: true
614
615 decimal.js@10.5.0:
616 resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
617
618 decompress-response@6.0.0:
619 resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
620 engines: {node: '>=10'}
621
622 deep-is@0.1.4:
623 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
624
625 defaults@1.0.4:
626 resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
627
628 defer-to-connect@2.0.1:
629 resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
630 engines: {node: '>=10'}
631
632 define-data-property@1.1.4:
633 resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
634 engines: {node: '>= 0.4'}
635
636 define-properties@1.2.1:
637 resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
638 engines: {node: '>= 0.4'}
639
640 delayed-stream@1.0.0:
641 resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
642 engines: {node: '>=0.4.0'}
643
644 devtools-protocol@0.0.1423531:
645 resolution: {integrity: sha512-z6cOcajZWxk80zvFnkTGa7tj3oqF+C5SnOF1KSMeAr5/WW/nLNHlEpKr7voSzMz8IaUoq5rjdI0Mqv5k/BUkhg==}
646
647 doctrine@2.1.0:
648 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
649 engines: {node: '>=0.10.0'}
650
651 dom-serializer@2.0.0:
652 resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
653
654 domelementtype@2.3.0:
655 resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
656
657 domhandler@5.0.3:
658 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
659 engines: {node: '>= 4'}
660
661 domutils@3.2.2:
662 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
663
664 dot-prop@6.0.1:
665 resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
666 engines: {node: '>=10'}
667
668 dot-prop@7.2.0:
669 resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==}
670 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
671
672 dunder-proto@1.0.1:
673 resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
674 engines: {node: '>= 0.4'}
675
676 duplexer@0.1.2:
677 resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
678
679 electron-to-chromium@1.5.103:
680 resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==}
681
682 emoji-regex@8.0.0:
683 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
684
685 emoji-regex@9.2.2:
686 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
687
688 entities@4.5.0:
689 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
690 engines: {node: '>=0.12'}
691
692 entities@6.0.0:
693 resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
694 engines: {node: '>=0.12'}
695
696 es-abstract@1.23.9:
697 resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
698 engines: {node: '>= 0.4'}
699
700 es-define-property@1.0.1:
701 resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
702 engines: {node: '>= 0.4'}
703
704 es-errors@1.3.0:
705 resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
706 engines: {node: '>= 0.4'}
707
708 es-iterator-helpers@1.2.1:
709 resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
710 engines: {node: '>= 0.4'}
711
712 es-object-atoms@1.1.1:
713 resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
714 engines: {node: '>= 0.4'}
715
716 es-set-tostringtag@2.1.0:
717 resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
718 engines: {node: '>= 0.4'}
719
720 es-shim-unscopables@1.1.0:
721 resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
722 engines: {node: '>= 0.4'}
723
724 es-to-primitive@1.3.0:
725 resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
726 engines: {node: '>= 0.4'}
727
728 escalade@3.2.0:
729 resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
730 engines: {node: '>=6'}
731
732 escape-string-regexp@1.0.5:
733 resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
734 engines: {node: '>=0.8.0'}
735
736 escape-string-regexp@4.0.0:
737 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
738 engines: {node: '>=10'}
739
740 eslint-config-airbnb-base@15.0.0:
741 resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
742 engines: {node: ^10.12.0 || >=12.0.0}
743 peerDependencies:
744 eslint: ^7.32.0 || ^8.2.0
745 eslint-plugin-import: ^2.25.2
746
747 eslint-config-airbnb@19.0.4:
748 resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==}
749 engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0}
750 peerDependencies:
751 eslint: ^7.32.0 || ^8.2.0
752 eslint-plugin-import: ^2.25.3
753 eslint-plugin-jsx-a11y: ^6.5.1
754 eslint-plugin-react: ^7.28.0
755 eslint-plugin-react-hooks: ^4.3.0
756
757 eslint-import-resolver-node@0.3.9:
758 resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
759
760 eslint-import-resolver-typescript@2.7.1:
761 resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
762 engines: {node: '>=4'}
763 peerDependencies:
764 eslint: '*'
765 eslint-plugin-import: '*'
766
767 eslint-module-utils@2.12.0:
768 resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
769 engines: {node: '>=4'}
770 peerDependencies:
771 '@typescript-eslint/parser': '*'
772 eslint: '*'
773 eslint-import-resolver-node: '*'
774 eslint-import-resolver-typescript: '*'
775 eslint-import-resolver-webpack: '*'
776 peerDependenciesMeta:
777 '@typescript-eslint/parser':
778 optional: true
779 eslint:
780 optional: true
781 eslint-import-resolver-node:
782 optional: true
783 eslint-import-resolver-typescript:
784 optional: true
785 eslint-import-resolver-webpack:
786 optional: true
787
788 eslint-plugin-import@2.31.0:
789 resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
790 engines: {node: '>=4'}
791 peerDependencies:
792 '@typescript-eslint/parser': '*'
793 eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
794 peerDependenciesMeta:
795 '@typescript-eslint/parser':
796 optional: true
797
798 eslint-plugin-jsx-a11y@6.10.2:
799 resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
800 engines: {node: '>=4.0'}
801 peerDependencies:
802 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
803
804 eslint-plugin-react-hooks@4.6.2:
805 resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
806 engines: {node: '>=10'}
807 peerDependencies:
808 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
809
810 eslint-plugin-react@7.37.4:
811 resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==}
812 engines: {node: '>=4'}
813 peerDependencies:
814 eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
815
816 eslint-scope@8.2.0:
817 resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
818 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
819
820 eslint-visitor-keys@3.4.3:
821 resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
822 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
823
824 eslint-visitor-keys@4.2.0:
825 resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
826 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
827
828 eslint@9.21.0:
829 resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==}
830 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
831 hasBin: true
832 peerDependencies:
833 jiti: '*'
834 peerDependenciesMeta:
835 jiti:
836 optional: true
837
838 espree@10.3.0:
839 resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
840 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
841
842 esquery@1.6.0:
843 resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
844 engines: {node: '>=0.10'}
845
846 esrecurse@4.3.0:
847 resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
848 engines: {node: '>=4.0'}
849
850 estraverse@5.3.0:
851 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
852 engines: {node: '>=4.0'}
853
854 esutils@2.0.3:
855 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
856 engines: {node: '>=0.10.0'}
857
858 event-stream@3.3.4:
859 resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
860
861 external-editor@3.1.0:
862 resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
863 engines: {node: '>=4'}
864
865 fast-deep-equal@3.1.3:
866 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
867
868 fast-json-stable-stringify@2.1.0:
869 resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
870
871 fast-levenshtein@2.0.6:
872 resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
873
874 fflate@0.8.2:
875 resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
876
877 figlet@1.8.0:
878 resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==}
879 engines: {node: '>= 0.4.0'}
880 hasBin: true
881
882 figures@3.2.0:
883 resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
884 engines: {node: '>=8'}
885
886 file-entry-cache@8.0.0:
887 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
888 engines: {node: '>=16.0.0'}
889
890 file-type@20.1.0:
891 resolution: {integrity: sha512-XoxU+lETfCf+bYK3SXkxFusAvmtYQl1u/ZC4zw1DBLEsHUvh339uwYucgQnnSMz1mRCWYJrCzsbJJ95hsQbZ8A==}
892 engines: {node: '>=18'}
893
894 find-up@4.1.0:
895 resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
896 engines: {node: '>=8'}
897
898 find-up@5.0.0:
899 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
900 engines: {node: '>=10'}
901
902 fingerprint-generator@2.1.62:
903 resolution: {integrity: sha512-Bhx2Cxm0l2xYhO1KAPs9orozlONdQzm6qC+UrLk7Np3TjMS8OuHNK6LQOGIuCZnAoP3ZMLl85WaCqI2nH5m01w==}
904 engines: {node: '>=16.0.0'}
905
906 fingerprint-injector@2.1.62:
907 resolution: {integrity: sha512-kTzJAMuVWAiZ1uA1RxYT40LGIxkLhDq2pbk//bliYuUALbSQ1UAXHZASdZTnLlFvrFPIKlBK19QmllXlA/guYA==}
908 engines: {node: '>=16.0.0'}
909 peerDependencies:
910 playwright: ^1.22.2
911 puppeteer: '>= 9.x'
912 peerDependenciesMeta:
913 playwright:
914 optional: true
915 puppeteer:
916 optional: true
917
918 flat-cache@4.0.1:
919 resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
920 engines: {node: '>=16'}
921
922 flatted@3.3.3:
923 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
924
925 follow-redirects@1.15.9:
926 resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
927 engines: {node: '>=4.0'}
928 peerDependencies:
929 debug: '*'
930 peerDependenciesMeta:
931 debug:
932 optional: true
933
934 for-each@0.3.5:
935 resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
936 engines: {node: '>= 0.4'}
937
938 form-data-encoder@4.0.2:
939 resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
940 engines: {node: '>= 18'}
941
942 form-data@4.0.2:
943 resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
944 engines: {node: '>= 6'}
945
946 from@0.1.7:
947 resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
948
949 fs-extra@11.3.0:
950 resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
951 engines: {node: '>=14.14'}
952
953 fs.realpath@1.0.0:
954 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
955
956 function-bind@1.1.2:
957 resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
958
959 function.prototype.name@1.1.8:
960 resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
961 engines: {node: '>= 0.4'}
962
963 functions-have-names@1.2.3:
964 resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
965
966 generative-bayesian-network@2.1.62:
967 resolution: {integrity: sha512-+zq1/AHdxb+0MXF34krM/IUu/N9gI6llzQg2gf7WMfuzh0nv6xbhb8QyfL48MOJihum7wSE90+/hMXK60X+Kpw==}
968
969 get-caller-file@2.0.5:
970 resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
971 engines: {node: 6.* || 8.* || >= 10.*}
972
973 get-intrinsic@1.3.0:
974 resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
975 engines: {node: '>= 0.4'}
976
977 get-proto@1.0.1:
978 resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
979 engines: {node: '>= 0.4'}
980
981 get-stream@9.0.1:
982 resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
983 engines: {node: '>=18'}
984
985 get-symbol-description@1.1.0:
986 resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
987 engines: {node: '>= 0.4'}
988
989 glob-parent@6.0.2:
990 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
991 engines: {node: '>=10.13.0'}
992
993 glob@7.2.3:
994 resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
995 deprecated: Glob versions prior to v9 are no longer supported
996
997 globals@14.0.0:
998 resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
999 engines: {node: '>=18'}
1000
1001 globalthis@1.0.4:
1002 resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
1003 engines: {node: '>= 0.4'}
1004
1005 gopd@1.2.0:
1006 resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
1007 engines: {node: '>= 0.4'}
1008
1009 got-scraping@4.1.1:
1010 resolution: {integrity: sha512-MbT+NMMU4VgvOg2tFIPOSIrMfH986fm0LJ17RxBLKlyTs3gh3xIMETpe+zdPaXY7tH1j6YYeqtfG0TnVMx6V2g==}
1011 engines: {node: '>=16'}
1012
1013 got@14.4.6:
1014 resolution: {integrity: sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==}
1015 engines: {node: '>=20'}
1016
1017 graceful-fs@4.2.11:
1018 resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1019
1020 has-ansi@2.0.0:
1021 resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
1022 engines: {node: '>=0.10.0'}
1023
1024 has-bigints@1.1.0:
1025 resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
1026 engines: {node: '>= 0.4'}
1027
1028 has-flag@4.0.0:
1029 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1030 engines: {node: '>=8'}
1031
1032 has-property-descriptors@1.0.2:
1033 resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1034
1035 has-proto@1.2.0:
1036 resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
1037 engines: {node: '>= 0.4'}
1038
1039 has-symbols@1.1.0:
1040 resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1041 engines: {node: '>= 0.4'}
1042
1043 has-tostringtag@1.0.2:
1044 resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1045 engines: {node: '>= 0.4'}
1046
1047 hasown@2.0.2:
1048 resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1049 engines: {node: '>= 0.4'}
1050
1051 header-generator@2.1.62:
1052 resolution: {integrity: sha512-L4y1Fush4bkC/3zEurWjiwzeuekAH3HMYA508EZDmvk1wPmcbpV/mq3u3d3fxq7v4oPmaCfsRm1T5DUH19uikA==}
1053 engines: {node: '>=16.0.0'}
1054
1055 html-encoding-sniffer@4.0.0:
1056 resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
1057 engines: {node: '>=18'}
1058
1059 html-escaper@3.0.3:
1060 resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
1061
1062 htmlparser2@10.0.0:
1063 resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
1064
1065 htmlparser2@8.0.2:
1066 resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
1067
1068 htmlparser2@9.1.0:
1069 resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
1070
1071 http-cache-semantics@4.1.1:
1072 resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
1073
1074 http-proxy-agent@7.0.2:
1075 resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1076 engines: {node: '>= 14'}
1077
1078 http2-wrapper@2.2.1:
1079 resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
1080 engines: {node: '>=10.19.0'}
1081
1082 https-proxy-agent@7.0.6:
1083 resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
1084 engines: {node: '>= 14'}
1085
1086 humanize-ms@1.2.1:
1087 resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
1088
1089 iconv-lite@0.4.24:
1090 resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1091 engines: {node: '>=0.10.0'}
1092
1093 iconv-lite@0.6.3:
1094 resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1095 engines: {node: '>=0.10.0'}
1096
1097 idcac-playwright@0.1.3:
1098 resolution: {integrity: sha512-VVYQ4sv6OrUJKVzYaIP1hq0qAHd1O22HW5LnL1Wf6zkrLStQ/QEg4iJ0rllIOEpd+Rmm+635AJD59A+Vw+2PgQ==}
1099
1100 ieee754@1.2.1:
1101 resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1102
1103 ignore@5.3.2:
1104 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1105 engines: {node: '>= 4'}
1106
1107 import-fresh@3.3.1:
1108 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1109 engines: {node: '>=6'}
1110
1111 import-local@3.2.0:
1112 resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
1113 engines: {node: '>=8'}
1114 hasBin: true
1115
1116 imurmurhash@0.1.4:
1117 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1118 engines: {node: '>=0.8.19'}
1119
1120 inflight@1.0.6:
1121 resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1122 deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1123
1124 inherits@2.0.4:
1125 resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1126
1127 inquirer@8.2.6:
1128 resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
1129 engines: {node: '>=12.0.0'}
1130
1131 inquirer@9.3.7:
1132 resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==}
1133 engines: {node: '>=18'}
1134
1135 internal-slot@1.1.0:
1136 resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1137 engines: {node: '>= 0.4'}
1138
1139 ip-address@9.0.5:
1140 resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
1141 engines: {node: '>= 12'}
1142
1143 is-any-array@2.0.1:
1144 resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==}
1145
1146 is-array-buffer@3.0.5:
1147 resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1148 engines: {node: '>= 0.4'}
1149
1150 is-async-function@2.1.1:
1151 resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1152 engines: {node: '>= 0.4'}
1153
1154 is-bigint@1.1.0:
1155 resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1156 engines: {node: '>= 0.4'}
1157
1158 is-boolean-object@1.2.2:
1159 resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
1160 engines: {node: '>= 0.4'}
1161
1162 is-callable@1.2.7:
1163 resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1164 engines: {node: '>= 0.4'}
1165
1166 is-core-module@2.16.1:
1167 resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1168 engines: {node: '>= 0.4'}
1169
1170 is-data-view@1.0.2:
1171 resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1172 engines: {node: '>= 0.4'}
1173
1174 is-date-object@1.1.0:
1175 resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1176 engines: {node: '>= 0.4'}
1177
1178 is-extglob@2.1.1:
1179 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1180 engines: {node: '>=0.10.0'}
1181
1182 is-finalizationregistry@1.1.1:
1183 resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1184 engines: {node: '>= 0.4'}
1185
1186 is-fullwidth-code-point@3.0.0:
1187 resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1188 engines: {node: '>=8'}
1189
1190 is-generator-function@1.1.0:
1191 resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1192 engines: {node: '>= 0.4'}
1193
1194 is-glob@4.0.3:
1195 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1196 engines: {node: '>=0.10.0'}
1197
1198 is-interactive@1.0.0:
1199 resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1200 engines: {node: '>=8'}
1201
1202 is-map@2.0.3:
1203 resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1204 engines: {node: '>= 0.4'}
1205
1206 is-number-object@1.1.1:
1207 resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1208 engines: {node: '>= 0.4'}
1209
1210 is-obj@2.0.0:
1211 resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
1212 engines: {node: '>=8'}
1213
1214 is-potential-custom-element-name@1.0.1:
1215 resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
1216
1217 is-regex@1.2.1:
1218 resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1219 engines: {node: '>= 0.4'}
1220
1221 is-set@2.0.3:
1222 resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1223 engines: {node: '>= 0.4'}
1224
1225 is-shared-array-buffer@1.0.4:
1226 resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1227 engines: {node: '>= 0.4'}
1228
1229 is-stream@4.0.1:
1230 resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
1231 engines: {node: '>=18'}
1232
1233 is-string@1.1.1:
1234 resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1235 engines: {node: '>= 0.4'}
1236
1237 is-symbol@1.1.1:
1238 resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1239 engines: {node: '>= 0.4'}
1240
1241 is-typed-array@1.1.15:
1242 resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1243 engines: {node: '>= 0.4'}
1244
1245 is-unicode-supported@0.1.0:
1246 resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1247 engines: {node: '>=10'}
1248
1249 is-weakmap@2.0.2:
1250 resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1251 engines: {node: '>= 0.4'}
1252
1253 is-weakref@1.1.1:
1254 resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
1255 engines: {node: '>= 0.4'}
1256
1257 is-weakset@2.0.4:
1258 resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1259 engines: {node: '>= 0.4'}
1260
1261 isarray@2.0.5:
1262 resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1263
1264 isexe@2.0.0:
1265 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1266
1267 iterator.prototype@1.1.5:
1268 resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
1269 engines: {node: '>= 0.4'}
1270
1271 jquery@3.7.1:
1272 resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
1273
1274 js-tokens@4.0.0:
1275 resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1276
1277 js-yaml@4.1.0:
1278 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1279 hasBin: true
1280
1281 jsbn@1.1.0:
1282 resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
1283
1284 jsdom@26.0.0:
1285 resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==}
1286 engines: {node: '>=18'}
1287 peerDependencies:
1288 canvas: ^3.0.0
1289 peerDependenciesMeta:
1290 canvas:
1291 optional: true
1292
1293 json-buffer@3.0.1:
1294 resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1295
1296 json-schema-traverse@0.4.1:
1297 resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1298
1299 json-stable-stringify-without-jsonify@1.0.1:
1300 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1301
1302 json5@1.0.2:
1303 resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1304 hasBin: true
1305
1306 json5@2.2.3:
1307 resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1308 engines: {node: '>=6'}
1309 hasBin: true
1310
1311 jsonfile@6.1.0:
1312 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1313
1314 jsx-ast-utils@3.3.5:
1315 resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
1316 engines: {node: '>=4.0'}
1317
1318 keyv@4.5.4:
1319 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1320
1321 language-subtag-registry@0.3.23:
1322 resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
1323
1324 language-tags@1.0.9:
1325 resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
1326 engines: {node: '>=0.10'}
1327
1328 levn@0.4.1:
1329 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1330 engines: {node: '>= 0.8.0'}
1331
1332 linkedom@0.18.9:
1333 resolution: {integrity: sha512-Pfvhwjs46nBrcQdauQjMXDJZqj6VwN7KStT84xQqmIgD9bPH6UVJ/ESW8y4VHVF2h7di0/P+f4Iln4U5emRcmg==}
1334
1335 locate-path@5.0.0:
1336 resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1337 engines: {node: '>=8'}
1338
1339 locate-path@6.0.0:
1340 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1341 engines: {node: '>=10'}
1342
1343 lodash.isequal@4.5.0:
1344 resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
1345 deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
1346
1347 lodash.merge@4.6.2:
1348 resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1349
1350 lodash@4.17.21:
1351 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1352
1353 log-symbols@4.1.0:
1354 resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1355 engines: {node: '>=10'}
1356
1357 loose-envify@1.4.0:
1358 resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1359 hasBin: true
1360
1361 lowercase-keys@3.0.0:
1362 resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
1363 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1364
1365 lru-cache@10.4.3:
1366 resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1367
1368 map-stream@0.1.0:
1369 resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
1370
1371 math-intrinsics@1.1.0:
1372 resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1373 engines: {node: '>= 0.4'}
1374
1375 mime-db@1.52.0:
1376 resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1377 engines: {node: '>= 0.6'}
1378
1379 mime-types@2.1.35:
1380 resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1381 engines: {node: '>= 0.6'}
1382
1383 mimic-fn@2.1.0:
1384 resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1385 engines: {node: '>=6'}
1386
1387 mimic-response@3.1.0:
1388 resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
1389 engines: {node: '>=10'}
1390
1391 mimic-response@4.0.0:
1392 resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
1393 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1394
1395 minimatch@3.1.2:
1396 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1397
1398 minimatch@9.0.5:
1399 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1400 engines: {node: '>=16 || 14 >=14.17'}
1401
1402 minimist@1.2.8:
1403 resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1404
1405 ml-array-max@1.2.4:
1406 resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==}
1407
1408 ml-array-min@1.2.3:
1409 resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==}
1410
1411 ml-array-rescale@1.3.7:
1412 resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==}
1413
1414 ml-logistic-regression@2.0.0:
1415 resolution: {integrity: sha512-xHhB91ut8GRRbJyB1ZQfKsl1MHmE1PqMeRjxhks96M5BGvCbC9eEojf4KgRMKM2LxFblhVUcVzweAoPB48Nt0A==}
1416
1417 ml-matrix@6.12.0:
1418 resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==}
1419
1420 ms@2.1.3:
1421 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1422
1423 mute-stream@0.0.8:
1424 resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
1425
1426 mute-stream@1.0.0:
1427 resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
1428 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1429
1430 nanoid@3.3.8:
1431 resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1432 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1433 hasBin: true
1434
1435 natural-compare@1.4.0:
1436 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1437
1438 node-releases@2.0.19:
1439 resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1440
1441 normalize-url@8.0.1:
1442 resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
1443 engines: {node: '>=14.16'}
1444
1445 nth-check@2.1.1:
1446 resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
1447
1448 nwsapi@2.2.16:
1449 resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
1450
1451 object-assign@4.1.1:
1452 resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1453 engines: {node: '>=0.10.0'}
1454
1455 object-inspect@1.13.4:
1456 resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1457 engines: {node: '>= 0.4'}
1458
1459 object-keys@1.1.1:
1460 resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1461 engines: {node: '>= 0.4'}
1462
1463 object.assign@4.1.7:
1464 resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1465 engines: {node: '>= 0.4'}
1466
1467 object.entries@1.1.8:
1468 resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
1469 engines: {node: '>= 0.4'}
1470
1471 object.fromentries@2.0.8:
1472 resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
1473 engines: {node: '>= 0.4'}
1474
1475 object.groupby@1.0.3:
1476 resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
1477 engines: {node: '>= 0.4'}
1478
1479 object.values@1.2.1:
1480 resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
1481 engines: {node: '>= 0.4'}
1482
1483 once@1.4.0:
1484 resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1485
1486 onetime@5.1.2:
1487 resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1488 engines: {node: '>=6'}
1489
1490 optionator@0.9.4:
1491 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1492 engines: {node: '>= 0.8.0'}
1493
1494 ora@5.4.1:
1495 resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
1496 engines: {node: '>=10'}
1497
1498 os-tmpdir@1.0.2:
1499 resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1500 engines: {node: '>=0.10.0'}
1501
1502 ow@0.28.2:
1503 resolution: {integrity: sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==}
1504 engines: {node: '>=12'}
1505
1506 ow@1.1.1:
1507 resolution: {integrity: sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==}
1508 engines: {node: '>=14.16'}
1509
1510 own-keys@1.0.1:
1511 resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1512 engines: {node: '>= 0.4'}
1513
1514 p-cancelable@4.0.1:
1515 resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==}
1516 engines: {node: '>=14.16'}
1517
1518 p-limit@2.3.0:
1519 resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1520 engines: {node: '>=6'}
1521
1522 p-limit@3.1.0:
1523 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1524 engines: {node: '>=10'}
1525
1526 p-locate@4.1.0:
1527 resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1528 engines: {node: '>=8'}
1529
1530 p-locate@5.0.0:
1531 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1532 engines: {node: '>=10'}
1533
1534 p-try@2.2.0:
1535 resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1536 engines: {node: '>=6'}
1537
1538 parent-module@1.0.1:
1539 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1540 engines: {node: '>=6'}
1541
1542 parent-require@1.0.0:
1543 resolution: {integrity: sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==}
1544 engines: {node: '>= 0.4.0'}
1545
1546 parse5-htmlparser2-tree-adapter@7.1.0:
1547 resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
1548
1549 parse5@7.2.1:
1550 resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
1551
1552 path-exists@4.0.0:
1553 resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1554 engines: {node: '>=8'}
1555
1556 path-is-absolute@1.0.1:
1557 resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1558 engines: {node: '>=0.10.0'}
1559
1560 path-key@3.1.1:
1561 resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1562 engines: {node: '>=8'}
1563
1564 path-parse@1.0.7:
1565 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1566
1567 pause-stream@0.0.11:
1568 resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
1569
1570 peek-readable@6.1.1:
1571 resolution: {integrity: sha512-7QmvgRKhxM0E2PGV4ocfROItVode+ELI27n4q+lpufZ+tRKBu/pBP8WOmw9HXn2ui/AUizqtvaVQhcJrOkRqYg==}
1572 engines: {node: '>=18'}
1573
1574 picocolors@1.1.1:
1575 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1576
1577 pkg-dir@4.2.0:
1578 resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
1579 engines: {node: '>=8'}
1580
1581 possible-typed-array-names@1.1.0:
1582 resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
1583 engines: {node: '>= 0.4'}
1584
1585 prelude-ls@1.2.1:
1586 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1587 engines: {node: '>= 0.8.0'}
1588
1589 prop-types@15.8.1:
1590 resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1591
1592 proper-lockfile@4.1.2:
1593 resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
1594
1595 proxy-chain@2.5.6:
1596 resolution: {integrity: sha512-vC57FECgv2WKCVoaRrztJ86NBER7ZJCjSGvOnpMlgfi9vroMCoCwexQ+69He4YWUPE88D5jZizytiLbPjLv6/A==}
1597 engines: {node: '>=14'}
1598
1599 proxy-from-env@1.1.0:
1600 resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
1601
1602 punycode@2.3.1:
1603 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1604 engines: {node: '>=6'}
1605
1606 quick-lru@5.1.1:
1607 resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
1608 engines: {node: '>=10'}
1609
1610 quick-lru@7.0.0:
1611 resolution: {integrity: sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==}
1612 engines: {node: '>=18'}
1613
1614 react-is@16.13.1:
1615 resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1616
1617 readable-stream@3.6.2:
1618 resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
1619 engines: {node: '>= 6'}
1620
1621 reflect.getprototypeof@1.0.10:
1622 resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1623 engines: {node: '>= 0.4'}
1624
1625 regexp.prototype.flags@1.5.4:
1626 resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1627 engines: {node: '>= 0.4'}
1628
1629 require-directory@2.1.1:
1630 resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1631 engines: {node: '>=0.10.0'}
1632
1633 resolve-alpn@1.2.1:
1634 resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
1635
1636 resolve-cwd@3.0.0:
1637 resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
1638 engines: {node: '>=8'}
1639
1640 resolve-from@4.0.0:
1641 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1642 engines: {node: '>=4'}
1643
1644 resolve-from@5.0.0:
1645 resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1646 engines: {node: '>=8'}
1647
1648 resolve@1.22.10:
1649 resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1650 engines: {node: '>= 0.4'}
1651 hasBin: true
1652
1653 resolve@2.0.0-next.5:
1654 resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
1655 hasBin: true
1656
1657 responselike@3.0.0:
1658 resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
1659 engines: {node: '>=14.16'}
1660
1661 restore-cursor@3.1.0:
1662 resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
1663 engines: {node: '>=8'}
1664
1665 retry@0.12.0:
1666 resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
1667 engines: {node: '>= 4'}
1668
1669 retry@0.13.1:
1670 resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
1671 engines: {node: '>= 4'}
1672
1673 robots-parser@3.0.1:
1674 resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==}
1675 engines: {node: '>=10.0.0'}
1676
1677 rrweb-cssom@0.8.0:
1678 resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
1679
1680 run-async@2.4.1:
1681 resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
1682 engines: {node: '>=0.12.0'}
1683
1684 run-async@3.0.0:
1685 resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
1686 engines: {node: '>=0.12.0'}
1687
1688 rxjs@7.8.2:
1689 resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
1690
1691 safe-array-concat@1.1.3:
1692 resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1693 engines: {node: '>=0.4'}
1694
1695 safe-buffer@5.2.1:
1696 resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1697
1698 safe-push-apply@1.0.0:
1699 resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1700 engines: {node: '>= 0.4'}
1701
1702 safe-regex-test@1.1.0:
1703 resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1704 engines: {node: '>= 0.4'}
1705
1706 safer-buffer@2.1.2:
1707 resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1708
1709 sax@1.4.1:
1710 resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
1711
1712 saxes@6.0.0:
1713 resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
1714 engines: {node: '>=v12.22.7'}
1715
1716 semver@6.3.1:
1717 resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1718 hasBin: true
1719
1720 semver@7.7.1:
1721 resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1722 engines: {node: '>=10'}
1723 hasBin: true
1724
1725 set-function-length@1.2.2:
1726 resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1727 engines: {node: '>= 0.4'}
1728
1729 set-function-name@2.0.2:
1730 resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1731 engines: {node: '>= 0.4'}
1732
1733 set-proto@1.0.0:
1734 resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1735 engines: {node: '>= 0.4'}
1736
1737 shebang-command@2.0.0:
1738 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1739 engines: {node: '>=8'}
1740
1741 shebang-regex@3.0.0:
1742 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1743 engines: {node: '>=8'}
1744
1745 side-channel-list@1.0.0:
1746 resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1747 engines: {node: '>= 0.4'}
1748
1749 side-channel-map@1.0.1:
1750 resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1751 engines: {node: '>= 0.4'}
1752
1753 side-channel-weakmap@1.0.2:
1754 resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1755 engines: {node: '>= 0.4'}
1756
1757 side-channel@1.1.0:
1758 resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1759 engines: {node: '>= 0.4'}
1760
1761 signal-exit@3.0.7:
1762 resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1763
1764 smart-buffer@4.2.0:
1765 resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
1766 engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
1767
1768 socks-proxy-agent@8.0.5:
1769 resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
1770 engines: {node: '>= 14'}
1771
1772 socks@2.8.4:
1773 resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==}
1774 engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
1775
1776 split@0.3.3:
1777 resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
1778
1779 sprintf-js@1.1.3:
1780 resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
1781
1782 stream-chain@2.2.5:
1783 resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
1784
1785 stream-combiner@0.0.4:
1786 resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
1787
1788 stream-json@1.9.1:
1789 resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
1790
1791 string-comparison@1.3.0:
1792 resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==}
1793 engines: {node: ^16.0.0 || >=18.0.0}
1794
1795 string-width@4.2.3:
1796 resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1797 engines: {node: '>=8'}
1798
1799 string.prototype.includes@2.0.1:
1800 resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
1801 engines: {node: '>= 0.4'}
1802
1803 string.prototype.matchall@4.0.12:
1804 resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
1805 engines: {node: '>= 0.4'}
1806
1807 string.prototype.repeat@1.0.0:
1808 resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
1809
1810 string.prototype.trim@1.2.10:
1811 resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1812 engines: {node: '>= 0.4'}
1813
1814 string.prototype.trimend@1.0.9:
1815 resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1816 engines: {node: '>= 0.4'}
1817
1818 string.prototype.trimstart@1.0.8:
1819 resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1820 engines: {node: '>= 0.4'}
1821
1822 string_decoder@1.3.0:
1823 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1824
1825 strip-ansi@3.0.1:
1826 resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
1827 engines: {node: '>=0.10.0'}
1828
1829 strip-ansi@6.0.1:
1830 resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1831 engines: {node: '>=8'}
1832
1833 strip-bom@3.0.0:
1834 resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1835 engines: {node: '>=4'}
1836
1837 strip-json-comments@3.1.1:
1838 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1839 engines: {node: '>=8'}
1840
1841 strtok3@10.2.1:
1842 resolution: {integrity: sha512-Q2dTnW3UXokAvXmXvrvMoUj/me3LyJI76HNHeuGMh2o0As/vzd7eHV3ncLOyvu928vQIDbE7Vf9ldEnC7cwy1w==}
1843 engines: {node: '>=18'}
1844
1845 supports-color@2.0.0:
1846 resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
1847 engines: {node: '>=0.8.0'}
1848
1849 supports-color@7.2.0:
1850 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1851 engines: {node: '>=8'}
1852
1853 supports-preserve-symlinks-flag@1.0.0:
1854 resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1855 engines: {node: '>= 0.4'}
1856
1857 symbol-tree@3.2.4:
1858 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
1859
1860 through@2.3.8:
1861 resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
1862
1863 tiny-typed-emitter@2.1.0:
1864 resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==}
1865
1866 tldts-core@6.1.78:
1867 resolution: {integrity: sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw==}
1868
1869 tldts@6.1.78:
1870 resolution: {integrity: sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ==}
1871 hasBin: true
1872
1873 tmp@0.0.33:
1874 resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
1875 engines: {node: '>=0.6.0'}
1876
1877 token-types@6.0.0:
1878 resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==}
1879 engines: {node: '>=14.16'}
1880
1881 tough-cookie@5.1.1:
1882 resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==}
1883 engines: {node: '>=16'}
1884
1885 tr46@5.0.0:
1886 resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
1887 engines: {node: '>=18'}
1888
1889 tsconfig-paths@3.15.0:
1890 resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1891
1892 tslib@2.8.1:
1893 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1894
1895 type-check@0.4.0:
1896 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1897 engines: {node: '>= 0.8.0'}
1898
1899 type-fest@0.21.3:
1900 resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
1901 engines: {node: '>=10'}
1902
1903 type-fest@2.19.0:
1904 resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
1905 engines: {node: '>=12.20'}
1906
1907 type-fest@4.35.0:
1908 resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==}
1909 engines: {node: '>=16'}
1910
1911 typed-array-buffer@1.0.3:
1912 resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1913 engines: {node: '>= 0.4'}
1914
1915 typed-array-byte-length@1.0.3:
1916 resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1917 engines: {node: '>= 0.4'}
1918
1919 typed-array-byte-offset@1.0.4:
1920 resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1921 engines: {node: '>= 0.4'}
1922
1923 typed-array-length@1.0.7:
1924 resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1925 engines: {node: '>= 0.4'}
1926
1927 uhyphen@0.2.0:
1928 resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
1929
1930 uint8array-extras@1.4.0:
1931 resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
1932 engines: {node: '>=18'}
1933
1934 unbox-primitive@1.1.0:
1935 resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1936 engines: {node: '>= 0.4'}
1937
1938 undici-types@6.20.0:
1939 resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1940
1941 universalify@2.0.1:
1942 resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
1943 engines: {node: '>= 10.0.0'}
1944
1945 update-browserslist-db@1.1.2:
1946 resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
1947 hasBin: true
1948 peerDependencies:
1949 browserslist: '>= 4.21.0'
1950
1951 uri-js@4.4.1:
1952 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1953
1954 util-deprecate@1.0.2:
1955 resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1956
1957 vali-date@1.0.0:
1958 resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==}
1959 engines: {node: '>=0.10.0'}
1960
1961 w3c-xmlserializer@5.0.0:
1962 resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
1963 engines: {node: '>=18'}
1964
1965 wcwidth@1.0.1:
1966 resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
1967
1968 webidl-conversions@7.0.0:
1969 resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
1970 engines: {node: '>=12'}
1971
1972 whatwg-encoding@3.1.1:
1973 resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
1974 engines: {node: '>=18'}
1975
1976 whatwg-mimetype@4.0.0:
1977 resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
1978 engines: {node: '>=18'}
1979
1980 whatwg-url@14.1.1:
1981 resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==}
1982 engines: {node: '>=18'}
1983
1984 which-boxed-primitive@1.1.1:
1985 resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1986 engines: {node: '>= 0.4'}
1987
1988 which-builtin-type@1.2.1:
1989 resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1990 engines: {node: '>= 0.4'}
1991
1992 which-collection@1.0.2:
1993 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1994 engines: {node: '>= 0.4'}
1995
1996 which-typed-array@1.1.18:
1997 resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
1998 engines: {node: '>= 0.4'}
1999
2000 which@2.0.2:
2001 resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2002 engines: {node: '>= 8'}
2003 hasBin: true
2004
2005 word-wrap@1.2.5:
2006 resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
2007 engines: {node: '>=0.10.0'}
2008
2009 wrap-ansi@6.2.0:
2010 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2011 engines: {node: '>=8'}
2012
2013 wrap-ansi@7.0.0:
2014 resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2015 engines: {node: '>=10'}
2016
2017 wrappy@1.0.2:
2018 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2019
2020 ws@8.18.1:
2021 resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
2022 engines: {node: '>=10.0.0'}
2023 peerDependencies:
2024 bufferutil: ^4.0.1
2025 utf-8-validate: '>=5.0.2'
2026 peerDependenciesMeta:
2027 bufferutil:
2028 optional: true
2029 utf-8-validate:
2030 optional: true
2031
2032 xml-name-validator@5.0.0:
2033 resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
2034 engines: {node: '>=18'}
2035
2036 xmlchars@2.2.0:
2037 resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
2038
2039 y18n@5.0.8:
2040 resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
2041 engines: {node: '>=10'}
2042
2043 yargonaut@1.1.4:
2044 resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==}
2045
2046 yargs-parser@21.1.1:
2047 resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
2048 engines: {node: '>=12'}
2049
2050 yargs@17.7.2:
2051 resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
2052 engines: {node: '>=12'}
2053
2054 yocto-queue@0.1.0:
2055 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2056 engines: {node: '>=10'}
2057
2058 yoctocolors-cjs@2.1.2:
2059 resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
2060 engines: {node: '>=18'}
2061
2062snapshots:
2063
2064 '@apify/consts@2.37.0': {}
2065
2066 '@apify/datastructures@2.0.2': {}
2067
2068 '@apify/eslint-config@0.4.0(eslint@9.21.0)':
2069 dependencies:
2070 eslint: 9.21.0
2071 eslint-config-airbnb: 19.0.4(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.21.0))(eslint-plugin-react@7.37.4(eslint@9.21.0))(eslint@9.21.0)
2072 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
2073 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
2074 eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
2075 eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
2076 eslint-plugin-react: 7.37.4(eslint@9.21.0)
2077 eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
2078 transitivePeerDependencies:
2079 - '@typescript-eslint/parser'
2080 - eslint-import-resolver-webpack
2081 - supports-color
2082
2083 '@apify/input_secrets@1.1.65':
2084 dependencies:
2085 '@apify/log': 2.5.13
2086 '@apify/utilities': 2.13.1
2087 ow: 0.28.2
2088
2089 '@apify/log@2.5.13':
2090 dependencies:
2091 '@apify/consts': 2.37.0
2092 ansi-colors: 4.1.3
2093
2094 '@apify/ps-tree@1.2.0':
2095 dependencies:
2096 event-stream: 3.3.4
2097
2098 '@apify/pseudo_url@2.0.54':
2099 dependencies:
2100 '@apify/log': 2.5.13
2101
2102 '@apify/timeout@0.3.1': {}
2103
2104 '@apify/utilities@2.13.1':
2105 dependencies:
2106 '@apify/consts': 2.37.0
2107 '@apify/log': 2.5.13
2108
2109 '@asamuzakjp/css-color@2.8.3':
2110 dependencies:
2111 '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2112 '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2113 '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2114 '@csstools/css-tokenizer': 3.0.3
2115 lru-cache: 10.4.3
2116
2117 '@crawlee/basic@3.12.2':
2118 dependencies:
2119 '@apify/log': 2.5.13
2120 '@apify/timeout': 0.3.1
2121 '@apify/utilities': 2.13.1
2122 '@crawlee/core': 3.12.2
2123 '@crawlee/types': 3.12.2
2124 '@crawlee/utils': 3.12.2
2125 csv-stringify: 6.5.2
2126 fs-extra: 11.3.0
2127 got-scraping: 4.1.1
2128 ow: 0.28.2
2129 tldts: 6.1.78
2130 tslib: 2.8.1
2131 type-fest: 4.35.0
2132 transitivePeerDependencies:
2133 - supports-color
2134
2135 '@crawlee/browser-pool@3.12.2':
2136 dependencies:
2137 '@apify/log': 2.5.13
2138 '@apify/timeout': 0.3.1
2139 '@crawlee/core': 3.12.2
2140 '@crawlee/types': 3.12.2
2141 fingerprint-generator: 2.1.62
2142 fingerprint-injector: 2.1.62
2143 lodash.merge: 4.6.2
2144 nanoid: 3.3.8
2145 ow: 0.28.2
2146 p-limit: 3.1.0
2147 proxy-chain: 2.5.6
2148 quick-lru: 5.1.1
2149 tiny-typed-emitter: 2.1.0
2150 tslib: 2.8.1
2151 transitivePeerDependencies:
2152 - supports-color
2153
2154 '@crawlee/browser@3.12.2':
2155 dependencies:
2156 '@apify/timeout': 0.3.1
2157 '@crawlee/basic': 3.12.2
2158 '@crawlee/browser-pool': 3.12.2
2159 '@crawlee/types': 3.12.2
2160 '@crawlee/utils': 3.12.2
2161 ow: 0.28.2
2162 tslib: 2.8.1
2163 type-fest: 4.35.0
2164 transitivePeerDependencies:
2165 - supports-color
2166
2167 '@crawlee/cheerio@3.12.2':
2168 dependencies:
2169 '@crawlee/http': 3.12.2
2170 '@crawlee/types': 3.12.2
2171 '@crawlee/utils': 3.12.2
2172 cheerio: 1.0.0-rc.12
2173 htmlparser2: 9.1.0
2174 tslib: 2.8.1
2175 transitivePeerDependencies:
2176 - supports-color
2177
2178 '@crawlee/cli@3.12.2':
2179 dependencies:
2180 '@crawlee/templates': 3.12.2
2181 ansi-colors: 4.1.3
2182 fs-extra: 11.3.0
2183 inquirer: 8.2.6
2184 tslib: 2.8.1
2185 yargonaut: 1.1.4
2186 yargs: 17.7.2
2187
2188 '@crawlee/core@3.12.2':
2189 dependencies:
2190 '@apify/consts': 2.37.0
2191 '@apify/datastructures': 2.0.2
2192 '@apify/log': 2.5.13
2193 '@apify/pseudo_url': 2.0.54
2194 '@apify/timeout': 0.3.1
2195 '@apify/utilities': 2.13.1
2196 '@crawlee/memory-storage': 3.12.2
2197 '@crawlee/types': 3.12.2
2198 '@crawlee/utils': 3.12.2
2199 '@sapphire/async-queue': 1.5.5
2200 '@vladfrangu/async_event_emitter': 2.4.6
2201 csv-stringify: 6.5.2
2202 fs-extra: 11.3.0
2203 got-scraping: 4.1.1
2204 json5: 2.2.3
2205 minimatch: 9.0.5
2206 ow: 0.28.2
2207 stream-json: 1.9.1
2208 tldts: 6.1.78
2209 tough-cookie: 5.1.1
2210 tslib: 2.8.1
2211 type-fest: 4.35.0
2212 transitivePeerDependencies:
2213 - supports-color
2214
2215 '@crawlee/http@3.12.2':
2216 dependencies:
2217 '@apify/timeout': 0.3.1
2218 '@apify/utilities': 2.13.1
2219 '@crawlee/basic': 3.12.2
2220 '@crawlee/types': 3.12.2
2221 '@crawlee/utils': 3.12.2
2222 '@types/content-type': 1.1.8
2223 cheerio: 1.0.0-rc.12
2224 content-type: 1.0.5
2225 got-scraping: 4.1.1
2226 iconv-lite: 0.6.3
2227 mime-types: 2.1.35
2228 ow: 0.28.2
2229 tslib: 2.8.1
2230 type-fest: 4.35.0
2231 transitivePeerDependencies:
2232 - supports-color
2233
2234 '@crawlee/jsdom@3.12.2':
2235 dependencies:
2236 '@apify/timeout': 0.3.1
2237 '@apify/utilities': 2.13.1
2238 '@crawlee/http': 3.12.2
2239 '@crawlee/types': 3.12.2
2240 '@crawlee/utils': 3.12.2
2241 '@types/jsdom': 21.1.7
2242 cheerio: 1.0.0-rc.12
2243 jsdom: 26.0.0
2244 ow: 0.28.2
2245 tslib: 2.8.1
2246 transitivePeerDependencies:
2247 - bufferutil
2248 - canvas
2249 - supports-color
2250 - utf-8-validate
2251
2252 '@crawlee/linkedom@3.12.2':
2253 dependencies:
2254 '@apify/timeout': 0.3.1
2255 '@apify/utilities': 2.13.1
2256 '@crawlee/http': 3.12.2
2257 '@crawlee/types': 3.12.2
2258 linkedom: 0.18.9
2259 ow: 0.28.2
2260 tslib: 2.8.1
2261 transitivePeerDependencies:
2262 - supports-color
2263
2264 '@crawlee/memory-storage@3.12.2':
2265 dependencies:
2266 '@apify/log': 2.5.13
2267 '@crawlee/types': 3.12.2
2268 '@sapphire/async-queue': 1.5.5
2269 '@sapphire/shapeshift': 3.9.7
2270 content-type: 1.0.5
2271 fs-extra: 11.3.0
2272 json5: 2.2.3
2273 mime-types: 2.1.35
2274 proper-lockfile: 4.1.2
2275 tslib: 2.8.1
2276
2277 '@crawlee/playwright@3.12.2':
2278 dependencies:
2279 '@apify/datastructures': 2.0.2
2280 '@apify/log': 2.5.13
2281 '@apify/timeout': 0.3.1
2282 '@crawlee/browser': 3.12.2
2283 '@crawlee/browser-pool': 3.12.2
2284 '@crawlee/core': 3.12.2
2285 '@crawlee/types': 3.12.2
2286 '@crawlee/utils': 3.12.2
2287 cheerio: 1.0.0-rc.12
2288 idcac-playwright: 0.1.3
2289 jquery: 3.7.1
2290 lodash.isequal: 4.5.0
2291 ml-logistic-regression: 2.0.0
2292 ml-matrix: 6.12.0
2293 ow: 0.28.2
2294 string-comparison: 1.3.0
2295 tslib: 2.8.1
2296 transitivePeerDependencies:
2297 - puppeteer
2298 - supports-color
2299
2300 '@crawlee/puppeteer@3.12.2':
2301 dependencies:
2302 '@apify/datastructures': 2.0.2
2303 '@apify/log': 2.5.13
2304 '@crawlee/browser': 3.12.2
2305 '@crawlee/browser-pool': 3.12.2
2306 '@crawlee/types': 3.12.2
2307 '@crawlee/utils': 3.12.2
2308 cheerio: 1.0.0-rc.12
2309 devtools-protocol: 0.0.1423531
2310 idcac-playwright: 0.1.3
2311 jquery: 3.7.1
2312 ow: 0.28.2
2313 tslib: 2.8.1
2314 transitivePeerDependencies:
2315 - playwright
2316 - supports-color
2317
2318 '@crawlee/templates@3.12.2':
2319 dependencies:
2320 ansi-colors: 4.1.3
2321 inquirer: 9.3.7
2322 tslib: 2.8.1
2323 yargonaut: 1.1.4
2324 yargs: 17.7.2
2325
2326 '@crawlee/types@3.12.2':
2327 dependencies:
2328 tslib: 2.8.1
2329
2330 '@crawlee/utils@3.12.2':
2331 dependencies:
2332 '@apify/log': 2.5.13
2333 '@apify/ps-tree': 1.2.0
2334 '@crawlee/types': 3.12.2
2335 '@types/sax': 1.2.7
2336 cheerio: 1.0.0-rc.12
2337 file-type: 20.1.0
2338 got-scraping: 4.1.1
2339 ow: 0.28.2
2340 robots-parser: 3.0.1
2341 sax: 1.4.1
2342 tslib: 2.8.1
2343 whatwg-mimetype: 4.0.0
2344 transitivePeerDependencies:
2345 - supports-color
2346
2347 '@csstools/color-helpers@5.0.1': {}
2348
2349 '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
2350 dependencies:
2351 '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2352 '@csstools/css-tokenizer': 3.0.3
2353
2354 '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
2355 dependencies:
2356 '@csstools/color-helpers': 5.0.1
2357 '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2358 '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2359 '@csstools/css-tokenizer': 3.0.3
2360
2361 '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
2362 dependencies:
2363 '@csstools/css-tokenizer': 3.0.3
2364
2365 '@csstools/css-tokenizer@3.0.3': {}
2366
2367 '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)':
2368 dependencies:
2369 eslint: 9.21.0
2370 eslint-visitor-keys: 3.4.3
2371
2372 '@eslint-community/regexpp@4.12.1': {}
2373
2374 '@eslint/config-array@0.19.2':
2375 dependencies:
2376 '@eslint/object-schema': 2.1.6
2377 debug: 4.4.0
2378 minimatch: 3.1.2
2379 transitivePeerDependencies:
2380 - supports-color
2381
2382 '@eslint/core@0.12.0':
2383 dependencies:
2384 '@types/json-schema': 7.0.15
2385
2386 '@eslint/eslintrc@3.3.0':
2387 dependencies:
2388 ajv: 6.12.6
2389 debug: 4.4.0
2390 espree: 10.3.0
2391 globals: 14.0.0
2392 ignore: 5.3.2
2393 import-fresh: 3.3.1
2394 js-yaml: 4.1.0
2395 minimatch: 3.1.2
2396 strip-json-comments: 3.1.1
2397 transitivePeerDependencies:
2398 - supports-color
2399
2400 '@eslint/js@9.21.0': {}
2401
2402 '@eslint/object-schema@2.1.6': {}
2403
2404 '@eslint/plugin-kit@0.2.7':
2405 dependencies:
2406 '@eslint/core': 0.12.0
2407 levn: 0.4.1
2408
2409 '@humanfs/core@0.19.1': {}
2410
2411 '@humanfs/node@0.16.6':
2412 dependencies:
2413 '@humanfs/core': 0.19.1
2414 '@humanwhocodes/retry': 0.3.1
2415
2416 '@humanwhocodes/module-importer@1.0.1': {}
2417
2418 '@humanwhocodes/retry@0.3.1': {}
2419
2420 '@humanwhocodes/retry@0.4.2': {}
2421
2422 '@inquirer/figures@1.0.10': {}
2423
2424 '@rtsao/scc@1.1.0': {}
2425
2426 '@sapphire/async-queue@1.5.5': {}
2427
2428 '@sapphire/shapeshift@3.9.7':
2429 dependencies:
2430 fast-deep-equal: 3.1.3
2431 lodash: 4.17.21
2432
2433 '@sec-ant/readable-stream@0.4.1': {}
2434
2435 '@sindresorhus/is@4.6.0': {}
2436
2437 '@sindresorhus/is@5.6.0': {}
2438
2439 '@sindresorhus/is@7.0.1': {}
2440
2441 '@szmarczak/http-timer@5.0.1':
2442 dependencies:
2443 defer-to-connect: 2.0.1
2444
2445 '@tokenizer/inflate@0.2.6':
2446 dependencies:
2447 debug: 4.4.0
2448 fflate: 0.8.2
2449 token-types: 6.0.0
2450 transitivePeerDependencies:
2451 - supports-color
2452
2453 '@tokenizer/token@0.3.0': {}
2454
2455 '@types/content-type@1.1.8': {}
2456
2457 '@types/estree@1.0.6': {}
2458
2459 '@types/http-cache-semantics@4.0.4': {}
2460
2461 '@types/jsdom@21.1.7':
2462 dependencies:
2463 '@types/node': 22.13.5
2464 '@types/tough-cookie': 4.0.5
2465 parse5: 7.2.1
2466
2467 '@types/json-schema@7.0.15': {}
2468
2469 '@types/json5@0.0.29': {}
2470
2471 '@types/node@22.13.5':
2472 dependencies:
2473 undici-types: 6.20.0
2474
2475 '@types/sax@1.2.7':
2476 dependencies:
2477 '@types/node': 22.13.5
2478
2479 '@types/tough-cookie@4.0.5': {}
2480
2481 '@vladfrangu/async_event_emitter@2.4.6': {}
2482
2483 acorn-jsx@5.3.2(acorn@8.14.0):
2484 dependencies:
2485 acorn: 8.14.0
2486
2487 acorn@8.14.0: {}
2488
2489 adm-zip@0.5.16: {}
2490
2491 agent-base@7.1.3: {}
2492
2493 agentkeepalive@4.6.0:
2494 dependencies:
2495 humanize-ms: 1.2.1
2496
2497 ajv@6.12.6:
2498 dependencies:
2499 fast-deep-equal: 3.1.3
2500 fast-json-stable-stringify: 2.1.0
2501 json-schema-traverse: 0.4.1
2502 uri-js: 4.4.1
2503
2504 ansi-colors@4.1.3: {}
2505
2506 ansi-escapes@4.3.2:
2507 dependencies:
2508 type-fest: 0.21.3
2509
2510 ansi-regex@2.1.1: {}
2511
2512 ansi-regex@5.0.1: {}
2513
2514 ansi-styles@2.2.1: {}
2515
2516 ansi-styles@4.3.0:
2517 dependencies:
2518 color-convert: 2.0.1
2519
2520 apify-client@2.12.0:
2521 dependencies:
2522 '@apify/consts': 2.37.0
2523 '@apify/log': 2.5.13
2524 '@crawlee/types': 3.12.2
2525 agentkeepalive: 4.6.0
2526 async-retry: 1.3.3
2527 axios: 1.7.9
2528 content-type: 1.0.5
2529 ow: 0.28.2
2530 tslib: 2.8.1
2531 type-fest: 4.35.0
2532 transitivePeerDependencies:
2533 - debug
2534
2535 apify@3.3.2:
2536 dependencies:
2537 '@apify/consts': 2.37.0
2538 '@apify/input_secrets': 1.1.65
2539 '@apify/log': 2.5.13
2540 '@apify/timeout': 0.3.1
2541 '@apify/utilities': 2.13.1
2542 '@crawlee/core': 3.12.2
2543 '@crawlee/types': 3.12.2
2544 '@crawlee/utils': 3.12.2
2545 apify-client: 2.12.0
2546 fs-extra: 11.3.0
2547 ow: 0.28.2
2548 semver: 7.7.1
2549 tslib: 2.8.1
2550 ws: 8.18.1
2551 transitivePeerDependencies:
2552 - bufferutil
2553 - debug
2554 - supports-color
2555 - utf-8-validate
2556
2557 argparse@2.0.1: {}
2558
2559 aria-query@5.3.2: {}
2560
2561 array-buffer-byte-length@1.0.2:
2562 dependencies:
2563 call-bound: 1.0.3
2564 is-array-buffer: 3.0.5
2565
2566 array-includes@3.1.8:
2567 dependencies:
2568 call-bind: 1.0.8
2569 define-properties: 1.2.1
2570 es-abstract: 1.23.9
2571 es-object-atoms: 1.1.1
2572 get-intrinsic: 1.3.0
2573 is-string: 1.1.1
2574
2575 array.prototype.findlast@1.2.5:
2576 dependencies:
2577 call-bind: 1.0.8
2578 define-properties: 1.2.1
2579 es-abstract: 1.23.9
2580 es-errors: 1.3.0
2581 es-object-atoms: 1.1.1
2582 es-shim-unscopables: 1.1.0
2583
2584 array.prototype.findlastindex@1.2.5:
2585 dependencies:
2586 call-bind: 1.0.8
2587 define-properties: 1.2.1
2588 es-abstract: 1.23.9
2589 es-errors: 1.3.0
2590 es-object-atoms: 1.1.1
2591 es-shim-unscopables: 1.1.0
2592
2593 array.prototype.flat@1.3.3:
2594 dependencies:
2595 call-bind: 1.0.8
2596 define-properties: 1.2.1
2597 es-abstract: 1.23.9
2598 es-shim-unscopables: 1.1.0
2599
2600 array.prototype.flatmap@1.3.3:
2601 dependencies:
2602 call-bind: 1.0.8
2603 define-properties: 1.2.1
2604 es-abstract: 1.23.9
2605 es-shim-unscopables: 1.1.0
2606
2607 array.prototype.tosorted@1.1.4:
2608 dependencies:
2609 call-bind: 1.0.8
2610 define-properties: 1.2.1
2611 es-abstract: 1.23.9
2612 es-errors: 1.3.0
2613 es-shim-unscopables: 1.1.0
2614
2615 arraybuffer.prototype.slice@1.0.4:
2616 dependencies:
2617 array-buffer-byte-length: 1.0.2
2618 call-bind: 1.0.8
2619 define-properties: 1.2.1
2620 es-abstract: 1.23.9
2621 es-errors: 1.3.0
2622 get-intrinsic: 1.3.0
2623 is-array-buffer: 3.0.5
2624
2625 ast-types-flow@0.0.8: {}
2626
2627 async-function@1.0.0: {}
2628
2629 async-retry@1.3.3:
2630 dependencies:
2631 retry: 0.13.1
2632
2633 asynckit@0.4.0: {}
2634
2635 available-typed-arrays@1.0.7:
2636 dependencies:
2637 possible-typed-array-names: 1.1.0
2638
2639 axe-core@4.10.2: {}
2640
2641 axios@1.7.9:
2642 dependencies:
2643 follow-redirects: 1.15.9
2644 form-data: 4.0.2
2645 proxy-from-env: 1.1.0
2646 transitivePeerDependencies:
2647 - debug
2648
2649 axobject-query@4.1.0: {}
2650
2651 balanced-match@1.0.2: {}
2652
2653 base64-js@1.5.1: {}
2654
2655 bl@4.1.0:
2656 dependencies:
2657 buffer: 5.7.1
2658 inherits: 2.0.4
2659 readable-stream: 3.6.2
2660
2661 boolbase@1.0.0: {}
2662
2663 brace-expansion@1.1.11:
2664 dependencies:
2665 balanced-match: 1.0.2
2666 concat-map: 0.0.1
2667
2668 brace-expansion@2.0.1:
2669 dependencies:
2670 balanced-match: 1.0.2
2671
2672 browserslist@4.24.4:
2673 dependencies:
2674 caniuse-lite: 1.0.30001700
2675 electron-to-chromium: 1.5.103
2676 node-releases: 2.0.19
2677 update-browserslist-db: 1.1.2(browserslist@4.24.4)
2678
2679 buffer@5.7.1:
2680 dependencies:
2681 base64-js: 1.5.1
2682 ieee754: 1.2.1
2683
2684 cacheable-lookup@7.0.0: {}
2685
2686 cacheable-request@12.0.1:
2687 dependencies:
2688 '@types/http-cache-semantics': 4.0.4
2689 get-stream: 9.0.1
2690 http-cache-semantics: 4.1.1
2691 keyv: 4.5.4
2692 mimic-response: 4.0.0
2693 normalize-url: 8.0.1
2694 responselike: 3.0.0
2695
2696 call-bind-apply-helpers@1.0.2:
2697 dependencies:
2698 es-errors: 1.3.0
2699 function-bind: 1.1.2
2700
2701 call-bind@1.0.8:
2702 dependencies:
2703 call-bind-apply-helpers: 1.0.2
2704 es-define-property: 1.0.1
2705 get-intrinsic: 1.3.0
2706 set-function-length: 1.2.2
2707
2708 call-bound@1.0.3:
2709 dependencies:
2710 call-bind-apply-helpers: 1.0.2
2711 get-intrinsic: 1.3.0
2712
2713 callsites@3.1.0: {}
2714
2715 callsites@4.2.0: {}
2716
2717 caniuse-lite@1.0.30001700: {}
2718
2719 chalk@1.1.3:
2720 dependencies:
2721 ansi-styles: 2.2.1
2722 escape-string-regexp: 1.0.5
2723 has-ansi: 2.0.0
2724 strip-ansi: 3.0.1
2725 supports-color: 2.0.0
2726
2727 chalk@4.1.2:
2728 dependencies:
2729 ansi-styles: 4.3.0
2730 supports-color: 7.2.0
2731
2732 chardet@0.7.0: {}
2733
2734 cheerio-select@2.1.0:
2735 dependencies:
2736 boolbase: 1.0.0
2737 css-select: 5.1.0
2738 css-what: 6.1.0
2739 domelementtype: 2.3.0
2740 domhandler: 5.0.3
2741 domutils: 3.2.2
2742
2743 cheerio@1.0.0-rc.12:
2744 dependencies:
2745 cheerio-select: 2.1.0
2746 dom-serializer: 2.0.0
2747 domhandler: 5.0.3
2748 domutils: 3.2.2
2749 htmlparser2: 8.0.2
2750 parse5: 7.2.1
2751 parse5-htmlparser2-tree-adapter: 7.1.0
2752
2753 cli-cursor@3.1.0:
2754 dependencies:
2755 restore-cursor: 3.1.0
2756
2757 cli-spinners@2.9.2: {}
2758
2759 cli-width@3.0.0: {}
2760
2761 cli-width@4.1.0: {}
2762
2763 cliui@8.0.1:
2764 dependencies:
2765 string-width: 4.2.3
2766 strip-ansi: 6.0.1
2767 wrap-ansi: 7.0.0
2768
2769 clone@1.0.4: {}
2770
2771 color-convert@2.0.1:
2772 dependencies:
2773 color-name: 1.1.4
2774
2775 color-name@1.1.4: {}
2776
2777 combined-stream@1.0.8:
2778 dependencies:
2779 delayed-stream: 1.0.0
2780
2781 concat-map@0.0.1: {}
2782
2783 confusing-browser-globals@1.0.11: {}
2784
2785 content-type@1.0.5: {}
2786
2787 crawlee@3.12.2:
2788 dependencies:
2789 '@crawlee/basic': 3.12.2
2790 '@crawlee/browser': 3.12.2
2791 '@crawlee/browser-pool': 3.12.2
2792 '@crawlee/cheerio': 3.12.2
2793 '@crawlee/cli': 3.12.2
2794 '@crawlee/core': 3.12.2
2795 '@crawlee/http': 3.12.2
2796 '@crawlee/jsdom': 3.12.2
2797 '@crawlee/linkedom': 3.12.2
2798 '@crawlee/playwright': 3.12.2
2799 '@crawlee/puppeteer': 3.12.2
2800 '@crawlee/utils': 3.12.2
2801 import-local: 3.2.0
2802 tslib: 2.8.1
2803 transitivePeerDependencies:
2804 - bufferutil
2805 - canvas
2806 - supports-color
2807 - utf-8-validate
2808
2809 cross-spawn@7.0.6:
2810 dependencies:
2811 path-key: 3.1.1
2812 shebang-command: 2.0.0
2813 which: 2.0.2
2814
2815 css-select@5.1.0:
2816 dependencies:
2817 boolbase: 1.0.0
2818 css-what: 6.1.0
2819 domhandler: 5.0.3
2820 domutils: 3.2.2
2821 nth-check: 2.1.1
2822
2823 css-what@6.1.0: {}
2824
2825 cssom@0.5.0: {}
2826
2827 cssstyle@4.2.1:
2828 dependencies:
2829 '@asamuzakjp/css-color': 2.8.3
2830 rrweb-cssom: 0.8.0
2831
2832 csv-stringify@6.5.2: {}
2833
2834 damerau-levenshtein@1.0.8: {}
2835
2836 data-urls@5.0.0:
2837 dependencies:
2838 whatwg-mimetype: 4.0.0
2839 whatwg-url: 14.1.1
2840
2841 data-view-buffer@1.0.2:
2842 dependencies:
2843 call-bound: 1.0.3
2844 es-errors: 1.3.0
2845 is-data-view: 1.0.2
2846
2847 data-view-byte-length@1.0.2:
2848 dependencies:
2849 call-bound: 1.0.3
2850 es-errors: 1.3.0
2851 is-data-view: 1.0.2
2852
2853 data-view-byte-offset@1.0.1:
2854 dependencies:
2855 call-bound: 1.0.3
2856 es-errors: 1.3.0
2857 is-data-view: 1.0.2
2858
2859 debug@3.2.7:
2860 dependencies:
2861 ms: 2.1.3
2862
2863 debug@4.4.0:
2864 dependencies:
2865 ms: 2.1.3
2866
2867 decimal.js@10.5.0: {}
2868
2869 decompress-response@6.0.0:
2870 dependencies:
2871 mimic-response: 3.1.0
2872
2873 deep-is@0.1.4: {}
2874
2875 defaults@1.0.4:
2876 dependencies:
2877 clone: 1.0.4
2878
2879 defer-to-connect@2.0.1: {}
2880
2881 define-data-property@1.1.4:
2882 dependencies:
2883 es-define-property: 1.0.1
2884 es-errors: 1.3.0
2885 gopd: 1.2.0
2886
2887 define-properties@1.2.1:
2888 dependencies:
2889 define-data-property: 1.1.4
2890 has-property-descriptors: 1.0.2
2891 object-keys: 1.1.1
2892
2893 delayed-stream@1.0.0: {}
2894
2895 devtools-protocol@0.0.1423531: {}
2896
2897 doctrine@2.1.0:
2898 dependencies:
2899 esutils: 2.0.3
2900
2901 dom-serializer@2.0.0:
2902 dependencies:
2903 domelementtype: 2.3.0
2904 domhandler: 5.0.3
2905 entities: 4.5.0
2906
2907 domelementtype@2.3.0: {}
2908
2909 domhandler@5.0.3:
2910 dependencies:
2911 domelementtype: 2.3.0
2912
2913 domutils@3.2.2:
2914 dependencies:
2915 dom-serializer: 2.0.0
2916 domelementtype: 2.3.0
2917 domhandler: 5.0.3
2918
2919 dot-prop@6.0.1:
2920 dependencies:
2921 is-obj: 2.0.0
2922
2923 dot-prop@7.2.0:
2924 dependencies:
2925 type-fest: 2.19.0
2926
2927 dunder-proto@1.0.1:
2928 dependencies:
2929 call-bind-apply-helpers: 1.0.2
2930 es-errors: 1.3.0
2931 gopd: 1.2.0
2932
2933 duplexer@0.1.2: {}
2934
2935 electron-to-chromium@1.5.103: {}
2936
2937 emoji-regex@8.0.0: {}
2938
2939 emoji-regex@9.2.2: {}
2940
2941 entities@4.5.0: {}
2942
2943 entities@6.0.0: {}
2944
2945 es-abstract@1.23.9:
2946 dependencies:
2947 array-buffer-byte-length: 1.0.2
2948 arraybuffer.prototype.slice: 1.0.4
2949 available-typed-arrays: 1.0.7
2950 call-bind: 1.0.8
2951 call-bound: 1.0.3
2952 data-view-buffer: 1.0.2
2953 data-view-byte-length: 1.0.2
2954 data-view-byte-offset: 1.0.1
2955 es-define-property: 1.0.1
2956 es-errors: 1.3.0
2957 es-object-atoms: 1.1.1
2958 es-set-tostringtag: 2.1.0
2959 es-to-primitive: 1.3.0
2960 function.prototype.name: 1.1.8
2961 get-intrinsic: 1.3.0
2962 get-proto: 1.0.1
2963 get-symbol-description: 1.1.0
2964 globalthis: 1.0.4
2965 gopd: 1.2.0
2966 has-property-descriptors: 1.0.2
2967 has-proto: 1.2.0
2968 has-symbols: 1.1.0
2969 hasown: 2.0.2
2970 internal-slot: 1.1.0
2971 is-array-buffer: 3.0.5
2972 is-callable: 1.2.7
2973 is-data-view: 1.0.2
2974 is-regex: 1.2.1
2975 is-shared-array-buffer: 1.0.4
2976 is-string: 1.1.1
2977 is-typed-array: 1.1.15
2978 is-weakref: 1.1.1
2979 math-intrinsics: 1.1.0
2980 object-inspect: 1.13.4
2981 object-keys: 1.1.1
2982 object.assign: 4.1.7
2983 own-keys: 1.0.1
2984 regexp.prototype.flags: 1.5.4
2985 safe-array-concat: 1.1.3
2986 safe-push-apply: 1.0.0
2987 safe-regex-test: 1.1.0
2988 set-proto: 1.0.0
2989 string.prototype.trim: 1.2.10
2990 string.prototype.trimend: 1.0.9
2991 string.prototype.trimstart: 1.0.8
2992 typed-array-buffer: 1.0.3
2993 typed-array-byte-length: 1.0.3
2994 typed-array-byte-offset: 1.0.4
2995 typed-array-length: 1.0.7
2996 unbox-primitive: 1.1.0
2997 which-typed-array: 1.1.18
2998
2999 es-define-property@1.0.1: {}
3000
3001 es-errors@1.3.0: {}
3002
3003 es-iterator-helpers@1.2.1:
3004 dependencies:
3005 call-bind: 1.0.8
3006 call-bound: 1.0.3
3007 define-properties: 1.2.1
3008 es-abstract: 1.23.9
3009 es-errors: 1.3.0
3010 es-set-tostringtag: 2.1.0
3011 function-bind: 1.1.2
3012 get-intrinsic: 1.3.0
3013 globalthis: 1.0.4
3014 gopd: 1.2.0
3015 has-property-descriptors: 1.0.2
3016 has-proto: 1.2.0
3017 has-symbols: 1.1.0
3018 internal-slot: 1.1.0
3019 iterator.prototype: 1.1.5
3020 safe-array-concat: 1.1.3
3021
3022 es-object-atoms@1.1.1:
3023 dependencies:
3024 es-errors: 1.3.0
3025
3026 es-set-tostringtag@2.1.0:
3027 dependencies:
3028 es-errors: 1.3.0
3029 get-intrinsic: 1.3.0
3030 has-tostringtag: 1.0.2
3031 hasown: 2.0.2
3032
3033 es-shim-unscopables@1.1.0:
3034 dependencies:
3035 hasown: 2.0.2
3036
3037 es-to-primitive@1.3.0:
3038 dependencies:
3039 is-callable: 1.2.7
3040 is-date-object: 1.1.0
3041 is-symbol: 1.1.1
3042
3043 escalade@3.2.0: {}
3044
3045 escape-string-regexp@1.0.5: {}
3046
3047 escape-string-regexp@4.0.0: {}
3048
3049 eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
3050 dependencies:
3051 confusing-browser-globals: 1.0.11
3052 eslint: 9.21.0
3053 eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3054 object.assign: 4.1.7
3055 object.entries: 1.1.8
3056 semver: 6.3.1
3057
3058 eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.21.0))(eslint-plugin-react@7.37.4(eslint@9.21.0))(eslint@9.21.0):
3059 dependencies:
3060 eslint: 9.21.0
3061 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
3062 eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3063 eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
3064 eslint-plugin-react: 7.37.4(eslint@9.21.0)
3065 eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
3066 object.assign: 4.1.7
3067 object.entries: 1.1.8
3068
3069 eslint-import-resolver-node@0.3.9:
3070 dependencies:
3071 debug: 3.2.7
3072 is-core-module: 2.16.1
3073 resolve: 1.22.10
3074 transitivePeerDependencies:
3075 - supports-color
3076
3077 eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
3078 dependencies:
3079 debug: 4.4.0
3080 eslint: 9.21.0
3081 eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3082 glob: 7.2.3
3083 is-glob: 4.0.3
3084 resolve: 1.22.10
3085 tsconfig-paths: 3.15.0
3086 transitivePeerDependencies:
3087 - supports-color
3088
3089 eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0))(eslint@9.21.0):
3090 dependencies:
3091 debug: 3.2.7
3092 optionalDependencies:
3093 eslint: 9.21.0
3094 eslint-import-resolver-node: 0.3.9
3095 eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
3096 transitivePeerDependencies:
3097 - supports-color
3098
3099 eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0):
3100 dependencies:
3101 '@rtsao/scc': 1.1.0
3102 array-includes: 3.1.8
3103 array.prototype.findlastindex: 1.2.5
3104 array.prototype.flat: 1.3.3
3105 array.prototype.flatmap: 1.3.3
3106 debug: 3.2.7
3107 doctrine: 2.1.0
3108 eslint: 9.21.0
3109 eslint-import-resolver-node: 0.3.9
3110 eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0))(eslint@9.21.0)
3111 hasown: 2.0.2
3112 is-core-module: 2.16.1
3113 is-glob: 4.0.3
3114 minimatch: 3.1.2
3115 object.fromentries: 2.0.8
3116 object.groupby: 1.0.3
3117 object.values: 1.2.1
3118 semver: 6.3.1
3119 string.prototype.trimend: 1.0.9
3120 tsconfig-paths: 3.15.0
3121 transitivePeerDependencies:
3122 - eslint-import-resolver-typescript
3123 - eslint-import-resolver-webpack
3124 - supports-color
3125
3126 eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0):
3127 dependencies:
3128 aria-query: 5.3.2
3129 array-includes: 3.1.8
3130 array.prototype.flatmap: 1.3.3
3131 ast-types-flow: 0.0.8
3132 axe-core: 4.10.2
3133 axobject-query: 4.1.0
3134 damerau-levenshtein: 1.0.8
3135 emoji-regex: 9.2.2
3136 eslint: 9.21.0
3137 hasown: 2.0.2
3138 jsx-ast-utils: 3.3.5
3139 language-tags: 1.0.9
3140 minimatch: 3.1.2
3141 object.fromentries: 2.0.8
3142 safe-regex-test: 1.1.0
3143 string.prototype.includes: 2.0.1
3144
3145 eslint-plugin-react-hooks@4.6.2(eslint@9.21.0):
3146 dependencies:
3147 eslint: 9.21.0
3148
3149 eslint-plugin-react@7.37.4(eslint@9.21.0):
3150 dependencies:
3151 array-includes: 3.1.8
3152 array.prototype.findlast: 1.2.5
3153 array.prototype.flatmap: 1.3.3
3154 array.prototype.tosorted: 1.1.4
3155 doctrine: 2.1.0
3156 es-iterator-helpers: 1.2.1
3157 eslint: 9.21.0
3158 estraverse: 5.3.0
3159 hasown: 2.0.2
3160 jsx-ast-utils: 3.3.5
3161 minimatch: 3.1.2
3162 object.entries: 1.1.8
3163 object.fromentries: 2.0.8
3164 object.values: 1.2.1
3165 prop-types: 15.8.1
3166 resolve: 2.0.0-next.5
3167 semver: 6.3.1
3168 string.prototype.matchall: 4.0.12
3169 string.prototype.repeat: 1.0.0
3170
3171 eslint-scope@8.2.0:
3172 dependencies:
3173 esrecurse: 4.3.0
3174 estraverse: 5.3.0
3175
3176 eslint-visitor-keys@3.4.3: {}
3177
3178 eslint-visitor-keys@4.2.0: {}
3179
3180 eslint@9.21.0:
3181 dependencies:
3182 '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
3183 '@eslint-community/regexpp': 4.12.1
3184 '@eslint/config-array': 0.19.2
3185 '@eslint/core': 0.12.0
3186 '@eslint/eslintrc': 3.3.0
3187 '@eslint/js': 9.21.0
3188 '@eslint/plugin-kit': 0.2.7
3189 '@humanfs/node': 0.16.6
3190 '@humanwhocodes/module-importer': 1.0.1
3191 '@humanwhocodes/retry': 0.4.2
3192 '@types/estree': 1.0.6
3193 '@types/json-schema': 7.0.15
3194 ajv: 6.12.6
3195 chalk: 4.1.2
3196 cross-spawn: 7.0.6
3197 debug: 4.4.0
3198 escape-string-regexp: 4.0.0
3199 eslint-scope: 8.2.0
3200 eslint-visitor-keys: 4.2.0
3201 espree: 10.3.0
3202 esquery: 1.6.0
3203 esutils: 2.0.3
3204 fast-deep-equal: 3.1.3
3205 file-entry-cache: 8.0.0
3206 find-up: 5.0.0
3207 glob-parent: 6.0.2
3208 ignore: 5.3.2
3209 imurmurhash: 0.1.4
3210 is-glob: 4.0.3
3211 json-stable-stringify-without-jsonify: 1.0.1
3212 lodash.merge: 4.6.2
3213 minimatch: 3.1.2
3214 natural-compare: 1.4.0
3215 optionator: 0.9.4
3216 transitivePeerDependencies:
3217 - supports-color
3218
3219 espree@10.3.0:
3220 dependencies:
3221 acorn: 8.14.0
3222 acorn-jsx: 5.3.2(acorn@8.14.0)
3223 eslint-visitor-keys: 4.2.0
3224
3225 esquery@1.6.0:
3226 dependencies:
3227 estraverse: 5.3.0
3228
3229 esrecurse@4.3.0:
3230 dependencies:
3231 estraverse: 5.3.0
3232
3233 estraverse@5.3.0: {}
3234
3235 esutils@2.0.3: {}
3236
3237 event-stream@3.3.4:
3238 dependencies:
3239 duplexer: 0.1.2
3240 from: 0.1.7
3241 map-stream: 0.1.0
3242 pause-stream: 0.0.11
3243 split: 0.3.3
3244 stream-combiner: 0.0.4
3245 through: 2.3.8
3246
3247 external-editor@3.1.0:
3248 dependencies:
3249 chardet: 0.7.0
3250 iconv-lite: 0.4.24
3251 tmp: 0.0.33
3252
3253 fast-deep-equal@3.1.3: {}
3254
3255 fast-json-stable-stringify@2.1.0: {}
3256
3257 fast-levenshtein@2.0.6: {}
3258
3259 fflate@0.8.2: {}
3260
3261 figlet@1.8.0: {}
3262
3263 figures@3.2.0:
3264 dependencies:
3265 escape-string-regexp: 1.0.5
3266
3267 file-entry-cache@8.0.0:
3268 dependencies:
3269 flat-cache: 4.0.1
3270
3271 file-type@20.1.0:
3272 dependencies:
3273 '@tokenizer/inflate': 0.2.6
3274 strtok3: 10.2.1
3275 token-types: 6.0.0
3276 uint8array-extras: 1.4.0
3277 transitivePeerDependencies:
3278 - supports-color
3279
3280 find-up@4.1.0:
3281 dependencies:
3282 locate-path: 5.0.0
3283 path-exists: 4.0.0
3284
3285 find-up@5.0.0:
3286 dependencies:
3287 locate-path: 6.0.0
3288 path-exists: 4.0.0
3289
3290 fingerprint-generator@2.1.62:
3291 dependencies:
3292 generative-bayesian-network: 2.1.62
3293 header-generator: 2.1.62
3294 tslib: 2.8.1
3295
3296 fingerprint-injector@2.1.62:
3297 dependencies:
3298 fingerprint-generator: 2.1.62
3299 tslib: 2.8.1
3300
3301 flat-cache@4.0.1:
3302 dependencies:
3303 flatted: 3.3.3
3304 keyv: 4.5.4
3305
3306 flatted@3.3.3: {}
3307
3308 follow-redirects@1.15.9: {}
3309
3310 for-each@0.3.5:
3311 dependencies:
3312 is-callable: 1.2.7
3313
3314 form-data-encoder@4.0.2: {}
3315
3316 form-data@4.0.2:
3317 dependencies:
3318 asynckit: 0.4.0
3319 combined-stream: 1.0.8
3320 es-set-tostringtag: 2.1.0
3321 mime-types: 2.1.35
3322
3323 from@0.1.7: {}
3324
3325 fs-extra@11.3.0:
3326 dependencies:
3327 graceful-fs: 4.2.11
3328 jsonfile: 6.1.0
3329 universalify: 2.0.1
3330
3331 fs.realpath@1.0.0: {}
3332
3333 function-bind@1.1.2: {}
3334
3335 function.prototype.name@1.1.8:
3336 dependencies:
3337 call-bind: 1.0.8
3338 call-bound: 1.0.3
3339 define-properties: 1.2.1
3340 functions-have-names: 1.2.3
3341 hasown: 2.0.2
3342 is-callable: 1.2.7
3343
3344 functions-have-names@1.2.3: {}
3345
3346 generative-bayesian-network@2.1.62:
3347 dependencies:
3348 adm-zip: 0.5.16
3349 tslib: 2.8.1
3350
3351 get-caller-file@2.0.5: {}
3352
3353 get-intrinsic@1.3.0:
3354 dependencies:
3355 call-bind-apply-helpers: 1.0.2
3356 es-define-property: 1.0.1
3357 es-errors: 1.3.0
3358 es-object-atoms: 1.1.1
3359 function-bind: 1.1.2
3360 get-proto: 1.0.1
3361 gopd: 1.2.0
3362 has-symbols: 1.1.0
3363 hasown: 2.0.2
3364 math-intrinsics: 1.1.0
3365
3366 get-proto@1.0.1:
3367 dependencies:
3368 dunder-proto: 1.0.1
3369 es-object-atoms: 1.1.1
3370
3371 get-stream@9.0.1:
3372 dependencies:
3373 '@sec-ant/readable-stream': 0.4.1
3374 is-stream: 4.0.1
3375
3376 get-symbol-description@1.1.0:
3377 dependencies:
3378 call-bound: 1.0.3
3379 es-errors: 1.3.0
3380 get-intrinsic: 1.3.0
3381
3382 glob-parent@6.0.2:
3383 dependencies:
3384 is-glob: 4.0.3
3385
3386 glob@7.2.3:
3387 dependencies:
3388 fs.realpath: 1.0.0
3389 inflight: 1.0.6
3390 inherits: 2.0.4
3391 minimatch: 3.1.2
3392 once: 1.4.0
3393 path-is-absolute: 1.0.1
3394
3395 globals@14.0.0: {}
3396
3397 globalthis@1.0.4:
3398 dependencies:
3399 define-properties: 1.2.1
3400 gopd: 1.2.0
3401
3402 gopd@1.2.0: {}
3403
3404 got-scraping@4.1.1:
3405 dependencies:
3406 got: 14.4.6
3407 header-generator: 2.1.62
3408 http2-wrapper: 2.2.1
3409 mimic-response: 4.0.0
3410 ow: 1.1.1
3411 quick-lru: 7.0.0
3412 tslib: 2.8.1
3413
3414 got@14.4.6:
3415 dependencies:
3416 '@sindresorhus/is': 7.0.1
3417 '@szmarczak/http-timer': 5.0.1
3418 cacheable-lookup: 7.0.0
3419 cacheable-request: 12.0.1
3420 decompress-response: 6.0.0
3421 form-data-encoder: 4.0.2
3422 http2-wrapper: 2.2.1
3423 lowercase-keys: 3.0.0
3424 p-cancelable: 4.0.1
3425 responselike: 3.0.0
3426 type-fest: 4.35.0
3427
3428 graceful-fs@4.2.11: {}
3429
3430 has-ansi@2.0.0:
3431 dependencies:
3432 ansi-regex: 2.1.1
3433
3434 has-bigints@1.1.0: {}
3435
3436 has-flag@4.0.0: {}
3437
3438 has-property-descriptors@1.0.2:
3439 dependencies:
3440 es-define-property: 1.0.1
3441
3442 has-proto@1.2.0:
3443 dependencies:
3444 dunder-proto: 1.0.1
3445
3446 has-symbols@1.1.0: {}
3447
3448 has-tostringtag@1.0.2:
3449 dependencies:
3450 has-symbols: 1.1.0
3451
3452 hasown@2.0.2:
3453 dependencies:
3454 function-bind: 1.1.2
3455
3456 header-generator@2.1.62:
3457 dependencies:
3458 browserslist: 4.24.4
3459 generative-bayesian-network: 2.1.62
3460 ow: 0.28.2
3461 tslib: 2.8.1
3462
3463 html-encoding-sniffer@4.0.0:
3464 dependencies:
3465 whatwg-encoding: 3.1.1
3466
3467 html-escaper@3.0.3: {}
3468
3469 htmlparser2@10.0.0:
3470 dependencies:
3471 domelementtype: 2.3.0
3472 domhandler: 5.0.3
3473 domutils: 3.2.2
3474 entities: 6.0.0
3475
3476 htmlparser2@8.0.2:
3477 dependencies:
3478 domelementtype: 2.3.0
3479 domhandler: 5.0.3
3480 domutils: 3.2.2
3481 entities: 4.5.0
3482
3483 htmlparser2@9.1.0:
3484 dependencies:
3485 domelementtype: 2.3.0
3486 domhandler: 5.0.3
3487 domutils: 3.2.2
3488 entities: 4.5.0
3489
3490 http-cache-semantics@4.1.1: {}
3491
3492 http-proxy-agent@7.0.2:
3493 dependencies:
3494 agent-base: 7.1.3
3495 debug: 4.4.0
3496 transitivePeerDependencies:
3497 - supports-color
3498
3499 http2-wrapper@2.2.1:
3500 dependencies:
3501 quick-lru: 5.1.1
3502 resolve-alpn: 1.2.1
3503
3504 https-proxy-agent@7.0.6:
3505 dependencies:
3506 agent-base: 7.1.3
3507 debug: 4.4.0
3508 transitivePeerDependencies:
3509 - supports-color
3510
3511 humanize-ms@1.2.1:
3512 dependencies:
3513 ms: 2.1.3
3514
3515 iconv-lite@0.4.24:
3516 dependencies:
3517 safer-buffer: 2.1.2
3518
3519 iconv-lite@0.6.3:
3520 dependencies:
3521 safer-buffer: 2.1.2
3522
3523 idcac-playwright@0.1.3: {}
3524
3525 ieee754@1.2.1: {}
3526
3527 ignore@5.3.2: {}
3528
3529 import-fresh@3.3.1:
3530 dependencies:
3531 parent-module: 1.0.1
3532 resolve-from: 4.0.0
3533
3534 import-local@3.2.0:
3535 dependencies:
3536 pkg-dir: 4.2.0
3537 resolve-cwd: 3.0.0
3538
3539 imurmurhash@0.1.4: {}
3540
3541 inflight@1.0.6:
3542 dependencies:
3543 once: 1.4.0
3544 wrappy: 1.0.2
3545
3546 inherits@2.0.4: {}
3547
3548 inquirer@8.2.6:
3549 dependencies:
3550 ansi-escapes: 4.3.2
3551 chalk: 4.1.2
3552 cli-cursor: 3.1.0
3553 cli-width: 3.0.0
3554 external-editor: 3.1.0
3555 figures: 3.2.0
3556 lodash: 4.17.21
3557 mute-stream: 0.0.8
3558 ora: 5.4.1
3559 run-async: 2.4.1
3560 rxjs: 7.8.2
3561 string-width: 4.2.3
3562 strip-ansi: 6.0.1
3563 through: 2.3.8
3564 wrap-ansi: 6.2.0
3565
3566 inquirer@9.3.7:
3567 dependencies:
3568 '@inquirer/figures': 1.0.10
3569 ansi-escapes: 4.3.2
3570 cli-width: 4.1.0
3571 external-editor: 3.1.0
3572 mute-stream: 1.0.0
3573 ora: 5.4.1
3574 run-async: 3.0.0
3575 rxjs: 7.8.2
3576 string-width: 4.2.3
3577 strip-ansi: 6.0.1
3578 wrap-ansi: 6.2.0
3579 yoctocolors-cjs: 2.1.2
3580
3581 internal-slot@1.1.0:
3582 dependencies:
3583 es-errors: 1.3.0
3584 hasown: 2.0.2
3585 side-channel: 1.1.0
3586
3587 ip-address@9.0.5:
3588 dependencies:
3589 jsbn: 1.1.0
3590 sprintf-js: 1.1.3
3591
3592 is-any-array@2.0.1: {}
3593
3594 is-array-buffer@3.0.5:
3595 dependencies:
3596 call-bind: 1.0.8
3597 call-bound: 1.0.3
3598 get-intrinsic: 1.3.0
3599
3600 is-async-function@2.1.1:
3601 dependencies:
3602 async-function: 1.0.0
3603 call-bound: 1.0.3
3604 get-proto: 1.0.1
3605 has-tostringtag: 1.0.2
3606 safe-regex-test: 1.1.0
3607
3608 is-bigint@1.1.0:
3609 dependencies:
3610 has-bigints: 1.1.0
3611
3612 is-boolean-object@1.2.2:
3613 dependencies:
3614 call-bound: 1.0.3
3615 has-tostringtag: 1.0.2
3616
3617 is-callable@1.2.7: {}
3618
3619 is-core-module@2.16.1:
3620 dependencies:
3621 hasown: 2.0.2
3622
3623 is-data-view@1.0.2:
3624 dependencies:
3625 call-bound: 1.0.3
3626 get-intrinsic: 1.3.0
3627 is-typed-array: 1.1.15
3628
3629 is-date-object@1.1.0:
3630 dependencies:
3631 call-bound: 1.0.3
3632 has-tostringtag: 1.0.2
3633
3634 is-extglob@2.1.1: {}
3635
3636 is-finalizationregistry@1.1.1:
3637 dependencies:
3638 call-bound: 1.0.3
3639
3640 is-fullwidth-code-point@3.0.0: {}
3641
3642 is-generator-function@1.1.0:
3643 dependencies:
3644 call-bound: 1.0.3
3645 get-proto: 1.0.1
3646 has-tostringtag: 1.0.2
3647 safe-regex-test: 1.1.0
3648
3649 is-glob@4.0.3:
3650 dependencies:
3651 is-extglob: 2.1.1
3652
3653 is-interactive@1.0.0: {}
3654
3655 is-map@2.0.3: {}
3656
3657 is-number-object@1.1.1:
3658 dependencies:
3659 call-bound: 1.0.3
3660 has-tostringtag: 1.0.2
3661
3662 is-obj@2.0.0: {}
3663
3664 is-potential-custom-element-name@1.0.1: {}
3665
3666 is-regex@1.2.1:
3667 dependencies:
3668 call-bound: 1.0.3
3669 gopd: 1.2.0
3670 has-tostringtag: 1.0.2
3671 hasown: 2.0.2
3672
3673 is-set@2.0.3: {}
3674
3675 is-shared-array-buffer@1.0.4:
3676 dependencies:
3677 call-bound: 1.0.3
3678
3679 is-stream@4.0.1: {}
3680
3681 is-string@1.1.1:
3682 dependencies:
3683 call-bound: 1.0.3
3684 has-tostringtag: 1.0.2
3685
3686 is-symbol@1.1.1:
3687 dependencies:
3688 call-bound: 1.0.3
3689 has-symbols: 1.1.0
3690 safe-regex-test: 1.1.0
3691
3692 is-typed-array@1.1.15:
3693 dependencies:
3694 which-typed-array: 1.1.18
3695
3696 is-unicode-supported@0.1.0: {}
3697
3698 is-weakmap@2.0.2: {}
3699
3700 is-weakref@1.1.1:
3701 dependencies:
3702 call-bound: 1.0.3
3703
3704 is-weakset@2.0.4:
3705 dependencies:
3706 call-bound: 1.0.3
3707 get-intrinsic: 1.3.0
3708
3709 isarray@2.0.5: {}
3710
3711 isexe@2.0.0: {}
3712
3713 iterator.prototype@1.1.5:
3714 dependencies:
3715 define-data-property: 1.1.4
3716 es-object-atoms: 1.1.1
3717 get-intrinsic: 1.3.0
3718 get-proto: 1.0.1
3719 has-symbols: 1.1.0
3720 set-function-name: 2.0.2
3721
3722 jquery@3.7.1: {}
3723
3724 js-tokens@4.0.0: {}
3725
3726 js-yaml@4.1.0:
3727 dependencies:
3728 argparse: 2.0.1
3729
3730 jsbn@1.1.0: {}
3731
3732 jsdom@26.0.0:
3733 dependencies:
3734 cssstyle: 4.2.1
3735 data-urls: 5.0.0
3736 decimal.js: 10.5.0
3737 form-data: 4.0.2
3738 html-encoding-sniffer: 4.0.0
3739 http-proxy-agent: 7.0.2
3740 https-proxy-agent: 7.0.6
3741 is-potential-custom-element-name: 1.0.1
3742 nwsapi: 2.2.16
3743 parse5: 7.2.1
3744 rrweb-cssom: 0.8.0
3745 saxes: 6.0.0
3746 symbol-tree: 3.2.4
3747 tough-cookie: 5.1.1
3748 w3c-xmlserializer: 5.0.0
3749 webidl-conversions: 7.0.0
3750 whatwg-encoding: 3.1.1
3751 whatwg-mimetype: 4.0.0
3752 whatwg-url: 14.1.1
3753 ws: 8.18.1
3754 xml-name-validator: 5.0.0
3755 transitivePeerDependencies:
3756 - bufferutil
3757 - supports-color
3758 - utf-8-validate
3759
3760 json-buffer@3.0.1: {}
3761
3762 json-schema-traverse@0.4.1: {}
3763
3764 json-stable-stringify-without-jsonify@1.0.1: {}
3765
3766 json5@1.0.2:
3767 dependencies:
3768 minimist: 1.2.8
3769
3770 json5@2.2.3: {}
3771
3772 jsonfile@6.1.0:
3773 dependencies:
3774 universalify: 2.0.1
3775 optionalDependencies:
3776 graceful-fs: 4.2.11
3777
3778 jsx-ast-utils@3.3.5:
3779 dependencies:
3780 array-includes: 3.1.8
3781 array.prototype.flat: 1.3.3
3782 object.assign: 4.1.7
3783 object.values: 1.2.1
3784
3785 keyv@4.5.4:
3786 dependencies:
3787 json-buffer: 3.0.1
3788
3789 language-subtag-registry@0.3.23: {}
3790
3791 language-tags@1.0.9:
3792 dependencies:
3793 language-subtag-registry: 0.3.23
3794
3795 levn@0.4.1:
3796 dependencies:
3797 prelude-ls: 1.2.1
3798 type-check: 0.4.0
3799
3800 linkedom@0.18.9:
3801 dependencies:
3802 css-select: 5.1.0
3803 cssom: 0.5.0
3804 html-escaper: 3.0.3
3805 htmlparser2: 10.0.0
3806 uhyphen: 0.2.0
3807
3808 locate-path@5.0.0:
3809 dependencies:
3810 p-locate: 4.1.0
3811
3812 locate-path@6.0.0:
3813 dependencies:
3814 p-locate: 5.0.0
3815
3816 lodash.isequal@4.5.0: {}
3817
3818 lodash.merge@4.6.2: {}
3819
3820 lodash@4.17.21: {}
3821
3822 log-symbols@4.1.0:
3823 dependencies:
3824 chalk: 4.1.2
3825 is-unicode-supported: 0.1.0
3826
3827 loose-envify@1.4.0:
3828 dependencies:
3829 js-tokens: 4.0.0
3830
3831 lowercase-keys@3.0.0: {}
3832
3833 lru-cache@10.4.3: {}
3834
3835 map-stream@0.1.0: {}
3836
3837 math-intrinsics@1.1.0: {}
3838
3839 mime-db@1.52.0: {}
3840
3841 mime-types@2.1.35:
3842 dependencies:
3843 mime-db: 1.52.0
3844
3845 mimic-fn@2.1.0: {}
3846
3847 mimic-response@3.1.0: {}
3848
3849 mimic-response@4.0.0: {}
3850
3851 minimatch@3.1.2:
3852 dependencies:
3853 brace-expansion: 1.1.11
3854
3855 minimatch@9.0.5:
3856 dependencies:
3857 brace-expansion: 2.0.1
3858
3859 minimist@1.2.8: {}
3860
3861 ml-array-max@1.2.4:
3862 dependencies:
3863 is-any-array: 2.0.1
3864
3865 ml-array-min@1.2.3:
3866 dependencies:
3867 is-any-array: 2.0.1
3868
3869 ml-array-rescale@1.3.7:
3870 dependencies:
3871 is-any-array: 2.0.1
3872 ml-array-max: 1.2.4
3873 ml-array-min: 1.2.3
3874
3875 ml-logistic-regression@2.0.0:
3876 dependencies:
3877 ml-matrix: 6.12.0
3878
3879 ml-matrix@6.12.0:
3880 dependencies:
3881 is-any-array: 2.0.1
3882 ml-array-rescale: 1.3.7
3883
3884 ms@2.1.3: {}
3885
3886 mute-stream@0.0.8: {}
3887
3888 mute-stream@1.0.0: {}
3889
3890 nanoid@3.3.8: {}
3891
3892 natural-compare@1.4.0: {}
3893
3894 node-releases@2.0.19: {}
3895
3896 normalize-url@8.0.1: {}
3897
3898 nth-check@2.1.1:
3899 dependencies:
3900 boolbase: 1.0.0
3901
3902 nwsapi@2.2.16: {}
3903
3904 object-assign@4.1.1: {}
3905
3906 object-inspect@1.13.4: {}
3907
3908 object-keys@1.1.1: {}
3909
3910 object.assign@4.1.7:
3911 dependencies:
3912 call-bind: 1.0.8
3913 call-bound: 1.0.3
3914 define-properties: 1.2.1
3915 es-object-atoms: 1.1.1
3916 has-symbols: 1.1.0
3917 object-keys: 1.1.1
3918
3919 object.entries@1.1.8:
3920 dependencies:
3921 call-bind: 1.0.8
3922 define-properties: 1.2.1
3923 es-object-atoms: 1.1.1
3924
3925 object.fromentries@2.0.8:
3926 dependencies:
3927 call-bind: 1.0.8
3928 define-properties: 1.2.1
3929 es-abstract: 1.23.9
3930 es-object-atoms: 1.1.1
3931
3932 object.groupby@1.0.3:
3933 dependencies:
3934 call-bind: 1.0.8
3935 define-properties: 1.2.1
3936 es-abstract: 1.23.9
3937
3938 object.values@1.2.1:
3939 dependencies:
3940 call-bind: 1.0.8
3941 call-bound: 1.0.3
3942 define-properties: 1.2.1
3943 es-object-atoms: 1.1.1
3944
3945 once@1.4.0:
3946 dependencies:
3947 wrappy: 1.0.2
3948
3949 onetime@5.1.2:
3950 dependencies:
3951 mimic-fn: 2.1.0
3952
3953 optionator@0.9.4:
3954 dependencies:
3955 deep-is: 0.1.4
3956 fast-levenshtein: 2.0.6
3957 levn: 0.4.1
3958 prelude-ls: 1.2.1
3959 type-check: 0.4.0
3960 word-wrap: 1.2.5
3961
3962 ora@5.4.1:
3963 dependencies:
3964 bl: 4.1.0
3965 chalk: 4.1.2
3966 cli-cursor: 3.1.0
3967 cli-spinners: 2.9.2
3968 is-interactive: 1.0.0
3969 is-unicode-supported: 0.1.0
3970 log-symbols: 4.1.0
3971 strip-ansi: 6.0.1
3972 wcwidth: 1.0.1
3973
3974 os-tmpdir@1.0.2: {}
3975
3976 ow@0.28.2:
3977 dependencies:
3978 '@sindresorhus/is': 4.6.0
3979 callsites: 3.1.0
3980 dot-prop: 6.0.1
3981 lodash.isequal: 4.5.0
3982 vali-date: 1.0.0
3983
3984 ow@1.1.1:
3985 dependencies:
3986 '@sindresorhus/is': 5.6.0
3987 callsites: 4.2.0
3988 dot-prop: 7.2.0
3989 lodash.isequal: 4.5.0
3990 vali-date: 1.0.0
3991
3992 own-keys@1.0.1:
3993 dependencies:
3994 get-intrinsic: 1.3.0
3995 object-keys: 1.1.1
3996 safe-push-apply: 1.0.0
3997
3998 p-cancelable@4.0.1: {}
3999
4000 p-limit@2.3.0:
4001 dependencies:
4002 p-try: 2.2.0
4003
4004 p-limit@3.1.0:
4005 dependencies:
4006 yocto-queue: 0.1.0
4007
4008 p-locate@4.1.0:
4009 dependencies:
4010 p-limit: 2.3.0
4011
4012 p-locate@5.0.0:
4013 dependencies:
4014 p-limit: 3.1.0
4015
4016 p-try@2.2.0: {}
4017
4018 parent-module@1.0.1:
4019 dependencies:
4020 callsites: 3.1.0
4021
4022 parent-require@1.0.0: {}
4023
4024 parse5-htmlparser2-tree-adapter@7.1.0:
4025 dependencies:
4026 domhandler: 5.0.3
4027 parse5: 7.2.1
4028
4029 parse5@7.2.1:
4030 dependencies:
4031 entities: 4.5.0
4032
4033 path-exists@4.0.0: {}
4034
4035 path-is-absolute@1.0.1: {}
4036
4037 path-key@3.1.1: {}
4038
4039 path-parse@1.0.7: {}
4040
4041 pause-stream@0.0.11:
4042 dependencies:
4043 through: 2.3.8
4044
4045 peek-readable@6.1.1: {}
4046
4047 picocolors@1.1.1: {}
4048
4049 pkg-dir@4.2.0:
4050 dependencies:
4051 find-up: 4.1.0
4052
4053 possible-typed-array-names@1.1.0: {}
4054
4055 prelude-ls@1.2.1: {}
4056
4057 prop-types@15.8.1:
4058 dependencies:
4059 loose-envify: 1.4.0
4060 object-assign: 4.1.1
4061 react-is: 16.13.1
4062
4063 proper-lockfile@4.1.2:
4064 dependencies:
4065 graceful-fs: 4.2.11
4066 retry: 0.12.0
4067 signal-exit: 3.0.7
4068
4069 proxy-chain@2.5.6:
4070 dependencies:
4071 socks: 2.8.4
4072 socks-proxy-agent: 8.0.5
4073 tslib: 2.8.1
4074 transitivePeerDependencies:
4075 - supports-color
4076
4077 proxy-from-env@1.1.0: {}
4078
4079 punycode@2.3.1: {}
4080
4081 quick-lru@5.1.1: {}
4082
4083 quick-lru@7.0.0: {}
4084
4085 react-is@16.13.1: {}
4086
4087 readable-stream@3.6.2:
4088 dependencies:
4089 inherits: 2.0.4
4090 string_decoder: 1.3.0
4091 util-deprecate: 1.0.2
4092
4093 reflect.getprototypeof@1.0.10:
4094 dependencies:
4095 call-bind: 1.0.8
4096 define-properties: 1.2.1
4097 es-abstract: 1.23.9
4098 es-errors: 1.3.0
4099 es-object-atoms: 1.1.1
4100 get-intrinsic: 1.3.0
4101 get-proto: 1.0.1
4102 which-builtin-type: 1.2.1
4103
4104 regexp.prototype.flags@1.5.4:
4105 dependencies:
4106 call-bind: 1.0.8
4107 define-properties: 1.2.1
4108 es-errors: 1.3.0
4109 get-proto: 1.0.1
4110 gopd: 1.2.0
4111 set-function-name: 2.0.2
4112
4113 require-directory@2.1.1: {}
4114
4115 resolve-alpn@1.2.1: {}
4116
4117 resolve-cwd@3.0.0:
4118 dependencies:
4119 resolve-from: 5.0.0
4120
4121 resolve-from@4.0.0: {}
4122
4123 resolve-from@5.0.0: {}
4124
4125 resolve@1.22.10:
4126 dependencies:
4127 is-core-module: 2.16.1
4128 path-parse: 1.0.7
4129 supports-preserve-symlinks-flag: 1.0.0
4130
4131 resolve@2.0.0-next.5:
4132 dependencies:
4133 is-core-module: 2.16.1
4134 path-parse: 1.0.7
4135 supports-preserve-symlinks-flag: 1.0.0
4136
4137 responselike@3.0.0:
4138 dependencies:
4139 lowercase-keys: 3.0.0
4140
4141 restore-cursor@3.1.0:
4142 dependencies:
4143 onetime: 5.1.2
4144 signal-exit: 3.0.7
4145
4146 retry@0.12.0: {}
4147
4148 retry@0.13.1: {}
4149
4150 robots-parser@3.0.1: {}
4151
4152 rrweb-cssom@0.8.0: {}
4153
4154 run-async@2.4.1: {}
4155
4156 run-async@3.0.0: {}
4157
4158 rxjs@7.8.2:
4159 dependencies:
4160 tslib: 2.8.1
4161
4162 safe-array-concat@1.1.3:
4163 dependencies:
4164 call-bind: 1.0.8
4165 call-bound: 1.0.3
4166 get-intrinsic: 1.3.0
4167 has-symbols: 1.1.0
4168 isarray: 2.0.5
4169
4170 safe-buffer@5.2.1: {}
4171
4172 safe-push-apply@1.0.0:
4173 dependencies:
4174 es-errors: 1.3.0
4175 isarray: 2.0.5
4176
4177 safe-regex-test@1.1.0:
4178 dependencies:
4179 call-bound: 1.0.3
4180 es-errors: 1.3.0
4181 is-regex: 1.2.1
4182
4183 safer-buffer@2.1.2: {}
4184
4185 sax@1.4.1: {}
4186
4187 saxes@6.0.0:
4188 dependencies:
4189 xmlchars: 2.2.0
4190
4191 semver@6.3.1: {}
4192
4193 semver@7.7.1: {}
4194
4195 set-function-length@1.2.2:
4196 dependencies:
4197 define-data-property: 1.1.4
4198 es-errors: 1.3.0
4199 function-bind: 1.1.2
4200 get-intrinsic: 1.3.0
4201 gopd: 1.2.0
4202 has-property-descriptors: 1.0.2
4203
4204 set-function-name@2.0.2:
4205 dependencies:
4206 define-data-property: 1.1.4
4207 es-errors: 1.3.0
4208 functions-have-names: 1.2.3
4209 has-property-descriptors: 1.0.2
4210
4211 set-proto@1.0.0:
4212 dependencies:
4213 dunder-proto: 1.0.1
4214 es-errors: 1.3.0
4215 es-object-atoms: 1.1.1
4216
4217 shebang-command@2.0.0:
4218 dependencies:
4219 shebang-regex: 3.0.0
4220
4221 shebang-regex@3.0.0: {}
4222
4223 side-channel-list@1.0.0:
4224 dependencies:
4225 es-errors: 1.3.0
4226 object-inspect: 1.13.4
4227
4228 side-channel-map@1.0.1:
4229 dependencies:
4230 call-bound: 1.0.3
4231 es-errors: 1.3.0
4232 get-intrinsic: 1.3.0
4233 object-inspect: 1.13.4
4234
4235 side-channel-weakmap@1.0.2:
4236 dependencies:
4237 call-bound: 1.0.3
4238 es-errors: 1.3.0
4239 get-intrinsic: 1.3.0
4240 object-inspect: 1.13.4
4241 side-channel-map: 1.0.1
4242
4243 side-channel@1.1.0:
4244 dependencies:
4245 es-errors: 1.3.0
4246 object-inspect: 1.13.4
4247 side-channel-list: 1.0.0
4248 side-channel-map: 1.0.1
4249 side-channel-weakmap: 1.0.2
4250
4251 signal-exit@3.0.7: {}
4252
4253 smart-buffer@4.2.0: {}
4254
4255 socks-proxy-agent@8.0.5:
4256 dependencies:
4257 agent-base: 7.1.3
4258 debug: 4.4.0
4259 socks: 2.8.4
4260 transitivePeerDependencies:
4261 - supports-color
4262
4263 socks@2.8.4:
4264 dependencies:
4265 ip-address: 9.0.5
4266 smart-buffer: 4.2.0
4267
4268 split@0.3.3:
4269 dependencies:
4270 through: 2.3.8
4271
4272 sprintf-js@1.1.3: {}
4273
4274 stream-chain@2.2.5: {}
4275
4276 stream-combiner@0.0.4:
4277 dependencies:
4278 duplexer: 0.1.2
4279
4280 stream-json@1.9.1:
4281 dependencies:
4282 stream-chain: 2.2.5
4283
4284 string-comparison@1.3.0: {}
4285
4286 string-width@4.2.3:
4287 dependencies:
4288 emoji-regex: 8.0.0
4289 is-fullwidth-code-point: 3.0.0
4290 strip-ansi: 6.0.1
4291
4292 string.prototype.includes@2.0.1:
4293 dependencies:
4294 call-bind: 1.0.8
4295 define-properties: 1.2.1
4296 es-abstract: 1.23.9
4297
4298 string.prototype.matchall@4.0.12:
4299 dependencies:
4300 call-bind: 1.0.8
4301 call-bound: 1.0.3
4302 define-properties: 1.2.1
4303 es-abstract: 1.23.9
4304 es-errors: 1.3.0
4305 es-object-atoms: 1.1.1
4306 get-intrinsic: 1.3.0
4307 gopd: 1.2.0
4308 has-symbols: 1.1.0
4309 internal-slot: 1.1.0
4310 regexp.prototype.flags: 1.5.4
4311 set-function-name: 2.0.2
4312 side-channel: 1.1.0
4313
4314 string.prototype.repeat@1.0.0:
4315 dependencies:
4316 define-properties: 1.2.1
4317 es-abstract: 1.23.9
4318
4319 string.prototype.trim@1.2.10:
4320 dependencies:
4321 call-bind: 1.0.8
4322 call-bound: 1.0.3
4323 define-data-property: 1.1.4
4324 define-properties: 1.2.1
4325 es-abstract: 1.23.9
4326 es-object-atoms: 1.1.1
4327 has-property-descriptors: 1.0.2
4328
4329 string.prototype.trimend@1.0.9:
4330 dependencies:
4331 call-bind: 1.0.8
4332 call-bound: 1.0.3
4333 define-properties: 1.2.1
4334 es-object-atoms: 1.1.1
4335
4336 string.prototype.trimstart@1.0.8:
4337 dependencies:
4338 call-bind: 1.0.8
4339 define-properties: 1.2.1
4340 es-object-atoms: 1.1.1
4341
4342 string_decoder@1.3.0:
4343 dependencies:
4344 safe-buffer: 5.2.1
4345
4346 strip-ansi@3.0.1:
4347 dependencies:
4348 ansi-regex: 2.1.1
4349
4350 strip-ansi@6.0.1:
4351 dependencies:
4352 ansi-regex: 5.0.1
4353
4354 strip-bom@3.0.0: {}
4355
4356 strip-json-comments@3.1.1: {}
4357
4358 strtok3@10.2.1:
4359 dependencies:
4360 '@tokenizer/token': 0.3.0
4361 peek-readable: 6.1.1
4362
4363 supports-color@2.0.0: {}
4364
4365 supports-color@7.2.0:
4366 dependencies:
4367 has-flag: 4.0.0
4368
4369 supports-preserve-symlinks-flag@1.0.0: {}
4370
4371 symbol-tree@3.2.4: {}
4372
4373 through@2.3.8: {}
4374
4375 tiny-typed-emitter@2.1.0: {}
4376
4377 tldts-core@6.1.78: {}
4378
4379 tldts@6.1.78:
4380 dependencies:
4381 tldts-core: 6.1.78
4382
4383 tmp@0.0.33:
4384 dependencies:
4385 os-tmpdir: 1.0.2
4386
4387 token-types@6.0.0:
4388 dependencies:
4389 '@tokenizer/token': 0.3.0
4390 ieee754: 1.2.1
4391
4392 tough-cookie@5.1.1:
4393 dependencies:
4394 tldts: 6.1.78
4395
4396 tr46@5.0.0:
4397 dependencies:
4398 punycode: 2.3.1
4399
4400 tsconfig-paths@3.15.0:
4401 dependencies:
4402 '@types/json5': 0.0.29
4403 json5: 1.0.2
4404 minimist: 1.2.8
4405 strip-bom: 3.0.0
4406
4407 tslib@2.8.1: {}
4408
4409 type-check@0.4.0:
4410 dependencies:
4411 prelude-ls: 1.2.1
4412
4413 type-fest@0.21.3: {}
4414
4415 type-fest@2.19.0: {}
4416
4417 type-fest@4.35.0: {}
4418
4419 typed-array-buffer@1.0.3:
4420 dependencies:
4421 call-bound: 1.0.3
4422 es-errors: 1.3.0
4423 is-typed-array: 1.1.15
4424
4425 typed-array-byte-length@1.0.3:
4426 dependencies:
4427 call-bind: 1.0.8
4428 for-each: 0.3.5
4429 gopd: 1.2.0
4430 has-proto: 1.2.0
4431 is-typed-array: 1.1.15
4432
4433 typed-array-byte-offset@1.0.4:
4434 dependencies:
4435 available-typed-arrays: 1.0.7
4436 call-bind: 1.0.8
4437 for-each: 0.3.5
4438 gopd: 1.2.0
4439 has-proto: 1.2.0
4440 is-typed-array: 1.1.15
4441 reflect.getprototypeof: 1.0.10
4442
4443 typed-array-length@1.0.7:
4444 dependencies:
4445 call-bind: 1.0.8
4446 for-each: 0.3.5
4447 gopd: 1.2.0
4448 is-typed-array: 1.1.15
4449 possible-typed-array-names: 1.1.0
4450 reflect.getprototypeof: 1.0.10
4451
4452 uhyphen@0.2.0: {}
4453
4454 uint8array-extras@1.4.0: {}
4455
4456 unbox-primitive@1.1.0:
4457 dependencies:
4458 call-bound: 1.0.3
4459 has-bigints: 1.1.0
4460 has-symbols: 1.1.0
4461 which-boxed-primitive: 1.1.1
4462
4463 undici-types@6.20.0: {}
4464
4465 universalify@2.0.1: {}
4466
4467 update-browserslist-db@1.1.2(browserslist@4.24.4):
4468 dependencies:
4469 browserslist: 4.24.4
4470 escalade: 3.2.0
4471 picocolors: 1.1.1
4472
4473 uri-js@4.4.1:
4474 dependencies:
4475 punycode: 2.3.1
4476
4477 util-deprecate@1.0.2: {}
4478
4479 vali-date@1.0.0: {}
4480
4481 w3c-xmlserializer@5.0.0:
4482 dependencies:
4483 xml-name-validator: 5.0.0
4484
4485 wcwidth@1.0.1:
4486 dependencies:
4487 defaults: 1.0.4
4488
4489 webidl-conversions@7.0.0: {}
4490
4491 whatwg-encoding@3.1.1:
4492 dependencies:
4493 iconv-lite: 0.6.3
4494
4495 whatwg-mimetype@4.0.0: {}
4496
4497 whatwg-url@14.1.1:
4498 dependencies:
4499 tr46: 5.0.0
4500 webidl-conversions: 7.0.0
4501
4502 which-boxed-primitive@1.1.1:
4503 dependencies:
4504 is-bigint: 1.1.0
4505 is-boolean-object: 1.2.2
4506 is-number-object: 1.1.1
4507 is-string: 1.1.1
4508 is-symbol: 1.1.1
4509
4510 which-builtin-type@1.2.1:
4511 dependencies:
4512 call-bound: 1.0.3
4513 function.prototype.name: 1.1.8
4514 has-tostringtag: 1.0.2
4515 is-async-function: 2.1.1
4516 is-date-object: 1.1.0
4517 is-finalizationregistry: 1.1.1
4518 is-generator-function: 1.1.0
4519 is-regex: 1.2.1
4520 is-weakref: 1.1.1
4521 isarray: 2.0.5
4522 which-boxed-primitive: 1.1.1
4523 which-collection: 1.0.2
4524 which-typed-array: 1.1.18
4525
4526 which-collection@1.0.2:
4527 dependencies:
4528 is-map: 2.0.3
4529 is-set: 2.0.3
4530 is-weakmap: 2.0.2
4531 is-weakset: 2.0.4
4532
4533 which-typed-array@1.1.18:
4534 dependencies:
4535 available-typed-arrays: 1.0.7
4536 call-bind: 1.0.8
4537 call-bound: 1.0.3
4538 for-each: 0.3.5
4539 gopd: 1.2.0
4540 has-tostringtag: 1.0.2
4541
4542 which@2.0.2:
4543 dependencies:
4544 isexe: 2.0.0
4545
4546 word-wrap@1.2.5: {}
4547
4548 wrap-ansi@6.2.0:
4549 dependencies:
4550 ansi-styles: 4.3.0
4551 string-width: 4.2.3
4552 strip-ansi: 6.0.1
4553
4554 wrap-ansi@7.0.0:
4555 dependencies:
4556 ansi-styles: 4.3.0
4557 string-width: 4.2.3
4558 strip-ansi: 6.0.1
4559
4560 wrappy@1.0.2: {}
4561
4562 ws@8.18.1: {}
4563
4564 xml-name-validator@5.0.0: {}
4565
4566 xmlchars@2.2.0: {}
4567
4568 y18n@5.0.8: {}
4569
4570 yargonaut@1.1.4:
4571 dependencies:
4572 chalk: 1.1.3
4573 figlet: 1.8.0
4574 parent-require: 1.0.0
4575
4576 yargs-parser@21.1.1: {}
4577
4578 yargs@17.7.2:
4579 dependencies:
4580 cliui: 8.0.1
4581 escalade: 3.2.0
4582 get-caller-file: 2.0.5
4583 require-directory: 2.1.1
4584 string-width: 4.2.3
4585 y18n: 5.0.8
4586 yargs-parser: 21.1.1
4587
4588 yocto-queue@0.1.0: {}
4589
4590 yoctocolors-cjs@2.1.2: {}
Pricing
Pricing model
Pay per usageThis Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage.