Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export type {
SessionContext,
MediaAdapterApi,
MediaAdapterInterface,
MediaEventProperties,
MediaEventType,
} from './types';
export type { TanilyticsConfig } from './config/types';
24 changes: 23 additions & 1 deletion packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,34 @@ export interface IngestionPayload {
*/
export type TrackingEvent = IngestionEvent;

/**
* Standard media event properties emitted by media adapters.
* These fields are extracted server-side for media engagement rollups.
*/
export interface MediaEventProperties extends EventProperties {
provider?: string;
video_id?: string;
video_url?: string;
title?: string;
current_time?: number;
duration?: number;
percent?: number;
buffered_fraction?: number;
delta_seconds?: number;
from_time?: number;
to_time?: number;
progress_percent?: number;
}

/**
* Minimal API surface the core tracker exposes to media adapters.
* Adapter events flow through the normal privacy, session, and queue pipeline.
*/
export interface MediaAdapterApi {
trackMedia(eventType: MediaEventType, properties?: EventProperties): void;
trackMedia(
eventType: MediaEventType,
properties?: MediaEventProperties,
): void;
}

/**
Expand Down
6 changes: 3 additions & 3 deletions packages/media-adapters/youtube/src/lib/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import type {
YouTubePlayerEvent,
VideoSnapshot,
} from './types';
import type { EventProperties } from 'tanilytics';
import type { MediaEventProperties } from 'tanilytics';

interface CreatePlayerEventHandlersOptions {
adapterApi: YouTubeMediaAdapterApi;
Expand Down Expand Up @@ -620,14 +620,14 @@ function emit(
adapterApi: YouTubeMediaAdapterApi,
context: PlaybackContext,
eventType: YouTubeMediaEventType,
extraProperties?: EventProperties,
extraProperties?: MediaEventProperties,
): void {
if (context.player === null) {
return;
}

const snapshot = readSnapshot(context.player);
const properties: EventProperties = { provider: 'youtube' };
const properties: MediaEventProperties = { provider: 'youtube' };

if (snapshot.videoId !== undefined) {
properties.video_id = snapshot.videoId;
Expand Down
4 changes: 2 additions & 2 deletions packages/media-adapters/youtube/src/lib/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { EventProperties } from 'tanilytics';
import type { MediaEventProperties } from 'tanilytics';

export type YouTubeMediaEventType =
| 'media_play'
Expand Down Expand Up @@ -82,7 +82,7 @@ export interface PlaybackContext {
export interface YouTubeMediaAdapterApi {
trackMedia(
eventType: YouTubeMediaEventType,
properties?: EventProperties,
properties?: MediaEventProperties,
): void;
}

Expand Down
Loading