sovads-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,134 @@
1
+ # @sovads/sdk
2
+
3
+ SovAds SDK for publisher integration - A modular ad network SDK with banner, popup, and sidebar components.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @sovads/sdk
9
+ # or
10
+ pnpm add @sovads/sdk
11
+ # or
12
+ yarn add @sovads/sdk
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Basic Setup
18
+
19
+ ```javascript
20
+ import { SovAds, Banner, Popup, Sidebar } from '@sovads/sdk'
21
+
22
+ // Initialize SDK
23
+ const sovads = new SovAds({
24
+ apiUrl: 'https://ads.sovseas.xyz', // Optional, defaults to production URL
25
+ debug: false, // Enable debug logging
26
+ siteId: 'your-site-id', // Optional, will auto-detect if not provided
27
+ })
28
+
29
+ // Banner Ad
30
+ const banner = new Banner(sovads, 'banner-container')
31
+ await banner.render()
32
+
33
+ // Popup Ad
34
+ const popup = new Popup(sovads)
35
+ await popup.show() // Shows after 3 seconds by default
36
+
37
+ // Sidebar Ad
38
+ const sidebar = new Sidebar(sovads, 'sidebar-container')
39
+ await sidebar.render()
40
+ ```
41
+
42
+ ### HTML Example
43
+
44
+ ```html
45
+ <!DOCTYPE html>
46
+ <html>
47
+ <head>
48
+ <title>My Site with SovAds</title>
49
+ </head>
50
+ <body>
51
+ <h1>Welcome to My Site</h1>
52
+
53
+ <!-- Banner Ad Container -->
54
+ <div id="banner-container"></div>
55
+
56
+ <!-- Sidebar Ad Container -->
57
+ <div id="sidebar-container"></div>
58
+
59
+ <script type="module">
60
+ import { SovAds, Banner, Sidebar } from '@sovads/sdk'
61
+
62
+ const sovads = new SovAds({ debug: true })
63
+ const banner = new Banner(sovads, 'banner-container')
64
+ const sidebar = new Sidebar(sovads, 'sidebar-container')
65
+
66
+ banner.render()
67
+ sidebar.render()
68
+ </script>
69
+ </body>
70
+ </html>
71
+ ```
72
+
73
+ ## API Reference
74
+
75
+ ### SovAds
76
+
77
+ Main SDK class for initialization and configuration.
78
+
79
+ #### Constructor
80
+
81
+ ```typescript
82
+ new SovAds(config?: SovAdsConfig)
83
+ ```
84
+
85
+ #### Config Options
86
+
87
+ - `apiUrl?: string` - API endpoint URL (default: `https://ads.sovseas.xyz`)
88
+ - `debug?: boolean` - Enable debug logging (default: `false`)
89
+ - `siteId?: string` - Site ID (optional, will auto-detect)
90
+ - `consumerId?: string` - Consumer ID for targeting specific advertisers
91
+
92
+ ### Banner
93
+
94
+ Banner ad component.
95
+
96
+ ```typescript
97
+ const banner = new Banner(sovads: SovAds, containerId: string)
98
+ await banner.render(consumerId?: string)
99
+ ```
100
+
101
+ ### Popup
102
+
103
+ Popup ad component.
104
+
105
+ ```typescript
106
+ const popup = new Popup(sovads: SovAds)
107
+ await popup.show(consumerId?: string, delay?: number)
108
+ popup.hide()
109
+ ```
110
+
111
+ ### Sidebar
112
+
113
+ Sidebar ad component.
114
+
115
+ ```typescript
116
+ const sidebar = new Sidebar(sovads: SovAds, containerId: string)
117
+ await sidebar.render(consumerId?: string)
118
+ ```
119
+
120
+ ## Features
121
+
122
+ - ✅ Automatic site detection
123
+ - ✅ Impression and click tracking
124
+ - ✅ Render verification with IntersectionObserver
125
+ - ✅ Image load error handling
126
+ - ✅ Network retry logic
127
+ - ✅ CORS support
128
+ - ✅ TypeScript support
129
+ - ✅ Debug logging
130
+
131
+ ## License
132
+
133
+ MIT
134
+
@@ -0,0 +1,110 @@
1
+ export interface SovAdsConfig {
2
+ siteId?: string;
3
+ apiUrl?: string;
4
+ debug?: boolean;
5
+ consumerId?: string;
6
+ }
7
+ export interface AdComponent {
8
+ id: string;
9
+ campaignId: string;
10
+ bannerUrl: string;
11
+ targetUrl: string;
12
+ description: string;
13
+ consumerId?: string;
14
+ }
15
+ declare class SovAds {
16
+ protected config: SovAdsConfig;
17
+ private fingerprint;
18
+ private components;
19
+ private siteId;
20
+ private renderObservers;
21
+ private debugLoggingEnabled;
22
+ constructor(config?: SovAdsConfig);
23
+ private generateFingerprint;
24
+ private detectSiteId;
25
+ /**
26
+ * Setup IntersectionObserver to verify ad is actually rendered and visible
27
+ * This helps with fraud prevention and accurate impression tracking
28
+ * Falls back to manual visibility check for older browsers
29
+ */
30
+ setupRenderObserver(element: HTMLElement, adId: string, callback: (isVisible: boolean) => void): void;
31
+ /**
32
+ * Get client metadata for tracking
33
+ */
34
+ private getClientMetadata;
35
+ /**
36
+ * Validate URL format
37
+ */
38
+ private isValidUrl;
39
+ /**
40
+ * Fetch with retry logic
41
+ */
42
+ private fetchWithRetry;
43
+ loadAd(consumerId?: string): Promise<AdComponent | null>;
44
+ /**
45
+ * Track event with retry logic (internal helper)
46
+ */
47
+ private trackEventWithRetry;
48
+ /**
49
+ * Track event with enhanced metadata using Beacon API
50
+ * Includes render verification, IP (collected server-side), and site ID validation
51
+ */
52
+ private trackEvent;
53
+ addComponent(componentId: string, component: any): void;
54
+ getComponent(componentId: string): any;
55
+ removeComponent(componentId: string): void;
56
+ _trackEvent(type: 'IMPRESSION' | 'CLICK', adId: string, campaignId: string, renderInfo?: {
57
+ rendered: boolean;
58
+ viewportVisible: boolean;
59
+ renderTime: number;
60
+ }): Promise<void>;
61
+ /**
62
+ * Get config (for components to access debug mode)
63
+ */
64
+ getConfig(): SovAdsConfig;
65
+ /**
66
+ * Log interaction (public method for components)
67
+ */
68
+ logInteraction(type: string, data: any): Promise<void>;
69
+ /**
70
+ * Log debug event to server
71
+ */
72
+ private logDebug;
73
+ /**
74
+ * Clean up observers when SDK is destroyed
75
+ */
76
+ destroy(): void;
77
+ }
78
+ export declare class Banner {
79
+ private sovads;
80
+ private containerId;
81
+ private currentAd;
82
+ private renderStartTime;
83
+ private hasTrackedImpression;
84
+ private isRendering;
85
+ constructor(sovads: SovAds, containerId: string);
86
+ render(consumerId?: string): Promise<void>;
87
+ }
88
+ export declare class Popup {
89
+ private sovads;
90
+ private currentAd;
91
+ private popupElement;
92
+ private isShowing;
93
+ constructor(sovads: SovAds);
94
+ show(consumerId?: string, delay?: number): Promise<void>;
95
+ private renderPopup;
96
+ hide(): void;
97
+ }
98
+ export declare class Sidebar {
99
+ private sovads;
100
+ private containerId;
101
+ private currentAd;
102
+ private renderStartTime;
103
+ private hasTrackedImpression;
104
+ private isRendering;
105
+ constructor(sovads: SovAds, containerId: string);
106
+ render(consumerId?: string): Promise<void>;
107
+ }
108
+ export { SovAds };
109
+ export default SovAds;
110
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,903 @@
1
+ // SovAds SDK - Modular Ad Network Integration
2
+ // Usage: import { SovAds, Banner, Popup, Sidebar } from '@sovads/sdk'
3
+ class SovAds {
4
+ constructor(config = {}) {
5
+ this.components = new Map();
6
+ this.siteId = null;
7
+ this.renderObservers = new Map();
8
+ this.debugLoggingEnabled = true;
9
+ this.config = {
10
+ apiUrl: typeof window !== 'undefined' && window.location.hostname === 'localhost'
11
+ ? 'http://localhost:3000'
12
+ : 'https://ads.sovseas.xyz',
13
+ debug: false,
14
+ ...config
15
+ };
16
+ this.fingerprint = this.generateFingerprint();
17
+ if (this.config.debug) {
18
+ console.log('SovAds SDK initialized:', this.config);
19
+ }
20
+ }
21
+ generateFingerprint() {
22
+ const canvas = document.createElement('canvas');
23
+ const ctx = canvas.getContext('2d');
24
+ ctx?.fillText('SovAds fingerprint', 10, 10);
25
+ const fingerprint = [
26
+ navigator.userAgent,
27
+ navigator.language,
28
+ screen.width + 'x' + screen.height,
29
+ new Date().getTimezoneOffset(),
30
+ canvas.toDataURL()
31
+ ].join('|');
32
+ return btoa(fingerprint).substring(0, 16);
33
+ }
34
+ async detectSiteId() {
35
+ if (this.siteId) {
36
+ return this.siteId;
37
+ }
38
+ if (this.config.siteId) {
39
+ this.siteId = this.config.siteId;
40
+ if (this.config.debug) {
41
+ console.log('Using configured site ID:', this.siteId);
42
+ }
43
+ return this.siteId;
44
+ }
45
+ try {
46
+ // Send beacon to detect site ID based on domain
47
+ const domain = window.location.hostname;
48
+ const payload = {
49
+ domain,
50
+ fingerprint: this.fingerprint,
51
+ userAgent: navigator.userAgent,
52
+ pageUrl: window.location.href,
53
+ timestamp: Date.now()
54
+ };
55
+ const startTime = Date.now();
56
+ const endpoint = `${this.config.apiUrl}/api/sites/detect`;
57
+ // Send detection request using fetch (beacon doesn't support response)
58
+ const response = await this.fetchWithRetry(endpoint, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json'
62
+ },
63
+ body: JSON.stringify(payload)
64
+ });
65
+ const duration = Date.now() - startTime;
66
+ // Log SDK request
67
+ await this.logDebug('SDK_REQUEST', {
68
+ type: 'SITE_DETECT',
69
+ endpoint: '/api/sites/detect',
70
+ method: 'POST',
71
+ domain,
72
+ pageUrl: window.location.href,
73
+ userAgent: navigator.userAgent,
74
+ fingerprint: this.fingerprint,
75
+ requestBody: payload,
76
+ responseStatus: response.status,
77
+ duration,
78
+ });
79
+ if (response.ok) {
80
+ const data = await response.json();
81
+ if (data.siteId) {
82
+ this.siteId = String(data.siteId);
83
+ if (this.config.debug) {
84
+ console.log('Site ID detected from API:', this.siteId, data);
85
+ }
86
+ return this.siteId;
87
+ }
88
+ }
89
+ // Fallback: generate site ID from domain (for development only)
90
+ // In production, this should trigger registration flow
91
+ const isLocalhost = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1';
92
+ if (isLocalhost) {
93
+ this.siteId = `site_${btoa(domain).substring(0, 8)}`;
94
+ if (this.config.debug) {
95
+ console.log('Generated fallback site ID (dev mode):', this.siteId);
96
+ }
97
+ return this.siteId;
98
+ }
99
+ else {
100
+ // In production, use temp_ prefix to indicate unregistered site
101
+ this.siteId = `temp_${btoa(domain).substring(0, 8)}_${Date.now()}`;
102
+ if (this.config.debug) {
103
+ console.warn('Unregistered site detected, using temp site ID:', this.siteId);
104
+ }
105
+ return this.siteId;
106
+ }
107
+ }
108
+ catch (error) {
109
+ if (this.config.debug) {
110
+ console.error('Error detecting site ID:', error);
111
+ }
112
+ // Fallback: generate site ID from domain
113
+ const hostname = window.location.hostname;
114
+ const isLocalhost = hostname === 'localhost' || hostname === '127.0.0.1';
115
+ if (isLocalhost) {
116
+ this.siteId = `site_${btoa(hostname).substring(0, 8)}`;
117
+ }
118
+ else {
119
+ this.siteId = `temp_${btoa(hostname).substring(0, 8)}_${Date.now()}`;
120
+ }
121
+ return this.siteId;
122
+ }
123
+ }
124
+ /**
125
+ * Setup IntersectionObserver to verify ad is actually rendered and visible
126
+ * This helps with fraud prevention and accurate impression tracking
127
+ * Falls back to manual visibility check for older browsers
128
+ */
129
+ setupRenderObserver(element, adId, callback) {
130
+ // Clean up existing observer if any
131
+ const existingObserver = this.renderObservers.get(adId);
132
+ if (existingObserver) {
133
+ existingObserver.disconnect();
134
+ }
135
+ // Check if IntersectionObserver is supported
136
+ if (typeof IntersectionObserver !== 'undefined') {
137
+ const observer = new IntersectionObserver((entries) => {
138
+ entries.forEach((entry) => {
139
+ const isVisible = entry.isIntersecting && entry.intersectionRatio > 0.5;
140
+ callback(isVisible);
141
+ if (this.config.debug) {
142
+ console.log(`Ad ${adId} visibility:`, {
143
+ isIntersecting: entry.isIntersecting,
144
+ intersectionRatio: entry.intersectionRatio,
145
+ isVisible
146
+ });
147
+ }
148
+ });
149
+ }, {
150
+ threshold: [0.5], // At least 50% visible
151
+ rootMargin: '0px'
152
+ });
153
+ observer.observe(element);
154
+ this.renderObservers.set(adId, observer);
155
+ }
156
+ else {
157
+ // Fallback for older browsers: manual visibility check
158
+ if (this.config.debug) {
159
+ console.warn(`IntersectionObserver not supported, using fallback for ad ${adId}`);
160
+ }
161
+ const checkVisibility = () => {
162
+ const rect = element.getBoundingClientRect();
163
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
164
+ const windowWidth = window.innerWidth || document.documentElement.clientWidth;
165
+ // Check if element is in viewport and at least 50% visible
166
+ const isInViewport = (rect.top < windowHeight &&
167
+ rect.bottom > 0 &&
168
+ rect.left < windowWidth &&
169
+ rect.right > 0);
170
+ if (isInViewport) {
171
+ const visibleHeight = Math.min(rect.bottom, windowHeight) - Math.max(rect.top, 0);
172
+ const visibleWidth = Math.min(rect.right, windowWidth) - Math.max(rect.left, 0);
173
+ const visibleArea = visibleHeight * visibleWidth;
174
+ const totalArea = rect.height * rect.width;
175
+ const intersectionRatio = totalArea > 0 ? visibleArea / totalArea : 0;
176
+ const isVisible = intersectionRatio >= 0.5;
177
+ callback(isVisible);
178
+ }
179
+ else {
180
+ callback(false);
181
+ }
182
+ };
183
+ // Check immediately and on scroll/resize
184
+ checkVisibility();
185
+ const scrollHandler = () => checkVisibility();
186
+ const resizeHandler = () => checkVisibility();
187
+ window.addEventListener('scroll', scrollHandler, { passive: true });
188
+ window.addEventListener('resize', resizeHandler, { passive: true });
189
+ // Store cleanup function
190
+ this.renderObservers.set(adId, {
191
+ disconnect: () => {
192
+ window.removeEventListener('scroll', scrollHandler);
193
+ window.removeEventListener('resize', resizeHandler);
194
+ }
195
+ });
196
+ }
197
+ }
198
+ /**
199
+ * Get client metadata for tracking
200
+ */
201
+ getClientMetadata() {
202
+ return {
203
+ pageUrl: window.location.href,
204
+ userAgent: navigator.userAgent,
205
+ language: navigator.language,
206
+ screenWidth: screen.width,
207
+ screenHeight: screen.height,
208
+ viewportWidth: window.innerWidth,
209
+ viewportHeight: window.innerHeight,
210
+ timezoneOffset: new Date().getTimezoneOffset(),
211
+ referrer: document.referrer || '',
212
+ timestamp: Date.now()
213
+ };
214
+ }
215
+ /**
216
+ * Validate URL format
217
+ */
218
+ isValidUrl(url) {
219
+ try {
220
+ const parsed = new URL(url);
221
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ }
227
+ /**
228
+ * Fetch with retry logic
229
+ */
230
+ async fetchWithRetry(url, options = {}, maxAttempts = 3) {
231
+ let lastError = null;
232
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
233
+ try {
234
+ const response = await fetch(url, options);
235
+ if (response.ok || attempt === maxAttempts) {
236
+ return response;
237
+ }
238
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
239
+ }
240
+ catch (error) {
241
+ lastError = error instanceof Error ? error : new Error(String(error));
242
+ if (attempt < maxAttempts) {
243
+ const delay = Math.pow(2, attempt - 1) * 100; // Exponential backoff
244
+ if (this.config.debug) {
245
+ console.warn(`Fetch attempt ${attempt} failed, retrying in ${delay}ms...`);
246
+ }
247
+ await new Promise(resolve => setTimeout(resolve, delay));
248
+ }
249
+ }
250
+ }
251
+ throw lastError || new Error('Fetch failed after retries');
252
+ }
253
+ async loadAd(consumerId) {
254
+ const startTime = Date.now();
255
+ try {
256
+ const siteId = await this.detectSiteId();
257
+ const params = new URLSearchParams({
258
+ siteId,
259
+ ...(consumerId && { consumerId })
260
+ });
261
+ const endpoint = `${this.config.apiUrl}/api/ads?${params}`;
262
+ const response = await this.fetchWithRetry(endpoint);
263
+ const duration = Date.now() - startTime;
264
+ // Log SDK request
265
+ await this.logDebug('SDK_REQUEST', {
266
+ type: 'AD_REQUEST',
267
+ endpoint: '/api/ads',
268
+ method: 'GET',
269
+ siteId,
270
+ domain: window.location.hostname,
271
+ pageUrl: window.location.href,
272
+ userAgent: navigator.userAgent,
273
+ fingerprint: this.fingerprint,
274
+ requestBody: { siteId, consumerId },
275
+ responseStatus: response.status,
276
+ duration,
277
+ });
278
+ if (!response.ok) {
279
+ throw new Error(`Failed to load ad: ${response.statusText}`);
280
+ }
281
+ const ad = await response.json();
282
+ // Validate ad data
283
+ if (!ad || !ad.bannerUrl || !ad.targetUrl) {
284
+ if (this.config.debug) {
285
+ console.error('Invalid ad data received:', ad);
286
+ }
287
+ return null;
288
+ }
289
+ // Validate URLs
290
+ if (!this.isValidUrl(ad.bannerUrl)) {
291
+ if (this.config.debug) {
292
+ console.error('Invalid bannerUrl:', ad.bannerUrl);
293
+ }
294
+ return null;
295
+ }
296
+ if (!this.isValidUrl(ad.targetUrl)) {
297
+ if (this.config.debug) {
298
+ console.error('Invalid targetUrl:', ad.targetUrl);
299
+ }
300
+ return null;
301
+ }
302
+ if (this.config.debug) {
303
+ console.log('Ad loaded:', ad);
304
+ }
305
+ // Log interaction
306
+ await this.logDebug('SDK_INTERACTION', {
307
+ type: 'AD_LOADED',
308
+ adId: ad.id,
309
+ campaignId: ad.campaignId,
310
+ siteId,
311
+ pageUrl: window.location.href,
312
+ });
313
+ return ad;
314
+ }
315
+ catch (error) {
316
+ const duration = Date.now() - startTime;
317
+ await this.logDebug('SDK_REQUEST', {
318
+ type: 'AD_REQUEST',
319
+ endpoint: '/api/ads',
320
+ method: 'GET',
321
+ siteId: this.siteId,
322
+ domain: window.location.hostname,
323
+ pageUrl: window.location.href,
324
+ userAgent: navigator.userAgent,
325
+ fingerprint: this.fingerprint,
326
+ error: error instanceof Error ? error.message : String(error),
327
+ duration,
328
+ });
329
+ if (this.config.debug) {
330
+ console.error('Error loading ad:', error);
331
+ }
332
+ return null;
333
+ }
334
+ }
335
+ /**
336
+ * Track event with retry logic (internal helper)
337
+ */
338
+ async trackEventWithRetry(type, adId, campaignId, renderInfo, attempt, maxAttempts = 3) {
339
+ try {
340
+ const siteId = await this.detectSiteId();
341
+ const metadata = this.getClientMetadata();
342
+ const payload = {
343
+ type,
344
+ campaignId,
345
+ adId,
346
+ siteId,
347
+ fingerprint: this.fingerprint,
348
+ consumerId: this.config.consumerId,
349
+ rendered: renderInfo?.rendered ?? true,
350
+ viewportVisible: renderInfo?.viewportVisible ?? false,
351
+ renderTime: renderInfo?.renderTime ?? Date.now(),
352
+ timestamp: metadata.timestamp,
353
+ pageUrl: metadata.pageUrl,
354
+ userAgent: metadata.userAgent
355
+ };
356
+ const webhookUrl = `${this.config.apiUrl}/api/webhook/beacon`;
357
+ const response = await fetch(webhookUrl, {
358
+ method: 'POST',
359
+ headers: {
360
+ 'Content-Type': 'application/json'
361
+ },
362
+ body: JSON.stringify(payload),
363
+ keepalive: true // Similar behavior to beacon
364
+ });
365
+ if (response.ok) {
366
+ if (this.config.debug) {
367
+ console.log(`SovAds: Tracked ${type} event via fetch (attempt ${attempt})`, payload);
368
+ }
369
+ }
370
+ else {
371
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
372
+ }
373
+ }
374
+ catch (error) {
375
+ if (attempt < maxAttempts) {
376
+ // Exponential backoff: 100ms, 200ms, 400ms
377
+ const delay = Math.pow(2, attempt - 1) * 100;
378
+ if (this.config.debug) {
379
+ console.warn(`SovAds: Retrying ${type} event (attempt ${attempt + 1}/${maxAttempts}) after ${delay}ms`);
380
+ }
381
+ await new Promise(resolve => setTimeout(resolve, delay));
382
+ return this.trackEventWithRetry(type, adId, campaignId, renderInfo, attempt + 1, maxAttempts);
383
+ }
384
+ else {
385
+ if (this.config.debug) {
386
+ console.error(`SovAds: Failed to track ${type} event after ${maxAttempts} attempts:`, error);
387
+ }
388
+ }
389
+ }
390
+ }
391
+ /**
392
+ * Track event with enhanced metadata using Beacon API
393
+ * Includes render verification, IP (collected server-side), and site ID validation
394
+ */
395
+ async trackEvent(type, adId, campaignId, renderInfo) {
396
+ try {
397
+ const siteId = await this.detectSiteId();
398
+ const metadata = this.getClientMetadata();
399
+ const payload = {
400
+ type,
401
+ campaignId,
402
+ adId,
403
+ siteId,
404
+ fingerprint: this.fingerprint,
405
+ consumerId: this.config.consumerId,
406
+ rendered: renderInfo?.rendered ?? true,
407
+ viewportVisible: renderInfo?.viewportVisible ?? false,
408
+ renderTime: renderInfo?.renderTime ?? Date.now(),
409
+ timestamp: metadata.timestamp,
410
+ pageUrl: metadata.pageUrl,
411
+ userAgent: metadata.userAgent
412
+ };
413
+ // Use sendBeacon for reliable delivery (better for tracking impressions)
414
+ // Beacon API ensures events are sent even if user navigates away
415
+ if (navigator.sendBeacon) {
416
+ const blob = new Blob([JSON.stringify(payload)], {
417
+ type: 'application/json'
418
+ });
419
+ // Send to dedicated webhook endpoint for beamer interactions
420
+ const webhookUrl = `${this.config.apiUrl}/api/webhook/beacon`;
421
+ const sent = navigator.sendBeacon(webhookUrl, blob);
422
+ if (!sent) {
423
+ // Beacon failed, fallback to fetch with retry
424
+ if (this.config.debug) {
425
+ console.warn(`SovAds: Beacon failed for ${type}, falling back to fetch`);
426
+ }
427
+ await this.trackEventWithRetry(type, adId, campaignId, renderInfo, 1);
428
+ }
429
+ else if (this.config.debug) {
430
+ console.log(`SovAds: Tracked ${type} event via beacon`, {
431
+ sent,
432
+ payload: { ...payload, fingerprint: payload.fingerprint.substring(0, 8) + '...' }
433
+ });
434
+ }
435
+ }
436
+ else {
437
+ // Fallback to fetch for older browsers
438
+ await this.trackEventWithRetry(type, adId, campaignId, renderInfo, 1);
439
+ }
440
+ }
441
+ catch (error) {
442
+ if (this.config.debug) {
443
+ console.error('Error tracking event:', error);
444
+ }
445
+ }
446
+ }
447
+ // Component management
448
+ addComponent(componentId, component) {
449
+ this.components.set(componentId, component);
450
+ }
451
+ getComponent(componentId) {
452
+ return this.components.get(componentId);
453
+ }
454
+ removeComponent(componentId) {
455
+ this.components.delete(componentId);
456
+ }
457
+ // Expose trackEvent for components (internal use only)
458
+ // Note: This is a workaround to access private method from components
459
+ // In production, consider making trackEvent protected or using a different pattern
460
+ _trackEvent(type, adId, campaignId, renderInfo) {
461
+ return this.trackEvent(type, adId, campaignId, renderInfo);
462
+ }
463
+ /**
464
+ * Get config (for components to access debug mode)
465
+ */
466
+ getConfig() {
467
+ return this.config;
468
+ }
469
+ /**
470
+ * Log interaction (public method for components)
471
+ */
472
+ async logInteraction(type, data) {
473
+ await this.logDebug('SDK_INTERACTION', {
474
+ type,
475
+ ...data,
476
+ siteId: this.siteId,
477
+ pageUrl: window.location.href,
478
+ });
479
+ }
480
+ /**
481
+ * Log debug event to server
482
+ */
483
+ async logDebug(type, data) {
484
+ if (!this.debugLoggingEnabled)
485
+ return;
486
+ try {
487
+ const logUrl = `${this.config.apiUrl}/api/debug/log`;
488
+ const payload = { type, data };
489
+ // Use sendBeacon for non-blocking logging
490
+ if (navigator.sendBeacon) {
491
+ const blob = new Blob([JSON.stringify(payload)], { type: 'application/json' });
492
+ navigator.sendBeacon(logUrl, blob);
493
+ }
494
+ else {
495
+ // Fallback to fetch (fire and forget)
496
+ fetch(logUrl, {
497
+ method: 'POST',
498
+ headers: { 'Content-Type': 'application/json' },
499
+ body: JSON.stringify(payload),
500
+ keepalive: true,
501
+ }).catch(() => {
502
+ // Silently fail - debug logging shouldn't break the app
503
+ });
504
+ }
505
+ }
506
+ catch (error) {
507
+ // Silently fail - debug logging shouldn't break the app
508
+ }
509
+ }
510
+ /**
511
+ * Clean up observers when SDK is destroyed
512
+ */
513
+ destroy() {
514
+ this.renderObservers.forEach((observer) => observer.disconnect());
515
+ this.renderObservers.clear();
516
+ }
517
+ }
518
+ // Banner Component
519
+ export class Banner {
520
+ constructor(sovads, containerId) {
521
+ this.currentAd = null;
522
+ this.renderStartTime = 0;
523
+ this.hasTrackedImpression = false;
524
+ this.isRendering = false;
525
+ this.sovads = sovads;
526
+ this.containerId = containerId;
527
+ }
528
+ async render(consumerId) {
529
+ // Prevent concurrent renders
530
+ if (this.isRendering) {
531
+ if (this.sovads.getConfig().debug) {
532
+ console.warn(`Banner render already in progress for ${this.containerId}`);
533
+ }
534
+ return;
535
+ }
536
+ this.isRendering = true;
537
+ try {
538
+ const container = document.getElementById(this.containerId);
539
+ if (!container) {
540
+ console.error(`Container with id "${this.containerId}" not found`);
541
+ this.isRendering = false;
542
+ return;
543
+ }
544
+ this.renderStartTime = Date.now();
545
+ this.currentAd = await this.sovads.loadAd(consumerId);
546
+ if (!this.currentAd) {
547
+ container.innerHTML = '<div class="sovads-no-ad">No ads available</div>';
548
+ this.isRendering = false;
549
+ return;
550
+ }
551
+ const adElement = document.createElement('div');
552
+ adElement.className = 'sovads-banner';
553
+ adElement.setAttribute('data-ad-id', this.currentAd.id);
554
+ adElement.style.cssText = `
555
+ border: 1px solid #333;
556
+ border-radius: 8px;
557
+ overflow: hidden;
558
+ cursor: pointer;
559
+ transition: transform 0.2s ease;
560
+ `;
561
+ const img = document.createElement('img');
562
+ img.src = this.currentAd.bannerUrl;
563
+ img.alt = this.currentAd.description;
564
+ img.style.cssText = 'width: 100%; height: auto; display: block;';
565
+ // Track when image loads (render verification)
566
+ img.onload = () => {
567
+ const renderTime = Date.now() - this.renderStartTime;
568
+ const renderInfo = {
569
+ rendered: true,
570
+ viewportVisible: false,
571
+ renderTime
572
+ };
573
+ // Setup IntersectionObserver to verify ad is visible
574
+ this.sovads.setupRenderObserver(adElement, this.currentAd.id, (isVisible) => {
575
+ renderInfo.viewportVisible = isVisible;
576
+ // Track impression only once when ad becomes visible
577
+ if (isVisible && !this.hasTrackedImpression) {
578
+ this.hasTrackedImpression = true;
579
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, renderInfo);
580
+ }
581
+ });
582
+ };
583
+ // Handle image load errors - still track impression if element is visible
584
+ img.onerror = () => {
585
+ if (this.sovads.getConfig().debug) {
586
+ console.warn(`Failed to load ad image: ${this.currentAd.bannerUrl}`);
587
+ }
588
+ // Still set up observer in case element becomes visible (for broken image tracking)
589
+ const renderInfo = {
590
+ rendered: false,
591
+ viewportVisible: false,
592
+ renderTime: Date.now() - this.renderStartTime
593
+ };
594
+ this.sovads.setupRenderObserver(adElement, this.currentAd.id, (isVisible) => {
595
+ renderInfo.viewportVisible = isVisible;
596
+ // Track impression even with broken image if visible
597
+ if (isVisible && !this.hasTrackedImpression) {
598
+ this.hasTrackedImpression = true;
599
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, renderInfo);
600
+ }
601
+ });
602
+ };
603
+ // Add click handler
604
+ adElement.addEventListener('click', () => {
605
+ this.sovads._trackEvent('CLICK', this.currentAd.id, this.currentAd.campaignId, {
606
+ rendered: true,
607
+ viewportVisible: true,
608
+ renderTime: Date.now() - this.renderStartTime
609
+ });
610
+ // Log interaction
611
+ this.sovads.logInteraction('CLICK', {
612
+ adId: this.currentAd.id,
613
+ campaignId: this.currentAd.campaignId,
614
+ elementType: 'BANNER',
615
+ metadata: { renderTime: Date.now() - this.renderStartTime },
616
+ });
617
+ window.open(this.currentAd.targetUrl, '_blank', 'noopener,noreferrer');
618
+ });
619
+ // Add hover effect
620
+ adElement.addEventListener('mouseenter', () => {
621
+ adElement.style.transform = 'scale(1.02)';
622
+ });
623
+ adElement.addEventListener('mouseleave', () => {
624
+ adElement.style.transform = 'scale(1)';
625
+ });
626
+ adElement.appendChild(img);
627
+ container.appendChild(adElement);
628
+ }
629
+ finally {
630
+ this.isRendering = false;
631
+ }
632
+ }
633
+ }
634
+ // Popup Component
635
+ export class Popup {
636
+ constructor(sovads) {
637
+ this.currentAd = null;
638
+ this.popupElement = null;
639
+ this.isShowing = false;
640
+ this.sovads = sovads;
641
+ }
642
+ async show(consumerId, delay = 3000) {
643
+ // Prevent concurrent shows
644
+ if (this.isShowing) {
645
+ if (this.sovads.getConfig().debug) {
646
+ console.warn('Popup show already in progress');
647
+ }
648
+ return;
649
+ }
650
+ this.isShowing = true;
651
+ this.currentAd = await this.sovads.loadAd(consumerId);
652
+ if (!this.currentAd) {
653
+ console.log('No popup ad available');
654
+ this.isShowing = false;
655
+ return;
656
+ }
657
+ // Show popup after delay
658
+ setTimeout(() => {
659
+ this.renderPopup();
660
+ this.isShowing = false;
661
+ }, delay);
662
+ }
663
+ renderPopup() {
664
+ if (!this.currentAd)
665
+ return;
666
+ // Track impression immediately when popup is rendered (not waiting for image load)
667
+ // This ensures impression is tracked even if user closes popup quickly
668
+ const renderStartTime = Date.now();
669
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, {
670
+ rendered: true,
671
+ viewportVisible: true,
672
+ renderTime: 0 // Will be updated when image loads
673
+ });
674
+ // Log interaction
675
+ this.sovads.logInteraction('IMPRESSION', {
676
+ adId: this.currentAd.id,
677
+ campaignId: this.currentAd.campaignId,
678
+ elementType: 'POPUP',
679
+ metadata: { renderTime: 0 },
680
+ });
681
+ // Create overlay
682
+ const overlay = document.createElement('div');
683
+ overlay.className = 'sovads-popup-overlay';
684
+ overlay.style.cssText = `
685
+ position: fixed;
686
+ top: 0;
687
+ left: 0;
688
+ width: 100%;
689
+ height: 100%;
690
+ background: rgba(0, 0, 0, 0.5);
691
+ z-index: 10000;
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: center;
695
+ `;
696
+ // Create popup
697
+ this.popupElement = document.createElement('div');
698
+ this.popupElement.style.cssText = `
699
+ background: white;
700
+ border-radius: 12px;
701
+ padding: 20px;
702
+ max-width: 400px;
703
+ position: relative;
704
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
705
+ `;
706
+ // Close button
707
+ const closeBtn = document.createElement('button');
708
+ closeBtn.innerHTML = '×';
709
+ closeBtn.style.cssText = `
710
+ position: absolute;
711
+ top: 10px;
712
+ right: 15px;
713
+ background: none;
714
+ border: none;
715
+ font-size: 24px;
716
+ cursor: pointer;
717
+ color: #666;
718
+ `;
719
+ closeBtn.addEventListener('click', () => {
720
+ this.hide();
721
+ });
722
+ // Ad image
723
+ const img = document.createElement('img');
724
+ img.src = this.currentAd.bannerUrl;
725
+ img.alt = this.currentAd.description;
726
+ img.style.cssText = 'width: 100%; height: auto; border-radius: 8px; cursor: pointer;';
727
+ // Image load tracking (impression already tracked above)
728
+ img.onload = () => {
729
+ const renderTime = Date.now() - renderStartTime;
730
+ if (this.sovads.getConfig().debug) {
731
+ console.log(`Popup ad image loaded in ${renderTime}ms`);
732
+ }
733
+ };
734
+ // Handle image load errors - still track impression for popup
735
+ img.onerror = () => {
736
+ if (this.sovads.getConfig().debug) {
737
+ console.warn(`Failed to load popup ad image: ${this.currentAd.bannerUrl}`);
738
+ }
739
+ // Popup is visible even if image fails, so track impression
740
+ const renderTime = Date.now() - renderStartTime;
741
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, {
742
+ rendered: false,
743
+ viewportVisible: true,
744
+ renderTime
745
+ });
746
+ };
747
+ img.addEventListener('click', () => {
748
+ this.sovads._trackEvent('CLICK', this.currentAd.id, this.currentAd.campaignId, {
749
+ rendered: true,
750
+ viewportVisible: true,
751
+ renderTime: Date.now() - renderStartTime
752
+ });
753
+ // Log interaction
754
+ this.sovads.logInteraction('CLICK', {
755
+ adId: this.currentAd.id,
756
+ campaignId: this.currentAd.campaignId,
757
+ elementType: 'POPUP',
758
+ metadata: { renderTime: Date.now() - renderStartTime },
759
+ });
760
+ window.open(this.currentAd.targetUrl, '_blank', 'noopener,noreferrer');
761
+ this.hide();
762
+ });
763
+ this.popupElement.appendChild(closeBtn);
764
+ this.popupElement.appendChild(img);
765
+ overlay.appendChild(this.popupElement);
766
+ document.body.appendChild(overlay);
767
+ // Auto close after 10 seconds
768
+ setTimeout(() => {
769
+ this.hide();
770
+ }, 10000);
771
+ }
772
+ hide() {
773
+ const overlay = document.querySelector('.sovads-popup-overlay');
774
+ if (overlay) {
775
+ overlay.remove();
776
+ }
777
+ }
778
+ }
779
+ // Sidebar Component
780
+ export class Sidebar {
781
+ constructor(sovads, containerId) {
782
+ this.currentAd = null;
783
+ this.renderStartTime = 0;
784
+ this.hasTrackedImpression = false;
785
+ this.isRendering = false;
786
+ this.sovads = sovads;
787
+ this.containerId = containerId;
788
+ }
789
+ async render(consumerId) {
790
+ // Prevent concurrent renders
791
+ if (this.isRendering) {
792
+ if (this.sovads.getConfig().debug) {
793
+ console.warn(`Sidebar render already in progress for ${this.containerId}`);
794
+ }
795
+ return;
796
+ }
797
+ this.isRendering = true;
798
+ try {
799
+ const container = document.getElementById(this.containerId);
800
+ if (!container) {
801
+ console.error(`Container with id "${this.containerId}" not found`);
802
+ this.isRendering = false;
803
+ return;
804
+ }
805
+ this.renderStartTime = Date.now();
806
+ this.currentAd = await this.sovads.loadAd(consumerId);
807
+ if (!this.currentAd) {
808
+ container.innerHTML = '<div class="sovads-no-ad">No ads available</div>';
809
+ this.isRendering = false;
810
+ return;
811
+ }
812
+ const adElement = document.createElement('div');
813
+ adElement.className = 'sovads-sidebar';
814
+ adElement.setAttribute('data-ad-id', this.currentAd.id);
815
+ adElement.style.cssText = `
816
+ background: #f8f9fa;
817
+ border: 1px solid #e9ecef;
818
+ border-radius: 8px;
819
+ padding: 15px;
820
+ margin-bottom: 15px;
821
+ cursor: pointer;
822
+ transition: all 0.2s ease;
823
+ `;
824
+ const img = document.createElement('img');
825
+ img.src = this.currentAd.bannerUrl;
826
+ img.alt = this.currentAd.description;
827
+ img.style.cssText = 'width: 100%; height: auto; display: block; border-radius: 4px;';
828
+ // Track when image loads (render verification)
829
+ img.onload = () => {
830
+ const renderTime = Date.now() - this.renderStartTime;
831
+ const renderInfo = {
832
+ rendered: true,
833
+ viewportVisible: false,
834
+ renderTime
835
+ };
836
+ // Setup IntersectionObserver to verify ad is visible
837
+ this.sovads.setupRenderObserver(adElement, this.currentAd.id, (isVisible) => {
838
+ renderInfo.viewportVisible = isVisible;
839
+ // Track impression only once when ad becomes visible
840
+ if (isVisible && !this.hasTrackedImpression) {
841
+ this.hasTrackedImpression = true;
842
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, renderInfo);
843
+ }
844
+ });
845
+ };
846
+ // Handle image load errors - still track impression if element is visible
847
+ img.onerror = () => {
848
+ if (this.sovads.getConfig().debug) {
849
+ console.warn(`Failed to load sidebar ad image: ${this.currentAd.bannerUrl}`);
850
+ }
851
+ // Still set up observer in case element becomes visible (for broken image tracking)
852
+ const renderInfo = {
853
+ rendered: false,
854
+ viewportVisible: false,
855
+ renderTime: Date.now() - this.renderStartTime
856
+ };
857
+ this.sovads.setupRenderObserver(adElement, this.currentAd.id, (isVisible) => {
858
+ renderInfo.viewportVisible = isVisible;
859
+ // Track impression even with broken image if visible
860
+ if (isVisible && !this.hasTrackedImpression) {
861
+ this.hasTrackedImpression = true;
862
+ this.sovads._trackEvent('IMPRESSION', this.currentAd.id, this.currentAd.campaignId, renderInfo);
863
+ }
864
+ });
865
+ };
866
+ // Add click handler
867
+ adElement.addEventListener('click', () => {
868
+ this.sovads._trackEvent('CLICK', this.currentAd.id, this.currentAd.campaignId, {
869
+ rendered: true,
870
+ viewportVisible: true,
871
+ renderTime: Date.now() - this.renderStartTime
872
+ });
873
+ // Log interaction
874
+ this.sovads.logInteraction('CLICK', {
875
+ adId: this.currentAd.id,
876
+ campaignId: this.currentAd.campaignId,
877
+ elementType: 'SIDEBAR',
878
+ metadata: { renderTime: Date.now() - this.renderStartTime },
879
+ });
880
+ window.open(this.currentAd.targetUrl, '_blank', 'noopener,noreferrer');
881
+ });
882
+ // Add hover effect
883
+ adElement.addEventListener('mouseenter', () => {
884
+ adElement.style.background = '#e9ecef';
885
+ adElement.style.transform = 'translateY(-2px)';
886
+ });
887
+ adElement.addEventListener('mouseleave', () => {
888
+ adElement.style.background = '#f8f9fa';
889
+ adElement.style.transform = 'translateY(0)';
890
+ });
891
+ adElement.appendChild(img);
892
+ container.appendChild(adElement);
893
+ }
894
+ finally {
895
+ this.isRendering = false;
896
+ }
897
+ }
898
+ }
899
+ // Export main SovAds class
900
+ export { SovAds };
901
+ // Default export for easy importing
902
+ export default SovAds;
903
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "sovads-sdk",
3
+ "version": "1.0.0",
4
+ "description": "SovAds SDK for publisher integration - Modular ad network SDK with banner, popup, and sidebar components",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "sovads",
19
+ "advertising",
20
+ "sdk",
21
+ "crypto",
22
+ "ads",
23
+ "ad-network",
24
+ "publisher",
25
+ "banner",
26
+ "popup"
27
+ ],
28
+ "author": "SovAds Team",
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/sovseas/sovads.git",
33
+ "directory": "sdk"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^5.0.0",
37
+ "@types/node": "^20.0.0"
38
+ },
39
+ "publishConfig": {
40
+ "access": "public"
41
+ }
42
+ }