/** * H5任务上报 */ import { context } from '@/common/context'; import { TaskTracker, TaskPoint } from '@/common/report/task-track'; import { EventEmitter, logger } from '@jolibox/common'; import { httpClientManager } from '../http'; import type { Track } from '.'; import type { TrackEvent } from '@jolibox/types'; import { generateEncryptedPayload } from './encrypt'; export class H5TaskTracker extends TaskTracker { private gameId: string; private sessionId: string; private httpClient = httpClientManager.create(); private track: Track; constructor(track: Track, eventEmitter: EventEmitter<{ visible: [boolean] }>, interval?: number) { super(eventEmitter, interval); this.gameId = context.mpId; this.sessionId = context.sessionId; this.track = track; } async reporter(point: TaskPoint): Promise { const { event, params, extraParams } = point; const reportBody = { eventType: event, gameInfo: { gameId: this.gameId, sessionId: this.sessionId, ...params } }; if (extraParams) { Object.assign(reportBody, extraParams); } try { const encryptedBody = await generateEncryptedPayload(reportBody); await this.httpClient.post(`/api/base/app-event/v2`, { data: encryptedBody }); } catch (e) { await this.httpClient.post(`/api/base/app-event`, { data: reportBody }); } } tracker(event: TrackEvent, info: Record | null = null) { this.track(event, info); } }