UNPKG

rsshub

Version:
366 lines (364 loc) • 12.9 kB
import "dotenv/config"; import { ofetch } from "ofetch"; //#region lib/config.ts let envs = process.env; const value = {}; const TRUE_UA = "RSSHub/1.0 (+http://github.com/DIYgod/RSSHub; like FeedFetcher-Google)"; const toBoolean = (value$1, defaultValue) => { if (value$1 === void 0) return defaultValue; else return value$1 === "" || value$1 === "0" || value$1 === "false" ? false : !!value$1; }; const toInt = (value$1, defaultValue) => value$1 === void 0 ? defaultValue : Number.parseInt(value$1); const calculateValue = () => { const bilibili_cookies = {}; const email_config = {}; const discuz_cookies = {}; const medium_cookies = {}; const discourse_config = {}; for (const name in envs) if (name.startsWith("BILIBILI_COOKIE_")) { const uid = name.slice(16); bilibili_cookies[uid] = envs[name]; } else if (name.startsWith("EMAIL_CONFIG_")) { const id = name.slice(13); email_config[id] = envs[name]; } else if (name.startsWith("DISCUZ_COOKIE_")) { const cid = name.slice(14); discuz_cookies[cid] = envs[name]; } else if (name.startsWith("MEDIUM_COOKIE_")) { const username = name.slice(14).toLowerCase(); medium_cookies[username] = envs[name]; } else if (name.startsWith("DISCOURSE_CONFIG_")) { const id = name.slice(17); discourse_config[id] = JSON.parse(envs[name] || "{}"); } const _value = { disallowRobot: toBoolean(envs.DISALLOW_ROBOT, false), enableCluster: toBoolean(envs.ENABLE_CLUSTER, false), isPackage: !!envs.IS_PACKAGE, nodeName: envs.NODE_NAME, puppeteerRealBrowserService: envs.PUPPETEER_REAL_BROWSER_SERVICE, puppeteerWSEndpoint: envs.PUPPETEER_WS_ENDPOINT, chromiumExecutablePath: envs.CHROMIUM_EXECUTABLE_PATH, connect: { port: toInt(envs.PORT, 1200) }, listenInaddrAny: toBoolean(envs.LISTEN_INADDR_ANY, true), requestRetry: toInt(envs.REQUEST_RETRY, 2), requestTimeout: toInt(envs.REQUEST_TIMEOUT, 3e4), ua: envs.UA ?? (toBoolean(envs.NO_RANDOM_UA, false) ? TRUE_UA : "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_6_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"), trueUA: TRUE_UA, allowOrigin: envs.ALLOW_ORIGIN, cache: { type: envs.CACHE_TYPE || (envs.CACHE_TYPE === "" ? "" : "memory"), requestTimeout: toInt(envs.CACHE_REQUEST_TIMEOUT, 60), routeExpire: toInt(envs.CACHE_EXPIRE, 300), contentExpire: toInt(envs.CACHE_CONTENT_EXPIRE, 3600) }, memory: { max: toInt(envs.MEMORY_MAX, Math.pow(2, 8)) }, redis: { url: envs.REDIS_URL || "redis://localhost:6379/" }, proxyUri: envs.PROXY_URI, proxyUris: envs.PROXY_URIS ? envs.PROXY_URIS.split(",").map((uri) => uri.trim()).filter(Boolean) : void 0, proxy: { protocol: envs.PROXY_PROTOCOL, host: envs.PROXY_HOST, port: envs.PROXY_PORT, auth: envs.PROXY_AUTH, url_regex: envs.PROXY_URL_REGEX || ".*", strategy: envs.PROXY_STRATEGY || "all", failoverTimeout: toInt(envs.PROXY_FAILOVER_TIMEOUT, 5e3), healthCheckInterval: toInt(envs.PROXY_HEALTH_CHECK_INTERVAL, 6e4) }, pacUri: envs.PAC_URI, pacScript: envs.PAC_SCRIPT, accessKey: envs.ACCESS_KEY, debugInfo: envs.DEBUG_INFO || "true", loggerLevel: envs.LOGGER_LEVEL || "info", noLogfiles: toBoolean(envs.NO_LOGFILES, false), otel: { seconds_bucket: envs.OTEL_SECONDS_BUCKET || "0.01,0.1,1,2,5,15,30,60", milliseconds_bucket: envs.OTEL_MILLISECONDS_BUCKET || "10,20,50,100,250,500,1000,5000,15000" }, showLoggerTimestamp: toBoolean(envs.SHOW_LOGGER_TIMESTAMP, false), sentry: { dsn: envs.SENTRY, routeTimeout: toInt(envs.SENTRY_ROUTE_TIMEOUT, 3e4) }, enableRemoteDebugging: toBoolean(envs.ENABLE_REMOTE_DEBUGGING, false), hotlink: { template: envs.HOTLINK_TEMPLATE, includePaths: envs.HOTLINK_INCLUDE_PATHS ? envs.HOTLINK_INCLUDE_PATHS.split(",") : void 0, excludePaths: envs.HOTLINK_EXCLUDE_PATHS ? envs.HOTLINK_EXCLUDE_PATHS.split(",") : void 0 }, feature: { allow_user_hotlink_template: toBoolean(envs.ALLOW_USER_HOTLINK_TEMPLATE, false), filter_regex_engine: envs.FILTER_REGEX_ENGINE || "re2", allow_user_supply_unsafe_domain: toBoolean(envs.ALLOW_USER_SUPPLY_UNSAFE_DOMAIN, false), disable_nsfw: toBoolean(envs.DISABLE_NSFW, false) }, suffix: envs.SUFFIX, titleLengthLimit: toInt(envs.TITLE_LENGTH_LIMIT, 150), openai: { apiKey: envs.OPENAI_API_KEY, model: envs.OPENAI_MODEL || "gpt-3.5-turbo-16k", temperature: toInt(envs.OPENAI_TEMPERATURE, .2), maxTokens: toInt(envs.OPENAI_MAX_TOKENS, 0) || void 0, endpoint: envs.OPENAI_API_ENDPOINT || "https://api.openai.com/v1", inputOption: envs.OPENAI_INPUT_OPTION || "description", promptDescription: envs.OPENAI_PROMPT || "Please summarize the following article and reply with markdown format.", promptTitle: envs.OPENAI_PROMPT_TITLE || "Please translate the following title into Simplified Chinese and reply only translated text." }, follow: { ownerUserId: envs.FOLLOW_OWNER_USER_ID, description: envs.FOLLOW_DESCRIPTION, price: toInt(envs.FOLLOW_PRICE), userLimit: toInt(envs.FOLLOW_USER_LIMIT) }, bilibili: { cookies: bilibili_cookies, dmImgList: envs.BILIBILI_DM_IMG_LIST, dmImgInter: envs.BILIBILI_DM_IMG_INTER, excludeSubtitles: toBoolean(envs.BILIBILI_EXCLUDE_SUBTITLES, false) }, bitbucket: { username: envs.BITBUCKET_USERNAME, password: envs.BITBUCKET_PASSWORD }, btbyr: { host: envs.BTBYR_HOST, cookies: envs.BTBYR_COOKIE }, bupt: { portal_cookie: envs.BUPT_PORTAL_COOKIE }, caixin: { cookie: envs.CAIXIN_COOKIE }, civitai: { cookie: envs.CIVITAI_COOKIE }, dianping: { cookie: envs.DIANPING_COOKIE }, dida365: { username: envs.DIDA365_USERNAME, password: envs.DIDA365_PASSWORD }, discord: { authorization: envs.DISCORD_AUTHORIZATION }, discourse: { config: discourse_config }, discuz: { cookies: discuz_cookies }, disqus: { api_key: envs.DISQUS_API_KEY }, douban: { cookie: envs.DOUBAN_COOKIE }, ehentai: { ipb_member_id: envs.EH_IPB_MEMBER_ID, ipb_pass_hash: envs.EH_IPB_PASS_HASH, sk: envs.EH_SK, igneous: envs.EH_IGNEOUS, star: envs.EH_STAR, img_proxy: envs.EH_IMG_PROXY }, email: { config: email_config }, fanbox: { session: envs.FANBOX_SESSION_ID }, fanfou: { consumer_key: envs.FANFOU_CONSUMER_KEY, consumer_secret: envs.FANFOU_CONSUMER_SECRET, username: envs.FANFOU_USERNAME, password: envs.FANFOU_PASSWORD }, fantia: { cookies: envs.FANTIA_COOKIE }, game4399: { cookie: envs.GAME_4399 }, gelbooru: { apiKey: envs.GELBOORU_API_KEY, userId: envs.GELBOORU_USER_ID }, github: { access_token: envs.GITHUB_ACCESS_TOKEN }, gitee: { access_token: envs.GITEE_ACCESS_TOKEN }, google: { fontsApiKey: envs.GOOGLE_FONTS_API_KEY }, guozaoke: { cookies: envs.GUOZAOKE_COOKIES }, hefeng: { key: envs.HEFENG_KEY, apiHost: envs.HEFENG_API_HOST }, infzm: { cookie: envs.INFZM_COOKIE }, initium: { username: envs.INITIUM_USERNAME, password: envs.INITIUM_PASSWORD, bearertoken: envs.INITIUM_BEARER_TOKEN }, instagram: { username: envs.IG_USERNAME, password: envs.IG_PASSWORD, proxy: envs.IG_PROXY, cookie: envs.IG_COOKIE }, iwara: { username: envs.IWARA_USERNAME, password: envs.IWARA_PASSWORD }, javdb: { session: envs.JAVDB_SESSION }, jumeili: { cookie: envs.JUMEILI_COOKIE }, keylol: { cookie: envs.KEYLOL_COOKIE }, lastfm: { api_key: envs.LASTFM_API_KEY }, lightnovel: { cookie: envs.SECURITY_KEY }, lofter: { cookies: envs.LOFTER_COOKIE }, lorientlejour: { token: envs.LORIENTLEJOUR_TOKEN, username: envs.LORIENTLEJOUR_USERNAME, password: envs.LORIENTLEJOUR_PASSWORD }, malaysiakini: { email: envs.MALAYSIAKINI_EMAIL, password: envs.MALAYSIAKINI_PASSWORD, refreshToken: envs.MALAYSIAKINI_REFRESHTOKEN }, mangadex: { username: envs.MANGADEX_USERNAME, password: envs.MANGADEX_PASSWORD, clientId: envs.MANGADEX_CLIENT_ID, clientSecret: envs.MANGADEX_CLIENT_SECRET, refreshToken: envs.MANGADEX_REFRESH_TOKEN }, manhuagui: { cookie: envs.MHGUI_COOKIE }, mastodon: { apiHost: envs.MASTODON_API_HOST, accessToken: envs.MASTODON_API_ACCESS_TOKEN, acctDomain: envs.MASTODON_API_ACCT_DOMAIN }, medium: { cookies: medium_cookies, articleCookie: envs.MEDIUM_ARTICLE_COOKIE || "" }, mihoyo: { cookie: envs.MIHOYO_COOKIE }, miniflux: { instance: envs.MINIFLUX_INSTANCE || "https://reader.miniflux.app", token: envs.MINIFLUX_TOKEN || "" }, misskey: { accessToken: envs.MISSKEY_ACCESS_TOKEN }, mixi2: { authToken: envs.MIXI2_AUTH_TOKEN, authKey: envs.MIXI2_AUTH_KEY }, mox: { cookie: envs.MOX_COOKIE }, ncm: { cookies: envs.NCM_COOKIES || "" }, newrank: { cookie: envs.NEWRANK_COOKIE }, nga: { uid: envs.NGA_PASSPORT_UID, cid: envs.NGA_PASSPORT_CID }, nhentai: { username: envs.NHENTAI_USERNAME, password: envs.NHENTAI_PASSWORD }, notion: { key: envs.NOTION_TOKEN }, patreon: { sessionId: envs.PATREON_SESSION_ID }, pianyuan: { cookie: envs.PIANYUAN_COOKIE }, pixabay: { key: envs.PIXABAY_KEY }, pixiv: { refreshToken: envs.PIXIV_REFRESHTOKEN, bypassCdn: toBoolean(envs.PIXIV_BYPASS_CDN, false), bypassCdnHostname: envs.PIXIV_BYPASS_HOSTNAME || "public-api.secure.pixiv.net", bypassCdnDoh: envs.PIXIV_BYPASS_DOH || "https://1.1.1.1/dns-query", imgProxy: envs.PIXIV_IMG_PROXY || "https://i.pixiv.re" }, pkubbs: { cookie: envs.PKUBBS_COOKIE }, qingting: { id: envs.QINGTING_ID }, readwise: { accessToken: envs.READWISE_ACCESS_TOKEN }, saraba1st: { cookie: envs.SARABA1ST_COOKIE, host: envs.SARABA1ST_HOST || "https://stage1st.com" }, sehuatang: { cookie: envs.SEHUATANG_COOKIE }, scboy: { token: envs.SCBOY_BBS_TOKEN }, scihub: { host: envs.SCIHUB_HOST || "https://sci-hub.se/" }, sdo: { ff14risingstones: envs.SDO_FF14RISINGSTONES, ua: envs.SDO_UA }, sis001: { baseUrl: envs.SIS001_BASE_URL || "https://sis001.com" }, skeb: { bearerToken: envs.SKEB_BEARER_TOKEN }, sorrycc: { cookie: envs.SORRYCC_COOKIES }, spotify: { clientId: envs.SPOTIFY_CLIENT_ID, clientSecret: envs.SPOTIFY_CLIENT_SECRET, refreshToken: envs.SPOTIFY_REFRESHTOKEN }, sspai: { bearertoken: envs.SSPAI_BEARERTOKEN }, telegram: { token: envs.TELEGRAM_TOKEN, session: envs.TELEGRAM_SESSION, apiId: envs.TELEGRAM_API_ID, apiHash: envs.TELEGRAM_API_HASH, maxConcurrentDownloads: envs.TELEGRAM_MAX_CONCURRENT_DOWNLOADS, proxy: { host: envs.TELEGRAM_PROXY_HOST, port: envs.TELEGRAM_PROXY_PORT, secret: envs.TELEGRAM_PROXY_SECRET } }, tophub: { cookie: envs.TOPHUB_COOKIE }, tsdm39: { cookie: envs.TSDM39_COOKIES }, tumblr: { clientId: envs.TUMBLR_CLIENT_ID, clientSecret: envs.TUMBLR_CLIENT_SECRET, refreshToken: envs.TUMBLR_REFRESH_TOKEN }, twitter: { username: envs.TWITTER_USERNAME?.split(","), password: envs.TWITTER_PASSWORD?.split(","), authenticationSecret: envs.TWITTER_AUTHENTICATION_SECRET?.split(","), phoneOrEmail: envs.TWITTER_PHONE_OR_EMAIL?.split(","), authToken: envs.TWITTER_AUTH_TOKEN?.split(","), thirdPartyApi: envs.TWITTER_THIRD_PARTY_API }, uestc: { bbsCookie: envs.UESTC_BBS_COOKIE, bbsAuthStr: envs.UESTC_BBS_AUTH_STR }, weibo: { app_key: envs.WEIBO_APP_KEY, app_secret: envs.WEIBO_APP_SECRET, cookies: envs.WEIBO_COOKIES, redirect_url: envs.WEIBO_REDIRECT_URL }, wenku8: { cookie: envs.WENKU8_COOKIE }, wordpress: { cdnUrl: envs.WORDPRESS_CDN }, xiaoyuzhou: { device_id: envs.XIAOYUZHOU_ID, refresh_token: envs.XIAOYUZHOU_TOKEN }, xiaohongshu: { cookie: envs.XIAOHONGSHU_COOKIE }, ximalaya: { token: envs.XIMALAYA_TOKEN }, xsijishe: { cookie: envs.XSIJISHE_COOKIE, user_agent: envs.XSIJISHE_USER_AGENT }, xueqiu: { cookies: envs.XUEQIU_COOKIES }, yamibo: { salt: envs.YAMIBO_SALT, auth: envs.YAMIBO_AUTH }, youtube: { key: envs.YOUTUBE_KEY, clientId: envs.YOUTUBE_CLIENT_ID, clientSecret: envs.YOUTUBE_CLIENT_SECRET, refreshToken: envs.YOUTUBE_REFRESH_TOKEN }, zhihu: { cookies: envs.ZHIHU_COOKIES }, zodgame: { cookie: envs.ZODGAME_COOKIE }, zsxq: { accessToken: envs.ZSXQ_ACCESS_TOKEN }, smzdm: { cookie: envs.SMZDM_COOKIE } }; for (const name in _value) value[name] = _value[name]; }; calculateValue(); (async () => { if (envs.REMOTE_CONFIG) { const { default: logger } = await import("./logger-Bjm1--1u.mjs"); try { const data = await ofetch(envs.REMOTE_CONFIG, { headers: { Authorization: `Basic ${envs.REMOTE_CONFIG_AUTH}` } }); if (data) { envs = Object.assign(envs, data); calculateValue(); logger.info("Remote config loaded."); } else logger.error("Remote config load failed."); } catch (error) { logger.error("Remote config load failed.", error); } } })(); const config = value; const setConfig = (env) => { envs = Object.assign(process.env, env); calculateValue(); }; //#endregion export { setConfig as n, config as t };