Compare commits

..

3 Commits

Author SHA1 Message Date
boiii 63e3ac5ef0 Merge branch 'master' into whalemember 2024-05-09 20:39:06 +00:00
DebaucheryLibrarian ded7c64907 Merge branch 'master' into whalemember 2024-02-09 21:31:16 +00:00
boi12321 1cedcae753 try to fix some of whale member 2023-11-27 22:54:05 +01:00
701 changed files with 14849 additions and 13696 deletions

View File

@ -11,12 +11,9 @@
"no-tabs": "off",
"no-unused-vars": ["error", {"argsIgnorePattern": "^_"}],
"no-console": 0,
"arrow-body-style": 0,
"default-param-last": 0,
"template-curly-spacing": "off",
"max-len": 0,
"func-names": 0,
"space-before-function-paren": 0,
"vue/no-v-html": 0,
"vue/html-indent": ["error", "tab"],
"vue/multiline-html-element-content-newline": 0,

2
.gitignore vendored
View File

@ -9,10 +9,8 @@ public/js/*
public/css/*
public/img/tags
public/img/logos/
public/banners
config/*
!config/default.js
!config/analvids.json
assets/js/config/
!assets/js/config/default.js
/export*

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "common"]
path = common
url = git@unknown.name:DebaucheryLibrarian/traxxx-common.git

11903
analvids-studios.json Executable file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +0,0 @@
<!-- Generated by IcoMoon.io -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="M11.445 0.055l-8.945 8.945-2.5 7 6.995-2.5 8.95-8.945c0.5-2-2.5-5-4.5-4.5zM4.5 11l-1-1 8.5-8.5 1 1-8.5 8.5z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 264 B

View File

@ -1,4 +0,0 @@
<!-- Generated by IcoMoon.io -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="M11.91 0c-0.159 0-0.315 0.018-0.465 0.055l-8.945 8.945-2.5 7 6.995-2.5 8.95-8.945c0.462-1.85-2.069-4.555-4.035-4.555zM6.525 12.025l-2.553-2.553 7.5-7.5 2.555 2.555-7.502 7.498z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 333 B

View File

@ -1,5 +0,0 @@
<!-- Generated by IcoMoon.io -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="M12 8.5v5.5h-10v-10h5.5l2-2h-8c-0.825 0-1.5 0.675-1.5 1.5v11c0 0.825 0.675 1.5 1.5 1.5h11c0.825 0 1.5-0.675 1.5-1.5v-8l-2 2z"></path>
<path d="M13.5 0l-9.5 9.5v2.5h2.5l9.5-9.5c0-1.5-1-2.5-2.5-2.5z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 353 B

View File

@ -1,5 +0,0 @@
<!-- Generated by IcoMoon.io -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<path d="M12 8.5v5.5h-10v-10h5.5l2-2h-8c-0.825 0-1.5 0.675-1.5 1.5v11c0 0.825 0.675 1.5 1.5 1.5h11c0.825 0 1.5-0.675 1.5-1.5v-8l-2 2z"></path>
<path d="M13.5 0l-9.5 9.5v2.5h2.5l9.5-9.5c0-1.5-1-2.5-2.5-2.5zM6.5 10l-0.75-0.75 7.5-7.5 0.75 0.75-7.5 7.5z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 398 B

View File

@ -39,7 +39,7 @@ function initReleasesActions(store, router) {
before,
orderBy,
exclude: store.state.ui.tagFilter,
batchShowcased: true,
batchShowcased: range === 'new' ? true : [true, false],
});
return {

1
common

@ -1 +0,0 @@
Subproject commit dc00c3d58af2c23530b8b3cb6704f3860fdd7d0f

View File

@ -1,749 +0,0 @@
[
"50tinhaxxx",
"aaronrockxxx",
"adalynnx",
"adelinelafouinestudio",
"adiraallure",
"agathaludovinostudio",
"ajfreshxxxstudios",
"alekskseny",
"alexahotwifexxx",
"alexamoore",
"alexcontestudio",
"alexislove",
"alexkanexxxstudio",
"alexromerostudio",
"alexxavice",
"alicehi",
"alicelins",
"alicewolfsbanestudio",
"alicexjan",
"aliciasmith",
"alinenovak",
"alisalovely",
"alixlynx",
"allaboutsweetbunny",
"allamateurvideo",
"allandelon",
"altofficial",
"altperversion",
"amelielei",
"americanorgasm",
"amopornobr",
"amorenequipo",
"amypayme",
"analboat",
"analbrazil",
"analgonzo",
"analmaniacsbyladydee",
"analpantyhoseaddicts",
"analpornworld",
"analvidsabuseme",
"analvidsbaitbus",
"analvidsbarebackattack",
"analvidsbarebackcasting",
"analvidsblackloads",
"analvidsblackpatrol",
"analvidsblacksonmoms",
"analvidsbluepillmen",
"analvidsbrandibelle",
"analvidsbustyadventures",
"analvidscfnmshow",
"analvidscollegerules",
"analvidsculioneros",
"analvidsdancingbear",
"analvidsdontfuckmydaughter",
"analvidsexbf",
"analvidsfilthyfamily",
"analvidsfuckysucky",
"analvidsfutanari",
"analvidsgirlsgonewild",
"analvidsgostosasvideo",
"analvidshazeher",
"analvidshazehim",
"analvidshentaied",
"analvidsimmorallive",
"analvidsitsgonnahurt",
"analvidsjayspov",
"analvidsmiakhalifa",
"analvidsmranal",
"analvidsmygf",
"analvidsoutinpublic",
"analvidspoundhisass",
"analvidsprivateblack",
"analvidsprojectcitybus",
"analvidspublicinvasion",
"analvidsrichardmannsworld",
"analvidsrubhim",
"analvidssausageparty",
"analvidssexbusters",
"analvidstaylorbow",
"analvidstestedefudelidade",
"analvidsthughunter",
"analvidsungloryhole",
"analvidsxxxpawn",
"anastasiagree",
"andrealatina",
"andycasanova",
"angelsmit",
"angelwickysproduction",
"angieelif",
"angielynx",
"angyamazonstudio",
"aniakinski",
"anissakate",
"anitapeidastudio",
"annamole",
"annasky",
"anneswinger",
"annykitty",
"anytkalove",
"aprilbloom",
"ardientes69",
"argendanaofficial",
"ariasun",
"aryagrander",
"ashleyhd",
"ashleymason973studio",
"assablanca",
"assphaltrunway",
"asukaa",
"atenea88oficial",
"aurbeaurealstudio",
"avagrey",
"averyjanestudio",
"axelreedproduction",
"babilimaxxxstudio",
"backalleytoonzstudio",
"badanton",
"badaroproductions",
"badassbitchxx",
"badbardotclub",
"baileybase",
"bangbros",
"barbaraalves",
"barebackbitchgril",
"bazilhornydeer",
"bazinga",
"bbwblackbrazilian",
"bbwmilfqueen",
"bdsmmanga",
"bellamur",
"bestxcontent",
"bethyourgirl",
"biaruivinha",
"bigassteens",
"bigdaddyraw",
"bigjohnnyxxx",
"biglayla",
"binhoted",
"bisexcouplefamily",
"bitchstudio",
"bixbaestudio",
"blackqueen",
"blessexxx",
"bluezao",
"boliviahot",
"bollocksdooodle",
"boringkate",
"borisschwarzstudio",
"bradmontanastudio",
"brebrew",
"brianabanderasstudio",
"briannadymond",
"bsstudio",
"btsofdesires",
"buddhabangxxx",
"bumbumgigante",
"bustybella",
"bustyworld",
"butterloads",
"camgirlsgonewild",
"carlossimoes",
"carolsquirter",
"carrylight",
"casalblackrj",
"casalmattos",
"casalporraloka",
"casalsapecarj",
"cassianacosta",
"cassiedelisla",
"castelvaniaporn",
"castingadultfilm",
"catalinacruz",
"cedrikgarcia",
"celineginger",
"chameleonproduction",
"chantalchannel",
"cherryacid",
"cherryaleksa",
"cherryflowerxxx",
"cherryontop",
"cherryxlucky",
"clarkeotstudio",
"claudiasclips",
"closeupfantasy",
"clubanissakate",
"clubcandyalexa",
"clubedapernocas",
"clubtmfr",
"colexchurchstudio",
"comerz",
"coupleluna",
"coupleotakucuckoldcasalotakucorno",
"crazyfuck",
"creampieclinic",
"crisangelo",
"crisanto999",
"crunchboy",
"cutiepiiechubby",
"daddyenjoy",
"damasevagabundos",
"danaxmuscles",
"dankreamer",
"daphneelecerf",
"darkberry101",
"davidcaroll",
"davidepicstudio",
"davidperry",
"deauxmastudio",
"deniselevi",
"denybarbie",
"desihotcouple1",
"devonleestudio",
"diablexstudio",
"diamond",
"diamondsproduction",
"diamondtvstudio",
"dianazilli",
"dickerector",
"dickforstepsister",
"dilaradelroba",
"dinnigata",
"dirtyvision",
"discoliisa",
"donteinfernostudio",
"doriandelisla",
"dotmenvideos",
"dreaminskies",
"dreamtranny",
"drepra24",
"dresden",
"drisexy",
"drlovestudio",
"dvabitch",
"dylanbrown",
"eddiejaye",
"edgracestudio",
"elahotwife",
"elivm",
"elizabethhoney",
"emodream1998",
"epiphanyjones",
"ericasweet69",
"erinelectrastudio",
"erosmastery",
"estudioalarconsherly",
"evaelfie",
"evansjack",
"fabriciolorenco",
"facialcastingstudio",
"faplex",
"femboyevj",
"ferreroanalexperience",
"ferreromobilexxx",
"fetishaura",
"fetishbody",
"fiftiweive69studio",
"firstanalteensstudio",
"firstgape",
"fit18",
"flamejade",
"fleshgodxxx",
"flirtsinfully",
"fmodels",
"focus",
"freddygong",
"fredosebastienopalacios",
"frenchprod",
"fucktotum",
"fuckyoucracker",
"gabyespecialistaemsexooral",
"gabyhotstudio",
"gallastudio",
"gangbangchief",
"garotosonfire",
"gayfrenchpornamator",
"gaypatrol",
"gaypawn",
"gaysight",
"gaywire",
"georgioelitaliano",
"ggwnextgeneration",
"giadasgh",
"girlfriendsfilms",
"girlsinthewild",
"glassdeskproductions",
"goddessizabel",
"goddessjaim",
"goldenbabes",
"gonzoinbrazil",
"gothcharlotte",
"grabass",
"gracelowdiestudio",
"hairygonzo",
"hannafallow",
"hardbrazilestudio",
"hardcorexmedia",
"hardkinks",
"hardpornworld",
"harleenvanhynten",
"harshpleasuremachine",
"helenamoellerstudio",
"herbalsommelier",
"hexxgirlakarubyhexx",
"heygrimystudio",
"hidorirose",
"highertheheels",
"himeroseespuleta",
"honourmaysmanorhouse",
"hoodpecker",
"hornybelle",
"hornycosplay",
"hosskado",
"hotkittyaria",
"hotlatinas",
"hotwifelizstudios",
"hotwifeteen18",
"hpgproduction",
"ieatpinktacoz",
"infiltrateproxy",
"innofsin",
"irogeniastudio",
"ivanamontanastudio",
"ivylopez",
"jackecah",
"jackkallahari",
"jadasparksofficial",
"jamiefrenchproductions",
"jannnasty1",
"japanpornjunky",
"jasonsteelxxxstudio",
"jaxslayhertv",
"jbstudio",
"jeffsmodels",
"jennanoelle",
"jennanoellestudio",
"jessaerosaexsavoryfather",
"jessiq",
"jesusreyes",
"jhennicris",
"jhonyshootstudio",
"jimmybudstudio",
"jimmydeeznuts",
"joaoosafado",
"johnnylove",
"johnpricexo",
"jolielyon",
"jonathanjordanstudio",
"jonjon",
"josephalmeida900",
"josephbritadeira",
"josephinejackson",
"joshualewis",
"josslescafsexcoachnatural",
"joycardozo",
"jsexycouple17",
"juizzypros",
"juliakissy",
"julliamoon",
"kaciecastle",
"kaiiaeve",
"kamgirlovebycandyfeng",
"karamelnayapussy",
"karinaspalacios",
"karleegrey",
"karolla",
"katerichstudio",
"kateutopia",
"katymilligan",
"keiracroft",
"kendracolestudio",
"kenzifoxx",
"keokistar",
"kevinisssa",
"kevinwhite",
"kiaranightstudio",
"kidinhoeasgatas",
"kikichiqui",
"kikikawaii",
"kiraqueenstudio",
"kirasclips",
"kisicaxx",
"kittyblair",
"klaimmora",
"kokinoosspace",
"krisshotwife",
"krisskiss",
"kristyblackraw",
"krystaldavis",
"kylieandmatt",
"ladylazarus",
"ladymilf",
"ladysnowbrasil",
"lafranceapoil",
"lallapotira",
"lanaanalise",
"lanared",
"laniam60studio",
"laradesantisstudio",
"laralee",
"latinhotstudio",
"latinmodelxxx",
"lauryangel",
"lavernaqueen",
"leabloomstudio",
"leilanilei",
"leoogro",
"leriaglow",
"letyhowl",
"lexisexgamestudio",
"liddytyler",
"lilystrong",
"lissaross",
"littlepucksplayhouse",
"lizzylaynezentertainment",
"lmcprodstudio",
"lordkenobi",
"louiseleestudio",
"loupanstudio",
"loveadventures",
"lovelydove",
"lucasramos",
"lukaszaad",
"lukecooperx",
"lukespov",
"lunarivalmlrproduction",
"lunasapphire",
"lustfeed",
"lutrosworld",
"lydiablackstudio",
"madelaineroussetproduction",
"madinaalexanderstudio",
"magicsstars",
"majestynasty",
"mamasitasavage",
"mandymayxtubertv",
"mandyrhea",
"manpavan",
"manscave",
"maraswanstudio",
"marcellobravo",
"marcocidade",
"marcuslondoncumfordaddy",
"mariechell",
"marijhuana",
"mariskaxproductions",
"marleymaddenxxstudio",
"marsbarcelona",
"marsiannaamoon",
"maryrockfans",
"marywet",
"masantosoficial",
"mascaradorio",
"mattosmovies",
"mattyandaiden",
"maxcartelstudio",
"maximogarcia",
"maxrajoysquad",
"mayakemi",
"meganfiore",
"megaplaygirl",
"melenamariarya",
"melinamay",
"mentelocodotadoestudio",
"messalinagod",
"miamolotov",
"miax",
"milfliciousstudio",
"minotaurstudio",
"mirawair",
"missbatstudio",
"misselliemouse",
"misslexis",
"misssexychery",
"misssvikkistudio",
"mistressnoir",
"mistresspriest",
"mixedstudios",
"mlrstudio",
"mmm100studio",
"mmvideo",
"modeldominant",
"mollyredwolf",
"momoka",
"monicalima",
"monikafoxxxstudio",
"montycash",
"mooneysweety",
"mrandersonsanalacademy",
"mrnuttz",
"mrpussylicking",
"msangelluxxx",
"mugurporn",
"mundocorno",
"murkovski",
"myaquinnstudio",
"mybangvan",
"mybigblackdickpov",
"myclearsky",
"mydirtydesires",
"myfilthydaddy",
"myhornyfamily",
"mylaangel",
"myschoollife",
"mysteriousproductionsstudio",
"mywifeluna",
"nadenasty",
"nadiawhitestudio",
"nadjalapiedrastudio",
"nagyszandi",
"naijaolosho",
"nandoreyxxx",
"nashidni",
"nastymedia",
"nataliachoyzstudio",
"nataliastartvstudio",
"nataliedreamingmoon",
"natasweet",
"nathanssluts",
"naughtyjessica",
"nayarastripperstudio",
"negrotopdeliciaa",
"nellykentstudio",
"nextdoornurs3",
"nicheparade",
"nicisdream",
"nicolettaembassi",
"nicolyantunes",
"nicolymattos",
"nik3arbizaboura",
"nikkizeestudio",
"nilsangeslonstudio",
"nohandscum",
"norestfortheass",
"nylonlingeriestudio",
"obfetish",
"obsessedsologirls",
"oliviajay",
"oloshoboyfriend",
"olxredfox",
"omargalantiproductions",
"only3xnetwork",
"onlyamateurporn",
"onlyjewelzblustudio",
"onlytaboostudio",
"orgasminator",
"origimax",
"originalgirlsgonewild",
"ouset",
"outsidethestudio",
"oxibendini",
"panporn",
"pansexualityfeeling",
"pawgedstudio",
"penelopa3",
"pequeydemoniostudio",
"pernocas",
"pervfect",
"pervyrussiastudio",
"petitaleksa",
"petrickgarcia",
"photobangbang",
"pineapplesstudio",
"pinko",
"pinkshell",
"pissingeanalfantasy",
"pkostudio",
"plennastudio",
"plsproduction",
"plumperpassstudio",
"pollyponsstudio",
"pornforce",
"pornworldvr",
"possiblyneighbours",
"potentialanal",
"princepollyproductionz",
"princess18",
"princexpunkin",
"princeyahshua",
"private",
"privatecastings",
"privateclassics",
"programmerswife",
"projectfundiary",
"prollkingxxl",
"protonvideos",
"pureinfatuation",
"pussykagelovestudio",
"putacalenturastudio",
"putariasdocasal20studio",
"qmakavellimedia",
"queeneugeniastudio",
"quenteclub",
"quianon",
"raquelexibida",
"rawnewbies",
"rayssagarcia",
"realdirtyvideos",
"realliferlp",
"rebeccasclips",
"rebeccavanguard",
"rebelrhyderproductions",
"redfoxartstudio",
"redpillgirl",
"redqueenfilms",
"redqueenstudios",
"reginanoir",
"rhysdunbar",
"riasunnofficial",
"rickangelstudio",
"rileycyriis",
"robybianchiproduction",
"rocbundy",
"rockcorp",
"romemajor",
"rpsnstudio",
"sailorboy69",
"samanthagarmendia",
"samanthasissystudio",
"samcanram",
"sampasex",
"saradiamante",
"sarahfonteynacumrecord",
"sarahfonteynaeasysquirter",
"sarahslavestudio",
"sbstudio",
"serenitylove001",
"sexartestudio",
"sexfoxxxvideos",
"sexwithmilfstella",
"sexxys",
"sexxysclub",
"sexyangelproductions",
"sexycuckoldstudio",
"sexydea",
"sexygamingcouple",
"sexynebbw",
"sexynurse4u",
"shalinadevinestudio",
"shamelessvibe",
"shenhunk",
"shinaryenspurepleasure",
"shortdaddy",
"shyeon",
"sicksadist69studio",
"sinemale",
"siswetanalambassador",
"skinonskin",
"sky1978",
"slavebc",
"slkzw",
"slutlibrary",
"smartykat314",
"sofiajax",
"solangesun",
"solomiastudio",
"solsalvatore",
"sophieladder",
"spaceboobsstudio",
"spermaevents",
"spicylabproduction",
"spookyboogie",
"ssnatashateen",
"staceyalexispawg",
"stacybloomstudio",
"stalkerprodz",
"steverickz",
"straightaddicktstudio",
"studiogd",
"subilarchstudio",
"sugarbabestv",
"superhotfilmsstudio",
"suzieqstudio",
"suzyanderson",
"swagruspanda",
"sweetbabygirlxx",
"sweetdarling",
"sweetwife",
"sydneyscreams4u",
"syrianarablara",
"taiamericana",
"taradao",
"tarrawhite",
"tayleewoodstudio",
"telanua",
"tgirlplayhouse",
"thanchetbigdick",
"thatredheadskye",
"thecalicalientestudio",
"thekallyxo",
"themaskedfreakerstudio",
"thepowell",
"thewondertoystrainingstudio",
"theyloveflaxk",
"thiagomontestudio",
"tiffanyleiddi",
"tigresavip",
"timeabellaproduction",
"tobydickstudio",
"tommywood",
"tonyathetease",
"toolofpleasurestudio",
"torbestudio",
"tranny4cockstudio",
"troopcandy",
"trunkacstudio",
"turndonpodcast",
"tvredfire",
"tylercoxxdzstudio",
"uniquebless",
"unjmdstudio",
"unlimstudio",
"unsboys",
"vagninhoxxx",
"vangoren",
"veneramaximastudio",
"venusafrodita",
"verlonis18",
"vickiluv",
"victorhugo",
"victoriasmithtv",
"vilevixenstudio",
"vincekarter",
"viragoldfilms",
"viragoldhomevideos",
"virom13",
"vispace",
"viviguedezoficial",
"wagnersantiago",
"wanheldvigschwarzehaut",
"wcaproductions",
"wefuckinstudio",
"wspro",
"xduquitox",
"xsanyany",
"xtvstudio",
"xwar555",
"xxxporn",
"xxxtaylornicole",
"you170",
"yourpriya",
"yoyagreyproduction",
"yukionna",
"yunolovex",
"yurigaucho",
"zfilmz",
"zlatashine",
"zuzusweet"
]

View File

@ -1,5 +1,3 @@
const analvids = require('./analvids.json');
module.exports = {
database: {
owner: {
@ -75,8 +73,6 @@ module.exports = {
},
exclude: {
channels: [
// AnalVids secondary channels
...analvids,
// 21sextreme, no longer updated
'mightymistress',
'dominatedgirls',
@ -135,25 +131,6 @@ module.exports = {
'paintoy',
'aganmedon',
'sensualpain',
// porn world
'1byday',
'bustylover',
'ddfbusty',
'ddfnetworkvr',
'eurogirlsongirls',
'euroteenerotica',
'fuckinhd',
'handsonhardcore',
'hotlegsandfeet',
'houseoftaboo',
'onlyblowjob',
// letsdoeit
'xchimera',
'scamangels',
'bitchesabroad',
'pornoacademie',
'bumsbus',
'kinkyinlaws',
],
networks: [
// dummy network for testing
@ -161,8 +138,6 @@ module.exports = {
// porn doe
'forbondage',
'score',
// porncz
'porncz',
],
},
profiles: [
@ -214,9 +189,12 @@ module.exports = {
'hotcrazymess',
'thatsitcomshow',
],
[
// Adult DVD Empire
'elegantangel',
'westcoastproductions',
],
'21sextury',
'dogfartnetwork',
'adultempire',
'julesjordan',
'dorcelclub',
'bang',
@ -233,7 +211,6 @@ module.exports = {
'vrcosplayx',
'teamskeet',
'mylf',
'spermmania',
[
'letsdoeit',
'mamacitaz',
@ -273,15 +250,13 @@ module.exports = {
'topwebmodels',
'pascalssubsluts',
'kellymadison',
'5kporn',
'private',
'ddfnetwork',
'bangbros',
'hitzefrei',
'porncz',
'czechav',
'angelogodshackoriginal',
'littlecapricedreams',
'missyx',
'gangbangcreampie',
'gloryholesecrets',
'aziani',
@ -293,10 +268,7 @@ module.exports = {
'silverstonedvd',
'silviasaint',
],
[
'analvids',
'pornworld',
],
'legalporno',
'pierrewoodman',
'score',
'boobpedia',
@ -343,7 +315,6 @@ module.exports = {
'cdn.tushyraw.com',
'cdn.slayed.com',
'cdn.milfy.com',
'www.analvids.com',
'www.vogov.com',
'www.vogov.com',
'www.nubiles.net',
@ -361,17 +332,6 @@ module.exports = {
'www.badteenspunished.com',
'www.cumlouder.com',
'im0.imgcm.com',
// Spizoo
'www.spizoo.com',
'www.creamher.com',
'www.gothgirlfriends.com',
'www.mrluckypov.com',
'www.mrluckyvip.com',
'www.mrluckyraw.com',
'www.firstclasspov.com',
'www.rawattack.com',
'www.realsensual.com',
'www.vlogxxx.com',
],
},
bypass: {
@ -397,38 +357,22 @@ module.exports = {
interval: 50,
concurrency: 20,
},
media: {
interval: 50,
concurrency: 20,
},
'www.kink.com': {
'www.deeper.com': {
enable: false, // can be omitted to enable
interval: 1000,
concurrency: 1,
},
'www.brazzers.com': {
interval: 2000,
concurrency: 1,
},
'www.realitykings.com': {
interval: 2000,
concurrency: 1,
},
'www.analvids.com': { // seems to error at default rate
interval: 500,
concurrency: 1,
},
'images.mylfcdn.net': {
interval: 50,
concurrency: 1,
},
'westcoastproductions.com': {
interval: 100,
concurrency: 1,
},
'images.mylfcdn.net': {
interval: 50,
concurrency: 1,
},
},
fetchAfter: [1, 'week'],
missingDateLimit: 3,
upcomingMissingDateLimit: 20,
memorySampling: {
enabled: false,
sampleDuration: 300000, // 5 minutes
@ -446,7 +390,7 @@ module.exports = {
thumbnailQuality: 100,
lazySize: 90,
lazyQuality: 90,
trailerQuality: [540, 720, 960, 480, 1080, 360, 320, 1440, 1600, 1920, 2160, 270, 240, 180],
trailerQuality: [540, 720, 480, 360, 960, 1080, 320, 1440, 1600, 1920, 2160, 270, 240, 180],
limit: 25, // max number of photos per release
attempts: 2,
fetchStreams: true,

View File

@ -18,25 +18,17 @@ const scenesFields = `
network_id int,
network_name text,
network_slug text,
studio_id int,
studio_name text,
studio_slug text,
entity_ids multi,
actor_ids multi,
actors text,
tag_ids multi,
tags text,
movie_ids multi,
movies text,
serie_ids multi,
series text,
meta text,
date timestamp,
is_showcased bool,
created_at timestamp,
effective_date timestamp,
stashed int,
dupe_index int
stashed int
`;
const moviesFields = `
@ -61,8 +53,7 @@ const moviesFields = `
effective_date timestamp,
stashed int,
stashed_scenes int,
stashed_total int,
dupe_index int
stashed_total int
`;
const actorsFields = `
@ -103,7 +94,7 @@ exports.up = async (knex) => {
created_at timestamp
)`);
await utilsApi.sql(`create table actors (${actorsFields}) min_prefix_len='3'`);
await utilsApi.sql(`create table actors (${actorsFields})`);
await utilsApi.sql(`create table actors_stashed (
actor_id int,

View File

@ -16,16 +16,6 @@ exports.up = async (knex) => {
.notNullable()
.defaultTo(true);
});
await knex.raw(`
UPDATE alerts
SET
all_actors = false,
all_entities = false,
all_tags = false,
all_matches= false
WHERE alerts.all = false;
`);
};
exports.down = async (knex) => {

View File

@ -1,65 +0,0 @@
const config = require('config');
exports.up = async (knex) => {
await knex.schema.alterTable('entities', (table) => {
// internal options, as opposed to parameters for scraper options
table.json('options');
});
await knex.schema.alterTable('releases', (table) => {
table.dropForeign('entity_id');
table.foreign('entity_id')
.references('id')
.inTable('entities')
.onDelete('cascade');
});
await knex.schema.alterTable('releases_caps', (table) => {
table.unique(['release_id', 'media_id']);
});
await knex.schema.createTable('movies_tags', (table) => {
table.integer('tag_id')
.references('id')
.inTable('tags');
table.integer('movie_id')
.notNullable()
.references('id')
.inTable('movies')
.onDelete('cascade');
table.text('original_tag');
table.text('source')
.defaultTo('scraper');
table.unique(['tag_id', 'movie_id']);
});
await knex.raw('GRANT ALL ON ALL TABLES IN SCHEMA public TO :visitor;', {
visitor: knex.raw(config.database.query.user),
});
};
exports.down = async (knex) => {
await knex.schema.alterTable('entities', (table) => {
table.dropColumn('options');
});
await knex.schema.alterTable('releases', (table) => {
table.dropForeign('entity_id');
table.foreign('entity_id')
.references('id')
.inTable('entities')
.onDelete('no action');
});
await knex.schema.alterTable('releases_caps', (table) => {
table.dropUnique(['release_id', 'media_id']);
});
await knex.schema.dropTable('movies_tags');
};

View File

@ -1,31 +0,0 @@
exports.up = async (knex) => {
await knex.schema.alterTable('entities_tags', (table) => {
table.dropForeign('tag_id');
table.dropForeign('entity_id');
table.foreign('tag_id')
.references('id')
.inTable('tags')
.onDelete('cascade');
table.foreign('entity_id')
.references('id')
.inTable('entities')
.onDelete('cascade');
});
};
exports.down = async (knex) => {
await knex.schema.alterTable('entities_tags', (table) => {
table.dropForeign('tag_id');
table.dropForeign('entity_id');
table.foreign('tag_id')
.references('id')
.inTable('tags');
table.foreign('entity_id')
.references('id')
.inTable('entities');
});
};

View File

@ -1,25 +0,0 @@
exports.up = async (knex) => {
await knex.schema.createTable('users_templates', (table) => {
table.increments('id');
table.integer('user_id')
.notNullable()
.references('id')
.inTable('users');
table.string('name')
.notNullable();
table.text('template')
.notNullable();
table.unique(['user_id', 'name']);
table.datetime('created_at')
.defaultTo(knex.fn.now());
});
};
exports.down = async (knex) => {
await knex.schema.dropTable('users_templates');
};

View File

@ -1,28 +0,0 @@
exports.up = async (knex) => {
await knex.schema.createTable('users_keys', (table) => {
table.increments('id');
table.integer('user_id')
.notNullable()
.references('id')
.inTable('users');
table.text('key')
.notNullable();
table.string('identifier');
table.unique(['user_id', 'identifier']);
table.datetime('last_used_at');
table.specificType('last_used_ip', 'inet');
table.datetime('created_at')
.notNullable()
.defaultTo(knex.fn.now());
});
};
exports.down = async (knex) => {
await knex.schema.dropTable('users_keys');
};

View File

@ -1,87 +0,0 @@
exports.up = async (knex) => {
await knex.schema.createTable('scenes_revisions', (table) => {
table.increments('id');
table.integer('scene_id')
.notNullable()
.references('id')
.inTable('releases')
.onDelete('set null');
table.integer('user_id')
.references('id')
.inTable('users')
.onDelete('set null');
table.json('base')
.notNullable();
table.json('deltas')
.notNullable();
table.text('hash')
.notNullable();
table.text('comment');
table.boolean('approved');
table.integer('reviewed_by')
.references('id')
.inTable('users')
.onDelete('set null');
table.datetime('reviewed_at');
table.text('feedback');
table.datetime('applied_at');
table.datetime('created_at')
.notNullable()
.defaultTo(knex.fn.now());
});
await knex.schema.createTable('bans', (table) => {
table.increments('id');
table.integer('user_id')
.references('id')
.inTable('users')
.onDelete('set null');
table.string('username');
table.specificType('ip', 'cidr');
table.boolean('match_all')
.notNullable()
.defaultTo(false);
table.string('scope');
table.boolean('shadow');
table.integer('banned_by')
.references('id')
.inTable('users')
.onDelete('set null');
table.datetime('expires_at')
.notNullable();
table.datetime('created_at')
.notNullable()
.defaultTo(knex.fn.now());
});
await knex.schema.alterTable('users', (table) => {
table.specificType('last_ip', 'cidr');
});
};
exports.down = async (knex) => {
await knex.schema.dropTable('scenes_revisions');
await knex.schema.dropTable('bans');
await knex.schema.alterTable('users', (table) => {
table.dropColumn('last_ip');
});
};

View File

@ -1,35 +0,0 @@
exports.up = async (knex) => {
await knex.schema.alterTable('actors', (table) => {
table.integer('leg');
table.integer('foot');
table.integer('thigh');
});
await knex.schema.alterTable('actors_profiles', (table) => {
table.integer('leg');
table.integer('foot');
table.integer('thigh');
});
await knex.schema.alterTable('releases', (table) => {
table.integer('video_count');
});
};
exports.down = async (knex) => {
await knex.schema.alterTable('actors', (table) => {
table.dropColumn('leg');
table.dropColumn('foot');
table.dropColumn('thigh');
});
await knex.schema.alterTable('actors_profiles', (table) => {
table.dropColumn('leg');
table.dropColumn('foot');
table.dropColumn('thigh');
});
await knex.schema.alterTable('releases', (table) => {
table.dropColumn('video_count');
});
};

View File

@ -1,15 +0,0 @@
exports.up = async (knex) => {
await knex.schema.alterTable('scenes_revisions', (table) => {
table.integer('scene_id')
.nullable()
.alter();
});
};
exports.down = async (knex) => {
await knex.schema.alterTable('scenes_revisions', (table) => {
table.integer('scene_id')
.notNullable()
.alter();
});
};

View File

@ -1,119 +0,0 @@
exports.up = async (knex) => {
await knex.raw('CREATE UNIQUE INDEX unique_main_profiles ON actors_profiles (actor_id) WHERE (entity_id IS NULL);');
await knex.schema.createTable('actors_revisions', (table) => {
table.increments('id');
table.integer('actor_id')
.references('id')
.inTable('actors')
.onDelete('set null');
table.integer('profile_id')
.references('id')
.inTable('actors_profiles')
.onDelete('set null');
table.integer('user_id')
.references('id')
.inTable('users')
.onDelete('set null');
table.json('base')
.notNullable();
table.json('deltas')
.notNullable();
table.text('hash')
.notNullable();
table.text('comment');
table.boolean('approved');
table.integer('reviewed_by')
.references('id')
.inTable('users')
.onDelete('set null');
table.datetime('reviewed_at');
table.text('feedback');
table.datetime('applied_at');
table.datetime('created_at')
.notNullable()
.defaultTo(knex.fn.now());
});
await knex.schema.alterTable('actors', (table) => {
table.integer('boobs_volume');
table.enum('boobs_implant', ['saline', 'silicone', 'gummy', 'fat']);
table.enum('boobs_placement', ['over', 'under']);
table.string('boobs_surgeon');
table.boolean('natural_butt');
table.integer('butt_volume');
table.enum('butt_implant', ['bbl', 'lift', 'silicone', 'lipo', 'filler', 'mms']);
table.boolean('natural_lips');
table.integer('lips_volume');
table.string('agency');
});
await knex.schema.alterTable('actors_profiles', (table) => {
table.integer('boobs_volume');
table.enum('boobs_implant', ['saline', 'silicone', 'gummy', 'fat']);
table.enum('boobs_placement', ['over', 'under']);
table.string('boobs_surgeon');
table.boolean('natural_butt');
table.integer('butt_volume');
table.enum('butt_implant', ['bbl', 'lift', 'silicone', 'lipo', 'filler', 'mms']);
table.boolean('natural_lips');
table.integer('lips_volume');
table.string('agency');
});
};
exports.down = async (knex) => {
await knex.raw('DROP INDEX unique_main_profiles;');
await knex.schema.dropTable('actors_revisions');
await knex.schema.alterTable('actors', (table) => {
table.dropColumn('boobs_volume');
table.dropColumn('boobs_implant');
table.dropColumn('boobs_placement');
table.dropColumn('boobs_surgeon');
table.dropColumn('natural_butt');
table.dropColumn('butt_volume');
table.dropColumn('butt_implant');
table.dropColumn('natural_lips');
table.dropColumn('lips_volume');
table.dropColumn('agency');
});
await knex.schema.alterTable('actors_profiles', (table) => {
table.dropColumn('boobs_volume');
table.dropColumn('boobs_implant');
table.dropColumn('boobs_placement');
table.dropColumn('boobs_surgeon');
table.dropColumn('natural_butt');
table.dropColumn('butt_volume');
table.dropColumn('butt_implant');
table.dropColumn('natural_lips');
table.dropColumn('lips_volume');
table.dropColumn('agency');
});
};

View File

@ -1,19 +0,0 @@
function createColumns(table) {
table.enum('boobs_incision', ['mammary', 'areolar', 'crescent', 'lollipop', 'anchor', 'axillary', 'umbilical']);
table.boolean('natural_labia');
}
exports.up = async (knex) => {
await knex.schema.alterTable('actors', createColumns);
await knex.schema.alterTable('actors_profiles', createColumns);
};
function dropColumns(table) {
table.dropColumn('boobs_incision');
table.dropColumn('natural_labia');
}
exports.down = async (knex) => {
await knex.schema.alterTable('actors', dropColumns);
await knex.schema.alterTable('actors_profiles', dropColumns);
};

View File

@ -1,75 +0,0 @@
exports.up = async function(knex) {
// restore avatars in table in case of rollback and rerun
const avatars = await knex('actors_avatars')
.select('actors_avatars.*', 'actors_profiles.actor_id')
.leftJoin('actors_profiles', 'actors_profiles.id', 'actors_avatars.profile_id');
await knex('actors_avatars').delete();
await knex.schema.alterTable('actors_avatars', (table) => {
table.integer('profile_id')
.nullable()
.alter();
table.integer('actor_id')
.notNullable()
.references('id')
.inTable('actors');
table.datetime('created_at')
.notNullable()
.defaultTo(knex.fn.now());
table.dropUnique('profile_id');
table.unique(['profile_id', 'media_id']);
});
await knex.schema.alterTable('media', (table) => {
// actor avatars often retain the same URL when updated, handle URL-deduping in app code
table.dropUnique('source');
table.string('source_version'); // usually etag
});
await knex.raw('CREATE UNIQUE INDEX unique_main_avatars ON actors_avatars (actor_id) WHERE (profile_id IS NULL);');
if (avatars.length > 0) {
await knex('actors_avatars').insert(avatars);
}
const profiles = await knex('actors_profiles')
.select('id', 'actor_id', 'avatar_media_id')
.whereNotNull('avatar_media_id');
await knex('actors_avatars')
.insert(profiles.map((profile) => ({
actor_id: profile.actor_id,
profile_id: profile.id,
media_id: profile.avatar_media_id,
})))
.onConflict()
.ignore();
};
exports.down = async function(knex) {
// no need to delete all entries, only the ones incompatible with the old scheme
await knex('actors_avatars')
.whereNull('profile_id')
.delete();
await knex.schema.alterTable('actors_avatars', (table) => {
table.integer('profile_id')
.notNullable()
.alter();
table.dropColumn('actor_id');
table.dropColumn('created_at');
table.unique('profile_id');
table.dropUnique(['profile_id', 'media_id']);
});
await knex.schema.alterTable('media', (table) => {
table.dropColumn('source_version');
table.unique('source');
});
};

View File

@ -1,46 +0,0 @@
exports.up = async (knex) => {
await knex.schema.alterTable('actors_social', (table) => {
table.dropUnique(['url', 'actor_id', 'profile_id']);
table.dropColumn('profile_id');
table.string('handle');
table.boolean('is_broken')
.notNullable()
.defaultTo(false);
table.datetime('pinged_at');
table.datetime('verified_at');
table.unique(['actor_id', 'platform', 'handle']);
table.unique(['actor_id', 'url']);
});
await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT socials_url_or_handle CHECK (num_nulls(handle, url) = 1);');
await knex.raw('ALTER TABLE actors_social ADD CONSTRAINT socials_handle_and_platform CHECK (num_nulls(platform, handle) = 2 or num_nulls(platform, handle) = 0);');
await knex.schema.renameTable('actors_social', 'actors_socials');
};
exports.down = async (knex) => {
await knex.raw('ALTER TABLE actors_socials DROP CONSTRAINT socials_url_or_handle;');
await knex.raw('ALTER TABLE actors_socials DROP CONSTRAINT socials_handle_and_platform;');
await knex.schema.renameTable('actors_socials', 'actors_social');
await knex.schema.alterTable('actors_social', (table) => {
table.dropUnique(['actor_id', 'platform', 'handle']);
table.dropUnique(['actor_id', 'url']);
table.integer('profile_id')
.references('id')
.inTable('actors_profiles');
table.dropColumn('handle');
table.dropColumn('verified_at');
table.dropColumn('pinged_at');
table.dropColumn('is_broken');
table.unique(['url', 'actor_id', 'profile_id']);
});
};

140
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "traxxx",
"version": "1.244.34",
"version": "1.237.11",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "traxxx",
"version": "1.244.34",
"version": "1.237.11",
"license": "ISC",
"dependencies": {
"@aws-sdk/client-s3": "^3.458.0",
@ -47,13 +47,12 @@
"express-session": "^1.17.3",
"face-api.js": "^0.22.2",
"file-type": "^18.7.0",
"fluent-ffmpeg": "^2.1.3",
"fluent-ffmpeg": "^2.1.2",
"fs-extra": "^11.1.1",
"graphile-build": "^4.14.0",
"graphile-utils": "^4.14.0",
"graphql": "^15.8.0",
"html-entities": "^2.4.0",
"https-proxy-agent": "^7.0.5",
"iconv-lite": "^0.6.3",
"inquirer": "^8.2.6",
"inspector-api": "^1.4.8",
@ -89,7 +88,7 @@
"tunnel": "0.0.6",
"ua-parser-js": "^1.0.37",
"undici": "^5.28.1",
"unprint": "^0.15.0",
"unprint": "^0.10.11",
"url-pattern": "^1.0.3",
"v-tooltip": "^2.1.3",
"video.js": "^8.6.1",
@ -3862,18 +3861,6 @@
"node-pre-gyp": "bin/node-pre-gyp"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@ -9864,22 +9851,17 @@
"integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ=="
},
"node_modules/fluent-ffmpeg": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz",
"integrity": "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz",
"integrity": "sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==",
"dependencies": {
"async": "^0.2.9",
"async": ">=0.2.9",
"which": "^1.1.1"
},
"engines": {
"node": ">=18"
"node": ">=0.8.0"
}
},
"node_modules/fluent-ffmpeg/node_modules/async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ=="
},
"node_modules/fluent-ffmpeg/node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@ -10881,26 +10863,15 @@
}
},
"node_modules/https-proxy-agent": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
"integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dependencies": {
"agent-base": "^7.0.2",
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/https-proxy-agent/node_modules/agent-base": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
"integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dependencies": {
"debug": "^4.3.4"
},
"engines": {
"node": ">= 14"
"node": ">= 6"
}
},
"node_modules/human-signals": {
@ -12124,6 +12095,18 @@
"node": ">= 14"
}
},
"node_modules/jsdom/node_modules/https-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/jsdom/node_modules/whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
@ -12818,19 +12801,6 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/make-fetch-happen/node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/make-fetch-happen/node_modules/lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
@ -13638,19 +13608,6 @@
"node": ">= 6"
}
},
"node_modules/node-gyp/node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/node-gyp/node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@ -14449,6 +14406,18 @@
"node": ">= 14"
}
},
"node_modules/pac-proxy-agent/node_modules/https-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz",
@ -15380,6 +15349,18 @@
"node": ">= 14"
}
},
"node_modules/proxy-agent/node_modules/https-proxy-agent": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
"integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
"dependencies": {
"agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/proxy-agent/node_modules/lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
@ -18312,9 +18293,9 @@
}
},
"node_modules/unprint": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/unprint/-/unprint-0.15.0.tgz",
"integrity": "sha512-F/nfsSAPoQFfZCYGsxOxaNX05jfzQTP/lLo3BUeOPotp9RaRfcI6ylf6ts6GqFoMAD1Y6I7M31MiriDc+SgNDQ==",
"version": "0.10.11",
"resolved": "https://registry.npmjs.org/unprint/-/unprint-0.10.11.tgz",
"integrity": "sha512-+OL+8BFF9SYvayp57l8ifq77I6ok2ilPCidBVka7VbMALJgqHxkHqrqkCupw2RKX2tNfPT/TGa+NJsYGboFnRQ==",
"dependencies": {
"axios": "^0.27.2",
"bottleneck": "^2.19.5",
@ -18323,8 +18304,7 @@
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-base": "^15.0.0",
"jsdom": "^17.0.0",
"moment-timezone": "^0.5.34",
"tunnel": "^0.0.6"
"moment-timezone": "^0.5.34"
}
},
"node_modules/unprint/node_modules/@tootallnate/once": {
@ -18439,18 +18419,6 @@
"node": ">= 6"
}
},
"node_modules/unprint/node_modules/https-proxy-agent": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/unprint/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",

View File

@ -1,6 +1,6 @@
{
"name": "traxxx",
"version": "1.244.34",
"version": "1.237.11",
"description": "All the latest porn releases in one place",
"main": "src/app.js",
"scripts": {
@ -106,13 +106,12 @@
"express-session": "^1.17.3",
"face-api.js": "^0.22.2",
"file-type": "^18.7.0",
"fluent-ffmpeg": "^2.1.3",
"fluent-ffmpeg": "^2.1.2",
"fs-extra": "^11.1.1",
"graphile-build": "^4.14.0",
"graphile-utils": "^4.14.0",
"graphql": "^15.8.0",
"html-entities": "^2.4.0",
"https-proxy-agent": "^7.0.5",
"iconv-lite": "^0.6.3",
"inquirer": "^8.2.6",
"inspector-api": "^1.4.8",
@ -148,7 +147,7 @@
"tunnel": "0.0.6",
"ua-parser-js": "^1.0.37",
"undici": "^5.28.1",
"unprint": "^0.15.0",
"unprint": "^0.10.11",
"url-pattern": "^1.0.3",
"v-tooltip": "^2.1.3",
"video.js": "^8.6.1",

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1 @@
<iframe style="background-color: white;" width="300" height="100" scrolling="no" frameborder="0" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10002480" src="//a.adtng.com/get/10002480?ata=DebaucheryLibrarian"></iframe>

View File

@ -0,0 +1 @@
<iframe style="background-color: white;" width="300" height="250" scrolling="no" frameborder="0" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10001807" src="//a.adtng.com/get/10001807?ata=DebaucheryLibrarian"></iframe>

View File

@ -0,0 +1 @@
<iframe style="background-color: white;" width="315" height="300" scrolling="no" frameborder="0" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10002484" src="//a.adtng.com/get/10002484?ata=DebaucheryLibrarian"></iframe>

View File

@ -0,0 +1 @@
<iframe style="background-color: white;" width="728" height="90" scrolling="no" frameborder="0" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10002481" src="//a.adtng.com/get/10002481?ata=DebaucheryLibrarian"></iframe>

View File

@ -0,0 +1 @@
<iframe style="background-color: white;" width="728" height="90" scrolling="no" frameborder="0" allowtransparency="true" marginheight="0" marginwidth="0" name="spot_id_10002466" src="//a.adtng.com/get/10002466?ata=DebaucheryLibrarian"></iframe>

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Some files were not shown because too many files have changed in this diff Show More