Amba-Agent-App/lib/services/profileImageService.ts
2026-01-16 00:22:35 +03:00

96 lines
2.7 KiB
TypeScript

import { Platform } from "react-native";
import { isNative } from "../firebase";
export async function uploadProfileImage(
uid: string,
localUri: string
): Promise<string> {
if (!uid || !localUri) {
throw new Error("Missing uid or image uri");
}
const fileName = `profile_${uid}_${Date.now()}.jpg`;
if (isNative) {
let storageModule: any;
try {
console.log(
"[profileImageService] Using native Firebase Storage upload",
{
uid,
localUri,
}
);
storageModule = require("@react-native-firebase/storage").default;
} catch (e) {
console.error(
"[profileImageService] @react-native-firebase/storage not available",
e
);
throw new Error("Storage module not installed");
}
const path = `profile-images/${uid}/${fileName}`;
console.log("[profileImageService] Upload path (native):", path);
const ref = storageModule().ref(path);
try {
console.log(
"[profileImageService] Calling putFile with localUri",
localUri
);
const result = await ref.putFile(localUri);
console.log(
"[profileImageService] putFile result:",
result?.state || result
);
} catch (error) {
console.error("[profileImageService] Error during putFile", error);
throw error;
}
try {
console.log("[profileImageService] Fetching download URL for path", path);
const downloadUrl = await ref.getDownloadURL();
console.log("[profileImageService] getDownloadURL success", downloadUrl);
return downloadUrl;
} catch (error) {
console.error("[profileImageService] Error during getDownloadURL", error);
throw error;
}
}
// Web / other platforms using Firebase JS SDK storage
console.log("[profileImageService] Using web Firebase Storage upload", {
uid,
localUri,
});
const { getStorage, ref, uploadBytes, getDownloadURL } = await import(
"firebase/storage"
);
const storage = getStorage();
const response = await fetch(localUri);
const blob = await response.blob();
const storageRefPath = `profile-images/${uid}/${fileName}`;
console.log("[profileImageService] Upload path (web):", storageRefPath);
const storageRef = ref(storage, storageRefPath);
try {
await uploadBytes(storageRef, blob);
} catch (error) {
console.error("[profileImageService] Error during uploadBytes", error);
throw error;
}
try {
const downloadUrl = await getDownloadURL(storageRef);
console.log(
"[profileImageService] Web getDownloadURL success",
downloadUrl
);
return downloadUrl;
} catch (error) {
console.error("[profileImageService] Error during getDownloadURL", error);
throw error;
}
}