import { Event } from "../../../../base/common/event.js";
import { IDisposable } from "../../../../base/common/lifecycle.js";
import { IAuthorizationServerMetadata, IAuthorizationProtectedResourceMetadata } from "../../../../base/common/oauth.js";
import { URI } from "../../../../base/common/uri.js";
import { AuthenticationProviderInformation, AuthenticationSessionsChangeEvent, IAuthenticationProvider, AuthenticationSessionAccount, IAuthenticationWwwAuthenticateRequest, IAuthenticationGetSessionsOptions, AuthenticationSession, IAuthenticationCreateSessionOptions, IAuthenticationProviderHostDelegate } from "./authentication.js";
export declare const IAuthenticationService: import("../../../../platform/instantiation/common/instantiation.js").ServiceIdentifier<IAuthenticationService>;
export interface IAuthenticationService {
    readonly _serviceBrand: undefined;
    /**
    * Fires when an authentication provider has been registered
    */
    readonly onDidRegisterAuthenticationProvider: Event<AuthenticationProviderInformation>;
    /**
    * Fires when an authentication provider has been unregistered
    */
    readonly onDidUnregisterAuthenticationProvider: Event<AuthenticationProviderInformation>;
    /**
    * Fires when the list of sessions for a provider has been added, removed or changed
    */
    readonly onDidChangeSessions: Event<{
        providerId: string;
        label: string;
        event: AuthenticationSessionsChangeEvent;
    }>;
    /**
    * Fires when the list of declaredProviders has changed
    */
    readonly onDidChangeDeclaredProviders: Event<void>;
    /**
    * All providers that have been statically declared by extensions. These may not actually be registered or active yet.
    */
    readonly declaredProviders: AuthenticationProviderInformation[];
    /**
    * Registers that an extension has declared an authentication provider in their package.json
    * @param provider The provider information to register
    */
    registerDeclaredAuthenticationProvider(provider: AuthenticationProviderInformation): void;
    /**
    * Unregisters a declared authentication provider
    * @param id The id of the provider to unregister
    */
    unregisterDeclaredAuthenticationProvider(id: string): void;
    /**
    * Checks if an authentication provider has been registered
    * @param id The id of the provider to check
    */
    isAuthenticationProviderRegistered(id: string): boolean;
    /**
    * Checks if an authentication provider is dynamic
    * @param id The id of the provider to check
    */
    isDynamicAuthenticationProvider(id: string): boolean;
    /**
    * Registers an authentication provider
    * @param id The id of the provider
    * @param provider The implementation of the provider
    */
    registerAuthenticationProvider(id: string, provider: IAuthenticationProvider): void;
    /**
    * Unregisters an authentication provider
    * @param id The id of the provider to unregister
    */
    unregisterAuthenticationProvider(id: string): void;
    /**
    * Gets the provider ids of all registered authentication providers
    */
    getProviderIds(): string[];
    /**
    * Gets the provider with the given id.
    * @param id The id of the provider to get
    * @throws if the provider is not registered
    */
    getProvider(id: string): IAuthenticationProvider;
    /**
    * Gets all accounts that are currently logged in across all sessions
    * @param id The id of the provider to ask for accounts
    * @returns A promise that resolves to an array of accounts
    */
    getAccounts(id: string): Promise<ReadonlyArray<AuthenticationSessionAccount>>;
    /**
    * Gets all sessions that satisfy the given scopes from the provider with the given id
    * @param id The id of the provider to ask for a session
    * @param scopes The scopes for the session
    * @param options Additional options for getting sessions
    * @param activateImmediate If true, the provider should activate immediately if it is not already
    */
    getSessions(id: string, scopeListOrRequest?: ReadonlyArray<string> | IAuthenticationWwwAuthenticateRequest, options?: IAuthenticationGetSessionsOptions, activateImmediate?: boolean): Promise<ReadonlyArray<AuthenticationSession>>;
    /**
    * Creates an AuthenticationSession with the given provider and scopes
    * @param providerId The id of the provider
    * @param scopes The scopes to request
    * @param options Additional options for creating the session
    */
    createSession(providerId: string, scopeListOrRequest: ReadonlyArray<string> | IAuthenticationWwwAuthenticateRequest, options?: IAuthenticationCreateSessionOptions): Promise<AuthenticationSession>;
    /**
    * Removes the session with the given id from the provider with the given id
    * @param providerId The id of the provider
    * @param sessionId The id of the session to remove
    */
    removeSession(providerId: string, sessionId: string): Promise<void>;
    /**
    * Gets a provider id for a specified authorization server
    * @param authorizationServer The authorization server url that this provider is responsible for
    */
    getOrActivateProviderIdForServer(authorizationServer: URI): Promise<string | undefined>;
    /**
    * Allows the ability register a delegate that will be used to start authentication providers
    * @param delegate The delegate to register
    */
    registerAuthenticationProviderHostDelegate(delegate: IAuthenticationProviderHostDelegate): IDisposable;
    /**
    * Creates a dynamic authentication provider for the given server metadata
    * @param serverMetadata The metadata for the server that is being authenticated against
    */
    createDynamicAuthenticationProvider(authorizationServer: URI, serverMetadata: IAuthorizationServerMetadata, resourceMetadata: IAuthorizationProtectedResourceMetadata | undefined): Promise<IAuthenticationProvider | undefined>;
}
export declare const IAuthenticationExtensionsService: import("../../../../platform/instantiation/common/instantiation.js").ServiceIdentifier<IAuthenticationExtensionsService>;
export interface IAuthenticationExtensionsService {
    readonly _serviceBrand: undefined;
    /**
    * Fires when an account preference for a specific provider has changed for the specified extensions. Does not fire when:
    * * An account preference is removed
    * * A session preference is changed (because it's deprecated)
    * * A session preference is removed (because it's deprecated)
    */
    readonly onDidChangeAccountPreference: Event<{
        extensionIds: string[];
        providerId: string;
    }>;
    /**
    * Returns the accountName (also known as account.label) to pair with `IAuthenticationAccessService` to get the account preference
    * @param providerId The authentication provider id
    * @param extensionId The extension id to get the preference for
    * @returns The accountName of the preference, or undefined if there is no preference set
    */
    getAccountPreference(extensionId: string, providerId: string): string | undefined;
    /**
    * Sets the account preference for the given provider and extension
    * @param providerId The authentication provider id
    * @param extensionId The extension id to set the preference for
    * @param account The account to set the preference to
    */
    updateAccountPreference(extensionId: string, providerId: string, account: AuthenticationSessionAccount): void;
    /**
    * Removes the account preference for the given provider and extension
    * @param providerId The authentication provider id
    * @param extensionId The extension id to remove the preference for
    */
    removeAccountPreference(extensionId: string, providerId: string): void;
    /**
    * @deprecated Sets the session preference for the given provider and extension
    * @param providerId
    * @param extensionId
    * @param session
    */
    updateSessionPreference(providerId: string, extensionId: string, session: AuthenticationSession): void;
    /**
    * @deprecated Gets the session preference for the given provider and extension
    * @param providerId
    * @param extensionId
    * @param scopes
    */
    getSessionPreference(providerId: string, extensionId: string, scopes: string[]): string | undefined;
    /**
    * @deprecated Removes the session preference for the given provider and extension
    * @param providerId
    * @param extensionId
    * @param scopes
    */
    removeSessionPreference(providerId: string, extensionId: string, scopes: string[]): void;
    selectSession(providerId: string, extensionId: string, extensionName: string, scopeListOrRequest: ReadonlyArray<string> | IAuthenticationWwwAuthenticateRequest, possibleSessions: readonly AuthenticationSession[]): Promise<AuthenticationSession>;
    requestSessionAccess(providerId: string, extensionId: string, extensionName: string, scopeListOrRequest: ReadonlyArray<string> | IAuthenticationWwwAuthenticateRequest, possibleSessions: readonly AuthenticationSession[]): void;
    requestNewSession(providerId: string, scopeListOrRequest: ReadonlyArray<string> | IAuthenticationWwwAuthenticateRequest, extensionId: string, extensionName: string): Promise<void>;
    updateNewSessionRequests(providerId: string, addedSessions: readonly AuthenticationSession[]): void;
}
