@underpostnet/underpost
Version:
Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orc
87 lines (71 loc) • 2.15 kB
JavaScript
import Dexie from 'dexie';
import { loggerFactory } from '../../components/core/Logger.js';
const logger = loggerFactory(import.meta);
const USER_TOKEN_KEY = 'jwt';
const GUEST_TOKEN_KEY = 'jwt.g';
class SessionMetaDb extends Dexie {
constructor() {
super('session-meta-db');
this.version(1).stores({
meta: '&key,value,updatedAt',
});
}
}
// Lazy singleton — avoids opening IndexedDB at module-load time.
// Firefox is measurably slower at IDB open than Chromium; deferring the
// open until first actual read/write eliminates that latency from page startup.
let _db = null;
const getDb = () => {
if (!_db) _db = new SessionMetaDb();
return _db;
};
class GuestService {
static setUserToken(value = '') {
if (value) localStorage.setItem(USER_TOKEN_KEY, value);
else localStorage.removeItem(USER_TOKEN_KEY);
return value;
}
static getUserToken() {
return localStorage.getItem(USER_TOKEN_KEY) || '';
}
static clearUserToken() {
localStorage.removeItem(USER_TOKEN_KEY);
return '';
}
static setGuestToken(value = '') {
if (value) localStorage.setItem(GUEST_TOKEN_KEY, value);
else localStorage.removeItem(GUEST_TOKEN_KEY);
return value;
}
static getGuestToken() {
return localStorage.getItem(GUEST_TOKEN_KEY) || '';
}
static clearGuestToken() {
localStorage.removeItem(GUEST_TOKEN_KEY);
return '';
}
static getAuthorizationToken() {
return this.getUserToken() || this.getGuestToken() || '';
}
static getAuthorizationHeader() {
const token = this.getAuthorizationToken();
return token ? `Bearer ${token}` : '';
}
static async setMeta(key, value) {
try {
await getDb().meta.put({ key, value, updatedAt: Date.now() });
} catch (error) {
logger.warn('session meta write failed', { key, error: error?.message });
}
}
static async getMeta(key) {
try {
const row = await getDb().meta.get(key);
return row ? row.value : null;
} catch (error) {
logger.warn('session meta read failed', { key, error: error?.message });
return null;
}
}
}
export { GuestService };