100 lines
2.4 KiB
TypeScript

import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
/**
* Service for managing session storage operations.
* Provides methods to store, retrieve, and remove data from sessionStorage.
*/
export class SessionStorageService {
constructor() {}
/**
* Stores a secret associated with a participant role for a specific room.
*
* @param roomId The room ID.
* @param secret The secret to store.
*/
public setRoomSecret(roomId: string, secret: string): void {
this.set(`room_secret_${roomId}`, secret);
}
/**
* Retrieves the room secret for a specific room.
*
* @param roomId The room ID.
* @returns The stored secret or null if not found.
*/
public getRoomSecret(roomId: string): string | null {
return this.get<string>(`room_secret_${roomId}`) ?? null;
}
/**
* Removes the room secret for a specific room.
*
* @param roomId The room ID.
*/
public removeRoomSecret(roomId: string): void {
this.remove(`room_secret_${roomId}`);
}
/**
* Stores a redirect URL to be used after leaving OpenVidu Meet.
*
* @param redirectUrl The URL to redirect to.
*/
public setRedirectUrl(redirectUrl: string): void {
this.set('redirect_url', redirectUrl);
}
/**
* Retrieves the redirect URL stored in sessionStorage.
*
* @returns The redirect URL or null if not found.
*/
public getRedirectUrl(): string | null {
return this.get<string>('redirect_url') ?? null;
}
/**
* Clears all data stored in sessionStorage.
*/
public clear(): void {
sessionStorage.clear();
}
/**
* Stores a value in sessionStorage.
* The value is converted to a JSON string before saving.
*
* @param key The key under which the value will be stored.
* @param value The value to be stored (any type).
*/
protected set(key: string, value: any): void {
const jsonValue = JSON.stringify(value);
sessionStorage.setItem(key, jsonValue);
}
/**
* Retrieves a value from sessionStorage.
* The value is parsed from JSON back to its original type.
*
* @param key The key of the item to retrieve.
* @returns The stored value or null if the key does not exist.
*/
protected get<T>(key: string): T | null {
const jsonValue = sessionStorage.getItem(key);
return jsonValue ? (JSON.parse(jsonValue) as T) : null;
}
/**
* Removes a specific item from sessionStorage.
*
* @param key The key of the item to remove.
*/
protected remove(key: string): void {
sessionStorage.removeItem(key);
}
}