almeira-web/src/lib/appwrite.server.ts

74 lines
2.0 KiB
TypeScript

import { Client, Account, Databases } from 'node-appwrite';
import { cookies } from 'next/headers';
const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'http://localhost/v1';
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69bedced002971103d13';
export async function createSessionClient() {
const cookieStore = await cookies();
const sessionCookie = cookieStore.get('a_session_' + PROJECT_ID.toLowerCase());
if (!sessionCookie || !sessionCookie.value) {
return null;
}
const client = new Client()
.setEndpoint(ENDPOINT)
.setProject(PROJECT_ID);
if (sessionCookie.value === "dev-bypass-session") {
// Escalate to API Key privileges for local dev bypass
client.setKey(process.env.APPWRITE_API_KEY || '');
} else {
client.setSession(sessionCookie.value);
}
return {
get account() {
return new Account(client);
},
get databases() {
return new Databases(client);
}
};
}
export async function createAdminClient() {
const client = new Client()
.setEndpoint(ENDPOINT)
.setProject(PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY || '');
return {
get account() {
return new Account(client);
},
get databases() {
return new Databases(client);
}
};
}
export async function getLoggedInUser() {
const cookieStore = await cookies();
const sessionCookie = cookieStore.get('a_session_' + PROJECT_ID.toLowerCase());
if (process.env.NODE_ENV !== "production" && sessionCookie?.value === "dev-bypass-session") {
return { name: "Administrador (Modo Dev)", email: "admin@almeira.com.co" };
}
try {
const sessionClient = await createSessionClient();
if (!sessionClient) {
console.log("No session client created (cookie missing)");
return null;
}
return await sessionClient.account.get();
} catch (error) {
console.error("Error in getLoggedInUser API call:", error);
// Session is invalid or expired
return null;
}
}