46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
|
|
import PocketBase from "pocketbase";
|
||
|
|
|
||
|
|
const POCKETBASE_URL = process.env.NEXT_PUBLIC_POCKETBASE_URL || "http://127.0.0.1:8090";
|
||
|
|
|
||
|
|
let pb: PocketBase | null = null;
|
||
|
|
|
||
|
|
export function getPocketBase(): PocketBase {
|
||
|
|
if (typeof window === "undefined") {
|
||
|
|
// Server-side: create new instance each time
|
||
|
|
return new PocketBase(POCKETBASE_URL);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Client-side: reuse singleton
|
||
|
|
if (!pb) {
|
||
|
|
pb = new PocketBase(POCKETBASE_URL);
|
||
|
|
pb.autoCancellation(false);
|
||
|
|
|
||
|
|
// Load auth from localStorage
|
||
|
|
const storedAuth = localStorage.getItem("pocketbase_auth");
|
||
|
|
if (storedAuth) {
|
||
|
|
try {
|
||
|
|
const authData = JSON.parse(storedAuth);
|
||
|
|
pb.authStore.save(authData.token, authData.record);
|
||
|
|
} catch {
|
||
|
|
localStorage.removeItem("pocketbase_auth");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Persist auth changes to localStorage
|
||
|
|
pb!.authStore.onChange(() => {
|
||
|
|
if (pb!.authStore.isValid) {
|
||
|
|
localStorage.setItem("pocketbase_auth", JSON.stringify({
|
||
|
|
token: pb!.authStore.token,
|
||
|
|
record: pb!.authStore.record,
|
||
|
|
}));
|
||
|
|
} else {
|
||
|
|
localStorage.removeItem("pocketbase_auth");
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return pb;
|
||
|
|
}
|
||
|
|
|
||
|
|
export { PocketBase };
|
||
|
|
export default getPocketBase;
|