Refactor Base64 variant handling in tryDecodeBase64

Simplifies and clarifies the logic for selecting Base64 variants by using a Set to ensure uniqueness and order. This change improves maintainability and robustness when decoding Base64 strings with different variants.
This commit is contained in:
Christopher
2026-01-28 07:22:11 -08:00
parent f678f1f87e
commit 70b86244a7
+13 -16
View File
@@ -58,25 +58,22 @@ export async function generateChatKeyPair(): Promise<{
// Helper to robustly decode Base64 regardless of variant (Original vs URLSafe) // Helper to robustly decode Base64 regardless of variant (Original vs URLSafe)
function tryDecodeBase64(str: string): Uint8Array { function tryDecodeBase64(str: string): Uint8Array {
const variants = [ // Use a Set to ensure uniqueness and order, explicitly allowing undefined
// Standard Base64 (likely for Remote keys with +/) const variants = new Set<number | undefined>();
(sodium.base64_variants && sodium.base64_variants.ORIGINAL),
// URL-Safe Base64 (likely for Local keys)
(sodium.base64_variants && sodium.base64_variants.URLSAFE),
// No Padding variants
(sodium.base64_variants && sodium.base64_variants.ORIGINAL_NO_PADDING),
(sodium.base64_variants && sodium.base64_variants.URLSAFE_NO_PADDING),
// Fallback/Default
undefined
];
// Filter out undefined variants (if enum missing) and create unique set // Prefer standard/known variants first
const validVariants = [...new Set(variants.filter(v => v !== undefined))]; if (sodium.base64_variants) {
// Add undefined at the end as fallback if not present if (sodium.base64_variants.ORIGINAL !== undefined) variants.add(sodium.base64_variants.ORIGINAL);
if (!validVariants.includes(undefined)) validVariants.push(undefined); if (sodium.base64_variants.URLSAFE !== undefined) variants.add(sodium.base64_variants.URLSAFE);
if (sodium.base64_variants.ORIGINAL_NO_PADDING !== undefined) variants.add(sodium.base64_variants.ORIGINAL_NO_PADDING);
if (sodium.base64_variants.URLSAFE_NO_PADDING !== undefined) variants.add(sodium.base64_variants.URLSAFE_NO_PADDING);
}
// Always add default (undefined) as fallback
variants.add(undefined);
let lastError; let lastError;
for (const v of validVariants) { for (const v of variants) {
try { try {
return v !== undefined return v !== undefined
? sodium.from_base64(str, v) ? sodium.from_base64(str, v)