@eyevinn/player-analytics-client-sdk-web 0.3.0 → 0.4.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 +218 -47
- package/dist/index.d.ts +2 -0
- package/dist/index.js +508 -85
- package/dist/index.js.map +1 -1
- package/dist/module.js +508 -85
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +26 -7
- package/dist/types.d.ts.map +1 -1
- package/index.ts +7 -0
- package/package.json +5 -1
- package/spec/PlayerAnalytics.spec.ts +338 -0
- package/spec/PlayerAnalyticsConnector.spec.ts +1474 -0
- package/spec/Reporter.spec.ts +825 -0
- package/spec/support/jasmine.json +7 -0
- package/tsconfig.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;AEAO,GAAA,CAAM,yCAAkB,GAAG,KAAK;AAGhC,GAAA,CAAM,yCAAY,GAAG,+EAAW,CAAC,OAAO;;;;;;;A,G,C,8B,0B,Q,I,Q,G,C;I,8B,G,M,C,M,I,Q,C,C,E,C;Q,G,C,G,C,C,E,C,G,C,E,C,G,S,C,M,E,C,G,C,E,C,G,C;Y,C,G,S,C,C;Y,G,C,G,C,C,I,C,C,E,E,M,C,S,C,c,C,I,C,C,E,C,G,C,C,C,I,C,C,C;Q,C;Q,M,C,C;I,C;I,M,C,8B,C,K,C,I,E,S;A,C;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;ACkB/C,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAQE,yCAAA,CAAY,OAAyB,EAArC,CAAA;QAFQ,IAAA,CAAA,WAAW,GAAG,KAAK;QAGzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;QACxC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;QAClC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,yCAAkB;QAExE,EAAA,EAAI,IAAI,CAAC,KAAK,EACZ,OAAO,CAAC,GAAG,CAAC,CAAiD,kDAAE,OAAO;IAE1E,CAAC;IAEY,yCAAA,CAAA,SAAA,CA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AM;YACZ,KAAK,EAAE,CAAU;YACjB,OAAO,EAAE,CAAT;gBACE,CAAc,eAAE,CAAiC;gBACjD,CAAc,eAAE,IAAI,CAAC,KAAK;gBAC1B,CAAgB,iBAAE,yCAAY;YAC/B,CAAA;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;QAC7B,CAAA;IAEL,CAAC;IACH,MAAA,CAAA,yCAAC;AAAD,CAnGA;;;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;AFMA,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAIE,yCAAA,CAAY,YAAoB,EAAE,KAAe,EAAjD,CAAA;QAHQ,IAAA,CAAA,KAAK,GAAG,KAAK;QAInB,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,YAAY,GAAG,YAAY;IAClC,CAAC;IAEY,yCAAA,CAAA,SAAA,CAAA,yBAAyB,GAAtC,QAAA,CAAuC,EAIT,EAJjB,CAAA;QACX,GAAA,CAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,EAAA,GAAA,EAAA,CAAA,iBAAsC,EAAtC,iBAAiB,GAAA,EAAA,KAAA,IAAA,CAAA,CAAA,GAAG,yCAAkB,GAAA,EAAA;Q,M,C,+B,C,I,E,I,C,C,E,I,C,C,E,Q,G,C;Y,G,C,E,E,kB,E,W;Y,M,C,iC,C,I,E,Q,C,E,E,C;gB,M,C,E,C,K;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CAAA,OAAO,GAAd,QAAO,GAAA,CAAA;QACL,IAAI,CAAC,iBAAiB,GAAG,IAAI;IAC/B,CAAC;IACH,MAAA,CAAA,yCAAC;AAAD,CA3FA;;;;;;;;A,G,C,8B,0B,Q,I,Q,G,C;I,8B,G,M,C,M,I,Q,C,C,E,C;Q,G,C,G,C,C,E,C,G,C,E,C,G,S,C,M,E,C,G,C,E,C,G,C;Y,C,G,S,C,C;Y,G,C,G,C,C,I,C,C,E,E,M,C,S,C,c,C,I,C,C,E,C,G,C,C,C,I,C,C,C;Q,C;Q,M,C,C;I,C;I,M,C,8B,C,K,C,I,E,S;A,C;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;AGNA,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAcE,yCAAA,CAAY,YAAoB,EAAE,KAAe,EAAjD,CAAA;QARQ,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAShC,IAAI,CAAC,YAAY,GAAG,YAAY;QAChC,IAAI,CAAC,eAAe,GAAG,GAAA,CAAI,yCAAe,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK;IACrE,CAAC;IAEY,yCAAA,CAAA,SAAA,CAAA,IAAI,GAAjB,QAAA,CAAkB,OAA6C,EAAlD,CAAA;Q,M,C,+B,C,I,E,I,C,C,E,I,C,C,E,Q,G,C;Y,G,C,E,E,iB,E,W;Y,M,C,iC,C,I,E,Q,C,E,E,C;gB,M,C,E,C,K;oB,I,C,C;wBACX,IAAI,CAAC,SAAS,GAAG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","sources":["index.ts","src/PlayerAnalytics.ts","src/utils/constants.ts","src/utils/Reporter.ts","src/PlayerAnalyticsConnector.ts"],"sourcesContent":["export {\n PlayerAnalytics,\n IPlayerAnalyticsInitOptions,\n} from \"./src/PlayerAnalytics\";\n\nexport {\n PlayerAnalyticsConnector,\n IPlayerAnalyticsConnectorInitOptions,\n} from \"./src/PlayerAnalyticsConnector\";\n","import {\n PlayerAnalyticsClientModule,\n TBitrateChangedEvent,\n TBufferedEvent,\n TBufferingEvent,\n TErrorEvent,\n THeartbeatEvent,\n TInitEvent,\n TLoadedEvent,\n TLoadingEvent,\n TMetadataEvent,\n TPausedEvent,\n TPlayingEvent,\n TSeekedEvent,\n TSeekingEvent,\n TStoppedEvent,\n TWarningEvent,\n} from \"@eyevinn/player-analytics-specification\";\nimport { HEARTBEAT_INTERVAL } from \"./utils/constants\";\nimport { Reporter } from \"./utils/Reporter\";\n\nexport interface IPlayerAnalyticsInitOptions {\n sessionId?: string;\n shardId?: string;\n heartbeatInterval?: number;\n}\n\nexport class PlayerAnalytics implements PlayerAnalyticsClientModule {\n private debug = false;\n private eventsinkUrl: string;\n private analyticsReporter: Reporter;\n constructor(eventsinkUrl: string, debug?: boolean) {\n this.debug = debug;\n this.eventsinkUrl = eventsinkUrl;\n }\n\n public async initiateAnalyticsReporter({\n sessionId,\n shardId,\n heartbeatInterval = HEARTBEAT_INTERVAL,\n }: IPlayerAnalyticsInitOptions) {\n this.analyticsReporter = new Reporter({\n sessionId,\n eventsinkUrl: this.eventsinkUrl,\n debug: this.debug,\n heartbeatInterval,\n shardId,\n });\n\n const { sessionId: generatedSessionId, isInitiated } =\n await this.analyticsReporter.init(sessionId);\n\n return { sessionId: generatedSessionId, heartbeatInterval, isInitiated };\n }\n\n public init(data: TInitEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public metadata(data: TMetadataEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public heartbeat(data: THeartbeatEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public loading(data: TLoadingEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public loaded(data: TLoadedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public playing(data: TPlayingEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public pause(data: TPausedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public buffering(data: TBufferingEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public buffered(data: TBufferedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public seeking(data: TSeekingEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public seeked(data: TSeekedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public bitrateChanged(data: TBitrateChangedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public error(data: TErrorEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public warning(data: TWarningEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public stopped(data: TStoppedEvent): void {\n this.analyticsReporter.send(data);\n }\n\n public destroy() {\n this.analyticsReporter = null;\n }\n}\n","export const HEARTBEAT_INTERVAL = 30000;\n\nimport packageJson from \"@eyevinn/player-analytics-specification/package.json\";\nexport const EPAS_VERSION = packageJson.version;\n","import {\n TInitEvent,\n TPlayerAnalyticsEvent,\n} from \"@eyevinn/player-analytics-specification\";\nimport { EPAS_VERSION, HEARTBEAT_INTERVAL } from \"./constants\";\n\nexport interface IReporterOptions {\n eventsinkUrl: string;\n heartbeatInterval?: number;\n sessionId?: string;\n shardId?: string;\n debug?: boolean;\n}\n\nexport interface IReporterPostOptions {\n event: string;\n timestamp: number;\n playhead: number;\n duration: number;\n}\n\nexport class Reporter {\n private debug: boolean;\n private eventsinkUrl: string;\n private sessionId?: string;\n private shardId?: string;\n private heartbeatInterval?: number;\n private isInitiated = false;\n\n constructor(options: IReporterOptions) {\n this.debug = options.debug;\n this.shardId = options.shardId;\n this.eventsinkUrl = options.eventsinkUrl;\n this.sessionId = options.sessionId;\n this.heartbeatInterval = options.heartbeatInterval || HEARTBEAT_INTERVAL;\n\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Initiated AnalyticsReporter\", options);\n }\n }\n\n public async init(sessionId?: string): Promise<Record<string, any>> {\n this.sessionId = sessionId || this.sessionId;\n const data: TInitEvent = {\n event: \"init\",\n sessionId: this.sessionId,\n shardId: this.shardId,\n timestamp: Date.now(),\n playhead: -1,\n duration: -1,\n };\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Init session:\", data);\n this.isInitiated = true;\n return {\n sessionId: this.sessionId,\n heartbeatInterval: this.heartbeatInterval,\n isInitiated: this.isInitiated,\n };\n } else {\n const initResponse = await fetch(`${this.eventsinkUrl}`, {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"X-EPAS-Event\": data.event,\n \"X-EPAS-Version\": EPAS_VERSION,\n },\n body: JSON.stringify(data),\n });\n if (!initResponse.ok) {\n throw new Error(\n `[AnalyticsReporter] init failed: ${initResponse.statusText}`\n );\n }\n const initResponseJson = await initResponse.json();\n\n if (!this.sessionId && !initResponseJson.sessionId) {\n throw new Error(`[AnalyticsReporter] init failed: no sessionId`);\n }\n if (initResponseJson.sessionId) {\n this.sessionId = initResponseJson.sessionId;\n }\n this.isInitiated = true;\n return {\n heartbeatInterval: this.heartbeatInterval,\n sessionId: this.sessionId,\n isInitiated: this.isInitiated,\n };\n }\n }\n\n public send(data: TPlayerAnalyticsEvent): void {\n if (!this.isInitiated)\n return console.warn(\n \"[AnalyticsReporter] Cannot report before initiation:\",\n data\n );\n const payload = {\n sessionId: this.sessionId,\n shardId: this.shardId,\n ...data,\n };\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Send payload:\", payload);\n } else {\n fetch(`${this.eventsinkUrl}`, {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"X-EPAS-Event\": data.event,\n \"X-EPAS-Version\": EPAS_VERSION,\n },\n body: JSON.stringify(payload),\n });\n }\n }\n}\n","import {\n getMediaEventFilter,\n FilteredMediaEvent,\n TMediaEventFilter,\n} from \"@eyevinn/media-event-filter\";\nimport { PlayerAnalytics } from \"./PlayerAnalytics\";\nimport {\n TBaseEvent,\n TBitrateChangedEventPayload,\n TErrorEventPayload,\n TEventType,\n TMetadataEventPayload,\n UUID,\n} from \"@eyevinn/player-analytics-specification\";\n\nexport interface IPlayerAnalyticsConnectorInitOptions {\n sessionId?: string;\n heartbeatInterval?: number;\n shardId?: string;\n}\n\nexport class PlayerAnalyticsConnector {\n private eventsinkUrl: string;\n private sessionId: UUID;\n private player: HTMLVideoElement;\n\n private playerAnalytics: PlayerAnalytics;\n private analyticsInitiated = false;\n\n private videoEventFilter: TMediaEventFilter;\n private videoEventListener: any;\n\n private heartbeatInterval: number;\n private heartbeatIntervalTimer: ReturnType<typeof setInterval>;\n\n constructor(eventsinkUrl: string, debug?: boolean) {\n this.eventsinkUrl = eventsinkUrl;\n this.playerAnalytics = new PlayerAnalytics(this.eventsinkUrl, debug);\n }\n\n public async init(options: IPlayerAnalyticsConnectorInitOptions) {\n this.sessionId = options.sessionId;\n const { heartbeatInterval, isInitiated } =\n await this.playerAnalytics.initiateAnalyticsReporter({\n sessionId: this.sessionId,\n shardId: options.shardId,\n ...options,\n });\n\n this.analyticsInitiated = isInitiated;\n this.heartbeatInterval = heartbeatInterval;\n }\n\n public load(player: HTMLVideoElement) {\n this.player = player;\n this.playerAnalytics.loading({\n event: \"loading\",\n ...this.playbackState(),\n });\n this.initiateVideoEventFilter();\n }\n\n private initiateVideoEventFilter() {\n if (!this.player) return;\n this.videoEventFilter = getMediaEventFilter({\n mediaElement: this.player,\n mp4Mode: false,\n callback: (event: FilteredMediaEvent) => {\n let eventType: TEventType;\n const extraData = {};\n switch (event) {\n case FilteredMediaEvent.LOADED:\n eventType = \"loaded\";\n break;\n case FilteredMediaEvent.PLAYING:\n eventType = \"playing\";\n this.startInterval();\n break;\n case FilteredMediaEvent.PAUSE:\n eventType = \"paused\";\n break;\n case FilteredMediaEvent.SEEKING:\n eventType = \"seeking\";\n break;\n case FilteredMediaEvent.SEEKED:\n eventType = \"seeked\";\n break;\n case FilteredMediaEvent.BUFFERING:\n eventType = \"buffering\";\n break;\n case FilteredMediaEvent.BUFFERED:\n eventType = \"buffered\";\n break;\n case FilteredMediaEvent.ENDED:\n eventType = \"stopped\";\n extraData[\"reason\"] = \"ended\";\n this.stopInterval();\n break;\n default:\n break;\n }\n try {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n if (eventType) {\n this.playerAnalytics[eventType == \"paused\" ? \"pause\" : eventType]({\n event: eventType,\n ...this.playbackState(),\n ...(Object.keys(extraData).length > 0 && { payload: extraData }),\n });\n }\n } catch (err) {\n console.error(err);\n }\n },\n });\n }\n\n private startInterval() {\n if (this.heartbeatIntervalTimer) return;\n this.heartbeatIntervalTimer = setInterval(() => {\n this.playerAnalytics.heartbeat({\n event: \"heartbeat\",\n ...this.playbackState(),\n });\n }, this.heartbeatInterval);\n }\n\n private stopInterval() {\n clearInterval(this.heartbeatIntervalTimer);\n }\n\n public reportBitrateChange(payload: TBitrateChangedEventPayload) {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.bitrateChanged({\n event: \"bitrate_changed\",\n ...this.playbackState(),\n payload,\n });\n }\n\n public reportStop() {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.stopped({\n event: \"stopped\",\n ...this.playbackState(),\n payload: { reason: \"aborted\" },\n });\n this.stopInterval();\n }\n\n public reportError(error: TErrorEventPayload) {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.error({\n event: \"error\",\n ...this.playbackState(),\n payload: error,\n });\n this.playerAnalytics.stopped({\n event: \"stopped\",\n ...this.playbackState(),\n payload: { reason: \"error\" },\n });\n this.stopInterval();\n }\n\n public reportMetadata(payload: TMetadataEventPayload) {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.metadata({\n event: \"metadata\",\n ...this.playbackState(),\n payload,\n });\n }\n\n public reportWarning(payload: TErrorEventPayload) {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.warning({\n event: \"warning\",\n ...this.playbackState(),\n payload,\n });\n }\n\n private playbackState(): TBaseEvent {\n const duration =\n this.player?.duration &&\n this.player?.duration !== Infinity &&\n this.player?.duration > 0\n ? this.player.duration\n : -1;\n const playhead =\n this.player?.currentTime && duration !== -1\n ? this.player?.currentTime\n : -1;\n return {\n sessionId: this.sessionId,\n timestamp: Date.now(),\n playhead,\n duration,\n };\n }\n\n public deinit() {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.stopInterval();\n this.heartbeatInterval = null;\n this.videoEventFilter && this.videoEventFilter.teardown();\n this.videoEventFilter = null;\n }\n\n public destroy() {\n if (!this.analyticsInitiated) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.destroy();\n this.heartbeatInterval = null;\n this.videoEventFilter && this.videoEventFilter.teardown();\n this.stopInterval();\n }\n}\n"],"names":[],"version":3,"file":"index.js.map"}
|
|
1
|
+
{"mappings":";;;;;;;;;;;;;;;;;;AEAO,GAAA,CAAM,yCAAkB,GAAG,KAAK;AAGhC,GAAA,CAAM,yCAAY,GAAG,+EAAW,CAAC,OAAO;;;;;;;A,G,C,8B,0B,Q,I,Q,G,C;I,8B,G,M,C,M,I,Q,C,C,E,C;Q,G,C,G,C,C,E,C,G,C,E,C,G,S,C,M,E,C,G,C,E,C,G,C;Y,C,G,S,C,C;Y,G,C,G,C,C,I,C,C,E,E,M,C,S,C,c,C,I,C,C,E,C,G,C,C,C,I,C,C,C;Q,C;Q,M,C,C;I,C;I,M,C,8B,C,K,C,I,E,S;A,C;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;ACgB/C,GAAA,CAAM,oCAAc,GAAG,GAAG;AAkB1B,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAWE,yCAAA,CAAY,OAAyB,EAArC,CAAA;Q,G,C,E;QALQ,IAAA,CAAA,KAAK,GAAkB,CAAM;QAC7B,IAAA,CAAA,UAAU,GAA4B,CAAA,CAAE;QACxC,IAAA,CAAA,WAAW,GAA4C,IAAI;QAIjE,IAAI,CAAC,KAAK,IAAG,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,IAAA,CAAA,CAAA,GAAA,EAAA,GAAI,KAAK;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;QACxC,IAAI,CAAC,SAAS,GAA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Ac,MAAA,CAAA,+BAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA,EAAA,OAAO,EAAP,QAAA,GAAA,CAAA;Y,G,C,M,E,E,E,Q,E,K;Y,M,C,iC,C,I,E,Q,C,E,E,C;gB,M,C,E,C,K;oB,I,C,C;wBACpB,MAAM,GAAG,IAAI,CAAC,UAAU;wBAC9B,IAAI,CAAC,UAAU,GAAG,CAAA,CAAE;wBAEM,EAAA,GAAA,CAAA,EAAN,QAAA,GAAA,MAAM;wB,E,C,K,G,C;oB,I,C,C;wBAAN,EAAA,IAAA,EAAA,GAAA,QAAA,CAAA,MAAM,GAAN,MAAA,CAAA,CAAA;AAAA,6BAAA,AAAA,CAAA,AAAA,EAAA,AAAA,KAAA,AAAA,EAAA;AAAA,6BAAA;wBAAA,CAAA;wBAAT,KAAK,GAAL,QAAA,CAAA,EAAA;wBACT,EAA0C,AAA1C,wCAA0C;wBAC1C,EAAA,EAAI,IAAI,CAAC,KAAK,KAAK,CAAW,YAAE,MAAA,CAAA,CAAA;AAAA,6BAAA,AAAA,CAAA,AAAA,EAAA,AAAA,MAAA,AAAA,EAAA;wBAAA,CAAA;wBAChC,MAAA,CAAA,CAAA;AAAA,6BAAA,AAAA,CAAA,AAAA,EAAA,AAAA,KAAA,AAAA,EAAA;4BAAM,IAAI,CAAC,QAAQ,CAAC,KAAK;wBAAC,CAAA;oB,I,C,C;wBAA1B,EAAA,CAAA,IAAA;wB,E,C,K,G,C;oB,I,C,C;wBAHkB,EAAA;wB,M,C,C;A,6B,A,C,A,E,A,K,A,E;A,6B;wB,C;oB,I,C,C;wB,M,C,C;A,6B,A,C,A,E,A,M,A,E;wB,C;;Y,C;Q,C;IAKrB,CAAA;IAED,EAIG,AAJH;;;;KAIG,AAJH,EAIG,CACI,yCAAA,CAAA,SAAA,CAAA,OAAO,GAAd,QAAO,GAAA,CAAA;QACL,IAAI,CAAC,KAAK,GAAG,CAAW;QACxB,IAAI,CAAC,UAAU,GAAG,CAAA,CAAE;IACtB,CAAC;IACH,MAAA,CAAA,yCAAC;AAAD,CA/SA;;;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;AFVA,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAKE,yCAAA,CAAY,YAAoB,EAAE,KAAe,EAAE,OAAsB,EAAzE,CAAA;QAJQ,IAAA,CAAA,KAAK,GAAG,KAAK;QAKnB,IAAI,CAAC,KAAK,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,IAAA,CAAA,CAAA,GAAL,KAAK,GAAI,KAAK;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB,CAAC;IAEY,yCAAA,CAAA,SAAA,CAAA,yBAAyB,GAAtC,QAAA,CAAuC,EAIT,EAJjB,CAAA;QACX,GAAA,CAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,EAAA,GAAA,EAAA,CAAA,iBAAsC,EAAtC,iBAAiB,GAAA,EAAA,KAAA,IAAA,CAAA,CAAA,GAAG,yCAAkB,GAAA,EAAA;Q,M,C,+B,C,I,E,I,C,C,E,I,C,C,E,Q,G,C;Y,G,C,E,E,kB,E,W;Y,M,C,iC,C,I,E,Q,C,E,E,C;gB,M,C,E,C,K;oB,I,C,C;wBAEtC,IAAI,CAAC,iBAAiB,GAAG,GAAA,CAAI,kCAAQ,CAAC,CAAtC;4BACE,SAAS,EAAA,SAAA;4BACT,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,iBAAiB,EAAA,iBAAA;4BACjB,OAAO,EAAA,OAAA;4BACP,OAAO,EAAE,IAAI,CAAC,OAAO;wBACtB,CAAA;wBAGC,MAAA,CAAA,C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;I,C;I,M,C,8B,C,K,C,I,E,S;A,C;A,G,C,+B,0B,S,I,Q,C,O,E,U,E,C,E,S,E,C;a,K,C,K,E,C;Q,M,C,K,Y,C,G,K,G,G,C,C,C,Q,C,O,E,C;Y,O,C,K;Q,C;I,C;I,M,C,G,E,C,K,C,G,O,G,Q,C,O,E,M,E,C;iB,S,C,K,E,C;Y,G,C,C;gB,I,C,S,C,I,C,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,Q,C,K,E,C;Y,G,C,C;gB,I,C,S,C,C,Q,K;Y,C,C,K,E,C,E,C;gB,M,C,C;Y,C;Q,C;iB,I,C,M,E,C;Y,M,C,I,G,O,C,M,C,K,I,K,C,M,C,K,E,I,C,S,E,Q;Q,C;Q,I,E,S,G,S,C,K,C,O,E,U,I,C,C,G,I;I,C;A,C;A,G,C,iC,0B,W,I,Q,C,O,E,I,E,C;I,G,C,C,G,C;Q,K,E,C;Q,I,E,Q,G,C;Y,E,E,C,C,C,I,C,E,K,C,C,C,C;Y,M,C,C,C,C;Q,C;Q,I,E,C,C;Q,G,E,C,C;I,C,E,C,E,C,E,C,E,C;a,I,C,C,E,C;Q,M,C,Q,C,C,E,C;Y,M,C,I,C,C;gB,C;gB,C;Y,C;Q,C;I,C;a,I,C,E,E,C;Q,E,E,C,E,K,C,G,C,S,C,C;c,C,C,G,C,C;Y,E,E,C,G,C,E,C,K,C,G,E,C,C,I,C,G,C,C,C,W,E,C,C,I,C,C,C,a,C,G,C,C,C,a,C,C,I,C,C,G,C,I,C,C,I,O,C,G,C,C,I,C,C,E,E,C,C,I,I,E,M,C,C;Y,E,E,C,G,C,E,C,E,E,G,C;gB,E,C,C,I,C;gB,C,C,K;Y,C;Y,M,C,E,C,C;gB,I,C,C;gB,I,C,C;oB,C,G,E;oB,K;gB,I,C,C;oB,C,C,K;oB,M,C,C;wB,K,E,E,C,C;wB,I,E,K;oB,C;gB,I,C,C;oB,C,C,K;oB,C,G,E,C,C;oB,E,G,C;A,yB;oB,C;oB,Q;gB,I,C,C;oB,E,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;oB,E,I,C,G,C,C,I,E,C,G,C,C,M,G,C,I,C,C,C,C,M,G,C,O,E,C,C,M,C,I,E,C,C,M,C,G,C;wB,C,G,C;wB,Q;oB,C;oB,E,E,E,C,C,M,C,M,C,I,E,C,C,I,C,C,C,K,E,C,C,I,C,C,C,I,C;wB,C,C,K,G,E,C,C;wB,K;oB,C;oB,E,E,E,C,C,M,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,G,E;wB,K;oB,C;oB,E,E,C,I,C,C,K,G,C,C,C,G,C;wB,C,C,K,G,C,C,C;wB,C,C,G,C,I,C,E;wB,K;oB,C;oB,E,E,C,C,C,G,C,C,G,C,G;oB,C,C,I,C,G;oB,Q;;Y,E,G,I,C,I,C,O,E,C;Q,C,C,K,E,C,E,C;Y,E,G,C;A,iB;gB,C;Y,C;Y,C,G,C;Q,C,Q,C;Y,C,G,C,G,C;Q,C;Q,E,E,E,C,C,I,C,E,K,C,E,C,C;Q,M,C,C;Y,K,E,E,C,C,I,E,C,C,I,I,C,C;Y,I,E,I;Q,C;I,C;I,M,C,C,G,C;Q,I,E,I,C,C;Q,C,Q,I,C,C;Q,C,S,I,C,C;I,C,E,M,C,M,K,C,c,C,C,M,C,Q,I,Q,G,C;Q,M,C,I;I,C,G,C;A,C;AGJA,GAAA,CAAA,yCAAA,GAAA,QAAA,GAAA,CAAA;aAgCE,yCAAA,CAAY,YAAoB,EAAE,KAAe,EAAE,OAAsB,EAAzE,CAAA;QAAA,GAAA,CAAA,KAAA,GAAA,IAAA;QA1BQ,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,cAAc,GAAG,CAAC;QAK1B,EAA8E,AAA9E,4EAA8E;QAC9E,EAA6E,AAA7E,2EAA6E;QAC7E,EAA2E,AAA3E,yEAA2E;QAC3E,EAA6E,AAA7E,2EAA6E;QAC7E,EAAuE,AAAvE,qEAAuE;QACvE,EAA6E,AAA7E,2EAA6E;QAC7E,EAAwE,AAAxE,sEAAwE;QAChE,IAAA,CAAA,sBAAsB,GAAG,KAAK;QAI9B,IAAA,CAAA,qBAAqB,GAAG,KAAK;QAErC,EAA2E,AAA3E,yEAA2E;QAC3E,EAAsE,AAAtE,oEAAsE;QACtE,EAA2E,AAA3E,yEAA2E;QACnE,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,yBAAyB,GAAG,KAAK;QAyKjC,IAAA,CAAA,mBAAmB,GAAG,QAAtB,GAAA,CAAA;YACN,EAAqE,AAArE,mEAAqE;YACrE,EAAmE,AAAnE,iEAAmE;YACnE,EAAgD,AAAh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","sources":["index.ts","src/PlayerAnalytics.ts","src/utils/constants.ts","src/utils/Reporter.ts","src/PlayerAnalyticsConnector.ts"],"sourcesContent":["export {\n PlayerAnalytics,\n IPlayerAnalyticsInitOptions,\n} from \"./src/PlayerAnalytics\";\n\nexport {\n PlayerAnalyticsConnector,\n IPlayerAnalyticsConnectorInitOptions,\n} from \"./src/PlayerAnalyticsConnector\";\n\nexport type {\n TAnalyticsSendError,\n TOnSendError,\n} from \"./src/utils/Reporter\";\n\nexport type { TPlayerAnalyticsEvent } from \"@eyevinn/player-analytics-specification\";\n","import {\n PlayerAnalyticsClientModule,\n TBitrateChangedEvent,\n TBufferedEvent,\n TBufferingEvent,\n TErrorEvent,\n THeartbeatEvent,\n TInitEvent,\n TLoadedEvent,\n TLoadingEvent,\n TMetadataEvent,\n TPausedEvent,\n TPlayingEvent,\n TSeekedEvent,\n TSeekingEvent,\n TStoppedEvent,\n TWarningEvent,\n} from \"@eyevinn/player-analytics-specification\";\nimport { HEARTBEAT_INTERVAL } from \"./utils/constants\";\nimport { Reporter, TOnSendError } from \"./utils/Reporter\";\n\nexport interface IPlayerAnalyticsInitOptions {\n sessionId?: string;\n shardId?: string;\n heartbeatInterval?: number;\n}\n\nexport class PlayerAnalytics implements PlayerAnalyticsClientModule {\n private debug = false;\n private eventsinkUrl: string;\n private analyticsReporter: Reporter;\n private onError?: TOnSendError;\n constructor(eventsinkUrl: string, debug?: boolean, onError?: TOnSendError) {\n this.debug = debug ?? false;\n this.eventsinkUrl = eventsinkUrl;\n this.onError = onError;\n }\n\n public async initiateAnalyticsReporter({\n sessionId,\n shardId,\n heartbeatInterval = HEARTBEAT_INTERVAL,\n }: IPlayerAnalyticsInitOptions) {\n this.analyticsReporter = new Reporter({\n sessionId,\n eventsinkUrl: this.eventsinkUrl,\n debug: this.debug,\n heartbeatInterval,\n shardId,\n onError: this.onError,\n });\n\n const { sessionId: generatedSessionId, isInitiated } =\n await this.analyticsReporter.init(sessionId);\n\n return { sessionId: generatedSessionId, heartbeatInterval, isInitiated };\n }\n\n private ensureReporter(): boolean {\n if (!this.analyticsReporter) {\n console.warn(\n \"[PlayerAnalytics] Not initialized. Call initiateAnalyticsReporter() first.\"\n );\n return false;\n }\n return true;\n }\n\n public init(data: TInitEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public metadata(data: TMetadataEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public heartbeat(data: THeartbeatEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public loading(data: TLoadingEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public loaded(data: TLoadedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public playing(data: TPlayingEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public pause(data: TPausedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public buffering(data: TBufferingEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public buffered(data: TBufferedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public seeking(data: TSeekingEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public seeked(data: TSeekedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public bitrateChanged(data: TBitrateChangedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public error(data: TErrorEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public warning(data: TWarningEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n public stopped(data: TStoppedEvent): void {\n if (!this.ensureReporter()) return;\n this.analyticsReporter.send(data);\n }\n\n /**\n * Send a stopped event over the reporter's unload-safe beacon transport\n * (navigator.sendBeacon with a fetch keepalive fallback). Used to deliver the\n * stopped event when the page is closed or reloaded mid-playback, where a\n * normal CORS fetch would be dropped during unload. Returns true when the\n * event was handed off to a transport.\n */\n public stoppedViaBeacon(data: TStoppedEvent): boolean {\n if (!this.ensureReporter()) return false;\n return this.analyticsReporter.sendBeacon(data);\n }\n\n public destroy() {\n // Cascade destroy to the reporter so any in-flight init is aborted\n // and queued events are discarded rather than flushed.\n if (this.analyticsReporter) {\n this.analyticsReporter.destroy();\n }\n this.analyticsReporter = null;\n }\n}\n","export const HEARTBEAT_INTERVAL = 30000;\n\nimport packageJson from \"@eyevinn/player-analytics-specification/package.json\";\nexport const EPAS_VERSION = packageJson.version;\n","import {\n TInitEvent,\n TPlayerAnalyticsEvent,\n} from \"@eyevinn/player-analytics-specification\";\nimport { EPAS_VERSION, HEARTBEAT_INTERVAL } from \"./constants\";\n\nexport type TAnalyticsSendError = {\n status?: number;\n statusText?: string;\n message: string;\n};\n\nexport type TOnSendError = (\n error: TAnalyticsSendError,\n event: TPlayerAnalyticsEvent\n) => void;\n\ntype ReporterState = \"idle\" | \"initializing\" | \"ready\" | \"failed\" | \"destroyed\";\n\nconst MAX_QUEUE_SIZE = 100;\n\nexport interface IReporterOptions {\n eventsinkUrl: string;\n heartbeatInterval?: number;\n sessionId?: string;\n shardId?: string;\n debug?: boolean;\n onError?: TOnSendError;\n}\n\nexport interface IReporterPostOptions {\n event: string;\n timestamp: number;\n playhead: number;\n duration: number;\n}\n\nexport class Reporter {\n private debug: boolean;\n private eventsinkUrl: string;\n private sessionId?: string;\n private shardId?: string;\n private heartbeatInterval?: number;\n private state: ReporterState = \"idle\";\n private eventQueue: TPlayerAnalyticsEvent[] = [];\n private initPromise: Promise<Record<string, unknown>> | null = null;\n private onError?: TOnSendError;\n\n constructor(options: IReporterOptions) {\n this.debug = options.debug ?? false;\n this.shardId = options.shardId;\n this.eventsinkUrl = options.eventsinkUrl;\n this.sessionId = options.sessionId;\n this.heartbeatInterval = options.heartbeatInterval || HEARTBEAT_INTERVAL;\n this.onError = options.onError;\n\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Initiated AnalyticsReporter\", options);\n }\n }\n\n public get isInitiated(): boolean {\n return this.state === \"ready\";\n }\n\n public async init(sessionId?: string): Promise<Record<string, unknown>> {\n if (this.state !== \"idle\") {\n return this.initPromise!;\n }\n\n this.sessionId = sessionId || this.sessionId;\n this.state = \"initializing\";\n\n const data: TInitEvent = {\n event: \"init\",\n sessionId: this.sessionId,\n shardId: this.shardId,\n timestamp: Date.now(),\n playhead: -1,\n duration: -1,\n };\n\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Init session:\", data);\n this.state = \"ready\";\n this.flushQueue();\n const result = {\n sessionId: this.sessionId,\n heartbeatInterval: this.heartbeatInterval,\n isInitiated: true,\n };\n this.initPromise = Promise.resolve(result);\n return this.initPromise;\n }\n\n this.initPromise = this.doInit(data);\n return this.initPromise;\n }\n\n private async doInit(data: TInitEvent): Promise<Record<string, unknown>> {\n try {\n const initResponse = await fetch(`${this.eventsinkUrl}`, {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"X-EPAS-Event\": data.event,\n \"X-EPAS-Version\": EPAS_VERSION,\n },\n body: JSON.stringify(data),\n });\n\n // Abort if destroy() was called during the await\n if ((this.state as ReporterState) === \"destroyed\") {\n throw new Error(\n \"[AnalyticsReporter] init aborted: reporter was destroyed\"\n );\n }\n\n if (!initResponse.ok) {\n throw new Error(\n `[AnalyticsReporter] init failed: ${initResponse.statusText}`\n );\n }\n\n const initResponseJson = await initResponse.json();\n\n if ((this.state as ReporterState) === \"destroyed\") {\n throw new Error(\n \"[AnalyticsReporter] init aborted: reporter was destroyed\"\n );\n }\n\n if (!this.sessionId && !initResponseJson.sessionId) {\n throw new Error(`[AnalyticsReporter] init failed: no sessionId`);\n }\n if (initResponseJson.sessionId) {\n this.sessionId = initResponseJson.sessionId;\n }\n\n // Stay in 'initializing' while flushing so that any new send() calls\n // during flush continue to enqueue (and get flushed in the next loop\n // iteration). This prevents new events from interleaving with the\n // queued chain on the wire.\n while (this.eventQueue.length > 0) {\n if ((this.state as ReporterState) === \"destroyed\") {\n throw new Error(\n \"[AnalyticsReporter] init aborted: reporter was destroyed\"\n );\n }\n await this.flushQueue();\n }\n\n // Don't transition to ready if destroyed during flush\n if ((this.state as ReporterState) !== \"destroyed\") {\n this.state = \"ready\";\n }\n\n return {\n heartbeatInterval: this.heartbeatInterval,\n sessionId: this.sessionId,\n isInitiated: true,\n };\n } catch (err) {\n // Don't overwrite 'destroyed' state with 'failed'\n if ((this.state as ReporterState) !== \"destroyed\") {\n this.state = \"failed\";\n }\n this.eventQueue = [];\n throw err;\n }\n }\n\n public send(data: TPlayerAnalyticsEvent): void {\n switch (this.state) {\n case \"ready\":\n this.dispatch(data);\n break;\n case \"initializing\":\n if (this.eventQueue.length >= MAX_QUEUE_SIZE) {\n console.warn(\n \"[AnalyticsReporter] Event queue full, dropping newest event\"\n );\n break;\n }\n this.eventQueue.push(data);\n break;\n case \"idle\":\n console.warn(\n \"[AnalyticsReporter] Cannot report before initiation:\",\n data\n );\n break;\n case \"failed\":\n console.warn(\"[AnalyticsReporter] Init failed, cannot send:\", data);\n break;\n case \"destroyed\":\n // Silently drop — consumer has torn down, no need to warn\n break;\n }\n }\n\n private buildPayload(data: TPlayerAnalyticsEvent) {\n return {\n ...data,\n sessionId: this.sessionId,\n shardId: this.shardId,\n };\n }\n\n /**\n * Deliver an event using a transport that survives page unload (tab close\n * or reload).\n *\n * Uses `navigator.sendBeacon` with a `text/plain` JSON body. A plain-text\n * body with no `X-EPAS-*` headers is a CORS \"simple request\", so the browser\n * does not issue a preflight — the preflight is what gets dropped while the\n * page is unloading, losing the event (notably the `stopped` event). The\n * eventsink reads the event from the JSON body (`body.event`), not from\n * headers, so the beacon is accepted.\n *\n * Falls back to `fetch(..., { keepalive: true })` when `sendBeacon` is\n * unavailable or refuses the payload. Returns true when the event was handed\n * off to a transport.\n */\n public sendBeacon(data: TPlayerAnalyticsEvent): boolean {\n if (this.state === \"destroyed\") {\n return false;\n }\n\n const payload = this.buildPayload(data);\n\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Send beacon payload:\", payload);\n return true;\n }\n\n const body = JSON.stringify(payload);\n\n if (\n typeof navigator !== \"undefined\" &&\n typeof navigator.sendBeacon === \"function\"\n ) {\n try {\n const blob = new Blob([body], { type: \"text/plain; charset=utf-8\" });\n if (navigator.sendBeacon(this.eventsinkUrl, blob)) {\n return true;\n }\n } catch {\n // Fall through to the keepalive fetch fallback below.\n }\n }\n\n if (typeof fetch === \"function\") {\n try {\n fetch(`${this.eventsinkUrl}`, {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n keepalive: true,\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n body,\n }).catch(() => {\n // Best-effort during unload — nothing actionable to do on failure.\n });\n return true;\n } catch {\n return false;\n }\n }\n\n return false;\n }\n\n private dispatch(data: TPlayerAnalyticsEvent): Promise<void> {\n const payload = this.buildPayload(data);\n if (this.debug) {\n console.log(\"[AnalyticsReporter] Send payload:\", payload);\n return Promise.resolve();\n }\n return fetch(`${this.eventsinkUrl}`, {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n headers: {\n \"Content-Type\": \"application/json; charset=utf-8\",\n \"X-EPAS-Event\": data.event,\n \"X-EPAS-Version\": EPAS_VERSION,\n },\n body: JSON.stringify(payload),\n })\n .then((res) => {\n if (res && !res.ok) {\n const error: TAnalyticsSendError = {\n status: res.status,\n statusText: res.statusText,\n message: `Send failed: ${res.status} ${res.statusText}`,\n };\n if (this.onError) {\n this.onError(error, data);\n } else {\n console.warn(`[AnalyticsReporter] ${error.message}`);\n }\n }\n })\n .catch((err) => {\n const error: TAnalyticsSendError = {\n message: err instanceof Error ? err.message : String(err),\n };\n if (this.onError) {\n this.onError(error, data);\n } else {\n console.warn(\"[AnalyticsReporter] Send failed:\", error.message);\n }\n });\n }\n\n private async flushQueue(): Promise<void> {\n const queued = this.eventQueue;\n this.eventQueue = [];\n // Serialize sends to preserve event order on the wire\n for (const event of queued) {\n // Abort if destroy() was called mid-flush\n if (this.state === \"destroyed\") return;\n await this.dispatch(event);\n }\n }\n\n /**\n * Tear down the reporter. Aborts any in-flight init, discards queued\n * events without flushing, and prevents future send() calls from\n * dispatching. Called by PlayerAnalytics.destroy().\n */\n public destroy(): void {\n this.state = \"destroyed\";\n this.eventQueue = [];\n }\n}\n","import {\n getMediaEventFilter,\n FilteredMediaEvent,\n TMediaEventFilter,\n} from \"@eyevinn/media-event-filter\";\nimport { PlayerAnalytics } from \"./PlayerAnalytics\";\nimport { TOnSendError } from \"./utils/Reporter\";\nimport {\n TBaseEvent,\n TBitrateChangedEventPayload,\n TErrorEventPayload,\n TEventType,\n TMetadataEventPayload,\n TWarningEventPayload,\n UUID,\n} from \"@eyevinn/player-analytics-specification\";\n\nexport interface IPlayerAnalyticsConnectorInitOptions {\n sessionId?: string;\n heartbeatInterval?: number;\n shardId?: string;\n}\n\nexport class PlayerAnalyticsConnector {\n private eventsinkUrl: string;\n private sessionId: UUID;\n private player: HTMLVideoElement;\n\n private playerAnalytics: PlayerAnalytics;\n private analyticsInitiated = false;\n private initCalled = false;\n private initGeneration = 0;\n\n private videoEventFilter: TMediaEventFilter;\n private videoEventListener: unknown;\n\n // Direct DOM fallback for terminal/seek events on an element that was already\n // playing when load() ran (autoplay started during a slow init() handshake).\n // The media-event-filter attaches in its \"loading\" state and, never having\n // observed the initial playing/canplaythrough transitions, stays stuck there\n // and suppresses ENDED/SEEKING/SEEKED. These listeners drive that path\n // directly. They self-disable the moment the filter proves it is live (emits\n // any event), so a seek is never reported twice across the two sources.\n private autoplayFallbackActive = false;\n\n private heartbeatInterval: number;\n private heartbeatIntervalTimer: ReturnType<typeof setInterval>;\n private pendingHeartbeatStart = false;\n\n // Tracks whether a stopped event has already been reported for the current\n // session, so the page-unload path does not emit a duplicate after an\n // `ended`, reportStop(), or reportError() has already stopped the session.\n private stoppedReported = false;\n private unloadListenersRegistered = false;\n\n constructor(eventsinkUrl: string, debug?: boolean, onError?: TOnSendError) {\n this.eventsinkUrl = eventsinkUrl;\n this.playerAnalytics = new PlayerAnalytics(\n this.eventsinkUrl,\n debug,\n onError\n );\n }\n\n public async init(options: IPlayerAnalyticsConnectorInitOptions) {\n this.sessionId = options.sessionId;\n this.initCalled = true;\n this.stoppedReported = false;\n const currentGeneration = ++this.initGeneration;\n\n const initPromise = this.playerAnalytics.initiateAnalyticsReporter({\n ...options,\n sessionId: this.sessionId,\n });\n\n initPromise\n .then((result) => {\n // Ignore stale init completions (e.g., if destroy() was called during init)\n if (currentGeneration !== this.initGeneration) return;\n\n this.analyticsInitiated = result.isInitiated === true;\n this.heartbeatInterval =\n Number(result.heartbeatInterval) || this.heartbeatInterval;\n if (typeof result.sessionId === \"string\" && result.sessionId) {\n this.sessionId = result.sessionId;\n }\n if (this.pendingHeartbeatStart) {\n this.pendingHeartbeatStart = false;\n this.startInterval();\n }\n })\n .catch((err: unknown) => {\n if (currentGeneration !== this.initGeneration) return;\n // Reset pendingHeartbeatStart so a retry doesn't fire heartbeats\n // from a stale flag without a new PLAYING event.\n this.pendingHeartbeatStart = false;\n const message = err instanceof Error ? err.message : String(err);\n console.warn(\"[PlayerAnalyticsConnector] Init failed:\", message);\n });\n\n return initPromise;\n }\n\n public load(player: HTMLVideoElement) {\n this.player = player;\n this.playerAnalytics.loading({\n event: \"loading\",\n ...this.playbackState(),\n });\n this.initiateVideoEventFilter();\n this.registerUnloadListeners();\n\n // If the element is already playing by the time load() is called (e.g.\n // autoplay started during a slow init() handshake, before listeners were\n // attached), the media-event-filter won't emit a fresh PLAYING for the\n // DOM \"playing\" event that already fired. Emit it ourselves and start the\n // heartbeat so the session isn't lost. While init() is still in-flight the\n // event is queued by the Reporter and the heartbeat start is deferred via\n // pendingHeartbeatStart, flushing once the handshake completes.\n if (this.isPlayerAlreadyPlaying()) {\n this.playerAnalytics.playing({\n event: \"playing\",\n ...this.playbackState(),\n });\n this.startInterval();\n // The filter won't emit terminal/seek events for this already-playing\n // element (see isPlayerAlreadyPlaying / initiateVideoEventFilter notes),\n // so drive ended/seeking/seeked from the element's own DOM events.\n this.attachAutoplayTerminalFallback();\n }\n }\n\n private isPlayerAlreadyPlaying(): boolean {\n // HAVE_FUTURE_DATA (readyState 3) mirrors the media-event-filter's own\n // \"ready\" threshold. Use the numeric literal rather than\n // HTMLMediaElement.HAVE_FUTURE_DATA so this works in non-DOM test envs.\n return !!(\n this.player &&\n !this.player.paused &&\n !this.player.ended &&\n this.player.readyState >= 3\n );\n }\n\n private initiateVideoEventFilter() {\n if (!this.player) return;\n this.videoEventFilter = getMediaEventFilter({\n mediaElement: this.player,\n mp4Mode: false,\n callback: (event: FilteredMediaEvent) => {\n // The filter emitting anything means it has left its initial \"loading\"\n // state and is now the authoritative source for terminal/seek events;\n // retire the autoplay DOM fallback so a single seek/ended is not\n // reported twice.\n this.detachAutoplayTerminalFallback();\n\n let eventType: TEventType;\n const extraData = {};\n switch (event) {\n case FilteredMediaEvent.LOADED:\n eventType = \"loaded\";\n break;\n case FilteredMediaEvent.PLAYING:\n eventType = \"playing\";\n this.startInterval();\n break;\n case FilteredMediaEvent.PAUSE:\n eventType = \"paused\";\n break;\n case FilteredMediaEvent.SEEKING:\n eventType = \"seeking\";\n break;\n case FilteredMediaEvent.SEEKED:\n eventType = \"seeked\";\n break;\n case FilteredMediaEvent.BUFFERING:\n eventType = \"buffering\";\n break;\n case FilteredMediaEvent.BUFFERED:\n eventType = \"buffered\";\n break;\n case FilteredMediaEvent.ENDED:\n // Guard against a duplicate stopped(ended) if the autoplay fallback\n // (or reportStop/reportError) already ended the session.\n if (this.stoppedReported) return;\n eventType = \"stopped\";\n extraData[\"reason\"] = \"ended\";\n this.stoppedReported = true;\n this.stopInterval();\n break;\n default:\n break;\n }\n this.sendFilteredEvent(eventType, extraData);\n },\n });\n }\n\n // Shared emit path for events sourced from the media-event-filter and from\n // the autoplay DOM fallback, so both behave identically (init guard, the\n // paused→pause method-name mapping, optional payload, error swallowing).\n private sendFilteredEvent(\n eventType: TEventType,\n extraData: Record<string, unknown> = {}\n ) {\n try {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n if (eventType) {\n this.playerAnalytics[eventType == \"paused\" ? \"pause\" : eventType]({\n event: eventType,\n ...this.playbackState(),\n ...(Object.keys(extraData).length > 0 && { payload: extraData }),\n });\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n private handleAutoplayEnded = () => {\n // Mirror the filter's ENDED branch: exactly one stopped(ended), stop\n // heartbeats, and respect the stoppedReported guard so reportStop/\n // reportError/unload can't produce a duplicate.\n if (this.stoppedReported) return;\n this.stoppedReported = true;\n this.stopInterval();\n this.sendFilteredEvent(\"stopped\", { reason: \"ended\" });\n };\n\n private handleAutoplaySeeking = () => {\n this.sendFilteredEvent(\"seeking\");\n };\n\n private handleAutoplaySeeked = () => {\n this.sendFilteredEvent(\"seeked\");\n };\n\n private attachAutoplayTerminalFallback() {\n if (this.autoplayFallbackActive) return;\n if (!this.player || typeof this.player.addEventListener !== \"function\") {\n return;\n }\n this.autoplayFallbackActive = true;\n this.player.addEventListener(\"ended\", this.handleAutoplayEnded);\n this.player.addEventListener(\"seeking\", this.handleAutoplaySeeking);\n this.player.addEventListener(\"seeked\", this.handleAutoplaySeeked);\n }\n\n private detachAutoplayTerminalFallback() {\n if (!this.autoplayFallbackActive) return;\n this.autoplayFallbackActive = false;\n if (this.player && typeof this.player.removeEventListener === \"function\") {\n this.player.removeEventListener(\"ended\", this.handleAutoplayEnded);\n this.player.removeEventListener(\"seeking\", this.handleAutoplaySeeking);\n this.player.removeEventListener(\"seeked\", this.handleAutoplaySeeked);\n }\n }\n\n private startInterval() {\n if (this.heartbeatIntervalTimer) return;\n if (!this.heartbeatInterval) {\n this.pendingHeartbeatStart = true;\n return;\n }\n this.heartbeatIntervalTimer = setInterval(() => {\n this.playerAnalytics.heartbeat({\n event: \"heartbeat\",\n ...this.playbackState(),\n });\n }, this.heartbeatInterval);\n }\n\n private stopInterval() {\n clearInterval(this.heartbeatIntervalTimer);\n this.heartbeatIntervalTimer = null;\n this.pendingHeartbeatStart = false;\n }\n\n public reportBitrateChange(payload: TBitrateChangedEventPayload) {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.bitrateChanged({\n event: \"bitrate_changed\",\n ...this.playbackState(),\n payload,\n });\n }\n\n public reportStop() {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n // Already stopped this session (an `ended`, reportError(), or a prior\n // unload beacon) — don't emit a duplicate stopped.\n if (this.stoppedReported) {\n return;\n }\n this.stoppedReported = true;\n this.stopInterval();\n // Deliver over the unload-safe beacon transport (sendBeacon / keepalive\n // fetch), not the normal CORS fetch. Integrators call reportStop() from\n // pagehide/unload handlers, where the browser drops the preflighted CORS\n // fetch and the event is lost. Routing through the same beacon the SDK's\n // own unload path uses means setting `stoppedReported` here lets\n // flushStoppedOnUnload() short-circuit without losing the event, so\n // exactly one stopped is delivered.\n this.playerAnalytics.stoppedViaBeacon({\n event: \"stopped\",\n ...this.playbackState(),\n payload: { reason: \"aborted\" },\n });\n }\n\n public reportError(error: TErrorEventPayload) {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.error({\n event: \"error\",\n ...this.playbackState(),\n payload: error,\n });\n this.playerAnalytics.stopped({\n event: \"stopped\",\n ...this.playbackState(),\n payload: { reason: \"error\" },\n });\n this.stoppedReported = true;\n this.stopInterval();\n }\n\n public reportMetadata(payload: TMetadataEventPayload) {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.metadata({\n event: \"metadata\",\n ...this.playbackState(),\n payload,\n });\n }\n\n public reportWarning(payload: TWarningEventPayload) {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.playerAnalytics.warning({\n event: \"warning\",\n ...this.playbackState(),\n payload,\n });\n }\n\n private playbackState(): TBaseEvent {\n const duration =\n this.player?.duration &&\n this.player?.duration !== Infinity &&\n this.player?.duration > 0\n ? this.player.duration\n : -1;\n const playhead =\n this.player?.currentTime != null && this.player.currentTime >= 0\n ? this.player?.currentTime\n : -1;\n return {\n sessionId: this.sessionId,\n timestamp: Date.now(),\n playhead,\n duration,\n };\n }\n\n private handlePageHide = () => {\n this.flushStoppedOnUnload();\n };\n\n /**\n * Deliver a stopped event when the page is being unloaded (tab closed or\n * reloaded) mid-session. Driven by `pagehide`, which fires on genuine\n * discard (close/reload/navigate-away) but NOT on an ordinary tab switch —\n * the browser drops the normal CORS fetch (it needs a preflight) during\n * unload, losing the event, so the stopped event goes out over the\n * reporter's beacon transport instead. It is sent only once per session (a\n * later `ended`, reportStop(), or reportError() will already have reported\n * stopped). `visibilitychange→hidden` is deliberately NOT used here: a tab\n * switch / backgrounding is not an unload and must not end a still-playing\n * session (see #44).\n */\n private flushStoppedOnUnload() {\n if (!this.initCalled || this.stoppedReported || !this.player) {\n return;\n }\n this.stoppedReported = true;\n this.stopInterval();\n this.playerAnalytics.stoppedViaBeacon({\n event: \"stopped\",\n ...this.playbackState(),\n payload: { reason: \"aborted\" },\n });\n }\n\n private registerUnloadListeners() {\n if (this.unloadListenersRegistered) return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.addEventListener === \"function\"\n ) {\n window.addEventListener(\"pagehide\", this.handlePageHide);\n }\n this.unloadListenersRegistered = true;\n }\n\n private removeUnloadListeners() {\n if (!this.unloadListenersRegistered) return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.removeEventListener === \"function\"\n ) {\n window.removeEventListener(\"pagehide\", this.handlePageHide);\n }\n this.unloadListenersRegistered = false;\n }\n\n public deinit() {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.initGeneration++; // Invalidate any pending init callbacks\n // Abort any in-flight init so queued events don't flush after teardown.\n // The next init() call creates a fresh Reporter, so destroying the\n // current one is safe even though deinit is meant to be reusable.\n this.playerAnalytics.destroy();\n this.stopInterval();\n this.removeUnloadListeners();\n this.detachAutoplayTerminalFallback();\n this.heartbeatInterval = null;\n this.videoEventFilter && this.videoEventFilter.teardown();\n this.videoEventFilter = null;\n this.analyticsInitiated = false;\n this.initCalled = false;\n }\n\n public destroy() {\n if (!this.initCalled) {\n console.warn(\"[PlayerAnalyticsConnector] Analytics not initiated\");\n return;\n }\n this.initGeneration++; // Invalidate any pending init callbacks\n this.stopInterval();\n this.playerAnalytics.destroy();\n this.removeUnloadListeners();\n this.detachAutoplayTerminalFallback();\n this.heartbeatInterval = null;\n this.videoEventFilter && this.videoEventFilter.teardown();\n this.videoEventFilter = null;\n this.analyticsInitiated = false;\n this.initCalled = false;\n }\n}\n"],"names":[],"version":3,"file":"index.js.map"}
|