import { CoreModelDefinition, CryptoService, RequestFilter, Service, ServiceParameters, WebContext } from "@webda/core";
import { ApiKey } from "./apikey.js";
/**
 * Hawk Credentials representation
 */
export interface HawkCredentials {
    id: string;
    key: string;
    algorithm: string;
}
/**
 * Contains the hawk context
 */
export interface HawkContext {
    artifacts: any;
    credentials: any;
}
/**
 *
 */
export declare class HawkServiceParameters extends ServiceParameters {
    /**
     * Key model
     */
    keyModel?: string;
    /**
     * If specified will verify the signature match the key store in session
     */
    dynamicSessionKey?: string;
    /**
     * redirect endpoint
     * @param params
     */
    redirectUrl?: string;
    /**
     * Allowed redirection with CSRF
     */
    redirectUris?: string[];
    /**
     * @inheritdoc
     */
    constructor(params: any);
}
/**
 * Verify signature and sign server
 *
 * Implementation of hawk protocol
 * https://github.com/mozilla/hawk#readme
 *
 * @WebdaModda Hawk
 */
export default class HawkService extends Service<HawkServiceParameters> implements RequestFilter {
    static RegistryEntry: string;
    /**
     * CryptoService
     */
    protected cryptoService: CryptoService;
    /**
     * Model to use for apikey
     */
    model: CoreModelDefinition<ApiKey>;
    /**
     * @inheritdoc
     */
    loadParameters(params: any): HawkServiceParameters;
    /**
     *
     * @param id
     * @param _timestamp used to invalidate cache
     * @returns
     */
    getApiKey(id: any, _timestamp?: any): Promise<HawkCredentials>;
    /**
     * Return information for hawk
     */
    getHawkRequest(context: WebContext): Promise<{
        method: import("@webda/core").HttpMethodType;
        url: string;
        host: string;
        port: number;
        authorization: string;
        payload: string | Buffer;
        contentType: string;
    }>;
    /**
     * Add the Request listeners
     */
    init(): Promise<this>;
    /**
     * Redirect with a CSRF
     * @param context
     */
    _redirect(context: WebContext): Promise<void>;
    /**
     * Redirect to a website with CSRF
     */
    redirectWithCSRF(context: WebContext, url: string): Promise<void>;
    getOrigins(): Promise<any>;
    checkOPTIONS(origin: string): Promise<boolean>;
    /**
     * Stricly parse the request's attributes and then approve or reject
     * @param {Context} context
     * @returns {Promise<boolean>}
     */
    checkRequest(context: WebContext): Promise<boolean>;
}
export { HawkService };
