@alitu/user-agents-v2-api 0.1.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,556 @@
1
+ {
2
+ "comments": [
3
+ "Match the 'Referer' header (misspelled in the http spec) against entries in this file, and return the first match.",
4
+ "Useful for web-based apps or properties, which are unable to set the User-Agent of the containing browser.",
5
+ "If entry also exists in 'apps', assume properties like 'description', 'svg' are shared."
6
+ ],
7
+ "$schema": "https://raw.githubusercontent.com/opawg/user-agents-v2/master/schemas/patterns.schema.json",
8
+ "entries": [
9
+ {
10
+ "name": "Amazon Music",
11
+ "pattern": "^https://music\\.amazon\\.",
12
+ "examples": [
13
+ "https://music.amazon.com/",
14
+ "https://music.amazon.com.mx/",
15
+ "https://music.amazon.co.jp/podcasts/548537b2-c07d-4e28-8b90-ba5aeb2b3e49/-Picture-Books-English",
16
+ "https://music.amazon.de/podcasts/7803e6aa-3ef9-48e1-9e70-877d24ef3217/episodes/60a47a1b-fdb0-4a4a-9986-ee09de89ffe1/Kultur-der-Massen-und-Eliten-FEST-FLAUSCHIG-PUSSYTALK-HACK-ist-die-Elite-der-PODCASTER",
17
+ "https://music.amazon.co.uk/podcasts/search/guitar/episodes",
18
+ "https://music.amazon.co.uk/",
19
+ "https://music.amazon.co.jp/"
20
+ ],
21
+ "category": "app"
22
+ },
23
+ {
24
+ "name": "Apple Podcasts",
25
+ "pattern": "^https://(embed\\.)?podcasts\\.apple\\.com",
26
+ "examples": [
27
+ "https://podcasts.apple.com/us/podcast/xya/id12341",
28
+ "https://embed.podcasts.apple.com/"
29
+ ],
30
+ "category": "app"
31
+ },
32
+ {
33
+ "name": "Audible",
34
+ "pattern": "://www\\.audible(\\.com|\\.co\\.uk)/",
35
+ "examples": [
36
+ "https://www.audible.com/",
37
+ "https://www.audible.co.uk/"
38
+ ],
39
+ "category": "app"
40
+ },
41
+ {
42
+ "name": "Buzzsprout Web Player",
43
+ "pattern": "://[^./]+\\.buzzsprout\\.com/",
44
+ "examples": [
45
+ "https://asdf.buzzsprout.com/",
46
+ "https://www.buzzsprout.com/"
47
+ ],
48
+ "category": "host"
49
+ },
50
+ {
51
+ "name": "Captivate Web Player",
52
+ "pattern": "://player\\.captivate\\.fm/",
53
+ "examples": [
54
+ "https://player.captivate.fm/"
55
+ ],
56
+ "category": "host"
57
+ },
58
+ {
59
+ "name": "Castamatic",
60
+ "pattern": "://castamatic\\.com/",
61
+ "examples": [
62
+ "https://castamatic.com/"
63
+ ],
64
+ "category": "app"
65
+ },
66
+ {
67
+ "name": "CastBox",
68
+ "pattern": "^https://castbox\\.fm/",
69
+ "examples": [
70
+ "https://castbox.fm/"
71
+ ],
72
+ "category": "app"
73
+ },
74
+ {
75
+ "name": "Castro",
76
+ "pattern": "^https://castro\\.fm/",
77
+ "examples": [
78
+ "https://castro.fm/"
79
+ ],
80
+ "category": "app"
81
+ },
82
+ {
83
+ "name": "Chartable",
84
+ "pattern": "://link\\.chtbl\\.com/",
85
+ "examples": [
86
+ "https://link.chtbl.com/"
87
+ ]
88
+ },
89
+ {
90
+ "name": "CurioCaster",
91
+ "pattern": "://curiocaster\\.com/",
92
+ "examples": [
93
+ "https://curiocaster.com/"
94
+ ],
95
+ "category": "app"
96
+ },
97
+ {
98
+ "name": "Czech Podcasts",
99
+ "pattern": "^https://ceskepodcasty\\.cz/",
100
+ "examples": [
101
+ "https://ceskepodcasty.cz/"
102
+ ]
103
+ },
104
+ {
105
+ "name": "Deezer",
106
+ "pattern": "^https://www\\.deezer\\.com/",
107
+ "examples": [
108
+ "https://www.deezer.com/"
109
+ ],
110
+ "category": "app"
111
+ },
112
+ {
113
+ "name": "Discord",
114
+ "pattern": "://[^/]+\\.discordsays\\.com/",
115
+ "examples": [
116
+ "https://1196535986226745437.discordsays.com/"
117
+ ],
118
+ "urls": [
119
+ "https://techcrunch.com/2024/06/04/discord-and-tunein-partner-to-bring-live-radio-to-the-social-platform/"
120
+ ],
121
+ "category": "app",
122
+ "comments": "all discord activities hosted on discordsays.com. mac: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) discord/0.0.305 Chrome/120.0.6099.291 Electron/28.2.10 Safari/537.36, ios: Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
123
+ },
124
+ {
125
+ "name": "Facebook",
126
+ "pattern": "^https?://(lm|m|www|l)\\.facebook\\.com/",
127
+ "examples": [
128
+ "http://m.facebook.com/",
129
+ "https://www.facebook.com/",
130
+ "https://lm.facebook.com/",
131
+ "https://l.facebook.com/"
132
+ ],
133
+ "category": "app"
134
+ },
135
+ {
136
+ "name": "Feedly",
137
+ "pattern": "://feedly\\.com/",
138
+ "examples": [
139
+ "https://feedly.com/"
140
+ ],
141
+ "category": "app"
142
+ },
143
+ {
144
+ "name": "Feedspot",
145
+ "pattern": "://[^./]+\\.feedspot\\.com/",
146
+ "examples": [
147
+ "https://www.feedspot.com/",
148
+ "https://blog.feedspot.com/"
149
+ ],
150
+ "category": "app"
151
+ },
152
+ {
153
+ "name": "Fountain",
154
+ "pattern": "://fountain\\.fm/",
155
+ "examples": [
156
+ "https://fountain.fm/"
157
+ ],
158
+ "category": "app"
159
+ },
160
+ {
161
+ "name": "Gaana",
162
+ "pattern": "^https://gaana\\.com/",
163
+ "category": "app"
164
+ },
165
+ {
166
+ "name": "Goodpods",
167
+ "pattern": "^https://(www\\.)?goodpods\\.com",
168
+ "examples": [
169
+ "https://www.goodpods.com",
170
+ "https://goodpods.com"
171
+ ],
172
+ "category": "app"
173
+ },
174
+ {
175
+ "name": "Google Podcasts",
176
+ "pattern": "^https://podcasts\\.google\\.com/",
177
+ "examples": [
178
+ "https://podcasts.google.com/"
179
+ ],
180
+ "category": "app"
181
+ },
182
+ {
183
+ "name": "Headliner",
184
+ "pattern": "^https\\://((make|disco|eddy|play)\\.)?headliner\\.(app|link)/",
185
+ "examples": [
186
+ "https://make.headliner.app/",
187
+ "https://disco.headliner.link/",
188
+ "https://eddy.headliner.app/",
189
+ "https://play.headliner.app/"
190
+ ],
191
+ "category": "app"
192
+ },
193
+ {
194
+ "name": "iHeartRadio",
195
+ "pattern": "^https://www\\.iheart\\.com/",
196
+ "examples": [
197
+ "https://www.iheart.com/"
198
+ ],
199
+ "category": "app"
200
+ },
201
+ {
202
+ "name": "Inoreader",
203
+ "pattern": "://www\\.inoreader\\.com/",
204
+ "examples": [
205
+ "https://www.inoreader.com/"
206
+ ],
207
+ "category": "app"
208
+ },
209
+ {
210
+ "name": "iVoox",
211
+ "pattern": "://www\\.ivoox\\.com/",
212
+ "examples": [
213
+ "https://www.ivoox.com/"
214
+ ],
215
+ "category": "app"
216
+ },
217
+ {
218
+ "name": "Jam",
219
+ "pattern": "://www\\.jam\\.ai/",
220
+ "examples": [
221
+ "https://www.jam.ai/"
222
+ ],
223
+ "category": "app"
224
+ },
225
+ {
226
+ "name": "JustCast",
227
+ "pattern": "://[^./]+\\.justcast\\.com/",
228
+ "examples": [
229
+ "https://widget.justcast.com/"
230
+ ],
231
+ "category": "host"
232
+ },
233
+ {
234
+ "name": "Kajabi",
235
+ "pattern": "kajabi\\.com/?$",
236
+ "examples": [
237
+ "https://melisa-liberman.mykajabi.com/",
238
+ "https://creativityfound.mykajabi.com/"
239
+ ],
240
+ "category": "host"
241
+ },
242
+ {
243
+ "name": "LinkedIn",
244
+ "pattern": "^https://www\\.linkedin\\.com/",
245
+ "examples": [
246
+ "https://www.linkedin.com/"
247
+ ],
248
+ "category": "app"
249
+ },
250
+ {
251
+ "name": "Listen Notes",
252
+ "pattern": "^https://www\\.listennotes\\.com/",
253
+ "examples": [
254
+ "https://www.listennotes.com/"
255
+ ]
256
+ },
257
+ {
258
+ "name": "LN Beats",
259
+ "pattern": "://lnbeats\\.com/",
260
+ "examples": [
261
+ "https://lnbeats.com/"
262
+ ],
263
+ "urls": [
264
+ "https://lnbeats.com/"
265
+ ],
266
+ "category": "app"
267
+ },
268
+ {
269
+ "name": "Luminary",
270
+ "pattern": "://luminarypodcasts\\.com/",
271
+ "examples": [
272
+ "https://luminarypodcasts.com/"
273
+ ],
274
+ "category": "app"
275
+ },
276
+ {
277
+ "name": "Megaphone",
278
+ "pattern": "://[^./]+\\.megaphone\\.fm/",
279
+ "examples": [
280
+ "https://playlist.megaphone.fm/"
281
+ ],
282
+ "category": "host"
283
+ },
284
+ {
285
+ "name": "Mixcloud",
286
+ "pattern": "^https://www\\.mixcloud\\.com/",
287
+ "examples": [
288
+ "https://www.mixcloud.com/"
289
+ ],
290
+ "category": "app"
291
+ },
292
+ {
293
+ "name": "Overcast",
294
+ "pattern": "^https://overcast\\.fm/",
295
+ "examples": [
296
+ "https://overcast.fm/"
297
+ ],
298
+ "category": "app"
299
+ },
300
+ {
301
+ "name": "Pandora",
302
+ "pattern": "^https://(\\w*\\.)?pandora\\.com/",
303
+ "examples": [
304
+ "https://pandora.com/",
305
+ "https://www.pandora.com/",
306
+ "https://ce.pandora.com/?model=xbox&vendor=html5&type=GAME_CONSOLE&modelYear=2016&badge=vijjq3knevpj6d22nbljgn3736accrkg7k5e2dxnjju7oeetewqq&emulating=true&platform=xbox",
307
+ "https://tv.pandora.com/?model=WebOS&vendor=lge&type=HTML5&modelYear=2017&badge=lhb63apclwxs76eo3omyv2pqka5rhhgbb7bxhhziis3yivafnfoq"
308
+ ],
309
+ "category": "app"
310
+ },
311
+ {
312
+ "name": "Parler",
313
+ "pattern": "^https://(www\\.|app\\.)?parler\\.com",
314
+ "examples": [
315
+ "https://parler.com/",
316
+ "https://www.parler.com/",
317
+ "https://app.parler.com/"
318
+ ],
319
+ "category": "app"
320
+ },
321
+ {
322
+ "name": "Playapod",
323
+ "pattern": "://playapod\\.com/",
324
+ "examples": [
325
+ "https://playapod.com/"
326
+ ],
327
+ "category": "app"
328
+ },
329
+ {
330
+ "name": "Player FM",
331
+ "pattern": "^https://(\\w*\\.)?player\\.fm/",
332
+ "examples": [
333
+ "https://player.fm/",
334
+ "https://es.player.fm/"
335
+ ],
336
+ "category": "app"
337
+ },
338
+ {
339
+ "name": "Pocket Casts",
340
+ "pattern": "://play\\.pocketcasts\\.com/|://pca\\.st/",
341
+ "examples": [
342
+ "https://play.pocketcasts.com/",
343
+ "https://play.pocketcasts.com/web/podcasts/8d728390-249c-0131-73be-723c91aeae46",
344
+ "https://play.pocketcasts.com/web/new-releases",
345
+ "https://pca.st/"
346
+ ],
347
+ "category": "app"
348
+ },
349
+ {
350
+ "name": "Podbay",
351
+ "pattern": "^https?://(old\\.)?podbay\\.fm/",
352
+ "examples": [
353
+ "https://podbay.fm/",
354
+ "http://old.podbay.fm/"
355
+ ],
356
+ "category": "app"
357
+ },
358
+ {
359
+ "name": "Podbean",
360
+ "pattern": "^https://www\\.podbean\\.com/",
361
+ "examples": [
362
+ "https://www.podbean.com/"
363
+ ],
364
+ "category": "host"
365
+ },
366
+ {
367
+ "name": "Podcast Addict",
368
+ "pattern": "^https://(www\\.)?podcastaddict\\.com",
369
+ "examples": [
370
+ "https://www.podcastaddict.com/",
371
+ "https://podcastaddict.com",
372
+ "https://podcastaddict.com/",
373
+ "https://podcastaddict.com/podcast/3050361"
374
+ ],
375
+ "category": "app"
376
+ },
377
+ {
378
+ "name": "Podcast Index",
379
+ "pattern": "^https://podcastindex\\.org",
380
+ "svg": "podcast-index.svg",
381
+ "examples": [
382
+ "https://podcastindex.org/"
383
+ ]
384
+ },
385
+ {
386
+ "name": "Podcast.app",
387
+ "pattern": "^https://podcast\\.app/",
388
+ "examples": [
389
+ "https://podcast.app/"
390
+ ],
391
+ "category": "app"
392
+ },
393
+ {
394
+ "name": "Podchaser",
395
+ "pattern": "https://www\\.podchaser\\.com/",
396
+ "examples": [
397
+ "https://www.podchaser.com/something"
398
+ ],
399
+ "category": "app"
400
+ },
401
+ {
402
+ "name": "Podfriend",
403
+ "pattern": "://[^./]+\\.podfriend\\.com/",
404
+ "examples": [
405
+ "https://web.podfriend.com/",
406
+ "https://widget.podfriend.com/",
407
+ "https://www.podfriend.com/"
408
+ ],
409
+ "category": "app"
410
+ },
411
+ {
412
+ "name": "PodGrabber",
413
+ "pattern": "://podgrabber\\.com/",
414
+ "examples": [
415
+ "https://podgrabber.com/"
416
+ ],
417
+ "category": "app"
418
+ },
419
+ {
420
+ "name": "PodLink",
421
+ "pattern": "//pod\\.link/",
422
+ "examples": [
423
+ "https://pod.link/"
424
+ ],
425
+ "category": "app"
426
+ },
427
+ {
428
+ "name": "Podmust",
429
+ "pattern": "://podmust\\.com/",
430
+ "examples": [
431
+ "https://podmust.com/"
432
+ ],
433
+ "category": "app"
434
+ },
435
+ {
436
+ "name": "Podplay",
437
+ "pattern": "podplay\\.com",
438
+ "examples": [
439
+ "https://www.podplay.com/"
440
+ ],
441
+ "category": "app"
442
+ },
443
+ {
444
+ "name": "Podtail",
445
+ "pattern": "^https://podtail\\.com/",
446
+ "examples": [
447
+ "https://podtail.com/"
448
+ ],
449
+ "category": "app"
450
+ },
451
+ {
452
+ "name": "Podverse",
453
+ "pattern": "://podverse\\.fm/",
454
+ "examples": [
455
+ "https://podverse.fm/",
456
+ "https://podverse.fm/livestreams"
457
+ ],
458
+ "category": "app"
459
+ },
460
+ {
461
+ "name": "Podvine",
462
+ "pattern": "://podvine\\.com/",
463
+ "examples": [
464
+ "https://podvine.com/"
465
+ ],
466
+ "category": "host"
467
+ },
468
+ {
469
+ "name": "Podyssey",
470
+ "pattern": "^https://podyssey\\.fm/",
471
+ "category": "app"
472
+ },
473
+ {
474
+ "name": "Radioline",
475
+ "pattern": "://www\\.radioline\\.co/",
476
+ "examples": [
477
+ "https://www.radioline.co/"
478
+ ],
479
+ "category": "app"
480
+ },
481
+ {
482
+ "name": "RadioPublic",
483
+ "pattern": "://(embed\\.)?radiopublic\\.com/",
484
+ "examples": [
485
+ "https://radiopublic.com/",
486
+ "https://embed.radiopublic.com/"
487
+ ],
488
+ "category": "app"
489
+ },
490
+ {
491
+ "name": "Simplecast",
492
+ "pattern": "://player\\.simplecast\\.com/",
493
+ "examples": [
494
+ "https://player.simplecast.com/"
495
+ ],
496
+ "category": "host"
497
+ },
498
+ {
499
+ "name": "Spotify",
500
+ "pattern": "https://(open|api-partner)\\.spotify\\.com",
501
+ "examples": [
502
+ "https://open.spotify.com/show/3vhBp6pPJEYgGfOXGU8ogu",
503
+ "https://open.spotify.com/",
504
+ "https://api-partner.spotify.com/"
505
+ ],
506
+ "category": "app"
507
+ },
508
+ {
509
+ "name": "Stitcher",
510
+ "pattern": "^https://(www|app|classic)\\.stitcher\\.com/",
511
+ "examples": [
512
+ "https://app.stitcher.com/",
513
+ "https://www.stitcher.com/podcast/mile-marker-181/e/57173832?autoplay=true",
514
+ "https://classic.stitcher.com/"
515
+ ],
516
+ "category": "app"
517
+ },
518
+ {
519
+ "name": "Transistor Web Player",
520
+ "pattern": "://([^./]+\\.)?transistor\\.fm/",
521
+ "examples": [
522
+ "https://asdf.transistor.fm/",
523
+ "https://share.transistor.fm/"
524
+ ],
525
+ "category": "host"
526
+ },
527
+ {
528
+ "name": "TrueFans",
529
+ "pattern": "://(pod|true)fans\\.fm/",
530
+ "examples": [
531
+ "https://truefans.fm/",
532
+ "https://podfans.fm/"
533
+ ],
534
+ "urls": [
535
+ "https://truefans.fm/"
536
+ ],
537
+ "category": "app"
538
+ },
539
+ {
540
+ "name": "TuneIn",
541
+ "pattern": "^https://tunein\\.com/",
542
+ "examples": [
543
+ "https://tunein.com/"
544
+ ],
545
+ "category": "app"
546
+ },
547
+ {
548
+ "name": "Wix",
549
+ "pattern": "^https://podcasts\\.wixapps\\.net",
550
+ "examples": [
551
+ "https://podcasts.wixapps.net/"
552
+ ],
553
+ "category": "host"
554
+ }
555
+ ]
556
+ }
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@alitu/user-agents-v2-api",
3
+ "version": "0.1.0",
4
+ "description": "API for identifying User-Agent strings using OPAWG's user-agents-v2 lists.",
5
+ "main": "dist/index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+ssh://git@github.com/the-podcast-host/user-agents-v2-api.git"
9
+ },
10
+ "author": "Andrew Gentile <andrew@agentile.dev>",
11
+ "license": "UNLICENSED",
12
+ "private": false,
13
+ "scripts": {
14
+ "prebuild": "./prebuild.sh",
15
+ "build": "tsc",
16
+ "test": "eslint --fix && jest ./src",
17
+ "prepare": "husky install"
18
+ },
19
+ "dependencies": {},
20
+ "devDependencies": {
21
+ "@babel/core": "^7.24.9",
22
+ "@babel/preset-env": "^7.24.8",
23
+ "@babel/preset-typescript": "^7.24.7",
24
+ "@eslint/js": "^9.7.0",
25
+ "@types/jest": "^29.5.12",
26
+ "eslint": "9.x",
27
+ "eslint-config-prettier": "^9.1.0",
28
+ "globals": "^15.8.0",
29
+ "husky": ">=6",
30
+ "jest": "^29.7.0",
31
+ "json-schema-to-typescript": "^14.1.0",
32
+ "lint-staged": ">=10",
33
+ "prettier": "3.3.3",
34
+ "typescript": "^5.5.3",
35
+ "typescript-eslint": "^7.16.1"
36
+ },
37
+ "lint-staged": {
38
+ "*.{js,mjs,ts}": "eslint --fix",
39
+ "*.{js,mjs,ts,md}": "prettier --write"
40
+ }
41
+ }