type Next = (token: string) => void;
type GetState<S> = () => S;
type SetState<S> = (state: S) => void;
type OnReceiveMeessagePayload<S> = {
    event: MessageEvent;
    next: Next;
    getState: GetState<S>;
    setState: SetState<S>;
};
type DefaultTokenPayload<S> = {
    result: Result;
    getState: GetState<S>;
    setState: SetState<S>;
};
type OnAcquiredTokenPayload<S> = DefaultTokenPayload<S>;
type OnDroppedTokenPayload<S> = DefaultTokenPayload<S> & {
    next: Next;
};
type OnExpiredTokenPayload<S> = DefaultTokenPayload<S> & {
    next: Next;
};
type OnInvalidTokenPayload<S> = DefaultTokenPayload<S> & {
    next: Next;
};
export type ResultStatusCode = 'SUCCEED' | 'EXPIRED' | 'NOT_JWT' | 'NOT_JSON' | 'NOT_ANY' | 'EMPTY';
export type Result = {
    statusCode: ResultStatusCode;
    accessToken: string;
    parsedToken: null | {
        exp?: number;
        [key: string]: any;
    };
    expiredIn: number;
    isInitialTime: boolean;
};
export type State<S = any> = S;
export type Option<S = any> = {
    type?: 'JWT' | 'JSON';
    storageTokenName: string;
    isProvidedFromPostMessage?: boolean;
    isShowLog?: boolean;
    notifyExpiredInHour?: number;
    expiredName?: string;
    expiredIn?: number;
    isInvokeExpiredEvent?: boolean;
    initialState?: State<S>;
    onReceiveMessage?(payload: OnReceiveMeessagePayload<S>): void;
    onAcquiredToken(payload: OnAcquiredTokenPayload<S>): void;
    onDroppedToken(payload: OnDroppedTokenPayload<S>): void;
    onExpiredToken(payload: OnExpiredTokenPayload<S>): void;
    onInvalidToken(payload: OnInvalidTokenPayload<S>): void;
};
export declare function initialize<S>(authOption: Option<S>): void;
export declare function destroy(): void;
export declare function saveToken(key: string, value: string, expiredIn: number): void;
export {};
