665 lines
28 KiB
JavaScript
Executable File
665 lines
28 KiB
JavaScript
Executable File
const fs = require('fs').promises;
|
|
const path = require('path');
|
|
const bulkInsert = require('../src/utils/bulk-insert');
|
|
|
|
const affiliates = [
|
|
// vixen
|
|
{
|
|
id: '_vixen',
|
|
network: 'vixen',
|
|
url: 'http://join.vixen.com/track/MTA0MS43OC44LjQyLjAuMC4wLjAuMA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'blacked',
|
|
channel: 'blacked',
|
|
url: 'https://join.blacked.com/track/MTA0MS43OC4zLjMuMC4wLjAuMC4w',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'blackedraw',
|
|
channel: 'blackedraw',
|
|
url: 'https://join.blackedraw.com/track/MTA0MS43OC45LjI4LjAuMC4wLjAuMA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'deeper',
|
|
channel: 'deeper',
|
|
url: 'https://join.deeper.com/track/MTA0MS43OC4xMS4zNC4wLjAuMC4wLjA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'milfy',
|
|
channel: 'milfy',
|
|
url: 'https://join.milfy.com/track/MTA0MS43OC4xNS41MS4wLjAuMC4wLjA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'slayed',
|
|
channel: 'slayed',
|
|
url: 'https://join.slayed.com/track/MTA0MS43OC4xNC4zOS4wLjAuMC4wLjA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'tushy',
|
|
channel: 'tushy',
|
|
url: 'https://join.tushy.com/track/MTA0MS43OC43LjIwLjAuMC4wLjAuMA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'tushyraw',
|
|
channel: 'tushyraw',
|
|
url: 'https://join.tushyraw.com/track/MTA0MS43OC4xMC4zMS4wLjAuMC4wLjA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'vixen',
|
|
channel: 'vixen',
|
|
url: 'https://join.vixen.com/track/MTA0MS43OC44LjIzLjAuMC4wLjAuMA',
|
|
comment: 'per signup',
|
|
},
|
|
{
|
|
id: 'wifey',
|
|
channel: 'wifey',
|
|
url: 'https://join.wifey.com/track/MTA0MS43OC4xOC41Ni4wLjAuMC4wLjA',
|
|
comment: 'per signup',
|
|
},
|
|
// mike adriano
|
|
{
|
|
id: 'allanal',
|
|
channel: 'allanal',
|
|
url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuMC4wLjAuMA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'analonly',
|
|
channel: 'analonly',
|
|
url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjAuMC4wLjA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'dirtyauditions',
|
|
channel: 'dirtyauditions',
|
|
url: 'https://access.dirtyauditions.com/track/OTczLjEuNy4xNC4wLjAuMC4wLjA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'nympho',
|
|
channel: 'nympho',
|
|
url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuMC4wLjAuMA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'swallowed',
|
|
channel: 'swallowed',
|
|
url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMC4wLjAuMA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'trueanal',
|
|
channel: 'trueanal',
|
|
url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMC4wLjAuMA',
|
|
comment: '50% rev share',
|
|
},
|
|
{
|
|
id: 'evilangel',
|
|
network: 'evilangel',
|
|
url: 'https://www.g2fame.com/evilangel/go.php?pr=8&su=2&si=128&ad=277470&pa=index&ar=&buffer=',
|
|
parameters: 'nats=OTczLjEuMy4zLjAuMC4wLjAuMA',
|
|
comment: '50% rev share',
|
|
},
|
|
// kelly madison / 8k
|
|
{
|
|
id: '_kellymadison',
|
|
network: 'kellymadison',
|
|
url: 'https://www2.kellymadison.com/track/MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
parameters: 'nats=MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'kellymadison',
|
|
channel: 'kellymadison',
|
|
url: 'https://www2.kellymadison.com/track/MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
parameters: 'nats=MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'teenfidelity',
|
|
channel: 'teenfidelity',
|
|
url: 'https://www2.teenfidelity.com/track/MTAxOTE0LjYuNS42LjAuNjAwNTA0OC4wLjAuMA',
|
|
parameters: 'nats=MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'pornfidelity',
|
|
channel: 'pornfidelity',
|
|
url: 'https://www2.pornfidelity.com/track/MTAxOTE0LjYuMy4zLjAuNjAwNDk3MS4wLjAuMA',
|
|
parameters: 'nats=MTAxOTE0LjYuMS4xLjAuNjAwNDgxMS4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: '5kporn',
|
|
channel: '5kporn',
|
|
url: 'https://www2.5kporn.com/track/NzgwLjEuMS4xLjAuMC4wLjAuMA',
|
|
parameters: 'nats=NzgwLjEuMS4xLjAuMC4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: '5kteens',
|
|
channel: '5kteens',
|
|
url: 'https://www2.5kteens.com/track/NzgwLjEuMi4yLjAuMC4wLjAuMA',
|
|
parameters: 'nats=NzgwLjEuMi4yLjAuMC4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: '8kmilfs',
|
|
channel: '8kmilfs',
|
|
url: 'https://www2.8kmilfs.com/track/NzgwLjEuNC40LjAuMC4wLjAuMA',
|
|
parameters: 'nats=NzgwLjEuNC40LjAuMC4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: '8kteens',
|
|
channel: '8kteens',
|
|
url: 'https://www2.8kteens.com/track/NzgwLjEuNS41LjAuMC4wLjAuMA',
|
|
parameters: 'nats=NzgwLjEuNS41LjAuMC4wLjAuMA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
// jules jordan
|
|
{
|
|
id: 'julesjordan',
|
|
network: 'julesjordan',
|
|
url: 'https://enter.julesjordan.com/track/Mzk3MS4yLjMuNi4wLjAuMC4wLjA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'manuelferrara',
|
|
channel: 'manuelferrara',
|
|
url: 'https://enter.manuelferrara.com/track/Mzk3MS4yLjcuMTYuMC4wLjAuMC4w',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'theassfactory',
|
|
channel: 'theassfactory',
|
|
url: 'https://enter.theassfactory.com/track/Mzk3MS4yLjEuMS4wLjAuMC4wLjA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'spermswallowers',
|
|
channel: 'spermswallowers',
|
|
url: 'https://enter.spermswallowers.com/track/Mzk3MS4yLjUuMTMuMC4wLjAuMC4w',
|
|
comment: '$30 per signup',
|
|
},
|
|
// etc
|
|
{
|
|
id: 'naughtyamerica',
|
|
network: 'naughtyamerica',
|
|
url: 'https://natour.naughtyamerica.com/track/MTIzODIxLjEwMDI1LjguOC4wLjEwNzU2MTcuMC4wLjA',
|
|
parameters: 'nats=MTIzODIxLjEwMDI1LjguOC4wLjEwNzU2MTcuMC4wLjA',
|
|
comment: 'pay per sign-up',
|
|
},
|
|
{
|
|
id: 'archangel',
|
|
channel: 'archangel',
|
|
url: 'https://join.archangelvideo.com/track/MzQ3LjEuMS4xLjAuMC4wLjAuMA',
|
|
comment: 'revshare',
|
|
},
|
|
{
|
|
id: 'kink',
|
|
network: 'kink',
|
|
parameters: 't=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0',
|
|
comment: '50%',
|
|
},
|
|
{
|
|
id: 'bang',
|
|
network: 'bang',
|
|
parameters: 'aff=eyJ3IjoiMTQ1ODYiLCJsIjoiMzE2NDYiLCJ0IjoiNDU4NjEifQ==', // supported
|
|
comment: '$25 per signup',
|
|
},
|
|
];
|
|
|
|
const bannerTags = {
|
|
// 21sextury
|
|
'21sextury_300_250_anal': ['anal', 'blonde'],
|
|
'21sextury_770_76_gina_gerson_dp': ['dp', 'anal', 'mfm', 'blonde'],
|
|
'21sextury_770_76_veronica_leal_dp': ['dp', 'anal', 'mfm', 'blowjob', 'blonde'],
|
|
'21sextreme_300_250_cum': ['facial', 'cum-in-mouth'],
|
|
'21naturals_315_300': ['brunette', 'natural-boobs'],
|
|
'21naturals_315_300_1': ['blonde', 'natural-boobs'],
|
|
'21naturals_315_300_gina_gerson': ['sex', 'blonde', 'natural-boobs'],
|
|
'21naturals_315_300_ginebra_bellucci': ['sex', 'brunette', 'natural-boobs'],
|
|
'21naturals_315_300_lana_roy_anal': ['anal', 'brunette', 'natural-boobs'],
|
|
'21naturals_770_76_alexis_crystal': ['blowjob', 'blonde'],
|
|
'21naturals_970_90': ['sex', 'brunette'],
|
|
// archangel
|
|
archangel_970_90_kendra_lust: ['dp', 'anal', 'sex', 'interracial', 'black'],
|
|
// dogfart
|
|
wefuckblackgirls_728_90_loss: ['mfm', 'threesome', 'anal', 'black', 'interracial'],
|
|
dfxtra_900_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
|
dfxtra_900_250_gay_anal: ['gay', 'anal', 'black', 'interracial'],
|
|
dfxtra_300_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
|
dfxtra_300_250_gay_bj: ['gay', 'blowjob', 'black', 'interracial'],
|
|
blacksonblondes_900_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
|
blacksonblondes_900_250_mfm_hj: ['mfm', 'threesome', 'handjob', 'black', 'interracial'],
|
|
blacksonblondes_300_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
|
blacksonblondes_300_250_mff_april: ['mff', 'threesome', 'black', 'interracial'],
|
|
blacksonblondes_300_250_mff_april2: ['mff', 'threesome', 'black', 'interracial'],
|
|
// evilangel
|
|
evilangel_728_90_adriana_chechik_gangbang: ['gangbang', 'airtight', 'dp', 'dvp', 'facial', 'brunette'],
|
|
evilangel_728_90_kenzie_reeves_lexi_lore: ['anal', 'mff', 'blowjob', 'blonde'],
|
|
evilangel_970_90_one_dollar: ['sex', 'mff'],
|
|
// julesjordan
|
|
julesjordan_728_90_jill_kassidy: ['sex', 'blowjob', 'black-cock', 'brunette'],
|
|
julesjordan_728_90_angela_white: ['sex', 'black-cock', 'brunette'],
|
|
julesjordan_728_90_adriana_chechik: ['anal', 'black-cock', 'brunette'],
|
|
julesjordan_728_90_autumn_falls: ['sex', 'big-boobs', 'brunette'],
|
|
julesjordan_728_90_gabbie_carter: ['sex', 'blowjob', 'facefucking', 'big-boobs', 'brunette'],
|
|
manuelferrara_728_90_asses: ['big-butt'],
|
|
// kink
|
|
boundgangbangs_305_99_moretta_11975_animated: ['gangbang', 'mfm', 'bdsm', 'blonde'],
|
|
boundgangbangs_305_99_moretta_11975: ['blowbang', 'blowjob', 'bdsm', 'blonde'],
|
|
boundgangbangs_315_300_lou_charmelle_12402_animated: ['gangbang', 'airtight', 'dp', 'bdsm', 'bondage'],
|
|
boundgangbangs_315_300_lou_charmelle_12402: ['gangbang', 'mfm', 'bdsm', 'bondage'],
|
|
boundgangbangs_770_76_amy_brooke_11965_animated: ['gangbang', 'airtight', 'mfm', 'bdsm', 'bondage'],
|
|
boundgangbangs_770_76_anissa_kate_19662: ['gangbang', 'airtight', 'bdsm', 'bondage'],
|
|
boundgangbangs_970_90_sasha_swift_18815: ['gangbang', 'blowbang', 'dp', 'blowjob', 'facefucking', 'facial', 'bdsm'],
|
|
boundgangbangs_970_90_skylar_price_12403_animated: ['gangbang', 'mfm', 'blowbang', 'blowjob', 'blonde', 'bdsm'],
|
|
hardcoregangbang_300_250_kira_noir_44157: ['blowbang', 'black', 'bdsm'],
|
|
hardcoregangbang_305_99_kira_noir: ['blowbang', 'black', 'bdsm'],
|
|
hardcoregangbang_900_250_gloves_blonde: ['blowbang', 'blonde', 'bdsm'],
|
|
hardcoregangbang_1000_100: ['gangbang', 'mfm', 'bdsm'],
|
|
// mike adriano
|
|
allanal_1323_270_24: ['anal', 'mff', 'threesome'],
|
|
allanal_300_250_14: ['anal', 'mff', 'threesome'],
|
|
allanal_300_250_15: ['anal', 'mff', 'threesome'],
|
|
allanal_315_300_3: ['anal'],
|
|
allanal_728_90_23: ['anal', 'mff', 'threesome'],
|
|
allanal_970_170_11: ['anal', 'mff', 'threesome'],
|
|
allanal_970_90_12: ['anal', 'mff', 'threesome'],
|
|
analonly_1200_90_26: ['anal'],
|
|
analonly_1323_270_10: ['anal', 'gaping'],
|
|
analonly_300_250_9: ['anal'],
|
|
analonly_315_300_17: ['anal', 'gaping'],
|
|
analonly_728_90_25: ['anal', 'gaping'],
|
|
analonly_914_424_13: ['anal', 'gaping'],
|
|
analonly_980_170_8: ['anal', 'gaping'],
|
|
nympho_1024_280: ['sex'],
|
|
nympho_285_165: ['sex'],
|
|
nympho_299_243: ['pussy-eating'],
|
|
nympho_300_250: ['sex'],
|
|
nympho_488_300: ['sex'],
|
|
nympho_640_100: ['sex', 'ass-eating'],
|
|
nympho_668_80: ['sex', 'blowjob', 'pussy-eating'],
|
|
nympho_685_75: ['sex', 'blowjob', 'pussy-eating'],
|
|
nympho_770_76: ['sex', 'blowjob', 'ass-eating', 'pussy-eating'],
|
|
nympho_935_250: ['sex', 'blowjob', 'ass-eating'],
|
|
nympho_960_75: ['sex', 'blowjob', 'ass-eating', 'pussy-eating'],
|
|
swallowed_1323_270: ['blowjob'],
|
|
swallowed_285_165: ['blowjob'],
|
|
swallowed_300_250_4: ['blowjob'],
|
|
swallowed_488_300: ['blowjob'],
|
|
swallowed_728_90_03: ['blowjob'],
|
|
swallowed_770_76: ['blowjob'],
|
|
swallowed_850_80: ['blowjob'],
|
|
swallowed_980_170: ['blowjob'],
|
|
trueanal_300_100_2: ['anal'],
|
|
trueanal_300_250: ['anal', 'gaping'],
|
|
trueanal_315_300: ['anal', 'gaping'],
|
|
trueanal_685_75: ['anal', 'gaping'],
|
|
trueanal_728_90: ['anal'],
|
|
trueanal_850_80: ['anal', 'gaping'],
|
|
trueanal_970_170: ['anal', 'gaping'],
|
|
trueanal_970_90_2: ['anal', 'gaping'],
|
|
// aylo
|
|
aylo_728_90_gay: ['gay'],
|
|
// kelly madison
|
|
kellymadison_300_250_bed: ['milf', 'big-boobs', 'lingerie', 'stockings'],
|
|
kellymadison_760_430_bed: ['milf', 'big-boobs'],
|
|
kellymadison_1700_400_lying: ['milf', 'big-boobs'],
|
|
kellymadison_1700_400_redwhiteblack: ['milf', 'big-boobs'],
|
|
pornfidelity_300_250_cg: ['sex', 'cowgirl', 'brunette'],
|
|
pornfidelity_300_250_cherry_kiss: ['blonde', 'stockings'],
|
|
pornfidelity_300_250_standing: ['brunette'],
|
|
pornfidelity_760_430_bj: ['brunette', 'blowjob'],
|
|
pornfidelity_760_430_cg_sfa: ['brunette', 'sex', 'cowgirl'],
|
|
pornfidelity_760_430_dbj: ['blowjob', 'threesome', 'mff'],
|
|
pornfidelity_760_430_miss_sofa: ['sex', 'brunette'],
|
|
pornfidelity_880_440_cg_sofa: ['sex', 'cowgirl', 'brunette'],
|
|
pornfidelity_880_440_mff: ['threesome', 'handjob', 'mff'],
|
|
pornfidelity_880_440_miss_chair: ['sex', 'brunette'],
|
|
pornfidelity_880_440_miss_sofa: ['sex', 'brunette'],
|
|
teenfidelity_1323_270_bj: ['teen', 'blowjob', 'brunette'],
|
|
teenfidelity_1323_270_doggy: ['teen', 'sex', 'brunette', 'doggy-style'],
|
|
teenfidelity_1323_270_miss: ['teen', 'blonde', 'sex'],
|
|
teenfidelity_315_271_bj: ['teen', 'brunette', 'blowjob'],
|
|
teenfidelity_315_271_finger: ['teen'],
|
|
teenfidelity_315_271_sex: ['teen', 'brunette', 'sex', 'reverse-cowgirl'],
|
|
// 8k/5k
|
|
'5kporn_1200_150': ['blonde'],
|
|
'5kporn_300_100': ['brunette'],
|
|
'5kporn_300_250': ['brunette'],
|
|
'5kporn_315_271': ['brunette'],
|
|
'5kporn_400_100': ['brunette'],
|
|
'5kporn_468_60': ['brunette'],
|
|
'5kporn_600_150': ['brunette'],
|
|
'5kporn_600_500': ['brunette'],
|
|
'5kporn_728_100': ['brunette'],
|
|
'5kteens_300_250': ['teen', 'blonde'],
|
|
'5kteens_315_271': ['teen', 'blonde'],
|
|
'5kteens_400_100': ['teen', 'blonde'],
|
|
'5kteens_600_150': ['teen', 'brunette'],
|
|
'8kteens_300_250_bj': ['teen', 'blowjob', 'brunette'],
|
|
'8kteens_300_250_hj': ['teen', 'redhead', 'handjob'],
|
|
'8kteens_300_250': ['teen', 'brunette'],
|
|
'8kteens_315_271_bj': ['teen', 'blowjob', 'brunette'],
|
|
'8kteens_315_271': ['teen', 'brunette'],
|
|
'8kteens_315_271_panties': ['teen', 'brunette'],
|
|
'8kteens_600_500_split': ['teen', 'blonde', 'redhead'],
|
|
'8kteens_728_90_bj': ['teen', 'brunette', 'blowjob'],
|
|
'8kteens_728_90_hj': ['teen', 'handjob', 'blonde'],
|
|
'8kteens_728_90': ['teen', 'sex', 'missionary', 'blonde'],
|
|
'8kteens_970_250': ['teen', 'sex', 'missionary', 'brunette'],
|
|
'8kmilfs_300_250_bj_close': ['blowjob', 'blonde', 'milf'],
|
|
'8kmilfs_300_250_bj': ['blowjob', 'blonde', 'milf'],
|
|
'8kmilfs_300_250_busty': ['brunette', 'milf'],
|
|
'8kmilfs_300_250_payton_preslee': ['sex', 'brunette', 'milf'],
|
|
'8kmilfs_300_250_ravyn_alexa': ['sex', 'tattoos', 'brunette', 'milf'],
|
|
'8kmilfs_300_250_sex': ['sex', 'brunette', 'milf'],
|
|
'8kmilfs_728_90_bj': ['blowjob', 'blonde', 'milf'],
|
|
'8kmilfs_728_90_payton_preslee': ['sex', 'brunette', 'milf'],
|
|
'8kmilfs_728_90_sex': ['sex', 'blonde', 'milf'],
|
|
'8kmilfs_970_250': ['brunette', 'milf'],
|
|
'8kmilfs_970_250_payton_preslee': ['brunette', 'milf'],
|
|
'8kmilfs_970_250_sex': ['sex', 'blonde', 'milf'],
|
|
// teenmegaworld
|
|
analangels_468_80_animated: ['anal'],
|
|
analangels_300_250_animated: ['anal'],
|
|
analbeauty_468_80_animated: ['anal'],
|
|
analbeauty_300_250_animated: ['anal'],
|
|
analbeauty_300_250_tail_animated: ['anal', 'bondage', 'bdsm'],
|
|
beautyangels_468_80_animated: ['solo'],
|
|
beautyangels_300_250_69_animated: ['lesbian', '69'],
|
|
beautyangels_300_250_lesbian_animated: ['lesbian'],
|
|
teenmegaworld_300_250_animated: ['solo'],
|
|
tmwvrnet_468_80_animated: ['vr'],
|
|
// legalporno/analvids/pornworld
|
|
pornworld_600_120_1: ['anal', 'brunette'],
|
|
pornworld_600_120_2: ['mfm', 'sex', 'brunette'],
|
|
// xempire
|
|
hardx_770_76_anal: ['anal', 'blonde'],
|
|
hardx_770_76_esperanza_anal: ['anal', 'brunette'],
|
|
hardx_770_76_zoey_monroe_mff: ['sex', 'mff', 'blonde'],
|
|
xempire_315_300: ['blowbang', 'sex', 'black-cock', 'brunette'],
|
|
xempire_970_90_mff: ['mff', '69', 'brunette'],
|
|
// vixen
|
|
blacked_300_250_cherry_kiss_dp: ['dp', 'anal', 'black-cock'],
|
|
blacked_300_250_cherry_kiss_anal_mfm: ['anal', 'black-cock'],
|
|
blacked_300_100_eve_sweet_b: ['black-cock', 'blowjob', 'cumshot', 'facial', 'brunette'],
|
|
blacked_300_100_gabbie_carter_103175: ['black-cock', 'titty-fucking', 'brunette'],
|
|
blacked_300_250_100927_b3: ['black-cock', 'gangbang', 'blonde', 'doggy-style', 'sex'],
|
|
blacked_300_250_100927_d3: ['black-cock', 'gangbang', 'blonde'],
|
|
blacked_300_250_agatha_vega_102604_b: ['black-cock', 'cowgirl', 'sex'],
|
|
blacked_300_250_agatha_vega_102604_c: ['black-cock', 'prone-bone', 'sex'],
|
|
blacked_300_250_azul_hermosa_103878_a: ['black-cock', 'blowjob', 'blonde'],
|
|
blacked_300_250_eve_sweet: ['black-cock', 'blowjob', 'cumshot', 'facial'],
|
|
blacked_300_250_gabbie_carter: ['black-cock', 'titty-fucking'],
|
|
blacked_970_70_eve_sweet: ['black-cock', 'sex', 'doggy-style', 'brunette'],
|
|
blackedraw_300_250_azul_hermosa_a: ['black-cock', 'blonde'],
|
|
blackedraw_300_250_azul_hermosa_b: ['black-cock', 'blowjob', 'blonde'],
|
|
blackedraw_300_250_corybrandi1014395e5083f69ba08: ['black-cock', 'milf', 'orgy', 'blonde', 'enhanced-boobs'],
|
|
blackedraw_300_250_kenzie_anne_103320: ['black-cock', 'blonde', 'threesome', 'mfm'],
|
|
blackedraw_300_250_kenziereeves101585a25f241ccd66b87: ['black-cock', 'blonde', 'sex', 'threesome', 'mfm'],
|
|
blackedraw_300_250_naomi_cecilia_102584_a: ['black-cock', 'blowjob', 'threesome', 'mff'],
|
|
blackedraw_300_250_naomi_cecilia_102584: ['black-cock', 'threesome', 'blowjob', 'mff'],
|
|
blackedraw_350_250_rebeccavolpetti1014925e695742548ad: ['black-cock', 'dp', 'anal', 'reverse-cowgirl', 'threesome', 'mfm'],
|
|
blackedraw_728_90_sky_pierce: ['black-cock', 'blowjob', 'blonde'],
|
|
blackedraw_728_90_violet_nicole_vanna_vicki_103384_c: ['black-cock', 'orgy', 'dp', 'anal', 'sex'],
|
|
blackedraw_770_76_azul_hermosa_b: ['black-cock', 'blowjob', 'blonde'],
|
|
blackedraw_776_70_elsa_jean_102476: ['black-cock', 'sex', 'threesome', 'mfm', 'blonde'],
|
|
deeper_300_100_chloe_cherry: ['sex', 'anal', 'dp', 'blonde', 'threesome', 'mfm'],
|
|
deeper_300_100_janna_claire_clouds: ['sex', 'doggy-style', 'blonde'],
|
|
deeper_300_100_jazmin_luv: ['black-cock', 'handjob', 'blowjob', 'blonde'],
|
|
deeper_300_250_addie_andrews_101488: ['blonde', 'bdsm'],
|
|
deeper_300_250_anna_claire_clouds: ['sex', 'doggy-style', 'blonde'],
|
|
deeper_300_250_chloe_cherry_a: ['blonde', 'sex', 'anal', 'dp', 'threesome', 'mfm'],
|
|
deeper_300_250_jazmin_luv: ['black-cock', 'sex', 'blonde', 'missionary'],
|
|
deeper_300_250_kenna_coco_102597_d: ['blonde', 'bdsm'],
|
|
deeper_300_250_kiara_cole_102527: ['blonde', 'bdsm'],
|
|
deeper_300_250_morgan_vanessa: ['blowjob', 'brunette', 'threesome', 'mff', 'cumshot', 'facial'],
|
|
deeper_315_300_kelsi_monroe_103330_a: ['blowjob', 'brunette'],
|
|
deeper_315_300_vanessa_sky_103423_a: ['brunette', 'bdsm'],
|
|
deeper_315_300_vanessa_sky_103423_b: ['brunette', 'bdsm'],
|
|
deeper_350_250_adriana_chechik_101511_a: ['blowbang', 'handjob', 'blowjob', 'brunette'],
|
|
deeper_350_250_adriana_chechik_101511_b: ['gangbang', 'brunette'],
|
|
deeper_728_90_anna_claire_clouds: ['sex', 'doggy-style', 'blonde'],
|
|
deeper_728_90_haley_reed: ['sex', 'anal', 'blonde'],
|
|
deeper_770_76_nicole_doshi_103322: ['sex', 'anal', 'dp', 'asian', 'black-cock', 'threesome', 'mfm'],
|
|
milfy_600_400_charli_phoenix_a: ['milf', 'blonde', 'handjob'],
|
|
milfy_770_76_maitland_ward: ['milf', 'handjob', 'redhead', 'high-heels'],
|
|
slayed_300_100_jazlyn_ray_blake_blossom_103884: ['lesbian', 'blonde', 'pussy-eating'],
|
|
slayed_300_100_vicki_violet_b: ['lesbian', 'brunette', 'pussy-eating'],
|
|
slayed_300_250_ariana_alexis_102779: ['lesbian', 'brunette'],
|
|
slayed_300_250_ariana_emily_eliza_102814_b: ['lesbian', 'pussy-eating', 'brunette'],
|
|
slayed_300_250_cecilia_scarlit_102783: ['lesbian', 'black', 'brunette', 'strapon'],
|
|
slayed_300_250_charlotte_kenna_102809_a: ['lesbian', 'blonde'],
|
|
slayed_300_250_ivy_vicki_102776: ['lesbian', 'blonde', 'brunette'],
|
|
slayed_300_250_vicki_violet: ['lesbian', 'brunette', 'pussy-eating'],
|
|
slayed_315_300_ivy_izzy_103388: ['lesbian', 'blonde', 'brunette', 'ass-eating'],
|
|
slayed_315_300_vanna_gianna_103313: ['lesbian', 'brunette'],
|
|
slayed_728_90_allie_doshi_a: ['lesbian', 'blonde', 'brunette', 'pussy-eating', 'anal-toy'],
|
|
slayed_728_90_ariana_alexis_102779: ['lesbian', 'pussy-eating', 'brunette'],
|
|
slayed_728_90_cecilia_scarlit_102783: ['lesbian', 'black', 'brunette', 'strapon'],
|
|
slayed_770_76_ivy_izzy_103388: ['lesbian', 'brunette', 'blonde', 'ass-eating'],
|
|
tushy_970_70_alexa_flexy_dp: ['sex', 'black-cock', 'dp', 'anal'],
|
|
tushy_776_70_gianna_dior_anal: ['sex', 'black-cock', 'anal'],
|
|
tushy_300_100_alexa_flexy_a: ['sex', 'anal', 'threesome', 'mfm', 'blonde'],
|
|
tushy_300_100_stefany_kyler: ['sex', 'anal', 'dp', 'threesome', 'mfm', 'brunette'],
|
|
tushy_300_250_kenna_vicki_102483: ['sex', 'anal', 'dp', 'orgy', 'blonde'],
|
|
tushy_315_300_kenzie_anne_103380: ['sex', 'anal', 'blonde', 'cowgirl'],
|
|
tushy_770_76_katie_kush: ['sex', 'anal', 'brunette', 'doggy-style', 'missionary'],
|
|
tushy_776_70_alexis_kira_102518: ['sex', 'anal', 'black', 'threesome', 'blowjob', 'mff'],
|
|
tushy_776_70_chloe_temple_102530: ['sex', 'anal', 'doggy-style', 'missionary', 'blowjob', 'ball-licking', 'blonde'],
|
|
tushyraw_300_100_rika_fane_103852: ['sex', 'anal', 'doggy-style', 'blonde'],
|
|
tushyraw_300_100_summer_jones: ['sex', 'anal', 'brunette'],
|
|
tushyraw_300_250_keiracroft1017645f241e3e76b4c: ['sex', 'anal', 'brunette', 'stockings'],
|
|
tushyraw_315_300_angelemily1014685e5084556d654: ['sex', 'anal', 'doggy-style', 'blonde'],
|
|
tushyraw_728_90_rika_fane_103852: ['sex', 'anal', 'doggy-style', 'blonde'],
|
|
tushyraw_728_90_summer_jones: ['sex', 'anal', 'brunette'],
|
|
tushyraw_770_76_adriana_chechik_102378: ['sex', 'anal', 'brunette', 'doggy-style', 'blowjob'],
|
|
vixen_300_100_eva_elfie: ['sex', 'blonde'],
|
|
vixen_300_100_rae_lil_black_a: ['blowjob', 'asian', 'cumshot', 'facial'],
|
|
vixen_300_250_addiecayenne101675b5f2420ada708a: ['blowjob', 'threesome', 'mff', 'blonde'],
|
|
vixen_300_250_elsa_jean_102629_b: ['sex', 'blonde'],
|
|
vixen_300_250_emelie_eveline_102586_a: ['sex', 'threesome', 'mff', 'ball-licking'],
|
|
vixen_300_250_gabbiecarter1014755e5084db84428: ['titty-fucking', 'brunette'],
|
|
vixen_728_90_lika_mary_102742: ['blowjob', 'sex', 'threesome', 'mff'],
|
|
vixen_770_76_eve_sweet: ['sex', 'blowjob', 'brunette'],
|
|
vixen_770_76_jazmin_luv: ['sex', 'blowjob', 'blonde'],
|
|
vixen_776_70_apolonia_agatha_102475_a: ['blowjob', 'sex', 'brunette', 'threesome', 'mff'],
|
|
// naughty america
|
|
naughtyamerica_250_250_jenna_star: ['sex', 'doggy-style', 'blonde'],
|
|
naughtyamerica_250_250_payton_preslee: ['titty-fucking', 'big-boobs', 'brunette'],
|
|
naughtyamerica_250_250_wov: ['threesome', 'mff', 'big-boobs', 'brunette', 'blonde'],
|
|
naughtyamerica_300_250_holly_day: ['sex', 'cowgirl', 'brunette', 'pov', 'vr'],
|
|
naughtyamerica_300_250_kylie_page: ['sex', 'cowgirl', 'blonde', 'pov', 'vr'],
|
|
naughtyamerica_300_250_melissa_stratton: ['sex', 'cowgirl', 'brunette', 'pov', 'vr'],
|
|
naughtyamerica_728_90_holly_day: ['sex', 'blowjob', 'brunette', 'reverse-cowgirl'],
|
|
naughtyamerica_728_90_kylie_page: ['titty-fucking', 'sex', 'doggy-style', 'blonde'],
|
|
tonightsgirlfriend_300_250_jill_kassidy: ['sex', 'missionary', 'black-cock', 'interracial', 'fishnet', 'fishnet-stockings', 'blonde'],
|
|
tonightsgirlfriend_300_250_paisley_porter: ['sex', 'cowgirl', 'stockings', 'blonde'],
|
|
tonightsgirlfriend_728_90_charli_phoenix: ['sex', 'blowjob', 'doggy-style', 'blonde'],
|
|
tonightsgirlfriend_728_90_jill_kassidy: ['sex', 'blowjob', 'cowgirl', 'blonde'],
|
|
tonightsgirlfriend_728_90_paisley_porter: ['sex', 'blowjob', 'missionary', 'stockings', 'blonde'],
|
|
};
|
|
|
|
/*
|
|
const bannerActors = {
|
|
// 21sextury
|
|
'21sextury_770_76_gina_gerson_dp': ['gina-gerson'],
|
|
'21sextury_770_76_veronica_leal_dp': ['veronica-leal'],
|
|
'21naturals_315_300_gina_gerson': ['gina-gerson'],
|
|
'21naturals_315_300_ginebra_bellucci': ['ginebra-bellucci'],
|
|
'21naturals_315_300_lana_roy_anal': ['lana-roy'],
|
|
'21naturals_770_76_alexis_crystal': ['alexis-crystal'],
|
|
// archangel
|
|
archangel_970_90_kendra_lust: ['kendra-lust'],
|
|
// evilangel
|
|
evilangel_728_90_adriana_chechik_gangbang: ['adriana-chechik'],
|
|
evilangel_728_90_kenzie_reeves_lexi_lore: ['kenzie-reeves', 'lexi-lore'],
|
|
// julesjordan
|
|
julesjordan_728_90_jill_kassidy: ['jill-kassidy'],
|
|
julesjordan_728_90_angela_white: ['angela-white'],
|
|
julesjordan_728_90_adriana_chechik: ['adriana-chechik'],
|
|
julesjordan_728_90_autumn_falls: ['autumn-falls'],
|
|
julesjordan_728_90_gabbie_carter: ['gabbie-carter'],
|
|
// kink
|
|
boundgangbangs_305_99_moretta_11975_animated: ['moretta'],
|
|
boundgangbangs_305_99_moretta_11975: ['moretta'],
|
|
boundgangbangs_315_300_lou_charmelle_12402_animated: ['lou-charmelle'],
|
|
boundgangbangs_315_300_lou_charmelle_12402: ['lou-charmelle'],
|
|
boundgangbangs_770_76_amy_brooke_11965_animated: ['amy-brooke'],
|
|
boundgangbangs_770_76_anissa_kate_19662: ['anissa-kate'],
|
|
boundgangbangs_970_90_sasha_swift_18815: ['sasha-swift'],
|
|
boundgangbangs_970_90_skylar_price_12403_animated: ['skylar-price'],
|
|
hardcoregangbang_300_250_kira_noir_44157: ['kira-noir'],
|
|
hardcoregangbang_305_99_kira_noir: ['kira-noir'],
|
|
// xempire
|
|
hardx_770_76_esperanza_anal: ['esperanza-del-horno'],
|
|
hardx_770_76_zoey_monroe_mff: ['zoey-monroe'],
|
|
// vixen
|
|
blacked_300_250_cherry_kiss_dp: ['cherry-kiss'],
|
|
blacked_300_250_cherry_kiss_anal_mfm: ['cherry-kiss'],
|
|
tushy_970_70_alexa_flexy_dp: ['alexa-flexy'],
|
|
tushy_776_70_gianna_dior_anal: ['gianna-dior'],
|
|
};
|
|
*/
|
|
|
|
const campaigns = [];
|
|
|
|
async function scan(dir) {
|
|
const items = await fs.readdir(dir);
|
|
|
|
const files = await Promise.all(items.map(async (item) => {
|
|
const itemPath = path.join(dir, item);
|
|
|
|
if ((await fs.stat(itemPath)).isDirectory()) {
|
|
if (itemPath.includes('_')) {
|
|
return [];
|
|
}
|
|
|
|
return scan(itemPath);
|
|
}
|
|
|
|
return itemPath;
|
|
}));
|
|
|
|
return files.flat();
|
|
}
|
|
|
|
exports.seed = async (knex) => {
|
|
const files = await scan('./public/banners');
|
|
|
|
const banners = files.map((file) => {
|
|
const [network, channel, banner, type] = file.match(/(\w+)\/(\w+)\/(\w+)\.(\w+)$/).slice(1);
|
|
const [affiliateId, width, height] = banner.match(/([a-z0-9]+)_(\d{2,4})_(\d{2,4})/).slice(1);
|
|
|
|
const tags = bannerTags[banner] || [];
|
|
const affiliate = affiliates.find((aff) => aff.id === affiliateId)
|
|
|| affiliates.find((aff) => aff.channel === channel)
|
|
|| affiliates.find((aff) => aff.network === network);
|
|
|
|
if (!affiliate) {
|
|
console.warn('UNMATCHED AFFILIATE', file);
|
|
}
|
|
|
|
return {
|
|
file,
|
|
network: network === 'banners' ? channel : network,
|
|
channel: network === 'banners' ? null : channel,
|
|
affiliateId,
|
|
affiliate: affiliate?.id,
|
|
banner,
|
|
width: Number(width),
|
|
height: Number(height),
|
|
type,
|
|
tags,
|
|
};
|
|
}).filter((banner) => !!banner.affiliate);
|
|
|
|
await Promise.all([
|
|
knex('campaigns').delete(),
|
|
knex('banners_tags').delete(),
|
|
]);
|
|
|
|
await Promise.all([
|
|
knex('affiliates').delete(),
|
|
knex('banners').delete(),
|
|
]);
|
|
|
|
const [networks, channels, tags] = await Promise.all([
|
|
knex('entities')
|
|
.where('type', 'network')
|
|
.whereIn('slug', [...affiliates, ...campaigns, ...banners].map((link) => link.network).filter(Boolean)),
|
|
knex('entities')
|
|
.where('type', 'channel')
|
|
.whereIn('slug', [...affiliates, ...campaigns, ...banners].map((link) => link.channel).filter(Boolean)),
|
|
knex('tags')
|
|
.whereIn('slug', banners.flatMap((banner) => banner.tags || [])),
|
|
/*
|
|
knex('actors')
|
|
.whereIn('slug', banners.flatMap((banner) => banner.tags || [])),
|
|
*/
|
|
]);
|
|
|
|
const networksBySlug = networks.reduce((acc, network) => ({ ...acc, [network.slug]: network }), {});
|
|
const channelsBySlug = channels.reduce((acc, channel) => ({ ...acc, [channel.slug]: channel }), {});
|
|
const tagsBySlug = tags.reduce((acc, tag) => ({ ...acc, [tag.slug]: tag }), {});
|
|
|
|
const affiliatesWithEntityId = affiliates.map((affiliate) => ({
|
|
id: affiliate.id,
|
|
entity_id: networksBySlug[affiliate.network]?.id || channelsBySlug[affiliate.channel]?.id || null,
|
|
url: affiliate.url,
|
|
parameters: affiliate.parameters,
|
|
comment: affiliate.comment,
|
|
}));
|
|
|
|
const bannersWithEntityId = banners.map((banner) => ({
|
|
id: banner.id || banner.banner,
|
|
width: banner.width,
|
|
height: banner.height,
|
|
type: banner.type || (banner.id.includes('animated') ? 'gif' : 'jpg'),
|
|
entity_id: channelsBySlug[banner.channel]?.id || networksBySlug[banner.network]?.id || null,
|
|
}));
|
|
|
|
banners.map((banner) => {
|
|
return {
|
|
...banner,
|
|
entity: channelsBySlug[banner.channel] || networksBySlug[banner.network] || null,
|
|
};
|
|
});
|
|
|
|
const bannerTagEntries = banners.flatMap((banner) => banner.tags?.map((tag) => {
|
|
if (!tagsBySlug[tag]) {
|
|
console.warn('MISSING TAG', tag);
|
|
}
|
|
|
|
return {
|
|
banner_id: banner.id || banner.banner,
|
|
tag_id: tagsBySlug[tag].id,
|
|
};
|
|
}) || []);
|
|
|
|
const campaignsWithEntityIdAndAffiliateId = [...campaigns, ...banners].map((campaign) => ({
|
|
// entity_id: networksBySlug[campaign.network]?.id || channelsBySlug[campaign.channel]?.id,
|
|
entity_id: channelsBySlug[campaign.channel]?.id || networksBySlug[campaign.network]?.id,
|
|
url: campaign.url,
|
|
affiliate_id: campaign.affiliate,
|
|
banner_id: campaign.banner,
|
|
})).filter((link) => link.entity_id && (link.url || link.affiliate_id || link.banner_id));
|
|
|
|
await knex('affiliates').insert(affiliatesWithEntityId);
|
|
await bulkInsert('banners', bannersWithEntityId, false);
|
|
await bulkInsert('banners_tags', bannerTagEntries, false);
|
|
await bulkInsert('campaigns', campaignsWithEntityIdAndAffiliateId, false);
|
|
};
|