import { OpenSpecHash } from "../common/OpenSpecHash.js";
export interface OS2SecurityBase {
    /**
     * The type of the security scheme
     */
    type: "basic" | "apiKey" | "oauth2";
    /**
     *
     */
    description?: string;
}
export interface OS2SecurityBasic extends OS2SecurityBase {
    type: "basic";
}
export interface OS2SecurityApiKey extends OS2SecurityBase {
    type: "apiKey";
    name: string;
    in: "query" | "header";
}
export interface OS2SecurityOAuth extends OS2SecurityBase {
    type: "oauth2";
    flow: "accessCode" | "application" | "implicit" | "password";
    /**
     * The available scopes for the OAuth2 security scheme.
     */
    scopes: OpenSpecHash<string>;
}
export interface OS2FlowImplicit extends OS2SecurityOAuth {
    type: "oauth2";
    flow: "implicit";
    authorizationUrl: string;
}
export interface OS2FlowPassword extends OS2SecurityOAuth {
    type: "oauth2";
    flow: "password";
    tokenUrl: string;
}
export interface OS2FlowApplication extends OS2SecurityOAuth {
    type: "oauth2";
    flow: "application";
    tokenUrl: string;
}
export interface OS2FlowAccessCode extends OS2SecurityOAuth {
    type: "oauth2";
    flow: "accessCode";
    tokenUrl: string;
    authorizationUrl: string;
}
export type OS2Security = OS2SecurityBasic | OS2FlowAccessCode | OS2FlowApplication | OS2FlowImplicit | OS2FlowPassword | OS2SecurityApiKey;
