unified-video-framework 1.4.158 → 1.4.160

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.
Files changed (62) hide show
  1. package/package.json +11 -2
  2. package/packages/core/dist/analytics/adapters/PlayerAnalyticsAdapter.d.ts +18 -0
  3. package/packages/core/dist/analytics/adapters/PlayerAnalyticsAdapter.d.ts.map +1 -0
  4. package/packages/core/dist/analytics/adapters/PlayerAnalyticsAdapter.js +117 -0
  5. package/packages/core/dist/analytics/adapters/PlayerAnalyticsAdapter.js.map +1 -0
  6. package/packages/core/dist/analytics/core/AnalyticsProvider.d.ts +18 -0
  7. package/packages/core/dist/analytics/core/AnalyticsProvider.d.ts.map +1 -0
  8. package/packages/core/dist/analytics/core/AnalyticsProvider.js +99 -0
  9. package/packages/core/dist/analytics/core/AnalyticsProvider.js.map +1 -0
  10. package/packages/core/dist/analytics/core/DynamicAnalyticsManager.d.ts +20 -0
  11. package/packages/core/dist/analytics/core/DynamicAnalyticsManager.d.ts.map +1 -0
  12. package/packages/core/dist/analytics/core/DynamicAnalyticsManager.js +161 -0
  13. package/packages/core/dist/analytics/core/DynamicAnalyticsManager.js.map +1 -0
  14. package/packages/core/dist/analytics/core/EventBatcher.d.ts +32 -0
  15. package/packages/core/dist/analytics/core/EventBatcher.d.ts.map +1 -0
  16. package/packages/core/dist/analytics/core/EventBatcher.js +98 -0
  17. package/packages/core/dist/analytics/core/EventBatcher.js.map +1 -0
  18. package/packages/core/dist/analytics/core/PlayerAnalytics.d.ts +19 -0
  19. package/packages/core/dist/analytics/core/PlayerAnalytics.d.ts.map +1 -0
  20. package/packages/core/dist/analytics/core/PlayerAnalytics.js +80 -0
  21. package/packages/core/dist/analytics/core/PlayerAnalytics.js.map +1 -0
  22. package/packages/core/dist/analytics/examples/DynamicAnalyticsExample.d.ts +32 -0
  23. package/packages/core/dist/analytics/examples/DynamicAnalyticsExample.d.ts.map +1 -0
  24. package/packages/core/dist/analytics/examples/DynamicAnalyticsExample.js +220 -0
  25. package/packages/core/dist/analytics/examples/DynamicAnalyticsExample.js.map +1 -0
  26. package/packages/core/dist/analytics/index.d.ts +13 -0
  27. package/packages/core/dist/analytics/index.d.ts.map +1 -0
  28. package/packages/core/dist/analytics/index.js +13 -0
  29. package/packages/core/dist/analytics/index.js.map +1 -0
  30. package/packages/core/dist/analytics/types/AnalyticsTypes.d.ts +239 -0
  31. package/packages/core/dist/analytics/types/AnalyticsTypes.d.ts.map +1 -0
  32. package/packages/core/dist/analytics/types/AnalyticsTypes.js +8 -0
  33. package/packages/core/dist/analytics/types/AnalyticsTypes.js.map +1 -0
  34. package/packages/core/dist/analytics/utils/DeviceDetection.d.ts +27 -0
  35. package/packages/core/dist/analytics/utils/DeviceDetection.d.ts.map +1 -0
  36. package/packages/core/dist/analytics/utils/DeviceDetection.js +184 -0
  37. package/packages/core/dist/analytics/utils/DeviceDetection.js.map +1 -0
  38. package/packages/core/dist/chapter-manager.d.ts +39 -0
  39. package/packages/core/dist/index.d.ts +1 -0
  40. package/packages/core/dist/index.d.ts.map +1 -1
  41. package/packages/core/dist/index.js +1 -0
  42. package/packages/core/dist/index.js.map +1 -1
  43. package/packages/core/src/analytics/README.md +902 -0
  44. package/packages/core/src/analytics/adapters/PlayerAnalyticsAdapter.ts +156 -0
  45. package/packages/core/src/analytics/core/AnalyticsProvider.ts +169 -0
  46. package/packages/core/src/analytics/core/DynamicAnalyticsManager.ts +199 -0
  47. package/packages/core/src/analytics/core/EventBatcher.ts +160 -0
  48. package/packages/core/src/analytics/core/PlayerAnalytics.ts +147 -0
  49. package/packages/core/src/analytics/index.ts +51 -0
  50. package/packages/core/src/analytics/types/AnalyticsTypes.ts +315 -0
  51. package/packages/core/src/analytics/utils/DeviceDetection.ts +220 -0
  52. package/packages/core/src/index.ts +3 -0
  53. package/packages/ios/README.md +84 -0
  54. package/packages/web/dist/WebPlayer.d.ts +5 -0
  55. package/packages/web/dist/WebPlayer.d.ts.map +1 -1
  56. package/packages/web/dist/WebPlayer.js +255 -63
  57. package/packages/web/dist/WebPlayer.js.map +1 -1
  58. package/packages/web/dist/epg/EPGController.d.ts +78 -0
  59. package/packages/web/dist/epg/EPGController.d.ts.map +1 -0
  60. package/packages/web/dist/epg/EPGController.js +476 -0
  61. package/packages/web/dist/epg/EPGController.js.map +1 -0
  62. package/packages/web/src/WebPlayer.ts +303 -79
@@ -0,0 +1,19 @@
1
+ import { DynamicAnalyticsConfig, AnalyticsProviderType, PlayerAnalyticsConfig, VideoInfo, PlayerState } from '../types/AnalyticsTypes';
2
+ export declare class PlayerAnalytics {
3
+ private analyticsManager;
4
+ private currentSessionId;
5
+ constructor(config: DynamicAnalyticsConfig);
6
+ initialize(): Promise<void>;
7
+ startSession(videoInfo: VideoInfo, userInfo?: any): string;
8
+ endSession(): Promise<void>;
9
+ trackEvent(eventType: string, playerState?: PlayerState, customData?: any): void;
10
+ trackCustomEvent(eventType: string, data: any): void;
11
+ getSessionId(): string | null;
12
+ isEnabled(): boolean;
13
+ addProvider(name: string, type: AnalyticsProviderType, config: any): void;
14
+ removeProvider(name: string): Promise<void>;
15
+ toggleProvider(name: string, enabled: boolean): void;
16
+ destroy(): Promise<void>;
17
+ }
18
+ export declare function createPlayerAnalytics(baseUrl: string, apiKey: string, playerId: string, options?: Partial<PlayerAnalyticsConfig>): PlayerAnalytics;
19
+ //# sourceMappingURL=PlayerAnalytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayerAnalytics.d.ts","sourceRoot":"","sources":["../../../src/analytics/core/PlayerAnalytics.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,EACT,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,eAAe;IAC1B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAuB;gBAEnC,MAAM,EAAE,sBAAsB;IAOpC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM;IAQxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,GAAG,GAAG,IAAI;IAOhF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAOpD,YAAY,IAAI,MAAM,GAAG,IAAI;IAO7B,SAAS,IAAI,OAAO;IAOpB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI;IAOnE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAO9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B;AAKD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC3C,eAAe,CA+BjB"}
@@ -0,0 +1,80 @@
1
+ import { DynamicAnalyticsManager } from './DynamicAnalyticsManager';
2
+ import { AnalyticsProviderType } from '../types/AnalyticsTypes';
3
+ export class PlayerAnalytics {
4
+ constructor(config) {
5
+ this.currentSessionId = null;
6
+ this.analyticsManager = new DynamicAnalyticsManager(config);
7
+ }
8
+ async initialize() {
9
+ return this.analyticsManager.initialize();
10
+ }
11
+ startSession(videoInfo, userInfo = {}) {
12
+ this.currentSessionId = this.analyticsManager.startSession(videoInfo, userInfo);
13
+ return this.currentSessionId;
14
+ }
15
+ async endSession() {
16
+ if (this.currentSessionId) {
17
+ await this.analyticsManager.endSession();
18
+ this.currentSessionId = null;
19
+ }
20
+ }
21
+ trackEvent(eventType, playerState, customData) {
22
+ this.analyticsManager.trackEvent(eventType, playerState, customData);
23
+ }
24
+ trackCustomEvent(eventType, data) {
25
+ this.analyticsManager.trackCustomEvent(eventType, data);
26
+ }
27
+ getSessionId() {
28
+ return this.currentSessionId;
29
+ }
30
+ isEnabled() {
31
+ return this.analyticsManager.isEnabled();
32
+ }
33
+ addProvider(name, type, config) {
34
+ this.analyticsManager.addProvider(name, type, config);
35
+ }
36
+ async removeProvider(name) {
37
+ return this.analyticsManager.removeProvider(name);
38
+ }
39
+ toggleProvider(name, enabled) {
40
+ this.analyticsManager.toggleProvider(name, enabled);
41
+ }
42
+ async destroy() {
43
+ if (this.currentSessionId) {
44
+ await this.endSession();
45
+ }
46
+ return this.analyticsManager.destroy();
47
+ }
48
+ }
49
+ export function createPlayerAnalytics(baseUrl, apiKey, playerId, options = {}) {
50
+ const config = {
51
+ enabled: true,
52
+ providers: [
53
+ {
54
+ name: 'player-analytics',
55
+ type: AnalyticsProviderType.PLAYER_ANALYTICS,
56
+ enabled: true,
57
+ priority: 1,
58
+ config: {
59
+ baseUrl,
60
+ apiKey,
61
+ playerId,
62
+ heartbeatInterval: options.heartbeatInterval || 10,
63
+ batchSize: options.batchSize || 10,
64
+ flushInterval: options.flushInterval || 30,
65
+ enableOfflineStorage: options.enableOfflineStorage !== false,
66
+ maxRetries: options.maxRetries || 3,
67
+ retryDelay: options.retryDelay || 1000,
68
+ ...options
69
+ }
70
+ }
71
+ ],
72
+ globalSettings: {
73
+ enableConsoleLogging: false,
74
+ enableErrorReporting: true,
75
+ sessionTimeout: 60
76
+ }
77
+ };
78
+ return new PlayerAnalytics(config);
79
+ }
80
+ //# sourceMappingURL=PlayerAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayerAnalytics.js","sourceRoot":"","sources":["../../../src/analytics/core/PlayerAnalytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { DynamicAnalyticsManager, DynamicAnalyticsConfig } from '../index';
2
+ export declare function createBasicPlayerAnalytics(): DynamicAnalyticsManager;
3
+ export declare function createMultiProviderAnalytics(): DynamicAnalyticsManager;
4
+ export declare class VideoPlayerWithAnalytics {
5
+ private analyticsManager;
6
+ private currentVideoInfo;
7
+ constructor(analyticsConfig: DynamicAnalyticsConfig);
8
+ loadVideo(videoInfo: {
9
+ id: string;
10
+ title: string;
11
+ type: 'video' | 'series' | 'episode' | 'live';
12
+ duration: number;
13
+ url: string;
14
+ isLive?: boolean;
15
+ metadata?: Record<string, any>;
16
+ }): void;
17
+ play(): void;
18
+ pause(): void;
19
+ seek(time: number): void;
20
+ onError(error: any): void;
21
+ onQualityChange(newQuality: string, previousQuality: string): void;
22
+ onChapterSkip(chapterId: string, chapterType: string): void;
23
+ destroy(): void;
24
+ private setupAnalyticsEvents;
25
+ private getPlayerState;
26
+ private getCurrentUserId;
27
+ }
28
+ export declare function createEnvironmentAnalytics(): DynamicAnalyticsManager;
29
+ declare global {
30
+ function gtag(...args: any[]): void;
31
+ }
32
+ //# sourceMappingURL=DynamicAnalyticsExample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicAnalyticsExample.d.ts","sourceRoot":"","sources":["../../../src/analytics/examples/DynamicAnalyticsExample.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,uBAAuB,EAIvB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAGlB,wBAAgB,0BAA0B,4BA8BzC;AAGD,wBAAgB,4BAA4B,4BA2C3C;AAGD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,eAAe,EAAE,sBAAsB;IAK5C,SAAS,CAAC,SAAS,EAAE;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;QAC9C,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAChC,GAAG,IAAI;IAaD,IAAI,IAAI,IAAI;IAQZ,KAAK,IAAI,IAAI;IAQb,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAaxB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAUzB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAQlE,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ3D,OAAO,IAAI,IAAI;IAMtB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,gBAAgB;CAIzB;AA8DD,wBAAgB,0BAA0B,4BAiCzC;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,SAAS,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACrC"}
@@ -0,0 +1,220 @@
1
+ import { createDynamicAnalyticsManager, createPlayerAnalyticsProviderConfig, AnalyticsProviderType } from '../index';
2
+ export function createBasicPlayerAnalytics() {
3
+ const config = {
4
+ enabled: true,
5
+ providers: [
6
+ {
7
+ name: 'flicknexs-analytics',
8
+ type: AnalyticsProviderType.PLAYER_ANALYTICS,
9
+ enabled: true,
10
+ priority: 1,
11
+ config: createPlayerAnalyticsProviderConfig('https://api.flicknexs.com', 'your-api-key-here', 'video-player-main', {
12
+ tenantId: 'flicknexs-tenant',
13
+ heartbeatInterval: 10,
14
+ batchSize: 10,
15
+ flushInterval: 30
16
+ })
17
+ }
18
+ ],
19
+ globalSettings: {
20
+ enableConsoleLogging: true,
21
+ enableErrorReporting: true,
22
+ sessionTimeout: 60
23
+ }
24
+ };
25
+ return createDynamicAnalyticsManager(config);
26
+ }
27
+ export function createMultiProviderAnalytics() {
28
+ const config = {
29
+ enabled: true,
30
+ providers: [
31
+ {
32
+ name: 'player-analytics',
33
+ type: AnalyticsProviderType.PLAYER_ANALYTICS,
34
+ enabled: true,
35
+ priority: 1,
36
+ config: createPlayerAnalyticsProviderConfig(process.env.ANALYTICS_BASE_URL || 'https://api.flicknexs.com', process.env.ANALYTICS_API_KEY || 'your-api-key', 'main-player', {
37
+ tenantId: process.env.TENANT_ID,
38
+ heartbeatInterval: 10,
39
+ batchSize: 10,
40
+ flushInterval: 30
41
+ })
42
+ },
43
+ {
44
+ name: 'google-analytics',
45
+ type: AnalyticsProviderType.CUSTOM,
46
+ enabled: true,
47
+ priority: 2,
48
+ config: {
49
+ factory: (config) => new CustomGoogleAnalyticsProvider(config),
50
+ measurementId: 'G-XXXXXXXXXX',
51
+ apiSecret: 'your-ga4-secret'
52
+ }
53
+ }
54
+ ],
55
+ globalSettings: {
56
+ enableConsoleLogging: process.env.NODE_ENV !== 'production',
57
+ enableErrorReporting: true,
58
+ sessionTimeout: 90
59
+ }
60
+ };
61
+ return createDynamicAnalyticsManager(config);
62
+ }
63
+ export class VideoPlayerWithAnalytics {
64
+ constructor(analyticsConfig) {
65
+ this.currentVideoInfo = null;
66
+ this.analyticsManager = createDynamicAnalyticsManager(analyticsConfig);
67
+ this.setupAnalyticsEvents();
68
+ }
69
+ loadVideo(videoInfo) {
70
+ this.currentVideoInfo = videoInfo;
71
+ const sessionId = this.analyticsManager.startSession(videoInfo, {
72
+ userId: this.getCurrentUserId(),
73
+ appVersion: '1.0.0',
74
+ platform: 'web'
75
+ });
76
+ console.log(`Started analytics session: ${sessionId}`);
77
+ }
78
+ play() {
79
+ this.analyticsManager.trackEvent('play', this.getPlayerState());
80
+ }
81
+ pause() {
82
+ this.analyticsManager.trackEvent('pause', this.getPlayerState());
83
+ }
84
+ seek(time) {
85
+ const currentTime = this.getPlayerState().currentTime;
86
+ this.analyticsManager.trackEvent('seeking', this.getPlayerState(), {
87
+ seekFrom: currentTime,
88
+ seekTo: time
89
+ });
90
+ }
91
+ onError(error) {
92
+ this.analyticsManager.trackCustomEvent('error', {
93
+ errorCode: error.code,
94
+ errorMessage: error.message,
95
+ errorType: 'player_error',
96
+ currentTime: this.getPlayerState().currentTime
97
+ });
98
+ }
99
+ onQualityChange(newQuality, previousQuality) {
100
+ this.analyticsManager.trackCustomEvent('quality_change', {
101
+ newQuality,
102
+ previousQuality,
103
+ reason: 'user_selected'
104
+ });
105
+ }
106
+ onChapterSkip(chapterId, chapterType) {
107
+ this.analyticsManager.trackCustomEvent('custom_chapter_skip', {
108
+ chapterId,
109
+ chapterType,
110
+ skipReason: 'manual'
111
+ });
112
+ }
113
+ destroy() {
114
+ this.analyticsManager.endSession();
115
+ this.analyticsManager.destroy();
116
+ }
117
+ setupAnalyticsEvents() {
118
+ this.analyticsManager.on('sessionStart', (data) => {
119
+ console.log('Analytics session started:', data);
120
+ });
121
+ this.analyticsManager.on('sessionEnd', (data) => {
122
+ console.log('Analytics session ended:', data);
123
+ });
124
+ this.analyticsManager.on('error', (error) => {
125
+ console.error('Analytics error:', error);
126
+ });
127
+ }
128
+ getPlayerState() {
129
+ return {
130
+ currentTime: 120,
131
+ duration: 3600,
132
+ volume: 0.8,
133
+ muted: false,
134
+ paused: false,
135
+ ended: false,
136
+ fullscreen: false,
137
+ playbackRate: 1,
138
+ qualityLevel: '1080p',
139
+ buffered: null,
140
+ seekable: null,
141
+ networkState: 2,
142
+ readyState: 4
143
+ };
144
+ }
145
+ getCurrentUserId() {
146
+ return 'user123';
147
+ }
148
+ }
149
+ class CustomGoogleAnalyticsProvider {
150
+ constructor(config) {
151
+ this.sessionId = null;
152
+ this.config = config;
153
+ }
154
+ startSession(videoInfo, customData) {
155
+ this.sessionId = `ga_${Date.now()}`;
156
+ gtag('event', 'video_start', {
157
+ video_title: videoInfo.title,
158
+ video_id: videoInfo.id,
159
+ custom_parameter_1: customData?.userId
160
+ });
161
+ return this.sessionId;
162
+ }
163
+ async endSession() {
164
+ if (this.sessionId) {
165
+ gtag('event', 'video_end', {
166
+ session_id: this.sessionId
167
+ });
168
+ this.sessionId = null;
169
+ }
170
+ }
171
+ trackEvent(event, playerState, videoInfo) {
172
+ gtag('event', `video_${event.eventType}`, {
173
+ video_id: event.videoId,
174
+ current_time: event.currentTime,
175
+ session_id: this.sessionId
176
+ });
177
+ }
178
+ trackCustomEvent(eventType, data) {
179
+ gtag('event', eventType, {
180
+ ...data,
181
+ session_id: this.sessionId
182
+ });
183
+ }
184
+ async flush() {
185
+ }
186
+ getCurrentSession() {
187
+ return { sessionId: this.sessionId };
188
+ }
189
+ destroy() {
190
+ this.sessionId = null;
191
+ }
192
+ }
193
+ export function createEnvironmentAnalytics() {
194
+ const isDevelopment = process.env.NODE_ENV === 'development';
195
+ const isProduction = process.env.NODE_ENV === 'production';
196
+ const config = {
197
+ enabled: !isDevelopment || process.env.ENABLE_DEV_ANALYTICS === 'true',
198
+ providers: [
199
+ {
200
+ name: 'player-analytics',
201
+ type: AnalyticsProviderType.PLAYER_ANALYTICS,
202
+ enabled: true,
203
+ priority: 1,
204
+ config: createPlayerAnalyticsProviderConfig(process.env.ANALYTICS_BASE_URL || 'https://api.flicknexs.com', process.env.ANALYTICS_API_KEY || '', process.env.PLAYER_ID || 'default-player', {
205
+ tenantId: process.env.TENANT_ID,
206
+ heartbeatInterval: isDevelopment ? 5 : 10,
207
+ batchSize: isDevelopment ? 5 : 10,
208
+ flushInterval: isDevelopment ? 15 : 30
209
+ })
210
+ }
211
+ ],
212
+ globalSettings: {
213
+ enableConsoleLogging: isDevelopment,
214
+ enableErrorReporting: true,
215
+ sessionTimeout: isProduction ? 120 : 30
216
+ }
217
+ };
218
+ return createDynamicAnalyticsManager(config);
219
+ }
220
+ //# sourceMappingURL=DynamicAnalyticsExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicAnalyticsExample.js","sourceRoot":"","sources":["../../../src/analytics/examples/DynamicAnalyticsExample.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { DynamicAnalyticsConfig } from './types/AnalyticsTypes';
2
+ import { DynamicAnalyticsManager } from './core/DynamicAnalyticsManager';
3
+ export { DynamicAnalyticsManager } from './core/DynamicAnalyticsManager';
4
+ export { PlayerAnalytics, createPlayerAnalytics } from './core/PlayerAnalytics';
5
+ export { EventBatcher, createEventBatcher } from './core/EventBatcher';
6
+ export { AnalyticsProvider, createAnalyticsProvider, getDefaultAnalyticsConfig, createPlayerAnalyticsProviderConfig, validateAnalyticsConfig, mergeAnalyticsConfigs } from './core/AnalyticsProvider';
7
+ export { PlayerAnalyticsAdapter } from './adapters/PlayerAnalyticsAdapter';
8
+ export * from './types/AnalyticsTypes';
9
+ export { DeviceDetection, deviceDetection } from './utils/DeviceDetection';
10
+ export declare function createDynamicAnalyticsManager(config: DynamicAnalyticsConfig): DynamicAnalyticsManager;
11
+ export { AnalyticsProviderType } from './types/AnalyticsTypes';
12
+ export type { DynamicAnalyticsConfig, PlayerAnalyticsConfig, AnalyticsEventData, VideoInfo, PlayerState, DeviceInfo, EngagementData, PlayerSessionInfo, AnalyticsEventType, BaseAnalyticsProvider } from './types/AnalyticsTypes';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,mCAAmC,EACnC,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,sBAAsB,GAAG,uBAAuB,CAErG;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { DynamicAnalyticsManager } from './core/DynamicAnalyticsManager';
2
+ export { DynamicAnalyticsManager } from './core/DynamicAnalyticsManager';
3
+ export { PlayerAnalytics, createPlayerAnalytics } from './core/PlayerAnalytics';
4
+ export { EventBatcher, createEventBatcher } from './core/EventBatcher';
5
+ export { AnalyticsProvider, createAnalyticsProvider, getDefaultAnalyticsConfig, createPlayerAnalyticsProviderConfig, validateAnalyticsConfig, mergeAnalyticsConfigs } from './core/AnalyticsProvider';
6
+ export { PlayerAnalyticsAdapter } from './adapters/PlayerAnalyticsAdapter';
7
+ export * from './types/AnalyticsTypes';
8
+ export { DeviceDetection, deviceDetection } from './utils/DeviceDetection';
9
+ export function createDynamicAnalyticsManager(config) {
10
+ return new DynamicAnalyticsManager(config);
11
+ }
12
+ export { AnalyticsProviderType } from './types/AnalyticsTypes';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,mCAAmC,EACnC,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,UAAU,6BAA6B,CAAC,MAA8B;IAC1E,OAAO,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,239 @@
1
+ export interface AnalyticsConfig {
2
+ enabled: boolean;
3
+ providers: AnalyticsProviderConfig[];
4
+ globalSettings?: GlobalAnalyticsSettings;
5
+ }
6
+ export interface DynamicAnalyticsConfig extends AnalyticsConfig {
7
+ providers: DynamicProviderConfig[];
8
+ }
9
+ export interface GlobalAnalyticsSettings {
10
+ enableConsoleLogging?: boolean;
11
+ enableErrorReporting?: boolean;
12
+ sessionTimeout?: number;
13
+ defaultBatchSize?: number;
14
+ defaultFlushInterval?: number;
15
+ retryAttempts?: number;
16
+ retryDelay?: number;
17
+ }
18
+ export interface AnalyticsProviderConfig {
19
+ name: string;
20
+ enabled: boolean;
21
+ config: any;
22
+ }
23
+ export interface DynamicProviderConfig extends AnalyticsProviderConfig {
24
+ type: AnalyticsProviderType;
25
+ priority?: number;
26
+ }
27
+ export declare enum AnalyticsProviderType {
28
+ PLAYER_ANALYTICS = "player-analytics",
29
+ GOOGLE_ANALYTICS = "google-analytics",
30
+ ADOBE_ANALYTICS = "adobe-analytics",
31
+ CUSTOM = "custom"
32
+ }
33
+ export interface PlayerAnalyticsConfig {
34
+ baseUrl: string;
35
+ apiKey: string;
36
+ playerId: string;
37
+ tenantId?: string;
38
+ heartbeatInterval?: number;
39
+ batchSize?: number;
40
+ flushInterval?: number;
41
+ enableOfflineStorage?: boolean;
42
+ maxRetries?: number;
43
+ retryDelay?: number;
44
+ }
45
+ export interface AnalyticsEventData {
46
+ eventType: string;
47
+ timestamp: number;
48
+ currentTime?: number;
49
+ video?: VideoInfo;
50
+ device?: DeviceInfo;
51
+ player?: PlayerState;
52
+ network?: NetworkInfo;
53
+ engagement?: EngagementData;
54
+ custom?: Record<string, any>;
55
+ metadata?: EventMetadata;
56
+ }
57
+ export interface EventMetadata {
58
+ sessionId: string;
59
+ playerId: string;
60
+ userId?: string;
61
+ customData?: Record<string, any>;
62
+ }
63
+ export interface VideoInfo {
64
+ id: string;
65
+ title?: string;
66
+ type: 'video' | 'audio' | 'livestream';
67
+ duration?: number;
68
+ url?: string;
69
+ quality?: string;
70
+ bitrate?: number;
71
+ codec?: string;
72
+ format?: string;
73
+ thumbnail?: string;
74
+ description?: string;
75
+ tags?: string[];
76
+ chapter?: ChapterInfo;
77
+ }
78
+ export interface ChapterInfo {
79
+ id: string;
80
+ title: string;
81
+ startTime: number;
82
+ endTime: number;
83
+ thumbnail?: string;
84
+ }
85
+ export interface DeviceInfo {
86
+ deviceType: 'mobile' | 'tablet' | 'desktop' | 'smart_tv' | 'tv';
87
+ os: string;
88
+ osVersion?: string;
89
+ browser?: string;
90
+ browserVersion?: string;
91
+ screen: {
92
+ width: number;
93
+ height: number;
94
+ orientation?: 'portrait' | 'landscape';
95
+ };
96
+ userAgent?: string;
97
+ language?: string;
98
+ timezone?: string;
99
+ }
100
+ export interface PlayerState {
101
+ currentTime: number;
102
+ duration: number;
103
+ volume: number;
104
+ muted: boolean;
105
+ playbackRate: number;
106
+ buffered?: TimeRanges | null;
107
+ quality?: string;
108
+ isFullscreen?: boolean;
109
+ isPip?: boolean;
110
+ isLive?: boolean;
111
+ seekableRange?: {
112
+ start: number;
113
+ end: number;
114
+ };
115
+ }
116
+ export interface NetworkInfo {
117
+ connectionType?: string;
118
+ effectiveType?: string;
119
+ downlink?: number;
120
+ rtt?: number;
121
+ online: boolean;
122
+ }
123
+ export interface EngagementData {
124
+ watchTime: number;
125
+ uniqueWatchTime: number;
126
+ completionPercentage: number;
127
+ seekCount: number;
128
+ qualityChangeCount: number;
129
+ fullscreenCount: number;
130
+ bufferingTime: number;
131
+ bufferingEvents: number;
132
+ averageBitrate?: number;
133
+ startupTime?: number;
134
+ rebufferCount: number;
135
+ errorCount: number;
136
+ interactionCount: number;
137
+ socialShares?: number;
138
+ likes?: number;
139
+ comments?: number;
140
+ }
141
+ export interface PlayerSessionInfo {
142
+ sessionId: string;
143
+ playerId: string;
144
+ startTime: number;
145
+ endTime?: number;
146
+ userId?: string;
147
+ userType?: string;
148
+ customData?: Record<string, any>;
149
+ initialVideo?: VideoInfo;
150
+ totalVideos?: number;
151
+ totalWatchTime?: number;
152
+ }
153
+ export type AnalyticsEventType = 'session_start' | 'session_end' | 'video_load' | 'video_start' | 'play' | 'pause' | 'resume' | 'ended' | 'seeking' | 'seeked' | 'waiting' | 'stalled' | 'canplay' | 'timeupdate' | 'heartbeat' | 'qualitychange' | 'volumechange' | 'fullscreenchange' | 'ratechange' | 'resize' | 'enterpictureinpicture' | 'leavepictureinpicture' | 'error' | 'custom';
154
+ export interface AnalyticsError {
155
+ code: string | number;
156
+ message: string;
157
+ stack?: string;
158
+ fatal?: boolean;
159
+ context?: Record<string, any>;
160
+ timestamp: number;
161
+ }
162
+ export interface BatchConfig {
163
+ maxSize: number;
164
+ flushInterval: number;
165
+ maxWaitTime: number;
166
+ retryAttempts: number;
167
+ retryDelay: number;
168
+ }
169
+ export interface AnalyticsRequest {
170
+ session: PlayerSessionInfo;
171
+ events: AnalyticsEventData[];
172
+ timestamp: number;
173
+ batchId?: string;
174
+ }
175
+ export interface AnalyticsResponse {
176
+ success: boolean;
177
+ message?: string;
178
+ errors?: string[];
179
+ batchId?: string;
180
+ processedCount?: number;
181
+ }
182
+ export interface ProviderFactory<T = any> {
183
+ (config: T): BaseAnalyticsProvider;
184
+ }
185
+ export interface CustomProviderConfig {
186
+ factory: ProviderFactory;
187
+ [key: string]: any;
188
+ }
189
+ export interface BaseAnalyticsProvider {
190
+ name: string;
191
+ enabled: boolean;
192
+ initialize(): Promise<void>;
193
+ trackEvent(event: AnalyticsEventData): Promise<void>;
194
+ startSession(sessionInfo: PlayerSessionInfo): Promise<string>;
195
+ endSession(): Promise<void>;
196
+ flush(): Promise<void>;
197
+ destroy(): Promise<void>;
198
+ }
199
+ export type DeepPartial<T> = {
200
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
201
+ };
202
+ export type EventHandler = (event: AnalyticsEventData) => void;
203
+ export type ErrorHandler = (error: AnalyticsError) => void;
204
+ export type SessionHandler = (sessionInfo: PlayerSessionInfo) => void;
205
+ export interface StorageItem {
206
+ id: string;
207
+ data: AnalyticsEventData;
208
+ timestamp: number;
209
+ attempts: number;
210
+ }
211
+ export interface StorageConfig {
212
+ maxItems: number;
213
+ maxAge: number;
214
+ storageKey: string;
215
+ }
216
+ export interface DeviceDetectionResult {
217
+ deviceType: DeviceInfo['deviceType'];
218
+ os: string;
219
+ osVersion?: string;
220
+ browser?: string;
221
+ browserVersion?: string;
222
+ screen: DeviceInfo['screen'];
223
+ userAgent: string;
224
+ isMobile: boolean;
225
+ isTablet: boolean;
226
+ isDesktop: boolean;
227
+ isSmartTV: boolean;
228
+ isTizen: boolean;
229
+ isWebOS: boolean;
230
+ isRoku: boolean;
231
+ }
232
+ export interface NetworkDetectionResult {
233
+ connectionType?: string;
234
+ effectiveType?: string;
235
+ downlink?: number;
236
+ rtt?: number;
237
+ online: boolean;
238
+ }
239
+ //# sourceMappingURL=AnalyticsTypes.d.ts.map