diff --git a/seeds/06_affiliates.js b/seeds/06_affiliates.js index bc78033d..a3679f68 100755 --- a/seeds/06_affiliates.js +++ b/seeds/06_affiliates.js @@ -3,24 +3,68 @@ const path = require('path'); const bulkInsert = require('../src/utils/bulk-insert'); const affiliates = [ + // vixen { - id: 'archangel', - channel: 'archangel', - url: 'https://join.archangelvideo.com/track/MzQ3LjEuMS4xLjAuMC4wLjAuMA', - comment: 'revshare', + id: '_vixen', + network: 'vixen', + url: 'http://join.vixen.com/track/MTA0MS43OC44LjQyLjAuMC4wLjAuMA', + comment: 'per signup', }, { - id: 'kink', - network: 'kink', - parameters: 't=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - comment: '50%', + id: 'blacked', + channel: 'blacked', + url: 'https://join.blacked.com/track/MTA0MS43OC4zLjMuMC4wLjAuMC4w', + comment: 'per signup', }, { - id: 'bang', - network: 'bang', - parameters: 'aff=eyJ3IjoiMTQ1ODYiLCJsIjoiMzE2NDYiLCJ0IjoiNDU4NjEifQ==', // supported - comment: '$25 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', @@ -64,6 +108,7 @@ const affiliates = [ parameters: 'nats=OTczLjEuMy4zLjAuMC4wLjAuMA', comment: '50% rev share', }, + // kelly madison / 8k { id: '_kellymadison', network: 'kellymadison', @@ -120,6 +165,7 @@ const affiliates = [ parameters: 'nats=NzgwLjEuNS41LjAuMC4wLjAuMA', comment: 'pay per sign-up', }, + // jules jordan { id: 'julesjordan', network: 'julesjordan', @@ -144,6 +190,7 @@ const affiliates = [ url: 'https://enter.spermswallowers.com/track/Mzk3MS4yLjUuMTMuMC4wLjAuMC4w', comment: '$30 per signup', }, + // etc { id: 'naughtyamerica', network: 'naughtyamerica', @@ -151,6 +198,24 @@ const affiliates = [ 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 = { @@ -389,1223 +454,125 @@ const bannerActors = { }; */ -const campaigns = [ - // 21sextury - { - network: '21sextury', - url: 'https://www.iyalc.com/21sextury/go.php?pr=8&su=1&si=207&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21sextury_300_250_anal', - network: '21sextury', - url: 'https://www.iyalc.com/21sextury/go.php?pr=8&su=1&si=207&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21sextury_770_76_gina_gerson_dp', - network: '21sextury', - url: 'https://www.iyalc.com/21sextury/go.php?pr=8&su=1&si=207&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21sextury_770_76_veronica_leal_dp', - network: '21sextury', - url: 'https://www.iyalc.com/21sextury/go.php?pr=8&su=1&si=207&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21sextreme_300_250_cum', - network: '21sextreme', - url: 'https://www.iyalc.com/21sextreme/go.php?pr=8&su=1&si=208&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_315_300', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_315_300_1', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_315_300_gina_gerson', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_315_300_ginebra_bellucci', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_315_300_lana_roy_anal', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_770_76_alexis_crystal', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: '21naturals_970_90', - network: '21naturals', - url: 'https://www.iyalc.com/21naturals/go.php?pr=8&su=1&si=209&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - // archangel - /* NATS license expired - { - channel: 'archangel', - affiliate: 'archangel', - }, - { - channel: 'archangel', - affiliate: 'archangel', - banner: 'archangel_970_90_kendra_lust', - }, - */ - // bang - { - network: 'bang', - affiliate: 'bang', - comment: 'per signup', - }, - // brazzers - { - network: 'brazzers', - url: 'https://landing.brazzersnetwork.com/?ats=eyJhIjozMTYwOTcsImMiOjU5MzI1Mzk5LCJuIjoxNCwicyI6OTAsImUiOjg4MDMsInAiOjExfQ==', - comment: '$30 per signup', - }, - // dfxtra / dogfart - { - network: 'dfxtra', - url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - network: 'dfxtra', - banner: 'dfxtra_900_250_mfm', - url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - network: 'dfxtra', - banner: 'dfxtra_900_250_gay_anal', - url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - network: 'dfxtra', - banner: 'dfxtra_300_250_mfm', - url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - network: 'dfxtra', - banner: 'dfxtra_300_250_gay_bj', - url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - banner: 'blacksonblondes_900_250_mfm_hj', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - banner: 'blacksonblondes_900_250_mfm', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - banner: 'blacksonblondes_300_250_mfm', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - banner: 'blacksonblondes_300_250_mff_april', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - { - channel: 'blacksonblondes', - banner: 'blacksonblondes_300_250_mff_april2', - url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=', - comment: 'per signup', - }, - // evil angel - { - network: 'evilangel', - url: 'https://www.iyalc.com/evilangel/go.php?pr=8&su=2&si=128&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: 'evilangel_728_90_adriana_chechik_gangbang', - network: 'evilangel', - url: 'https://www.iyalc.com/evilangel/go.php?pr=8&su=2&si=128&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: 'evilangel_728_90_kenzie_reeves_lexi_lore', - network: 'evilangel', - url: 'https://www.iyalc.com/evilangel/go.php?pr=8&su=2&si=128&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - { - banner: 'evilangel_970_90_one_dollar', - network: 'evilangel', - url: 'https://www.iyalc.com/evilangel/go.php?pr=8&su=2&si=128&ad=277470&pa=index&ar=&buffer=', - comment: 'per signup', - }, - // julesjordan - { - banner: 'julesjordan_728_90_jill_kassidy', - network: 'julesjordan', - affiliate: 'julesjordan', - }, - { - banner: 'julesjordan_728_90_angela_white', - network: 'julesjordan', - affiliate: 'julesjordan', - }, - { - banner: 'julesjordan_728_90_adriana_chechik', - network: 'julesjordan', - affiliate: 'julesjordan', - }, - { - banner: 'julesjordan_728_90_autumn_falls', - network: 'julesjordan', - affiliate: 'julesjordan', - }, - { - banner: 'julesjordan_728_90_gabbie_carter', - network: 'julesjordan', - affiliate: 'julesjordan', - }, - { - banner: 'manuelferrara_728_90_asses', - channel: 'manuelferrara', - affiliate: 'manuelferrara', - }, - // kink - { - network: 'kink', - affiliate: 'kink', - comment: '50%', - }, - { - channel: 'boundgangbangs', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - comment: '50%', - }, - { - channel: 'hardcoregangbang', - url: 'https://www.kink.com/channel/hardcore-gangbang?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - comment: '50%', - }, - { - banner: 'boundgangbangs_305_99_moretta_11975', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_305_99_moretta_11975_animated', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_315_300_lou_charmelle_12402', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_315_300_lou_charmelle_12402_animated', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_770_76_amy_brooke_11965_animated', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_770_76_anissa_kate_19662', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_970_90_sasha_swift_18815', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'boundgangbangs_970_90_skylar_price_12403_animated', - url: 'https://www.kink.com/channel/bound-gang-bangs?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'boundgangbangs', - comment: '50%', - }, - { - banner: 'hardcoregangbang_300_250_kira_noir_44157', - url: 'https://www.kink.com/channel/hardcore-gangbang?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'hardcoregangbang', - comment: '50%', - }, - { - banner: 'hardcoregangbang_305_99_kira_noir', - url: 'https://www.kink.com/channel/hardcore-gangbang?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'hardcoregangbang', - comment: '50%', - }, - { - banner: 'hardcoregangbang_900_250_gloves_blonde', - url: 'https://www.kink.com/channel/hardcore-gangbang?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'hardcoregangbang', - comment: '50%', - }, - { - banner: 'hardcoregangbang_1000_100', - url: 'https://www.kink.com/channel/hardcore-gangbang?t=eyJhZmZpbGlhdGUiOiJEZWJhdWNoZXJ5TGliIiwiY2FtcGFpZ24iOiJkZWZhdWx0IiwiYWdldmVyaWZpZWQiOiJ5In0', - channel: 'hardcoregangbang', - comment: '50%', - }, - // kellymadison/teenfidelity - { - banner: 'kellymadison_300_250_bed', - channel: 'kellymadison', - affiliate: 'kellymadison', - }, - { - banner: 'kellymadison_760_430_bed', - channel: 'kellymadison', - affiliate: 'kellymadison', - }, - { - banner: 'kellymadison_1700_400_lying', - channel: 'kellymadison', - affiliate: 'kellymadison', - }, - { - banner: 'kellymadison_1700_400_redwhiteblack', - channel: 'kellymadison', - affiliate: 'kellymadison', - }, - { - banner: 'pornfidelity_300_250_cg', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_300_250_cherry_kiss', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_300_250_standing', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_760_430_bj', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_760_430_cg_sfa', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_760_430_dbj', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_760_430_miss_sofa', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_880_440_cg_sofa', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_880_440_mff', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_880_440_miss_chair', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'pornfidelity_880_440_miss_sofa', - channel: 'pornfidelity', - affiliate: 'pornfidelity', - }, - { - banner: 'teenfidelity_1323_270_bj', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - { - banner: 'teenfidelity_1323_270_doggy', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - { - banner: 'teenfidelity_1323_270_miss', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - { - banner: 'teenfidelity_315_271_bj', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - { - banner: 'teenfidelity_315_271_finger', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - { - banner: 'teenfidelity_315_271_sex', - channel: 'teenfidelity', - affiliate: 'teenfidelity', - }, - // 5K/8K - { - banner: '5kporn_1200_150', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_300_100', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_300_250', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_315_271', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_400_100', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_468_60', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_600_150', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_600_500', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kporn_728_100', - channel: '5kporn', - affiliate: '5kporn', - }, - { - banner: '5kteens_300_250', - channel: '5kteens', - affiliate: '5kteens', - }, - { - banner: '5kteens_315_271', - channel: '5kteens', - affiliate: '5kteens', - }, - { - banner: '5kteens_400_100', - channel: '5kteens', - affiliate: '5kteens', - }, - { - banner: '5kteens_600_150', - channel: '5kteens', - affiliate: '5kteens', - }, - { - banner: '8kteens_300_250_bj', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_300_250_hj', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_300_250', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_315_271_bj', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_315_271', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_315_271_panties', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_600_500_split', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_728_90_bj', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_728_90_hj', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_728_90', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kteens_970_250', - channel: '8kteens', - affiliate: '8kteens', - }, - { - banner: '8kmilfs_300_250_bj_close', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_300_250_bj', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_300_250_busty', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_300_250_payton_preslee', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_300_250_ravyn_alexa', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_300_250_sex', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_728_90_bj', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_728_90_payton_preslee', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_728_90_sex', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_970_250', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_970_250_payton_preslee', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - { - banner: '8kmilfs_970_250_sex', - channel: '8kmilfs', - affiliate: '8kmilfs', - }, - // mike adriano - { - banner: 'allanal_300_250_14', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_300_250_15', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_315_300_3', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_728_90_23', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_970_90_12', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_970_170_11', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'allanal_1323_270_24', - channel: 'allanal', - url: 'https://access.allanal.com/track/OTczLjEuNS41LjAuNDcwNDQuMC4wLjA', - comment: '50% rev share', - }, - { - banner: 'analonly_300_250_9', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_315_300_17', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_728_90_25', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_914_424_13', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_980_170_8', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_1200_90_26', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'analonly_1323_270_10', - channel: 'analonly', - url: 'https://access.analonly.com/track/OTczLjEuNi4xMC4wLjQ3NTQ3LjAuMC4w', - comment: '50% rev share', - }, - { - banner: 'nympho_285_165', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_299_243', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_300_250', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_488_300', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_640_100', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_668_80', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_685_75', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_770_76', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_935_250', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_960_75', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'nympho_1024_280', - channel: 'nympho', - url: 'https://access.nympho.com/track/OTczLjEuNC40LjAuNDY2My4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_285_165', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_300_250_4', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_488_300', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_728_90_03', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_770_76', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_850_80', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_980_170', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'swallowed_1323_270', - channel: 'swallowed', - url: 'https://access.swallowed.com/track/OTczLjEuMS4xLjAuMjg3Ny4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_300_100_2', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_300_250', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_315_300', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_685_75', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_728_90', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_850_80', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_970_90_2', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - { - banner: 'trueanal_970_170', - channel: 'trueanal', - url: 'https://access.trueanal.com/track/OTczLjEuMy4zLjAuMjkxMi4wLjAuMA', - comment: '50% rev share', - }, - // aylo - /* stopped working - { - network: 'aylo', - banner: 'aylo_728_90', - }, - { - network: 'aylo', - banner: 'aylo_300_100', - }, - { - network: 'aylo', - banner: 'aylo_300_250', - }, - { - network: 'aylo', - banner: 'aylo_315_300', - }, - { - network: 'aylo', - banner: 'aylo_728_90_gay', - }, - */ - // teenmegaworld - { - network: 'teenmegaworld', - url: 'https://secure.teenmegaworld.net/track/MzAxNjcxLjUuMS4xLjAuMC4wLjAuMA', - comment: 'recurring', - }, - { - banner: 'teenmegaworld_300_250_animated', - network: 'teenmegaworld', - url: 'https://secure.teenmegaworld.net/track/MzAxNjcxLjUuMS4xLjAuMC4wLjAuMA', - comment: 'recurring', - }, - { - banner: 'analangels_468_80_animated', - channel: 'analangels', - url: 'https://secure.anal-angels.com/track/MzAxNjcxLjUuMzMuMzMuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'analangels_300_250_animated', - channel: 'analangels', - url: 'https://secure.anal-angels.com/track/MzAxNjcxLjUuMzMuMzMuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'analbeauty_468_80_animated', - channel: 'analbeauty', - url: 'https://secure.anal-beauty.com/track/MzAxNjcxLjUuNDAuNDAuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'analbeauty_300_250_animated', - channel: 'analbeauty', - url: 'https://secure.anal-beauty.com/track/MzAxNjcxLjUuNDAuNDAuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'analbeauty_300_250_tail_animated', - channel: 'analbeauty', - url: 'https://secure.anal-beauty.com/track/MzAxNjcxLjUuNDAuNDAuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'beautyangels_468_80_animated', - channel: 'beautyangels', - url: 'https://secure.beauty-angels.com/track/MzAxNjcxLjUuMjcuMjcuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'beautyangels_300_250_69_animated', - channel: 'beautyangels', - url: 'https://secure.beauty-angels.com/track/MzAxNjcxLjUuMjcuMjcuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'beautyangels_300_250_lesbian_animated', - channel: 'beautyangels', - url: 'https://secure.beauty-angels.com/track/MzAxNjcxLjUuMjcuMjcuMC4wLjAuMC4w', - comment: 'recurring', - }, - { - banner: 'tmwvrnet_468_80_animated', - channel: 'tmwvrnet', - url: 'https://secure.tmwvrnet.com/track/MzAxNjcxLjUuNDQuNDQuMC4wLjAuMC4w', - comment: 'recurring', - }, - // legalporno/analvids/pornworld - { - network: 'analvids', - url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - { - network: 'analvids', - banner: 'pornworld_600_120_1', - url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - { - network: 'analvids', - banner: 'pornworld_600_120_2', - url: 'https://www.analvids.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - { - network: 'pornworld', - url: 'https://pornworld.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - { - network: 'pornworld', - banner: 'pornworld_600_120_1', - url: 'https://pornworld.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - { - network: 'pornworld', - banner: 'pornworld_600_120_2', - url: 'https://pornworld.com/new-videos?aff=BW90MHT1DP____', - comment: 'default offer', - }, - // xempire - { - network: 'xempire', - url: 'https://www.blazinglink.com/xempire/go.php?pr=12&su=2&si=81&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - network: 'xempire', - banner: 'xempire_970_90_mff', - url: 'https://www.blazinglink.com/xempire/go.php?pr=12&su=2&si=81&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - network: 'xempire', - banner: 'xempire_315_300', - url: 'https://www.blazinglink.com/xempire/go.php?pr=12&su=2&si=81&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - channel: 'hardx', - url: 'https://www.blazinglink.com/hardx/go.php?pr=12&su=2&si=68&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - channel: 'hardx', - banner: 'hardx_770_76_anal', - url: 'https://www.blazinglink.com/hardx/go.php?pr=12&su=2&si=68&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - channel: 'hardx', - banner: 'hardx_770_76_esperanza_anal', - url: 'https://www.blazinglink.com/hardx/go.php?pr=12&su=2&si=68&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - { - channel: 'hardx', - banner: 'hardx_770_76_zoey_monroe_mff', - url: 'https://www.blazinglink.com/hardx/go.php?pr=12&su=2&si=68&pa=index&ar=&ad=277470', - comment: '$30 per signup', - }, - // vixen - { - channel: 'blacked', - url: 'https://join.blacked.com/track/MTA0MS43OC4zLjMuMC4wLjAuMC4w', - comment: '$30 per signup', - }, - { - channel: 'blacked', - banner: 'blacked_300_250_cherry_kiss_dp', - url: 'https://join.blacked.com/track/MTA0MS43OC4zLjMuMC4wLjAuMC4w', - comment: '$30 per signup', - }, - { - channel: 'blacked', - banner: 'blacked_300_250_cherry_kiss_anal_mfm', - url: 'https://join.blacked.com/track/MTA0MS43OC4zLjMuMC4wLjAuMC4w', - comment: '$30 per signup', - }, - { - channel: 'tushy', - url: 'https://join.tushy.com/track/MTA0MS43OC43LjIwLjAuMC4wLjAuMA', - comment: '$30 per signup', - }, - { - channel: 'tushy', - banner: 'tushy_970_70_alexa_flexy_dp', - url: 'https://join.tushy.com/track/MTA0MS43OC43LjIwLjAuMC4wLjAuMA', - comment: '$30 per signup', - }, - { - channel: 'tushy', - banner: 'tushy_776_70_gianna_dior_anal', - url: 'https://join.tushy.com/track/MTA0MS43OC43LjIwLjAuMC4wLjAuMA', - comment: '$30 per signup', - }, - // naughty america - { - banner: 'naughtyamerica_250_250_jenna_star', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_250_250_payton_preslee', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_250_250_wov', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_300_250_holly_day', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_300_250_kylie_page', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_300_250_melissa_stratton', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_728_90_holly_day', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'naughtyamerica_728_90_kylie_page', - network: 'naughtyamerica', - affiliate: 'naughtyamerica', - }, - { - banner: 'tonightsgirlfriend_300_250_jill_kassidy', - channel: 'tonightsgirlfriend', - affiliate: 'naughtyamerica', - }, - { - banner: 'tonightsgirlfriend_300_250_paisley_porter', - channel: 'tonightsgirlfriend', - affiliate: 'naughtyamerica', - }, - { - banner: 'tonightsgirlfriend_728_90_charli_phoenix', - channel: 'tonightsgirlfriend', - affiliate: 'naughtyamerica', - }, - { - banner: 'tonightsgirlfriend_728_90_jill_kassidy', - channel: 'tonightsgirlfriend', - affiliate: 'naughtyamerica', - }, - { - banner: 'tonightsgirlfriend_728_90_paisley_porter', - channel: 'tonightsgirlfriend', - affiliate: 'naughtyamerica', - }, -]; +const campaigns = []; -exports.seed = async (knex) => Promise.resolve() - .then(async () => { - const bannerNetworks = await fs.readdir('./public/banners'); +async function scan(dir) { + const items = await fs.readdir(dir); - // derive entity, width and height from filepath to minimize redundant work - const rawBanners = await Promise.all(bannerNetworks.map(async (network) => { - const networkPaths = await fs.readdir(`./public/banners/${network}`); + const files = await Promise.all(items.map(async (item) => { + const itemPath = path.join(dir, item); - return Promise.all(networkPaths.map(async (file) => { - if (file.charAt(0) === '_') { - return null; - } + if ((await fs.stat(itemPath)).isDirectory()) { + if (itemPath.includes('_')) { + return []; + } - if (await fs.stat(`./public/banners/${network}/${file}`).then(async (stats) => stats.isDirectory())) { - const channelPaths = await fs.readdir(`./public/banners/${network}/${file}`); + return scan(itemPath); + } - return channelPaths.map((filepath) => { - const { name, ext } = path.parse(filepath); + return itemPath; + })); - return { - id: name, - type: ext.slice(1), - channel: file, - }; - }); - } + return files.flat(); +} - const { name, ext } = path.parse(file); +exports.seed = async (knex) => { + const files = await scan('./public/banners'); - return { - id: name, - type: ext.slice(1), - network, - }; - })); - })); + 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 banners = rawBanners - .flat(2) - .filter(Boolean) - .map((banner) => { - const [, width, height] = banner.id.match(/[a-z0-9]+_(\d+)_(\d+)/); + const tags = bannerTags[banner] || []; + const affiliate = affiliates.find((aff) => aff.id === affiliateId) + || affiliates.find((aff) => aff.channel === channel) + || affiliates.find((aff) => aff.network === network); - return { - ...banner, - width: Number(width), - height: Number(height), - tags: banner.tags || bannerTags[banner.id] || [], - }; - }); + if (!affiliate) { + console.warn('UNMATCHED AFFILIATE', file); + } - await Promise.all([ - knex('campaigns').delete(), - knex('banners_tags').delete(), - ]); + 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('affiliates').delete(), - knex('banners').delete(), - ]); + await Promise.all([ + knex('campaigns').delete(), + knex('banners_tags').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 || [])), - */ - ]); + await Promise.all([ + knex('affiliates').delete(), + knex('banners').delete(), + ]); - 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 [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 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 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 bannersWithEntityId = banners.map((banner) => ({ - id: banner.id, - width: banner.width, - height: banner.height, - type: banner.type || (banner.id.includes('animated') ? 'gif' : 'jpg'), - entity_id: networksBySlug[banner.network]?.id || channelsBySlug[banner.channel]?.id || channelsBySlug[banner.network]?.id || null, - })); + 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 bannerTagEntries = banners.flatMap((banner) => banner.tags?.map((tag) => ({ - banner_id: banner.id, - tag_id: tagsBySlug[tag].id, - })) || []); + 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, + })); - const campaignsWithEntityIdAndAffiliateId = campaigns.map((campaign) => ({ - entity_id: networksBySlug[campaign.network]?.id || channelsBySlug[campaign.channel]?.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); + banners.map((banner) => { + return { + ...banner, + entity: channelsBySlug[banner.channel] || networksBySlug[banner.network] || null, + }; }); + + const bannerTagEntries = banners.flatMap((banner) => banner.tags?.map((tag) => ({ + 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); +};