function getEntries(options, wrapper = {items:[]} ) {
let { url, assign, maxPages, page, from, till, handle, pause, backoff = 0, ...rest } = options;
let base = new URL(url);
page = page ?? 1;
from = from ?? parseInt(new Date(Date.now()).getTime()/1000);
base.searchParams.set('todate', from );
url = base.toString();
return Promises.delay(pause + (backoff * 1010)).then (()=>
new Promise(keep => fetch(url).then(d=>d.json()).then(d=>keep(d.data))))
.then(api => {
wrapper = {
site : options?.site,
quota : api.quota_remaining,
items : [ ...wrapper.items,...api.items ] };
console.log(api.quota_remaining,page);
from = new Date((api.items.at(-1)?.creation_date || from)*1000);
from.setDate(from.getDate()-15);
from = from.getTime()/1000;
if ( assign ) { assign(wrapper) }
if ( handle ) { handle(wrapper) }
return page < maxPages
? getEntries({...options , from, page: page + 1, backoff: api.backoff ?? 0 } , wrapper )
: wrapper;
})
}