backend-manager 5.5.3 → 5.5.4

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.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
14
14
  - `Fixed` for any bug fixes.
15
15
  - `Security` in case of vulnerabilities.
16
16
 
17
+ # [5.5.4] - 2026-06-09
18
+
19
+ ### Fixed
20
+ - **SendGrid bounce/dropped webhook filtering.** Bounce and dropped events now only revoke marketing consent when `bounce_classification` is `'Invalid Address'`. Technical bounces (DMARC, TLS, DNS failures) are sender-side issues and no longer revoke the recipient's consent.
21
+
22
+ ### Changed
23
+ - **`isSupported()` receives full parsed event.** All webhook processors (`sendgrid`, `beehiiv`) now receive the full parsed event object instead of just the event type string, enabling classification-aware filtering.
24
+ - **Config template `parent` field.** Added `parent` field to `backend-manager-config.json` template for newsletter-sources provider configuration.
25
+
17
26
  # [5.5.3] - 2026-06-08
18
27
 
19
28
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backend-manager",
3
- "version": "5.5.3",
3
+ "version": "5.5.4",
4
4
  "description": "Quick tools for developing Firebase functions",
5
5
  "main": "src/manager/index.js",
6
6
  "bin": {
@@ -83,6 +83,7 @@
83
83
  "12minutemail.net",
84
84
  "12storage.com",
85
85
  "130723.xyz",
86
+ "13282298.xyz",
86
87
  "1337.care",
87
88
  "13512863687.store",
88
89
  "140unichars.com",
@@ -90,6 +91,9 @@
90
91
  "147.cl",
91
92
  "14club.org.uk",
92
93
  "14n.co.uk",
94
+ "15553.eu.cc",
95
+ "15555.eu.cc",
96
+ "15557.eu.cc",
93
97
  "15963.fr.nf",
94
98
  "15qm.com",
95
99
  "16816889.xyz",
@@ -158,7 +162,6 @@
158
162
  "269966.xyz",
159
163
  "2932919455.dynv6.net",
160
164
  "2anom.com",
161
- "2bd.net",
162
165
  "2chmail.net",
163
166
  "2ether.net",
164
167
  "2fdgdfgdfgdf.tk",
@@ -299,6 +302,8 @@
299
302
  "aaqwe.ru",
300
303
  "aaqwe.store",
301
304
  "aard.org.uk",
305
+ "aasdarq.eu.cc",
306
+ "aasdasd.eu.cc",
302
307
  "abacuswe.us",
303
308
  "abakiss.com",
304
309
  "abatido.com",
@@ -367,6 +372,7 @@
367
372
  "ado888.biz",
368
373
  "adobeccepdm.com",
369
374
  "adoniswe.us",
375
+ "ados.cc.cd",
370
376
  "adpugh.org",
371
377
  "adresse.infos.st",
372
378
  "adroh.com",
@@ -420,6 +426,8 @@
420
426
  "ahk.jp",
421
427
  "ahmedkhlef.com",
422
428
  "ahvin.com",
429
+ "aibase.bond",
430
+ "aifmusic.top",
423
431
  "aikunkun.com",
424
432
  "ailicke.com",
425
433
  "aineapi.com",
@@ -624,6 +632,7 @@
624
632
  "asdascas.dpdns.org",
625
633
  "asdasd.nl",
626
634
  "asdasd.ru",
635
+ "asdcxijkj.eu.cc",
627
636
  "asedeeqaweds.dedyn.io",
628
637
  "asgzs.top",
629
638
  "ashleyandrew.com",
@@ -932,6 +941,7 @@
932
941
  "blnkt.net",
933
942
  "block-this-for-gambling.cloud-ip.cc",
934
943
  "block521.com",
944
+ "blog3.cc.cd",
935
945
  "blogger.nyc.mn",
936
946
  "blogmyway.org",
937
947
  "blogos.net",
@@ -1210,10 +1220,13 @@
1210
1220
  "churchhousemanaton.co.uk",
1211
1221
  "churchinsouthampton.org.uk",
1212
1222
  "cigar-auctions.com",
1223
+ "cihai.eu.cc",
1224
+ "cihaifhqo.eu.cc",
1213
1225
  "cimario.com",
1214
1226
  "citmo.net",
1215
1227
  "civikli.com",
1216
1228
  "civx.org",
1229
+ "cjdeyuiw.eu.cc",
1217
1230
  "ckaazaza.tk",
1218
1231
  "cketrust.org",
1219
1232
  "ckiso.com",
@@ -1225,6 +1238,7 @@
1225
1238
  "classesmail.com",
1226
1239
  "claudd.com",
1227
1240
  "claverfield.org",
1241
+ "cleaninbox.dynv6.net",
1228
1242
  "clearbeam.pro",
1229
1243
  "clearwatermail.info",
1230
1244
  "click-email.com",
@@ -1257,6 +1271,7 @@
1257
1271
  "cmhvzylmfc.com",
1258
1272
  "cnamed.com",
1259
1273
  "cndps.com",
1274
+ "cnebw.eu.cc",
1260
1275
  "cneemail.com",
1261
1276
  "cnew.ir",
1262
1277
  "cnieux.com",
@@ -1394,8 +1409,10 @@
1394
1409
  "daabox.com",
1395
1410
  "dab.ro",
1396
1411
  "dacoolest.com",
1412
+ "dadaolibai.eu.cc",
1397
1413
  "daemsteam.com",
1398
1414
  "daerdy.com",
1415
+ "dahewushi.eu.cc",
1399
1416
  "daibond.info",
1400
1417
  "daily-email.com",
1401
1418
  "dailynutria.com",
@@ -1429,6 +1446,8 @@
1429
1446
  "dawin.com",
1430
1447
  "dawnwick.org",
1431
1448
  "dawsoncountygunclub.org",
1449
+ "dawushihe.eu.cc",
1450
+ "dawushihehe.eu.cc",
1432
1451
  "dayizhan.top",
1433
1452
  "daymail.life",
1434
1453
  "daymailonline.com",
@@ -1509,11 +1528,14 @@
1509
1528
  "devnullmail.com",
1510
1529
  "devsonline.studio",
1511
1530
  "deyom.com",
1531
+ "dfyuih.eu.cc",
1512
1532
  "dghdfjfd.eu.cc",
1513
1533
  "dh372.top",
1514
1534
  "dharmatel.net",
1535
+ "dheiwuy.eu.cc",
1515
1536
  "dhm.ro",
1516
1537
  "dhnow.com",
1538
+ "dhoahn.eu.cc",
1517
1539
  "dhy.cc",
1518
1540
  "dialogus.com",
1519
1541
  "diapaulpainting.com",
@@ -1583,6 +1605,7 @@
1583
1605
  "diwaq.com",
1584
1606
  "dizigg.com",
1585
1607
  "djiv.xyz",
1608
+ "djwekih.eu.cc",
1586
1609
  "dkz.opik.net",
1587
1610
  "dldweb.info",
1588
1611
  "dlemail.ru",
@@ -1591,6 +1614,7 @@
1591
1614
  "dmts.fr.nf",
1592
1615
  "dmxs8.com",
1593
1616
  "dndent.com",
1617
+ "dnkah.eu.cc",
1594
1618
  "dnsclick.com",
1595
1619
  "dnses.ro",
1596
1620
  "doanart.com",
@@ -1640,6 +1664,7 @@
1640
1664
  "doquier.tk",
1641
1665
  "doreact.com",
1642
1666
  "dorothyfoundation.org",
1667
+ "doszo.qzz.io",
1643
1668
  "dotapodemail.com",
1644
1669
  "dotman.de",
1645
1670
  "dotmsg.com",
@@ -1718,6 +1743,8 @@
1718
1743
  "dwse.edu.pl",
1719
1744
  "dwseal.com",
1720
1745
  "dyceroprojects.com",
1746
+ "dyebkj.eu.cc",
1747
+ "dyfgiavcrw.eu.cc",
1721
1748
  "dygovil.com",
1722
1749
  "dymarent.cfd",
1723
1750
  "dynarix.cfd",
@@ -1999,6 +2026,7 @@
1999
2026
  "evyush.com",
2000
2027
  "ewebrus.com",
2001
2028
  "exahut.com",
2029
+ "examcentral.co.uk",
2002
2030
  "examstudy.xyz",
2003
2031
  "exbts.com",
2004
2032
  "exclussi.com",
@@ -2113,6 +2141,7 @@
2113
2141
  "fcetpkqwm.top",
2114
2142
  "fddns.ml",
2115
2143
  "fdfdsfds.com",
2144
+ "fdhsui.eu.cc",
2116
2145
  "fdmail.top",
2117
2146
  "fdvctte.info",
2118
2147
  "featcore.com",
@@ -2132,7 +2161,10 @@
2132
2161
  "fexpost.com",
2133
2162
  "fextemp.com",
2134
2163
  "fft.edu.do",
2164
+ "fhoau.eu.cc",
2135
2165
  "fhpfhp.fr.nf",
2166
+ "fhwui.eu.cc",
2167
+ "fhwyuoia.eu.cc",
2136
2168
  "fiallaspares.com",
2137
2169
  "fibmail.com",
2138
2170
  "ficken.de",
@@ -2243,6 +2275,7 @@
2243
2275
  "freedompop.us",
2244
2276
  "freedrops.org",
2245
2277
  "freefattymovies.com",
2278
+ "freegrok.cc.cd",
2246
2279
  "freehotmail.net",
2247
2280
  "freeimagehosts.org",
2248
2281
  "freeimghost.org",
@@ -2327,6 +2360,7 @@
2327
2360
  "fxxf.beer",
2328
2361
  "fxzig.com",
2329
2362
  "fycloud.online",
2363
+ "fyeiwh.eu.cc",
2330
2364
  "fyii.de",
2331
2365
  "fynix.sbs",
2332
2366
  "fyronex.cfd",
@@ -2399,6 +2433,7 @@
2399
2433
  "get.pp.ua",
2400
2434
  "get1mail.com",
2401
2435
  "get2mail.fr",
2436
+ "getai-hub.com",
2402
2437
  "getairmail.cf",
2403
2438
  "getairmail.com",
2404
2439
  "getairmail.ga",
@@ -2528,9 +2563,109 @@
2528
2563
  "gowikinetwork.com",
2529
2564
  "gowikitravel.com",
2530
2565
  "gowikitv.com",
2566
+ "gpt-mail-free-1200.dynv6.net",
2567
+ "gpt-mail-free-140.dynv6.net",
2568
+ "gpt-mail-free-1427.dynv6.net",
2569
+ "gpt-mail-free-1550.dynv6.net",
2570
+ "gpt-mail-free-161.dynv6.net",
2571
+ "gpt-mail-free-1694.dynv6.net",
2572
+ "gpt-mail-free-1721.dynv6.net",
2573
+ "gpt-mail-free-1980.dynv6.net",
2574
+ "gpt-mail-free-1998.dynv6.net",
2575
+ "gpt-mail-free-2019.dynv6.net",
2576
+ "gpt-mail-free-2049.dynv6.net",
2577
+ "gpt-mail-free-2109.dynv6.net",
2578
+ "gpt-mail-free-2141.dynv6.net",
2579
+ "gpt-mail-free-2307.dynv6.net",
2580
+ "gpt-mail-free-2310.dynv6.net",
2581
+ "gpt-mail-free-2375.dynv6.net",
2582
+ "gpt-mail-free-248.dynv6.net",
2583
+ "gpt-mail-free-2491.dynv6.net",
2584
+ "gpt-mail-free-3.dynv6.net",
2585
+ "gpt-mail-free-3074.dynv6.net",
2586
+ "gpt-mail-free-3093.dynv6.net",
2587
+ "gpt-mail-free-3127.dynv6.net",
2588
+ "gpt-mail-free-3291.dynv6.net",
2589
+ "gpt-mail-free-3330.dynv6.net",
2590
+ "gpt-mail-free-3348.dynv6.net",
2591
+ "gpt-mail-free-3476.dynv6.net",
2592
+ "gpt-mail-free-3527.dynv6.net",
2593
+ "gpt-mail-free-366.dynv6.net",
2594
+ "gpt-mail-free-3792.dynv6.net",
2595
+ "gpt-mail-free-3927.dynv6.net",
2596
+ "gpt-mail-free-4111.dynv6.net",
2597
+ "gpt-mail-free-4547.dynv6.net",
2598
+ "gpt-mail-free-4771.dynv6.net",
2599
+ "gpt-mail-free-4775.dynv6.net",
2600
+ "gpt-mail-free-4788.dynv6.net",
2601
+ "gpt-mail-free-4821.dynv6.net",
2602
+ "gpt-mail-free-4900.dynv6.net",
2603
+ "gpt-mail-free-5018.dynv6.net",
2604
+ "gpt-mail-free-5182.dynv6.net",
2605
+ "gpt-mail-free-5211.dynv6.net",
2606
+ "gpt-mail-free-5226.dynv6.net",
2607
+ "gpt-mail-free-5241.dynv6.net",
2608
+ "gpt-mail-free-5261.dynv6.net",
2609
+ "gpt-mail-free-5386.dynv6.net",
2610
+ "gpt-mail-free-5406.dynv6.net",
2611
+ "gpt-mail-free-551.dynv6.net",
2612
+ "gpt-mail-free-5539.dynv6.net",
2613
+ "gpt-mail-free-561.dynv6.net",
2614
+ "gpt-mail-free-574.dynv6.net",
2615
+ "gpt-mail-free-5902.dynv6.net",
2616
+ "gpt-mail-free-6067.dynv6.net",
2617
+ "gpt-mail-free-610.dynv6.net",
2618
+ "gpt-mail-free-6221.dynv6.net",
2619
+ "gpt-mail-free-6289.dynv6.net",
2620
+ "gpt-mail-free-6320.dynv6.net",
2621
+ "gpt-mail-free-6342.dynv6.net",
2622
+ "gpt-mail-free-6397.dynv6.net",
2623
+ "gpt-mail-free-6419.dynv6.net",
2624
+ "gpt-mail-free-6603.dynv6.net",
2625
+ "gpt-mail-free-6664.dynv6.net",
2626
+ "gpt-mail-free-6779.dynv6.net",
2627
+ "gpt-mail-free-6812.dynv6.net",
2628
+ "gpt-mail-free-6925.dynv6.net",
2629
+ "gpt-mail-free-6962.dynv6.net",
2630
+ "gpt-mail-free-7208.dynv6.net",
2631
+ "gpt-mail-free-7298.dynv6.net",
2632
+ "gpt-mail-free-7493.dynv6.net",
2633
+ "gpt-mail-free-7548.dynv6.net",
2634
+ "gpt-mail-free-7572.dynv6.net",
2635
+ "gpt-mail-free-7582.dynv6.net",
2636
+ "gpt-mail-free-7689.dynv6.net",
2637
+ "gpt-mail-free-7939.dynv6.net",
2638
+ "gpt-mail-free-8015.dynv6.net",
2639
+ "gpt-mail-free-8049.dynv6.net",
2640
+ "gpt-mail-free-8591.dynv6.net",
2641
+ "gpt-mail-free-86.dynv6.net",
2642
+ "gpt-mail-free-861.dynv6.net",
2643
+ "gpt-mail-free-8611.dynv6.net",
2644
+ "gpt-mail-free-8671.dynv6.net",
2645
+ "gpt-mail-free-8773.dynv6.net",
2646
+ "gpt-mail-free-8786.dynv6.net",
2647
+ "gpt-mail-free-8791.dynv6.net",
2648
+ "gpt-mail-free-882.dynv6.net",
2649
+ "gpt-mail-free-8886.dynv6.net",
2650
+ "gpt-mail-free-8933.dynv6.net",
2651
+ "gpt-mail-free-8944.dynv6.net",
2652
+ "gpt-mail-free-902.dynv6.net",
2653
+ "gpt-mail-free-9243.dynv6.net",
2654
+ "gpt-mail-free-9307.dynv6.net",
2655
+ "gpt-mail-free-9446.dynv6.net",
2656
+ "gpt-mail-free-9502.dynv6.net",
2657
+ "gpt-mail-free-9515.dynv6.net",
2658
+ "gpt-mail-free-9584.dynv6.net",
2659
+ "gpt-mail-free-9609.dynv6.net",
2660
+ "gpt-mail-free-9620.dynv6.net",
2661
+ "gpt-mail-free-9695.dynv6.net",
2662
+ "gpt-mail-free-9825.dynv6.net",
2663
+ "gpt-mail-free-9935.dynv6.net",
2664
+ "gpt-mail.myftp.org",
2531
2665
  "gptmail.cc.cd",
2532
2666
  "gptmail.us.ci",
2533
2667
  "gptmail.webredirect.org",
2668
+ "grabafilafoundation.org",
2534
2669
  "gracetvglobal.com",
2535
2670
  "grandmamail.com",
2536
2671
  "grandmasmail.com",
@@ -2980,6 +3115,7 @@
2980
3115
  "iralborz.bid",
2981
3116
  "iraniandsa.org",
2982
3117
  "irc.so",
3118
+ "irealiy.cyou",
2983
3119
  "iridales.com",
2984
3120
  "irish2me.com",
2985
3121
  "irishspringrealty.com",
@@ -3093,7 +3229,6 @@
3093
3229
  "jmail.ro",
3094
3230
  "jmods.me",
3095
3231
  "jnxjn.com",
3096
- "jo3.org",
3097
3232
  "jobbikszimpatizans.hu",
3098
3233
  "jobbrett.com",
3099
3234
  "jobposts.net",
@@ -3401,7 +3536,6 @@
3401
3536
  "linkedindiscount.com",
3402
3537
  "linkedintuts2016.pw",
3403
3538
  "linkmail.info",
3404
- "linkpc.net",
3405
3539
  "linkspo.my.id",
3406
3540
  "linlin.cloud",
3407
3541
  "linlshe.com",
@@ -3423,6 +3557,7 @@
3423
3557
  "liuyuyu.space",
3424
3558
  "liveradio.tk",
3425
3559
  "livinitlarge.net",
3560
+ "liyao.edu.kg",
3426
3561
  "lizery.com",
3427
3562
  "lkgn.se",
3428
3563
  "llciuoau.top",
@@ -3449,6 +3584,7 @@
3449
3584
  "loh.pp.ua",
3450
3585
  "lohinja.com",
3451
3586
  "loin.in",
3587
+ "lokenathassociation.co.uk",
3452
3588
  "lolfreak.net",
3453
3589
  "lolmail.biz",
3454
3590
  "londonyouthsailing.org",
@@ -3797,10 +3933,12 @@
3797
3933
  "mc-fly.be",
3798
3934
  "mcache.net",
3799
3935
  "mcdomaine.fr.nf",
3936
+ "mchasd.eu.cc",
3800
3937
  "mciek.com",
3801
3938
  "mcpservers.one",
3802
3939
  "mcs.cc.cd",
3803
3940
  "mcunnm.ccwu.cc",
3941
+ "mdahld.eu.cc",
3804
3942
  "mdhc.tk",
3805
3943
  "mdz.email",
3806
3944
  "meantinc.com",
@@ -3816,9 +3954,11 @@
3816
3954
  "meef.uk",
3817
3955
  "meepsheep.eu",
3818
3956
  "megasend.org",
3957
+ "mehda.eu.cc",
3819
3958
  "mehr-bitcoin.de",
3820
3959
  "meidecn.com",
3821
3960
  "meinspamschutz.de",
3961
+ "mekqh.eu.cc",
3822
3962
  "meltedbrownies.com",
3823
3963
  "meltmail.com",
3824
3964
  "meltp.com",
@@ -4230,6 +4370,7 @@
4230
4370
  "nbvrluhsh.top",
4231
4371
  "nbzmr.com",
4232
4372
  "ncien.com",
4373
+ "ndade.eu.cc",
4233
4374
  "ndnphim.io.vn",
4234
4375
  "necub.com",
4235
4376
  "negated.com",
@@ -4283,6 +4424,7 @@
4283
4424
  "nezumi.be",
4284
4425
  "nezzart.com",
4285
4426
  "nfast.net",
4427
+ "nfkah.eu.cc",
4286
4428
  "nghienplus.io.vn",
4287
4429
  "nghienplus.store",
4288
4430
  "nguyenusedcars.com",
@@ -4523,6 +4665,7 @@
4523
4665
  "opmmedia.ga",
4524
4666
  "oposite.org",
4525
4667
  "opp24.com",
4668
+ "opportunity-africa.com",
4526
4669
  "optimaweb.me",
4527
4670
  "optivex.cfd",
4528
4671
  "opwebw.com",
@@ -5048,7 +5191,6 @@
5048
5191
  "ruinique.tech",
5049
5192
  "rulersonline.com",
5050
5193
  "rumgel.com",
5051
- "run.place",
5052
5194
  "runi.ca",
5053
5195
  "rupayamail.com",
5054
5196
  "ruru.be",
@@ -5090,6 +5232,7 @@
5090
5232
  "salmeow.tk",
5091
5233
  "sam1.eu.org",
5092
5234
  "samaritanfamilyfoundation.com",
5235
+ "samblogs.nett.to",
5093
5236
  "samblogs.zone.id",
5094
5237
  "samsclass.info",
5095
5238
  "sandcars.net",
@@ -5117,6 +5260,7 @@
5117
5260
  "scpulse.com",
5118
5261
  "scrsot.com",
5119
5262
  "sd3.in",
5263
+ "sdhaiok.eu.cc",
5120
5264
  "sdj.fr.nf",
5121
5265
  "sdvft.com",
5122
5266
  "sdvgeft.com",
@@ -5315,6 +5459,7 @@
5315
5459
  "snapwet.com",
5316
5460
  "sneakmail.de",
5317
5461
  "snece.com",
5462
+ "sneydgreen-communityhall.co.uk",
5318
5463
  "snpmail.fun",
5319
5464
  "soc123.net",
5320
5465
  "social-mailer.tk",
@@ -5477,6 +5622,7 @@
5477
5622
  "sssvcv.uno",
5478
5623
  "stacys.mom",
5479
5624
  "stanfordujjain.com",
5625
+ "star-fish.org.uk",
5480
5626
  "starbalance.site",
5481
5627
  "stardust-2.store",
5482
5628
  "starlight-breaker.net",
@@ -5634,6 +5780,7 @@
5634
5780
  "teerest.com",
5635
5781
  "teewars.org",
5636
5782
  "tefl.ro",
5783
+ "tehillahpraise.uk",
5637
5784
  "teihu.com",
5638
5785
  "telecomix.pl",
5639
5786
  "teleg.eu",
@@ -6198,6 +6345,7 @@
6198
6345
  "vevs.de",
6199
6346
  "vexalor.cfd",
6200
6347
  "vexi.my",
6348
+ "vfdhks.eu.cc",
6201
6349
  "vfre4w3.dynv6.net",
6202
6350
  "vfwladiesauxin.org",
6203
6351
  "via.tokyo.jp",
@@ -6260,6 +6408,7 @@
6260
6408
  "vkcode.ru",
6261
6409
  "vkfu.ru",
6262
6410
  "vkfu.store",
6411
+ "vkjashdf.eu.cc",
6263
6412
  "vkpr.store",
6264
6413
  "vkr1.com",
6265
6414
  "vkrr.ru",
@@ -6273,6 +6422,7 @@
6273
6422
  "vn-one.com",
6274
6423
  "vncctv.org",
6275
6424
  "vnedu.me",
6425
+ "vnfjsh.eu.cc",
6276
6426
  "vobau.net",
6277
6427
  "voicesforchangeinc.org",
6278
6428
  "voidbay.com",
@@ -6456,7 +6606,6 @@
6456
6606
  "woofgl.email",
6457
6607
  "woofidog.fr.nf",
6458
6608
  "woopros.com",
6459
- "work.gd",
6460
6609
  "workingtall.com",
6461
6610
  "worldcoins.top",
6462
6611
  "worldlylife.store",
@@ -6517,8 +6666,10 @@
6517
6666
  "xcompress.com",
6518
6667
  "xcoxc.com",
6519
6668
  "xcpy.com",
6669
+ "xcsllajs.eu.cc",
6520
6670
  "xcvuaylik.top",
6521
6671
  "xcvv.xyz",
6672
+ "xdfrms.fun",
6522
6673
  "xdnss.cc",
6523
6674
  "xdpxdp.online",
6524
6675
  "xehop.org",
@@ -6532,6 +6683,7 @@
6532
6683
  "xepa.ru",
6533
6684
  "xfavaj.com",
6534
6685
  "xi2.cc",
6686
+ "xiajspof.eu.cc",
6535
6687
  "xiangshan.eu.cc",
6536
6688
  "xiaoche.ggff.net",
6537
6689
  "xiaohuangyu.ccwu.cc",
@@ -6561,8 +6713,10 @@
6561
6713
  "xoxo3.website",
6562
6714
  "xoxox.cc",
6563
6715
  "xperiae5.com",
6716
+ "xqqgegsd.eu.cc",
6564
6717
  "xrap.de",
6565
6718
  "xshop.bond",
6719
+ "xsioap.eu.cc",
6566
6720
  "xstyled.net",
6567
6721
  "xvx.us",
6568
6722
  "xww.ro",
@@ -6609,6 +6763,7 @@
6609
6763
  "yep.it",
6610
6764
  "yermail.net",
6611
6765
  "yeummo.io.vn",
6766
+ "yfhsdb.eu.cc",
6612
6767
  "yhg.biz",
6613
6768
  "yilue.eu.org",
6614
6769
  "ying-ge.com",
@@ -6653,6 +6808,7 @@
6653
6808
  "yroid.com",
6654
6809
  "yrppwsekv.top",
6655
6810
  "ysfuddr.top",
6811
+ "ysgdjd.fun",
6656
6812
  "yshdnhh.click",
6657
6813
  "yspend.com",
6658
6814
  "yszmy.cn",
@@ -6723,6 +6879,7 @@
6723
6879
  "zhaoyuanedu.cn",
6724
6880
  "zhcne.com",
6725
6881
  "zhewei88.com",
6882
+ "zhizhiwei.fun",
6726
6883
  "zhorachu.com",
6727
6884
  "zhousj.eu.org",
6728
6885
  "zik.dj",
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * Each processor module defines:
13
13
  * - parseWebhook(req) — returns Array<{ eventId, eventType, email, timestamp, raw, ... }>
14
- * - isSupported(type) — returns true if this event should be processed
14
+ * - isSupported(parsed) — returns true if this parsed event should be processed
15
15
  * - handleEvent(ctx) — does the work for one event (user doc + cross-provider sync)
16
16
  *
17
17
  * No idempotency ledger: every supported handler (revoke consent + cross-provider
@@ -106,7 +106,7 @@ async function processOneEvent({ Manager, assistant, provider, event, processorM
106
106
  const { eventType } = event;
107
107
 
108
108
  // Filter by supported event types
109
- if (processorModule.isSupported && !processorModule.isSupported(eventType)) {
109
+ if (processorModule.isSupported && !processorModule.isSupported(event)) {
110
110
  return { processed: false, skipped: 'unsupported-event-type' };
111
111
  }
112
112
 
@@ -81,8 +81,8 @@ function parseWebhook(req) {
81
81
  /**
82
82
  * Returns true if this event type represents a revocation we should act on.
83
83
  */
84
- function isSupported(eventType) {
85
- return REVOKE_EVENT_TYPES.has(eventType);
84
+ function isSupported(parsed) {
85
+ return REVOKE_EVENT_TYPES.has(parsed.eventType);
86
86
  }
87
87
 
88
88
  /**
@@ -12,8 +12,10 @@
12
12
  * - 'unsubscribe' — user clicked the unified unsubscribe link
13
13
  * - 'group_unsubscribe' — user unsubscribed from a specific ASM group
14
14
  * - 'spamreport' — user marked email as spam
15
- * - 'bounce' — hard bounce (treat as revoke to avoid future sends)
16
- * - 'dropped' — SendGrid dropped the message (often due to suppression)
15
+ * - 'bounce' — ONLY when bounce_classification is 'Invalid Address' (hard bounce).
16
+ * Technical bounces (DMARC, TLS, DNS) are sender-side issues and
17
+ * should NOT revoke the recipient's consent.
18
+ * - 'dropped' — ONLY when bounce_classification is 'Invalid Address'.
17
19
  *
18
20
  * Note: 'group_unsubscribe' is the most common one (matches our ASM-link flow), and since
19
21
  * GROUPS.marketing (25928) is account-global across all brands, an unsub from group 25928
@@ -27,8 +29,14 @@ const REVOKE_EVENT_TYPES = new Set([
27
29
  'unsubscribe',
28
30
  'group_unsubscribe',
29
31
  'spamreport',
30
- 'bounce',
31
- 'dropped',
32
+ ]);
33
+
34
+ // Bounce events only revoke consent when the bounce_classification indicates
35
+ // the mailbox genuinely doesn't exist. Technical bounces (DMARC, TLS, DNS),
36
+ // reputation bounces, content blocks, and temporary failures are the SENDER's
37
+ // problem — the recipient's email is still valid.
38
+ const HARD_BOUNCE_CLASSIFICATIONS = new Set([
39
+ 'Invalid Address',
32
40
  ]);
33
41
 
34
42
  /**
@@ -69,6 +77,7 @@ function parseWebhook(req) {
69
77
  const email = typeof event.email === 'string' ? event.email.trim().toLowerCase() : null;
70
78
  const timestamp = typeof event.timestamp === 'number' ? event.timestamp : null;
71
79
  const asmGroupId = event.asm_group_id || null;
80
+ const bounceClassification = event.bounce_classification || null;
72
81
 
73
82
  return {
74
83
  eventId,
@@ -76,16 +85,28 @@ function parseWebhook(req) {
76
85
  email,
77
86
  timestamp,
78
87
  asmGroupId,
88
+ bounceClassification,
79
89
  raw: event,
80
90
  };
81
91
  });
82
92
  }
83
93
 
84
94
  /**
85
- * Returns true if this event type represents a revocation we should act on.
95
+ * Returns true if this parsed event represents a revocation we should act on.
96
+ * For bounce/dropped events, only hard bounces (Invalid Address) qualify.
86
97
  */
87
- function isSupported(eventType) {
88
- return REVOKE_EVENT_TYPES.has(eventType);
98
+ function isSupported(parsed) {
99
+ const { eventType, bounceClassification } = parsed;
100
+
101
+ if (REVOKE_EVENT_TYPES.has(eventType)) {
102
+ return true;
103
+ }
104
+
105
+ if (eventType === 'bounce' || eventType === 'dropped') {
106
+ return HARD_BOUNCE_CLASSIFICATIONS.has(bounceClassification);
107
+ }
108
+
109
+ return false;
89
110
  }
90
111
 
91
112
  /**
@@ -1,4 +1,5 @@
1
1
  {
2
+ parent: '', // 'self' = this BEM is the parent (newsletter-sources provider); a URL = external parent; '' = no parent
2
3
  brand: {
3
4
  id: 'my-app',
4
5
  name: 'My Brand',