@adwait12345/telemetry-core 0.1.0 → 0.1.3

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/dist/index.js CHANGED
@@ -20,10 +20,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ ACCESSIBILITY_BOTS: () => ACCESSIBILITY_BOTS,
24
+ ADVERTISING_BOTS: () => ADVERTISING_BOTS,
25
+ AI_ASSISTANT_BOTS: () => AI_ASSISTANT_BOTS,
23
26
  AI_BOTS: () => AI_BOTS,
24
27
  ALL_BOTS: () => ALL_BOTS,
28
+ ANALYTICS_BOTS: () => ANALYTICS_BOTS,
29
+ ECOMMERCE_BOTS: () => ECOMMERCE_BOTS,
30
+ FEED_BOTS: () => FEED_BOTS,
25
31
  GENERIC_BOTS: () => GENERIC_BOTS,
32
+ MONITOR_BOTS: () => MONITOR_BOTS,
33
+ PREVIEW_BOTS: () => PREVIEW_BOTS,
26
34
  SEARCH_BOTS: () => SEARCH_BOTS,
35
+ SEO_BOTS: () => SEO_BOTS,
36
+ SOCIAL_BOTS: () => SOCIAL_BOTS,
37
+ VERIFICATION_BOTS: () => VERIFICATION_BOTS,
38
+ WEBHOOK_BOTS: () => WEBHOOK_BOTS,
27
39
  detectBot: () => detectBot,
28
40
  extractAutomationHeaders: () => extractAutomationHeaders,
29
41
  sendToTelemetry: () => sendToTelemetry
@@ -37,27 +49,18 @@ var AI_BOTS = [
37
49
  category: "ai-crawler",
38
50
  pattern: /GPTBot/i,
39
51
  verifiable: true
40
- // https://openai.com/gptbot
41
52
  },
42
53
  {
43
54
  name: "ClaudeBot",
44
55
  category: "ai-crawler",
45
56
  pattern: /ClaudeBot|anthropic-ai/i,
46
57
  verifiable: true
47
- // Anthropic publishes IP ranges
48
58
  },
49
59
  {
50
60
  name: "Google-Extended",
51
61
  category: "ai-crawler",
52
62
  pattern: /Google-Extended/i,
53
63
  verifiable: true
54
- // Gemini/Bard training crawler
55
- },
56
- {
57
- name: "PerplexityBot",
58
- category: "ai-crawler",
59
- pattern: /PerplexityBot/i,
60
- verifiable: false
61
64
  },
62
65
  {
63
66
  name: "Amazonbot",
@@ -72,29 +75,27 @@ var AI_BOTS = [
72
75
  verifiable: false
73
76
  },
74
77
  {
75
- name: "Applebot",
78
+ name: "Meta-WebIndexer",
76
79
  category: "ai-crawler",
77
- pattern: /Applebot/i,
78
- verifiable: true
80
+ pattern: /meta-webindexer/i,
81
+ verifiable: false
79
82
  },
80
83
  {
81
- name: "YouBot",
84
+ name: "Applebot",
82
85
  category: "ai-crawler",
83
- pattern: /YouBot/i,
84
- verifiable: false
86
+ pattern: /Applebot/i,
87
+ verifiable: true
85
88
  },
86
89
  {
87
90
  name: "Bytespider",
88
91
  category: "ai-crawler",
89
92
  pattern: /Bytespider/i,
90
- // TikTok / ByteDance — used for AI training
91
93
  verifiable: false
92
94
  },
93
95
  {
94
96
  name: "CCBot",
95
97
  category: "ai-crawler",
96
98
  pattern: /CCBot/i,
97
- // Common Crawl — dataset used by many LLMs
98
99
  verifiable: false
99
100
  },
100
101
  {
@@ -103,12 +104,6 @@ var AI_BOTS = [
103
104
  pattern: /cohere-ai/i,
104
105
  verifiable: false
105
106
  },
106
- {
107
- name: "DuckAssistBot",
108
- category: "ai-crawler",
109
- pattern: /DuckAssistBot/i,
110
- verifiable: false
111
- },
112
107
  {
113
108
  name: "Diffbot",
114
109
  category: "ai-crawler",
@@ -132,6 +127,128 @@ var AI_BOTS = [
132
127
  category: "ai-crawler",
133
128
  pattern: /Timpibot/i,
134
129
  verifiable: false
130
+ },
131
+ {
132
+ name: "YouBot",
133
+ category: "ai-crawler",
134
+ pattern: /YouBot/i,
135
+ verifiable: false
136
+ },
137
+ {
138
+ name: "Browserbase",
139
+ category: "ai-crawler",
140
+ pattern: /browserbase/i,
141
+ verifiable: false
142
+ },
143
+ {
144
+ name: "Rovo",
145
+ category: "ai-crawler",
146
+ pattern: /\bRovo\b/i,
147
+ verifiable: false
148
+ },
149
+ {
150
+ name: "Shapbot",
151
+ category: "ai-crawler",
152
+ pattern: /Shapbot/i,
153
+ verifiable: false
154
+ },
155
+ {
156
+ name: "Kernel",
157
+ category: "ai-crawler",
158
+ pattern: /\bKernel\b.*crawler|kernel-crawler/i,
159
+ verifiable: false
160
+ },
161
+ {
162
+ name: "v0bot",
163
+ category: "ai-crawler",
164
+ pattern: /v0bot/i,
165
+ verifiable: false
166
+ }
167
+ ];
168
+ var AI_ASSISTANT_BOTS = [
169
+ {
170
+ name: "ChatGPT-User",
171
+ category: "ai-assistant",
172
+ pattern: /ChatGPT-User/i,
173
+ verifiable: true
174
+ },
175
+ {
176
+ name: "ChatGPT-Operator",
177
+ category: "ai-assistant",
178
+ pattern: /ChatGPT-Operator/i,
179
+ verifiable: true
180
+ },
181
+ {
182
+ name: "GPT-Actions",
183
+ category: "ai-assistant",
184
+ pattern: /gpt-actions/i,
185
+ verifiable: true
186
+ },
187
+ {
188
+ name: "OAI-SearchBot",
189
+ category: "ai-assistant",
190
+ pattern: /OAI-SearchBot/i,
191
+ verifiable: true
192
+ },
193
+ {
194
+ name: "Claude-User",
195
+ category: "ai-assistant",
196
+ pattern: /Claude-User/i,
197
+ verifiable: true
198
+ },
199
+ {
200
+ name: "Claude-SearchBot",
201
+ category: "ai-assistant",
202
+ pattern: /Claude-SearchBot/i,
203
+ verifiable: true
204
+ },
205
+ {
206
+ name: "PerplexityBot",
207
+ category: "ai-assistant",
208
+ pattern: /PerplexityBot/i,
209
+ verifiable: false
210
+ },
211
+ {
212
+ name: "Perplexity-User",
213
+ category: "ai-assistant",
214
+ pattern: /Perplexity-User/i,
215
+ verifiable: false
216
+ },
217
+ {
218
+ name: "DuckAssistBot",
219
+ category: "ai-assistant",
220
+ pattern: /DuckAssistBot/i,
221
+ verifiable: false
222
+ },
223
+ {
224
+ name: "Amazon-Kendra",
225
+ category: "ai-assistant",
226
+ pattern: /Amazon-Kendra/i,
227
+ verifiable: false
228
+ },
229
+ {
230
+ name: "Amazon-Q",
231
+ category: "ai-assistant",
232
+ pattern: /Amazon-Q/i,
233
+ verifiable: false
234
+ },
235
+ {
236
+ name: "Gemini-Deep-Research",
237
+ category: "ai-assistant",
238
+ pattern: /Gemini.*Deep.*Research|GeminiDeepResearch/i,
239
+ verifiable: true
240
+ },
241
+ {
242
+ name: "Google-CloudVertexBot",
243
+ category: "ai-assistant",
244
+ pattern: /Google-CloudVertexBot/i,
245
+ verifiable: true
246
+ },
247
+ {
248
+ name: "Google-Ads-Creatives",
249
+ category: "ai-assistant",
250
+ pattern: /Google-Ads-Creatives/i,
251
+ verifiable: true
135
252
  }
136
253
  ];
137
254
  var SEARCH_BOTS = [
@@ -140,20 +257,30 @@ var SEARCH_BOTS = [
140
257
  category: "search",
141
258
  pattern: /Googlebot/i,
142
259
  verifiable: true
143
- // Reverse DNS: *.googlebot.com / *.google.com
260
+ },
261
+ {
262
+ name: "GoogleOther",
263
+ category: "search",
264
+ pattern: /GoogleOther/i,
265
+ verifiable: true
266
+ },
267
+ {
268
+ name: "APIs-Google",
269
+ category: "search",
270
+ pattern: /APIs-Google/i,
271
+ verifiable: true
144
272
  },
145
273
  {
146
274
  name: "Bingbot",
147
275
  category: "search",
148
276
  pattern: /bingbot/i,
149
277
  verifiable: true
150
- // Reverse DNS: *.search.msn.com
151
278
  },
279
+ { name: "Slurp", category: "search", pattern: /Slurp/i, verifiable: false },
152
280
  {
153
- name: "Slurp",
281
+ name: "Yahoo-Slurp",
154
282
  category: "search",
155
- pattern: /Slurp/i,
156
- // Yahoo Search
283
+ pattern: /Yahoo.*Slurp/i,
157
284
  verifiable: false
158
285
  },
159
286
  {
@@ -174,52 +301,189 @@ var SEARCH_BOTS = [
174
301
  pattern: /YandexBot/i,
175
302
  verifiable: false
176
303
  },
304
+ { name: "Sogou", category: "search", pattern: /Sogou/i, verifiable: false },
305
+ { name: "Exabot", category: "search", pattern: /Exabot/i, verifiable: false },
306
+ {
307
+ name: "Algolia",
308
+ category: "search",
309
+ pattern: /Algolia.*Crawler|AlgoliaBot/i,
310
+ verifiable: false
311
+ },
312
+ {
313
+ name: "PetalBot",
314
+ category: "search",
315
+ pattern: /PetalBot/i,
316
+ verifiable: false
317
+ },
318
+ {
319
+ name: "SeekportBot",
320
+ category: "search",
321
+ pattern: /SeekportBot/i,
322
+ verifiable: false
323
+ },
324
+ {
325
+ name: "SeznamBot",
326
+ category: "search",
327
+ pattern: /SeznamBot/i,
328
+ verifiable: false
329
+ },
330
+ {
331
+ name: "QwantBot",
332
+ category: "search",
333
+ pattern: /Qwant(Bot)?/i,
334
+ verifiable: false
335
+ },
336
+ {
337
+ name: "NaverBot",
338
+ category: "search",
339
+ pattern: /Yeti\/|NaverBot/i,
340
+ verifiable: false
341
+ },
177
342
  {
178
- name: "Sogou",
343
+ name: "Adsnaver",
179
344
  category: "search",
180
- pattern: /Sogou/i,
345
+ pattern: /adsnaver/i,
181
346
  verifiable: false
182
347
  },
183
348
  {
184
- name: "Exabot",
349
+ name: "PinterestBot",
185
350
  category: "search",
186
- pattern: /Exabot/i,
351
+ pattern: /Pinterest/i,
352
+ verifiable: false
353
+ },
354
+ {
355
+ name: "Seobility",
356
+ category: "search",
357
+ pattern: /Seobility/i,
358
+ verifiable: false
359
+ },
360
+ {
361
+ name: "JobsWithGPT",
362
+ category: "search",
363
+ pattern: /JobsWithGPT/i,
187
364
  verifiable: false
188
365
  }
189
366
  ];
190
- var GENERIC_BOTS = [
191
- { name: "curl", category: "scraper", pattern: /^curl\//i, verifiable: false },
192
- { name: "wget", category: "scraper", pattern: /^Wget\//i, verifiable: false },
367
+ var SEO_BOTS = [
193
368
  {
194
- name: "python-requests",
195
- category: "scraper",
196
- pattern: /python-requests/i,
369
+ name: "AhrefsBot",
370
+ category: "seo",
371
+ pattern: /AhrefsBot/i,
197
372
  verifiable: false
198
373
  },
199
374
  {
200
- name: "Go-http-client",
201
- category: "scraper",
202
- pattern: /Go-http-client/i,
375
+ name: "AhrefsSiteAudit",
376
+ category: "seo",
377
+ pattern: /AhrefsSiteAudit/i,
203
378
  verifiable: false
204
379
  },
205
380
  {
206
- name: "axios",
207
- category: "scraper",
208
- pattern: /^axios\//i,
381
+ name: "SemrushBot",
382
+ category: "seo",
383
+ pattern: /SemrushBot|Semrush/i,
209
384
  verifiable: false
210
385
  },
211
386
  {
212
- name: "node-fetch",
213
- category: "scraper",
214
- pattern: /node-fetch/i,
387
+ name: "Semrush-SiteAudit",
388
+ category: "seo",
389
+ pattern: /semrush.*site.*audit/i,
215
390
  verifiable: false
216
391
  },
217
392
  {
218
- name: "Scrapy",
219
- category: "scraper",
220
- pattern: /Scrapy/i,
393
+ name: "DataForSeoBot",
394
+ category: "seo",
395
+ pattern: /DataForSeoBot/i,
396
+ verifiable: false
397
+ },
398
+ {
399
+ name: "Barkrowler",
400
+ category: "seo",
401
+ pattern: /Barkrowler/i,
402
+ verifiable: false
403
+ },
404
+ { name: "Lumar", category: "seo", pattern: /Lumar/i, verifiable: false },
405
+ {
406
+ name: "SE-Ranking",
407
+ category: "seo",
408
+ pattern: /seranking/i,
409
+ verifiable: false
410
+ }
411
+ ];
412
+ var ADVERTISING_BOTS = [
413
+ {
414
+ name: "Google-AdsBot",
415
+ category: "advertising",
416
+ pattern: /AdsBot-Google/i,
417
+ verifiable: true
418
+ },
419
+ {
420
+ name: "Google-AdSense",
421
+ category: "advertising",
422
+ pattern: /Mediapartners-Google/i,
423
+ verifiable: true
424
+ },
425
+ {
426
+ name: "Google-Display-Ads",
427
+ category: "advertising",
428
+ pattern: /Google-Display-Ads/i,
429
+ verifiable: true
430
+ },
431
+ {
432
+ name: "Google-AdWords",
433
+ category: "advertising",
434
+ pattern: /Google-Adwords-Instant/i,
435
+ verifiable: true
436
+ },
437
+ {
438
+ name: "AdIdxBot",
439
+ category: "advertising",
440
+ pattern: /adidxbot/i,
441
+ verifiable: true
442
+ },
443
+ {
444
+ name: "AdagioBot",
445
+ category: "advertising",
446
+ pattern: /Adagiobot/i,
447
+ verifiable: false
448
+ },
449
+ {
450
+ name: "Amazon-AdBot",
451
+ category: "advertising",
452
+ pattern: /Amazon-AdBot/i,
453
+ verifiable: false
454
+ },
455
+ {
456
+ name: "CriteoBot",
457
+ category: "advertising",
458
+ pattern: /CriteoBot/i,
459
+ verifiable: false
460
+ },
461
+ {
462
+ name: "Meta-ExternalAds",
463
+ category: "advertising",
464
+ pattern: /meta-externalads/i,
465
+ verifiable: false
466
+ },
467
+ {
468
+ name: "PulsePoint",
469
+ category: "advertising",
470
+ pattern: /PulsePoint/i,
221
471
  verifiable: false
222
472
  },
473
+ {
474
+ name: "QuantcastBot",
475
+ category: "advertising",
476
+ pattern: /QuantcastBot/i,
477
+ verifiable: false
478
+ },
479
+ {
480
+ name: "Yahoo-Ad-Monitoring",
481
+ category: "advertising",
482
+ pattern: /Yahoo.*Ad.*Monitor/i,
483
+ verifiable: false
484
+ }
485
+ ];
486
+ var MONITOR_BOTS = [
223
487
  {
224
488
  name: "UptimeRobot",
225
489
  category: "monitor",
@@ -243,11 +507,524 @@ var GENERIC_BOTS = [
243
507
  category: "monitor",
244
508
  pattern: /DatadogSynthetics/i,
245
509
  verifiable: false
510
+ },
511
+ {
512
+ name: "Better-Stack",
513
+ category: "monitor",
514
+ pattern: /Better-Stack|BetterStack/i,
515
+ verifiable: false
516
+ },
517
+ {
518
+ name: "Checkly",
519
+ category: "monitor",
520
+ pattern: /Checkly/i,
521
+ verifiable: false
522
+ },
523
+ {
524
+ name: "GTmetrix",
525
+ category: "monitor",
526
+ pattern: /GTmetrix/i,
527
+ verifiable: false
528
+ },
529
+ {
530
+ name: "HetrixTools",
531
+ category: "monitor",
532
+ pattern: /HetrixTools/i,
533
+ verifiable: false
534
+ },
535
+ {
536
+ name: "Hydrozen",
537
+ category: "monitor",
538
+ pattern: /Hydrozen/i,
539
+ verifiable: false
540
+ },
541
+ {
542
+ name: "LogicMonitor",
543
+ category: "monitor",
544
+ pattern: /LogicMonitor/i,
545
+ verifiable: false
546
+ },
547
+ {
548
+ name: "NewRelic-Minions",
549
+ category: "monitor",
550
+ pattern: /NewRelic.*Minion|Minion.*NewRelic/i,
551
+ verifiable: false
552
+ },
553
+ {
554
+ name: "OhDearBot",
555
+ category: "monitor",
556
+ pattern: /OhDearBot/i,
557
+ verifiable: false
558
+ },
559
+ {
560
+ name: "Route53-HealthCheck",
561
+ category: "monitor",
562
+ pattern: /Amazon-Route53-Health/i,
563
+ verifiable: true
564
+ },
565
+ {
566
+ name: "Sansec",
567
+ category: "monitor",
568
+ pattern: /Sansec/i,
569
+ verifiable: false
570
+ },
571
+ {
572
+ name: "Sentry-Uptime",
573
+ category: "monitor",
574
+ pattern: /Sentry.*[Uu]ptime/i,
575
+ verifiable: false
576
+ },
577
+ {
578
+ name: "Site24x7",
579
+ category: "monitor",
580
+ pattern: /Site24x7/i,
581
+ verifiable: false
582
+ },
583
+ {
584
+ name: "Google-Safety",
585
+ category: "monitor",
586
+ pattern: /Google-Safety/i,
587
+ verifiable: true
588
+ },
589
+ {
590
+ name: "Google-InspectionTool",
591
+ category: "monitor",
592
+ pattern: /Google-InspectionTool/i,
593
+ verifiable: true
594
+ },
595
+ {
596
+ name: "Brightbot",
597
+ category: "monitor",
598
+ pattern: /Brightbot/i,
599
+ verifiable: false
600
+ },
601
+ {
602
+ name: "Cookiebot",
603
+ category: "monitor",
604
+ pattern: /Cookiebot/i,
605
+ verifiable: false
606
+ },
607
+ {
608
+ name: "Dash0-Synthetic",
609
+ category: "monitor",
610
+ pattern: /Dash0/i,
611
+ verifiable: false
612
+ },
613
+ {
614
+ name: "Detectify",
615
+ category: "monitor",
616
+ pattern: /Detectify/i,
617
+ verifiable: false
618
+ },
619
+ {
620
+ name: "Marfeel-Audits",
621
+ category: "monitor",
622
+ pattern: /marfeel.*audit/i,
623
+ verifiable: false
624
+ },
625
+ {
626
+ name: "QATech",
627
+ category: "monitor",
628
+ pattern: /QATech|qatech/i,
629
+ verifiable: false
630
+ },
631
+ {
632
+ name: "Redirect-Pizza",
633
+ category: "monitor",
634
+ pattern: /redirect\.pizza/i,
635
+ verifiable: false
636
+ },
637
+ {
638
+ name: "Stably",
639
+ category: "monitor",
640
+ pattern: /Stably/i,
641
+ verifiable: false
642
+ },
643
+ {
644
+ name: "Termlybot",
645
+ category: "monitor",
646
+ pattern: /Termlybot/i,
647
+ verifiable: false
648
+ },
649
+ {
650
+ name: "Updown-io",
651
+ category: "monitor",
652
+ pattern: /updown\.io|updown-io/i,
653
+ verifiable: false
654
+ },
655
+ {
656
+ name: "VercelFlags",
657
+ category: "monitor",
658
+ pattern: /vercelflags/i,
659
+ verifiable: false
660
+ },
661
+ {
662
+ name: "VercelTracing",
663
+ category: "monitor",
664
+ pattern: /verceltracing/i,
665
+ verifiable: false
666
+ }
667
+ ];
668
+ var PREVIEW_BOTS = [
669
+ {
670
+ name: "facebookexternalhit",
671
+ category: "preview",
672
+ pattern: /facebookexternalhit/i,
673
+ verifiable: true
674
+ },
675
+ {
676
+ name: "Twitterbot",
677
+ category: "preview",
678
+ pattern: /Twitterbot/i,
679
+ verifiable: false
680
+ },
681
+ {
682
+ name: "LinkedInBot",
683
+ category: "preview",
684
+ pattern: /LinkedInBot/i,
685
+ verifiable: false
686
+ },
687
+ {
688
+ name: "iframely",
689
+ category: "preview",
690
+ pattern: /iframely/i,
691
+ verifiable: false
692
+ },
693
+ {
694
+ name: "Buffer-Preview",
695
+ category: "preview",
696
+ pattern: /Buffer.*[Bb]ot|BufferBot/i,
697
+ verifiable: false
698
+ },
699
+ {
700
+ name: "GitHub-Camo",
701
+ category: "preview",
702
+ pattern: /github-camo/i,
703
+ verifiable: true
704
+ },
705
+ {
706
+ name: "Google-Docs-Preview",
707
+ category: "preview",
708
+ pattern: /Google-Docs/i,
709
+ verifiable: true
710
+ },
711
+ {
712
+ name: "Google-Image-Proxy",
713
+ category: "preview",
714
+ pattern: /Google-Image-Proxy/i,
715
+ verifiable: true
716
+ },
717
+ {
718
+ name: "Google-PageRenderer",
719
+ category: "preview",
720
+ pattern: /Google-PageRenderer/i,
721
+ verifiable: true
722
+ },
723
+ {
724
+ name: "MicrosoftPreview",
725
+ category: "preview",
726
+ pattern: /MicrosoftPreview/i,
727
+ verifiable: true
728
+ },
729
+ {
730
+ name: "Naver-BlueNo",
731
+ category: "preview",
732
+ pattern: /naver-blueno/i,
733
+ verifiable: false
734
+ },
735
+ {
736
+ name: "Chrome-Prefetch-Proxy",
737
+ category: "preview",
738
+ pattern: /Chrome.*Prefetch.*Proxy/i,
739
+ verifiable: true
740
+ },
741
+ {
742
+ name: "Marfeel-Preview",
743
+ category: "preview",
744
+ pattern: /marfeel.*preview/i,
745
+ verifiable: false
746
+ },
747
+ {
748
+ name: "Marfeel-Flowcards",
749
+ category: "preview",
750
+ pattern: /marfeel.*flowcard/i,
751
+ verifiable: false
752
+ },
753
+ {
754
+ name: "Vemetric-Favicon",
755
+ category: "preview",
756
+ pattern: /Vemetric.*[Ff]avicon/i,
757
+ verifiable: false
758
+ },
759
+ {
760
+ name: "Vercel-Favicon",
761
+ category: "preview",
762
+ pattern: /vercel.*favicon/i,
763
+ verifiable: false
764
+ },
765
+ {
766
+ name: "Vercel-Screenshot",
767
+ category: "preview",
768
+ pattern: /vercel.*screenshot/i,
769
+ verifiable: false
770
+ },
771
+ {
772
+ name: "Vercel-Build-Container",
773
+ category: "preview",
774
+ pattern: /vercel.*build.*container/i,
775
+ verifiable: false
776
+ }
777
+ ];
778
+ var WEBHOOK_BOTS = [
779
+ {
780
+ name: "Stripe-Webhook",
781
+ category: "webhook",
782
+ pattern: /Stripe/i,
783
+ verifiable: true
784
+ },
785
+ {
786
+ name: "GitHub-Hookshot",
787
+ category: "webhook",
788
+ pattern: /GitHub-Hookshot/i,
789
+ verifiable: true
790
+ },
791
+ {
792
+ name: "PayPal-Webhook",
793
+ category: "webhook",
794
+ pattern: /PayPal/i,
795
+ verifiable: true
796
+ },
797
+ {
798
+ name: "Adyen-Webhook",
799
+ category: "webhook",
800
+ pattern: /Adyen/i,
801
+ verifiable: true
802
+ },
803
+ {
804
+ name: "Atlassian-Webhook",
805
+ category: "webhook",
806
+ pattern: /Atlassian.*Jira/i,
807
+ verifiable: true
808
+ },
809
+ {
810
+ name: "CustomerIO-Webhook",
811
+ category: "webhook",
812
+ pattern: /Customer\.io/i,
813
+ verifiable: false
814
+ },
815
+ {
816
+ name: "Facebook-Webhook",
817
+ category: "webhook",
818
+ pattern: /Facebook.*Webhook/i,
819
+ verifiable: true
820
+ },
821
+ {
822
+ name: "fal-Webhook",
823
+ category: "webhook",
824
+ pattern: /\bfal\.ai\b/i,
825
+ verifiable: false
826
+ },
827
+ {
828
+ name: "Google-AdMob",
829
+ category: "webhook",
830
+ pattern: /Google-AdMob/i,
831
+ verifiable: true
832
+ },
833
+ {
834
+ name: "Hookdeck",
835
+ category: "webhook",
836
+ pattern: /Hookdeck/i,
837
+ verifiable: false
838
+ },
839
+ {
840
+ name: "Inngest",
841
+ category: "webhook",
842
+ pattern: /Inngest/i,
843
+ verifiable: false
844
+ },
845
+ {
846
+ name: "Polar-Webhook",
847
+ category: "webhook",
848
+ pattern: /Polar.*Webhook/i,
849
+ verifiable: false
850
+ },
851
+ {
852
+ name: "QStash",
853
+ category: "webhook",
854
+ pattern: /QStash/i,
855
+ verifiable: false
856
+ },
857
+ {
858
+ name: "Razorpay-Webhook",
859
+ category: "webhook",
860
+ pattern: /Razorpay/i,
861
+ verifiable: false
862
+ },
863
+ {
864
+ name: "Sanity-Webhook",
865
+ category: "webhook",
866
+ pattern: /Sanity.*Webhook/i,
867
+ verifiable: false
868
+ },
869
+ { name: "Svix", category: "webhook", pattern: /Svix/i, verifiable: false }
870
+ ];
871
+ var FEED_BOTS = [
872
+ {
873
+ name: "Google-FeedFetcher",
874
+ category: "feed",
875
+ pattern: /FeedFetcher-Google/i,
876
+ verifiable: true
877
+ },
878
+ {
879
+ name: "Google-PublisherCenter",
880
+ category: "feed",
881
+ pattern: /Google-Publisher-Center/i,
882
+ verifiable: true
883
+ },
884
+ {
885
+ name: "Apple-Podcasts",
886
+ category: "feed",
887
+ pattern: /ApplePodcasts|Apple.*Podcasts/i,
888
+ verifiable: true
889
+ },
890
+ {
891
+ name: "Artemis",
892
+ category: "feed",
893
+ pattern: /Artemis.*[Cc]rawler/i,
894
+ verifiable: false
895
+ }
896
+ ];
897
+ var ECOMMERCE_BOTS = [
898
+ {
899
+ name: "Google-Storebot",
900
+ category: "ecommerce",
901
+ pattern: /Storebot-Google/i,
902
+ verifiable: true
903
+ },
904
+ {
905
+ name: "Channel3Bot",
906
+ category: "ecommerce",
907
+ pattern: /Channel3Bot/i,
908
+ verifiable: false
909
+ },
910
+ {
911
+ name: "GeedoProductSearch",
912
+ category: "ecommerce",
913
+ pattern: /GeedoProductSearch/i,
914
+ verifiable: false
915
+ },
916
+ {
917
+ name: "Ryebot",
918
+ category: "ecommerce",
919
+ pattern: /Ryebot/i,
920
+ verifiable: false
921
+ }
922
+ ];
923
+ var VERIFICATION_BOTS = [
924
+ {
925
+ name: "Google-SiteVerifier",
926
+ category: "verification",
927
+ pattern: /Google-Site-Verification/i,
928
+ verifiable: true
929
+ },
930
+ {
931
+ name: "Google-AssociationService",
932
+ category: "verification",
933
+ pattern: /Google-Association-Service/i,
934
+ verifiable: true
935
+ },
936
+ {
937
+ name: "Google-BusinessLink",
938
+ category: "verification",
939
+ pattern: /Google-BusinessLink/i,
940
+ verifiable: true
941
+ },
942
+ {
943
+ name: "Cybaa-Agent",
944
+ category: "verification",
945
+ pattern: /Cybaa/i,
946
+ verifiable: false
947
+ }
948
+ ];
949
+ var ANALYTICS_BOTS = [
950
+ {
951
+ name: "Chrome-Lighthouse",
952
+ category: "analytics",
953
+ pattern: /Chrome-Lighthouse/i,
954
+ verifiable: true
955
+ },
956
+ {
957
+ name: "Stripebot",
958
+ category: "analytics",
959
+ pattern: /Stripebot/i,
960
+ verifiable: true
961
+ }
962
+ ];
963
+ var SOCIAL_BOTS = [
964
+ {
965
+ name: "Marfeel-Social",
966
+ category: "social",
967
+ pattern: /marfeel.*social/i,
968
+ verifiable: false
969
+ }
970
+ ];
971
+ var ACCESSIBILITY_BOTS = [
972
+ {
973
+ name: "Google-Read-Aloud",
974
+ category: "accessibility",
975
+ pattern: /Google-Read-Aloud/i,
976
+ verifiable: true
977
+ }
978
+ ];
979
+ var GENERIC_BOTS = [
980
+ { name: "curl", category: "scraper", pattern: /^curl\//i, verifiable: false },
981
+ { name: "wget", category: "scraper", pattern: /^Wget\//i, verifiable: false },
982
+ {
983
+ name: "python-requests",
984
+ category: "scraper",
985
+ pattern: /python-requests/i,
986
+ verifiable: false
987
+ },
988
+ {
989
+ name: "Go-http-client",
990
+ category: "scraper",
991
+ pattern: /Go-http-client/i,
992
+ verifiable: false
993
+ },
994
+ {
995
+ name: "axios",
996
+ category: "scraper",
997
+ pattern: /^axios\//i,
998
+ verifiable: false
999
+ },
1000
+ {
1001
+ name: "node-fetch",
1002
+ category: "scraper",
1003
+ pattern: /node-fetch/i,
1004
+ verifiable: false
1005
+ },
1006
+ {
1007
+ name: "Scrapy",
1008
+ category: "scraper",
1009
+ pattern: /Scrapy/i,
1010
+ verifiable: false
246
1011
  }
247
1012
  ];
248
1013
  var ALL_BOTS = [
249
1014
  ...AI_BOTS,
1015
+ ...AI_ASSISTANT_BOTS,
250
1016
  ...SEARCH_BOTS,
1017
+ ...SEO_BOTS,
1018
+ ...ADVERTISING_BOTS,
1019
+ ...MONITOR_BOTS,
1020
+ ...PREVIEW_BOTS,
1021
+ ...WEBHOOK_BOTS,
1022
+ ...FEED_BOTS,
1023
+ ...ECOMMERCE_BOTS,
1024
+ ...VERIFICATION_BOTS,
1025
+ ...ANALYTICS_BOTS,
1026
+ ...SOCIAL_BOTS,
1027
+ ...ACCESSIBILITY_BOTS,
251
1028
  ...GENERIC_BOTS
252
1029
  ];
253
1030
 
@@ -335,42 +1112,90 @@ function extractAutomationHeaders(headers) {
335
1112
  }
336
1113
 
337
1114
  // src/index.ts
338
- async function sendToTelemetry(payload, config) {
339
- if (!config.apiUrl) {
340
- config.apiUrl = "http://localhost:3001";
1115
+ function buildHeaders(config) {
1116
+ const headers = {
1117
+ "Content-Type": "application/json"
1118
+ };
1119
+ if (config.authorizationHeader) {
1120
+ headers["Authorization"] = config.authorizationHeader;
1121
+ } else if (config.serverSecret) {
1122
+ headers["Authorization"] = `Bearer ${config.serverSecret}`;
341
1123
  }
342
- const apiUrl = config.apiUrl || "https://telemetry.yourdomain.com";
343
- const endpoint = `${apiUrl}/v1/track/server-pageview`;
344
- if (config.debug) {
345
- console.log(`[Telemetry] Sending payload to ${endpoint}`, payload);
1124
+ if (config.headers) {
1125
+ Object.assign(headers, config.headers);
346
1126
  }
347
- try {
348
- const response = await fetch(endpoint, {
349
- method: "POST",
350
- headers: {
351
- "Content-Type": "application/json",
352
- // The middleware passes a server secret instead of origin check
353
- "Authorization": `Bearer ${config.serverSecret}`
354
- },
355
- body: JSON.stringify(payload)
356
- });
357
- if (!response.ok && config.debug) {
358
- console.error(`[Telemetry] Failed to send payload: ${response.status} ${response.statusText}`);
359
- const text = await response.text();
360
- console.error(`[Telemetry] Response body:`, text);
1127
+ return headers;
1128
+ }
1129
+ async function sendWithRetry(endpoint, payload, config, retries = 2) {
1130
+ const headers = buildHeaders(config);
1131
+ for (let attempt = 0; attempt <= retries; attempt++) {
1132
+ const controller = new AbortController();
1133
+ const timeout = setTimeout(() => controller.abort(), 5e3);
1134
+ try {
1135
+ const response = await fetch(endpoint, {
1136
+ method: "POST",
1137
+ headers,
1138
+ body: JSON.stringify(payload),
1139
+ signal: controller.signal
1140
+ });
1141
+ clearTimeout(timeout);
1142
+ if (response.ok) return;
1143
+ if (config.debug) {
1144
+ const text = await response.text();
1145
+ console.error(
1146
+ `[Telemetry] Attempt ${attempt + 1} failed: ${response.status} \u2014 ${text}`
1147
+ );
1148
+ }
1149
+ if (response.status >= 400 && response.status < 500) return;
1150
+ } catch (error) {
1151
+ clearTimeout(timeout);
1152
+ if (config.debug) {
1153
+ if (error?.name === "AbortError") {
1154
+ console.error(`[Telemetry] Attempt ${attempt + 1} timed out after 5s.`);
1155
+ } else {
1156
+ console.error(`[Telemetry] Attempt ${attempt + 1} error:`, error);
1157
+ }
1158
+ }
1159
+ }
1160
+ if (attempt < retries) {
1161
+ await new Promise((r) => setTimeout(r, 200 * Math.pow(2, attempt)));
361
1162
  }
362
- } catch (error) {
1163
+ }
1164
+ if (config.debug) {
1165
+ console.error("[Telemetry] All retry attempts failed \u2014 giving up.");
1166
+ }
1167
+ }
1168
+ async function sendToTelemetry(payload, config) {
1169
+ if (!config.apiUrl) {
363
1170
  if (config.debug) {
364
- console.error("[Telemetry] Error sending payload:", error);
1171
+ console.warn("[Telemetry] No apiUrl configured \u2014 skipping telemetry send.");
365
1172
  }
1173
+ return;
1174
+ }
1175
+ const endpoint = `${config.apiUrl}/v1/track/server-pageview`;
1176
+ if (config.debug) {
1177
+ console.log(`[Telemetry] Sending payload to ${endpoint}`, payload);
366
1178
  }
1179
+ await sendWithRetry(endpoint, payload, config);
367
1180
  }
368
1181
  // Annotate the CommonJS export names for ESM import in node:
369
1182
  0 && (module.exports = {
1183
+ ACCESSIBILITY_BOTS,
1184
+ ADVERTISING_BOTS,
1185
+ AI_ASSISTANT_BOTS,
370
1186
  AI_BOTS,
371
1187
  ALL_BOTS,
1188
+ ANALYTICS_BOTS,
1189
+ ECOMMERCE_BOTS,
1190
+ FEED_BOTS,
372
1191
  GENERIC_BOTS,
1192
+ MONITOR_BOTS,
1193
+ PREVIEW_BOTS,
373
1194
  SEARCH_BOTS,
1195
+ SEO_BOTS,
1196
+ SOCIAL_BOTS,
1197
+ VERIFICATION_BOTS,
1198
+ WEBHOOK_BOTS,
374
1199
  detectBot,
375
1200
  extractAutomationHeaders,
376
1201
  sendToTelemetry