email-tld-validator 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1572 @@
1
+ var source = "IANA Root Zone Database";
2
+ var updatedAt = "2026-06-13";
3
+ var count = 1437;
4
+ var tlds = [
5
+ "aaa",
6
+ "aarp",
7
+ "abb",
8
+ "abbott",
9
+ "abbvie",
10
+ "abc",
11
+ "able",
12
+ "abogado",
13
+ "abudhabi",
14
+ "ac",
15
+ "academy",
16
+ "accenture",
17
+ "accountant",
18
+ "accountants",
19
+ "aco",
20
+ "actor",
21
+ "ad",
22
+ "ads",
23
+ "adult",
24
+ "ae",
25
+ "aeg",
26
+ "aero",
27
+ "aetna",
28
+ "af",
29
+ "afl",
30
+ "africa",
31
+ "ag",
32
+ "agakhan",
33
+ "agency",
34
+ "ai",
35
+ "aig",
36
+ "airbus",
37
+ "airforce",
38
+ "airtel",
39
+ "akdn",
40
+ "al",
41
+ "alibaba",
42
+ "alipay",
43
+ "allfinanz",
44
+ "allstate",
45
+ "ally",
46
+ "alsace",
47
+ "alstom",
48
+ "am",
49
+ "amazon",
50
+ "americanexpress",
51
+ "americanfamily",
52
+ "amex",
53
+ "amfam",
54
+ "amica",
55
+ "amsterdam",
56
+ "analytics",
57
+ "android",
58
+ "anquan",
59
+ "anz",
60
+ "ao",
61
+ "aol",
62
+ "apartments",
63
+ "app",
64
+ "apple",
65
+ "aq",
66
+ "aquarelle",
67
+ "ar",
68
+ "arab",
69
+ "aramco",
70
+ "archi",
71
+ "army",
72
+ "arpa",
73
+ "art",
74
+ "arte",
75
+ "as",
76
+ "asda",
77
+ "asia",
78
+ "associates",
79
+ "at",
80
+ "athleta",
81
+ "attorney",
82
+ "au",
83
+ "auction",
84
+ "audi",
85
+ "audible",
86
+ "audio",
87
+ "auspost",
88
+ "author",
89
+ "auto",
90
+ "autos",
91
+ "aw",
92
+ "aws",
93
+ "ax",
94
+ "axa",
95
+ "az",
96
+ "azure",
97
+ "ba",
98
+ "baby",
99
+ "baidu",
100
+ "banamex",
101
+ "band",
102
+ "bank",
103
+ "bar",
104
+ "barcelona",
105
+ "barclaycard",
106
+ "barclays",
107
+ "barefoot",
108
+ "bargains",
109
+ "baseball",
110
+ "basketball",
111
+ "bauhaus",
112
+ "bayern",
113
+ "bb",
114
+ "bbc",
115
+ "bbt",
116
+ "bbva",
117
+ "bcg",
118
+ "bcn",
119
+ "bd",
120
+ "be",
121
+ "beats",
122
+ "beauty",
123
+ "beer",
124
+ "berlin",
125
+ "best",
126
+ "bestbuy",
127
+ "bet",
128
+ "bf",
129
+ "bg",
130
+ "bh",
131
+ "bharti",
132
+ "bi",
133
+ "bible",
134
+ "bid",
135
+ "bike",
136
+ "bing",
137
+ "bingo",
138
+ "bio",
139
+ "biz",
140
+ "bj",
141
+ "black",
142
+ "blackfriday",
143
+ "blockbuster",
144
+ "blog",
145
+ "bloomberg",
146
+ "blue",
147
+ "bm",
148
+ "bms",
149
+ "bmw",
150
+ "bn",
151
+ "bnpparibas",
152
+ "bo",
153
+ "boats",
154
+ "boehringer",
155
+ "bofa",
156
+ "bom",
157
+ "bond",
158
+ "boo",
159
+ "book",
160
+ "booking",
161
+ "bosch",
162
+ "bostik",
163
+ "boston",
164
+ "bot",
165
+ "boutique",
166
+ "box",
167
+ "br",
168
+ "bradesco",
169
+ "bridgestone",
170
+ "broadway",
171
+ "broker",
172
+ "brother",
173
+ "brussels",
174
+ "bs",
175
+ "bt",
176
+ "build",
177
+ "builders",
178
+ "business",
179
+ "buy",
180
+ "buzz",
181
+ "bv",
182
+ "bw",
183
+ "by",
184
+ "bz",
185
+ "bzh",
186
+ "ca",
187
+ "cab",
188
+ "cafe",
189
+ "cal",
190
+ "call",
191
+ "calvinklein",
192
+ "cam",
193
+ "camera",
194
+ "camp",
195
+ "canon",
196
+ "capetown",
197
+ "capital",
198
+ "capitalone",
199
+ "car",
200
+ "caravan",
201
+ "cards",
202
+ "care",
203
+ "career",
204
+ "careers",
205
+ "cars",
206
+ "casa",
207
+ "case",
208
+ "cash",
209
+ "casino",
210
+ "cat",
211
+ "catering",
212
+ "catholic",
213
+ "cba",
214
+ "cbn",
215
+ "cbre",
216
+ "cc",
217
+ "cd",
218
+ "center",
219
+ "ceo",
220
+ "cern",
221
+ "cf",
222
+ "cfa",
223
+ "cfd",
224
+ "cg",
225
+ "ch",
226
+ "chanel",
227
+ "channel",
228
+ "charity",
229
+ "chase",
230
+ "chat",
231
+ "cheap",
232
+ "chintai",
233
+ "christmas",
234
+ "chrome",
235
+ "church",
236
+ "ci",
237
+ "cipriani",
238
+ "circle",
239
+ "cisco",
240
+ "citadel",
241
+ "citi",
242
+ "citic",
243
+ "city",
244
+ "ck",
245
+ "cl",
246
+ "claims",
247
+ "cleaning",
248
+ "click",
249
+ "clinic",
250
+ "clinique",
251
+ "clothing",
252
+ "cloud",
253
+ "club",
254
+ "clubmed",
255
+ "cm",
256
+ "cn",
257
+ "co",
258
+ "coach",
259
+ "codes",
260
+ "coffee",
261
+ "college",
262
+ "cologne",
263
+ "com",
264
+ "commbank",
265
+ "community",
266
+ "company",
267
+ "compare",
268
+ "computer",
269
+ "comsec",
270
+ "condos",
271
+ "construction",
272
+ "consulting",
273
+ "contact",
274
+ "contractors",
275
+ "cooking",
276
+ "cool",
277
+ "coop",
278
+ "corsica",
279
+ "country",
280
+ "coupon",
281
+ "coupons",
282
+ "courses",
283
+ "cpa",
284
+ "cr",
285
+ "credit",
286
+ "creditcard",
287
+ "creditunion",
288
+ "cricket",
289
+ "crown",
290
+ "crs",
291
+ "cruise",
292
+ "cruises",
293
+ "cu",
294
+ "cuisinella",
295
+ "cv",
296
+ "cw",
297
+ "cx",
298
+ "cy",
299
+ "cymru",
300
+ "cyou",
301
+ "cz",
302
+ "dad",
303
+ "dance",
304
+ "data",
305
+ "date",
306
+ "dating",
307
+ "datsun",
308
+ "day",
309
+ "dclk",
310
+ "dds",
311
+ "de",
312
+ "deal",
313
+ "dealer",
314
+ "deals",
315
+ "degree",
316
+ "delivery",
317
+ "dell",
318
+ "deloitte",
319
+ "delta",
320
+ "democrat",
321
+ "dental",
322
+ "dentist",
323
+ "desi",
324
+ "design",
325
+ "dev",
326
+ "dhl",
327
+ "diamonds",
328
+ "diet",
329
+ "digital",
330
+ "direct",
331
+ "directory",
332
+ "discount",
333
+ "discover",
334
+ "dish",
335
+ "diy",
336
+ "dj",
337
+ "dk",
338
+ "dm",
339
+ "dnp",
340
+ "do",
341
+ "docs",
342
+ "doctor",
343
+ "dog",
344
+ "domains",
345
+ "dot",
346
+ "download",
347
+ "drive",
348
+ "dtv",
349
+ "dubai",
350
+ "dupont",
351
+ "durban",
352
+ "dvag",
353
+ "dvr",
354
+ "dz",
355
+ "earth",
356
+ "eat",
357
+ "ec",
358
+ "eco",
359
+ "edeka",
360
+ "edu",
361
+ "education",
362
+ "ee",
363
+ "eg",
364
+ "email",
365
+ "emerck",
366
+ "energy",
367
+ "engineer",
368
+ "engineering",
369
+ "enterprises",
370
+ "epson",
371
+ "equipment",
372
+ "er",
373
+ "ericsson",
374
+ "erni",
375
+ "es",
376
+ "esq",
377
+ "estate",
378
+ "et",
379
+ "eu",
380
+ "eurovision",
381
+ "eus",
382
+ "events",
383
+ "exchange",
384
+ "expert",
385
+ "exposed",
386
+ "express",
387
+ "extraspace",
388
+ "fage",
389
+ "fail",
390
+ "fairwinds",
391
+ "faith",
392
+ "family",
393
+ "fan",
394
+ "fans",
395
+ "farm",
396
+ "farmers",
397
+ "fashion",
398
+ "fast",
399
+ "fedex",
400
+ "feedback",
401
+ "ferrari",
402
+ "ferrero",
403
+ "fi",
404
+ "fidelity",
405
+ "fido",
406
+ "film",
407
+ "final",
408
+ "finance",
409
+ "financial",
410
+ "fire",
411
+ "firestone",
412
+ "firmdale",
413
+ "fish",
414
+ "fishing",
415
+ "fit",
416
+ "fitness",
417
+ "fj",
418
+ "fk",
419
+ "flickr",
420
+ "flights",
421
+ "flir",
422
+ "florist",
423
+ "flowers",
424
+ "fly",
425
+ "fm",
426
+ "fo",
427
+ "foo",
428
+ "food",
429
+ "football",
430
+ "ford",
431
+ "forex",
432
+ "forsale",
433
+ "forum",
434
+ "foundation",
435
+ "fox",
436
+ "fr",
437
+ "free",
438
+ "fresenius",
439
+ "frl",
440
+ "frogans",
441
+ "frontier",
442
+ "ftr",
443
+ "fujitsu",
444
+ "fun",
445
+ "fund",
446
+ "furniture",
447
+ "futbol",
448
+ "fyi",
449
+ "ga",
450
+ "gal",
451
+ "gallery",
452
+ "gallo",
453
+ "gallup",
454
+ "game",
455
+ "games",
456
+ "gap",
457
+ "garden",
458
+ "gay",
459
+ "gb",
460
+ "gbiz",
461
+ "gd",
462
+ "gdn",
463
+ "ge",
464
+ "gea",
465
+ "gent",
466
+ "genting",
467
+ "george",
468
+ "gf",
469
+ "gg",
470
+ "ggee",
471
+ "gh",
472
+ "gi",
473
+ "gift",
474
+ "gifts",
475
+ "gives",
476
+ "giving",
477
+ "gl",
478
+ "glass",
479
+ "gle",
480
+ "global",
481
+ "globo",
482
+ "gm",
483
+ "gmail",
484
+ "gmbh",
485
+ "gmo",
486
+ "gmx",
487
+ "gn",
488
+ "godaddy",
489
+ "gold",
490
+ "goldpoint",
491
+ "golf",
492
+ "goodyear",
493
+ "goog",
494
+ "google",
495
+ "gop",
496
+ "got",
497
+ "gov",
498
+ "gp",
499
+ "gq",
500
+ "gr",
501
+ "grainger",
502
+ "graphics",
503
+ "gratis",
504
+ "green",
505
+ "gripe",
506
+ "grocery",
507
+ "group",
508
+ "gs",
509
+ "gt",
510
+ "gu",
511
+ "gucci",
512
+ "guge",
513
+ "guide",
514
+ "guitars",
515
+ "guru",
516
+ "gw",
517
+ "gy",
518
+ "hair",
519
+ "hamburg",
520
+ "hangout",
521
+ "haus",
522
+ "hbo",
523
+ "hdfc",
524
+ "hdfcbank",
525
+ "health",
526
+ "healthcare",
527
+ "help",
528
+ "helsinki",
529
+ "here",
530
+ "hermes",
531
+ "hiphop",
532
+ "hisamitsu",
533
+ "hitachi",
534
+ "hiv",
535
+ "hk",
536
+ "hkt",
537
+ "hm",
538
+ "hn",
539
+ "hockey",
540
+ "holdings",
541
+ "holiday",
542
+ "homedepot",
543
+ "homegoods",
544
+ "homes",
545
+ "homesense",
546
+ "honda",
547
+ "horse",
548
+ "hospital",
549
+ "host",
550
+ "hosting",
551
+ "hot",
552
+ "hotels",
553
+ "hotmail",
554
+ "house",
555
+ "how",
556
+ "hr",
557
+ "hsbc",
558
+ "ht",
559
+ "hu",
560
+ "hughes",
561
+ "hyatt",
562
+ "hyundai",
563
+ "ibm",
564
+ "icbc",
565
+ "ice",
566
+ "icu",
567
+ "id",
568
+ "ie",
569
+ "ieee",
570
+ "ifm",
571
+ "ikano",
572
+ "il",
573
+ "im",
574
+ "imamat",
575
+ "imdb",
576
+ "immo",
577
+ "immobilien",
578
+ "in",
579
+ "inc",
580
+ "industries",
581
+ "infiniti",
582
+ "info",
583
+ "ing",
584
+ "ink",
585
+ "institute",
586
+ "insurance",
587
+ "insure",
588
+ "int",
589
+ "international",
590
+ "intuit",
591
+ "investments",
592
+ "io",
593
+ "ipiranga",
594
+ "iq",
595
+ "ir",
596
+ "irish",
597
+ "is",
598
+ "ismaili",
599
+ "ist",
600
+ "istanbul",
601
+ "it",
602
+ "itau",
603
+ "itv",
604
+ "jaguar",
605
+ "java",
606
+ "jcb",
607
+ "je",
608
+ "jeep",
609
+ "jetzt",
610
+ "jewelry",
611
+ "jio",
612
+ "jll",
613
+ "jm",
614
+ "jmp",
615
+ "jnj",
616
+ "jo",
617
+ "jobs",
618
+ "joburg",
619
+ "jot",
620
+ "joy",
621
+ "jp",
622
+ "jpmorgan",
623
+ "jprs",
624
+ "juegos",
625
+ "juniper",
626
+ "kaufen",
627
+ "kddi",
628
+ "ke",
629
+ "kerryhotels",
630
+ "kerryproperties",
631
+ "kfh",
632
+ "kg",
633
+ "kh",
634
+ "ki",
635
+ "kia",
636
+ "kids",
637
+ "kim",
638
+ "kindle",
639
+ "kitchen",
640
+ "kiwi",
641
+ "km",
642
+ "kn",
643
+ "koeln",
644
+ "komatsu",
645
+ "kosher",
646
+ "kp",
647
+ "kpmg",
648
+ "kpn",
649
+ "kr",
650
+ "krd",
651
+ "kred",
652
+ "kuokgroup",
653
+ "kw",
654
+ "ky",
655
+ "kyoto",
656
+ "kz",
657
+ "la",
658
+ "lacaixa",
659
+ "lamborghini",
660
+ "lamer",
661
+ "land",
662
+ "landrover",
663
+ "lanxess",
664
+ "lasalle",
665
+ "lat",
666
+ "latino",
667
+ "latrobe",
668
+ "law",
669
+ "lawyer",
670
+ "lb",
671
+ "lc",
672
+ "lds",
673
+ "lease",
674
+ "leclerc",
675
+ "lefrak",
676
+ "legal",
677
+ "lego",
678
+ "lexus",
679
+ "lgbt",
680
+ "li",
681
+ "lidl",
682
+ "life",
683
+ "lifeinsurance",
684
+ "lifestyle",
685
+ "lighting",
686
+ "like",
687
+ "lilly",
688
+ "limited",
689
+ "limo",
690
+ "lincoln",
691
+ "link",
692
+ "live",
693
+ "living",
694
+ "lk",
695
+ "llc",
696
+ "llp",
697
+ "loan",
698
+ "loans",
699
+ "locker",
700
+ "locus",
701
+ "lol",
702
+ "london",
703
+ "lotte",
704
+ "lotto",
705
+ "love",
706
+ "lpl",
707
+ "lplfinancial",
708
+ "lr",
709
+ "ls",
710
+ "lt",
711
+ "ltd",
712
+ "ltda",
713
+ "lu",
714
+ "lundbeck",
715
+ "luxe",
716
+ "luxury",
717
+ "lv",
718
+ "ly",
719
+ "ma",
720
+ "madrid",
721
+ "maif",
722
+ "maison",
723
+ "makeup",
724
+ "man",
725
+ "management",
726
+ "mango",
727
+ "map",
728
+ "market",
729
+ "marketing",
730
+ "markets",
731
+ "marriott",
732
+ "marshalls",
733
+ "mattel",
734
+ "mba",
735
+ "mc",
736
+ "mckinsey",
737
+ "md",
738
+ "me",
739
+ "med",
740
+ "media",
741
+ "meet",
742
+ "melbourne",
743
+ "meme",
744
+ "memorial",
745
+ "men",
746
+ "menu",
747
+ "merck",
748
+ "merckmsd",
749
+ "mg",
750
+ "mh",
751
+ "miami",
752
+ "microsoft",
753
+ "mil",
754
+ "mini",
755
+ "mint",
756
+ "mit",
757
+ "mitsubishi",
758
+ "mk",
759
+ "ml",
760
+ "mlb",
761
+ "mls",
762
+ "mm",
763
+ "mma",
764
+ "mn",
765
+ "mo",
766
+ "mobi",
767
+ "mobile",
768
+ "moda",
769
+ "moe",
770
+ "moi",
771
+ "mom",
772
+ "monash",
773
+ "money",
774
+ "monster",
775
+ "mormon",
776
+ "mortgage",
777
+ "moscow",
778
+ "moto",
779
+ "motorcycles",
780
+ "mov",
781
+ "movie",
782
+ "mp",
783
+ "mq",
784
+ "mr",
785
+ "ms",
786
+ "msd",
787
+ "mt",
788
+ "mtn",
789
+ "mtr",
790
+ "mu",
791
+ "museum",
792
+ "music",
793
+ "mv",
794
+ "mw",
795
+ "mx",
796
+ "my",
797
+ "mz",
798
+ "na",
799
+ "nab",
800
+ "nagoya",
801
+ "name",
802
+ "navy",
803
+ "nba",
804
+ "nc",
805
+ "ne",
806
+ "nec",
807
+ "net",
808
+ "netbank",
809
+ "netflix",
810
+ "network",
811
+ "neustar",
812
+ "new",
813
+ "news",
814
+ "next",
815
+ "nextdirect",
816
+ "nexus",
817
+ "nf",
818
+ "nfl",
819
+ "ng",
820
+ "ngo",
821
+ "nhk",
822
+ "ni",
823
+ "nico",
824
+ "nike",
825
+ "nikon",
826
+ "ninja",
827
+ "nissan",
828
+ "nissay",
829
+ "nl",
830
+ "no",
831
+ "nokia",
832
+ "norton",
833
+ "now",
834
+ "nowruz",
835
+ "nowtv",
836
+ "np",
837
+ "nr",
838
+ "nra",
839
+ "nrw",
840
+ "ntt",
841
+ "nu",
842
+ "nyc",
843
+ "nz",
844
+ "obi",
845
+ "observer",
846
+ "office",
847
+ "okinawa",
848
+ "olayan",
849
+ "olayangroup",
850
+ "ollo",
851
+ "om",
852
+ "omega",
853
+ "one",
854
+ "ong",
855
+ "onl",
856
+ "online",
857
+ "ooo",
858
+ "open",
859
+ "oracle",
860
+ "orange",
861
+ "org",
862
+ "organic",
863
+ "origins",
864
+ "osaka",
865
+ "otsuka",
866
+ "ott",
867
+ "ovh",
868
+ "pa",
869
+ "page",
870
+ "panasonic",
871
+ "paris",
872
+ "pars",
873
+ "partners",
874
+ "parts",
875
+ "party",
876
+ "pay",
877
+ "pccw",
878
+ "pe",
879
+ "pet",
880
+ "pf",
881
+ "pfizer",
882
+ "pg",
883
+ "ph",
884
+ "pharmacy",
885
+ "phd",
886
+ "philips",
887
+ "phone",
888
+ "photo",
889
+ "photography",
890
+ "photos",
891
+ "physio",
892
+ "pics",
893
+ "pictet",
894
+ "pictures",
895
+ "pid",
896
+ "pin",
897
+ "ping",
898
+ "pink",
899
+ "pioneer",
900
+ "pizza",
901
+ "pk",
902
+ "pl",
903
+ "place",
904
+ "play",
905
+ "playstation",
906
+ "plumbing",
907
+ "plus",
908
+ "pm",
909
+ "pn",
910
+ "pnc",
911
+ "pohl",
912
+ "poker",
913
+ "politie",
914
+ "porn",
915
+ "post",
916
+ "pr",
917
+ "praxi",
918
+ "press",
919
+ "prime",
920
+ "pro",
921
+ "prod",
922
+ "productions",
923
+ "prof",
924
+ "progressive",
925
+ "promo",
926
+ "properties",
927
+ "property",
928
+ "protection",
929
+ "pru",
930
+ "prudential",
931
+ "ps",
932
+ "pt",
933
+ "pub",
934
+ "pw",
935
+ "pwc",
936
+ "py",
937
+ "qa",
938
+ "qpon",
939
+ "quebec",
940
+ "quest",
941
+ "racing",
942
+ "radio",
943
+ "re",
944
+ "read",
945
+ "realestate",
946
+ "realtor",
947
+ "realty",
948
+ "recipes",
949
+ "red",
950
+ "redumbrella",
951
+ "rehab",
952
+ "reise",
953
+ "reisen",
954
+ "reit",
955
+ "reliance",
956
+ "ren",
957
+ "rent",
958
+ "rentals",
959
+ "repair",
960
+ "report",
961
+ "republican",
962
+ "rest",
963
+ "restaurant",
964
+ "review",
965
+ "reviews",
966
+ "rexroth",
967
+ "rich",
968
+ "richardli",
969
+ "ricoh",
970
+ "ril",
971
+ "rio",
972
+ "rip",
973
+ "ro",
974
+ "rocks",
975
+ "rodeo",
976
+ "rogers",
977
+ "room",
978
+ "rs",
979
+ "rsvp",
980
+ "ru",
981
+ "rugby",
982
+ "ruhr",
983
+ "run",
984
+ "rw",
985
+ "rwe",
986
+ "ryukyu",
987
+ "sa",
988
+ "saarland",
989
+ "safe",
990
+ "safety",
991
+ "sakura",
992
+ "sale",
993
+ "salon",
994
+ "samsclub",
995
+ "samsung",
996
+ "sandvik",
997
+ "sandvikcoromant",
998
+ "sanofi",
999
+ "sap",
1000
+ "sarl",
1001
+ "sas",
1002
+ "save",
1003
+ "saxo",
1004
+ "sb",
1005
+ "sbi",
1006
+ "sbs",
1007
+ "sc",
1008
+ "scb",
1009
+ "schaeffler",
1010
+ "schmidt",
1011
+ "scholarships",
1012
+ "school",
1013
+ "schule",
1014
+ "schwarz",
1015
+ "science",
1016
+ "scot",
1017
+ "sd",
1018
+ "se",
1019
+ "search",
1020
+ "seat",
1021
+ "secure",
1022
+ "security",
1023
+ "seek",
1024
+ "select",
1025
+ "sener",
1026
+ "services",
1027
+ "seven",
1028
+ "sew",
1029
+ "sex",
1030
+ "sexy",
1031
+ "sfr",
1032
+ "sg",
1033
+ "sh",
1034
+ "shangrila",
1035
+ "sharp",
1036
+ "shell",
1037
+ "shia",
1038
+ "shiksha",
1039
+ "shoes",
1040
+ "shop",
1041
+ "shopping",
1042
+ "shouji",
1043
+ "show",
1044
+ "si",
1045
+ "silk",
1046
+ "sina",
1047
+ "singles",
1048
+ "site",
1049
+ "sj",
1050
+ "sk",
1051
+ "ski",
1052
+ "skin",
1053
+ "sky",
1054
+ "skype",
1055
+ "sl",
1056
+ "sling",
1057
+ "sm",
1058
+ "smart",
1059
+ "smile",
1060
+ "sn",
1061
+ "sncf",
1062
+ "so",
1063
+ "soccer",
1064
+ "social",
1065
+ "softbank",
1066
+ "software",
1067
+ "sohu",
1068
+ "solar",
1069
+ "solutions",
1070
+ "song",
1071
+ "sony",
1072
+ "soy",
1073
+ "spa",
1074
+ "space",
1075
+ "sport",
1076
+ "spot",
1077
+ "sr",
1078
+ "srl",
1079
+ "ss",
1080
+ "st",
1081
+ "stada",
1082
+ "staples",
1083
+ "star",
1084
+ "statebank",
1085
+ "statefarm",
1086
+ "stc",
1087
+ "stcgroup",
1088
+ "stockholm",
1089
+ "storage",
1090
+ "store",
1091
+ "stream",
1092
+ "studio",
1093
+ "study",
1094
+ "style",
1095
+ "su",
1096
+ "sucks",
1097
+ "supplies",
1098
+ "supply",
1099
+ "support",
1100
+ "surf",
1101
+ "surgery",
1102
+ "suzuki",
1103
+ "sv",
1104
+ "swatch",
1105
+ "swiss",
1106
+ "sx",
1107
+ "sy",
1108
+ "sydney",
1109
+ "systems",
1110
+ "sz",
1111
+ "tab",
1112
+ "taipei",
1113
+ "talk",
1114
+ "taobao",
1115
+ "target",
1116
+ "tatamotors",
1117
+ "tatar",
1118
+ "tattoo",
1119
+ "tax",
1120
+ "taxi",
1121
+ "tc",
1122
+ "tci",
1123
+ "td",
1124
+ "tdk",
1125
+ "team",
1126
+ "tech",
1127
+ "technology",
1128
+ "tel",
1129
+ "temasek",
1130
+ "tennis",
1131
+ "teva",
1132
+ "tf",
1133
+ "tg",
1134
+ "th",
1135
+ "thd",
1136
+ "theater",
1137
+ "theatre",
1138
+ "tiaa",
1139
+ "tickets",
1140
+ "tienda",
1141
+ "tips",
1142
+ "tires",
1143
+ "tirol",
1144
+ "tj",
1145
+ "tjmaxx",
1146
+ "tjx",
1147
+ "tk",
1148
+ "tkmaxx",
1149
+ "tl",
1150
+ "tm",
1151
+ "tmall",
1152
+ "tn",
1153
+ "to",
1154
+ "today",
1155
+ "tokyo",
1156
+ "tools",
1157
+ "top",
1158
+ "toray",
1159
+ "toshiba",
1160
+ "total",
1161
+ "tours",
1162
+ "town",
1163
+ "toyota",
1164
+ "toys",
1165
+ "tr",
1166
+ "trade",
1167
+ "trading",
1168
+ "training",
1169
+ "travel",
1170
+ "travelers",
1171
+ "travelersinsurance",
1172
+ "trust",
1173
+ "trv",
1174
+ "tt",
1175
+ "tube",
1176
+ "tui",
1177
+ "tunes",
1178
+ "tushu",
1179
+ "tv",
1180
+ "tvs",
1181
+ "tw",
1182
+ "tz",
1183
+ "ua",
1184
+ "ubank",
1185
+ "ubs",
1186
+ "ug",
1187
+ "uk",
1188
+ "unicom",
1189
+ "university",
1190
+ "uno",
1191
+ "uol",
1192
+ "ups",
1193
+ "us",
1194
+ "uy",
1195
+ "uz",
1196
+ "va",
1197
+ "vacations",
1198
+ "vana",
1199
+ "vanguard",
1200
+ "vc",
1201
+ "ve",
1202
+ "vegas",
1203
+ "ventures",
1204
+ "verisign",
1205
+ "versicherung",
1206
+ "vet",
1207
+ "vg",
1208
+ "vi",
1209
+ "viajes",
1210
+ "video",
1211
+ "vig",
1212
+ "viking",
1213
+ "villas",
1214
+ "vin",
1215
+ "vip",
1216
+ "virgin",
1217
+ "visa",
1218
+ "vision",
1219
+ "viva",
1220
+ "vivo",
1221
+ "vlaanderen",
1222
+ "vn",
1223
+ "vodka",
1224
+ "volvo",
1225
+ "vote",
1226
+ "voting",
1227
+ "voto",
1228
+ "voyage",
1229
+ "vu",
1230
+ "wales",
1231
+ "walmart",
1232
+ "walter",
1233
+ "wang",
1234
+ "wanggou",
1235
+ "watch",
1236
+ "watches",
1237
+ "weather",
1238
+ "weatherchannel",
1239
+ "webcam",
1240
+ "weber",
1241
+ "website",
1242
+ "wed",
1243
+ "wedding",
1244
+ "weibo",
1245
+ "weir",
1246
+ "wf",
1247
+ "whoswho",
1248
+ "wien",
1249
+ "wiki",
1250
+ "williamhill",
1251
+ "win",
1252
+ "windows",
1253
+ "wine",
1254
+ "winners",
1255
+ "wme",
1256
+ "woodside",
1257
+ "work",
1258
+ "works",
1259
+ "world",
1260
+ "wow",
1261
+ "ws",
1262
+ "wtc",
1263
+ "wtf",
1264
+ "xbox",
1265
+ "xerox",
1266
+ "xihuan",
1267
+ "xin",
1268
+ "xn--11b4c3d",
1269
+ "xn--1ck2e1b",
1270
+ "xn--1qqw23a",
1271
+ "xn--2scrj9c",
1272
+ "xn--30rr7y",
1273
+ "xn--3bst00m",
1274
+ "xn--3ds443g",
1275
+ "xn--3e0b707e",
1276
+ "xn--3hcrj9c",
1277
+ "xn--3pxu8k",
1278
+ "xn--42c2d9a",
1279
+ "xn--45br5cyl",
1280
+ "xn--45brj9c",
1281
+ "xn--45q11c",
1282
+ "xn--4dbrk0ce",
1283
+ "xn--4gbrim",
1284
+ "xn--54b7fta0cc",
1285
+ "xn--55qw42g",
1286
+ "xn--55qx5d",
1287
+ "xn--5su34j936bgsg",
1288
+ "xn--5tzm5g",
1289
+ "xn--6frz82g",
1290
+ "xn--6qq986b3xl",
1291
+ "xn--80adxhks",
1292
+ "xn--80ao21a",
1293
+ "xn--80aqecdr1a",
1294
+ "xn--80asehdb",
1295
+ "xn--80aswg",
1296
+ "xn--8y0a063a",
1297
+ "xn--90a3ac",
1298
+ "xn--90ae",
1299
+ "xn--90ais",
1300
+ "xn--9dbq2a",
1301
+ "xn--9et52u",
1302
+ "xn--9krt00a",
1303
+ "xn--b4w605ferd",
1304
+ "xn--bck1b9a5dre4c",
1305
+ "xn--c1avg",
1306
+ "xn--c2br7g",
1307
+ "xn--cck2b3b",
1308
+ "xn--cckwcxetd",
1309
+ "xn--cg4bki",
1310
+ "xn--clchc0ea0b2g2a9gcd",
1311
+ "xn--czr694b",
1312
+ "xn--czrs0t",
1313
+ "xn--czru2d",
1314
+ "xn--d1acj3b",
1315
+ "xn--d1alf",
1316
+ "xn--e1a4c",
1317
+ "xn--eckvdtc9d",
1318
+ "xn--efvy88h",
1319
+ "xn--fct429k",
1320
+ "xn--fhbei",
1321
+ "xn--fiq228c5hs",
1322
+ "xn--fiq64b",
1323
+ "xn--fiqs8s",
1324
+ "xn--fiqz9s",
1325
+ "xn--fjq720a",
1326
+ "xn--flw351e",
1327
+ "xn--fpcrj9c3d",
1328
+ "xn--fzc2c9e2c",
1329
+ "xn--fzys8d69uvgm",
1330
+ "xn--g2xx48c",
1331
+ "xn--gckr3f0f",
1332
+ "xn--gecrj9c",
1333
+ "xn--gk3at1e",
1334
+ "xn--h2breg3eve",
1335
+ "xn--h2brj9c",
1336
+ "xn--h2brj9c8c",
1337
+ "xn--hxt814e",
1338
+ "xn--i1b6b1a6a2e",
1339
+ "xn--imr513n",
1340
+ "xn--io0a7i",
1341
+ "xn--j1aef",
1342
+ "xn--j1amh",
1343
+ "xn--j6w193g",
1344
+ "xn--jlq480n2rg",
1345
+ "xn--jvr189m",
1346
+ "xn--kcrx77d1x4a",
1347
+ "xn--kprw13d",
1348
+ "xn--kpry57d",
1349
+ "xn--kput3i",
1350
+ "xn--l1acc",
1351
+ "xn--lgbbat1ad8j",
1352
+ "xn--mgb9awbf",
1353
+ "xn--mgba3a3ejt",
1354
+ "xn--mgba3a4f16a",
1355
+ "xn--mgba7c0bbn0a",
1356
+ "xn--mgbaam7a8h",
1357
+ "xn--mgbab2bd",
1358
+ "xn--mgbah1a3hjkrd",
1359
+ "xn--mgbai9azgqp6j",
1360
+ "xn--mgbayh7gpa",
1361
+ "xn--mgbbh1a",
1362
+ "xn--mgbbh1a71e",
1363
+ "xn--mgbc0a9azcg",
1364
+ "xn--mgbca7dzdo",
1365
+ "xn--mgbcpq6gpa1a",
1366
+ "xn--mgberp4a5d4ar",
1367
+ "xn--mgbgu82a",
1368
+ "xn--mgbi4ecexp",
1369
+ "xn--mgbpl2fh",
1370
+ "xn--mgbt3dhd",
1371
+ "xn--mgbtx2b",
1372
+ "xn--mgbx4cd0ab",
1373
+ "xn--mix891f",
1374
+ "xn--mk1bu44c",
1375
+ "xn--mxtq1m",
1376
+ "xn--ngbc5azd",
1377
+ "xn--ngbe9e0a",
1378
+ "xn--ngbrx",
1379
+ "xn--node",
1380
+ "xn--nqv7f",
1381
+ "xn--nqv7fs00ema",
1382
+ "xn--nyqy26a",
1383
+ "xn--o3cw4h",
1384
+ "xn--ogbpf8fl",
1385
+ "xn--otu796d",
1386
+ "xn--p1acf",
1387
+ "xn--p1ai",
1388
+ "xn--pgbs0dh",
1389
+ "xn--pssy2u",
1390
+ "xn--q7ce6a",
1391
+ "xn--q9jyb4c",
1392
+ "xn--qcka1pmc",
1393
+ "xn--qxa6a",
1394
+ "xn--qxam",
1395
+ "xn--rhqv96g",
1396
+ "xn--rovu88b",
1397
+ "xn--rvc1e0am3e",
1398
+ "xn--s9brj9c",
1399
+ "xn--ses554g",
1400
+ "xn--t60b56a",
1401
+ "xn--tckwe",
1402
+ "xn--tiq49xqyj",
1403
+ "xn--unup4y",
1404
+ "xn--vermgensberater-ctb",
1405
+ "xn--vermgensberatung-pwb",
1406
+ "xn--vhquv",
1407
+ "xn--vuq861b",
1408
+ "xn--w4r85el8fhu5dnra",
1409
+ "xn--w4rs40l",
1410
+ "xn--wgbh1c",
1411
+ "xn--wgbl6a",
1412
+ "xn--xhq521b",
1413
+ "xn--xkc2al3hye2a",
1414
+ "xn--xkc2dl3a5ee0h",
1415
+ "xn--y9a3aq",
1416
+ "xn--yfro4i67o",
1417
+ "xn--ygbi2ammx",
1418
+ "xn--zfr164b",
1419
+ "xxx",
1420
+ "xyz",
1421
+ "yachts",
1422
+ "yahoo",
1423
+ "yamaxun",
1424
+ "yandex",
1425
+ "ye",
1426
+ "yodobashi",
1427
+ "yoga",
1428
+ "yokohama",
1429
+ "you",
1430
+ "youtube",
1431
+ "yt",
1432
+ "yun",
1433
+ "za",
1434
+ "zappos",
1435
+ "zara",
1436
+ "zero",
1437
+ "zip",
1438
+ "zm",
1439
+ "zone",
1440
+ "zuerich",
1441
+ "zw"
1442
+ ];
1443
+ var tldData = {
1444
+ source: source,
1445
+ updatedAt: updatedAt,
1446
+ count: count,
1447
+ tlds: tlds
1448
+ };
1449
+
1450
+ const VALID_TLDS = new Set(tldData.tlds);
1451
+
1452
+ /**
1453
+ * Validates the local part (before the @).
1454
+ * Max 64 chars, allowed: a-z A-Z 0-9 . _ % + -
1455
+ * No leading/trailing/consecutive dots.
1456
+ * @param {string} local
1457
+ * @returns {boolean}
1458
+ */
1459
+ function isValidLocal(local) {
1460
+ if (!local || local.length > 64) return false;
1461
+ if (/^\.|\.$/.test(local)) return false;
1462
+ if (/\.\./.test(local)) return false;
1463
+ return /^[a-zA-Z0-9._%+\-]+$/.test(local);
1464
+ }
1465
+
1466
+ /**
1467
+ * Validates the domain part (after the @).
1468
+ * Each label: 1–63 chars, alphanumeric + hyphens, no leading/trailing hyphen.
1469
+ * Total domain max 253 chars, must have at least 2 labels.
1470
+ * @param {string} domain
1471
+ * @returns {boolean}
1472
+ */
1473
+ function isValidDomain(domain) {
1474
+ if (!domain || domain.length > 253) return false;
1475
+ const labels = domain.split('.');
1476
+ if (labels.length < 2) return false;
1477
+ return labels.every(
1478
+ (label) =>
1479
+ label.length >= 1 &&
1480
+ label.length <= 63 &&
1481
+ /^[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?$|^[a-zA-Z0-9]$/.test(label),
1482
+ );
1483
+ }
1484
+
1485
+ /**
1486
+ * Validates an email address against format rules and the IANA TLD whitelist.
1487
+ *
1488
+ * @param {string} email
1489
+ * @returns {{ valid: boolean, reason?: string }}
1490
+ *
1491
+ * @example
1492
+ * validateEmail('user@example.com') // { valid: true }
1493
+ * validateEmail('user@example.invalid') // { valid: false, reason: '"invalid" is not a recognized TLD' }
1494
+ */
1495
+ function validateEmail(email) {
1496
+ if (typeof email !== 'string' || !email.trim()) {
1497
+ return { valid: false, reason: 'Email must be a non-empty string' };
1498
+ }
1499
+
1500
+ const trimmed = email.trim();
1501
+
1502
+ if (trimmed.length > 254) {
1503
+ return { valid: false, reason: 'Email address is too long' };
1504
+ }
1505
+
1506
+ const atIndex = trimmed.lastIndexOf('@');
1507
+ if (atIndex === -1) {
1508
+ return { valid: false, reason: 'Email address must contain @' };
1509
+ }
1510
+
1511
+ const local = trimmed.slice(0, atIndex);
1512
+ const domain = trimmed.slice(atIndex + 1);
1513
+
1514
+ if (!local) {
1515
+ return { valid: false, reason: 'Email address must contain @' };
1516
+ }
1517
+
1518
+ if (!isValidLocal(local)) {
1519
+ return {
1520
+ valid: false,
1521
+ reason: 'Invalid characters or format in local part (before @)',
1522
+ };
1523
+ }
1524
+
1525
+ if (!isValidDomain(domain)) {
1526
+ return { valid: false, reason: 'Invalid domain format' };
1527
+ }
1528
+
1529
+ const tld = domain.split('.').pop().toLowerCase();
1530
+ if (!VALID_TLDS.has(tld)) {
1531
+ return { valid: false, reason: `"${tld}" is not a recognized TLD` };
1532
+ }
1533
+
1534
+ return { valid: true };
1535
+ }
1536
+
1537
+ /**
1538
+ * Returns true if the email passes all validation checks.
1539
+ * Convenience wrapper around validateEmail.
1540
+ *
1541
+ * @param {string} email
1542
+ * @returns {boolean}
1543
+ *
1544
+ * @example
1545
+ * isValidEmail('user@example.com') // true
1546
+ * isValidEmail('bad-email') // false
1547
+ */
1548
+ function isValidEmail(email) {
1549
+ return validateEmail(email).valid;
1550
+ }
1551
+
1552
+ /**
1553
+ * Returns a copy of the internal IANA TLD set.
1554
+ * Useful for inspection or custom filtering.
1555
+ *
1556
+ * @returns {Set<string>}
1557
+ */
1558
+ function getTLDs() {
1559
+ return new Set(VALID_TLDS);
1560
+ }
1561
+
1562
+ /**
1563
+ * Returns TLD metadata from the data file (source, updatedAt, count).
1564
+ *
1565
+ * @returns {{ source: string, updatedAt: string, count: number }}
1566
+ */
1567
+ function getTLDMeta() {
1568
+ const { source, updatedAt, count } = tldData;
1569
+ return { source, updatedAt, count };
1570
+ }
1571
+
1572
+ export { getTLDMeta, getTLDs, isValidEmail, validateEmail };