File size: 4,904 Bytes
70335fc 6f115e7 70335fc cc43160 1c2f245 83075c1 f836f2f 3dd504b 2a1da11 0a020de dd9b2ad ea9ab95 aaeefe8 6d18814 ded0ba9 e67e90e 1122fa5 70335fc 6d18814 e28d3f7 091ea21 43cc2ca 6d18814 ca3f718 6d18814 e67e90e ea9ab95 e67e90e dc7aadc 90e4651 dc7aadc aaeefe8 70335fc 27ace8b 8babfe5 70335fc 0cdf085 6f9bb64 70335fc 9280f36 70335fc 17f2e27 fa3c558 2a1da11 98b8079 2a1da11 0753d74 8ce8afc 2a1da11 1c2f245 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
/*
Credits @xpushz on telegram
Copyright 2017-2025 (c) Randy W @xtdevs, @xtsea on telegram
from : https://github.com/TeamKillerX
Channel : @RendyProjects
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import express from 'express';
const app = express();
import * as swaggerUi from 'swagger-ui-express';
import * as cheerio from 'cheerio';
import * as lifestyle from './startup/lifestyle.js';
import { Readable } from "stream";
import { schellwithflux } from './fluxai.js';
import { OpenaiRes, tebakgambar, AnimeHentai } from './scrapper.js';
import { CheckMilWare } from './middleware/midware.js';
import { setup, serve } from './swagger.js';
import sharp from "sharp";
import cors from 'cors';
import bodyParser from 'body-parser';
import swaggerJsDoc from 'swagger-jsdoc';
// routes
import { GeminiRoutes } from './routes/googleGemini.js';
const CheckMilWares = new CheckMilWare();
app.disable('x-powered-by');
app.use(cors({
origin: '*',
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization']
}));
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
// routes
app.use(GeminiRoutes);
const swaggerOptions = {
definition: {
openapi: '3.0.0',
info: {
title: 'AkenoXJs',
version: '1.0.0',
description: "Free API by @xtdevs",
contact: {
name: "RandyDev",
url: "",
email: ""
},
license: {
name: "MIT LICENSE",
url: "https://github.com/xtsea/x-api-js/blob/main/LICENSE"
}
},
servers: [
{
url: 'https://randydev-ryu-js.hf.space',
description: 'url'
}
],
tags: [
{ name: "AI" }
]
},
apis: ["./routes/*.js", "./routes/*.route.js"]
};
const specs = swaggerJsDoc(swaggerOptions);
app.use(
'/docs',
serve,
setup(specs, {
customCss: `
.swagger-ui .topbar { display: none; }
.swagger-ui .opblock .opblock-summary-path {
display: inline-block;
word-break: break-word;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
}
`,
customCssUrl: "https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/4.3.0/swagger-ui.min.css",
customSiteTitle: 'AkenoXJs'
})
);
app.get('/', (req, res) => {
res.redirect('https://t.me/RendyProjects');
});
app.use(async (req, res, next) => {
await CheckMilWares.handle(req, res, next);
});
app.get('/api/v1/hentai-anime', async (req, res) => {
try {
const result = await AnimeHentai();
if (result) {
res.json({ result });
} else {
res.status(404).json({ error: "No result found." });
}
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.get('/api/v1/tebakgambar', async (req, res) => {
try {
const result = await tebakgambar();
if (result) {
res.json({ result });
} else {
res.status(404).json({ error: "No result found." });
}
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.get('/api/v1/gpt-old', async (req, res) => {
try {
const query = req.query.query;
const results = await OpenaiRes(query);
res.json({ results });
} catch (error) {
res.status(401).json({ error: error.message });
}
});
app.post("/api/v1/fluxai-ai", async (req, res) => {
try {
const query = req.body.query;
const imageBytes = await schellwithflux(query);
if (!query) {
return res.status(400).send('Query parameter is missing');
}
if (!imageBytes) {
return res.status(500).json({ error: "Failed to fetch image bytes" });
}
const buffer = Buffer.isBuffer(imageBytes) ? imageBytes : Buffer.from(imageBytes);
const processedImage = await sharp(buffer)
.jpeg()
.toBuffer();
res.set("Content-Type", "image/jpeg");
const stream = Readable.from(processedImage);
stream.pipe(res);
} catch (error) {
console.error("Error processing image:", error.message);
res.status(500).json({ error: "Internal server error" });
}
});
lifestyle.startServer(app); |