private async setPlayer()

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;
	}