Commit graph

237 commits

Author SHA1 Message Date
WebStreamr
fd0900e053
feat: add stats endpoint with cache stats 2025-09-03 13:00:07 +00:00
WebStreamr
2b7e9c403d
feat: configure sqlite as secondary source and extractor cache 2025-09-03 10:56:13 +00:00
WebStreamr
833043143f
chore(extractor): cache YouTube for 6h 2025-09-02 15:06:55 +00:00
WebStreamr
41aacf84db
chore(extractor): cache ExternalUrl for 6h 2025-09-02 15:05:51 +00:00
WebStreamr
969ab8d0d7
chore(extractor): start refreshing results randomly after at least 2/3 of the TTL passed 2025-09-02 14:41:55 +00:00
WebStreamr
316fd4621b
chore(extractor): cache KinoGer for 6h 2025-09-02 14:28:45 +00:00
WebStreamr
bb95118d2b
chore(extractor): cache SaveFiles for 6h 2025-09-02 14:28:04 +00:00
WebStreamr
fc17545860
chore(extractor): cache XPrime for 6h 2025-09-02 14:27:23 +00:00
WebStreamr
a250440670
chore(extractor): cache Doodstream for 6h 2025-09-02 14:26:25 +00:00
WebStreamr
1e100e6d2e
chore(extractor): cache Soaper for 12h 2025-09-02 13:48:01 +00:00
WebStreamr
ccf8006f13
chore(extractor): cache Dropload for 3h 2025-09-02 13:40:22 +00:00
WebStreamr
7ac71837b3
chore(extractor): cache SuperVideo for 3h 2025-09-02 13:39:39 +00:00
WebStreamr
c68570d2bc
chore(extractor): cache VidSrc for 3h 2025-09-02 13:38:51 +00:00
WebStreamr
dc093f7109
refactor: consistently use cacheable for caching 2025-09-02 13:33:51 +00:00
WebStreamr
c556d9500b
chore(extractor): support caching via MediaFlow Proxy 2025-08-31 20:06:33 +00:00
WebStreamr
33ee150915
fix(extractor): set missing viaMediaFlowProxy in Streamtape 2025-08-31 19:22:48 +00:00
WebStreamr
18d8ee6b79
chore(extractor): use guessSizeFromMp4 in Streamtape, Uqload and XPrime 2025-08-28 19:17:21 +00:00
WebStreamr
4a1a3b19aa
refactor: introduce guessSizeFromMp4 2025-08-28 19:01:14 +00:00
WebStreamr
cefc80fa55
chore(extractor): move Fetcher into parent, guess missing heights for SuperVideo 2025-08-28 18:58:15 +00:00
WebStreamr
c8cd2ec794
chore(extractor): add more KinoGer domains 2025-08-25 14:29:58 +00:00
WebStreamr
eecd3255f0
fix(extractor): handle SaveFiles /d/ links properly 2025-08-21 11:28:15 +00:00
WebStreamr
2d9f9bf1af
chore(extractor): add more KinoGer domains and determine resolution 2025-08-19 09:35:35 +00:00
WebStreamr
35acb49545
fix(extractor): remove unreliable title height guessing 2025-08-18 13:17:42 +00:00
WebStreamr
36f3d70467
chore(extractor): extract size and title for Fastream URLs 2025-08-18 12:30:28 +00:00
WebStreamr
5e6c71f4ad
feat(extractor): add YouTube extractor 2025-08-17 18:59:29 +00:00
WebStreamr
73627fbf0d
revert: "chore(extractor): remove HEAD request to XPrime hosters to determine size"
This reverts commit fdf1415f6d.
2025-08-17 18:17:07 +00:00
WebStreamr
63e598a725
fix(extractor): use default TTL for XPrime 2025-08-16 22:03:34 +00:00
WebStreamr
ef613f2742
chore: double HTTP cache, quadruple extractor cache 2025-08-16 16:40:15 +00:00
WebStreamr
5316199b8c
chore(extractor): increase XPrime cache to 12 hours 2025-08-16 16:24:49 +00:00
WebStreamr
fdf1415f6d
chore(extractor): remove HEAD request to XPrime hosters to determine size
they seem to be currently rate-limiting and the size info is not that
useful here
2025-08-16 16:24:43 +00:00
WebStreamr
a65b8fb507
fix(extractor): use title from XPrime API 2025-08-15 13:43:30 +00:00
WebStreamr
cfe38878d7
feat(source): add XPrime 2025-08-15 10:35:56 +00:00
WebStreamr
6492e6be82
chore(extractor): use all VidSrc TLDs to handle rate-limit better 2025-08-14 07:35:03 +00:00
WebStreamr
285996cbf6
fix(extractor): handle SaveFiles locked file 2025-08-13 20:34:20 +00:00
WebStreamr
3e964f28ff
refactor(extractor): clean-up DoodStream sightly 2025-08-13 09:59:34 +00:00
WebStreamr
c9aaf8bb8f
feat(extractor): add SaveFiles support 2025-08-13 09:57:08 +00:00
WebStreamr
8a81a5c14e
chore(extractor): add new DoodStream domains 2025-08-12 14:17:05 +00:00
WebStreamr
114d296fe3
feat: disable extractors via config 2025-07-21 19:18:20 +00:00
WebStreamr
f3f61c85cc
feat(extractor): add Fastream via MediaFlow Proxy 2025-07-18 18:38:43 +00:00
WebStreamr
533470d080
fix(extractor): do not skip external blocked URLs 2025-07-18 17:47:28 +00:00
WebStreamr
1b9ee36cfd
revert: "chore: remove Soaper 😭" 🎉
This reverts commit df60013e16.
2025-07-17 07:56:54 +00:00
WebStreamr
7cf313cedb
chore(extractor): normalize Mixdrop non-embed URLs 2025-07-16 10:56:51 +00:00
WebStreamr
69afcdcdb2
chore(extractor): normalize Dropload download URLs 2025-07-15 21:02:57 +00:00
WebStreamr
25d32117ed
fix(extractor): support DoodStream via cloudflarestorage 2025-07-14 15:58:26 +00:00
WebStreamr
df60013e16
chore: remove Soaper 😭
Refs: https://www.reddit.com/r/Piracy/comments/1lux17l/soaperlive_down_again/
2025-07-14 13:53:50 +00:00
WebStreamr
b11bba761a
fix(extractor): ignore processing SuperVideo files 2025-07-10 10:34:12 +00:00
WebStreamr
3d28b226e5
feat(extractor): add StreamEmbed support 2025-07-02 16:57:21 +00:00
WebStreamr
5c7b3fb7f2
refactor: more consistent import style 2025-07-02 09:28:10 +00:00
WebStreamr
1c986b0521
refactor(extractor): sort extractors 2025-07-01 18:30:49 +00:00
WebStreamr
5da52d648a
refactor(extractor): move title height guessing into central place 2025-07-01 18:23:27 +00:00
WebStreamr
a0ed13f18e
feat: make multi sources explicitly configurable 2025-07-01 18:02:21 +00:00
WebStreamr
81434fff0e
feat: add Japanese and Korean to languages for VixSrc 2025-07-01 15:46:30 +00:00
WebStreamr
9d3ce24b90
feat(extractor): implement Streamtape via MediaFlow Proxy 2025-06-30 18:57:34 +00:00
WebStreamr
b88eba017d
chore(extractor): simplify type and passing of height 2025-06-30 18:57:34 +00:00
WebStreamr
8c8bfd6051
chore(extractor): add viaMediaFlowProxy flag to extractors 2025-06-30 13:32:11 +00:00
WebStreamr
adae573a0f
chore(extractor): handle Dropload queued files better 2025-06-26 12:21:38 +00:00
WebStreamr
00681e1411
fix(extractor): disable ip/session locked Fsst
until a solution is found or MediaFlow Proxy is added
2025-06-26 04:21:20 +00:00
WebStreamr
b9d0fb3613
fix(extractor): filter by configured languages in VixSrc 2025-06-25 20:13:17 +00:00
WebStreamr
ec037d7c90
fix(extractor): do not cache session-scoped Fsst
should fix issues where results work only once
2025-06-25 20:06:18 +00:00
WebStreamr
c0fc6ff7ea
feat(extractor): support multi-language in VixSrc 2025-06-25 19:06:13 +00:00
WebStreamr
91d5e9dd36
refactor: add support for multi-language extractor results 2025-06-25 18:27:44 +00:00
WebStreamr
287b031a12
fix(extractor): avoid cache clash between context dependent extractors 2025-06-24 23:22:47 +00:00
WebStreamr
f12e3c5bd8
feat(extractor): implement VixSrc via MediaFlow Proxy 2025-06-24 19:07:23 +00:00
WebStreamr
7ea57222d9
refactor: pass Context instead of Config to MFP helper 2025-06-24 11:33:58 +00:00
WebStreamr
b2eb16fc82
refactor: extract Media Flow Proxy functions 2025-06-24 10:52:38 +00:00
WebStreamr
ab588a1501
feat(extractor): implement Uqload via MediaFlow Proxy 2025-06-23 12:35:54 +00:00
WebStreamr
fd1145c162
fix(extractor): introduce format and set notWebReady accordingly
According to https://github.com/Stremio/stremio-addon-sdk/blob/master/docs/api/responses/stream.md
2025-06-20 18:40:59 +00:00
WebStreamr
d641fa1c2d
chore(extractor): add MediaFlow Proxy info to Mixdrop label 2025-06-20 08:46:46 +00:00
WebStreamr
7c600427e6
feat(extractor): implement Mixdrop via MediaFlow Proxy 2025-06-19 20:51:39 +00:00
WebStreamr
2d4c5a8221
test: introduce helper function createTestContext 2025-06-19 11:32:59 +00:00
WebStreamr
1d263b5540
chore(extractor): show label instead of host for errors 2025-06-19 11:04:44 +00:00
WebStreamr
c1f9de58b0
chore: do not show external URLs by default 2025-06-18 10:06:13 +00:00
WebStreamr
6c7993cdba
fix(extractor): handle Fsst with single file result 2025-06-18 09:33:40 +00:00
WebStreamr
952993a537
chore(extractor): set Referer to URL origin for external URLs 2025-06-15 20:41:02 +00:00
WebStreamr
3a28de46bd
fix(extractor): handle missing height infos in playlist properly 2025-06-15 11:27:53 +00:00
WebStreamr
dd121a068a
fix(extractor): only cache URL results if there was no error 2025-06-15 11:16:14 +00:00
WebStreamr
81d788ef84
chore(extractor): add various exotic DoodStream domains 2025-06-14 17:58:19 +00:00
WebStreamr
f11c591dc5
chore: do not pass referer through context 2025-06-14 13:44:32 +02:00
WebStreamr
2853bff284
refactor: use context scoped fixtures 2025-06-13 22:37:50 +02:00
WebStreamr
3a4ff73953
test: hand-rolled, explicit Fetcher mock 2025-06-13 21:53:11 +02:00
WebStreamr
4bc25692a8
refactor: use proper prototype class methods 2025-06-13 21:26:26 +02:00
WebStreamr
4caf62a367
test: instantiate mocked Fetcher with logger consistently 2025-06-13 13:20:13 +00:00
WebStreamr
15099de798
refactor: introduce helper showExternalUrls() 2025-06-13 10:24:32 +00:00
WebStreamr
9b5943208e
refactor(extractor): introduce parent class for simplifications 2025-06-13 10:04:40 +00:00
WebStreamr
bdae1ff346
refactor: define member accessiblity explicitly 2025-06-13 09:42:06 +00:00
WebStreamr
013fb4084f
fix(extractor): handle missing VidSrc files 2025-06-12 20:58:25 +00:00
WebStreamr
d2d7e84d9b
refactor: separate handlers and extractors 2025-06-12 20:56:50 +00:00
WebStreamr
250d6a1323
refactor: make CountryCode an enum 2025-06-12 15:56:33 +00:00
WebStreamr
d1da91e030
fix(extractor): detect SuperVideo video deletion/expiration 2025-06-12 12:06:52 +00:00
WebStreamr
dd6d485340
feat(handler): add VidSrc with CloudStream Pro support 2025-06-11 20:46:28 +00:00
WebStreamr
4dc3c636a6
refactor: extract playlist height guessing 2025-06-11 20:18:49 +00:00
WebStreamr
2ea8c16d9e
chore(extractor): improve SuperVideo title 2025-06-11 10:08:13 +00:00
WebStreamr
63079bf80a
chore(extractor): support dooood URLs 2025-06-11 08:25:58 +00:00
WebStreamr
19395f1921
chore(extractor): decrease timeout and ignore errors for external URLs 2025-06-11 08:17:58 +00:00
WebStreamr
fcec03a6a4
fix(handler): do not share decipher instance in KinoGer 2025-06-10 20:16:48 +00:00
WebStreamr
262abde2fc
feat(extractor): implement KinoGer extractor 2025-06-10 19:30:33 +00:00
WebStreamr
b940df5bc0
chore(extractor): add DoodStream height guessing based on title 2025-06-10 19:21:00 +00:00
WebStreamr
041c04e327
fix(extractor): prefer using extractor title 2025-06-10 19:13:04 +00:00
WebStreamr
141c737cf3
chore(extractor): support dooodster links via DoodStream 2025-06-10 15:48:11 +00:00
WebStreamr
dd1b3a1f1d
chore(extractor): support embed-only SuperVideo URLs 2025-06-10 15:17:53 +00:00
WebStreamr
4da121d094
refactor(extractor): add return type to all extract methods 2025-06-10 15:15:52 +00:00
WebStreamr
2d615ce582
refactor(extractor): introduce URL normalization 2025-06-10 15:03:05 +00:00
WebStreamr
8382c009f4
feat(handler): add support for KinoGer Fsst 2025-06-09 20:42:10 +00:00
WebStreamr
1ca4ea4abe
chore(extractor): don't use FlareSolverr for external URLs 2025-06-09 11:36:17 +00:00
WebStreamr
d1ff7cd732
chore(extractor): add bytes detection to DoodStream 2025-06-08 19:27:18 +00:00
WebStreamr
0446d52e78
refactor: UrlResult[] instead of UrlResult | undefined 2025-06-08 18:55:03 +00:00
WebStreamr
7d0544a590
chore(handler): add height detection to Soaper 2025-06-08 18:21:52 +00:00
WebStreamr
717c2afdc4
feat(handler): implement EN Soaper source 2025-06-07 19:24:50 +00:00
WebStreamr
1b8f75f00e
fix(extractor): do not mutate URLs to avoid cache misses 2025-06-04 13:23:54 +00:00
WebStreamr
fef59dd03b
fix: never cache result errors 2025-06-04 12:05:59 +00:00
WebStreamr
b69c9cde03
chore: cache successful results as long as we safely can 2025-06-04 10:06:24 +00:00
WebStreamr
ef2c45e2cb
chore: add more error infos to results 2025-06-03 21:56:19 +00:00
WebStreamr
f6967da5cc
chore: try to log error causes 2025-06-03 14:54:05 +00:00
WebStreamr
2eb09fc65a
chore: generalize forbidden/blocked handling 2025-06-01 19:31:11 +00:00
WebStreamr
799ca975ac
feat: make external URL exclusion configurable 2025-05-29 19:17:21 +00:00
WebStreamr
0638ce0a8c
fix: detect and report Cloudflare challenge blocks 2025-05-29 17:17:17 +00:00
WebStreamr
d4e402e5c9
feat: add title to meta, restructure result name 2025-05-25 18:46:55 +00:00
WebStreamr
979dddd20c
refactor: move bytes, height and countryCode into meta object
and pass that to the extractors instead. this is a preparation to
support more meta like e.g. title
2025-05-25 19:25:39 +02:00
WebStreamr
f3beb72f17
bug(extractor): handle not found case properly for DoodStream 2025-05-25 19:04:12 +02:00
WebStreamr
6b5c9a4ce7
feat(extractor): cache not found results too 2025-05-25 18:58:00 +02:00
WebStreamr
8e791bbe24
chore: better handle not found streams/links 2025-05-23 10:40:59 +00:00
WebStreamr
0a99f1e501
chore(extractor): use HEAD instead of GET to check external URLs 2025-05-22 16:36:28 +00:00
WebStreamr
23445c143b
feat(extractor): add external URL support
This could still be a useful fallback on some devices since it indicates
that we found a potential embed URL but could not extract the video URL.
2025-05-21 19:22:32 +00:00
WebStreamr
57799a777a
revert: "feat(extractor): implement UQLoad"
This reverts commit fb61d39225.

UQLoad is IP-locked.
2025-05-18 22:50:31 +02:00
WebStreamr
b5c45d806e
refactor(extractor): manipulate URL instead of creating new one 2025-05-18 21:48:17 +02:00
WebStreamr
fb61d39225
feat(extractor): implement UQLoad 2025-05-18 21:20:48 +02:00
WebStreamr
5b389ada9e
feat: configure languages instead of handlers
just feels more natural and helps maintainence. handlers should be an
internal thing.
2025-05-18 00:00:10 +02:00
WebStreamr
f2fb4821e3
refactor: use template literal consistently 2025-05-17 21:10:40 +02:00
WebStreamr
f635d6c233
chore: create ID per request for logging and error response 2025-05-17 21:06:51 +02:00
WebStreamr
4a705ce088
refactor: cleanup url and extractorRegistry variable/prop names 2025-05-17 20:25:51 +02:00
WebStreamr
8b82215c32
feat(handler): limited Frembed support 2025-05-17 20:20:19 +02:00
WebStreamr
bb395f0375
revert: "feat(extractor): implement Mixdrop"
This reverts commit 4c53161e98.

Mixdrop seems to be IP-locked.
2025-05-17 01:05:40 +02:00
WebStreamr
63a79f8758
fix(extractor): do not throw for broken/outdated link 2025-05-16 22:36:20 +02:00
WebStreamr
b790cc7954
refactor: use url.href instead of url.toString() 2025-05-16 22:34:19 +02:00
WebStreamr
4c53161e98
feat(extractor): implement Mixdrop 2025-05-16 22:34:19 +02:00
WebStreamr
24f1107df8
refactor(extractor): improve DoodStream comment about no match case 2025-05-16 18:51:32 +00:00
WebStreamr
87ec328a66
refactor(extractor): remove embed part from extractor 2025-05-16 15:07:03 +00:00