Removed some obsolete client components. Added ASG Max with affiliates.

This commit is contained in:
DebaucheryLibrarian
2026-01-30 05:25:35 +01:00
parent 5042f8fb40
commit 91771c9ef4
155 changed files with 982 additions and 22880 deletions

View File

@@ -1,21 +0,0 @@
{
"extends": "airbnb-base",
"parserOptions": {
"parser": "@babel/eslint-parser",
"sourceType": "script"
},
"rules": {
"strict": 0,
"indent": "off",
"no-tabs": "off",
"no-unused-vars": ["error", {"argsIgnorePattern": "^_"}],
"no-console": 0,
"max-len": 0,
"no-underscore-dangle": 0,
"default-param-last": 0,
"prefer-destructuring": "off",
"arrow-body-style": 0,
"template-curly-spacing": "off",
"object-curly-newline": "off"
}
}

View File

@@ -33,24 +33,24 @@ async function addAlert(alert, sessionUser) {
await Promise.all([
alert.actors?.length > 0 && bulkInsert('alerts_actors', alert.actors.map((actorId) => ({
alert_id: alertId,
actor_id: actorId,
})), false),
alert_id: alertId,
actor_id: actorId,
})), false),
alert.tags?.length > 0 && bulkInsert('alerts_tags', alert.tags.map((tagId) => ({
alert_id: alertId,
tag_id: tagId,
})), false),
alert_id: alertId,
tag_id: tagId,
})), false),
alert.matches?.length > 0 && bulkInsert('alerts_matches', alert.matches.map((match) => ({
alert_id: alertId,
property: match.property,
expression: /\/.*\//.test(match.expression)
? match.expression.slice(1, -1)
: escapeRegexp(match.expression),
})), false),
alert_id: alertId,
property: match.property,
expression: /\/.*\//.test(match.expression)
? match.expression.slice(1, -1)
: escapeRegexp(match.expression),
})), false),
alert.stashes?.length > 0 && bulkInsert('alerts_stashes', alert.stashes.map((stashId) => ({
alert_id: alertId,
stash_id: stashId,
})), false),
alert_id: alertId,
stash_id: stashId,
})), false),
alert.entities && bulkInsert('alerts_entities', alert.entities.map((entityId) => ({
alert_id: alertId,
entity_id: entityId,

View File

@@ -1090,7 +1090,7 @@ async function flushOrphanedMedia(stage = 1) {
)
.as('associations'),
)
.whereRaw('associations.media_id = media.id'),
.whereRaw('associations.media_id = media.id'),
)
.limit(config.media.flushWindow);
// .delete();

View File

@@ -7,7 +7,7 @@ const logger = require('./logger')(__filename);
logger.verbose('Redis module initialized');
const redisClient = redis.createClient({
socket: config.redis,
socket: config.redis,
});
// redisClient.connect();

View File

@@ -154,11 +154,11 @@ async function fetchLatest(channel, page, options) {
const res = await unprint.get(options.parameters?.latest
? `${options.parameters.latest}?page=${page}&view=grid`
: `${channel.url}/watch-newest-clips-and-scenes.html?page=${page}&view=grid`, {
selectAll: '.item-grid-scene .grid-item',
headers: {
Cookie: 'ageConfirmed=true;',
},
});
selectAll: '.item-grid-scene .grid-item',
headers: {
Cookie: 'ageConfirmed=true;',
},
});
if (res.ok) {
return scrapeAll(res.context, channel, options);

View File

@@ -42,7 +42,7 @@ function getAvatarFallback(url) {
`${origin}${pathname}`,
url,
];
} catch (error) {
} catch (_error) {
return null;
}
}
@@ -122,11 +122,11 @@ async function scrapeScene({ query }, { url, entity }) {
release.poster = data?.thumbnailUrl || query.attribute('meta[property="og:image"]', 'content');
release.teaser = (sourcesData && [
sourcesData.mp4_large,
sourcesData.webm_large,
sourcesData.mp4,
sourcesData.webm,
])
sourcesData.mp4_large,
sourcesData.webm_large,
sourcesData.mp4,
sourcesData.webm,
])
|| data?.contentUrl
|| query.attribute('meta[property="og:video"]')
|| query.video('video[data-videocontainer-target] source');

View File

@@ -238,7 +238,7 @@ async function scrapeApiReleases(json, site, options) {
release.title = curateTitle(scene.title, site);
release.path = `/${scene.url_title}/${release.entryId}`;
if (options.parameters?.scene) {
if (typeof options.parameters?.scene === 'string') {
release.url = `${options.parameters.scene}${release.path}`;
} else if (site.url && options.parameters?.scene !== false) {
release.url = `${site.url}/en/video${release.path}`;

View File

@@ -82,7 +82,7 @@ async function fetchLatestContent(url, parameters) {
bypass: {
evaluate: async () => {
// images lazy loaded by JS, gradually scroll through page
return Array.from(document.querySelectorAll('.content-item ')).reduce(async (chain, el) => {
return Array.from(this.document.querySelectorAll('.content-item ')).reduce(async (chain, el) => {
await chain;
return new Promise((resolve) => {

View File

@@ -19,7 +19,7 @@ function scrapeAll(scenes) {
? query.all('.video-card__actors a').map((actorEl) => ({
name: unprint.query.content(actorEl),
url: unprint.query.url(actorEl, null),
}))
}))
: query.content('.video-card__actors')?.split(',').map((actor) => actor.trim());
release.poster = query.img('.image-container img');

View File

@@ -181,10 +181,10 @@ async function fetchSites(queryObject) {
.select(
'sites.*',
'networks.name as network_name',
'networks.slug as network_slug',
'networks.url as network_url',
'networks.description as network_description',
'networks.parameters as network_parameters',
'networks.slug as network_slug',
'networks.url as network_url',
'networks.description as network_description',
'networks.parameters as network_parameters',
)
.leftJoin('networks', 'sites.network_id', 'networks.id')
.limit(100);

View File

@@ -3,32 +3,32 @@
const slugify = require('../utils/slugify');
function init() {
const cases = [
'Brave, New World',
'Jœrgenbahn Straße',
'Partêrre',
'Ápres ski.',
'very 😀 true 😃',
'a véééry long piece of text that should not result in a very long slug, even for $100',
'don\'t you, forget about me',
'Pneumonoultramicroscopicsilicovolcanoconiosis',
'this (old) spicemen[sic]',
'contact@example.com',
'!@#$%',
'',
' ',
const cases = [
'Brave, New World',
'Jœrgenbahn Straße',
'Partêrre',
'Ápres ski.',
'very 😀 true 😃',
'a véééry long piece of text that should not result in a very long slug, even for $100',
'don\'t you, forget about me',
'Pneumonoultramicroscopicsilicovolcanoconiosis',
'this (old) spicemen[sic]',
'contact@example.com',
'!@#$%',
'',
' ',
['this is', '2026-01-01', 'an array', '', ' ', 'test'],
];
];
cases.forEach((item) => console.log(item, '-->', slugify(item, '-', { limit: 20 })));
cases.forEach((item) => console.log(item, '-->', slugify(item, '-', { limit: 20 })));
cases.forEach((item) => console.log(item, '-->', slugify(item, '-', {
lower: true,
accents: false,
punctuation: false,
symbols: 'split',
limit: 50,
})));
cases.forEach((item) => console.log(item, '-->', slugify(item, '-', {
lower: true,
accents: false,
punctuation: false,
symbols: 'split',
limit: 50,
})));
}
init();

View File

@@ -63,7 +63,7 @@ const {
} = require('./alerts');
function getIp(req) {
return req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'].split(',')[0] : req.connection.remoteAddress; // See src/ws
return req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'].split(',')[0] : req.connection.remoteAddress; // See src/ws
}
async function initServer() {
@@ -72,12 +72,12 @@ async function initServer() {
const store = new KnexSessionStore({ knex });
app.set('view engine', 'ejs');
app.disable('x-powered-by');
app.disable('x-powered-by');
router.use('/media', express.static(config.media.path));
router.use(express.static('public'));
router.use('/img', (req, res) => {
router.use('/img', (_req, res) => {
res.status(404).send();
});
@@ -86,13 +86,13 @@ async function initServer() {
router.use(initPg(config.database.query));
router.use((req, res, next) => {
router.use((req, _res, next) => {
req.session.safeId = req.session.safeId || nanoid();
next();
});
router.use((req, res, next) => {
router.use((req, _res, next) => {
const ip = getIp(req);
logger.silly(`${ip} (${req.headers['CF-IPCountry'] || 'country N/A'}) requested ${req.originalUrl} as ${req.session.user ? `${req.session.user.username} (${req.session.user.id})` : 'guest'}`);