/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { AuthorizationHandlerStatus, AuthorizationHandler, ActiveAuthorizationHandler, AuthorizationHandlerSettings, AuthorizationHandlerTokenOptions } from '../types'; import { TurnContext } from '../../../turnContext'; import { TokenResponse } from '../../../oauth'; declare enum Category { SIGNIN = "signin", UNKNOWN = "unknown" } /** * Active handler manager information. */ interface AzureBotActiveHandler extends ActiveAuthorizationHandler { /** * The number of attempts left for the handler to process in case of failure. */ attemptsLeft: number; /** * The current category of the handler. */ category?: Category; } /** * Messages configuration for the AzureBotAuthorization handler. */ export interface AzureBotAuthorizationOptionsMessages { /** * Message displayed when an invalid code is entered. * Use `{code}` as a placeholder for the entered code. * Defaults to: 'The code entered is invalid. Please sign-in again to continue.' */ invalidCode?: string; /** * Message displayed when the entered code format is invalid. * Use `{attemptsLeft}` as a placeholder for the number of attempts left. * Defaults to: 'Please enter a valid **6-digit** code format (_e.g. 123456_).\r\n**{attemptsLeft} attempt(s) left...**' */ invalidCodeFormat?: string; /** * Message displayed when the maximum number of attempts is exceeded. * Use `{maxAttempts}` as a placeholder for the maximum number of attempts. * Defaults to: 'You have exceeded the maximum number of sign-in attempts ({maxAttempts}).' */ maxAttemptsExceeded?: string; } /** * Settings for on-behalf-of token acquisition. */ export interface AzureBotAuthorizationOptionsOBO { /** * Connection name to use for on-behalf-of token acquisition. */ connection?: string; /** * Scopes to request for on-behalf-of token acquisition. */ scopes?: string[]; } /** * Interface defining an authorization handler configuration. */ export interface AzureBotAuthorizationOptions { /** * The type of authorization handler. * This property is optional and should not be set when configuring this handler. * It is included here for completeness and type safety. */ type?: undefined; /** * Connection name for the auth provider. * @remarks * When using environment variables, this can be set using the `${authHandlerId}_connectionName` variable. */ name?: string; /** * Title to display on auth cards/UI. * @remarks * When using environment variables, this can be set using the `${authHandlerId}_connectionTitle` variable. */ title?: string; /** * Text to display on auth cards/UI. * @remarks * When using environment variables, this can be set using the `${authHandlerId}_connectionText` variable. */ text?: string; /** * Maximum number of attempts for entering the magic code. Defaults to 2. * @remarks * When using environment variables, this can be set using the `${authHandlerId}_maxAttempts` variable. */ maxAttempts?: number; /** * Messages to display for various authentication scenarios. * @remarks * When using environment variables, these can be set using the following variables: * - `${authHandlerId}_messages_invalidCode` * - `${authHandlerId}_messages_invalidCodeFormat` * - `${authHandlerId}_messages_maxAttemptsExceeded` */ messages?: AzureBotAuthorizationOptionsMessages; /** * Settings for on-behalf-of token acquisition. * @remarks * When using environment variables, these can be set using the following variables: * - `${authHandlerId}_obo_connection` * - `${authHandlerId}_obo_scopes` (comma-separated values, e.g. `scope1,scope2`) */ obo?: AzureBotAuthorizationOptionsOBO; /** * Option to enable SSO when authenticating using Azure Active Directory (AAD). Defaults to true. */ enableSso?: boolean; } /** * Settings for configuring the AzureBot authorization handler. */ export interface AzureBotAuthorizationSettings extends AuthorizationHandlerSettings { } /** * Default implementation of an authorization handler using Azure Bot Service. */ export declare class AzureBotAuthorization implements AuthorizationHandler { readonly id: string; private settings; private _options; private _onSuccess?; private _onFailure?; /** * Creates an instance of the AzureBotAuthorization. * @param id The unique identifier for the handler. * @param options The settings for the handler. * @param app The agent application instance. */ constructor(id: string, options: AzureBotAuthorizationOptions, settings: AzureBotAuthorizationSettings); /** * Loads and validates the authorization handler options. */ private loadOptions; /** * Maximum number of attempts for magic code entry. */ private get maxAttempts(); /** * Sets a handler to be called when a user successfully signs in. * @param callback The callback function to be invoked on successful sign-in. */ onSuccess(callback: (context: TurnContext) => Promise | void): void; /** * Sets a handler to be called when a user fails to sign in. * @param callback The callback function to be invoked on sign-in failure. */ onFailure(callback: (context: TurnContext, reason?: string) => Promise | void): void; /** * Retrieves the token for the user, optionally using on-behalf-of flow for specified scopes. * @param context The turn context. * @param options Optional options for token acquisition, including connection and scopes for on-behalf-of flow. * @returns The token response containing the token or undefined if not available. */ token(context: TurnContext, options?: AuthorizationHandlerTokenOptions): Promise; /** * Signs out the user from the service. * @param context The turn context. * @returns True if the signout was successful, false otherwise. */ signout(context: TurnContext): Promise; /** * Initiates the sign-in process for the handler. * @param context The turn context. * @param active Optional active handler data. * @returns The status of the sign-in attempt. */ signin(context: TurnContext, active?: AzureBotActiveHandler): Promise; /** * Handles on-behalf-of token acquisition. */ private handleOBO; /** * Checks if a token is exchangeable for an on-behalf-of flow. */ private isExchangeable; /** * Sets the token from the token response or initiates the sign-in flow. */ private setToken; /** * Handles sign-in related activities. */ private handleSignInActivities; /** * Verifies the magic code provided by the user. */ private codeVerification; private _key; /** * Sets the authorization context in the turn state. */ private setContext; /** * Gets the authorization context from the turn state. */ private getContext; /** * Gets the user token client from the turn context. */ private getUserTokenClient; /** * Sends an InvokeResponse activity if the channel is Microsoft Teams, including Copilot within MS Teams. */ private sendInvokeResponse; /** * Prefixes a message with the handler ID. */ private prefix; /** * Predefined messages with dynamic placeholders. */ private messages; /** * Loads the OAuth scopes from the environment variables. */ private loadScopes; } export {};