Compare commits

..

No commits in common. "805a15d257a9774c874398574914f2c0c7c26342" and "2d22602b70d16d2fc14c05fe90cf5265242c3683" have entirely different histories.

13 changed files with 3335 additions and 4244 deletions

View file

@ -1,29 +0,0 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
}
location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|woff2?)$ {
expires 30d;
add_header Cache-Control "public";
}
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log;
}
gzip on;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
gzip_min_length 1000;
gzip_proxied any;
gzip_vary on;

View file

@ -48,7 +48,7 @@ If you see a string of text that looks like this `aHR0cHM6Ly9mbWh5Lm5ldC8` you c
* **Streaming: [Cineby](https://www.cineby.gd/) / [P-Stream](https://pstream.mov/)** * **Streaming: [Cineby](https://www.cineby.gd/) / [P-Stream](https://pstream.mov/)**
* **Downloading: [Directories](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/video#wiki_.25B7_drives_.2F_directories)** * **Downloading: [Directories](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/video#wiki_.25B7_drives_.2F_directories)**
* **Torrenting: [1337x](https://1337x.to/movie-library/1/), [2](https://1337x.cc/movie-library/1/) / [ExT.to](https://ext.to/browse/?cat=1)** * **Torrenting: [1337x](https://1337x.to/movie-library/1/) / [ExT.to](https://ext.to/browse/?cat=1)**
* **Sports Streaming: [Streamed](https://streamed.su/) / [WatchSports](https://watchsports.to/)** * **Sports Streaming: [Streamed](https://streamed.su/) / [WatchSports](https://watchsports.to/)**
* **Drama Streaming: [DramaCool](https://dramacool.com.tr/)** * **Drama Streaming: [DramaCool](https://dramacool.com.tr/)**
* **Track / Discover: [Trakt](https://trakt.tv/) / [Simkl](https://simkl.com/) / [Letterboxd](https://letterboxd.com/)** * **Track / Discover: [Trakt](https://trakt.tv/) / [Simkl](https://simkl.com/) / [Letterboxd](https://letterboxd.com/)**

View file

@ -9,7 +9,7 @@
* ⭐ **[IHaveNoTV](https://ihavenotv.com)** * ⭐ **[IHaveNoTV](https://ihavenotv.com)**
* ⭐ **[DocumentaryArea](https://www.documentaryarea.com/)** / [Remove Watermark](https://github.com/acridsoul/Clear-Mark) (or use PIP) * ⭐ **[DocumentaryArea](https://www.documentaryarea.com/)** / [Remove Watermark](https://github.com/acridsoul/Clear-Mark) (or use PIP)
* ⭐ **[Documentary+](https://www.docplus.com/)** * ⭐ **[Documentary+](https://www.docplus.com/)**
* ⭐ **[1337x Documentaries](https://1337x.to/top-100-documentaries)**, *[2](https://1337x.cc/top-100-documentaries) / Torrent * ⭐ **[1337x Documentaries](https://1337x.to/top-100-documentaries)** / Torrent
* [LearnOutLoud](https://www.learnoutloud.com/) * [LearnOutLoud](https://www.learnoutloud.com/)
* [Top Documentary Films](https://topdocumentaryfilms.com/) * [Top Documentary Films](https://topdocumentaryfilms.com/)
* [Thought Maybe](https://thoughtmaybe.com/) * [Thought Maybe](https://thoughtmaybe.com/)

View file

@ -275,7 +275,7 @@
* ⭐ **[ProtonPlus](https://github.com/Vysp3r/ProtonPlus)** or [ProtonUp-QT](https://github.com/DavidoTek/ProtonUp-Qt/) - Linux Game Launcher Compatibility Managers * ⭐ **[ProtonPlus](https://github.com/Vysp3r/ProtonPlus)** or [ProtonUp-QT](https://github.com/DavidoTek/ProtonUp-Qt/) - Linux Game Launcher Compatibility Managers
* ⭐ **[Kapital Sin](https://www.kapitalsin.com/forum/index.php?board=4.0)** - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators) * ⭐ **[Kapital Sin](https://www.kapitalsin.com/forum/index.php?board=4.0)** - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators)
* ⭐ **[Torrminatorr](https://forum.torrminatorr.com/)** - Linux Games * ⭐ **[Torrminatorr](https://forum.torrminatorr.com/)** - Linux Games
* ⭐ **[johncena141](https://1337x.to/user/johncena141/)**, [2](https://1337x.cc/user/johncena141/) - Linux Games / [Search](https://games.melroy.org/) / [Support](https://gitlab.com/jc141x/portal) * ⭐ **[johncena141](https://1337x.to/user/johncena141/)** - Linux Games / [Search](https://games.melroy.org/) / [Support](https://gitlab.com/jc141x/portal)
* [UnderTaker141](https://github.com/AbdelrhmanNile/UnderTaker141) - Game Libraries / Launchers * [UnderTaker141](https://github.com/AbdelrhmanNile/UnderTaker141) - Game Libraries / Launchers
* [RuTracker](https://rutracker.org/forum/viewforum.php?f=899) - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators) / [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045) * [RuTracker](https://rutracker.org/forum/viewforum.php?f=899) - Linux Games / Use [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators) / [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045)
* [Native Linux Games](https://rentry.co/FMHYB64#native-linux-games) - Linux Games * [Native Linux Games](https://rentry.co/FMHYB64#native-linux-games) - Linux Games

View file

@ -112,70 +112,12 @@ pnpm api:preview
See the [VitePress deployment guide](https://vitepress.dev/guide/deploy) for more info. See the [VitePress deployment guide](https://vitepress.dev/guide/deploy) for more info.
### API Deployment
If you want to deploy the API component (feedback system), you'll need to set up Cloudflare Workers and KV storage.
#### Prerequisites
- A [Cloudflare account](https://dash.cloudflare.com/sign-up)
- [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/install-and-update/) installed globally
#### Step 1: Configure Wrangler
Update `wrangler.toml` with your Cloudflare account information:
1. Get your account ID from the Cloudflare dashboard (found in the right sidebar)
2. Replace the `account_id` value in `wrangler.toml` with your account ID
3. If you're using a custom domain, keep `workers_dev = false` and update the `routes` section
4. If you're deploying to `*.workers.dev`, set `workers_dev = true` and remove the `routes` section
#### Step 2: Create KV Namespace
Create a KV namespace for data storage:
```bash
npx wrangler kv:namespace create STORAGE
```
This command will return a namespace ID. Copy this ID and replace the `id` value in the `[[kv_namespaces]]` section of `wrangler.toml` (line 14).
**Note:** If you want to deploy without running Wrangler locally (e.g., in CI/CD), you'll need to:
1. Create the KV namespace manually in the Cloudflare dashboard
2. Update both the `account_id` and `id` values in `wrangler.toml` in your fork
#### Step 3: Build and Deploy
Build and deploy the API:
```bash
# Build the API
pnpm api:build
# Deploy to Cloudflare Workers
pnpm api:deploy
```
The API will be deployed to your configured domain or `*.workers.dev` subdomain.
#### Rate Limiting (Optional)
The rate limiter binding requires setup through the Cloudflare dashboard. You can skip this for basic deployments or configure it later through the Workers dashboard under the "Rate limiting" section.
#### Environment Variables #### Environment Variables
##### Build-time Variables (for Documentation) There are a few variables you can change if you wish to disable them:
These variables control what gets included when building the documentation site: - `FMHY_BUILD_NSFW` - NSFW sidebar entry (experimental)
- `FMHY_BUILD_API` - API component for feedback system.
- `FMHY_BUILD_NSFW` - Enable NSFW sidebar entry (experimental)
- `FMHY_BUILD_API` - Enable API component for feedback system
##### Runtime Variables (for API Worker)
These variables are used by the deployed Cloudflare Worker API:
- `WEBHOOK_URL` - Discord webhook URL for posting feedback messages (required for API feedback functionality)
#### Troubleshooting #### Troubleshooting
@ -189,7 +131,3 @@ These variables are used by the deployed Cloudflare Worker API:
# PowerShell # PowerShell
rm -r -fo docs/.vitepress/cache rm -r -fo docs/.vitepress/cache
``` ```
### Reverse Proxy
You should be able to use any reverse proxy with this vitepress website, but find a reasonable config for an nginx server [in the repo here](https://github.com/fmhy/edit/blob/main/.github/assets/nginx.conf)

View file

@ -481,7 +481,6 @@
* [MangaHere](https://www.mangahere.cc/) or [MangaFox](https://fanfox.net/) * [MangaHere](https://www.mangahere.cc/) or [MangaFox](https://fanfox.net/)
* [MangaTaro](https://mangataro.org/) * [MangaTaro](https://mangataro.org/)
* [Rive Manga](https://rivestream.org/manga) * [Rive Manga](https://rivestream.org/manga)
* [Comix](https://comix.to/)
* [MangaHaven](https://mangahaven.net/) * [MangaHaven](https://mangahaven.net/)
* [The Manga Library](https://rentry.co/FMHYB64#the-manga-library) * [The Manga Library](https://rentry.co/FMHYB64#the-manga-library)
* [MangaHub](https://mangahub.io/) * [MangaHub](https://mangahub.io/)

View file

@ -14,7 +14,7 @@
* ⭐ **RuTracker Tools** - [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045) / [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators) * ⭐ **RuTracker Tools** - [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045) / [Translator](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/text-tools/#wiki_.25B7_translators)
* ⭐ **[m0nkrus](https://rentry.co/FMHYB64#m0nkrus)** - Adobe / Autodesk Software * ⭐ **[m0nkrus](https://rentry.co/FMHYB64#m0nkrus)** - Adobe / Autodesk Software
* ⭐ **Adobe Tools** - [GenP](https://rentry.co/FMHYB64#genp) / [Block Adobe](https://rentry.co/FMHYB64#a-dove-is-dumb) / [Adobe Guide](https://rentry.co/FMHYB64#adobe-guide) * ⭐ **Adobe Tools** - [GenP](https://rentry.co/FMHYB64#genp) / [Block Adobe](https://rentry.co/FMHYB64#a-dove-is-dumb) / [Adobe Guide](https://rentry.co/FMHYB64#adobe-guide)
* [1337x](https://1337x.to/), [2](https://x1337x.cc/) - Video / Audio / NSFW / [Mirrors](https://1337x-status.org/) / [.onion](http://l337xdarkkaqfwzntnfk5bmoaroivtl6xsbatabvlb52umg6v3ch44yd.onion/) * [1337x](https://1337x.to/) - Video / Audio / NSFW / [Mirrors](https://1337x-status.org/) / [.onion](http://l337xdarkkaqfwzntnfk5bmoaroivtl6xsbatabvlb52umg6v3ch44yd.onion/)
* 1337x Tools - [Telegram Bot](https://t.me/search_content_bot) / [IMDb Ratings](https://github.com/kotylo/1337imdb) / [Display Magnets](https://greasyfork.org/en/scripts/373230) / [Timestamp Fix](https://greasyfork.org/en/scripts/421635) * 1337x Tools - [Telegram Bot](https://t.me/search_content_bot) / [IMDb Ratings](https://github.com/kotylo/1337imdb) / [Display Magnets](https://greasyfork.org/en/scripts/373230) / [Timestamp Fix](https://greasyfork.org/en/scripts/421635)
* [RARBG Dump](https://rarbgdump.com/) - Video / Audio / Games / Books / NSFW / Continuation Project * [RARBG Dump](https://rarbgdump.com/) - Video / Audio / Games / Books / NSFW / Continuation Project
* [LimeTorrents](https://www.limetorrents.lol/) - Video / Audio / Books * [LimeTorrents](https://www.limetorrents.lol/) - Video / Audio / Books

View file

@ -768,7 +768,7 @@
*** ***
* ↪️ **[General Torrent Sites](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/torrent)** * ↪️ **[General Torrent Sites](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/torrent)**
* ⭐ **[1337x Movies](https://1337x.to/movie-library/1/)**, [2](https://1337x.cc/movie-library/1/)- Movies / TV / Anime * ⭐ **[1337x Movies](https://1337x.to/movie-library/1/)** - Movies / TV / Anime
* ⭐ **[RuTracker Movies](https://rutracker.org/forum/index.php?c=2)** - Movies / TV / Anime / [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045) * ⭐ **[RuTracker Movies](https://rutracker.org/forum/index.php?c=2)** - Movies / TV / Anime / [Wiki](http://rutracker.wiki/) / [Rules](https://rutracker.org/forum/viewtopic.php?t=1045)
* ⭐ **[Rive](https://rivestream.org/)** - Movies / TV / Anime / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV) * ⭐ **[Rive](https://rivestream.org/)** - Movies / TV / Anime / [Status](https://rentry.co/rivestream) / [Discord](https://discord.gg/6xJmJja8fV)
* ⭐ **[Kinozal](https://kinozal.tv/)** - Movies / TV / 4K / Sign-Up Required * ⭐ **[Kinozal](https://kinozal.tv/)** - Movies / TV / 4K / Sign-Up Required

View file

@ -24,51 +24,51 @@
"@fmhy/components": "^0.0.3", "@fmhy/components": "^0.0.3",
"@headlessui/vue": "^1.7.23", "@headlessui/vue": "^1.7.23",
"@resvg/resvg-js": "^2.6.2", "@resvg/resvg-js": "^2.6.2",
"@vueuse/core": "^14.0.0", "@vueuse/core": "^13.0.0",
"consola": "^3.4.2", "consola": "^3.2.3",
"feed": "^5.1.0", "feed": "^4.2.2",
"itty-fetcher": "^1.0.10", "itty-fetcher": "^0.9.4",
"nitro-cors": "^0.7.1", "nitro-cors": "^0.7.1",
"nitropack": "^2.12.9", "nitropack": "^2.11.6",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pathe": "^2.0.3", "pathe": "^2.0.1",
"reka-ui": "^2.6.0", "reka-ui": "^2.3.1",
"unocss": "66.5.5", "unocss": "66.1.0-beta.3",
"vitepress": "^1.6.4", "vitepress": "^1.6.3",
"vue": "^3.5.24", "vue": "^3.5.13",
"x-satori": "^0.4.0", "x-satori": "^0.2.0",
"zod": "^4.1.12" "zod": "^3.24.2"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/workers-types": "^4.20251107.0", "@cloudflare/workers-types": "^4.20241230.0",
"@ianvs/prettier-plugin-sort-imports": "^4.7.0", "@ianvs/prettier-plugin-sort-imports": "^4.3.1",
"@iconify-json/carbon": "^1.2.14", "@iconify-json/carbon": "^1.2.5",
"@iconify-json/fluent": "^1.2.34", "@iconify-json/fluent": "^1.2.23",
"@iconify-json/fluent-mdl2": "^1.2.1", "@iconify-json/fluent-mdl2": "^1.2.1",
"@iconify-json/gravity-ui": "^1.2.10", "@iconify-json/gravity-ui": "^1.2.5",
"@iconify-json/heroicons-solid": "^1.2.1", "@iconify-json/heroicons-solid": "^1.2.0",
"@iconify-json/logos": "^1.2.10", "@iconify-json/logos": "^1.2.4",
"@iconify-json/lucide": "^1.2.72", "@iconify-json/lucide": "^1.2.10",
"@iconify-json/material-symbols": "^1.2.44", "@iconify-json/material-symbols": "^1.2.22",
"@iconify-json/mdi": "^1.2.3", "@iconify-json/mdi": "^1.2.1",
"@iconify-json/ph": "^1.2.2", "@iconify-json/ph": "^1.2.2",
"@iconify-json/qlementine-icons": "^1.2.11", "@iconify-json/qlementine-icons": "^1.2.6",
"@iconify-json/simple-icons": "^1.2.57", "@iconify-json/simple-icons": "^1.2.12",
"@iconify-json/twemoji": "^1.2.4", "@iconify-json/twemoji": "^1.2.1",
"@iconify/utils": "^3.0.2", "@iconify/utils": "^2.3.0",
"@types/node": "^24.10.0", "@types/node": "^20.16.12",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"nitro-cloudflare-dev": "^0.2.2", "nitro-cloudflare-dev": "^0.2.2",
"prettier": "^3.6.2", "prettier": "^3.5.3",
"prettier-plugin-pkgsort": "^0.2.1", "prettier-plugin-pkgsort": "^0.2.1",
"prettier-plugin-tailwindcss": "^0.7.1", "prettier-plugin-tailwindcss": "^0.6.11",
"sass": "^1.93.3", "sass": "^1.85.1",
"typescript": "^5.9.3", "typescript": "^5.8.2",
"unplugin-auto-import": "^20.2.0", "unplugin-auto-import": "^0.18.3",
"vite-plugin-optimize-exclude": "^0.0.1", "vite-plugin-optimize-exclude": "^0.0.1",
"vite-plugin-pwa": "^1.1.0", "vite-plugin-pwa": "^1.0.3",
"vite-plugin-terminal": "^1.3.0", "vite-plugin-terminal": "^1.2.0",
"wrangler": "^4.46.0" "wrangler": "^3.114.1"
}, },
"pnpm": { "pnpm": {
"peerDependencyRules": { "peerDependencyRules": {

View file

@ -10,9 +10,9 @@
"cf-typegen": "wrangler types" "cf-typegen": "wrangler types"
}, },
"devDependencies": { "devDependencies": {
"@cloudflare/vitest-pool-workers": "^0.10.5", "@cloudflare/vitest-pool-workers": "^0.8.19",
"typescript": "^5.9.3", "typescript": "^5.5.2",
"vitest": "~3.2.0", "vitest": "~3.2.0",
"wrangler": "^4.46.0" "wrangler": "^4.20.5"
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -14,17 +14,11 @@ describe('Hello World worker', () => {
const response = await worker.fetch(request, env, ctx); const response = await worker.fetch(request, env, ctx);
// Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions // Wait for all `Promise`s passed to `ctx.waitUntil()` to settle before running test assertions
await waitOnExecutionContext(ctx); await waitOnExecutionContext(ctx);
expect(await response.text()).toMatchInlineSnapshot(` expect(await response.text()).toMatchInlineSnapshot(`"Hello World!"`);
"<!doctype html><html lang="en"><head><title>Example Domain</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}</style><body><div><h1>Example Domain</h1><p>This domain is for use in documentation examples without needing permission. Avoid use in operations.<p><a href="https://iana.org/domains/example">Learn more</a></div></body></html>
"
`);
}); });
it('responds with Hello World! (integration style)', async () => { it('responds with Hello World! (integration style)', async () => {
const response = await SELF.fetch('https://example.com'); const response = await SELF.fetch('https://example.com');
expect(await response.text()).toMatchInlineSnapshot(` expect(await response.text()).toMatchInlineSnapshot(`"Hello World!"`);
"<!doctype html><html lang="en"><head><title>Example Domain</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}</style><body><div><h1>Example Domain</h1><p>This domain is for use in documentation examples without needing permission. Avoid use in operations.<p><a href="https://iana.org/domains/example">Learn more</a></div></body></html>
"
`);
}); });
}); });

5493
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff