import * as axios from 'axios';
import { C as Cache$1 } from '../cache-Bxhh3lYR.cjs';

type Cache = Cache$1;
/**
 * @class Authentication
 * @classdesc Provides methods to handle authentication and token management with the Sonatel API Platform.
 * Utilizes caching to store tokens and optimizes API requests by reducing unnecessary network calls.
 *
 * Supports dependency injection for testability — pass dependencies via constructor,
 * or use the {@link Authentication.init} factory for default behavior.
 *
 * @example
 * // Default usage (backward compatible)
 * const authentication = Authentication.init();
 * const { access_token } = await authentication.debug();
 *
 * @example
 * // With dependency injection (for testing)
 * const authentication = new Authentication({ config, cache: mockCache, client: mockAxios, logger: mockLogger });
 *
 * @typedef {import('../core/cache.js').default} Cache
 */
declare class Authentication {
    /**
     * Factory method to initialize Authentication with default dependencies.
     * @memberof Service\Authentication
     * @method init
     * @returns {Authentication} An initialized instance of Authentication.
     */
    static init(): Authentication;
    /**
     * Creates an Authentication instance with injectable dependencies.
     *
     * @param {object} deps - Dependencies for the authentication service.
     * @param {object} deps.config - Apigee configuration (client_id, client_secret, urls, etc.).
     * @param {Cache} deps.cache - Cache instance for token storage.
     * @param {import('axios').AxiosInstance} deps.client - HTTP client instance.
     * @param {object} deps.logger - Logger instance with error/warn/info/debug methods.
     */
    constructor({ config, cache, client, logger }: {
        config: object;
        cache: Cache;
        client: axios.AxiosInstance;
        logger: object;
    });
    /**
     * Authenticates against the Sonatel API Platform using the client credentials flow.
     * Caches the access token to reduce redundant authentication calls.
     *
     * @async
     * @method debug
     * @memberof Service\Authentication
     * @returns {Promise<{ access_token: string, expires_in: number, refresh_expires_in: number, token_type: string, notbefore_policy: number, session_state: string }>}
     * @throws {AuthenticationError} When authentication fails.
     *
     * @example
     * authentication.debug()
     *   .then(console.log)
     *   .catch(({ message }) => console.log(`Failed: ${message}`))
     */
    debug(): Promise<{
        access_token: string;
        expires_in: number;
        refresh_expires_in: number;
        token_type: string;
        notbefore_policy: number;
        session_state: string;
    }>;
    #private;
}

export { Authentication };
