59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
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',
|
|
};
|
|
}
|