Google Ads Scraper Pro beta avatar
Google Ads Scraper Pro beta

Pricing

Pay per usage

Go to Store
Google Ads Scraper Pro beta

Google Ads Scraper Pro beta

Developed by

Abdlhakim hefaia

Abdlhakim hefaia

Maintained by Community

Google Ads Scraper beta

5.0 (3)

Pricing

Pay per usage

3

Total users

11

Monthly users

11

Runs succeeded

>99%

Last modified

23 days ago

.actor/Dockerfile

# Specify the base Docker image. You can read more about
# the available images at https://docs.apify.com/sdk/js/docs/guides/docker-images
# You can also use any other image from Docker Hub.
FROM apify/actor-node:20
# Check preinstalled packages
RUN npm ls crawlee apify puppeteer playwright
# Copy just package.json and package-lock.json
# to speed up the build using Docker layer cache.
COPY package*.json ./
# Install NPM packages, skip optional and development dependencies to
# keep the image small. Avoid logging too much and print the dependency
# tree for debugging
RUN npm --quiet set progress=false \
&& npm install --omit=dev --omit=optional \
&& echo "Installed NPM packages:" \
&& (npm list --omit=dev --all || true) \
&& echo "Node.js version:" \
&& node --version \
&& echo "NPM version:" \
&& npm --version \
&& rm -r ~/.npm
# Next, copy the remaining files and directories with the source code.
# Since we do this after NPM install, quick build will be really fast
# for most source file changes.
COPY . ./
# Run the image.
CMD npm start --silent

.actor/actor.json

{
"actorSpecification": 1,
"name": "my-actor-2",
"title": "Google Ads Transparency Scraper",
"description": "Crawlee and Cheerio project in javascript.",
"version": "0.0",
"meta": {
"templateId": "js-crawlee-cheerio"
},
"input": "./input_schema.json",
"dockerfile": "./Dockerfile",
"readme": "./README.md",
"storages": {
"dataset": {
"actorSpecification": 1,
"title": "Results",
"views": {
"results": {
"title": "results to scan",
"transformation": {
"fields": ["advertiserId", "creativeId", "format", "previewUrls", "creativeRegions", "adTransparencyUrl", "regionStats"]
},
"display": {
"component": "table",
"properties": {
"advertiserId": {
"label": "advertiser Id",
"format": "text"
},
"creativeId": {
"label": "creative Id",
"format": "text"
},
"format": {
"label": "format",
"format": "text"
},
"previewUrls": {
"label": "previewUrls",
"format": "text"
},
"creativeRegions": {
"label": "creative Regions",
"format": "text"
},
"adTransparencyUrl": {
"label": "adTransparency Url",
"format": "link"
},
"regionStats": {
"label": "region Stats",
"format": "text"
}
}
}
}
}
}
}
}

.actor/input_schema.json

{
"title": "Ad Search Configuration",
"type": "object",
"schemaVersion": 1,
"properties": {
"Use_URL_Filter": {
"title": "Use parameter URL as a filter",
"type": "boolean",
"description": "Debug messages will be included in the log.",
"default": true,
"groupCaption": "Options",
"groupDescription": "Various options for this Actor"
},
"isPolitical": {
"title": "isPolitical",
"type": "boolean",
"description": "Debug messages will be included in the log.",
"default": true,
"groupCaption": "Options",
"groupDescription": "Various options for this Actor"
},
"keyword_domain_advertiserid": {
"title": "Search Keywords",
"type": "array",
"description": "Enter one or more keywords to search for relevant ads.",
"editor": "stringList",
"default":
[
"AR05789404224659914753",
"https://adstransparency.google.com/advertiser/AR05789404224659914753?region=US&topic=political&preset-date=Last+7+days&format=VIDEO&platform=YOUTUBE"
]
},
"limitResults": {
"title": "limit Results",
"type": "integer",
"description": "Specify the maximum number of unique domains to retrieve.",
"editor": "number",
"default": 3
},
"maxDomains": {
"title": "Maximum Domains",
"type": "integer",
"description": "Specify the maximum number of unique domains to retrieve.",
"default": 0,
"editor": "number"
},
"maxAdvertisers": {
"title": "Maximum Advertisers",
"type": "integer",
"description": "Set the maximum number of advertisers to fetch results from.",
"default": 10,
"editor": "number"
},
"platform": {
"title": "",
"type": "string",
"description": "",
"editor": "select",
"default": "0",
"enum": ["0", "2", "1", "4", "3", "5"],
"enumTitles": ["All platforms", "Google Maps", "Google Play", "Google Shopping", "Google Search", "YouTube"]
},
"format": {
"title": "Ad Format",
"type": "string",
"description": "Select the preferred ad format to filter results.",
"editor": "select",
"default": "0",
"enum": ["0", "1", "2", "3"],
"enumTitles": ["All formats", "Text", "Image", "Video"]
},
"presetDate": {
"title": "Date Range",
"type": "string",
"description": "Select a predefined date range for filtering ads.",
"editor": "select",
"default": "0",
"enum": ["0", "1", "7", "30", "-1"],
"enumTitles": ["Today", "Yesterday", "Last 7 days", "Last 30 days", "Any time"]
},
"startDate": {
"title": "Start Date",
"type": "string",
"description": "Specify a custom start date for filtering ads (YYYYMMDD).",
"editor": "datepicker",
"default": "2024-01-01"
},
"endDate": {
"title": "End Date",
"type": "string",
"description": "Specify a custom end date for filtering ads (YYYYMMDD).",
"editor": "datepicker"
},
"region": {
"title": "Target Region",
"type": "string",
"description": "Select a specific country/region to filter ads.",
"editor": "select",
"enum": [
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Australia",
"Austria",
"Azerbaijan",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Brazil",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cabo Verde",
"Caribbean Netherlands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Curacao",
"Cyprus",
"Czechia",
"Democratic Republic of the Congo",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Eswatini",
"Ethiopia",
"Micronesia",
"Fiji",
"Finland",
"France",
"French Polynesia",
"French Southern and Antarctic Lands",
"Gabon",
"Georgia",
"Germany",
"Ghana",
"Greece",
"Grenada",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Honduras",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iraq",
"Ireland",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Kuwait",
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Malta",
"Mali",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Morocco",
"Mozambique",
"Myanmar (Burma)",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"North Macedonia",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Qatar",
"Republic of the Congo",
"Romania",
"Rwanda",
"Saint Helena, Ascension and Tristan da Cunha",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Seychelles",
"Sierra Leone",
"Singapore",
"Sint Maarten",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"South Korea",
"Spain",
"Sri Lanka",
"Suriname",
"Switzerland",
"Sweden",
"Tajikistan",
"Tanzania",
"Thailand",
"The Bahamas",
"The Gambia",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkiye",
"Turkmenistan",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Vatican City",
"Venezuela",
"Vietnam",
"Yemen",
"Zambia",
"Zimbabwe",
"Bermuda",
"Bouvet Island",
"British Indian Ocean Territory",
"British Virgin Islands",
"Canary Islands",
"Cayman Islands",
"Taiwan",
"Mayotte",
"Faroe Islands",
"Falkland Islands (Islas Malvinas)",
"French Guiana",
"Palestine",
"Gibraltar",
"Greenland",
"Guadeloupe",
"Hong Kong",
"Isle of Man",
"Macao",
"Martinique",
"Montserrat",
"Aruba",
"Puerto Rico",
"Reunion",
"Anguilla",
"Western Sahara",
"Saint Martin",
"Svalbard and Jan Mayen",
"Turks and Caicos Islands",
"United States Minor Outlying Islands",
"U.S. Virgin Islands",
"Wallis and Futuna"
],
"enumTitles": [
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Antarctica",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Australia",
"Austria",
"Azerbaijan",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Brazil",
"Brunei",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cabo Verde",
"Caribbean Netherlands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Curacao",
"Cyprus",
"Czechia",
"Democratic Republic of the Congo",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Eswatini",
"Ethiopia",
"Micronesia",
"Fiji",
"Finland",
"France",
"French Polynesia",
"French Southern and Antarctic Lands",
"Gabon",
"Georgia",
"Germany",
"Ghana",
"Greece",
"Grenada",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Honduras",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iraq",
"Ireland",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Kuwait",
"Kyrgyzstan",
"Laos",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Malta",
"Mali",
"Marshall Islands",
"Mauritania",
"Mauritius",
"Mexico",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Morocco",
"Mozambique",
"Myanmar (Burma)",
"Namibia",
"Nauru",
"Nepal",
"Netherlands",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"North Macedonia",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Qatar",
"Republic of the Congo",
"Romania",
"Rwanda",
"Saint Helena, Ascension and Tristan da Cunha",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Seychelles",
"Sierra Leone",
"Singapore",
"Sint Maarten",
"Slovakia",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"South Korea",
"Spain",
"Sri Lanka",
"Suriname",
"Switzerland",
"Sweden",
"Tajikistan",
"Tanzania",
"Thailand",
"The Bahamas",
"The Gambia",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkiye",
"Turkmenistan",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Vatican City",
"Venezuela",
"Vietnam",
"Yemen",
"Zambia",
"Zimbabwe",
"Bermuda",
"Bouvet Island",
"British Indian Ocean Territory",
"British Virgin Islands",
"Canary Islands",
"Cayman Islands",
"Taiwan",
"Mayotte",
"Faroe Islands",
"Falkland Islands (Islas Malvinas)",
"French Guiana",
"Palestine",
"Gibraltar",
"Greenland",
"Guadeloupe",
"Hong Kong",
"Isle of Man",
"Macao",
"Martinique",
"Montserrat",
"Aruba",
"Puerto Rico",
"Reunion",
"Anguilla",
"Western Sahara",
"Saint Martin",
"Svalbard and Jan Mayen",
"Turks and Caicos Islands",
"United States Minor Outlying Islands",
"U.S. Virgin Islands",
"Wallis and Futuna"
]
},
"proxyConfig": {
"sectionCaption": "Proxy Configuration",
"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.",
"title": "Proxy",
"type": "object",
"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.",
"default": {"useApifyProxy": false},
"editor": "proxy"
}
}
}

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

{
"regions": {
"region": [
{
"1": 2008,
"3": "AL",
"4": "Albania",
"8": {
"1": 411533320,
"2": 201683310
},
"10": 1
},
{
"1": 2012,
"3": "DZ",
"4": "Algeria",
"8": {
"1": 280338860,
"2": 16596260
},
"10": 1
},
{
"1": 2016,
"3": "AS",
"4": "American Samoa",
"8": {
"1": -142709720,
"2": -1701322170
},
"10": 1
},
{
"1": 2020,
"3": "AD",
"4": "Andorra",
"8": {
"1": 425062850,
"2": 15218010
},
"10": 1
},
{
"1": 2024,
"3": "AO",
"4": "Angola",
"8": {
"1": -112026920,
"2": 178738870
},
"10": 1
},
{
"1": 2010,
"3": "AQ",
"4": "Antarctica",
"8": {
"1": -752509730,
"2": -713890
},
"10": 1
},
{
"1": 2028,
"3": "AG",
"4": "Antigua and Barbuda",
"8": {
"1": 170608160,
"2": -617964280
},
"10": 1
},
{
"1": 2032,
"3": "AR",
"4": "Argentina",
"8": {
"1": -384160970,
"2": -636166720
},
"10": 1
},
{
"1": 2051,
"3": "AM",
"4": "Armenia",
"8": {
"1": 400690990,
"2": 450381890
},
"10": 1
},
{
"1": 2036,
"3": "AU",
"4": "Australia",
"8": {
"1": -252743980,
"2": 1337751360
},
"10": 1
},
{
"1": 2040,
"3": "AT",
"4": "Austria",
"5": "Austria",
"8": {
"1": 475162310,
"2": 145500720
},
"10": 1
},
{
"1": 2031,
"3": "AZ",
"4": "Azerbaijan",
"8": {
"1": 401431050,
"2": 475769270
},
"10": 1
},
{
"1": 2048,
"3": "BH",
"4": "Bahrain",
"8": {
"1": 260667000,
"2": 505577000
},
"10": 1
},
{
"1": 2050,
"3": "BD",
"4": "Bangladesh",
"8": {
"1": 236849940,
"2": 903563310
},
"10": 1
},
{
"1": 2052,
"3": "BB",
"4": "Barbados",
"8": {
"1": 131938870,
"2": -595431980
},
"10": 1
},
{
"1": 2112,
"3": "BY",
"4": "Belarus",
"8": {
"1": 537098070,
"2": 279533890
},
"10": 1
},
{
"1": 2056,
"3": "BE",
"4": "Belgium",
"5": "Belgium",
"8": {
"1": 505038870,
"2": 44699360
},
"10": 1
},
{
"1": 2084,
"3": "BZ",
"4": "Belize",
"8": {
"1": 171898770,
"2": -884976500
},
"10": 1
},
{
"1": 2204,
"3": "BJ",
"4": "Benin",
"8": {
"1": 93076900,
"2": 23158340
},
"10": 1
},
{
"1": 2064,
"3": "BT",
"4": "Bhutan",
"8": {
"1": 275141620,
"2": 904336010
},
"10": 1
},
{
"1": 2068,
"3": "BO",
"4": "Bolivia",
"8": {
"1": -162901540,
"2": -635886530
},
"10": 1
},
{
"1": 2070,
"3": "BA",
"4": "Bosnia and Herzegovina",
"8": {
"1": 439158860,
"2": 176790760
},
"10": 1
},
{
"1": 2072,
"3": "BW",
"4": "Botswana",
"8": {
"1": -223284740,
"2": 246848660
},
"10": 1
},
{
"1": 2076,
"3": "BR",
"4": "Brazil",
"8": {
"1": -142350040,
"2": -519252800
},
"10": 1
},
{
"1": 2096,
"3": "BN",
"4": "Brunei",
"8": {
"1": 45352770,
"2": 1147276690
},
"10": 1
},
{
"1": 2100,
"3": "BG",
"4": "Bulgaria",
"8": {
"1": 427338830,
"2": 254858300
},
"10": 1
},
{
"1": 2854,
"3": "BF",
"4": "Burkina Faso",
"8": {
"1": 122383330,
"2": -15615930
},
"10": 1
},
{
"1": 2108,
"3": "BI",
"4": "Burundi",
"8": {
"1": -33730560,
"2": 299188860
},
"10": 1
},
{
"1": 2116,
"3": "KH",
"4": "Cambodia",
"8": {
"1": 125656790,
"2": 1049909630
},
"10": 1
},
{
"1": 2120,
"3": "CM",
"4": "Cameroon",
"8": {
"1": 73697220,
"2": 123547220
},
"10": 1
},
{
"1": 2124,
"3": "CA",
"4": "Canada",
"5": "Canada",
"8": {
"1": 561303660,
"2": -1063467710
},
"10": 1
},
{
"1": 2132,
"3": "CV",
"4": "Cabo Verde",
"5": "Cabo Verde",
"8": {
"1": 165388000,
"2": -230418000
},
"10": 1
},
{
"1": 2535,
"3": "BQ",
"4": "Caribbean Netherlands",
"8": {
"1": 121783611,
"2": -682385339
},
"10": 1
},
{
"1": 2140,
"3": "CF",
"4": "Central African Republic",
"8": {
"1": 66111110,
"2": 209394440
},
"10": 1
},
{
"1": 2148,
"3": "TD",
"4": "Chad",
"8": {
"1": 154541660,
"2": 187322070
},
"10": 1
},
{
"1": 2152,
"3": "CL",
"4": "Chile",
"8": {
"1": -356751470,
"2": -715429690
},
"10": 1
},
{
"1": 2156,
"3": "CN",
"4": "China",
"8": {
"1": 358616600,
"2": 1041953970
},
"10": 1
},
{
"1": 2162,
"3": "CX",
"4": "Christmas Island",
"8": {
"1": -104475250,
"2": 1056904490
},
"10": 1
},
{
"1": 2166,
"3": "CC",
"4": "Cocos (Keeling) Islands",
"8": {
"1": -121641650,
"2": 968709560
},
"10": 1
},
{
"1": 2170,
"3": "CO",
"4": "Colombia",
"8": {
"1": 45708680,
"2": -742973330
},
"10": 1
},
{
"1": 2174,
"3": "KM",
"4": "Comoros",
"8": {
"1": -116455000,
"2": 433333000
},
"10": 1
},
{
"1": 2184,
"3": "CK",
"4": "Cook Islands",
"8": {
"1": -212367360,
"2": -1597776710
},
"10": 1
},
{
"1": 2188,
"3": "CR",
"4": "Costa Rica",
"8": {
"1": 97489170,
"2": -837534280
},
"10": 1
},
{
"1": 2384,
"3": "CI",
"4": "Cote d'Ivoire",
"8": {
"1": 75399890,
"2": -55470800
},
"10": 1
},
{
"1": 2191,
"3": "HR",
"4": "Croatia",
"8": {
"1": 451000000,
"2": 152000000
},
"10": 1
},
{
"1": 2531,
"3": "CW",
"4": "Curacao",
"8": {
"1": 121695700,
"2": -689900200
},
"10": 1
},
{
"1": 2196,
"3": "CY",
"4": "Cyprus",
"8": {
"1": 351264130,
"2": 334298590
},
"10": 1
},
{
"1": 2203,
"3": "CZ",
"4": "Czechia",
"5": "Czechia",
"8": {
"1": 498174920,
"2": 154729620
},
"10": 1
},
{
"1": 2180,
"3": "CD",
"4": "Democratic Republic of the Congo",
"8": {
"1": -40383330,
"2": 217586640
},
"10": 1
},
{
"1": 2208,
"3": "DK",
"4": "Denmark",
"5": "Denmark",
"8": {
"1": 562639200,
"2": 95017850
},
"10": 1
},
{
"1": 2262,
"3": "DJ",
"4": "Djibouti",
"8": {
"1": 118251380,
"2": 425902750
},
"10": 1
},
{
"1": 2212,
"3": "DM",
"4": "Dominica",
"8": {
"1": 154149990,
"2": -613709760
},
"10": 1
},
{
"1": 2214,
"3": "DO",
"4": "Dominican Republic",
"8": {
"1": 187356930,
"2": -701626510
},
"10": 1
},
{
"1": 2218,
"3": "EC",
"4": "Ecuador",
"8": {
"1": -18312390,
"2": -781834060
},
"10": 1
},
{
"1": 2818,
"3": "EG",
"4": "Egypt",
"8": {
"1": 268205530,
"2": 308024980
},
"10": 1
},
{
"1": 2222,
"3": "SV",
"4": "El Salvador",
"8": {
"1": 137941850,
"2": -888965300
},
"10": 1
},
{
"1": 2226,
"3": "GQ",
"4": "Equatorial Guinea",
"8": {
"1": 16508010,
"2": 102678950
},
"10": 1
},
{
"1": 2232,
"3": "ER",
"4": "Eritrea",
"8": {
"1": 151793840,
"2": 397823340
},
"10": 1
},
{
"1": 2233,
"3": "EE",
"4": "Estonia",
"8": {
"1": 585952720,
"2": 250136070
},
"10": 1
},
{
"1": 2748,
"3": "SZ",
"4": "Eswatini",
"5": "Eswatini",
"8": {
"1": -265225030,
"2": 314658660
},
"10": 1
},
{
"1": 2231,
"3": "ET",
"4": "Ethiopia",
"8": {
"1": 91450000,
"2": 404896730
},
"10": 1
},
{
"1": 2583,
"3": "FM",
"4": "Micronesia",
"8": {
"1": 74255540,
"2": 1505508120
},
"10": 1
},
{
"1": 2242,
"3": "FJ",
"4": "Fiji",
"8": {
"1": -177133710,
"2": 1780650320
},
"10": 1
},
{
"1": 2246,
"3": "FI",
"4": "Finland",
"8": {
"1": 619241100,
"2": 257481510
},
"10": 1
},
{
"1": 2250,
"3": "FR",
"4": "France",
"8": {
"1": 462276380,
"2": 22137490
},
"10": 1
},
{
"1": 2258,
"3": "PF",
"4": "French Polynesia",
"8": {
"1": -176797420,
"2": -1494068430
},
"10": 1
},
{
"1": 2260,
"3": "TF",
"4": "French Southern and Antarctic Lands",
"8": {
"1": -492803660,
"2": 693485570
},
"10": 1
},
{
"1": 2266,
"3": "GA",
"4": "Gabon",
"8": {
"1": -8036890,
"2": 116094440
},
"10": 1
},
{
"1": 2268,
"3": "GE",
"4": "Georgia",
"8": {
"1": 423154070,
"2": 433568920
},
"10": 1
},
{
"1": 2276,
"3": "DE",
"4": "Germany",
"5": "Germany",
"8": {
"1": 511656910,
"2": 104515260
},
"10": 1
},
{
"1": 2288,
"3": "GH",
"4": "Ghana",
"8": {
"1": 79465270,
"2": -10231940
},
"10": 1
},
{
"1": 2300,
"3": "GR",
"4": "Greece",
"8": {
"1": 390742080,
"2": 218243120
},
"10": 1
},
{
"1": 2308,
"3": "GD",
"4": "Grenada",
"8": {
"1": 121165000,
"2": -616790000
},
"10": 1
},
{
"1": 2316,
"3": "GU",
"4": "Guam",
"8": {
"1": 133823791,
"2": 1446972774
},
"10": 1
},
{
"1": 2320,
"3": "GT",
"4": "Guatemala",
"8": {
"1": 157834710,
"2": -902307590
},
"10": 1
},
{
"1": 2831,
"3": "GG",
"4": "Guernsey",
"8": {
"1": 494481808,
"2": -25894685
},
"10": 1
},
{
"1": 2324,
"3": "GN",
"4": "Guinea",
"8": {
"1": 99455870,
"2": -96966450
},
"10": 1
},
{
"1": 2624,
"3": "GW",
"4": "Guinea-Bissau",
"8": {
"1": 118037490,
"2": -151804130
},
"10": 1
},
{
"1": 2328,
"3": "GY",
"4": "Guyana",
"8": {
"1": 48604160,
"2": -589301800
},
"10": 1
},
{
"1": 2332,
"3": "HT",
"4": "Haiti",
"8": {
"1": 189711870,
"2": -722852150
},
"10": 1
},
{
"1": 2334,
"3": "HM",
"4": "Heard Island and McDonald Islands",
"8": {
"1": -530818100,
"2": 735041580
},
"10": 1
},
{
"1": 2340,
"3": "HN",
"4": "Honduras",
"8": {
"1": 151999990,
"2": -862419050
},
"10": 1
},
{
"1": 2348,
"3": "HU",
"4": "Hungary",
"8": {
"1": 471624940,
"2": 195033040
},
"10": 1
},
{
"1": 2352,
"3": "IS",
"4": "Iceland",
"8": {
"1": 649630510,
"2": -190208350
},
"10": 1
},
{
"1": 2356,
"3": "IN",
"4": "India",
"8": {
"1": 205936840,
"2": 789628800
},
"10": 1
},
{
"1": 2360,
"3": "ID",
"4": "Indonesia",
"8": {
"1": -7892750,
"2": 1139213270
},
"10": 1
},
{
"1": 2368,
"3": "IQ",
"4": "Iraq",
"8": {
"1": 332231910,
"2": 436792910
},
"10": 1
},
{
"1": 2372,
"3": "IE",
"4": "Ireland",
"8": {
"1": 534129100,
"2": -82438900
},
"10": 1
},
{
"1": 2376,
"3": "IL",
"4": "Israel",
"8": {
"1": 310460510,
"2": 348516120
},
"10": 1
},
{
"1": 2380,
"3": "IT",
"4": "Italy",
"8": {
"1": 418719400,
"2": 125673800
},
"10": 1
},
{
"1": 2388,
"3": "JM",
"4": "Jamaica",
"8": {
"1": 181095810,
"2": -772975080
},
"10": 1
},
{
"1": 2392,
"3": "JP",
"4": "Japan",
"8": {
"1": 362048240,
"2": 1382529240
},
"10": 1
},
{
"1": 2832,
"3": "JE",
"4": "Jersey",
"8": {
"1": 492137711,
"2": -21357662
},
"10": 1
},
{
"1": 2400,
"3": "JO",
"4": "Jordan",
"8": {
"1": 305851640,
"2": 362384140
},
"10": 1
},
{
"1": 2398,
"3": "KZ",
"4": "Kazakhstan",
"8": {
"1": 480195730,
"2": 669236840
},
"10": 1
},
{
"1": 2404,
"3": "KE",
"4": "Kenya",
"8": {
"1": -235590,
"2": 379061930
},
"10": 1
},
{
"1": 2296,
"3": "KI",
"4": "Kiribati",
"8": {
"1": 14421300,
"2": 1729829763
},
"10": 1
},
{
"1": 2414,
"3": "KW",
"4": "Kuwait",
"8": {
"1": 293116600,
"2": 474817660
},
"10": 1
},
{
"1": 2417,
"3": "KG",
"4": "Kyrgyzstan",
"8": {
"1": 412043800,
"2": 747660980
},
"10": 1
},
{
"1": 2418,
"3": "LA",
"4": "Laos",
"8": {
"1": 198562700,
"2": 1024954960
},
"10": 1
},
{
"1": 2428,
"3": "LV",
"4": "Latvia",
"8": {
"1": 568796350,
"2": 246031890
},
"10": 1
},
{
"1": 2422,
"3": "LB",
"4": "Lebanon",
"8": {
"1": 338547210,
"2": 358622850
},
"10": 1
},
{
"1": 2426,
"3": "LS",
"4": "Lesotho",
"8": {
"1": -296099880,
"2": 282336080
},
"10": 1
},
{
"1": 2430,
"3": "LR",
"4": "Liberia",
"8": {
"1": 64280550,
"2": -94294990
},
"10": 1
},
{
"1": 2434,
"3": "LY",
"4": "Libya",
"8": {
"1": 263351000,
"2": 172283310
},
"10": 1
},
{
"1": 2438,
"3": "LI",
"4": "Liechtenstein",
"8": {
"1": 471410392,
"2": 95209350
},
"10": 1
},
{
"1": 2440,
"3": "LT",
"4": "Lithuania",
"8": {
"1": 551694380,
"2": 238812750
},
"10": 1
},
{
"1": 2442,
"3": "LU",
"4": "Luxembourg",
"5": "Luxembourg",
"8": {
"1": 498152730,
"2": 61295830
},
"10": 1
},
{
"1": 2450,
"3": "MG",
"4": "Madagascar",
"8": {
"1": -187669470,
"2": 468691070
},
"10": 1
},
{
"1": 2454,
"3": "MW",
"4": "Malawi",
"8": {
"1": -132543080,
"2": 343015250
},
"10": 1
},
{
"1": 2458,
"3": "MY",
"4": "Malaysia",
"8": {
"1": 42104840,
"2": 1019757660
},
"10": 1
},
{
"1": 2462,
"3": "MV",
"4": "Maldives",
"8": {
"1": 32027780,
"2": 732206800
},
"10": 1
},
{
"1": 2470,
"3": "MT",
"4": "Malta",
"8": {
"1": 359374960,
"2": 143754160
},
"10": 1
},
{
"1": 2466,
"3": "ML",
"4": "Mali",
"8": {
"1": 175706920,
"2": -39961660
},
"10": 1
},
{
"1": 2584,
"3": "MH",
"4": "Marshall Islands",
"8": {
"1": 71314740,
"2": 1711844780
},
"10": 1
},
{
"1": 2478,
"3": "MR",
"4": "Mauritania",
"8": {
"1": 210078900,
"2": -109408350
},
"10": 1
},
{
"1": 2480,
"3": "MU",
"4": "Mauritius",
"8": {
"1": -203484040,
"2": 575521520
},
"10": 1
},
{
"1": 2484,
"3": "MX",
"4": "Mexico",
"8": {
"1": 236345010,
"2": -1025527840
},
"10": 1
},
{
"1": 2498,
"3": "MD",
"4": "Moldova",
"8": {
"1": 474116310,
"2": 283698850
},
"10": 1
},
{
"1": 2492,
"3": "MC",
"4": "Monaco",
"8": {
"1": 437384176,
"2": 74246158
},
"10": 1
},
{
"1": 2496,
"3": "MN",
"4": "Mongolia",
"8": {
"1": 468624960,
"2": 1038466560
},
"10": 1
},
{
"1": 2499,
"3": "ME",
"4": "Montenegro",
"8": {
"1": 427086780,
"2": 193743900
},
"10": 1
},
{
"1": 2504,
"3": "MA",
"4": "Morocco",
"8": {
"1": 317917020,
"2": -70926200
},
"10": 1
},
{
"1": 2508,
"3": "MZ",
"4": "Mozambique",
"8": {
"1": -186656950,
"2": 355295620
},
"10": 1
},
{
"1": 2104,
"3": "MM",
"4": "Myanmar (Burma)",
"8": {
"1": 219162210,
"2": 959559740
},
"10": 1
},
{
"1": 2516,
"3": "NA",
"4": "Namibia",
"8": {
"1": -229576400,
"2": 184904100
},
"10": 1
},
{
"1": 2520,
"3": "NR",
"4": "Nauru",
"8": {
"1": -5227780,
"2": 1669315030
},
"10": 1
},
{
"1": 2524,
"3": "NP",
"4": "Nepal",
"8": {
"1": 283948570,
"2": 841240080
},
"10": 1
},
{
"1": 2528,
"3": "NL",
"4": "Netherlands",
"5": "Netherlands",
"8": {
"1": 521326330,
"2": 52912660
},
"10": 1
},
{
"1": 2540,
"3": "NC",
"4": "New Caledonia",
"8": {
"1": -209043050,
"2": 1656180420
},
"10": 1
},
{
"1": 2554,
"3": "NZ",
"4": "New Zealand",
"8": {
"1": -409005570,
"2": 1748859710
},
"10": 1
},
{
"1": 2558,
"3": "NI",
"4": "Nicaragua",
"8": {
"1": 128654160,
"2": -852072290
},
"10": 1
},
{
"1": 2562,
"3": "NE",
"4": "Niger",
"8": {
"1": 176077890,
"2": 80816660
},
"10": 1
},
{
"1": 2566,
"3": "NG",
"4": "Nigeria",
"8": {
"1": 90819990,
"2": 86752770
},
"10": 1
},
{
"1": 2570,
"3": "NU",
"4": "Niue",
"8": {
"1": -190544450,
"2": -1698672330
},
"10": 1
},
{
"1": 2574,
"3": "NF",
"4": "Norfolk Island",
"8": {
"1": -290408350,
"2": 1679547120
},
"10": 1
},
{
"1": 2807,
"3": "MK",
"4": "North Macedonia",
"5": "North Macedonia",
"8": {
"1": 416086350,
"2": 217452750
},
"10": 1
},
{
"1": 2580,
"3": "MP",
"4": "Northern Mariana Islands",
"8": {
"1": 150979000,
"2": 1456739000
},
"10": 1
},
{
"1": 2578,
"3": "NO",
"4": "Norway",
"8": {
"1": 604720240,
"2": 84689460
},
"10": 1
},
{
"1": 2512,
"3": "OM",
"4": "Oman",
"8": {
"1": 214735329,
"2": 559754130
},
"10": 1
},
{
"1": 2586,
"3": "PK",
"4": "Pakistan",
"8": {
"1": 303753210,
"2": 693451160
},
"10": 1
},
{
"1": 2585,
"3": "PW",
"4": "Palau",
"8": {
"1": 75149800,
"2": 1345825200
},
"10": 1
},
{
"1": 2591,
"3": "PA",
"4": "Panama",
"8": {
"1": 85379810,
"2": -807821270
},
"10": 1
},
{
"1": 2598,
"3": "PG",
"4": "Papua New Guinea",
"8": {
"1": -63149930,
"2": 1439555500
},
"10": 1
},
{
"1": 2600,
"3": "PY",
"4": "Paraguay",
"8": {
"1": -234425030,
"2": -584438320
},
"10": 1
},
{
"1": 2604,
"3": "PE",
"4": "Peru",
"8": {
"1": -91899670,
"2": -750151520
},
"10": 1
},
{
"1": 2608,
"3": "PH",
"4": "Philippines",
"8": {
"1": 128797210,
"2": 1217740170
},
"10": 1
},
{
"1": 2612,
"3": "PN",
"4": "Pitcairn Islands",
"8": {
"1": -243767537,
"2": -1283242376
},
"10": 1
},
{
"1": 2616,
"3": "PL",
"4": "Poland",
"8": {
"1": 519194380,
"2": 191451360
},
"10": 1
},
{
"1": 2620,
"3": "PT",
"4": "Portugal",
"8": {
"1": 393998720,
"2": -82244540
},
"10": 1
},
{
"1": 2634,
"3": "QA",
"4": "Qatar",
"8": {
"1": 253548260,
"2": 511838840
},
"10": 1
},
{
"1": 2178,
"3": "CG",
"4": "Republic of the Congo",
"8": {
"1": -2280210,
"2": 158276590
},
"10": 1
},
{
"1": 2642,
"3": "RO",
"4": "Romania",
"8": {
"1": 459431610,
"2": 249667600
},
"10": 1
},
{
"1": 2646,
"3": "RW",
"4": "Rwanda",
"8": {
"1": -19402780,
"2": 298738880
},
"10": 1
},
{
"1": 2654,
"3": "SH",
"4": "Saint Helena, Ascension and Tristan da Cunha",
"5": "St Helena, Ascension and Tristan da Cunha",
"8": {
"1": -159583317,
"2": -57019989
},
"10": 1
},
{
"1": 2659,
"3": "KN",
"4": "Saint Kitts and Nevis",
"5": "St Kitts & Nevis",
"8": {
"1": 173578220,
"2": -627829980
},
"10": 1
},
{
"1": 2662,
"3": "LC",
"4": "Saint Lucia",
"5": "St Lucia",
"8": {
"1": 139094440,
"2": -609788930
},
"10": 1
},
{
"1": 2666,
"3": "PM",
"4": "Saint Pierre and Miquelon",
"5": "St Pierre and Miquelon",
"8": {
"1": 468852000,
"2": -563159000
},
"10": 1
},
{
"1": 2670,
"3": "VC",
"4": "Saint Vincent and the Grenadines",
"5": "St Vincent and the Grenadines",
"8": {
"1": 129843050,
"2": -612872280
},
"10": 1
},
{
"1": 2882,
"3": "WS",
"4": "Samoa",
"8": {
"1": -137590290,
"2": -1721046290
},
"10": 1
},
{
"1": 2674,
"3": "SM",
"4": "San Marino",
"8": {
"1": 439423600,
"2": 124577770
},
"10": 1
},
{
"1": 2678,
"3": "ST",
"4": "Sao Tome and Principe",
"8": {
"1": 1863600,
"2": 66130810
},
"10": 1
},
{
"1": 2682,
"3": "SA",
"4": "Saudi Arabia",
"8": {
"1": 238859420,
"2": 450791620
},
"10": 1
},
{
"1": 2686,
"3": "SN",
"4": "Senegal",
"8": {
"1": 144974010,
"2": -144523620
},
"10": 1
},
{
"1": 2690,
"3": "SC",
"4": "Seychelles",
"8": {
"1": -46795740,
"2": 554919770
},
"10": 1
},
{
"1": 2694,
"3": "SL",
"4": "Sierra Leone",
"8": {
"1": 84605550,
"2": -117798890
},
"10": 1
},
{
"1": 2702,
"3": "SG",
"4": "Singapore",
"8": {
"1": 13520830,
"2": 1038198360
},
"10": 1
},
{
"1": 2534,
"3": "SX",
"4": "Sint Maarten",
"8": {
"1": 180424800,
"2": -630548300
},
"10": 1
},
{
"1": 2703,
"3": "SK",
"4": "Slovakia",
"5": "Slovakia",
"8": {
"1": 486690260,
"2": 196990240
},
"10": 1
},
{
"1": 2705,
"3": "SI",
"4": "Slovenia",
"8": {
"1": 461512410,
"2": 149954630
},
"10": 1
},
{
"1": 2090,
"3": "SB",
"4": "Solomon Islands",
"8": {
"1": -96457100,
"2": 1601561940
},
"10": 1
},
{
"1": 2706,
"3": "SO",
"4": "Somalia",
"8": {
"1": 51521490,
"2": 461996160
},
"10": 1
},
{
"1": 2710,
"3": "ZA",
"4": "South Africa",
"8": {
"1": -305594820,
"2": 229375060
},
"10": 1
},
{
"1": 2239,
"3": "GS",
"4": "South Georgia and the South Sandwich Islands",
"8": {
"1": -544295790,
"2": -365879090
},
"10": 1
},
{
"1": 2410,
"3": "KR",
"4": "South Korea",
"8": {
"1": 359077570,
"2": 1277669220
},
"10": 1
},
{
"1": 2724,
"3": "ES",
"4": "Spain",
"8": {
"1": 404636670,
"2": -37492200
},
"10": 1
},
{
"1": 2144,
"3": "LK",
"4": "Sri Lanka",
"8": {
"1": 78730540,
"2": 807717970
},
"10": 1
},
{
"1": 2740,
"3": "SR",
"4": "Suriname",
"8": {
"1": 39193050,
"2": -560277830
},
"10": 1
},
{
"1": 2756,
"3": "CH",
"4": "Switzerland",
"8": {
"1": 468181880,
"2": 82275120
},
"10": 1
},
{
"1": 2752,
"3": "SE",
"4": "Sweden",
"8": {
"1": 601281610,
"2": 186435010
},
"10": 1
},
{
"1": 2762,
"3": "TJ",
"4": "Tajikistan",
"8": {
"1": 388610340,
"2": 712760930
},
"10": 1
},
{
"1": 2834,
"3": "TZ",
"4": "Tanzania",
"8": {
"1": -63690280,
"2": 348888220
},
"10": 1
},
{
"1": 2764,
"3": "TH",
"4": "Thailand",
"8": {
"1": 158700320,
"2": 1009925410
},
"10": 1
},
{
"1": 2044,
"3": "BS",
"4": "The Bahamas",
"8": {
"1": 250342800,
"2": -773962800
},
"10": 1
},
{
"1": 2270,
"3": "GM",
"4": "The Gambia",
"8": {
"1": 134431820,
"2": -153101390
},
"10": 1
},
{
"1": 2626,
"3": "TL",
"4": "Timor-Leste",
"8": {
"1": -88742170,
"2": 1257275390
},
"10": 1
},
{
"1": 2768,
"3": "TG",
"4": "Togo",
"8": {
"1": 86195430,
"2": 8247820
},
"10": 1
},
{
"1": 2772,
"3": "TK",
"4": "Tokelau",
"8": {
"1": -92002000,
"2": -1718484000
},
"10": 1
},
{
"1": 2776,
"3": "TO",
"4": "Tonga",
"8": {
"1": -211789860,
"2": -1751982420
},
"10": 1
},
{
"1": 2780,
"3": "TT",
"4": "Trinidad and Tobago",
"8": {
"1": 106918030,
"2": -612225030
},
"10": 1
},
{
"1": 2788,
"3": "TN",
"4": "Tunisia",
"8": {
"1": 338869170,
"2": 95374990
},
"10": 1
},
{
"1": 2792,
"3": "TR",
"4": "Turkiye",
"5": "Türkiye",
"8": {
"1": 389637450,
"2": 352433220
},
"10": 1
},
{
"1": 2795,
"3": "TM",
"4": "Turkmenistan",
"8": {
"1": 389697190,
"2": 595562780
},
"10": 1
},
{
"1": 2798,
"3": "TV",
"4": "Tuvalu",
"8": {
"1": -71095350,
"2": 1776493300
},
"10": 1
},
{
"1": 2800,
"3": "UG",
"4": "Uganda",
"8": {
"1": 13733330,
"2": 322902750
},
"10": 1
},
{
"1": 2804,
"3": "UA",
"4": "Ukraine",
"8": {
"1": 483794330,
"2": 311655800
},
"10": 1
},
{
"1": 2784,
"3": "AE",
"4": "United Arab Emirates",
"8": {
"1": 234240760,
"2": 538478180
},
"10": 1
},
{
"1": 2826,
"3": "GB",
"4": "United Kingdom",
"8": {
"1": 553780510,
"2": -34359730
},
"10": 1
},
{
"1": 2840,
"3": "US",
"4": "United States",
"5": "United States",
"8": {
"1": 387945952,
"2": -1065348379
},
"10": 1
},
{
"1": 2858,
"3": "UY",
"4": "Uruguay",
"8": {
"1": -325227790,
"2": -557658350
},
"10": 1
},
{
"1": 2860,
"3": "UZ",
"4": "Uzbekistan",
"8": {
"1": 413774910,
"2": 645852620
},
"10": 1
},
{
"1": 2548,
"3": "VU",
"4": "Vanuatu",
"5": "Vanuatu",
"8": {
"1": -153767060,
"2": 1669591580
},
"10": 1
},
{
"1": 2336,
"3": "VA",
"4": "Vatican City",
"5": "Vatican City",
"8": {
"1": 419029160,
"2": 124533890
},
"10": 1
},
{
"1": 2862,
"3": "VE",
"4": "Venezuela",
"8": {
"1": 64237500,
"2": -665897300
},
"10": 1
},
{
"1": 2704,
"3": "VN",
"4": "Vietnam",
"8": {
"1": 140583240,
"2": 1082771990
},
"10": 1
},
{
"1": 2887,
"3": "YE",
"4": "Yemen",
"8": {
"1": 155527270,
"2": 485163880
},
"10": 1
},
{
"1": 2894,
"3": "ZM",
"4": "Zambia",
"8": {
"1": -131338970,
"2": 278493320
},
"10": 1
},
{
"1": 2716,
"3": "ZW",
"4": "Zimbabwe",
"8": {
"1": -190154380,
"2": 291548570
},
"10": 1
},
{
"1": 2060,
"3": "BM",
"4": "Bermuda",
"8": {
"1": 323078000,
"2": -647505000
},
"10": 2
},
{
"1": 2074,
"3": "BV",
"4": "Bouvet Island",
"8": {
"1": -544231990,
"2": 34131940
},
"10": 2
},
{
"1": 2086,
"3": "IO",
"4": "British Indian Ocean Territory",
"8": {
"1": -63431940,
"2": 718765190
},
"10": 2
},
{
"1": 2092,
"3": "VG",
"4": "British Virgin Islands",
"8": {
"1": 184206950,
"2": -646399680
},
"10": 2
},
{
"1": 20277,
"3": "IC",
"4": "Canary Islands",
"5": "Canary Islands",
"8": {
"1": 282915637,
"2": -166291304
},
"10": 5
},
{
"1": 2136,
"3": "KY",
"4": "Cayman Islands",
"8": {
"1": 193133000,
"2": -812546000
},
"10": 2
},
{
"1": 2158,
"3": "TW",
"4": "Taiwan",
"8": {
"1": 236978100,
"2": 1209605150
},
"10": 2
},
{
"1": 2175,
"3": "YT",
"4": "Mayotte",
"8": {
"1": -128275000,
"2": 451662440
},
"10": 2
},
{
"1": 2234,
"3": "FO",
"4": "Faroe Islands",
"8": {
"1": 618926350,
"2": -69118060
},
"10": 2
},
{
"1": 2238,
"3": "FK",
"4": "Falkland Islands (Islas Malvinas)",
"8": {
"1": -517962530,
"2": -595236130
},
"10": 2
},
{
"1": 2254,
"3": "GF",
"4": "French Guiana",
"8": {
"1": 39338890,
"2": -531257820
},
"10": 2
},
{
"1": 2275,
"3": "PS",
"4": "Palestine",
"5": "Palestine",
"8": {
"1": 319521620,
"2": 352331540
},
"10": 2
},
{
"1": 2292,
"3": "GI",
"4": "Gibraltar",
"8": {
"1": 361407510,
"2": -53535850
},
"10": 2
},
{
"1": 2304,
"3": "GL",
"4": "Greenland",
"8": {
"1": 717069360,
"2": -426043030
},
"10": 2
},
{
"1": 2312,
"3": "GP",
"4": "Guadeloupe",
"8": {
"1": 162650000,
"2": -615510000
},
"10": 2
},
{
"1": 2344,
"3": "HK",
"4": "Hong Kong",
"8": {
"1": 223193039,
"2": 1141693611
},
"10": 2
},
{
"1": 2833,
"3": "IM",
"4": "Isle of Man",
"8": {
"1": 542361070,
"2": -45480560
},
"10": 1
},
{
"1": 2446,
"3": "MO",
"4": "Macao",
"5": "Macao",
"8": {
"1": 221987450,
"2": 1135438730
},
"10": 2
},
{
"1": 2474,
"3": "MQ",
"4": "Martinique",
"8": {
"1": 146415280,
"2": -610241740
},
"10": 2
},
{
"1": 2500,
"3": "MS",
"4": "Montserrat",
"8": {
"1": 167424980,
"2": -621873660
},
"10": 2
},
{
"1": 2533,
"3": "AW",
"4": "Aruba",
"8": {
"1": 125211100,
"2": -699683380
},
"10": 2
},
{
"1": 2630,
"3": "PR",
"4": "Puerto Rico",
"8": {
"1": 182208330,
"2": -665901490
},
"10": 2
},
{
"1": 2638,
"3": "RE",
"4": "Reunion",
"5": "Réunion",
"8": {
"1": -211151410,
"2": 555363840
},
"10": 2
},
{
"1": 2660,
"3": "AI",
"4": "Anguilla",
"8": {
"1": 182205540,
"2": -630686150
},
"10": 2
},
{
"1": 2732,
"3": "EH",
"4": "Western Sahara",
"8": {
"1": 242155270,
"2": -128858340
},
"10": 2
},
{
"1": 2663,
"3": "MF",
"4": "Saint Martin",
"5": "St Martin",
"8": {
"1": 180825500,
"2": -630522510
},
"10": 1
},
{
"1": 2744,
"3": "SJ",
"4": "Svalbard and Jan Mayen",
"8": {
"1": 775536040,
"2": 236702720
},
"10": 2
},
{
"1": 2796,
"3": "TC",
"4": "Turks and Caicos Islands",
"8": {
"1": 216940250,
"2": -717979280
},
"10": 2
},
{
"1": 2581,
"3": "UM",
"4": "United States Minor Outlying Islands",
"8": {
"1": 192823192,
"2": 1666470470
},
"10": 1
},
{
"1": 2850,
"3": "VI",
"4": "U.S. Virgin Islands",
"5": "U.S. Virgin Islands",
"8": {
"1": 183357650,
"2": -648963350
},
"10": 2
},
{
"1": 2876,
"3": "WF",
"4": "Wallis and Futuna",
"8": {
"1": -142938000,
"2": -1781165000
},
"10": 1
}
]
}
}

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

{
"regions": {
"region": [
{
"1": 2008,
"3": "AL",
"4": "Albania",
"8": {
"1": 411533320,
"2": 201683310
},
"10": 1
},
{
"1": 2012,
"3": "DZ",
"4": "Algeria",
"8": {
"1": 280338860,
"2": 16596260
},
"10": 1
},
{
"1": 2016,
"3": "AS",
"4": "American Samoa",
"8": {
"1": -142709720,
"2": -1701322170
},
"10": 1
},
{
"1": 2020,
"3": "AD",
"4": "Andorra",
"8": {
"1": 425062850,
"2": 15218010
},
"10": 1
},
{
"1": 2024,
"3": "AO",
"4": "Angola",
"8": {
"1": -112026920,
"2": 178738870
},
"10": 1
},
{
"1": 2010,
"3": "AQ",
"4": "Antarctica",
"8": {
"1": -752509730,
"2": -713890
},
"10": 1
},
{
"1": 2028,
"3": "AG",
"4": "Antigua and Barbuda",
"8": {
"1": 170608160,
"2": -617964280
},
"10": 1
},
{
"1": 2032,
"3": "AR",
"4": "Argentina",
"8": {
"1": -384160970,
"2": -636166720
},
"10": 1
},
{
"1": 2051,
"3": "AM",
"4": "Armenia",
"8": {
"1": 400690990,
"2": 450381890
},
"10": 1
},
{
"1": 2036,
"3": "AU",
"4": "Australia",
"8": {
"1": -252743980,
"2": 1337751360
},
"10": 1
},
{
"1": 2040,
"3": "AT",
"4": "Austria",
"5": "Austria",
"8": {
"1": 475162310,
"2": 145500720
},
"10": 1
},
{
"1": 2031,
"3": "AZ",
"4": "Azerbaijan",
"8": {
"1": 401431050,
"2": 475769270
},
"10": 1
},
{
"1": 2048,
"3": "BH",
"4": "Bahrain",
"8": {
"1": 260667000,
"2": 505577000
},
"10": 1
},
{
"1": 2050,
"3": "BD",
"4": "Bangladesh",
"8": {
"1": 236849940,
"2": 903563310
},
"10": 1
},
{
"1": 2052,
"3": "BB",
"4": "Barbados",
"8": {
"1": 131938870,
"2": -595431980
},
"10": 1
},
{
"1": 2112,
"3": "BY",
"4": "Belarus",
"8": {
"1": 537098070,
"2": 279533890
},
"10": 1
},
{
"1": 2056,
"3": "BE",
"4": "Belgium",
"5": "Belgium",
"8": {
"1": 505038870,
"2": 44699360
},
"10": 1
},
{
"1": 2084,
"3": "BZ",
"4": "Belize",
"8": {
"1": 171898770,
"2": -884976500
},
"10": 1
},
{
"1": 2204,
"3": "BJ",
"4": "Benin",
"8": {
"1": 93076900,
"2": 23158340
},
"10": 1
},
{
"1": 2064,
"3": "BT",
"4": "Bhutan",
"8": {
"1": 275141620,
"2": 904336010
},
"10": 1
},
{
"1": 2068,
"3": "BO",
"4": "Bolivia",
"8": {
"1": -162901540,
"2": -635886530
},
"10": 1
},
{
"1": 2070,
"3": "BA",
"4": "Bosnia and Herzegovina",
"8": {
"1": 439158860,
"2": 176790760
},
"10": 1
},
{
"1": 2072,
"3": "BW",
"4": "Botswana",
"8": {
"1": -223284740,
"2": 246848660
},
"10": 1
},
{
"1": 2076,
"3": "BR",
"4": "Brazil",
"8": {
"1": -142350040,
"2": -519252800
},
"10": 1
},
{
"1": 2096,
"3": "BN",
"4": "Brunei",
"8": {
"1": 45352770,
"2": 1147276690
},
"10": 1
},
{
"1": 2100,
"3": "BG",
"4": "Bulgaria",
"8": {
"1": 427338830,
"2": 254858300
},
"10": 1
},
{
"1": 2854,
"3": "BF",
"4": "Burkina Faso",
"8": {
"1": 122383330,
"2": -15615930
},
"10": 1
},
{
"1": 2108,
"3": "BI",
"4": "Burundi",
"8": {
"1": -33730560,
"2": 299188860
},
"10": 1
},
{
"1": 2116,
"3": "KH",
"4": "Cambodia",
"8": {
"1": 125656790,
"2": 1049909630
},
"10": 1
},
{
"1": 2120,
"3": "CM",
"4": "Cameroon",
"8": {
"1": 73697220,
"2": 123547220
},
"10": 1
},
{
"1": 2124,
"3": "CA",
"4": "Canada",
"5": "Canada",
"8": {
"1": 561303660,
"2": -1063467710
},
"10": 1
},
{
"1": 2132,
"3": "CV",
"4": "Cabo Verde",
"5": "Cabo Verde",
"8": {
"1": 165388000,
"2": -230418000
},
"10": 1
},
{
"1": 2535,
"3": "BQ",
"4": "Caribbean Netherlands",
"8": {
"1": 121783611,
"2": -682385339
},
"10": 1
},
{
"1": 2140,
"3": "CF",
"4": "Central African Republic",
"8": {
"1": 66111110,
"2": 209394440
},
"10": 1
},
{
"1": 2148,
"3": "TD",
"4": "Chad",
"8": {
"1": 154541660,
"2": 187322070
},
"10": 1
},
{
"1": 2152,
"3": "CL",
"4": "Chile",
"8": {
"1": -356751470,
"2": -715429690
},
"10": 1
},
{
"1": 2156,
"3": "CN",
"4": "China",
"8": {
"1": 358616600,
"2": 1041953970
},
"10": 1
},
{
"1": 2162,
"3": "CX",
"4": "Christmas Island",
"8": {
"1": -104475250,
"2": 1056904490
},
"10": 1
},
{
"1": 2166,
"3": "CC",
"4": "Cocos (Keeling) Islands",
"8": {
"1": -121641650,
"2": 968709560
},
"10": 1
},
{
"1": 2170,
"3": "CO",
"4": "Colombia",
"8": {
"1": 45708680,
"2": -742973330
},
"10": 1
},
{
"1": 2174,
"3": "KM",
"4": "Comoros",
"8": {
"1": -116455000,
"2": 433333000
},
"10": 1
},
{
"1": 2184,
"3": "CK",
"4": "Cook Islands",
"8": {
"1": -212367360,
"2": -1597776710
},
"10": 1
},
{
"1": 2188,
"3": "CR",
"4": "Costa Rica",
"8": {
"1": 97489170,
"2": -837534280
},
"10": 1
},
{
"1": 2384,
"3": "CI",
"4": "Cote d'Ivoire",
"8": {
"1": 75399890,
"2": -55470800
},
"10": 1
},
{
"1": 2191,
"3": "HR",
"4": "Croatia",
"8": {
"1": 451000000,
"2": 152000000
},
"10": 1
},
{
"1": 2531,
"3": "CW",
"4": "Curacao",
"8": {
"1": 121695700,
"2": -689900200
},
"10": 1
},
{
"1": 2196,
"3": "CY",
"4": "Cyprus",
"8": {
"1": 351264130,
"2": 334298590
},
"10": 1
},
{
"1": 2203,
"3": "CZ",
"4": "Czechia",
"5": "Czechia",
"8": {
"1": 498174920,
"2": 154729620
},
"10": 1
},
{
"1": 2180,
"3": "CD",
"4": "Democratic Republic of the Congo",
"8": {
"1": -40383330,
"2": 217586640
},
"10": 1
},
{
"1": 2208,
"3": "DK",
"4": "Denmark",
"5": "Denmark",
"8": {
"1": 562639200,
"2": 95017850
},
"10": 1
},
{
"1": 2262,
"3": "DJ",
"4": "Djibouti",
"8": {
"1": 118251380,
"2": 425902750
},
"10": 1
},
{
"1": 2212,
"3": "DM",
"4": "Dominica",
"8": {
"1": 154149990,
"2": -613709760
},
"10": 1
},
{
"1": 2214,
"3": "DO",
"4": "Dominican Republic",
"8": {
"1": 187356930,
"2": -701626510
},
"10": 1
},
{
"1": 2218,
"3": "EC",
"4": "Ecuador",
"8": {
"1": -18312390,
"2": -781834060
},
"10": 1
},
{
"1": 2818,
"3": "EG",
"4": "Egypt",
"8": {
"1": 268205530,
"2": 308024980
},
"10": 1
},
{
"1": 2222,
"3": "SV",
"4": "El Salvador",
"8": {
"1": 137941850,
"2": -888965300
},
"10": 1
},
{
"1": 2226,
"3": "GQ",
"4": "Equatorial Guinea",
"8": {
"1": 16508010,
"2": 102678950
},
"10": 1
},
{
"1": 2232,
"3": "ER",
"4": "Eritrea",
"8": {
"1": 151793840,
"2": 397823340
},
"10": 1
},
{
"1": 2233,
"3": "EE",
"4": "Estonia",
"8": {
"1": 585952720,
"2": 250136070
},
"10": 1
},
{
"1": 2748,
"3": "SZ",
"4": "Eswatini",
"5": "Eswatini",
"8": {
"1": -265225030,
"2": 314658660
},
"10": 1
},
{
"1": 2231,
"3": "ET",
"4": "Ethiopia",
"8": {
"1": 91450000,
"2": 404896730
},
"10": 1
},
{
"1": 2583,
"3": "FM",
"4": "Micronesia",
"8": {
"1": 74255540,
"2": 1505508120
},
"10": 1
},
{
"1": 2242,
"3": "FJ",
"4": "Fiji",
"8": {
"1": -177133710,
"2": 1780650320
},
"10": 1
},
{
"1": 2246,
"3": "FI",
"4": "Finland",
"8": {
"1": 619241100,
"2": 257481510
},
"10": 1
},
{
"1": 2250,
"3": "FR",
"4": "France",
"8": {
"1": 462276380,
"2": 22137490
},
"10": 1
},
{
"1": 2258,
"3": "PF",
"4": "French Polynesia",
"8": {
"1": -176797420,
"2": -1494068430
},
"10": 1
},
{
"1": 2260,
"3": "TF",
"4": "French Southern and Antarctic Lands",
"8": {
"1": -492803660,
"2": 693485570
},
"10": 1
},
{
"1": 2266,
"3": "GA",
"4": "Gabon",
"8": {
"1": -8036890,
"2": 116094440
},
"10": 1
},
{
"1": 2268,
"3": "GE",
"4": "Georgia",
"8": {
"1": 423154070,
"2": 433568920
},
"10": 1
},
{
"1": 2276,
"3": "DE",
"4": "Germany",
"5": "Germany",
"8": {
"1": 511656910,
"2": 104515260
},
"10": 1
},
{
"1": 2288,
"3": "GH",
"4": "Ghana",
"8": {
"1": 79465270,
"2": -10231940
},
"10": 1
},
{
"1": 2300,
"3": "GR",
"4": "Greece",
"8": {
"1": 390742080,
"2": 218243120
},
"10": 1
},
{
"1": 2308,
"3": "GD",
"4": "Grenada",
"8": {
"1": 121165000,
"2": -616790000
},
"10": 1
},
{
"1": 2316,
"3": "GU",
"4": "Guam",
"8": {
"1": 133823791,
"2": 1446972774
},
"10": 1
},
{
"1": 2320,
"3": "GT",
"4": "Guatemala",
"8": {
"1": 157834710,
"2": -902307590
},
"10": 1
},
{
"1": 2831,
"3": "GG",
"4": "Guernsey",
"8": {
"1": 494481808,
"2": -25894685
},
"10": 1
},
{
"1": 2324,
"3": "GN",
"4": "Guinea",
"8": {
"1": 99455870,
"2": -96966450
},
"10": 1
},
{
"1": 2624,
"3": "GW",
"4": "Guinea-Bissau",
"8": {
"1": 118037490,
"2": -151804130
},
"10": 1
},
{
"1": 2328,
"3": "GY",
"4": "Guyana",
"8": {
"1": 48604160,
"2": -589301800
},
"10": 1
},
{
"1": 2332,
"3": "HT",
"4": "Haiti",
"8": {
"1": 189711870,
"2": -722852150
},
"10": 1
},
{
"1": 2334,
"3": "HM",
"4": "Heard Island and McDonald Islands",
"8": {
"1": -530818100,
"2": 735041580
},
"10": 1
},
{
"1": 2340,
"3": "HN",
"4": "Honduras",
"8": {
"1": 151999990,
"2": -862419050
},
"10": 1
},
{
"1": 2348,
"3": "HU",
"4": "Hungary",
"8": {
"1": 471624940,
"2": 195033040
},
"10": 1
},
{
"1": 2352,
"3": "IS",
"4": "Iceland",
"8": {
"1": 649630510,
"2": -190208350
},
"10": 1
},
{
"1": 2356,
"3": "IN",
"4": "India",
"8": {
"1": 205936840,
"2": 789628800
},
"10": 1
},
{
"1": 2360,
"3": "ID",
"4": "Indonesia",
"8": {
"1": -7892750,
"2": 1139213270
},
"10": 1
},
{
"1": 2368,
"3": "IQ",
"4": "Iraq",
"8": {
"1": 332231910,
"2": 436792910
},
"10": 1
},
{
"1": 2372,
"3": "IE",
"4": "Ireland",
"8": {
"1": 534129100,
"2": -82438900
},
"10": 1
},
{
"1": 2376,
"3": "IL",
"4": "Israel",
"8": {
"1": 310460510,
"2": 348516120
},
"10": 1
},
{
"1": 2380,
"3": "IT",
"4": "Italy",
"8": {
"1": 418719400,
"2": 125673800
},
"10": 1
},
{
"1": 2388,
"3": "JM",
"4": "Jamaica",
"8": {
"1": 181095810,
"2": -772975080
},
"10": 1
},
{
"1": 2392,
"3": "JP",
"4": "Japan",
"8": {
"1": 362048240,
"2": 1382529240
},
"10": 1
},
{
"1": 2832,
"3": "JE",
"4": "Jersey",
"8": {
"1": 492137711,
"2": -21357662
},
"10": 1
},
{
"1": 2400,
"3": "JO",
"4": "Jordan",
"8": {
"1": 305851640,
"2": 362384140
},
"10": 1
},
{
"1": 2398,
"3": "KZ",
"4": "Kazakhstan",
"8": {
"1": 480195730,
"2": 669236840
},
"10": 1
},
{
"1": 2404,
"3": "KE",
"4": "Kenya",
"8": {
"1": -235590,
"2": 379061930
},
"10": 1
},
{
"1": 2296,
"3": "KI",
"4": "Kiribati",
"8": {
"1": 14421300,
"2": 1729829763
},
"10": 1
},
{
"1": 2414,
"3": "KW",
"4": "Kuwait",
"8": {
"1": 293116600,
"2": 474817660
},
"10": 1
},
{
"1": 2417,
"3": "KG",
"4": "Kyrgyzstan",
"8": {
"1": 412043800,
"2": 747660980
},
"10": 1
},
{
"1": 2418,
"3": "LA",
"4": "Laos",
"8": {
"1": 198562700,
"2": 1024954960
},
"10": 1
},
{
"1": 2428,
"3": "LV",
"4": "Latvia",
"8": {
"1": 568796350,
"2": 246031890
},
"10": 1
},
{
"1": 2422,
"3": "LB",
"4": "Lebanon",
"8": {
"1": 338547210,
"2": 358622850
},
"10": 1
},
{
"1": 2426,
"3": "LS",
"4": "Lesotho",
"8": {
"1": -296099880,
"2": 282336080
},
"10": 1
},
{
"1": 2430,
"3": "LR",
"4": "Liberia",
"8": {
"1": 64280550,
"2": -94294990
},
"10": 1
},
{
"1": 2434,
"3": "LY",
"4": "Libya",
"8": {
"1": 263351000,
"2": 172283310
},
"10": 1
},
{
"1": 2438,
"3": "LI",
"4": "Liechtenstein",
"8": {
"1": 471410392,
"2": 95209350
},
"10": 1
},
{
"1": 2440,
"3": "LT",
"4": "Lithuania",
"8": {
"1": 551694380,
"2": 238812750
},
"10": 1
},
{
"1": 2442,
"3": "LU",
"4": "Luxembourg",
"5": "Luxembourg",
"8": {
"1": 498152730,
"2": 61295830
},
"10": 1
},
{
"1": 2450,
"3": "MG",
"4": "Madagascar",
"8": {
"1": -187669470,
"2": 468691070
},
"10": 1
},
{
"1": 2454,
"3": "MW",
"4": "Malawi",
"8": {
"1": -132543080,
"2": 343015250
},
"10": 1
},
{
"1": 2458,
"3": "MY",
"4": "Malaysia",
"8": {
"1": 42104840,
"2": 1019757660
},
"10": 1
},
{
"1": 2462,
"3": "MV",
"4": "Maldives",
"8": {
"1": 32027780,
"2": 732206800
},
"10": 1
},
{
"1": 2470,
"3": "MT",
"4": "Malta",
"8": {
"1": 359374960,
"2": 143754160
},
"10": 1
},
{
"1": 2466,
"3": "ML",
"4": "Mali",
"8": {
"1": 175706920,
"2": -39961660
},
"10": 1
},
{
"1": 2584,
"3": "MH",
"4": "Marshall Islands",
"8": {
"1": 71314740,
"2": 1711844780
},
"10": 1
},
{
"1": 2478,
"3": "MR",
"4": "Mauritania",
"8": {
"1": 210078900,
"2": -109408350
},
"10": 1
},
{
"1": 2480,
"3": "MU",
"4": "Mauritius",
"8": {
"1": -203484040,
"2": 575521520
},
"10": 1
},
{
"1": 2484,
"3": "MX",
"4": "Mexico",
"8": {
"1": 236345010,
"2": -1025527840
},
"10": 1
},
{
"1": 2498,
"3": "MD",
"4": "Moldova",
"8": {
"1": 474116310,
"2": 283698850
},
"10": 1
},
{
"1": 2492,
"3": "MC",
"4": "Monaco",
"8": {
"1": 437384176,
"2": 74246158
},
"10": 1
},
{
"1": 2496,
"3": "MN",
"4": "Mongolia",
"8": {
"1": 468624960,
"2": 1038466560
},
"10": 1
},
{
"1": 2499,
"3": "ME",
"4": "Montenegro",
"8": {
"1": 427086780,
"2": 193743900
},
"10": 1
},
{
"1": 2504,
"3": "MA",
"4": "Morocco",
"8": {
"1": 317917020,
"2": -70926200
},
"10": 1
},
{
"1": 2508,
"3": "MZ",
"4": "Mozambique",
"8": {
"1": -186656950,
"2": 355295620
},
"10": 1
},
{
"1": 2104,
"3": "MM",
"4": "Myanmar (Burma)",
"8": {
"1": 219162210,
"2": 959559740
},
"10": 1
},
{
"1": 2516,
"3": "NA",
"4": "Namibia",
"8": {
"1": -229576400,
"2": 184904100
},
"10": 1
},
{
"1": 2520,
"3": "NR",
"4": "Nauru",
"8": {
"1": -5227780,
"2": 1669315030
},
"10": 1
},
{
"1": 2524,
"3": "NP",
"4": "Nepal",
"8": {
"1": 283948570,
"2": 841240080
},
"10": 1
},
{
"1": 2528,
"3": "NL",
"4": "Netherlands",
"5": "Netherlands",
"8": {
"1": 521326330,
"2": 52912660
},
"10": 1
},
{
"1": 2540,
"3": "NC",
"4": "New Caledonia",
"8": {
"1": -209043050,
"2": 1656180420
},
"10": 1
},
{
"1": 2554,
"3": "NZ",
"4": "New Zealand",
"8": {
"1": -409005570,
"2": 1748859710
},
"10": 1
},
{
"1": 2558,
"3": "NI",
"4": "Nicaragua",
"8": {
"1": 128654160,
"2": -852072290
},
"10": 1
},
{
"1": 2562,
"3": "NE",
"4": "Niger",
"8": {
"1": 176077890,
"2": 80816660
},
"10": 1
},
{
"1": 2566,
"3": "NG",
"4": "Nigeria",
"8": {
"1": 90819990,
"2": 86752770
},
"10": 1
},
{
"1": 2570,
"3": "NU",
"4": "Niue",
"8": {
"1": -190544450,
"2": -1698672330
},
"10": 1
},
{
"1": 2574,
"3": "NF",
"4": "Norfolk Island",
"8": {
"1": -290408350,
"2": 1679547120
},
"10": 1
},
{
"1": 2807,
"3": "MK",
"4": "North Macedonia",
"5": "North Macedonia",
"8": {
"1": 416086350,
"2": 217452750
},
"10": 1
},
{
"1": 2580,
"3": "MP",
"4": "Northern Mariana Islands",
"8": {
"1": 150979000,
"2": 1456739000
},
"10": 1
},
{
"1": 2578,
"3": "NO",
"4": "Norway",
"8": {
"1": 604720240,
"2": 84689460
},
"10": 1
},
{
"1": 2512,
"3": "OM",
"4": "Oman",
"8": {
"1": 214735329,
"2": 559754130
},
"10": 1
},
{
"1": 2586,
"3": "PK",
"4": "Pakistan",
"8": {
"1": 303753210,
"2": 693451160
},
"10": 1
},
{
"1": 2585,
"3": "PW",
"4": "Palau",
"8": {
"1": 75149800,
"2": 1345825200
},
"10": 1
},
{
"1": 2591,
"3": "PA",
"4": "Panama",
"8": {
"1": 85379810,
"2": -807821270
},
"10": 1
},
{
"1": 2598,
"3": "PG",
"4": "Papua New Guinea",
"8": {
"1": -63149930,
"2": 1439555500
},
"10": 1
},
{
"1": 2600,
"3": "PY",
"4": "Paraguay",
"8": {
"1": -234425030,
"2": -584438320
},
"10": 1
},
{
"1": 2604,
"3": "PE",
"4": "Peru",
"8": {
"1": -91899670,
"2": -750151520
},
"10": 1
},
{
"1": 2608,
"3": "PH",
"4": "Philippines",
"8": {
"1": 128797210,
"2": 1217740170
},
"10": 1
},
{
"1": 2612,
"3": "PN",
"4": "Pitcairn Islands",
"8": {
"1": -243767537,
"2": -1283242376
},
"10": 1
},
{
"1": 2616,
"3": "PL",
"4": "Poland",
"8": {
"1": 519194380,
"2": 191451360
},
"10": 1
},
{
"1": 2620,
"3": "PT",
"4": "Portugal",
"8": {
"1": 393998720,
"2": -82244540
},
"10": 1
},
{
"1": 2634,
"3": "QA",
"4": "Qatar",
"8": {
"1": 253548260,
"2": 511838840
},
"10": 1
},
{
"1": 2178,
"3": "CG",
"4": "Republic of the Congo",
"8": {
"1": -2280210,
"2": 158276590
},
"10": 1
},
{
"1": 2642,
"3": "RO",
"4": "Romania",
"8": {
"1": 459431610,
"2": 249667600
},
"10": 1
},
{
"1": 2646,
"3": "RW",
"4": "Rwanda",
"8": {
"1": -19402780,
"2": 298738880
},
"10": 1
},
{
"1": 2654,
"3": "SH",
"4": "Saint Helena, Ascension and Tristan da Cunha",
"5": "St Helena, Ascension and Tristan da Cunha",
"8": {
"1": -159583317,
"2": -57019989
},
"10": 1
},
{
"1": 2659,
"3": "KN",
"4": "Saint Kitts and Nevis",
"5": "St Kitts & Nevis",
"8": {
"1": 173578220,
"2": -627829980
},
"10": 1
},
{
"1": 2662,
"3": "LC",
"4": "Saint Lucia",
"5": "St Lucia",
"8": {
"1": 139094440,
"2": -609788930
},
"10": 1
},
{
"1": 2666,
"3": "PM",
"4": "Saint Pierre and Miquelon",
"5": "St Pierre and Miquelon",
"8": {
"1": 468852000,
"2": -563159000
},
"10": 1
},
{
"1": 2670,
"3": "VC",
"4": "Saint Vincent and the Grenadines",
"5": "St Vincent and the Grenadines",
"8": {
"1": 129843050,
"2": -612872280
},
"10": 1
},
{
"1": 2882,
"3": "WS",
"4": "Samoa",
"8": {
"1": -137590290,
"2": -1721046290
},
"10": 1
},
{
"1": 2674,
"3": "SM",
"4": "San Marino",
"8": {
"1": 439423600,
"2": 124577770
},
"10": 1
},
{
"1": 2678,
"3": "ST",
"4": "Sao Tome and Principe",
"8": {
"1": 1863600,
"2": 66130810
},
"10": 1
},
{
"1": 2682,
"3": "SA",
"4": "Saudi Arabia",
"8": {
"1": 238859420,
"2": 450791620
},
"10": 1
},
{
"1": 2686,
"3": "SN",
"4": "Senegal",
"8": {
"1": 144974010,
"2": -144523620
},
"10": 1
},
{
"1": 2690,
"3": "SC",
"4": "Seychelles",
"8": {
"1": -46795740,
"2": 554919770
},
"10": 1
},
{
"1": 2694,
"3": "SL",
"4": "Sierra Leone",
"8": {
"1": 84605550,
"2": -117798890
},
"10": 1
},
{
"1": 2702,
"3": "SG",
"4": "Singapore",
"8": {
"1": 13520830,
"2": 1038198360
},
"10": 1
},
{
"1": 2534,
"3": "SX",
"4": "Sint Maarten",
"8": {
"1": 180424800,
"2": -630548300
},
"10": 1
},
{
"1": 2703,
"3": "SK",
"4": "Slovakia",
"5": "Slovakia",
"8": {
"1": 486690260,
"2": 196990240
},
"10": 1
},
{
"1": 2705,
"3": "SI",
"4": "Slovenia",
"8": {
"1": 461512410,
"2": 149954630
},
"10": 1
},
{
"1": 2090,
"3": "SB",
"4": "Solomon Islands",
"8": {
"1": -96457100,
"2": 1601561940
},
"10": 1
},
{
"1": 2706,
"3": "SO",
"4": "Somalia",
"8": {
"1": 51521490,
"2": 461996160
},
"10": 1
},
{
"1": 2710,
"3": "ZA",
"4": "South Africa",
"8": {
"1": -305594820,
"2": 229375060
},
"10": 1
},
{
"1": 2239,
"3": "GS",
"4": "South Georgia and the South Sandwich Islands",
"8": {
"1": -544295790,
"2": -365879090
},
"10": 1
},
{
"1": 2410,
"3": "KR",
"4": "South Korea",
"8": {
"1": 359077570,
"2": 1277669220
},
"10": 1
},
{
"1": 2724,
"3": "ES",
"4": "Spain",
"8": {
"1": 404636670,
"2": -37492200
},
"10": 1
},
{
"1": 2144,
"3": "LK",
"4": "Sri Lanka",
"8": {
"1": 78730540,
"2": 807717970
},
"10": 1
},
{
"1": 2740,
"3": "SR",
"4": "Suriname",
"8": {
"1": 39193050,
"2": -560277830
},
"10": 1
},
{
"1": 2756,
"3": "CH",
"4": "Switzerland",
"8": {
"1": 468181880,
"2": 82275120
},
"10": 1
},
{
"1": 2752,
"3": "SE",
"4": "Sweden",
"8": {
"1": 601281610,
"2": 186435010
},
"10": 1
},
{
"1": 2762,
"3": "TJ",
"4": "Tajikistan",
"8": {
"1": 388610340,
"2": 712760930
},
"10": 1
},
{
"1": 2834,
"3": "TZ",
"4": "Tanzania",
"8": {
"1": -63690280,
"2": 348888220
},
"10": 1
},
{
"1": 2764,
"3": "TH",
"4": "Thailand",
"8": {
"1": 158700320,
"2": 1009925410
},
"10": 1
},
{
"1": 2044,
"3": "BS",
"4": "The Bahamas",
"8": {
"1": 250342800,
"2": -773962800
},
"10": 1
},
{
"1": 2270,
"3": "GM",
"4": "The Gambia",
"8": {
"1": 134431820,
"2": -153101390
},
"10": 1
},
{
"1": 2626,
"3": "TL",
"4": "Timor-Leste",
"8": {
"1": -88742170,
"2": 1257275390
},
"10": 1
},
{
"1": 2768,
"3": "TG",
"4": "Togo",
"8": {
"1": 86195430,
"2": 8247820
},
"10": 1
},
{
"1": 2772,
"3": "TK",
"4": "Tokelau",
"8": {
"1": -92002000,
"2": -1718484000
},
"10": 1
},
{
"1": 2776,
"3": "TO",
"4": "Tonga",
"8": {
"1": -211789860,
"2": -1751982420
},
"10": 1
},
{
"1": 2780,
"3": "TT",
"4": "Trinidad and Tobago",
"8": {
"1": 106918030,
"2": -612225030
},
"10": 1
},
{
"1": 2788,
"3": "TN",
"4": "Tunisia",
"8": {
"1": 338869170,
"2": 95374990
},
"10": 1
},
{
"1": 2792,
"3": "TR",
"4": "Turkiye",
"5": "Türkiye",
"8": {
"1": 389637450,
"2": 352433220
},
"10": 1
},
{
"1": 2795,
"3": "TM",
"4": "Turkmenistan",
"8": {
"1": 389697190,
"2": 595562780
},
"10": 1
},
{
"1": 2798,
"3": "TV",
"4": "Tuvalu",
"8": {
"1": -71095350,
"2": 1776493300
},
"10": 1
},
{
"1": 2800,
"3": "UG",
"4": "Uganda",
"8": {
"1": 13733330,
"2": 322902750
},
"10": 1
},
{
"1": 2804,
"3": "UA",
"4": "Ukraine",
"8": {
"1": 483794330,
"2": 311655800
},
"10": 1
},
{
"1": 2784,
"3": "AE",
"4": "United Arab Emirates",
"8": {
"1": 234240760,
"2": 538478180
},
"10": 1
},
{
"1": 2826,
"3": "GB",
"4": "United Kingdom",
"8": {
"1": 553780510,
"2": -34359730
},
"10": 1
},
{
"1": 2840,
"3": "US",
"4": "United States",
"5": "United States",
"8": {
"1": 387945952,
"2": -1065348379
},
"10": 1
},
{
"1": 2858,
"3": "UY",
"4": "Uruguay",
"8": {
"1": -325227790,
"2": -557658350
},
"10": 1
},
{
"1": 2860,
"3": "UZ",
"4": "Uzbekistan",
"8": {
"1": 413774910,
"2": 645852620
},
"10": 1
},
{
"1": 2548,
"3": "VU",
"4": "Vanuatu",
"5": "Vanuatu",
"8": {
"1": -153767060,
"2": 1669591580
},
"10": 1
},
{
"1": 2336,
"3": "VA",
"4": "Vatican City",
"5": "Vatican City",
"8": {
"1": 419029160,
"2": 124533890
},
"10": 1
},
{
"1": 2862,
"3": "VE",
"4": "Venezuela",
"8": {
"1": 64237500,
"2": -665897300
},
"10": 1
},
{
"1": 2704,
"3": "VN",
"4": "Vietnam",
"8": {
"1": 140583240,
"2": 1082771990
},
"10": 1
},
{
"1": 2887,
"3": "YE",
"4": "Yemen",
"8": {
"1": 155527270,
"2": 485163880
},
"10": 1
},
{
"1": 2894,
"3": "ZM",
"4": "Zambia",
"8": {
"1": -131338970,
"2": 278493320
},
"10": 1
},
{
"1": 2716,
"3": "ZW",
"4": "Zimbabwe",
"8": {
"1": -190154380,
"2": 291548570
},
"10": 1
},
{
"1": 2060,
"3": "BM",
"4": "Bermuda",
"8": {
"1": 323078000,
"2": -647505000
},
"10": 2
},
{
"1": 2074,
"3": "BV",
"4": "Bouvet Island",
"8": {
"1": -544231990,
"2": 34131940
},
"10": 2
},
{
"1": 2086,
"3": "IO",
"4": "British Indian Ocean Territory",
"8": {
"1": -63431940,
"2": 718765190
},
"10": 2
},
{
"1": 2092,
"3": "VG",
"4": "British Virgin Islands",
"8": {
"1": 184206950,
"2": -646399680
},
"10": 2
},
{
"1": 20277,
"3": "IC",
"4": "Canary Islands",
"5": "Canary Islands",
"8": {
"1": 282915637,
"2": -166291304
},
"10": 5
},
{
"1": 2136,
"3": "KY",
"4": "Cayman Islands",
"8": {
"1": 193133000,
"2": -812546000
},
"10": 2
},
{
"1": 2158,
"3": "TW",
"4": "Taiwan",
"8": {
"1": 236978100,
"2": 1209605150
},
"10": 2
},
{
"1": 2175,
"3": "YT",
"4": "Mayotte",
"8": {
"1": -128275000,
"2": 451662440
},
"10": 2
},
{
"1": 2234,
"3": "FO",
"4": "Faroe Islands",
"8": {
"1": 618926350,
"2": -69118060
},
"10": 2
},
{
"1": 2238,
"3": "FK",
"4": "Falkland Islands (Islas Malvinas)",
"8": {
"1": -517962530,
"2": -595236130
},
"10": 2
},
{
"1": 2254,
"3": "GF",
"4": "French Guiana",
"8": {
"1": 39338890,
"2": -531257820
},
"10": 2
},
{
"1": 2275,
"3": "PS",
"4": "Palestine",
"5": "Palestine",
"8": {
"1": 319521620,
"2": 352331540
},
"10": 2
},
{
"1": 2292,
"3": "GI",
"4": "Gibraltar",
"8": {
"1": 361407510,
"2": -53535850
},
"10": 2
},
{
"1": 2304,
"3": "GL",
"4": "Greenland",
"8": {
"1": 717069360,
"2": -426043030
},
"10": 2
},
{
"1": 2312,
"3": "GP",
"4": "Guadeloupe",
"8": {
"1": 162650000,
"2": -615510000
},
"10": 2
},
{
"1": 2344,
"3": "HK",
"4": "Hong Kong",
"8": {
"1": 223193039,
"2": 1141693611
},
"10": 2
},
{
"1": 2833,
"3": "IM",
"4": "Isle of Man",
"8": {
"1": 542361070,
"2": -45480560
},
"10": 1
},
{
"1": 2446,
"3": "MO",
"4": "Macao",
"5": "Macao",
"8": {
"1": 221987450,
"2": 1135438730
},
"10": 2
},
{
"1": 2474,
"3": "MQ",
"4": "Martinique",
"8": {
"1": 146415280,
"2": -610241740
},
"10": 2
},
{
"1": 2500,
"3": "MS",
"4": "Montserrat",
"8": {
"1": 167424980,
"2": -621873660
},
"10": 2
},
{
"1": 2533,
"3": "AW",
"4": "Aruba",
"8": {
"1": 125211100,
"2": -699683380
},
"10": 2
},
{
"1": 2630,
"3": "PR",
"4": "Puerto Rico",
"8": {
"1": 182208330,
"2": -665901490
},
"10": 2
},
{
"1": 2638,
"3": "RE",
"4": "Reunion",
"5": "Réunion",
"8": {
"1": -211151410,
"2": 555363840
},
"10": 2
},
{
"1": 2660,
"3": "AI",
"4": "Anguilla",
"8": {
"1": 182205540,
"2": -630686150
},
"10": 2
},
{
"1": 2732,
"3": "EH",
"4": "Western Sahara",
"8": {
"1": 242155270,
"2": -128858340
},
"10": 2
},
{
"1": 2663,
"3": "MF",
"4": "Saint Martin",
"5": "St Martin",
"8": {
"1": 180825500,
"2": -630522510
},
"10": 1
},
{
"1": 2744,
"3": "SJ",
"4": "Svalbard and Jan Mayen",
"8": {
"1": 775536040,
"2": 236702720
},
"10": 2
},
{
"1": 2796,
"3": "TC",
"4": "Turks and Caicos Islands",
"8": {
"1": 216940250,
"2": -717979280
},
"10": 2
},
{
"1": 2581,
"3": "UM",
"4": "United States Minor Outlying Islands",
"8": {
"1": 192823192,
"2": 1666470470
},
"10": 1
},
{
"1": 2850,
"3": "VI",
"4": "U.S. Virgin Islands",
"5": "U.S. Virgin Islands",
"8": {
"1": 183357650,
"2": -648963350
},
"10": 2
},
{
"1": 2876,
"3": "WF",
"4": "Wallis and Futuna",
"8": {
"1": -142938000,
"2": -1781165000
},
"10": 1
}
]
}
}

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

# configurations
.idea
# crawlee and apify storage folders
apify_storage
crawlee_storage
storage
# installed files
node_modules
# git folder
.git

.editorconfig

root = true
[*]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf

.eslintrc

{
"extends": "@apify",
"root": true
}

.gitignore

# This file tells Git which files shouldn't be added to source control
.DS_Store
.idea
dist
node_modules
apify_storage
storage

package.json

{
"name": "crawlee-puppeteer-javascript",
"version": "0.0.1",
"type": "module",
"description": "This is an example of an Apify actor.",
"dependencies": {
"apify": "^3.2.6",
"crawlee": "^3.11.5",
"dayjs": "^1.11.13",
"puppeteer": "^24.4.0"
},
"devDependencies": {
"@apify/eslint-config": "^0.4.0",
"eslint": "^8.50.0"
},
"scripts": {
"start": "node src/main.js",
"test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
},
"author": "It's not you it's me",
"license": "ISC"
}

package0.json

{
"name": "crawlee-cheerio-javascript",
"version": "0.0.1",
"type": "module",
"description": "This is a boilerplate of an Apify actor.",
"engines": {
"node": ">=18.0.0"
},
"dependencies": {
"apify": "^3.3.2",
"crawlee": "^3.12.2",
"dayjs": "^1.11.13"
},
"devDependencies": {
"@apify/eslint-config": "^0.4.0",
"eslint": "^9.21.0"
},
"scripts": {
"start": "node src/main.js",
"lint": "eslint ./src --ext .js,.jsx",
"lint:fix": "eslint ./src --ext .js,.jsx --fix",
"test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
},
"author": "It's not you it's me",
"license": "ISC"
}

pnpm-lock.yaml

lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
apify:
specifier: ^3.3.2
version: 3.3.2
crawlee:
specifier: ^3.12.2
version: 3.12.2
devDependencies:
'@apify/eslint-config':
specifier: ^0.4.0
version: 0.4.0(eslint@9.21.0)
eslint:
specifier: ^9.21.0
version: 9.21.0
packages:
'@apify/consts@2.37.0':
resolution: {integrity: sha512-GCK7wZcUPnHMUpoxd1tgbDgojdgcdxpnaF8UX5h5/hq5ZPdlik7EP2CkU6MpRfYxYl8T5LOsANUJvdB6bGthKA==}
'@apify/datastructures@2.0.2':
resolution: {integrity: sha512-IN9A0s2SCHoZZE1tf4xKgk4fxHM5/0I/UrXhWbn/rSv7E5sA2o0NyHdwcMY2Go9f5qd+E7VAbX6WnESTE6GLeA==}
'@apify/eslint-config@0.4.0':
resolution: {integrity: sha512-cXYQUstZ5wjIQMX9HM9GOg8+s0lWp9xF7Zee8bCl5QAkNJs5gKtCsKStv7v6A2hexUZ+N5HAEN2MFex9IIw2/g==}
peerDependencies:
eslint: '*'
'@apify/input_secrets@1.1.65':
resolution: {integrity: sha512-1KGrkrG7nWWN0JFg1VxMKHJFjlEC21mncKkNV03QqQ1XeQg1h9hBoCM5yqWeBZt8AmAfJ8kju87ObukWD3ETbA==}
'@apify/log@2.5.13':
resolution: {integrity: sha512-gxvWyD9JWBkLoTX7UfQ4s0F32/UfF4T8TG4jAl2CE0vNKr0COOJFkLmmyWnTNSVDL+yGC+LZp3mtbPnB+l6Sog==}
'@apify/ps-tree@1.2.0':
resolution: {integrity: sha512-VHIswI7rD/R4bToeIDuJ9WJXt+qr5SdhfoZ9RzdjmCs9mgy7l0P4RugQEUCcU+WB4sfImbd4CKwzXcn0uYx1yw==}
engines: {node: '>= 0.10'}
hasBin: true
'@apify/pseudo_url@2.0.54':
resolution: {integrity: sha512-HYUQvTgFHxnPS3mOL/xDvNv9Thp4ahW4Dwgim6txtsHRLRNuRBmrRtPNBuYIbpIO9LUKVpboXuA6D9nQXtBAlg==}
'@apify/timeout@0.3.1':
resolution: {integrity: sha512-sLIuOqfySki/7AXiQ1yZoCI07vX6aYFLgP6YaJ8e8YLn8CFsRERma/Crxcz0zyCaxhc7C7EPgcs1O+p/djZchw==}
'@apify/utilities@2.13.1':
resolution: {integrity: sha512-czQz2oANACVuwE7KrJKB8LrbhvMZyB1bvwO9jTL2SCmKQHxzY34XLQnSfblq/qsLWrwKynKxWXSvAVRZH2oIlA==}
'@asamuzakjp/css-color@2.8.3':
resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
'@crawlee/basic@3.12.2':
resolution: {integrity: sha512-avSeHqjtvjtQoUgRqBc2HbSV4SijP1zvriLXNoz3V1lEQN63S6CTjQoHVrkG+EG7pD2+OeHILZUKAKgRQ2fSwg==}
engines: {node: '>=16.0.0'}
'@crawlee/browser-pool@3.12.2':
resolution: {integrity: sha512-R2LhLpaKpL1bbmC2EMZFsEOpN50MJBSPHqTuFYldC5PIAAF4PyWgKBc3jSf40866iupw9ZpWA0ckzL9PxFNAPw==}
engines: {node: '>=16.0.0'}
peerDependencies:
playwright: '*'
puppeteer: '*'
peerDependenciesMeta:
playwright:
optional: true
puppeteer:
optional: true
'@crawlee/browser@3.12.2':
resolution: {integrity: sha512-Y883TJa+T1kEA8zK2qLhn6qYmZsm9cSEoT4LdgVec4j9kPHbnmlSdLZ1Edk9axHz0LH6cfaR8u0MwAhwx64Z+w==}
engines: {node: '>=16.0.0'}
peerDependencies:
playwright: '*'
puppeteer: '*'
peerDependenciesMeta:
playwright:
optional: true
puppeteer:
optional: true
'@crawlee/cheerio@3.12.2':
resolution: {integrity: sha512-8pJ87szeA1Sm25VRvrKjof8SExdQyZ1rI7vyU295Lh5O3p8pLQG3ktqzCssu9ldXan027vuifIoP/qSz98ysCA==}
engines: {node: '>=16.0.0'}
'@crawlee/cli@3.12.2':
resolution: {integrity: sha512-d8LoB44kRPYKxm6uPqAmw6wEOAcWCRGG9kjUHP1ESFWgAnW+lPThWFpljqAfoTr21KQNIpdd27rnRhLzfSoo7Q==}
engines: {node: '>=16.0.0'}
hasBin: true
'@crawlee/core@3.12.2':
resolution: {integrity: sha512-vwHO1Rg1uxS1oEkF9VMHGiKhLc4ojy0FoJeX2Pq08ibiOIkWkcx8EvA32aEPeAVAvnpwy1TNCFpiiawtUgNKxA==}
engines: {node: '>=16.0.0'}
'@crawlee/http@3.12.2':
resolution: {integrity: sha512-rT86gx9JYBJnsgl22cZVMDm0Xm3tnvClJk6MiilprW0GGwXvAwEz4DKRtsSPWD2A1/xy90SdEac7GVtuCGdmKQ==}
engines: {node: '>=16.0.0'}
'@crawlee/jsdom@3.12.2':
resolution: {integrity: sha512-9+6GzV6BSb7HlSZ//zpE2TeimzoaqRarQbNlqBz39SRv2cn4+ApasTlB8qJaZnHX4/Mt9QExAv4AaB4FG0miFA==}
engines: {node: '>=16.0.0'}
'@crawlee/linkedom@3.12.2':
resolution: {integrity: sha512-x/xw8aFYqFv1iAuVlnn4Akh/LM5FsmSryE16f0cYFtPegboOeq+Iw3ebCBI2VGx9CLjH2xnrpv/kGzgH+JYs0Q==}
engines: {node: '>=16.0.0'}
'@crawlee/memory-storage@3.12.2':
resolution: {integrity: sha512-KUnTpYIzYy8Fnyqf2JdufyM6Nd/1/nUsrHF3hFUdQhEfby0yX8kgc9UIF8OKieGfqUuYMKdfpeWyB8jRPp6Jyw==}
engines: {node: '>= 16'}
'@crawlee/playwright@3.12.2':
resolution: {integrity: sha512-a+JgVs+PBt/ePyi4Y9PnLtEHsJ+BYCsAu+fKFxt5SfLFbgfreIpSN5LnlSGPlUOdFxaD0I+qz3H02dxtQDpGug==}
engines: {node: '>=16.0.0'}
peerDependencies:
playwright: '*'
peerDependenciesMeta:
playwright:
optional: true
'@crawlee/puppeteer@3.12.2':
resolution: {integrity: sha512-XZu0NrTXEo3WufXVpJZjqFrtzxwg6Zp4rW2Mrsny2nPzcsMXX5nFsudj0N1elXXmf5ZANUD9p1T803RBcK49mg==}
engines: {node: '>=16.0.0'}
peerDependencies:
puppeteer: '*'
peerDependenciesMeta:
puppeteer:
optional: true
'@crawlee/templates@3.12.2':
resolution: {integrity: sha512-3dn0bdoagX1IsKHQh4YCrXTmQyUR1IgDKBwfcJGUThiiIOwn53hyO0/KsETqn8Fb0l2//10Q+xxJEDLxNN5ksA==}
engines: {node: '>=16.0.0'}
'@crawlee/types@3.12.2':
resolution: {integrity: sha512-mdSN8FSOGLzPDyO3wC5k6BvZKv467rvrLsIqqAkiN87TgQI5lwV+k2bBQGdajzcjDQn+taWG67xDbbZg6BvFVw==}
engines: {node: '>=16.0.0'}
'@crawlee/utils@3.12.2':
resolution: {integrity: sha512-Yly1WSm1y0Te1/BtrsbPnrZTIL2eoRvk/kmAgyBOC2o1Icu0QnFqWJh0iAuH7Ed92wYVgk4E/Cr5jYls35xcbQ==}
engines: {node: '>=16.0.0'}
'@csstools/color-helpers@5.0.1':
resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
engines: {node: '>=18'}
'@csstools/css-calc@2.1.1':
resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-parser-algorithms': ^3.0.4
'@csstools/css-tokenizer': ^3.0.3
'@csstools/css-color-parser@3.0.7':
resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-parser-algorithms': ^3.0.4
'@csstools/css-tokenizer': ^3.0.3
'@csstools/css-parser-algorithms@3.0.4':
resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-tokenizer': ^3.0.3
'@csstools/css-tokenizer@3.0.3':
resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
engines: {node: '>=18'}
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.19.2':
resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.12.0':
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.0':
resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.21.0':
resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.2.7':
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
'@humanfs/node@0.16.6':
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
'@humanwhocodes/retry@0.3.1':
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
'@humanwhocodes/retry@0.4.2':
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
engines: {node: '>=18.18'}
'@inquirer/figures@1.0.10':
resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==}
engines: {node: '>=18'}
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
'@sapphire/async-queue@1.5.5':
resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==}
engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
'@sapphire/shapeshift@3.9.7':
resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==}
engines: {node: '>=v16'}
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
'@sindresorhus/is@5.6.0':
resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
engines: {node: '>=14.16'}
'@sindresorhus/is@7.0.1':
resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
engines: {node: '>=18'}
'@szmarczak/http-timer@5.0.1':
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
'@tokenizer/inflate@0.2.6':
resolution: {integrity: sha512-SdR/i05U7Xhnsq36iyIq/ZiGGw4PKzw4ww3bOq80Pjj4wyXpqyTcgrgdDdGlcatnlvzNJx8CQw3hp6QZvkUwhA==}
engines: {node: '>=16'}
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
'@types/content-type@1.1.8':
resolution: {integrity: sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/http-cache-semantics@4.0.4':
resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
'@types/jsdom@21.1.7':
resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/json5@0.0.29':
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/node@22.13.5':
resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
'@types/sax@1.2.7':
resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
'@types/tough-cookie@4.0.5':
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
'@vladfrangu/async_event_emitter@2.4.6':
resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==}
engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.14.0:
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
engines: {node: '>=0.4.0'}
hasBin: true
adm-zip@0.5.16:
resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
engines: {node: '>=12.0'}
agent-base@7.1.3:
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
engines: {node: '>= 14'}
agentkeepalive@4.6.0:
resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
engines: {node: '>= 8.0.0'}
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
ansi-regex@2.1.1:
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
engines: {node: '>=0.10.0'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-styles@2.2.1:
resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
engines: {node: '>=0.10.0'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
apify-client@2.12.0:
resolution: {integrity: sha512-h04rPVft8tNjnwZswqF2k46bdHZWsDsfOE8PkmklZ9+/s/mb/Q/dMOXCx0u2+RTc8QoAkYS9LYs97wZyUWpoag==}
apify@3.3.2:
resolution: {integrity: sha512-OFP5YVshd0KxUP4yueUjX/hR5PGC0zzYy0xdcxX8OFAcrkrh8VaeGcOJza5uHpPFRwDnPKhiNa3YzcA3rnAHSQ==}
engines: {node: '>=16.0.0'}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-query@5.3.2:
resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines: {node: '>= 0.4'}
array-buffer-byte-length@1.0.2:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
array-includes@3.1.8:
resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
engines: {node: '>= 0.4'}
array.prototype.findlast@1.2.5:
resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
engines: {node: '>= 0.4'}
array.prototype.findlastindex@1.2.5:
resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
engines: {node: '>= 0.4'}
array.prototype.flat@1.3.3:
resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
engines: {node: '>= 0.4'}
array.prototype.flatmap@1.3.3:
resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
engines: {node: '>= 0.4'}
array.prototype.tosorted@1.1.4:
resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
engines: {node: '>= 0.4'}
arraybuffer.prototype.slice@1.0.4:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
async-retry@1.3.3:
resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
axe-core@4.10.2:
resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==}
engines: {node: '>=4'}
axios@1.7.9:
resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
axobject-query@4.1.0:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
browserslist@4.24.4:
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
cacheable-lookup@7.0.0:
resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
engines: {node: '>=14.16'}
cacheable-request@12.0.1:
resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==}
engines: {node: '>=18'}
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bind@1.0.8:
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines: {node: '>= 0.4'}
call-bound@1.0.3:
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
engines: {node: '>= 0.4'}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
callsites@4.2.0:
resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==}
engines: {node: '>=12.20'}
caniuse-lite@1.0.30001700:
resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
chalk@1.1.3:
resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
engines: {node: '>=0.10.0'}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
cheerio-select@2.1.0:
resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
cheerio@1.0.0-rc.12:
resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
engines: {node: '>= 6'}
cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
cli-width@3.0.0:
resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
engines: {node: '>= 10'}
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
engines: {node: '>=0.8'}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
confusing-browser-globals@1.0.11:
resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
crawlee@3.12.2:
resolution: {integrity: sha512-+toTCJ1HUEsaRdvYhaQy1nZ4rh6zMVeDOduv9bLYI/26oCff/FG1F+dgCDfngnMcFCyZMuM89bDPUxrzB3bH8A==}
engines: {node: '>=16.0.0'}
hasBin: true
peerDependencies:
playwright: '*'
puppeteer: '*'
peerDependenciesMeta:
playwright:
optional: true
puppeteer:
optional: true
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
css-select@5.1.0:
resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
engines: {node: '>= 6'}
cssom@0.5.0:
resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
cssstyle@4.2.1:
resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
engines: {node: '>=18'}
csv-stringify@6.5.2:
resolution: {integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==}
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
data-urls@5.0.0:
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
engines: {node: '>=18'}
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
data-view-byte-length@1.0.2:
resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
engines: {node: '>= 0.4'}
data-view-byte-offset@1.0.1:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines: {node: '>= 0.4'}
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
decimal.js@10.5.0:
resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
defer-to-connect@2.0.1:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
engines: {node: '>=10'}
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
devtools-protocol@0.0.1423531:
resolution: {integrity: sha512-z6cOcajZWxk80zvFnkTGa7tj3oqF+C5SnOF1KSMeAr5/WW/nLNHlEpKr7voSzMz8IaUoq5rjdI0Mqv5k/BUkhg==}
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
domelementtype@2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@5.0.3:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
domutils@3.2.2:
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dot-prop@6.0.1:
resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
engines: {node: '>=10'}
dot-prop@7.2.0:
resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
electron-to-chromium@1.5.103:
resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
entities@6.0.0:
resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
engines: {node: '>=0.12'}
es-abstract@1.23.9:
resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
engines: {node: '>= 0.4'}
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
es-iterator-helpers@1.2.1:
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
engines: {node: '>= 0.4'}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
es-set-tostringtag@2.1.0:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
es-shim-unscopables@1.1.0:
resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
engines: {node: '>= 0.4'}
es-to-primitive@1.3.0:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
eslint-config-airbnb-base@15.0.0:
resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
engines: {node: ^10.12.0 || >=12.0.0}
peerDependencies:
eslint: ^7.32.0 || ^8.2.0
eslint-plugin-import: ^2.25.2
eslint-config-airbnb@19.0.4:
resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==}
engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^7.32.0 || ^8.2.0
eslint-plugin-import: ^2.25.3
eslint-plugin-jsx-a11y: ^6.5.1
eslint-plugin-react: ^7.28.0
eslint-plugin-react-hooks: ^4.3.0
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
eslint-import-resolver-typescript@2.7.1:
resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: '*'
eslint-plugin-import: '*'
eslint-module-utils@2.12.0:
resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: '*'
eslint-import-resolver-node: '*'
eslint-import-resolver-typescript: '*'
eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
eslint:
optional: true
eslint-import-resolver-node:
optional: true
eslint-import-resolver-typescript:
optional: true
eslint-import-resolver-webpack:
optional: true
eslint-plugin-import@2.31.0:
resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
engines: {node: '>=4'}
peerDependencies:
'@typescript-eslint/parser': '*'
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
peerDependenciesMeta:
'@typescript-eslint/parser':
optional: true
eslint-plugin-jsx-a11y@6.10.2:
resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
engines: {node: '>=4.0'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
eslint-plugin-react-hooks@4.6.2:
resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
engines: {node: '>=10'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
eslint-plugin-react@7.37.4:
resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-scope@8.2.0:
resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.21.0:
resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
jiti: '*'
peerDependenciesMeta:
jiti:
optional: true
espree@10.3.0:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
event-stream@3.3.4:
resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
figlet@1.8.0:
resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==}
engines: {node: '>= 0.4.0'}
hasBin: true
figures@3.2.0:
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=8'}
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
file-type@20.1.0:
resolution: {integrity: sha512-XoxU+lETfCf+bYK3SXkxFusAvmtYQl1u/ZC4zw1DBLEsHUvh339uwYucgQnnSMz1mRCWYJrCzsbJJ95hsQbZ8A==}
engines: {node: '>=18'}
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
fingerprint-generator@2.1.62:
resolution: {integrity: sha512-Bhx2Cxm0l2xYhO1KAPs9orozlONdQzm6qC+UrLk7Np3TjMS8OuHNK6LQOGIuCZnAoP3ZMLl85WaCqI2nH5m01w==}
engines: {node: '>=16.0.0'}
fingerprint-injector@2.1.62:
resolution: {integrity: sha512-kTzJAMuVWAiZ1uA1RxYT40LGIxkLhDq2pbk//bliYuUALbSQ1UAXHZASdZTnLlFvrFPIKlBK19QmllXlA/guYA==}
engines: {node: '>=16.0.0'}
peerDependencies:
playwright: ^1.22.2
puppeteer: '>= 9.x'
peerDependenciesMeta:
playwright:
optional: true
puppeteer:
optional: true
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
follow-redirects@1.15.9:
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
form-data-encoder@4.0.2:
resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
engines: {node: '>= 18'}
form-data@4.0.2:
resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
engines: {node: '>= 6'}
from@0.1.7:
resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
fs-extra@11.3.0:
resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
engines: {node: '>=14.14'}
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
function.prototype.name@1.1.8:
resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
engines: {node: '>= 0.4'}
functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
generative-bayesian-network@2.1.62:
resolution: {integrity: sha512-+zq1/AHdxb+0MXF34krM/IUu/N9gI6llzQg2gf7WMfuzh0nv6xbhb8QyfL48MOJihum7wSE90+/hMXK60X+Kpw==}
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
get-stream@9.0.1:
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
engines: {node: '>=18'}
get-symbol-description@1.1.0:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
got-scraping@4.1.1:
resolution: {integrity: sha512-MbT+NMMU4VgvOg2tFIPOSIrMfH986fm0LJ17RxBLKlyTs3gh3xIMETpe+zdPaXY7tH1j6YYeqtfG0TnVMx6V2g==}
engines: {node: '>=16'}
got@14.4.6:
resolution: {integrity: sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==}
engines: {node: '>=20'}
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
has-ansi@2.0.0:
resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
engines: {node: '>=0.10.0'}
has-bigints@1.1.0:
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines: {node: '>= 0.4'}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
has-proto@1.2.0:
resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
engines: {node: '>= 0.4'}
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
header-generator@2.1.62:
resolution: {integrity: sha512-L4y1Fush4bkC/3zEurWjiwzeuekAH3HMYA508EZDmvk1wPmcbpV/mq3u3d3fxq7v4oPmaCfsRm1T5DUH19uikA==}
engines: {node: '>=16.0.0'}
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
html-escaper@3.0.3:
resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
htmlparser2@10.0.0:
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
htmlparser2@9.1.0:
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
http2-wrapper@2.2.1:
resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
engines: {node: '>=10.19.0'}
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
humanize-ms@1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
idcac-playwright@0.1.3:
resolution: {integrity: sha512-VVYQ4sv6OrUJKVzYaIP1hq0qAHd1O22HW5LnL1Wf6zkrLStQ/QEg4iJ0rllIOEpd+Rmm+635AJD59A+Vw+2PgQ==}
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
import-local@3.2.0:
resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
engines: {node: '>=8'}
hasBin: true
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
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.
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
inquirer@8.2.6:
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
engines: {node: '>=12.0.0'}
inquirer@9.3.7:
resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==}
engines: {node: '>=18'}
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
ip-address@9.0.5:
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
engines: {node: '>= 12'}
is-any-array@2.0.1:
resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==}
is-array-buffer@3.0.5:
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines: {node: '>= 0.4'}
is-async-function@2.1.1:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'}
is-bigint@1.1.0:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
is-boolean-object@1.2.2:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
is-data-view@1.0.2:
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
engines: {node: '>= 0.4'}
is-date-object@1.1.0:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
is-finalizationregistry@1.1.1:
resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
engines: {node: '>= 0.4'}
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
is-generator-function@1.1.0:
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
engines: {node: '>= 0.4'}
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-interactive@1.0.0:
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
engines: {node: '>=8'}
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
is-obj@2.0.0:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
is-set@2.0.3:
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
engines: {node: '>= 0.4'}
is-shared-array-buffer@1.0.4:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
is-stream@4.0.1:
resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
engines: {node: '>=18'}
is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
is-symbol@1.1.1:
resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
engines: {node: '>= 0.4'}
is-typed-array@1.1.15:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
is-weakref@1.1.1:
resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines: {node: '>= 0.4'}
is-weakset@2.0.4:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
iterator.prototype@1.1.5:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'}
jquery@3.7.1:
resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
jsdom@26.0.0:
resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==}
engines: {node: '>=18'}
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
language-tags@1.0.9:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
linkedom@0.18.9:
resolution: {integrity: sha512-Pfvhwjs46nBrcQdauQjMXDJZqj6VwN7KStT84xQqmIgD9bPH6UVJ/ESW8y4VHVF2h7di0/P+f4Iln4U5emRcmg==}
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
log-symbols@4.1.0:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lowercase-keys@3.0.0:
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
map-stream@0.1.0:
resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
mimic-response@3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
mimic-response@4.0.0:
resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
ml-array-max@1.2.4:
resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==}
ml-array-min@1.2.3:
resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==}
ml-array-rescale@1.3.7:
resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==}
ml-logistic-regression@2.0.0:
resolution: {integrity: sha512-xHhB91ut8GRRbJyB1ZQfKsl1MHmE1PqMeRjxhks96M5BGvCbC9eEojf4KgRMKM2LxFblhVUcVzweAoPB48Nt0A==}
ml-matrix@6.12.0:
resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
mute-stream@1.0.0:
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
normalize-url@8.0.1:
resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
engines: {node: '>=14.16'}
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
nwsapi@2.2.16:
resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
object.assign@4.1.7:
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines: {node: '>= 0.4'}
object.entries@1.1.8:
resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
engines: {node: '>= 0.4'}
object.fromentries@2.0.8:
resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
engines: {node: '>= 0.4'}
object.groupby@1.0.3:
resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
engines: {node: '>= 0.4'}
object.values@1.2.1:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
ow@0.28.2:
resolution: {integrity: sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==}
engines: {node: '>=12'}
ow@1.1.1:
resolution: {integrity: sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==}
engines: {node: '>=14.16'}
own-keys@1.0.1:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
p-cancelable@4.0.1:
resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==}
engines: {node: '>=14.16'}
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
parent-require@1.0.0:
resolution: {integrity: sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==}
engines: {node: '>= 0.4.0'}
parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5@7.2.1:
resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
pause-stream@0.0.11:
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
peek-readable@6.1.1:
resolution: {integrity: sha512-7QmvgRKhxM0E2PGV4ocfROItVode+ELI27n4q+lpufZ+tRKBu/pBP8WOmw9HXn2ui/AUizqtvaVQhcJrOkRqYg==}
engines: {node: '>=18'}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
proper-lockfile@4.1.2:
resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
proxy-chain@2.5.6:
resolution: {integrity: sha512-vC57FECgv2WKCVoaRrztJ86NBER7ZJCjSGvOnpMlgfi9vroMCoCwexQ+69He4YWUPE88D5jZizytiLbPjLv6/A==}
engines: {node: '>=14'}
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
quick-lru@5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
quick-lru@7.0.0:
resolution: {integrity: sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==}
engines: {node: '>=18'}
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
resolve@1.22.10:
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
engines: {node: '>= 0.4'}
hasBin: true
resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
responselike@3.0.0:
resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
engines: {node: '>=14.16'}
restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
retry@0.13.1:
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
engines: {node: '>= 4'}
robots-parser@3.0.1:
resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==}
engines: {node: '>=10.0.0'}
rrweb-cssom@0.8.0:
resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'}
run-async@3.0.0:
resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
engines: {node: '>=0.12.0'}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
safe-array-concat@1.1.3:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safe-push-apply@1.0.0:
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
engines: {node: '>= 0.4'}
safe-regex-test@1.1.0:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
saxes@6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
engines: {node: '>=v12.22.7'}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.7.1:
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
engines: {node: '>=10'}
hasBin: true
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
set-function-name@2.0.2:
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
engines: {node: '>= 0.4'}
set-proto@1.0.0:
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines: {node: '>= 0.4'}
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
socks-proxy-agent@8.0.5:
resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
engines: {node: '>= 14'}
socks@2.8.4:
resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
split@0.3.3:
resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
stream-chain@2.2.5:
resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
stream-combiner@0.0.4:
resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
stream-json@1.9.1:
resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
string-comparison@1.3.0:
resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==}
engines: {node: ^16.0.0 || >=18.0.0}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string.prototype.includes@2.0.1:
resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
engines: {node: '>= 0.4'}
string.prototype.matchall@4.0.12:
resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
engines: {node: '>= 0.4'}
string.prototype.repeat@1.0.0:
resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
string.prototype.trim@1.2.10:
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines: {node: '>= 0.4'}
string.prototype.trimend@1.0.9:
resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
engines: {node: '>= 0.4'}
string.prototype.trimstart@1.0.8:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines: {node: '>= 0.4'}
string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
strip-ansi@3.0.1:
resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
engines: {node: '>=0.10.0'}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
strtok3@10.2.1:
resolution: {integrity: sha512-Q2dTnW3UXokAvXmXvrvMoUj/me3LyJI76HNHeuGMh2o0As/vzd7eHV3ncLOyvu928vQIDbE7Vf9ldEnC7cwy1w==}
engines: {node: '>=18'}
supports-color@2.0.0:
resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
engines: {node: '>=0.8.0'}
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
tiny-typed-emitter@2.1.0:
resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==}
tldts-core@6.1.78:
resolution: {integrity: sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw==}
tldts@6.1.78:
resolution: {integrity: sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ==}
hasBin: true
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
token-types@6.0.0:
resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==}
engines: {node: '>=14.16'}
tough-cookie@5.1.1:
resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==}
engines: {node: '>=16'}
tr46@5.0.0:
resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
engines: {node: '>=18'}
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
type-fest@4.35.0:
resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==}
engines: {node: '>=16'}
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
typed-array-byte-length@1.0.3:
resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
engines: {node: '>= 0.4'}
typed-array-byte-offset@1.0.4:
resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
engines: {node: '>= 0.4'}
typed-array-length@1.0.7:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
uhyphen@0.2.0:
resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
uint8array-extras@1.4.0:
resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
engines: {node: '>=18'}
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
undici-types@6.20.0:
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
update-browserslist-db@1.1.2:
resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
vali-date@1.0.0:
resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==}
engines: {node: '>=0.10.0'}
w3c-xmlserializer@5.0.0:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
whatwg-url@14.1.1:
resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==}
engines: {node: '>=18'}
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
which-builtin-type@1.2.1:
resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
engines: {node: '>= 0.4'}
which-collection@1.0.2:
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines: {node: '>= 0.4'}
which-typed-array@1.1.18:
resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
engines: {node: '>= 0.4'}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
ws@8.18.1:
resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
xmlchars@2.2.0:
resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
yargonaut@1.1.4:
resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==}
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
yoctocolors-cjs@2.1.2:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
snapshots:
'@apify/consts@2.37.0': {}
'@apify/datastructures@2.0.2': {}
'@apify/eslint-config@0.4.0(eslint@9.21.0)':
dependencies:
eslint: 9.21.0
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)
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
eslint-plugin-react: 7.37.4(eslint@9.21.0)
eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-webpack
- supports-color
'@apify/input_secrets@1.1.65':
dependencies:
'@apify/log': 2.5.13
'@apify/utilities': 2.13.1
ow: 0.28.2
'@apify/log@2.5.13':
dependencies:
'@apify/consts': 2.37.0
ansi-colors: 4.1.3
'@apify/ps-tree@1.2.0':
dependencies:
event-stream: 3.3.4
'@apify/pseudo_url@2.0.54':
dependencies:
'@apify/log': 2.5.13
'@apify/timeout@0.3.1': {}
'@apify/utilities@2.13.1':
dependencies:
'@apify/consts': 2.37.0
'@apify/log': 2.5.13
'@asamuzakjp/css-color@2.8.3':
dependencies:
'@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)
'@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)
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
lru-cache: 10.4.3
'@crawlee/basic@3.12.2':
dependencies:
'@apify/log': 2.5.13
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/core': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
csv-stringify: 6.5.2
fs-extra: 11.3.0
got-scraping: 4.1.1
ow: 0.28.2
tldts: 6.1.78
tslib: 2.8.1
type-fest: 4.35.0
transitivePeerDependencies:
- supports-color
'@crawlee/browser-pool@3.12.2':
dependencies:
'@apify/log': 2.5.13
'@apify/timeout': 0.3.1
'@crawlee/core': 3.12.2
'@crawlee/types': 3.12.2
fingerprint-generator: 2.1.62
fingerprint-injector: 2.1.62
lodash.merge: 4.6.2
nanoid: 3.3.8
ow: 0.28.2
p-limit: 3.1.0
proxy-chain: 2.5.6
quick-lru: 5.1.1
tiny-typed-emitter: 2.1.0
tslib: 2.8.1
transitivePeerDependencies:
- supports-color
'@crawlee/browser@3.12.2':
dependencies:
'@apify/timeout': 0.3.1
'@crawlee/basic': 3.12.2
'@crawlee/browser-pool': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
ow: 0.28.2
tslib: 2.8.1
type-fest: 4.35.0
transitivePeerDependencies:
- supports-color
'@crawlee/cheerio@3.12.2':
dependencies:
'@crawlee/http': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
cheerio: 1.0.0-rc.12
htmlparser2: 9.1.0
tslib: 2.8.1
transitivePeerDependencies:
- supports-color
'@crawlee/cli@3.12.2':
dependencies:
'@crawlee/templates': 3.12.2
ansi-colors: 4.1.3
fs-extra: 11.3.0
inquirer: 8.2.6
tslib: 2.8.1
yargonaut: 1.1.4
yargs: 17.7.2
'@crawlee/core@3.12.2':
dependencies:
'@apify/consts': 2.37.0
'@apify/datastructures': 2.0.2
'@apify/log': 2.5.13
'@apify/pseudo_url': 2.0.54
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/memory-storage': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
'@sapphire/async-queue': 1.5.5
'@vladfrangu/async_event_emitter': 2.4.6
csv-stringify: 6.5.2
fs-extra: 11.3.0
got-scraping: 4.1.1
json5: 2.2.3
minimatch: 9.0.5
ow: 0.28.2
stream-json: 1.9.1
tldts: 6.1.78
tough-cookie: 5.1.1
tslib: 2.8.1
type-fest: 4.35.0
transitivePeerDependencies:
- supports-color
'@crawlee/http@3.12.2':
dependencies:
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/basic': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
'@types/content-type': 1.1.8
cheerio: 1.0.0-rc.12
content-type: 1.0.5
got-scraping: 4.1.1
iconv-lite: 0.6.3
mime-types: 2.1.35
ow: 0.28.2
tslib: 2.8.1
type-fest: 4.35.0
transitivePeerDependencies:
- supports-color
'@crawlee/jsdom@3.12.2':
dependencies:
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/http': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
'@types/jsdom': 21.1.7
cheerio: 1.0.0-rc.12
jsdom: 26.0.0
ow: 0.28.2
tslib: 2.8.1
transitivePeerDependencies:
- bufferutil
- canvas
- supports-color
- utf-8-validate
'@crawlee/linkedom@3.12.2':
dependencies:
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/http': 3.12.2
'@crawlee/types': 3.12.2
linkedom: 0.18.9
ow: 0.28.2
tslib: 2.8.1
transitivePeerDependencies:
- supports-color
'@crawlee/memory-storage@3.12.2':
dependencies:
'@apify/log': 2.5.13
'@crawlee/types': 3.12.2
'@sapphire/async-queue': 1.5.5
'@sapphire/shapeshift': 3.9.7
content-type: 1.0.5
fs-extra: 11.3.0
json5: 2.2.3
mime-types: 2.1.35
proper-lockfile: 4.1.2
tslib: 2.8.1
'@crawlee/playwright@3.12.2':
dependencies:
'@apify/datastructures': 2.0.2
'@apify/log': 2.5.13
'@apify/timeout': 0.3.1
'@crawlee/browser': 3.12.2
'@crawlee/browser-pool': 3.12.2
'@crawlee/core': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
cheerio: 1.0.0-rc.12
idcac-playwright: 0.1.3
jquery: 3.7.1
lodash.isequal: 4.5.0
ml-logistic-regression: 2.0.0
ml-matrix: 6.12.0
ow: 0.28.2
string-comparison: 1.3.0
tslib: 2.8.1
transitivePeerDependencies:
- puppeteer
- supports-color
'@crawlee/puppeteer@3.12.2':
dependencies:
'@apify/datastructures': 2.0.2
'@apify/log': 2.5.13
'@crawlee/browser': 3.12.2
'@crawlee/browser-pool': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
cheerio: 1.0.0-rc.12
devtools-protocol: 0.0.1423531
idcac-playwright: 0.1.3
jquery: 3.7.1
ow: 0.28.2
tslib: 2.8.1
transitivePeerDependencies:
- playwright
- supports-color
'@crawlee/templates@3.12.2':
dependencies:
ansi-colors: 4.1.3
inquirer: 9.3.7
tslib: 2.8.1
yargonaut: 1.1.4
yargs: 17.7.2
'@crawlee/types@3.12.2':
dependencies:
tslib: 2.8.1
'@crawlee/utils@3.12.2':
dependencies:
'@apify/log': 2.5.13
'@apify/ps-tree': 1.2.0
'@crawlee/types': 3.12.2
'@types/sax': 1.2.7
cheerio: 1.0.0-rc.12
file-type: 20.1.0
got-scraping: 4.1.1
ow: 0.28.2
robots-parser: 3.0.1
sax: 1.4.1
tslib: 2.8.1
whatwg-mimetype: 4.0.0
transitivePeerDependencies:
- supports-color
'@csstools/color-helpers@5.0.1': {}
'@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)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
'@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)':
dependencies:
'@csstools/color-helpers': 5.0.1
'@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)
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
'@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
dependencies:
'@csstools/css-tokenizer': 3.0.3
'@csstools/css-tokenizer@3.0.3': {}
'@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)':
dependencies:
eslint: 9.21.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.19.2':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@eslint/core@0.12.0':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.0':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.3.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
'@eslint/js@9.21.0': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.2.7':
dependencies:
'@eslint/core': 0.12.0
levn: 0.4.1
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.6':
dependencies:
'@humanfs/core': 0.19.1
'@humanwhocodes/retry': 0.3.1
'@humanwhocodes/module-importer@1.0.1': {}
'@humanwhocodes/retry@0.3.1': {}
'@humanwhocodes/retry@0.4.2': {}
'@inquirer/figures@1.0.10': {}
'@rtsao/scc@1.1.0': {}
'@sapphire/async-queue@1.5.5': {}
'@sapphire/shapeshift@3.9.7':
dependencies:
fast-deep-equal: 3.1.3
lodash: 4.17.21
'@sec-ant/readable-stream@0.4.1': {}
'@sindresorhus/is@4.6.0': {}
'@sindresorhus/is@5.6.0': {}
'@sindresorhus/is@7.0.1': {}
'@szmarczak/http-timer@5.0.1':
dependencies:
defer-to-connect: 2.0.1
'@tokenizer/inflate@0.2.6':
dependencies:
debug: 4.4.0
fflate: 0.8.2
token-types: 6.0.0
transitivePeerDependencies:
- supports-color
'@tokenizer/token@0.3.0': {}
'@types/content-type@1.1.8': {}
'@types/estree@1.0.6': {}
'@types/http-cache-semantics@4.0.4': {}
'@types/jsdom@21.1.7':
dependencies:
'@types/node': 22.13.5
'@types/tough-cookie': 4.0.5
parse5: 7.2.1
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29': {}
'@types/node@22.13.5':
dependencies:
undici-types: 6.20.0
'@types/sax@1.2.7':
dependencies:
'@types/node': 22.13.5
'@types/tough-cookie@4.0.5': {}
'@vladfrangu/async_event_emitter@2.4.6': {}
acorn-jsx@5.3.2(acorn@8.14.0):
dependencies:
acorn: 8.14.0
acorn@8.14.0: {}
adm-zip@0.5.16: {}
agent-base@7.1.3: {}
agentkeepalive@4.6.0:
dependencies:
humanize-ms: 1.2.1
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ansi-colors@4.1.3: {}
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
ansi-regex@2.1.1: {}
ansi-regex@5.0.1: {}
ansi-styles@2.2.1: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
apify-client@2.12.0:
dependencies:
'@apify/consts': 2.37.0
'@apify/log': 2.5.13
'@crawlee/types': 3.12.2
agentkeepalive: 4.6.0
async-retry: 1.3.3
axios: 1.7.9
content-type: 1.0.5
ow: 0.28.2
tslib: 2.8.1
type-fest: 4.35.0
transitivePeerDependencies:
- debug
apify@3.3.2:
dependencies:
'@apify/consts': 2.37.0
'@apify/input_secrets': 1.1.65
'@apify/log': 2.5.13
'@apify/timeout': 0.3.1
'@apify/utilities': 2.13.1
'@crawlee/core': 3.12.2
'@crawlee/types': 3.12.2
'@crawlee/utils': 3.12.2
apify-client: 2.12.0
fs-extra: 11.3.0
ow: 0.28.2
semver: 7.7.1
tslib: 2.8.1
ws: 8.18.1
transitivePeerDependencies:
- bufferutil
- debug
- supports-color
- utf-8-validate
argparse@2.0.1: {}
aria-query@5.3.2: {}
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.3
is-array-buffer: 3.0.5
array-includes@3.1.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
is-string: 1.1.1
array.prototype.findlast@1.2.5:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
array.prototype.findlastindex@1.2.5:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-shim-unscopables: 1.1.0
array.prototype.flat@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-shim-unscopables: 1.1.0
array.prototype.tosorted@1.1.4:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
dependencies:
array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
ast-types-flow@0.0.8: {}
async-function@1.0.0: {}
async-retry@1.3.3:
dependencies:
retry: 0.13.1
asynckit@0.4.0: {}
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
axe-core@4.10.2: {}
axios@1.7.9:
dependencies:
follow-redirects: 1.15.9
form-data: 4.0.2
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
axobject-query@4.1.0: {}
balanced-match@1.0.2: {}
base64-js@1.5.1: {}
bl@4.1.0:
dependencies:
buffer: 5.7.1
inherits: 2.0.4
readable-stream: 3.6.2
boolbase@1.0.0: {}
brace-expansion@1.1.11:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.0.1:
dependencies:
balanced-match: 1.0.2
browserslist@4.24.4:
dependencies:
caniuse-lite: 1.0.30001700
electron-to-chromium: 1.5.103
node-releases: 2.0.19
update-browserslist-db: 1.1.2(browserslist@4.24.4)
buffer@5.7.1:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
cacheable-lookup@7.0.0: {}
cacheable-request@12.0.1:
dependencies:
'@types/http-cache-semantics': 4.0.4
get-stream: 9.0.1
http-cache-semantics: 4.1.1
keyv: 4.5.4
mimic-response: 4.0.0
normalize-url: 8.0.1
responselike: 3.0.0
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bind@1.0.8:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
get-intrinsic: 1.3.0
set-function-length: 1.2.2
call-bound@1.0.3:
dependencies:
call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.3.0
callsites@3.1.0: {}
callsites@4.2.0: {}
caniuse-lite@1.0.30001700: {}
chalk@1.1.3:
dependencies:
ansi-styles: 2.2.1
escape-string-regexp: 1.0.5
has-ansi: 2.0.0
strip-ansi: 3.0.1
supports-color: 2.0.0
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
chardet@0.7.0: {}
cheerio-select@2.1.0:
dependencies:
boolbase: 1.0.0
css-select: 5.1.0
css-what: 6.1.0
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
cheerio@1.0.0-rc.12:
dependencies:
cheerio-select: 2.1.0
dom-serializer: 2.0.0
domhandler: 5.0.3
domutils: 3.2.2
htmlparser2: 8.0.2
parse5: 7.2.1
parse5-htmlparser2-tree-adapter: 7.1.0
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
cli-spinners@2.9.2: {}
cli-width@3.0.0: {}
cli-width@4.1.0: {}
cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
clone@1.0.4: {}
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
color-name@1.1.4: {}
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
concat-map@0.0.1: {}
confusing-browser-globals@1.0.11: {}
content-type@1.0.5: {}
crawlee@3.12.2:
dependencies:
'@crawlee/basic': 3.12.2
'@crawlee/browser': 3.12.2
'@crawlee/browser-pool': 3.12.2
'@crawlee/cheerio': 3.12.2
'@crawlee/cli': 3.12.2
'@crawlee/core': 3.12.2
'@crawlee/http': 3.12.2
'@crawlee/jsdom': 3.12.2
'@crawlee/linkedom': 3.12.2
'@crawlee/playwright': 3.12.2
'@crawlee/puppeteer': 3.12.2
'@crawlee/utils': 3.12.2
import-local: 3.2.0
tslib: 2.8.1
transitivePeerDependencies:
- bufferutil
- canvas
- supports-color
- utf-8-validate
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
css-select@5.1.0:
dependencies:
boolbase: 1.0.0
css-what: 6.1.0
domhandler: 5.0.3
domutils: 3.2.2
nth-check: 2.1.1
css-what@6.1.0: {}
cssom@0.5.0: {}
cssstyle@4.2.1:
dependencies:
'@asamuzakjp/css-color': 2.8.3
rrweb-cssom: 0.8.0
csv-stringify@6.5.2: {}
damerau-levenshtein@1.0.8: {}
data-urls@5.0.0:
dependencies:
whatwg-mimetype: 4.0.0
whatwg-url: 14.1.1
data-view-buffer@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-data-view: 1.0.2
data-view-byte-length@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-data-view: 1.0.2
data-view-byte-offset@1.0.1:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-data-view: 1.0.2
debug@3.2.7:
dependencies:
ms: 2.1.3
debug@4.4.0:
dependencies:
ms: 2.1.3
decimal.js@10.5.0: {}
decompress-response@6.0.0:
dependencies:
mimic-response: 3.1.0
deep-is@0.1.4: {}
defaults@1.0.4:
dependencies:
clone: 1.0.4
defer-to-connect@2.0.1: {}
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
es-errors: 1.3.0
gopd: 1.2.0
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
delayed-stream@1.0.0: {}
devtools-protocol@0.0.1423531: {}
doctrine@2.1.0:
dependencies:
esutils: 2.0.3
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
entities: 4.5.0
domelementtype@2.3.0: {}
domhandler@5.0.3:
dependencies:
domelementtype: 2.3.0
domutils@3.2.2:
dependencies:
dom-serializer: 2.0.0
domelementtype: 2.3.0
domhandler: 5.0.3
dot-prop@6.0.1:
dependencies:
is-obj: 2.0.0
dot-prop@7.2.0:
dependencies:
type-fest: 2.19.0
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
duplexer@0.1.2: {}
electron-to-chromium@1.5.103: {}
emoji-regex@8.0.0: {}
emoji-regex@9.2.2: {}
entities@4.5.0: {}
entities@6.0.0: {}
es-abstract@1.23.9:
dependencies:
array-buffer-byte-length: 1.0.2
arraybuffer.prototype.slice: 1.0.4
available-typed-arrays: 1.0.7
call-bind: 1.0.8
call-bound: 1.0.3
data-view-buffer: 1.0.2
data-view-byte-length: 1.0.2
data-view-byte-offset: 1.0.1
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0
function.prototype.name: 1.1.8
get-intrinsic: 1.3.0
get-proto: 1.0.1
get-symbol-description: 1.1.0
globalthis: 1.0.4
gopd: 1.2.0
has-property-descriptors: 1.0.2
has-proto: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.2
internal-slot: 1.1.0
is-array-buffer: 3.0.5
is-callable: 1.2.7
is-data-view: 1.0.2
is-regex: 1.2.1
is-shared-array-buffer: 1.0.4
is-string: 1.1.1
is-typed-array: 1.1.15
is-weakref: 1.1.1
math-intrinsics: 1.1.0
object-inspect: 1.13.4
object-keys: 1.1.1
object.assign: 4.1.7
own-keys: 1.0.1
regexp.prototype.flags: 1.5.4
safe-array-concat: 1.1.3
safe-push-apply: 1.0.0
safe-regex-test: 1.1.0
set-proto: 1.0.0
string.prototype.trim: 1.2.10
string.prototype.trimend: 1.0.9
string.prototype.trimstart: 1.0.8
typed-array-buffer: 1.0.3
typed-array-byte-length: 1.0.3
typed-array-byte-offset: 1.0.4
typed-array-length: 1.0.7
unbox-primitive: 1.1.0
which-typed-array: 1.1.18
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
es-iterator-helpers@1.2.1:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-set-tostringtag: 2.1.0
function-bind: 1.1.2
get-intrinsic: 1.3.0
globalthis: 1.0.4
gopd: 1.2.0
has-property-descriptors: 1.0.2
has-proto: 1.2.0
has-symbols: 1.1.0
internal-slot: 1.1.0
iterator.prototype: 1.1.5
safe-array-concat: 1.1.3
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
get-intrinsic: 1.3.0
has-tostringtag: 1.0.2
hasown: 2.0.2
es-shim-unscopables@1.1.0:
dependencies:
hasown: 2.0.2
es-to-primitive@1.3.0:
dependencies:
is-callable: 1.2.7
is-date-object: 1.1.0
is-symbol: 1.1.1
escalade@3.2.0: {}
escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {}
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
dependencies:
confusing-browser-globals: 1.0.11
eslint: 9.21.0
eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
object.assign: 4.1.7
object.entries: 1.1.8
semver: 6.3.1
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):
dependencies:
eslint: 9.21.0
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
eslint-plugin-react: 7.37.4(eslint@9.21.0)
eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
object.assign: 4.1.7
object.entries: 1.1.8
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
is-core-module: 2.16.1
resolve: 1.22.10
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
dependencies:
debug: 4.4.0
eslint: 9.21.0
eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
glob: 7.2.3
is-glob: 4.0.3
resolve: 1.22.10
tsconfig-paths: 3.15.0
transitivePeerDependencies:
- supports-color
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):
dependencies:
debug: 3.2.7
optionalDependencies:
eslint: 9.21.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)
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
eslint: 9.21.0
eslint-import-resolver-node: 0.3.9
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)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
minimatch: 3.1.2
object.fromentries: 2.0.8
object.groupby: 1.0.3
object.values: 1.2.1
semver: 6.3.1
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0):
dependencies:
aria-query: 5.3.2
array-includes: 3.1.8
array.prototype.flatmap: 1.3.3
ast-types-flow: 0.0.8
axe-core: 4.10.2
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
eslint: 9.21.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
minimatch: 3.1.2
object.fromentries: 2.0.8
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
eslint-plugin-react-hooks@4.6.2(eslint@9.21.0):
dependencies:
eslint: 9.21.0
eslint-plugin-react@7.37.4(eslint@9.21.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
array.prototype.flatmap: 1.3.3
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
eslint: 9.21.0
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
object.entries: 1.1.8
object.fromentries: 2.0.8
object.values: 1.2.1
prop-types: 15.8.1
resolve: 2.0.0-next.5
semver: 6.3.1
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
eslint-scope@8.2.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.2.0: {}
eslint@9.21.0:
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.19.2
'@eslint/core': 0.12.0
'@eslint/eslintrc': 3.3.0
'@eslint/js': 9.21.0
'@eslint/plugin-kit': 0.2.7
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.2
'@types/estree': 1.0.6
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.0
escape-string-regexp: 4.0.0
eslint-scope: 8.2.0
eslint-visitor-keys: 4.2.0
espree: 10.3.0
esquery: 1.6.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 8.0.0
find-up: 5.0.0
glob-parent: 6.0.2
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
lodash.merge: 4.6.2
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
transitivePeerDependencies:
- supports-color
espree@10.3.0:
dependencies:
acorn: 8.14.0
acorn-jsx: 5.3.2(acorn@8.14.0)
eslint-visitor-keys: 4.2.0
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
estraverse@5.3.0: {}
esutils@2.0.3: {}
event-stream@3.3.4:
dependencies:
duplexer: 0.1.2
from: 0.1.7
map-stream: 0.1.0
pause-stream: 0.0.11
split: 0.3.3
stream-combiner: 0.0.4
through: 2.3.8
external-editor@3.1.0:
dependencies:
chardet: 0.7.0
iconv-lite: 0.4.24
tmp: 0.0.33
fast-deep-equal@3.1.3: {}
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
fflate@0.8.2: {}
figlet@1.8.0: {}
figures@3.2.0:
dependencies:
escape-string-regexp: 1.0.5
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
file-type@20.1.0:
dependencies:
'@tokenizer/inflate': 0.2.6
strtok3: 10.2.1
token-types: 6.0.0
uint8array-extras: 1.4.0
transitivePeerDependencies:
- supports-color
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
path-exists: 4.0.0
fingerprint-generator@2.1.62:
dependencies:
generative-bayesian-network: 2.1.62
header-generator: 2.1.62
tslib: 2.8.1
fingerprint-injector@2.1.62:
dependencies:
fingerprint-generator: 2.1.62
tslib: 2.8.1
flat-cache@4.0.1:
dependencies:
flatted: 3.3.3
keyv: 4.5.4
flatted@3.3.3: {}
follow-redirects@1.15.9: {}
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
form-data-encoder@4.0.2: {}
form-data@4.0.2:
dependencies:
asynckit: 0.4.0
combined-stream: 1.0.8
es-set-tostringtag: 2.1.0
mime-types: 2.1.35
from@0.1.7: {}
fs-extra@11.3.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.1.0
universalify: 2.0.1
fs.realpath@1.0.0: {}
function-bind@1.1.2: {}
function.prototype.name@1.1.8:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
functions-have-names: 1.2.3
hasown: 2.0.2
is-callable: 1.2.7
functions-have-names@1.2.3: {}
generative-bayesian-network@2.1.62:
dependencies:
adm-zip: 0.5.16
tslib: 2.8.1
get-caller-file@2.0.5: {}
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
function-bind: 1.1.2
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
hasown: 2.0.2
math-intrinsics: 1.1.0
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
get-stream@9.0.1:
dependencies:
'@sec-ant/readable-stream': 0.4.1
is-stream: 4.0.1
get-symbol-description@1.1.0:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
get-intrinsic: 1.3.0
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
globals@14.0.0: {}
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
gopd: 1.2.0
gopd@1.2.0: {}
got-scraping@4.1.1:
dependencies:
got: 14.4.6
header-generator: 2.1.62
http2-wrapper: 2.2.1
mimic-response: 4.0.0
ow: 1.1.1
quick-lru: 7.0.0
tslib: 2.8.1
got@14.4.6:
dependencies:
'@sindresorhus/is': 7.0.1
'@szmarczak/http-timer': 5.0.1
cacheable-lookup: 7.0.0
cacheable-request: 12.0.1
decompress-response: 6.0.0
form-data-encoder: 4.0.2
http2-wrapper: 2.2.1
lowercase-keys: 3.0.0
p-cancelable: 4.0.1
responselike: 3.0.0
type-fest: 4.35.0
graceful-fs@4.2.11: {}
has-ansi@2.0.0:
dependencies:
ansi-regex: 2.1.1
has-bigints@1.1.0: {}
has-flag@4.0.0: {}
has-property-descriptors@1.0.2:
dependencies:
es-define-property: 1.0.1
has-proto@1.2.0:
dependencies:
dunder-proto: 1.0.1
has-symbols@1.1.0: {}
has-tostringtag@1.0.2:
dependencies:
has-symbols: 1.1.0
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
header-generator@2.1.62:
dependencies:
browserslist: 4.24.4
generative-bayesian-network: 2.1.62
ow: 0.28.2
tslib: 2.8.1
html-encoding-sniffer@4.0.0:
dependencies:
whatwg-encoding: 3.1.1
html-escaper@3.0.3: {}
htmlparser2@10.0.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
entities: 6.0.0
htmlparser2@8.0.2:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
entities: 4.5.0
htmlparser2@9.1.0:
dependencies:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.2.2
entities: 4.5.0
http-cache-semantics@4.1.1: {}
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.3
debug: 4.4.0
transitivePeerDependencies:
- supports-color
http2-wrapper@2.2.1:
dependencies:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.3
debug: 4.4.0
transitivePeerDependencies:
- supports-color
humanize-ms@1.2.1:
dependencies:
ms: 2.1.3
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
idcac-playwright@0.1.3: {}
ieee754@1.2.1: {}
ignore@5.3.2: {}
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
import-local@3.2.0:
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
imurmurhash@0.1.4: {}
inflight@1.0.6:
dependencies:
once: 1.4.0
wrappy: 1.0.2
inherits@2.0.4: {}
inquirer@8.2.6:
dependencies:
ansi-escapes: 4.3.2
chalk: 4.1.2
cli-cursor: 3.1.0
cli-width: 3.0.0
external-editor: 3.1.0
figures: 3.2.0
lodash: 4.17.21
mute-stream: 0.0.8
ora: 5.4.1
run-async: 2.4.1
rxjs: 7.8.2
string-width: 4.2.3
strip-ansi: 6.0.1
through: 2.3.8
wrap-ansi: 6.2.0
inquirer@9.3.7:
dependencies:
'@inquirer/figures': 1.0.10
ansi-escapes: 4.3.2
cli-width: 4.1.0
external-editor: 3.1.0
mute-stream: 1.0.0
ora: 5.4.1
run-async: 3.0.0
rxjs: 7.8.2
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 6.2.0
yoctocolors-cjs: 2.1.2
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.1.0
ip-address@9.0.5:
dependencies:
jsbn: 1.1.0
sprintf-js: 1.1.3
is-any-array@2.0.1: {}
is-array-buffer@3.0.5:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
get-intrinsic: 1.3.0
is-async-function@2.1.1:
dependencies:
async-function: 1.0.0
call-bound: 1.0.3
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
is-callable@1.2.7: {}
is-core-module@2.16.1:
dependencies:
hasown: 2.0.2
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.3
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
is-date-object@1.1.0:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
is-extglob@2.1.1: {}
is-finalizationregistry@1.1.1:
dependencies:
call-bound: 1.0.3
is-fullwidth-code-point@3.0.0: {}
is-generator-function@1.1.0:
dependencies:
call-bound: 1.0.3
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-interactive@1.0.0: {}
is-map@2.0.3: {}
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
is-obj@2.0.0: {}
is-potential-custom-element-name@1.0.1: {}
is-regex@1.2.1:
dependencies:
call-bound: 1.0.3
gopd: 1.2.0
has-tostringtag: 1.0.2
hasown: 2.0.2
is-set@2.0.3: {}
is-shared-array-buffer@1.0.4:
dependencies:
call-bound: 1.0.3
is-stream@4.0.1: {}
is-string@1.1.1:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
is-symbol@1.1.1:
dependencies:
call-bound: 1.0.3
has-symbols: 1.1.0
safe-regex-test: 1.1.0
is-typed-array@1.1.15:
dependencies:
which-typed-array: 1.1.18
is-unicode-supported@0.1.0: {}
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
dependencies:
call-bound: 1.0.3
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.3
get-intrinsic: 1.3.0
isarray@2.0.5: {}
isexe@2.0.0: {}
iterator.prototype@1.1.5:
dependencies:
define-data-property: 1.1.4
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
get-proto: 1.0.1
has-symbols: 1.1.0
set-function-name: 2.0.2
jquery@3.7.1: {}
js-tokens@4.0.0: {}
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
jsbn@1.1.0: {}
jsdom@26.0.0:
dependencies:
cssstyle: 4.2.1
data-urls: 5.0.0
decimal.js: 10.5.0
form-data: 4.0.2
html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.16
parse5: 7.2.1
rrweb-cssom: 0.8.0
saxes: 6.0.0
symbol-tree: 3.2.4
tough-cookie: 5.1.1
w3c-xmlserializer: 5.0.0
webidl-conversions: 7.0.0
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
whatwg-url: 14.1.1
ws: 8.18.1
xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
json-buffer@3.0.1: {}
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
json5@1.0.2:
dependencies:
minimist: 1.2.8
json5@2.2.3: {}
jsonfile@6.1.0:
dependencies:
universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
jsx-ast-utils@3.3.5:
dependencies:
array-includes: 3.1.8
array.prototype.flat: 1.3.3
object.assign: 4.1.7
object.values: 1.2.1
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
language-subtag-registry@0.3.23: {}
language-tags@1.0.9:
dependencies:
language-subtag-registry: 0.3.23
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
linkedom@0.18.9:
dependencies:
css-select: 5.1.0
cssom: 0.5.0
html-escaper: 3.0.3
htmlparser2: 10.0.0
uhyphen: 0.2.0
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
lodash.isequal@4.5.0: {}
lodash.merge@4.6.2: {}
lodash@4.17.21: {}
log-symbols@4.1.0:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
lowercase-keys@3.0.0: {}
lru-cache@10.4.3: {}
map-stream@0.1.0: {}
math-intrinsics@1.1.0: {}
mime-db@1.52.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
mimic-fn@2.1.0: {}
mimic-response@3.1.0: {}
mimic-response@4.0.0: {}
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
minimist@1.2.8: {}
ml-array-max@1.2.4:
dependencies:
is-any-array: 2.0.1
ml-array-min@1.2.3:
dependencies:
is-any-array: 2.0.1
ml-array-rescale@1.3.7:
dependencies:
is-any-array: 2.0.1
ml-array-max: 1.2.4
ml-array-min: 1.2.3
ml-logistic-regression@2.0.0:
dependencies:
ml-matrix: 6.12.0
ml-matrix@6.12.0:
dependencies:
is-any-array: 2.0.1
ml-array-rescale: 1.3.7
ms@2.1.3: {}
mute-stream@0.0.8: {}
mute-stream@1.0.0: {}
nanoid@3.3.8: {}
natural-compare@1.4.0: {}
node-releases@2.0.19: {}
normalize-url@8.0.1: {}
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
nwsapi@2.2.16: {}
object-assign@4.1.1: {}
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
object.assign@4.1.7:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
es-object-atoms: 1.1.1
has-symbols: 1.1.0
object-keys: 1.1.1
object.entries@1.1.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-object-atoms: 1.1.1
object.fromentries@2.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-object-atoms: 1.1.1
object.groupby@1.0.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
object.values@1.2.1:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
es-object-atoms: 1.1.1
once@1.4.0:
dependencies:
wrappy: 1.0.2
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.4.1
prelude-ls: 1.2.1
type-check: 0.4.0
word-wrap: 1.2.5
ora@5.4.1:
dependencies:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
cli-spinners: 2.9.2
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
strip-ansi: 6.0.1
wcwidth: 1.0.1
os-tmpdir@1.0.2: {}
ow@0.28.2:
dependencies:
'@sindresorhus/is': 4.6.0
callsites: 3.1.0
dot-prop: 6.0.1
lodash.isequal: 4.5.0
vali-date: 1.0.0
ow@1.1.1:
dependencies:
'@sindresorhus/is': 5.6.0
callsites: 4.2.0
dot-prop: 7.2.0
lodash.isequal: 4.5.0
vali-date: 1.0.0
own-keys@1.0.1:
dependencies:
get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
p-cancelable@4.0.1: {}
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
p-try@2.2.0: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
parent-require@1.0.0: {}
parse5-htmlparser2-tree-adapter@7.1.0:
dependencies:
domhandler: 5.0.3
parse5: 7.2.1
parse5@7.2.1:
dependencies:
entities: 4.5.0
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
path-key@3.1.1: {}
path-parse@1.0.7: {}
pause-stream@0.0.11:
dependencies:
through: 2.3.8
peek-readable@6.1.1: {}
picocolors@1.1.1: {}
pkg-dir@4.2.0:
dependencies:
find-up: 4.1.0
possible-typed-array-names@1.1.0: {}
prelude-ls@1.2.1: {}
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
proper-lockfile@4.1.2:
dependencies:
graceful-fs: 4.2.11
retry: 0.12.0
signal-exit: 3.0.7
proxy-chain@2.5.6:
dependencies:
socks: 2.8.4
socks-proxy-agent: 8.0.5
tslib: 2.8.1
transitivePeerDependencies:
- supports-color
proxy-from-env@1.1.0: {}
punycode@2.3.1: {}
quick-lru@5.1.1: {}
quick-lru@7.0.0: {}
react-is@16.13.1: {}
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-errors: 1.3.0
get-proto: 1.0.1
gopd: 1.2.0
set-function-name: 2.0.2
require-directory@2.1.1: {}
resolve-alpn@1.2.1: {}
resolve-cwd@3.0.0:
dependencies:
resolve-from: 5.0.0
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
resolve@1.22.10:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@2.0.0-next.5:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
responselike@3.0.0:
dependencies:
lowercase-keys: 3.0.0
restore-cursor@3.1.0:
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
retry@0.12.0: {}
retry@0.13.1: {}
robots-parser@3.0.1: {}
rrweb-cssom@0.8.0: {}
run-async@2.4.1: {}
run-async@3.0.0: {}
rxjs@7.8.2:
dependencies:
tslib: 2.8.1
safe-array-concat@1.1.3:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
safe-buffer@5.2.1: {}
safe-push-apply@1.0.0:
dependencies:
es-errors: 1.3.0
isarray: 2.0.5
safe-regex-test@1.1.0:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-regex: 1.2.1
safer-buffer@2.1.2: {}
sax@1.4.1: {}
saxes@6.0.0:
dependencies:
xmlchars: 2.2.0
semver@6.3.1: {}
semver@7.7.1: {}
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.3.0
gopd: 1.2.0
has-property-descriptors: 1.0.2
set-function-name@2.0.2:
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
set-proto@1.0.0:
dependencies:
dunder-proto: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
get-intrinsic: 1.3.0
object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.4
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
signal-exit@3.0.7: {}
smart-buffer@4.2.0: {}
socks-proxy-agent@8.0.5:
dependencies:
agent-base: 7.1.3
debug: 4.4.0
socks: 2.8.4
transitivePeerDependencies:
- supports-color
socks@2.8.4:
dependencies:
ip-address: 9.0.5
smart-buffer: 4.2.0
split@0.3.3:
dependencies:
through: 2.3.8
sprintf-js@1.1.3: {}
stream-chain@2.2.5: {}
stream-combiner@0.0.4:
dependencies:
duplexer: 0.1.2
stream-json@1.9.1:
dependencies:
stream-chain: 2.2.5
string-comparison@1.3.0: {}
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string.prototype.includes@2.0.1:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-abstract: 1.23.9
string.prototype.matchall@4.0.12:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
es-object-atoms: 1.1.1
get-intrinsic: 1.3.0
gopd: 1.2.0
has-symbols: 1.1.0
internal-slot: 1.1.0
regexp.prototype.flags: 1.5.4
set-function-name: 2.0.2
side-channel: 1.1.0
string.prototype.repeat@1.0.0:
dependencies:
define-properties: 1.2.1
es-abstract: 1.23.9
string.prototype.trim@1.2.10:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-data-property: 1.1.4
define-properties: 1.2.1
es-abstract: 1.23.9
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
string.prototype.trimend@1.0.9:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
es-object-atoms: 1.1.1
string.prototype.trimstart@1.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-object-atoms: 1.1.1
string_decoder@1.3.0:
dependencies:
safe-buffer: 5.2.1
strip-ansi@3.0.1:
dependencies:
ansi-regex: 2.1.1
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
strip-bom@3.0.0: {}
strip-json-comments@3.1.1: {}
strtok3@10.2.1:
dependencies:
'@tokenizer/token': 0.3.0
peek-readable: 6.1.1
supports-color@2.0.0: {}
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
supports-preserve-symlinks-flag@1.0.0: {}
symbol-tree@3.2.4: {}
through@2.3.8: {}
tiny-typed-emitter@2.1.0: {}
tldts-core@6.1.78: {}
tldts@6.1.78:
dependencies:
tldts-core: 6.1.78
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
token-types@6.0.0:
dependencies:
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
tough-cookie@5.1.1:
dependencies:
tldts: 6.1.78
tr46@5.0.0:
dependencies:
punycode: 2.3.1
tsconfig-paths@3.15.0:
dependencies:
'@types/json5': 0.0.29
json5: 1.0.2
minimist: 1.2.8
strip-bom: 3.0.0
tslib@2.8.1: {}
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
type-fest@0.21.3: {}
type-fest@2.19.0: {}
type-fest@4.35.0: {}
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-typed-array: 1.1.15
typed-array-byte-length@1.0.3:
dependencies:
call-bind: 1.0.8
for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
typed-array-byte-offset@1.0.4:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
reflect.getprototypeof: 1.0.10
typed-array-length@1.0.7:
dependencies:
call-bind: 1.0.8
for-each: 0.3.5
gopd: 1.2.0
is-typed-array: 1.1.15
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
uhyphen@0.2.0: {}
uint8array-extras@1.4.0: {}
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.3
has-bigints: 1.1.0
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
undici-types@6.20.0: {}
universalify@2.0.1: {}
update-browserslist-db@1.1.2(browserslist@4.24.4):
dependencies:
browserslist: 4.24.4
escalade: 3.2.0
picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
util-deprecate@1.0.2: {}
vali-date@1.0.0: {}
w3c-xmlserializer@5.0.0:
dependencies:
xml-name-validator: 5.0.0
wcwidth@1.0.1:
dependencies:
defaults: 1.0.4
webidl-conversions@7.0.0: {}
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
whatwg-mimetype@4.0.0: {}
whatwg-url@14.1.1:
dependencies:
tr46: 5.0.0
webidl-conversions: 7.0.0
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
is-boolean-object: 1.2.2
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
which-builtin-type@1.2.1:
dependencies:
call-bound: 1.0.3
function.prototype.name: 1.1.8
has-tostringtag: 1.0.2
is-async-function: 2.1.1
is-date-object: 1.1.0
is-finalizationregistry: 1.1.1
is-generator-function: 1.1.0
is-regex: 1.2.1
is-weakref: 1.1.1
isarray: 2.0.5
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
which-typed-array: 1.1.18
which-collection@1.0.2:
dependencies:
is-map: 2.0.3
is-set: 2.0.3
is-weakmap: 2.0.2
is-weakset: 2.0.4
which-typed-array@1.1.18:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
call-bound: 1.0.3
for-each: 0.3.5
gopd: 1.2.0
has-tostringtag: 1.0.2
which@2.0.2:
dependencies:
isexe: 2.0.0
word-wrap@1.2.5: {}
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
wrappy@1.0.2: {}
ws@8.18.1: {}
xml-name-validator@5.0.0: {}
xmlchars@2.2.0: {}
y18n@5.0.8: {}
yargonaut@1.1.4:
dependencies:
chalk: 1.1.3
figlet: 1.8.0
parent-require: 1.0.0
yargs-parser@21.1.1: {}
yargs@17.7.2:
dependencies:
cliui: 8.0.1
escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
yocto-queue@0.1.0: {}
yoctocolors-cjs@2.1.2: {}