UNPKG

openrtb

Version:

A Javascript library which builds and validates OpenRTB objects

96 lines (79 loc) 2.26 kB
var util = require('util'); var RtbObject = require('../rtbObject'); var SeatbidBuilder = require('./seatbid').builder; var validator = require('../validator'); var bidResponseSchema = require('./schemas/bidResponse'); var ValidationError = require('../errors/ValidationError'); var removeEmptyValues = require('../utils').removeEmptyValues; var BidResponse = function(timestamp, status, bidderName, seatbid, id){ this.timestamp = timestamp; this.status = status; this.bidderName = bidderName; this.seatbid = seatbid; this.id = id; }; BidResponse.prototype = Object.create(RtbObject.prototype); BidResponse.prototype.forEachBid = function(cb) { this.seatbid.forEach(function(sb) { sb.bid.forEach(cb); }); }; var BidResponseBuilder = function(){}; BidResponseBuilder.prototype.timestamp = function(timestamp){ this._timestamp = timestamp; return this; }; BidResponseBuilder.prototype.id = function(id){ this._id = id; return this; }; BidResponseBuilder.prototype.status = function(status){ this._status = status; return this; }; BidResponseBuilder.prototype.bidderName = function(bidderName){ this._bidderName = bidderName; return this; }; BidResponseBuilder.prototype.seatbid = function(seatbid){ this._seatbid = seatbid.map(function(sb){ var builder = new SeatbidBuilder(); return builder .bid(sb.bid) .seat(sb.seat) .group(sb.group) .ext(sb.ext) .build(); }); return this; }; BidResponseBuilder.prototype.id = function(id){ this._id = id; return this; }; BidResponseBuilder.prototype.build = function() { var _seatbid = this._seatbid.map(function(sb) { return sb; }); this._seatbid = _seatbid; var bidResponse = new BidResponse( this._timestamp || new Date().toISOString(), this._status, this._bidderName, this._seatbid, this._id ); bidResponse = removeEmptyValues(bidResponse); var validationErrors = validator.validate(bidResponseSchema, bidResponse); if(validationErrors.length > 0){ throw new ValidationError({ message: "Validation failed", errors: validationErrors }); } return bidResponse; }; module.exports = { object: BidResponse, builder: BidResponseBuilder };