openreader/src/lib/server/audiobooks/user-scope.ts

25 lines
900 B
TypeScript

export function buildAllowedAudiobookUserIds(
authEnabled: boolean,
userId: string | null,
unclaimedUserId: string,
): { preferredUserId: string; allowedUserIds: string[] } {
if (!authEnabled) {
return { preferredUserId: unclaimedUserId, allowedUserIds: [unclaimedUserId] };
}
const preferredUserId = userId ?? unclaimedUserId;
const allowedUserIds = Array.from(new Set([preferredUserId, unclaimedUserId]));
return { preferredUserId, allowedUserIds };
}
export function pickAudiobookOwner(
existingUserIds: string[],
preferredUserId: string,
unclaimedUserId: string,
): string | null {
const existing = new Set(existingUserIds);
// Keep resumed writes on unclaimed scope when the book already exists there.
if (existing.has(unclaimedUserId)) return unclaimedUserId;
if (existing.has(preferredUserId)) return preferredUserId;
return existingUserIds[0] ?? null;
}