in dotcom-rendering/src/components/YoutubeAtom/YoutubePlayer.ts [92:147]
private async setPlayer(
id: string,
youtubeOptions: PlayerOptions,
onReadyListener: PlayerReadyCallback,
enableIma: boolean,
imaAdsRequestCallback: AdsRequestCallback,
imaAdManagerListeners: (imaManager: YT.ImaManager) => void,
) {
const YTAPI = await loadYouTubeAPI(enableIma);
const playerPromise = new Promise<SetPlayerResolve>(
(resolve, reject) => {
try {
/**
* If enableIma is true, YT.createPlayerForPublishers will be called to initiate IMA ads
* If enableIma is false, the standard YT.Player constructor will be called
* Listeners are set appropriately for each method
*/
if (enableIma) {
YTAPI.createPlayerForPublishers(
id,
imaAdsRequestCallback,
{
youtubeOptions,
},
// onReady callback for YT.createPlayerForPublishers must be passed separately
(player, imaManager) => {
this.player = player;
imaAdManagerListeners(imaManager);
onReadyListener();
resolve({
player,
imaManager,
});
},
);
} else {
this.player = new YTAPI.Player(id, {
...youtubeOptions,
events: {
onReady: onReadyListener,
onStateChange:
youtubeOptions.events?.onStateChange,
onFullscreenToggled:
youtubeOptions.events?.onFullscreenToggled,
},
});
resolve({ player: this.player });
}
} catch (e) {
this.logError(e as Error);
reject(e);
}
},
);
return playerPromise;
}