//! HTTP and protocol constants used to emulate the YOPmail web UI.
//!
//! Most users should not need anything in this module besides the items re-exported at the crate
//! root (for example [`BASE_URL`], [`DEFAULT_DOMAIN`], [`ALT_DOMAINS`], and [`default_timeout`]).
//! The remaining values exist to support the internal request/parse logic.
use reqwest::header::{HeaderMap, HeaderName, HeaderValue};
use std::time::Duration;
/// Default base URL used by [`YopmailClient`](crate::YopmailClient).
pub const BASE_URL: &str = "https://yopmail.com";
/// Default domain used when a mailbox is provided as `local` without `@domain`.
pub const DEFAULT_DOMAIN: &str = "yopmail.com";
/// Known YOPmail-related domains used for address validation and compatibility.
pub const ALT_DOMAINS: &[&str] = &[
"0cd.cn",
"1nom.org",
"1xp.fr",
"15963.fr.nf",
"a.kwtest.io",
"abo-free.fr.nf",
"ac-malin.fr.nf",
"actarus.infos.st",
"adresse.biz.st",
"adresse.infos.st",
"afw.fr.nf",
"altrans.fr.nf",
"alves.fr.nf",
"alphax.fr.nf",
"alyxgod.rf.gd",
"antispam.fr.nf",
"antispam.rf.gd",
"assurmail.net",
"autre.fr.nf",
"bahoo.biz.st",
"bboys.fr.nf",
"bibi.biz.st",
"bin-ich.com",
"binich.com",
"blip.ovh",
"c-eric.fr.nf",
"cabiste.fr.nf",
"calendro.fr.nf",
"calima.asso.st",
"carioca.biz.st",
"carnesa.biz.st",
"cc.these.cc",
"certexx.fr.nf",
"cloudsign.in",
"cobal.infos.st",
"contact.biz.st",
"contact.infos.st",
"cookie007.fr.nf",
"cool.fr.nf",
"courriel.fr.nf",
"cpc.cx",
"cubox.biz.st",
"dann.mywire.org",
"dede.infos.st",
"degap.fr.nf",
"desfrenes.fr.nf",
"dis.hopto.org",
"dlvr.us.to",
"dmts.fr.nf",
"donemail.my.id",
"dreamgreen.fr.nf",
"dripzgaming.com",
"druzik.pp.ua",
"ealea.fr.nf",
"elmail.4pu.com",
"emaildark.fr.nf",
"emocan.name.tr",
"enpa.rf.gd",
"eooo.mooo.com",
"faybetsy.com",
"fhpfhp.fr.nf",
"fiallaspares.com",
"flobo.fr.nf",
"flaimenet.ir",
"freemail.biz.st",
"frostmail.fr.nf",
"galaxim.fr.nf",
"get.route64.de",
"get.vpn64.de",
"gimuemoa.fr.nf",
"gland.xxl.st",
"ggamess.42web.io",
"ggmail.biz.st",
"gmail.gob.re",
"gladogmi.fr.nf",
"haben-wir.com",
"habenwir.com",
"himail.infos.st",
"hunnur.com",
"iamfrank.rf.gd",
"iuse.ydns.eu",
"imap.fr.nf",
"internaut.us.to",
"isep.fr.nf",
"ist-hier.com",
"iya.fr.nf",
"jmail.fr.nf",
"jetable.fr.nf",
"jetable.org",
"jinva.fr.nf",
"kyuusei.fr.nf",
"lacraffe.fr.nf",
"le.monchu.fr",
"lerch.ovh",
"likeageek.fr.nf",
"m.tartinemoi.com",
"ma.ezua.com",
"ma.zyns.com",
"ma1l.duckdns.org",
"mabal.fr.nf",
"machen-wir.com",
"mail.berwie.com",
"mail.hsmw.net",
"mail.i-dork.com",
"mail.kakator.com",
"mail.tbr.fr.nf",
"mail.xstyled.net",
"mail.yabes.ovh",
"mailadresi.tk",
"mailbox.biz.st",
"mailsafe.fr.nf",
"mai.25u.com",
"mcdomaine.fr.nf",
"mc-fly.be",
"mickaben.biz.st",
"mickaben.fr.nf",
"mickaben.xxl.st",
"miloras.fr.nf",
"miistermail.fr",
"mondial.asso.st",
"moncourrier.fr.nf",
"monemail.fr.nf",
"monmail.fr.nf",
"mynes.com",
"mymail.infos.st",
"mymailbox.xxl.st",
"mymaildo.kro.kr",
"myself.fr.nf",
"nikora.biz.st",
"nikora.fr.nf",
"nidokela.biz.st",
"noreply.fr",
"nospam.fr.nf",
"noyp.fr.nf",
"omicron.token.ro",
"pamil.fr.nf",
"pepamail.com",
"pixelgagnant.net",
"pitimail.xxl.st",
"pliz.fr.nf",
"pochtac.ru",
"pokemons1.fr.nf",
"pooo.ooguy.com",
"popol.fr.nf",
"poubelle-du.net",
"poubelle.fr.nf",
"q0.us.to",
"rapidefr.fr.nf",
"randol.infos.st",
"readmail.biz.st",
"redi.fr.nf",
"rygel.infos.st",
"sdj.fr.nf",
"sendos.fr.nf",
"sendos.infos.st",
"sirttest.us.to",
"six25.biz",
"sind-hier.com",
"sind-wir.com",
"sindhier.com",
"sindwir.com",
"skynet.infos.st",
"spam.aleh.de",
"spam.quillet.eu",
"super.lgbt",
"tagara.infos.st",
"terre.infos.st",
"test-infos.fr.nf",
"test.inclick.net",
"tivo.camdvr.org",
"tmp.x-lab.net",
"toolbox.ovh",
"torrent411.fr.nf",
"totococo.fr.nf",
"tshirtsavvy.com",
"tweet.fr.nf",
"upc.infos.st",
"ves.ink",
"vip.ep77.com",
"vitahicks.com",
"vigilantkeep.net",
"webclub.infos.st",
"webstore.fr.nf",
"whatagarbage.com",
"wishy.fr",
"wir-sind.com",
"woofidog.fr.nf",
"wxcv.fr.nf",
"yaloo.fr.nf",
"yahooz.xxl.st",
"yop.iotf.net",
"yop.kd2.org",
"yop.kyriog.fr",
"yop.mabox.eu",
"yop.mc-fly.be",
"yop.moolee.net",
"yop.smeux.com",
"yop.too.li",
"yop.uuii.in",
"yopmail.com",
"yopmail.fr",
"yopmail.kro.kr",
"yopmail.net",
"yopmail.ozm.fr",
"yopmail.pp.ua",
"yopmail.sehier.fr",
"yopmail.to",
"yopmail.ydns.eu",
"yopmail.yop",
"yoptruc.fr.nf",
"yoptruc.yop",
"yoptruc.ydns.eu",
"yopmail.ydns.eu",
"yopmail.ozm",
"yopmail.ozm.net",
"yotmail.fr.nf",
"ypmail.sehier.fr",
"yopmail.pp",
"yopmail.too.li",
"yopmail.co.pl",
"yopmail.kd2.org",
"yopmail.mabox.eu",
"yopmail.moolee.net",
"yopmail.smeux.com",
"yopmail.uuii.in",
"yopmail.xl.cx",
"ym.cypi.fr",
"ym.digi-value.fr",
"yopmail.net.in",
"yopmail.net3",
"yopmail.net4",
"yopmail.net5",
"yopmail.net6",
"yopmail.net7",
"yopmail.net8",
"yopmail.net9",
"yopmail.net10",
"yopmail.net11",
"yopmail.net12",
"yopmail.net13",
"yopmail.net14",
"yopmail.net15",
"yopmail.net16",
"yopmail.net17",
"yopmail.net18",
"yopmail.net19",
"yopmail.net20",
"yopmail.net21",
"yopmail.net22",
"yopmail.net23",
"yopmail.net24",
"yopmail.net25",
"yopmail.net26",
"yopmail.net27",
"yopmail.net28",
"yopmail.net29",
"yopmail.net30",
"yopmail.net31",
"yopmail.net32",
"yopmail.net33",
"yopmail.net34",
"yopmail.net35",
"yopmail.net36",
"yopmail.net37",
"yopmail.net38",
"yopmail.net39",
"yopmail.net40",
"yopmail.net41",
"yopmail.net42",
"yopmail.net43",
"yopmail.net44",
"yopmail.net45",
"yopmail.net46",
"yopmail.net47",
"yopmail.net48",
"yopmail.net49",
"yopmail.net50",
"yopmail.net51",
"yopmail.net52",
"yopmail.net53",
"yopmail.net54",
"yopmail.net55",
"yopmail.net56",
"yopmail.net57",
"yopmail.net58",
"yopmail.net59",
"yopmail.net60",
"yopmail.net61",
"yopmail.net62",
"yopmail.net63",
"yopmail.net64",
"yopmail.net65",
"yopmail.net66",
"yopmail.net67",
"yopmail.net68",
"yopmail.net69",
"yopmail.net70",
"yopmail.net71",
"yopmail.net72",
"yopmail.net73",
"yopmail.net74",
"yopmail.net75",
"yopmail.net76",
"yopmail.net77",
"yopmail.net78",
"yopmail.net79",
"yopmail.net80",
"yopmail.net81",
"yopmail.net82",
"yopmail.net83",
"yopmail.net84",
"yopmail.net85",
"yopmail.net86",
"yopmail.net87",
"yopmail.net88",
"yopmail.net89",
"yopmail.net90",
"yopmail.net91",
"yopmail.net92",
"yopmail.net93",
"yopmail.net94",
"yopmail.net95",
"yopmail.net96",
"yopmail.net97",
"yopmail.net98",
"yopmail.net99",
"yopmail.net100",
"yopmail.net101",
"yopmail.net102",
"yopmail.net103",
"yopmail.net104",
"yopmail.net105",
"yopmail.net106",
"yopmail.net107",
"yopmail.net108",
"yopmail.net109",
"yopmail.net110",
"yopmail.net111",
"yopmail.net112",
"yopmail.net113",
"yopmail.net114",
"yopmail.net115",
"yopmail.net116",
"yopmail.net117",
"yopmail.net118",
"yopmail.net119",
"yopmail.net120",
"yopmail.net121",
"yopmail.net122",
"yopmail.net123",
"yopmail.net124",
"yopmail.net125",
"yopmail.net126",
"yopmail.net127",
"yopmail.net128",
"yopmail.net129",
"yopmail.net130",
"yopmail.net131",
"yopmail.net132",
"yopmail.net133",
"yopmail.net134",
"yopmail.net135",
"yopmail.net136",
"yopmail.net137",
"yopmail.net138",
"yopmail.net139",
"yopmail.net140",
"yopmail.net141",
"yopmail.net142",
"yopmail.net143",
"yopmail.net144",
"yopmail.net145",
"yopmail.net146",
"yopmail.net147",
"yopmail.net148",
"yopmail.net149",
"yopmail.net150",
"yopmail.net151",
"yopmail.net152",
"yopmail.net153",
"yopmail.net154",
"yopmail.net155",
"yopmail.net156",
"yopmail.net157",
"yopmail.net158",
"yopmail.net159",
"yopmail.net160",
"yopmail.net161",
"yopmail.net162",
"yopmail.net163",
"yopmail.net164",
"yopmail.net165",
"yopmail.net166",
"yopmail.net167",
"yopmail.net168",
"yopmail.net169",
"yopmail.net170",
"yopmail.net171",
"yopmail.net172",
"yopmail.net173",
"yopmail.net174",
"yopmail.net175",
"yopmail.net176",
"yopmail.net177",
"yopmail.net178",
"yopmail.net179",
"yopmail.net180",
"yopmail.net181",
"yopmail.net182",
"yopmail.net183",
"yopmail.net184",
"yopmail.net185",
"yopmail.net186",
"yopmail.net187",
"yopmail.net188",
"yopmail.net189",
"yopmail.net190",
"yopmail.net191",
"yopmail.net192",
"yopmail.net193",
"yopmail.net194",
"yopmail.net195",
"yopmail.net196",
"yopmail.net197",
"yopmail.net198",
"yopmail.net199",
"yopmail.net200",
"yopmail.net",
"ypmail.sehier.fr",
"y.dldweb.info",
"ym.cypi.fr",
"ym.digi-value.fr",
"yop.mailadresi.tk",
"yopmail.pp.ua",
"yopmail.net.cn",
"yopmail.net.fr",
"yopmail.pp.ua",
"yopmail.co.uk",
"yopmail.ca",
"yopmail.pp.ua",
"yopmail.net.in",
"yopmail.org",
"yopmail.mx",
"yopmail.my",
"yopmail.me",
"yopmail.de",
"yopmail.pl",
"yopmail.gr",
"yopmail.nl",
"yopmail.it",
"yopmail.es",
"yopmail.pt",
"yopmail.se",
"yopmail.no",
"yopmail.fi",
"yopmail.dk",
"yopmail.be",
"yopmail.ch",
"yopmail.at",
"yopmail.hu",
"yopmail.cz",
"yopmail.sk",
"yopmail.si",
"yopmail.hr",
"yopmail.ba",
"yopmail.rs",
"yopmail.bg",
"yopmail.ro",
"yopmail.ua",
"yopmail.by",
"yopmail.lt",
"yopmail.lv",
"yopmail.ee",
"yopmail.ge",
"yopmail.am",
"yopmail.kz",
"yopmail.uz",
"yopmail.tj",
"yopmail.tr",
"yopmail.az",
"yopmail.iq",
"yopmail.il",
"yopmail.sa",
"yopmail.qa",
"yopmail.ae",
"yopmail.ir",
"yopmail.pk",
"yopmail.in",
"yopmail.lk",
"yopmail.bd",
"yopmail.th",
"yopmail.id",
"yopmail.sg",
"yopmail.ph",
"yopmail.vn",
"yopmail.la",
"yopmail.kh",
"yopmail.mm",
"yopmail.kr",
"yopmail.jp",
"yopmail.hk",
"yopmail.tw",
"yopmail.cn",
"yopmail.co.jp",
"yopmail.com.au",
"yopmail.co.nz",
"yopmail.za",
"yopmail.ng",
"yopmail.ke",
"yopmail.tz",
"yopmail.rw",
"yopmail.ug",
"yopmail.mg",
"yopmail.ma",
"yopmail.dz",
"yopmail.tn",
"yopmail.ly",
"yopmail.eg",
"yopmail.co.ke",
"yopmail.co.ug",
"yopmail.co.za",
"yopmail.com.ng",
"yopmail.com",
"yopmail.fr",
"yopmail.net",
"yopmail.pp.ua",
];
/// Version parameter used by the YOPmail inbox/mail endpoints.
pub const VERSION: &str = "9.2";
/// Token parameter used by the YOPmail inbox/mail endpoints.
pub const YJ_TOKEN: &str = "IZwx0AGH1BQxjBQx1ZmNmBQR";
/// "ad" query parameter used by the YOPmail inbox/mail endpoints.
pub const AD_PARAM: i32 = 0;
/// Default timeout in seconds used by [`default_timeout`].
pub const DEFAULT_TIMEOUT_SECS: u64 = 30;
/// Default cookie values used by the client.
///
/// Updated from the Python client snapshot (October 14, 2025).
pub const DEFAULT_COOKIES: &[(&str, &str)] = &[
("yc", "EAGNlBGD2Awx4ZmpkZGN4ZQV"),
("yses", "zz6dtenHstru+L/GLPPQD4a5iJbTzoLzBsyP3HkfhNIwBQRWRdGPgRYto8uoBVoi"),
("FCNEC", "%5B%5B%22AKsRol_6F42HOVxM6EaK5AzHHz6pBZ_s5IEy0SEsxyy-uoiU8y8_xL4dEzrZFin7v--j4O2_PFq0BRr3_VLVsDP3GGZGL2OsU1ZWEokkR_RZ_jBrvi4Xp4fFvcD1SJdlzRJsLemj_U5VBJ7SdrdAe49PIX4OE2eYyA%3D%3D%22%5D%5D"),
("FCCDCF", "%5Bnull%2Cnull%2Cnull%2C%5B%22CQWjP4AQWjP4AEsACBENB5FoAP_gAEPgAAqIK1IB_C7EbCFCiDp3IKMEMAhHABBAYsAwAAYBAwAADBIQIAQCgkEYBASAFCACCAAAKASBAAAgCAAAAUAAIAAVAABAAAwAIBAIIAAAgAAAAEAIAAAACIAAEQCAAAAEAEAAkAgAAAIASAAAAAAAAACBAAAAAAAAAAAAAAAABAAAAQAAQAAAAAAAiAAAAAAAABAIAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAABAAAAAAAQR2QD-F2I2EKFEHCuQUYIYBCuACAAxYBgAAwCBgAAGCQgQAgFJIIkCAEAIEAAEAAAQAgCAABQEBAAAIAAAAAqAACAABgAQCAQQIABAAAAgIAAAAAAEQAAIgEAAAAIAIABABAAAAQAkAAAAAAAAAECAAAAAAAAAAAAAAAAAAAAAEABgAAAAAABEAAAAAAAACAQIAAA.cAAAAAAAAAA%22%2C%222~61.89.122.184.196.230.314.442.445.494.550.576.827.1029.1033.1046.1047.1051.1097.1126.1166.1301.1342.1415.1725.1765.1942.1958.1987.2068.2072.2074.2107.2213.2219.2223.2224.2328.2331.2387.2416.2501.2567.2568.2575.2657.2686.2778.2869.2878.2908.2920.2963.3005.3023.3100.3126.3219.3234.3235.3253.3309.3731.6931.8931.13731.15731~dv.%22%2C%220300B232-3BBA-4065-9DF9-FA0EF3FB75D7%22%5D%5D"),
("compte", "testuserauto2:righthandpath:testuserauto3:testuserx:testuserauto1:test_agent_a_20251012t221230z:test_agent_b_20251012t221230z:owner:advertiser:asdhsdaq"),
("__eoi", "ID=35600ad0fb561277:T=1755902461:RT=1760393936:S=AA-AfjbMAapjaFGpb5UM0DMBDBj6"),
("__gads", "ID=50e1fb970662d3ce:T=1755902461:RT=1760393936:S=ALNI_MY3XfyUKaP7QZR4LLOzYjceTyPLsg"),
("__gpi", "UID=0000126838c12cc0:T=1755902461:RT=1758731437:S=ALNI_MZv-G62t2o_oOP7-v_-_5Odq56sWA"),
("ywm", "testuserauto2"),
];
/// Build the default HTTP headers used by this client.
///
/// This converts [`DEFAULT_HEADERS`] into a `reqwest::header::HeaderMap`, skipping any values that
/// fail to parse.
pub fn default_headers() -> HeaderMap {
let mut headers = HeaderMap::new();
for (k, v) in DEFAULT_HEADERS {
let name = HeaderName::from_static(k);
if let Ok(val) = HeaderValue::from_str(v) {
headers.insert(name, val);
}
}
headers
}
/// Default header pairs used by [`default_headers`].
pub const DEFAULT_HEADERS: &[(&str, &str)] = &[
("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"),
("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
("accept-language", "en-US,en;q=0.5"),
("accept-encoding", "gzip, deflate"),
("connection", "keep-alive"),
("upgrade-insecure-requests", "1"),
];
/// Extra headers used for inbox listing requests.
pub const INBOX_HEADERS: &[(&str, &str)] = &[
("referer", "https://yopmail.com/wm"),
("sec-fetch-dest", "iframe"),
("sec-fetch-mode", "navigate"),
("sec-fetch-site", "same-origin"),
];
/// Extra headers used for mail fetch requests.
pub const MAIL_HEADERS: &[(&str, &str)] = &[
("referer", "https://yopmail.com/en/wm"),
("sec-fetch-dest", "iframe"),
("sec-fetch-mode", "navigate"),
("sec-fetch-site", "same-origin"),
("sec-fetch-user", "?1"),
("upgrade-insecure-requests", "1"),
];
/// Extra headers used for message sending requests.
pub const SEND_HEADERS: &[(&str, &str)] = &[
("content-type", "application/x-www-form-urlencoded"),
("origin", "https://yopmail.com"),
("referer", "https://yopmail.com/wm"),
("accept", "*/*"),
("accept-language", "en-US,en;q=0.9,de-DE;q=0.8,de;q=0.7"),
("accept-encoding", "gzip, deflate, br, zstd"),
("sec-fetch-dest", "empty"),
("sec-fetch-mode", "cors"),
("sec-fetch-site", "same-origin"),
("priority", "u=1, i"),
];
/// Prefix commonly used by YOPmail message IDs in the inbox DOM.
pub const MESSAGE_ID_PREFIX: &str = "me_";
/// Fallback `yp` token used when the login page does not contain an extractable value.
pub const FALLBACK_YP_TOKEN: &str = "ZAGplZmp0ZmR3ZQN4ZGx1ZGR";
/// Default request timeout used by the client.
pub fn default_timeout() -> Duration {
Duration::from_secs(DEFAULT_TIMEOUT_SECS)
}