import { rewardsHelper } from '@/common/rewards'; import { JoliboxAdsForGame, IAdsInitParams, IAdConfigParams, IAdBreakParams, IAdUnitParams } from '@jolibox/ads'; import { IAdsHandler } from '../ads'; import { JoliboxHttpClient } from '@/h5/http'; import { context } from '@/common/context'; export default class JoliboxAdsHandler implements IAdsHandler { constructor(private ads: JoliboxAdsForGame, private httpClient: JoliboxHttpClient) {} getAdsInstance(): JoliboxAdsForGame { return this.ads; } init(config?: IAdsInitParams): void { this.ads.init(config); } adConfig(params: IAdConfigParams): void { this.ads.adConfig(params); } async adBreak(params: IAdBreakParams): Promise { const isSubUser = context.hostUserInfo?.isSubUser; // if is sub user, just call adBreakDone with viewed status if (isSubUser) { this.wrapAdBreadDoneViewed(params); return; } if (params.type === 'reward') { try { const rewardsTypes = await rewardsHelper.getRewardsTypes(this.httpClient); const rewardResult = await rewardsHelper.handleReward(rewardsTypes, params); if (!rewardResult) { throw new Error('handleReward failed: fallback to unlock failed'); } } catch (e) { console.info('handleReward failed', e); params.adBreakDone?.({ breakType: params.type, breakFormat: params.type === 'reward' ? 'reward' : 'interstitial', breakStatus: 'noAdPreloaded' }); } } else { this.ads.adBreak(params); } } adUnit(params: IAdUnitParams): void { this.ads.adUnit(params); } private wrapAdBreadDoneViewed(params: IAdBreakParams) { params.adBreakDone?.({ breakType: params.type, breakName: 'name' in params ? params.name ?? '' : '', breakFormat: params.type === 'reward' ? 'reward' : 'interstitial', breakStatus: 'viewed' }); if ('adViewed' in params) { params.adViewed?.(); } } }