npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

adtrust

v0.0.4

Published

AdTrust is a versatile JavaScript library designed for efficient ad delivery with built-in viewability tracking, multi-format support, and ad block detection.

Readme

AdTrust

Versatile Ad Delivery Library

AdTrust is a lightweight yet powerful JavaScript library for ad delivery with comprehensive viewability tracking, multi-format support, and basic ad blocker detection.

Version

Features

  • Multiple Ad Formats: Support for banner, HTML, third-party tag, and video ads
  • IAB/MRC Compliant Viewability Tracking: Follows industry standards for viewable impressions
  • Lazy Loading: Efficient resource management with configurable thresholds
  • Auto-Refresh: Optional timed refresh for ads when they're in view
  • Ad Blocker Detection: Basic detection with customizable callbacks
  • Detailed Event Tracking: Comprehensive events for viewability metrics
  • Flexible Integration: Both declarative (HTML) and programmatic (JS) implementations

IAB/MRC Compliance

AdTrust implements IAB (Interactive Advertising Bureau) and MRC (Media Rating Council) viewability standards:

  • Display ads are considered viewable when 50% of pixels are in view for at least 1 second
  • Large display ads (>242,500 pixels) use 30% viewability threshold per IAB guidelines
  • Video ads require 50% of pixels in view for at least 2 seconds
  • Detailed quartile tracking (25%, 50%, 75%, 100%) for both viewability and video progress
  • Proper viewability measurement using IntersectionObserver API

Installation

Via CDN (recommended)

<script src="https://unpkg.com/adtrust"></script>

Via NPM

npm install adtrust

Then import in your project:

import AdTrust from 'adtrust';
// or
const AdTrust = require('adtrust');

Usage

AdTrust supports both declarative (HTML) and programmatic (JavaScript) implementations.

Declarative Implementation (HTML)

Add script tags with data attributes to define ads:

<!-- Banner Ad -->
<script
  data-type="banner"
  data-image-url="https://example.com/ad.jpg"
  data-click-url="https://example.com"
  data-width="300"
  data-height="250">
</script>

<!-- HTML Ad -->
<script
  data-type="html"
  data-html-content="<div>My custom HTML ad</div>"
  data-width="300"
  data-height="250">
</script>

<!-- Third-Party Tag Ad -->
<script
  data-type="tag"
  data-tag-url="https://adserver.example.com/tag.html"
  data-width="300"
  data-height="250">
</script>

<!-- Video Ad -->
<script
  data-type="video"
  data-video-url="https://example.com/ad.mp4"
  data-poster-url="https://example.com/poster.jpg"
  data-width="640"
  data-height="360"
  data-autoplay="true"
  data-muted="true">
</script>

Programmatic Implementation (JavaScript)

Create ads programmatically:

// Banner Ad
AdTrust.createAd({
  adType: "banner",
  imageUrl: "https://example.com/ad.jpg",
  clickUrl: "https://example.com",
  width: 300,
  height: 250
});

// HTML Ad
AdTrust.createAd({
  adType: "html",
  htmlContent: "<div>My custom HTML ad</div>",
  width: 300,
  height: 250
});

// Third-Party Tag Ad
AdTrust.createAd({
  adType: "tag",
  tagUrl: "https://adserver.example.com/tag.html",
  width: 300,
  height: 250
});

// Video Ad
AdTrust.createAd({
  adType: "video",
  videoUrl: "https://example.com/ad.mp4",
  posterUrl: "https://example.com/poster.jpg",
  width: 640,
  height: 360,
  autoplay: true,
  muted: true
});

Configuration Parameters

Common Parameters (All Ad Types)

| Parameter | Data Attribute | Type | Default | Description | |-----------|----------------|------|---------|-------------| | id | data-id | String | Auto-generated | Unique identifier for the ad | | containerId | data-container-id | String | null | ID of container element. If not provided, one will be created | | width | data-width | Number | null | Width of ad in pixels | | height | data-height | Number | null | Height of ad in pixels | | clickUrl | data-click-url | String | null | URL to navigate to when ad is clicked | | delay | data-delay | String/Number | "0" | Delay in ms before loading the ad. Can include units: "2s", "500" | | adType | data-type | String | "banner" | Type of ad: "banner", "html", "tag", "video" |

Viewability Parameters

| Parameter | Data Attribute | Type | Default | Description | |-----------|----------------|------|---------|-------------| | viewabilityThreshold | data-viewability-threshold | Number | 0.5 | Percentage of ad that must be visible (0.0-1.0) | | viewabilityTime | data-viewability-time | Number | 1000 | Time in ms ad must be visible to count as viewable | | heartbeatInterval | data-heartbeat-interval | Number | 250 | Interval in ms for checking viewability | | lazyLoadThreshold | data-lazy-load-threshold | Number | 1 | Screen heights away from viewport to trigger lazy loading | | refreshInterval | data-refresh-interval | Number | 30000 | Time in ms between ad refreshes if enabled | | enableRefresh | data-enable-refresh | Boolean | false | Whether to automatically refresh the ad | | logViewabilityEvents | data-log-viewability | Boolean | false | Whether to log viewability events to console | | reportEndpoint | data-report-endpoint | String | null | URL to send viewability beacons to |

Global Configuration

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | logErrors | Boolean | true | Log errors to console | | detectAdBlocker | Boolean | true | Detect ad blockers on initialization | | adBlockerDetectedCallback | Function | null | Function to call if ad blocker is detected | | onErrorCallback | Function | null | Function to call on errors | | debug | Boolean | false | Enable debug mode with verbose logging | | autoInit | Boolean | true | Automatically initialize ads from script tags |

Banner Ad Parameters

| Parameter | Data Attribute | Type | Required | Description | |-----------|----------------|------|----------|-------------| | imageUrl | data-image-url | String | Yes | URL of the image to display | | imageObjectFit | data-image-object-fit | String | No | CSS object-fit property for the image (cover, contain, etc.) | | imageAltText | data-image-alt-text | String | No | Alt text for the image for accessibility |

HTML Ad Parameters

| Parameter | Data Attribute | Type | Required | Description | |-----------|----------------|------|----------|-------------| | htmlContent | data-html-content | String | Yes* | HTML content to display (or use template) | | htmlTemplateId | data-html-template-id | String | Yes | ID of script tag containing HTML template (*or use content) | | useSandbox | data-use-sandbox | Boolean | No (true) | Whether to use iframe sandbox for security |

Third-Party Tag Ad Parameters

| Parameter | Data Attribute | Type | Required | Description | |-----------|----------------|------|----------|-------------| | tagUrl | data-tag-url | String | Yes | URL of the third-party ad tag | | useSandbox | data-use-sandbox | Boolean | No (true) | Whether to use iframe sandbox for security |

Video Ad Parameters

| Parameter | Data Attribute | Type | Required | Description | |-----------|----------------|------|----------|-------------| | videoUrl | data-video-url | String | Yes | URL of the video to play | | posterUrl | data-poster-url | String | No | URL of the poster image to show before play | | autoplay | data-autoplay | Boolean | No (false) | Whether to autoplay the video | | controls | data-controls | Boolean | No (true) | Whether to show video controls | | muted | data-muted | Boolean | No (true) | Whether to mute the video | | loop | data-loop | Boolean | No (false) | Whether to loop the video |

API Reference

Main Methods

// Create any type of ad
const adInstance = AdTrust.createAd(options);

// Initialize ads from script tags in the document
AdTrust.initFromTag();

// Initialize a specific script tag by selector
AdTrust.initSpecificTag('#my-ad-script');

// Get all ad instances
const allAds = AdTrust.getAdInstances();

// Get a specific ad by ID
const myAd = AdTrust.getAdById('my-ad-id');

// Load a delayed ad immediately
AdTrust.loadDelayedAdNow('my-delayed-ad-id');

// Load all delayed ads immediately
AdTrust.loadAllDelayed();

// Get aggregated metrics for all ads
const metrics = AdTrust.getAggregateMetrics();

// Destroy all ad instances
AdTrust.destroyAll();

// Set global configuration
AdTrust.setGlobalConfig({
  viewabilityThreshold: 0.6,
  refreshInterval: 60000,
  enableRefresh: true
});

// Enable/disable debug mode
AdTrust.setDebugMode(true);

Ad Instance Methods

// Load ad content (typically happens automatically)
adInstance.loadContent();

// Refresh the ad
adInstance.refresh();

// Get viewability metrics
const metrics = adInstance.getViewabilityMetrics();

// For video ads, get video-specific metrics
const videoMetrics = adInstance.getVideoMetrics();

// Destroy the ad instance
adInstance.destroy();

Events

AdTrust dispatches custom events on ad elements, which you can listen for:

document.addEventListener('adTrust:viewableImpression', function(e) {
  console.log('Ad viewable:', e.detail);
});

Available events:

| Event | Description | |-------|-------------| | adTrust:loaded | Ad content has loaded | | adTrust:loadError | Error loading ad content | | adTrust:delayComplete | Delay timer completed | | adTrust:viewableStart | Ad began to be viewable | | adTrust:viewableEnd | Ad is no longer viewable | | adTrust:viewableImpression | Ad has been viewable for required time | | adTrust:viewQuartile | Ad reached viewability quartile (25%, 50%, 75%, 100%) | | adTrust:click | Ad was clicked | | adTrust:videoReady | Video is ready to play | | adTrust:videoStart | Video started playing for the first time | | adTrust:videoPlay | Video started or resumed playing | | adTrust:videoPause | Video was paused | | adTrust:videoQuartile | Video reached playback quartile (25%, 50%, 75%) | | adTrust:videoComplete | Video completed playback | | adTrust:videoError | Error with video playback |

Ad Blocker Detection

AdTrust includes basic ad blocker detection using a "bait" method:

// Set custom callback
AdTrust.setGlobalConfig({
  adBlockerDetectedCallback: function() {
    console.log('Ad blocker detected!');
    // Display alternative content or messaging
  }
});

// Check status in metrics
const metrics = AdTrust.getAggregateMetrics();
if (metrics.isAdBlockerSuspected) {
  // Handle ad blocker presence
}

Advanced Usage Examples

Using HTML Templates

<!-- Define template -->
<script id="my-html-ad" type="text/html">
  <div class="custom-ad">
    <h3>Special Offer!</h3>
    <p>Limited time only</p>
    <button>Learn More</button>
  </div>
</script>

<!-- Reference template in ad -->
<script data-type="html" data-html-template-id="my-html-ad"></script>

Global Configuration

// Set global configuration for all ads
AdTrust.setGlobalConfig({
  viewabilityThreshold: 0.7,
  refreshInterval: 60000,
  enableRefresh: true,
  logViewabilityEvents: true,
  reportEndpoint: 'https://analytics.example.com/beacons',
  adBlockerDetectedCallback: function() {
    console.log('Ad blocker detected');
  }
});

Custom Container Placement

<!-- Define a container -->
<div id="ad-container"></div>

<!-- Reference container in ad -->
<script data-type="banner"
  data-container-id="ad-container"
  data-image-url="https://example.com/ad.jpg">
</script>

YouTube Video Support

AdTrust supports YouTube videos in video ads:

AdTrust.createAd({
  adType: "video",
  videoUrl: "https://www.youtube.com/watch?v=VIDEO_ID",
  width: 640,
  height: 360,
  autoplay: true,
  muted: true
});

Browser Compatibility

AdTrust is compatible with all modern browsers:

  • Chrome 60+
  • Firefox 55+
  • Safari 12+
  • Edge 16+
  • Opera 47+

Some features may require polyfills for older browsers:

  • IntersectionObserver
  • Custom Events
  • Promises

License

ISC License

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.