import { Extensions } from './extensions';
import { ParameterLocation } from './http-operation';
import { Dictionary } from '@azure-tools/linq';
import { DeepPartial } from '@azure-tools/codegen';
export declare enum Scheme {
    Bearer = "bearer"
}
export declare enum SecurityType {
    ApiKey = "apiKey",
    Http = "http",
    OAuth2 = "oauth2",
    OpenIDConnect = "openIdConnect"
}
export declare class APIKeySecurityScheme extends Extensions implements APIKeySecurityScheme {
    name: string;
    extensions: Dictionary<any>;
    constructor(name: string, inWhere: ParameterLocation, initializer?: DeepPartial<APIKeySecurityScheme>);
}
export declare class BearerHTTPSecurityScheme extends Extensions implements BearerHTTPSecurityScheme {
    extensions: Dictionary<any>;
    scheme: Scheme;
    constructor(initializer?: DeepPartial<BearerHTTPSecurityScheme>);
}
export declare class ImplicitOAuthFlow extends Extensions implements ImplicitOAuthFlow {
    authorizationUrl: string;
    extensions: Dictionary<any>;
    scopes: Dictionary<string>;
    constructor(authorizationUrl: string, initializer?: DeepPartial<ImplicitOAuthFlow>);
}
export declare class NonBearerHTTPSecurityScheme extends Extensions implements NonBearerHTTPSecurityScheme {
    scheme: string;
    extensions: Dictionary<any>;
    constructor(scheme: string, initializer?: DeepPartial<NonBearerHTTPSecurityScheme>);
}
export declare class OAuth2SecurityScheme extends Extensions implements OAuth2SecurityScheme {
    flows: OAuthFlows;
    extensions: Dictionary<any>;
    constructor(flows: OAuthFlows, initializer?: DeepPartial<OAuth2SecurityScheme>);
}
export declare class OAuthFlows extends Extensions implements OAuthFlows {
    extensions: Dictionary<any>;
    constructor(initializer?: DeepPartial<OAuthFlows>);
}
export interface OpenIdConnectSecurityScheme extends Extensions {
    type: SecurityType.OpenIDConnect;
    openIdConnectUrl: string;
    description?: string;
}
export declare class OpenIdConnectSecurityScheme extends Extensions implements OpenIdConnectSecurityScheme {
    openIdConnectUrl: string;
    extensions: Dictionary<any>;
    constructor(openIdConnectUrl: string, initializer?: DeepPartial<OpenIdConnectSecurityScheme>);
}
export interface PasswordOAuthFlow extends Extensions {
    tokenUrl: string;
    refreshUrl?: string;
    scopes: Dictionary<string>;
}
export declare class PasswordOAuthFlow extends Extensions implements PasswordOAuthFlow {
    tokenUrl: string;
    extensions: Dictionary<any>;
    scopes: Dictionary<string>;
    constructor(tokenUrl: string, initializer?: DeepPartial<PasswordOAuthFlow>);
}
export type HTTPSecurityScheme = NonBearerHTTPSecurityScheme | BearerHTTPSecurityScheme;
export type SecurityScheme = APIKeySecurityScheme | HTTPSecurityScheme | OAuth2SecurityScheme | OpenIdConnectSecurityScheme;
export interface APIKeySecurityScheme extends Extensions {
    type: SecurityType.ApiKey;
    name: string;
    in: ParameterLocation;
    description?: string;
}
export declare class AuthorizationCodeOAuthFlow extends Extensions implements AuthorizationCodeOAuthFlow {
    authorizationUrl: string;
    extensions: Dictionary<any>;
    scopes: Dictionary<string>;
    constructor(authorizationUrl: string, tokenUrl: string, initializer?: DeepPartial<AuthorizationCodeOAuthFlow>);
}
export declare class ClientCredentialsFlow extends Extensions implements ClientCredentialsFlow {
    tokenUrl: string;
    extensions: Dictionary<any>;
    scopes: Dictionary<string>;
    constructor(tokenUrl: string, initializer?: DeepPartial<ClientCredentialsFlow>);
}
export interface AuthorizationCodeOAuthFlow extends Extensions {
    authorizationUrl: string;
    tokenUrl: string;
    refreshUrl?: string;
    scopes: Dictionary<string>;
}
export interface BearerHTTPSecurityScheme extends Extensions {
    scheme: Scheme.Bearer;
    bearerFormat?: string;
    type: SecurityType.Http;
    description?: string;
}
export interface ClientCredentialsFlow extends Extensions {
    tokenUrl: string;
    refreshUrl?: string;
    scopes: Dictionary<string>;
}
export interface ImplicitOAuthFlow extends Extensions {
    authorizationUrl: string;
    refreshUrl?: string;
    scopes: Dictionary<string>;
}
export interface NonBearerHTTPSecurityScheme extends Extensions {
    scheme: string;
    description?: string;
    type: SecurityType.Http;
}
export interface OAuth2SecurityScheme extends Extensions {
    type: SecurityType.OAuth2;
    flows: OAuthFlows;
    description?: string;
}
export interface OAuthFlows extends Extensions {
    implicit?: ImplicitOAuthFlow;
    password?: PasswordOAuthFlow;
    clientCredentials?: ClientCredentialsFlow;
    authorizationCode?: AuthorizationCodeOAuthFlow;
}
//# sourceMappingURL=security-scheme.d.ts.map