denwa-web-shared
Version:
A shared library for Next.js App Router projects containing reusable components, hooks, schemas, and utilities.
54 lines (53 loc) • 2.5 kB
TypeScript
import { SessionUser } from './session-schema';
export interface SessionConfig {
/** URL refresh-эндпоинта, например '/api-auth/v1/refresh' или '/api-rest/auth/v1/refresh' */
refreshUrl: string;
/** Домен куки (для шаринга сессии между поддоменами, например '.project.ru') */
cookieDomain?: string;
/** Не ставить Secure (для dev по http) */
isNotSecure?: boolean;
sessionCookieName?: string;
sessionTempCookieName?: string;
accessTokenCookieName?: string;
refreshTokenCookieName?: string;
}
export type InternalSessionConfig = Required<Omit<SessionConfig, 'cookieDomain' | 'isNotSecure'>> & {
cookieDomain?: string;
isNotSecure?: boolean;
};
/**
* Конфигурация сессии. Вызывается один раз при инициализации приложения:
* configureSession({ refreshUrl: '/api-rest/auth/v1/refresh' })
*/
export declare const configureSession: (config: Partial<SessionConfig>) => void;
export interface CookieOptions {
maxAgeSeconds?: number;
domain?: string;
isNotSecure?: boolean;
}
export declare const getCookieValue: (name: string) => string | null;
export declare const setCookieValue: (name: string, value: string, options?: CookieOptions) => void;
export declare const deleteCookieValue: (name: string, options?: CookieOptions) => void;
/**
* Удаляет все cookies сессии и токенов и оповещает слушателей о логауте.
*/
export declare const clearSessionCookies: (options?: CookieOptions) => void;
/**
* Полная сессия из куки с указанием имени куки (session или session-temp).
*/
export declare const getFullSessionFromCookie: () => {
cookieName: string;
data: SessionUser;
} | null;
/**
* Пользователь сессии из куки (без токенов-фолбэков).
*/
export declare const getSessionFromCookie: () => SessionUser | null;
/**
* Обновление пары токенов. Single-flight: параллельные вызовы разделяют один запрос.
*/
export declare const refreshSessionTokens: () => Promise<string | null>;
/**
* Возвращает валидный access-токен: актуальный — сразу, протухший — через refresh.
*/
export declare const getValidAccessToken: () => Promise<string | null>;