export type PlatformRecommendRuntimeRequestKind = | 'none' | 'background' | 'runtime-guest'; export type PlatformPuzzleRuntimeAuthMode = 'default' | 'isolated'; export type PlatformRecommendRuntimeAuthPlan = { requestKind: PlatformRecommendRuntimeRequestKind; puzzleRuntimeAuthMode: PlatformPuzzleRuntimeAuthMode; }; export type PlatformRecommendRuntimeAuthInput = { embedded?: boolean; allowRuntimeGuestAuth?: boolean; authUserId?: string | null; hasStoredAccessToken?: boolean; }; function hasAccountAuth(input: { authUserId?: string | null; hasStoredAccessToken?: boolean; }) { return Boolean(input.authUserId?.trim() || input.hasStoredAccessToken); } export function shouldUsePlatformRecommendRuntimeGuestAuth( input: Pick< PlatformRecommendRuntimeAuthInput, 'allowRuntimeGuestAuth' | 'authUserId' | 'hasStoredAccessToken' >, ) { return Boolean(input.allowRuntimeGuestAuth) && !hasAccountAuth(input); } export function resolvePlatformRecommendRuntimeAuthPlan( input: PlatformRecommendRuntimeAuthInput, ): PlatformRecommendRuntimeAuthPlan { const embedded = Boolean(input.embedded); const allowRuntimeGuestAuth = input.allowRuntimeGuestAuth ?? embedded; const useRuntimeGuestAuth = shouldUsePlatformRecommendRuntimeGuestAuth({ allowRuntimeGuestAuth, authUserId: input.authUserId, hasStoredAccessToken: input.hasStoredAccessToken, }); if (useRuntimeGuestAuth) { return { requestKind: 'runtime-guest', puzzleRuntimeAuthMode: 'isolated', }; } return { requestKind: embedded ? 'background' : 'none', puzzleRuntimeAuthMode: 'default', }; }