/// <reference types="node" />
import { IncomingMessage } from 'http';
import { AuthorizationParameters as OidcAuthorizationParameters } from 'openid-client';
import { LoginOptions, DeepPartial } from './zsession';
/**
 * @category server
 */
export interface BaseConfig {
    /**F
     * The secret(s) used to derive an encryption key for the user identity in a session cookie and
     * to sign the transient cookies used by the login callback.
     * Use a single string key or array of keys for an encrypted session cookie.
     * You can also use the ZIDENTITY_SECRET environment variable.
     */
    secret: string | Array<string>;
    /**
     * Object defining application session cookie attributes.
     */
    session: SessionConfig;
    /**
     * Boolean value to enable Zeus Identity's proprietary logout feature.
     * Since this SDK is for Zeus Identity, it's set to `true`by default.
     */
    zIdentityLogout: boolean;
    /**
     *  URL parameters used when redirecting users to the authorization server to log in.
     *
     *  If this property is not provided by your application, its default values will be:
     *
     * ```js
     * {
     *   response_type: 'code',
     *   scope: 'openid profile email'
     * }
     * ```
     *
     * New values can be passed in to change what is returned from the authorization server
     * depending on your specific scenario. Additional custom parameters can be added as well.
     *
     * **Note:** You must provide the required parameters if this object is set.
     *
     * ```js
     * {
     *   response_type: 'code',
     *   scope: 'openid profile email',
     *
     *   // Additional parameters
     *   acr_value: "tenant:test-tenant",
     *   custom_param: "custom-value"
     * };
     * ```
     */
    authorizationParams: AuthorizationParameters;
    /**
     * The root URL for the application router, eg https://localhost
     * You can also use the ZIDENTITY_BASE_URL environment variable.
     * If you provide a domain, we will prefix it with `https://` - This can be useful when assigning it to
     * `VERCEL_URL` for Vercel deploys
     */
    baseURL: string;
    /**
     * The Client ID for your application.
     * You can also use the ZIDENTITY_CLIENT_ID environment variable.
     */
    clientID: string;
    /**
     * The Client Secret for your application.
     * Required when requesting access tokens.
     * You can also use the ZIDENTITY_CLIENT_SECRET environment variable.
     */
    clientSecret?: string;
    /**
     * Integer value for the system clock's tolerance (leeway) in seconds for ID token verification.`
     * Default is 60
     * You can also use the ZIDENTITY_CLOCK_TOLERANCE environment variable.
     */
    clockTolerance: number;
    /**
     * Integer value for the http timeout in ms for authentication requests.
     * Default is 5000
     * You can also use the ZIDENTITY_HTTP_TIMEOUT environment variable.
     */
    httpTimeout: number;
    /**
     * To opt-out of sending the library and node version to your authorization server
     * via the `Zeus Identity-Client` header. Default is `true
     * You can also use the ZIDENTITY_ENABLE_TELEMETRY environment variable.
     */
    enableTelemetry: boolean;
    /**
     * Function that returns an object with URL-safe state values for login.
     * Used for passing custom state parameters to your authorization server.
     * Can also be passed in to {@link HandleLogin}
     *
     * ```js
     * {
     *   ...
     *   getLoginState(req, options) {
     *     return {
     *       returnTo: options.returnTo || req.originalUrl,
     *       customState: 'foo'
     *     };
     *   }
     * }
     * ``
     */
    getLoginState: (req: IncomingMessage, options: LoginOptions) => Record<string, any>;
    /**
     * Array value of claims to remove from the ID token before storing the cookie session.
     * Default is `['aud', 'iss', 'iat', 'exp', 'nbf', 'nonce', 'azp', 'auth_time', 's_hash', 'at_hash', 'c_hash' ]`
     */
    identityClaimFilter: string[];
    /**
     * Boolean value to log the user out from the identity provider on application logout. Default is `true`
     * You can also use the ZIDENTITY_IDP_LOGOUT environment variable.
     */
    idpLogout: boolean;
    /**
     * String value for the expected ID token algorithm. Default is 'RS256'
     * You can also use the ZIDENTITY_ID_TOKEN_SIGNING_ALG environment variable.
     */
    idTokenSigningAlg: string;
    /**
     * REQUIRED. The root URL for the token issuer with no trailing slash.
     * This is `https://` plus your Zeus Identity domain
     * You can also use the ZIDENTITY_ISSUER_BASE_URL environment variable.
     */
    issuerBaseURL: string;
    /**
     * Set a fallback cookie with no `SameSite` attribute when `response_mode` is `form_post`.
     * The default `response_mode` for this SDK is `query` so this defaults to `false`
     * You can also use the ZIDENTITY_LEGACY_SAME_SITE_COOKIE environment variable.
     */
    legacySameSiteCookie: boolean;
    /**
     * Boolean value to automatically install the login and logout routes.
     */
    routes: {
        /**
         * Either a relative path to the application or a valid URI to an external domain.
         * This value must be registered on the authorization server.
         * The user will be redirected to this after a logout has been performed.
         * You can also use the ZIDENTITY_POST_LOGOUT_REDIRECT environment variable.
         */
        postLogoutRedirect: string;
        /**
         * Relative path to the application callback to process the response from the authorization server.
         * Defaults to `/api/auth/callback`
         * You can also use the ZIDENTITY_CALLBACK environment variable.
         */
        callback: string;
    };
}
/**
 * Configuration parameters used for the application session.
 *
 * @category Server
 */
export interface SessionConfig {
    /**
     * String value for the cookie name used for the internal session.
     * This value must only include letters, numbers, and underscores.
     * Default is `appSession`.
     * You can also use the ZIDENTITY_SESSION_NAME environment variable.
     */
    name: string;
    /**
     * If you want your session duration to be rolling, eg reset everytime the
     * user is active on your site, set this to a `true`. If you want the session
     * duration to be absolute, where the user is logged out a fixed time after login,
     * regardless of activity, set this to `false`
     * Default is `true`.
     * You can also use the ZIDENTITY_SESSION_ROLLING environment variable.
     */
    rolling: boolean;
    /**
     * Integer value, in seconds, for application session rolling duration.
     * The amount of time for which the user must be idle for then to be logged out.
     * Default is 86400 seconds (1 day).
     * You can also use the ZIDENTITY_SESSION_ROLLING_DURATION environment variable.
     */
    rollingDuration: number;
    /**
     * Integer value, in seconds, for application absolute rolling duration.
     * The amount of time after the user has logged in that they will be logged out.
     * Set this to `false` if you don't want an absolute duration on your session.
     * Default is 604800 seconds (7 days).
     * You can also use the ZIDENTITY_SESSION_ABSOLUTE_DURATION environment variable.
     */
    absoluteDuration: boolean | number;
    cookie: CookieConfig;
}
/**
 * Configure how the session cookie and transient cookies are stored.
 *
 * @category Server
 */
export interface CookieConfig {
    /**
     * Domain name for the cookie.
     * You can also use the ZIDENTITY_COOKIE_DOMAIN environment variable.
     */
    domain?: string;
    /**
     * Path for the cookie.
     * This defaults to `/`
     * You should change this to be more restrictive if you application shares a domain with other apps.
     * You can also use the ZIDENTITY_COOKIE_PATH environment variable.
     */
    path?: string;
    /**
     * Set to true to use a transient cookie (cookie without an explicit expiration).
     * Default is `false`
     * You can also use the ZIDENTITY_COOKIE_TRANSIENT environment variable.
     */
    transient: boolean;
    /**
     * Flags the cookie to be accessible only by the web server.
     * Defaults to `true`.
     * You can also use the ZIDENTITY_COOKIE_HTTP_ONLY environment variable.
     */
    httpOnly: boolean;
    /**
     * Marks the cookie to be used over secure channels only.
     * Defaults to the protocol of {@link BaseConfig.baseURL}.
     * You can also use the ZIDENTITY_COOKIE_SECURE environment variable.
     */
    secure?: boolean;
    /**
     * Value of the SameSite Set-Cookie attribute.
     * Defaults to "lax" but will be adjusted based on {@link AuthorizationParameters.response_type}.
     * You can also use the ZIDENTITY_COOKIE_SAME_SITE environment variable.
     */
    sameSite: 'lax' | 'strict' | 'none';
}
/**
 * Authorization parameters that will be passed to the identity provider on login.
 *
 * The library uses `response_mode: 'query'` and `response_type: 'code'` (with PKCE) by default.
 *
 * @category Server
 */
export interface AuthorizationParameters extends OidcAuthorizationParameters {
    scope: string;
    response_mode: 'query' | 'form_post';
    response_type: 'id_token' | 'code id_token' | 'code';
}
/**
 * @category server
 */
export interface NextConfig extends Pick<BaseConfig, 'identityClaimFilter'> {
    /**
     * Log users in to a specific organization.
     *
     * This will specify an `organization` parameter in your user's login request and will add a step to validate
     * the `org_id` claim in your user's ID Token.
     *
     * If your app supports multiple organizations, you should take a look at {@Link AuthorizationParams.organization}
     */
    organization?: string;
    routes: {
        login: string;
    };
}
/**
 * ## Configuration properties.
 *
 * The Server part of the SDK can be configured in 2 ways.
 *
 * ### 1. Environmental Variables
 *
 * The simplest way to use the SDK is to use the named exports ({@link HandleAuth}, {@link HandleLogin},
 * {@link HandleLogout}, {@link HandleCallback}, {@link HandleProfile}, {@link GetSession}, {@link GetAccessToken},
 * {@link WithApiAuthRequired} and {@link WithPageAuthRequired}), eg:
 *
 * ```js
 * // pages/api/auth/[...zidentity].js
 * import { handleAuth } from '@zeushq/nextjs-zidentity';
 *
 * return handleAuth();
 * ```
 *
 * When you use these named exports, an instance of the SDK is created for you which you can configure using
 * environmental variables:
 *
 * ### Required
 *
 * - `ZIDENTITY_SECRET`: See {@link secret}
 * - `ZIDENTITY_ISSUER_BASE_URL`: See {@link issuerBaseURL}
 * - `ZIDENTITY_BASE_URL`: See {@link baseURL}
 * - `ZIDENTITY_CLIENT_ID`: See {@link clientID}
 * - `ZIDENTITY_CLIENT_SECRET`: See {@link clientSecret}
 *
 * ### Optional
 *
 * - `ZIDENTITY_CLOCK_TOLERANCE`: See {@link clockTolerance}
 * - `ZIDENTITY_HTTP_TIMEOUT`: See {@link httpTimeout}
 * - `ZIDENTITY_ENABLE_TELEMETRY`: See {@link enableTelemetry}
 * - `ZIDENTITY_IDP_LOGOUT`: See {@link idpLogout}
 * - `ZIDENTITY_ID_TOKEN_SIGNING_ALG`: See {@link idTokenSigningAlg}
 * - `ZIDENTITY_LEGACY_SAME_SITE_COOKIE`: See {@link legacySameSiteCookie}
 * - `NEXT_PUBLIC_ZIDENTITY_LOGIN`: See {@link NextConfig.routes}
 * - `ZIDENTITY_CALLBACK`: See {@link BaseConfig.routes}
 * - `ZIDENTITY_POST_LOGOUT_REDIRECT`: See {@link BaseConfig.routes}
 * - `ZIDENTITY_AUDIENCE`: See {@link BaseConfig.authorizationParams}
 * - `ZIDENTITY_SCOPE`: See {@link BaseConfig.authorizationParams}
 * - `ZIDENTITY_ORGANIZATION`: See {@link NextConfig.organization}
 * - `ZIDENTITY_SESSION_NAME`: See {@link SessionConfig.name}
 * - `ZIDENTITY_SESSION_ROLLING`: See {@link SessionConfig.rolling}
 * - `ZIDENTITY_SESSION_ROLLING_DURATION`: See {@link SessionConfig.rollingDuration}
 * - `ZIDENTITY_SESSION_ABSOLUTE_DURATION`: See {@link SessionConfig.absoluteDuration}
 * - `ZIDENTITY_COOKIE_DOMAIN`: See {@link CookieConfig.domain}
 * - `ZIDENTITY_COOKIE_PATH`: See {@link CookieConfig.path}
 * - `ZIDENTITY_COOKIE_TRANSIENT`: See {@link CookieConfig.transient}
 * - `ZIDENTITY_COOKIE_HTTP_ONLY`: See {@link CookieConfig.httpOnly}
 * - `ZIDENTITY_COOKIE_SECURE`: See {@link CookieConfig.secure}
 * - `ZIDENTITY_COOKIE_SAME_SITE`: See {@link CookieConfig.sameSite}
 *
 * ### 2. Create your own instance using {@link InitZeusIdentity}
 *
 * If you don't want to configure the SDK with environment variables or you want more fine grained control over the
 * instance, you can create an instance yourself and use the handlers and helpers from that.
 *
 * First, export your configured instance from another module:
 *
 * ```js
 * // utils/zidentity.js
 * import { InitZeusIdentity } from '@zeushq/nextjs-zidentity';
 *
 * export default InitZeusIdentity({ ...ConfigParameters... });
 * ```
 *
 * Then import it into your route handler:
 *
 * ```js
 * // pages/api/auth/[...zidentity].js
 * import zidentity from '../../../../utils/zidentity';
 *
 * return zidentity.handleAuth();
 * ```
 *
 * **Note** If you use {@link InitZeusIdentity}, you should *not* use the other named exports as they
 * will use a different instance of the SDK.
 *
 * @category Server
 */
export declare type ConfigParameters = DeepPartial<BaseConfig & NextConfig>;
/**
 * @ignore
 */
export declare const getLoginUrl: () => string;
/**
 * @ignore
 */
export declare const getConfig: (params?: ConfigParameters) => {
    baseConfig: BaseConfig;
    nextConfig: NextConfig;
};
//# sourceMappingURL=config.d.ts.map