SIAA / src /sub-router /flickystream.ts
GUI-STUDIO
Refactor scraper paths; add websockets & showtime
65db193
Raw
History Blame Contribute Delete
2.97 kB
import { Hono, type Context } from "hono";
import { NS_error } from "../../../../packages/lib/helpers/client/error";
import { sValidator } from "@hono/standard-validator";
import { NS_promise } from "../../../../packages/lib/helpers/client/promise";
import { NS_general_crawl } from "../../../../packages/lib/validator/general-crawl";
import { hono_validator_callback } from "../lib/misc";
import { NS_runtime } from "../../../../packages/lib/env.runtime";
import { NS_flickystream_scraper } from "../../../../packages/lib/scraper/flickystream/exe";
import { NS_scrape_post_processing } from "../../../../packages/lib/scraper/_post-processing/generic";
import { T_prop_tmdb } from "../../../../packages/lib/helpers/server/streamify/lib-helper";
const APP_ENV = () => NS_runtime.ENV_VAR_DB?.APP_ENV || process.env.APP_ENV;
const APP_ORIGIN = () =>
NS_runtime.ENV_VAR_DB?.APP_ORIGIN || process.env.APP_ORIGIN;
const REPO_ORIGIN = () =>
NS_runtime.ENV_VAR_DB?.REPO_ORIGIN || process.env.REPO_ORIGIN;
const subRouter = new Hono().basePath("/flickystream");
subRouter.post(
"/scrape-playback",
sValidator("json", NS_general_crawl.route_schema.v, hono_validator_callback),
async (ctx) => {
const REQ0 = ctx.req.url;
const REQ_ORIGIN = APP_ORIGIN() || new URL(REQ0).origin;
const REQ_headers = ctx.req.raw.headers;
const req_signal = ctx.req.raw.signal;
const body = ctx.req.valid("json");
const { film_type, id, id_type, headless, use, post_processing } = body;
const portal_url = new URL(
`/player/${film_type}/${id}${film_type === "tv" ? `/${body.season}/${body.episode}` : ""}`,
"https://flickystream.su"
);
const tmdb: T_prop_tmdb = {
id,
type: film_type,
season: (body as any).season,
episode: (body as any).episode
};
const [E_, R_] = await NS_promise.F_catch_promise({
promise: NS_flickystream_scraper.runner({
portal_url,
tmdb,
use: {
tool: use,
browser: {
headless
}
},
thread_signal: req_signal
})
});
if (E_) {
const { status, message } = NS_error.F_collect_error_status_n_message({
ERR: E_
});
return ctx.json({ error: message }, status);
}
let metadata = R_;
if (metadata && post_processing && REPO_ORIGIN() && id_type === "tmdb") {
const [E__, R__] = await NS_promise.F_catch_promise({
promise: NS_scrape_post_processing.construct({
portal: "flickystream",
pre_metadata: metadata,
tmdb: {
id,
type: film_type,
season: (body as any).season,
episode: (body as any).episode
},
processing_payload: post_processing
})
});
if (R__?.metadata) {
metadata = R__.metadata as any;
}
}
return ctx.json({ data: metadata });
}
);
export const FlickystreamRouter = subRouter;