Skip to content

Commit

Permalink
Smartyads Analytics Adapter : initial release (#11397)
Browse files Browse the repository at this point in the history
* Smartyads analytics adapter setup

* add tests and doc

---------

Co-authored-by: vrishko <[email protected]>
  • Loading branch information
rishko00 and vrishko committed Jun 12, 2024
1 parent 12e2e1c commit 236a8ad
Show file tree
Hide file tree
Showing 3 changed files with 585 additions and 0 deletions.
133 changes: 133 additions & 0 deletions modules/smartyadsAnalyticsAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
import adapterManager from '../src/adapterManager.js';
import { EVENTS } from '../src/constants.js';
import { ajax } from '../src/ajax.js';

const {
AUCTION_INIT,
AUCTION_END,
BID_WON,
BID_TIMEOUT,
BIDDER_ERROR,
BID_REJECTED,
BID_REQUESTED,
AD_RENDER_FAILED,
AD_RENDER_SUCCEEDED,
AUCTION_TIMEOUT
} = EVENTS;

const URL = 'https://ps.itdsmr.com';
const ANALYTICS_TYPE = 'endpoint';
const BIDDER_CODE = 'smartyads';
const GVLID = 534;

let smartyParams = {};

let smartyadsAdapter = Object.assign({},
adapter({
url: URL,
analyticsType: ANALYTICS_TYPE,
}),
{
track({ eventType, args }) {
switch (eventType) {
case AUCTION_INIT:
case AUCTION_TIMEOUT:
case AUCTION_END:
auctionHandler(eventType, args);
break;
case BID_REQUESTED:
if (args.bidderCode === BIDDER_CODE) {
for (const bid of args.bids) {
const bidParams = bid.params?.length ? bid.params[0] : bid.params;
smartyParams[bid.bidId] = bidParams;
}
};
break;
case BID_WON:
case BID_TIMEOUT:
case BID_REJECTED:
bidHandler(eventType, args);
break;
case BIDDER_ERROR:
onBidderError(args);
break;
case AD_RENDER_FAILED:
case AD_RENDER_SUCCEEDED:
onAdRender(eventType, args);
break;
default:
break;
}
}
}
);

const sendDataToServer = (data) => {
ajax(URL, () => {}, JSON.stringify(data));
}

const auctionHandler = (eventType, data) => {
const auctionData = {
auctionId: data.auctionId,
status: eventType,
timeout: data.timeout,
metrics: data.metrics,
bidderRequests: data.bidderRequests?.map(bidderRequest => {
delete bidderRequest.gdprConsent;
delete bidderRequest.refererInfo;
return bidderRequest;
}).filter(request => request.bidderCode === BIDDER_CODE),
}

sendDataToServer({ eventType, auctionData });
}

const bidHandler = (eventType, bid) => {
let bids = bid.length ? bid : [ bid ];

for (const bidObj of bids) {
let bidToSend;

if (bidObj.bidderCode != BIDDER_CODE) {
if (eventType === BID_WON) {
bidToSend = {
cpm: bidObj.cpm,
auctionId: bidObj.auctionId
};
} else continue;
}

bidToSend = bidObj;

if (eventType === BID_REJECTED) {
bidToSend.params = smartyParams[bid.requestId];
}

sendDataToServer({ eventType, bid: bidToSend });
}
}

const onBidderError = (data) => {
sendDataToServer({
eventType: BIDDER_ERROR,
error: data.error,
bidderRequests: data?.bidderRequests?.length
? data.bidderRequests.filter(request => request.bidderCode === BIDDER_CODE)
: [ data.bidderRequest ]
});
}

const onAdRender = (eventType, data) => {
if (data?.bid?.bidderCode === BIDDER_CODE) {
sendDataToServer({ eventType, renderData: data });
}
}

adapterManager.registerAnalyticsAdapter({
adapter: smartyadsAdapter,
code: BIDDER_CODE,
gvlid: GVLID
})

export default smartyadsAdapter;
11 changes: 11 additions & 0 deletions modules/smartyadsAnalyticsAdapter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#### Description

Module that enables SmartyAds analytics

### Configuration

```javascript
pbjs.enableAnalytics({
provider: 'smartyads'
});
```
Loading

0 comments on commit 236a8ad

Please sign in to comment.