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