• 0 Posts
  • 11 Comments
Joined 2 years ago
cake
Cake day: July 2nd, 2023

help-circle


  • Here you go, from the repo:

      const visitAd = function (ad) {
        function timeoutError(xhr) {
          return onVisitError.call(xhr, {
            type: 'timeout'
          });
        }
    
        const url = ad && ad.targetUrl, now = markActivity();
    
        // tell menu/vault we have a new attempt
        broadcast({
          what: 'adAttempt',
          ad: ad
        });
    
        if (xhr) {
    
          if (xhr.delegate.attemptedTs) {
    
            const elapsed = (now - xhr.delegate.attemptedTs);
    
            // TODO: why does this happen... a redirect?
            warn('[TRYING] Attempt to reuse xhr from ' + elapsed + " ms ago");
    
            if (elapsed > visitTimeout)
              timeoutError();
          }
          else {
    
            warn('[TRYING] Attempt to reuse xhr with no attemptedTs!!', xhr);
          }
        }
    
        ad.attempts++;
        ad.attemptedTs = now;
    
        if (!validateTarget(ad)) return deleteAd(ad);
    
        return sendXhr(ad);
        // return openAdInNewTab(ad);
        // return popUnderAd(ad)
      };
    
      const sendXhr = function (ad) {
    
        // if we've parsed an obfuscated target, use it
        const target = ad.parsedTargetUrl || ad.targetUrl;
    
        log('[TRYING] ' + adinfo(ad), ad.targetUrl);
    
        xhr = new XMLHttpRequest();
    
        try {
          xhr.open('get', target, true);
          xhr.withCredentials = true;
          xhr.delegate = ad;
          xhr.timeout = visitTimeout;
          xhr.onload = onVisitResponse;
          xhr.onerror = onVisitError;
          xhr.ontimeout = onVisitError;
          xhr.responseType = ''; // 'document'?;
          xhr.send();
        } catch (e) {
          onVisitError.call(xhr, e);
        }
      }
    
      const onVisitResponse = function () {
    
        this.onload = this.onerror = this.ontimeout = null;
    
        markActivity();
    
        const ad = this.delegate;
    
        if (!ad) {
    
          return err('Request received without Ad: ' + this.responseURL);
        }
    
        if (!ad.id) {
    
          return warn("Visit response from deleted ad! ", ad);
        }
    
        ad.attemptedTs = 0; // reset as visit no longer in progress
    
        const status = this.status || 200, html = this.responseText;
    
        if (failAllVisits || status < 200 || status >= 300) {
          return onVisitError.call(this, {
            status: status,
            responseText: html
          });
        }
    
        try {
    
          if (!isFacebookExternal(this, ad)) {
    
            updateAdOnSuccess(this, ad, parseTitle(this));
          }
    
        } catch (e) {
    
          warn(e.message);
        }
    
        xhr = null; // end the visit
      };
    

    That’s pretty much it! Let me know if it doesn’t make sense, I can annotate it






  • I did the same with mine – prepared for the worst, but pleasantly surprised:

    WHAT IS THE FILTER PAPER MADE OF THAT YOU USE IN YOUR TEA BAGS?

    The filter paper used for Yamamotoyama tea bags is made from 100% cellulose fibers (wood). Test results conclude that chlorine dioxide is not present in our tea bag filter paper. The filter paper is not coated with the compound epichlorohydrin, and does not contain any free epichlorohydrin. Yamamotoyama tea bag filter paper is machine folded and pressed, therefore no glue is needed or used. Our teabags are completely compostable.