diff --git a/dripoffers.js b/dripoffers.js index e09029b..ba83bb4 100644 --- a/dripoffers.js +++ b/dripoffers.js @@ -25,18 +25,26 @@ // 3. A SYNDICATION HICCUP NEVER BLOCKS THE MEMBER. Callers swallow errors; the IAP campaign // goes live either way. // -// Capacity note (2026-09-18): the offerwall is a menu, not a rotator - every eligible campaign -// is listed at once, ordered by reward, and the member chooses. So adding campaigns does not -// starve the others the way the AdRevLinks rotator does; it lengthens the menu. What is finite -// is total clicks, running around 2,700 a day across the whole platform. Hence MAX_CLICKS -// below: one campaign booking 50,000 clicks would sit in the list for weeks. Cost is not the -// reason for the caps - Marty owns the platform and treats these placements as free. +// Capacity note (2026-09-18, corrected same day): the offerwall is a menu, not a rotator - +// every eligible campaign is listed at once, ordered by reward, and the earner chooses. So +// adding campaigns does not starve the others the way the AdRevLinks rotator does; it +// lengthens the menu. +// +// What is finite is total clicks, and the real figure is SMALL: the permanent click ledger +// shows roughly 40-50 clicks A DAY across the whole platform. (An earlier read of 2,700/day +// was wrong - it came from campaigns.received_today, which is only a daily figure while the +// nightly cron resets it, and that reset has stopped running.) Pack 2 puts our offers above +// the house campaigns, and they are indeed taking the large majority of that trickle. +// +// Hence a deliberately small MAX_CLICKS: at this volume a 10,000-click booking would sit at +// the top of the list for most of a year and crowd everything else out. Cost is not the reason +// for the caps - Marty owns the platform and treats these placements as free. 'use strict'; const https = require('https'); const { URL } = require('url'); const MIN_CREDITS = Number(process.env.DRIPOFFERS_MIN_CREDITS || 1000); // below this, not worth a listing -const MAX_CLICKS = Number(process.env.DRIPOFFERS_MAX_CLICKS || 10000); +const MAX_CLICKS = Number(process.env.DRIPOFFERS_MAX_CLICKS || 2500); const MIN_CLICKS = 500; // the platform's own floor const PACK_ID = Number(process.env.DRIPOFFERS_PACK_ID || 2); // 2 = a 10-second dwell const USER_ID = Number(process.env.DRIPOFFERS_USER_ID || 1); // the funding account diff --git a/qa/dripoffers-bridge.mjs b/qa/dripoffers-bridge.mjs index 6e722cc..0bdf8bd 100644 --- a/qa/dripoffers-bridge.mjs +++ b/qa/dripoffers-bridge.mjs @@ -22,7 +22,7 @@ t('tier 1+2 merges both lists', drip.countriesFor('1,2', tiers) === 'US,CA,GB,BR // worldwide would deliver the Tier 1 traffic its owner deliberately excluded t('tier 3 alone is skipped, not silently widened', drip.countriesFor('3', tiers) === null, String(drip.countriesFor('3', tiers))); -t('credits convert to clicks one for one', drip.clicksFor(4000) === 4000, String(drip.clicksFor(4000))); +t('credits convert to clicks one for one', drip.clicksFor(2000) === 2000, String(drip.clicksFor(2000))); t('one campaign cannot swallow the platform', drip.clicksFor(500000) === drip.MAX_CLICKS, String(drip.clicksFor(500000))); // the offerwall title a stranger actually reads (the platform's floor is 5 characters) const T = (c, u) => drip.titleFor(c, u || 'https://www.mailer.gold/x');