prebid/Prebid.js

View on GitHub
modules/rakutenBidAdapter/index.js

Summary

Maintainability
A
2 hrs
Test Coverage
import { registerBidder } from '../../src/adapters/bidderFactory.js';
import { BANNER } from '../../src/mediaTypes.js';
import { config } from '../../src/config.js';
const BIDDER_CODE = 'rakuten';
const ENDPOINT = 'https://s-bid.rmp.rakuten.com/h';
export const spec = {
  code: BIDDER_CODE,
  isBidRequestValid: bid => !!bid.params.adSpotId,
  buildRequests: (validBidRequests, bidderRequest) => {
    const bidRequests = [];
    validBidRequests.forEach(bid => {
      var _a, _b;
      const params = bid.params;
      bidRequests.push({
        method: 'GET',
        url: config.getConfig('rakuten.endpoint') || ENDPOINT,
        data: {
          bi: bid.bidId,
          t: params.adSpotId,
          s: document.location.protocol,
          ua: navigator.userAgent,
          l: navigator.browserLanguage ||
                        navigator.language,
          d: document.domain,
          // TODO: what are 'tp' and 'pp'?
          tp: bidderRequest.refererInfo.stack[0] || window.location.href,
          pp: bidderRequest.refererInfo.topmostLocation,
          gdpr: ((_a = bidderRequest.gdprConsent) === null || _a === void 0 ? void 0 : _a.gdprApplies) ? 1 : 0,
          ...((_b = bidderRequest.gdprConsent) === null || _b === void 0 ? void 0 : _b.consentString) && {
            cd: bidderRequest.gdprConsent.consentString
          },
          ...bidderRequest.uspConsent && {
            ccpa: bidderRequest.uspConsent
          }
        }
      });
    });
    return bidRequests;
  },
  interpretResponse: (response, request) => {
    const sb = response.body;
    const bidResponses = [];
    if (sb.cpm && sb.ad) {
      bidResponses.push({
        requestId: sb.bid_id,
        cpm: sb.cpm,
        width: sb.width || 0,
        height: sb.height || 0,
        creativeId: sb.creative_id || 0,
        dealId: sb.deal_id || '',
        currency: sb.currency || 'USD',
        netRevenue: (typeof sb.net_revenue === 'undefined') ? true : !!sb.net_revenue,
        mediaType: BANNER,
        ttl: sb.ttl,
        ad: sb.ad
      });
    }
    return bidResponses;
  },
  getUserSyncs: function (syncOptions, serverResponses) {
    const syncs = [];
    if (syncOptions.pixelEnabled && serverResponses[0].body !== undefined) {
      const bidResponseObj = serverResponses[0].body;
      if (!bidResponseObj) {
        return [];
      }
      if (bidResponseObj.sync_urls && bidResponseObj.sync_urls.length > 0) {
        bidResponseObj.sync_urls.forEach(syncUrl => {
          if (syncUrl && syncUrl !== 'null' && syncUrl.length > 0) {
            syncs.push({
              type: 'image',
              url: syncUrl
            });
          }
        });
      }
    }
    return syncs;
  }
};
registerBidder(spec);