Files
checkcle/application/src/lib/pocketbase.ts
T
2025-05-26 20:15:10 +08:00

67 lines
2.1 KiB
TypeScript

import PocketBase from 'pocketbase';
// Dynamically detect API base URL from current host (for use in browser)
const dynamicBaseUrl =
typeof window !== 'undefined'
? `${window.location.protocol}//${window.location.hostname}:8090`
: 'http://localhost:8090';
// Define available API endpoints
export const API_ENDPOINTS = {
REMOTE: dynamicBaseUrl
};
// Get the current endpoint from localStorage or use remote as default
export const getCurrentEndpoint = (): string => {
if (typeof window !== 'undefined') {
const savedEndpoint = localStorage.getItem('pocketbase_endpoint');
return savedEndpoint || API_ENDPOINTS.REMOTE;
}
return API_ENDPOINTS.REMOTE;
};
// Set the API endpoint and reinitialize PocketBase
export const setApiEndpoint = (endpoint: string): void => {
if (typeof window !== 'undefined') {
localStorage.setItem('pocketbase_endpoint', endpoint);
window.location.reload(); // Reload to reinitialize PocketBase with new endpoint
}
};
// Initialize the PocketBase client with the current API URL
export const pb = new PocketBase(getCurrentEndpoint());
// Helper to check if user is authenticated
export const isAuthenticated = () => {
return pb.authStore.isValid;
};
// Export the auth store for use in components
export const authStore = pb.authStore;
// Configure PocketBase to persist authentication between page reloads
if (typeof window !== 'undefined') {
const storedAuthData = localStorage.getItem('pocketbase_auth');
if (storedAuthData) {
try {
const parsedData = JSON.parse(storedAuthData);
pb.authStore.save(parsedData.token, parsedData.model);
} catch (error) {
console.error('Failed to parse stored auth data:', error);
localStorage.removeItem('pocketbase_auth');
}
}
// Subscribe to authStore changes to persist authentication
pb.authStore.onChange(() => {
if (pb.authStore.isValid) {
localStorage.setItem('pocketbase_auth', JSON.stringify({
token: pb.authStore.token,
model: pb.authStore.model
}));
} else {
localStorage.removeItem('pocketbase_auth');
}
});
}