import type { BigFishRunResponse, RecordBigFishPlayRequest, SubmitBigFishInputRequest, } from '../../../packages/shared/src/contracts/bigFish'; import type { BigFishWorksResponse } from '../../../packages/shared/src/contracts/bigFishWorkSummary'; import { type ApiRetryOptions } from '../apiClient'; import { type RuntimeGuestRequestOptions } from '../runtimeGuestAuth'; import { buildRuntimeApiPath, requestRuntimeJson } from '../runtimeRequest'; const BIG_FISH_RUNTIME_API_BASE = '/api/runtime/big-fish'; const BIG_FISH_RUNTIME_WRITE_RETRY: ApiRetryOptions = { maxRetries: 1, baseDelayMs: 120, maxDelayMs: 360, retryUnsafeMethods: true, }; type BigFishRuntimeRequestOptions = RuntimeGuestRequestOptions; /** * 上报大鱼吃小鱼正式游玩。elapsedMs 为 0 时仅标记玩过作品。 */ export function recordBigFishPlay( sessionId: string, payload: RecordBigFishPlayRequest, options: BigFishRuntimeRequestOptions = {}, ) { return requestRuntimeJson({ url: buildRuntimeApiPath( BIG_FISH_RUNTIME_API_BASE, 'sessions', sessionId, 'play', ), method: 'POST', jsonBody: payload, fallbackMessage: '记录大鱼吃小鱼游玩失败', retry: BIG_FISH_RUNTIME_WRITE_RETRY, requestOptions: options, }); } export function startBigFishRun( sessionId: string, options: BigFishRuntimeRequestOptions = {}, ) { return requestRuntimeJson({ url: buildRuntimeApiPath( BIG_FISH_RUNTIME_API_BASE, 'sessions', sessionId, 'runs', ), method: 'POST', fallbackMessage: '启动大鱼吃小鱼玩法失败', retry: BIG_FISH_RUNTIME_WRITE_RETRY, requestOptions: options, }); } export function getBigFishRun( runId: string, options: BigFishRuntimeRequestOptions = {}, ) { return requestRuntimeJson({ url: buildRuntimeApiPath(BIG_FISH_RUNTIME_API_BASE, 'runs', runId), fallbackMessage: '读取大鱼吃小鱼玩法失败', requestOptions: options, }); } export function submitBigFishInput( runId: string, payload: SubmitBigFishInputRequest, options: BigFishRuntimeRequestOptions = {}, ) { return requestRuntimeJson({ url: buildRuntimeApiPath(BIG_FISH_RUNTIME_API_BASE, 'runs', runId, 'input'), method: 'POST', jsonBody: payload, fallbackMessage: '同步大鱼吃小鱼输入失败', retry: BIG_FISH_RUNTIME_WRITE_RETRY, requestOptions: options, }); }