import type { AuthorizationServer, Client, HttpRequestOptions, OAuth2TokenEndpointResponse } from "oauth4webapi"; import type { BaseOauthClient, Events } from "./BaseOauthClient.js"; import type { Token } from "./Token.js"; export interface LocalStorageState { refresh_token?: string; refreshTokenMarker?: string; requestedScopes?: string; } /** * Specifies where to store refresh tokens. * * - `'localStorage'`: Tokens persist across browser sessions. Best UX but vulnerable on shared devices without browser separation. * - `'sessionStorage'`: Tokens cleared when browser/tab closes. Recommended for shared devices. * - `'none'`: Tokens never stored. Users re-authenticate on every page load. */ export type TokenStorageType = "localStorage" | "sessionStorage" | "none"; export type SessionStorageState = { codeVerifier?: never state?: never oldUrl: string } | { codeVerifier: string state: string oldUrl: string } | { codeVerifier?: never state?: never oldUrl?: never }; /** * Returns the appropriate Storage object based on the storage type. * Returns undefined if storage type is 'none' or if running in Node.js (where storage APIs don't exist). * * Call this once at client initialization and pass the result to storage functions. */ export declare function getStorage(storageType: TokenStorageType): Storage | undefined; export declare function saveLocal(client: Client, x: LocalStorageState, storage: Storage | undefined): void; export declare function removeLocal(client: Client, storage: Storage | undefined): void; export declare function readLocal(client: Client, storage: Storage | undefined): LocalStorageState; export declare function saveSession(client: Client, x: SessionStorageState): void; export declare function removeSession(client: Client): void; export declare function readSession(client: Client): SessionStorageState; export declare function common Promise)>(client: Client, as: AuthorizationServer, _signIn: () => Promise, oauthHttpOptions: HttpRequestOptions, refresh: R, refreshTokenMarker: string | undefined, scopes: string, storage: Storage | undefined): { getToken: BaseOauthClient & { refresh: R } makeTokenAndSaveRefresh: (resp: OAuth2TokenEndpointResponse, type: "signIn" | "refresh") => Token }; export declare function createAuthorizationServer(ctxPath: string, url: string): Required>;