3 Commits

Author SHA1 Message Date
Indrawan I.
67445ed648 fix: resolve cache ttl calculation (#22) 2026-05-14 06:38:19 +07:00
Indrawan I.
e2c59b032b docs: elysia changes & ph fixes (#21) 2026-05-14 05:36:33 +07:00
Indrawan I.
de73724e17 ci: add playground workflows (#20) 2026-05-14 05:15:15 +07:00
4 changed files with 80 additions and 10 deletions

66
.github/workflows/playground.yml vendored Normal file
View File

@@ -0,0 +1,66 @@
name: Playground
on:
push:
branches: [ master ]
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Setup Bun
uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2.0.1
with:
bun-version: latest
- name: Install dependencies
run: bun install
- name: Generate Swagger JSON and HTML
run: |
mkdir public
bun run start:dev &
sleep 3
curl -s http://localhost:3000/docs/json > public/swagger.json
cat << 'EOF' > public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>LustPress API Playground</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui.css" />
<style>body { margin: 0; padding: 0; } .swagger-ui .topbar { display: none; }</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-bundle.js"></script>
<script src="https://unpkg.com/swagger-ui-dist@5.11.0/swagger-ui-standalone-preset.js"></script>
<script>
window.onload = () => {
window.ui = SwaggerUIBundle({
url: "./swagger.json",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset],
plugins: [SwaggerUIBundle.plugins.DownloadUrl],
});
};
</script>
</body>
</html>
EOF
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: gh-pages

View File

@@ -7,8 +7,8 @@
<a href="https://codeclimate.com/github/sinkaroid/lustpress/maintainability"><img src="https://api.codeclimate.com/v1/badges/29a2be78f853f9e3a4a3/maintainability" /></a>
</p>
Lustpress was originally named Lust and Express (legacy name) and now runs on **Bun** + **Elysia** a high-performance remake from the ground up using Bun.
The motivation of this project is to bring you an actionable data related to pornhub and other r18 sites with gather, similar design pattern, endpoint bindings, and consistent structure in mind.
Lustpress was originally named Lust and Express (legacy name) and now runs on **Bun** + **Elysia**.
The motivation of this project is carry an actionable data related to pornhub and other r18 sites with gather, similar design pattern, endpoint bindings, and consistent structure in mind.
<a href="https://sinkaroid.github.io/lustpress">Playground</a> •
<a href="https://github.com/sinkaroid/lustpress/blob/master/CONTRIBUTING.md">Contributing</a> •
@@ -28,11 +28,11 @@ The motivation of this project is to bring you an actionable data related to por
- [Installation](#installation)
- [Docker](#docker)
- [Manual](#manual)
- [Tests case](#tests)
- [Tests](#tests)
- [Playground](https://sinkaroid.github.io/lustpress)
- [Routing](#playground)
- [Status response](#status-response)
- [Pornhub JS Challenge Solver](#pornhub-js-challenge-solver)
- [Ph Challenge Solver](#pornhub-js-challenge-solver)
- [CLosing remarks](https://github.com/sinkaroid/lustpress/blob/master/CLOSING_REMARKS.md)
- [Alternative links](https://github.com/sinkaroid/lustpress/blob/master/CLOSING_REMARKS.md#alternative-links)
- [Pronunciation](#Pronunciation)
@@ -99,7 +99,7 @@ REDIS_URL = redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.clo
EXPIRE_CACHE = 1
# you must identify your origin, if not set it will use default
USER_AGENT = "lustpress/8.2.0-alpha Bun/1.3.13"
USER_AGENT = "lustpress/8.2.3-alpha Bun/1.3.13"
```
### Docker
@@ -114,7 +114,7 @@ docker run -d \
-p 3028:3000 \
-e REDIS_URL='redis://default:somenicepassword@redis-666.c10.us-east-6-6.ec666.cloud.redislabs.com:1337' \
-e EXPIRE_CACHE='1' \
-e USER_AGENT='lustpress/8.2.0-alpha Bun/1.3.13' \
-e USER_AGENT='lustpress/8.2.3-alpha Bun/1.3.13' \
ghcr.io/sinkaroid/lustpress:latest
```
@@ -129,7 +129,7 @@ docker run -d \
- Lustpress testing and hot reload
- `bun run start:dev`
## Running tests
## Tests
Run the following commands to execute tests for each supported source:
```bash

View File

@@ -1,6 +1,6 @@
{
"name": "lustpress",
"version": "8.2.1-alpha",
"version": "8.2.4-alpha",
"description": "RESTful and experimental API for PH and other R18 websites",
"main": "src/index.ts",
"scripts": {

View File

@@ -9,7 +9,7 @@ const keyv = process.env.REDIS_URL
: new Keyv();
keyv.on("error", (err) => console.log("Connection Error", err));
const ttl = 1000 * 60 * 60 * Number(process.env.EXPIRE_CACHE);
const ttl = 1000 * 60 * 60 * Number(process.env.EXPIRE_CACHE || "1");
const GEO_TIMEOUT_MS = 3000;
let cachedLastLocation: string | null = null;
@@ -77,7 +77,10 @@ class LustPress {
async fetchBody(url: string): Promise<Buffer> {
const cached = await keyv.get(url);
if (cached) return cached;
if (cached) {
console.log(`[CACHE HIT] ${url}`);
return cached;
}
const isPornhub = /pornhub\.com/i.test(url);
const domain = new URL(url).hostname;
@@ -96,6 +99,7 @@ class LustPress {
headers["Accept-Language"] = "en-US,en;q=0.9";
}
console.log(`[FETCH] ${url}`);
let res = await fetch(url, { headers, redirect: "follow" });
let text = await res.text();