import { Middleware, TaskModuleMessageResponse, TurnContext, AppBasedLinkQuery, MessagingExtensionAction, MessagingExtensionQuery, MessagingExtensionResult, TaskModuleContinueResponse, AdaptiveCardInvokeAction } from "botbuilder-core";
export interface AdaptiveCardRequestValue {
    action: AdaptiveCardInvokeAction;
    trigger: "automatic" | "manual";
}
export interface AdaptiveCardResponseAdaptiveCardBody {
    statusCode: 200;
    type: "application/vnd.microsoft.card.adaptive";
    value: Record<string, unknown>;
}
export interface AdaptiveCardResponseMessageBody {
    statusCode: 200;
    type: "application/vnd.microsoft.activity.message";
    value: string;
}
export interface AdaptiveCardResponseInvalidRequestBody {
    statusCode: 400;
    type: "application/vnd.microsoft.error";
    value: Error;
}
export declare type AdaptiveCardResponseBody = AdaptiveCardResponseAdaptiveCardBody | AdaptiveCardResponseMessageBody | AdaptiveCardResponseInvalidRequestBody;
/**
 * Defines the processor for the Messaging Extension Middleware
 */
export interface IMessagingExtensionMiddlewareProcessor {
    /**
     * Processes incoming queries (composeExtension/query)
     * @param context the turn context
     * @param value the value of the query
     * @returns {Promise<MessagingExtensionResult>}
     */
    onQuery?(context: TurnContext, value: MessagingExtensionQuery): Promise<MessagingExtensionResult>;
    /**
     * Process incoming requests for Messaging Extension settings (composeExtension/querySettingUrl)
     * @param context the turn context
     * @returns {Promise<{ title: string, value: string }}
     */
    onQuerySettingsUrl?(context: TurnContext): Promise<{
        title: string;
        value: string;
    }>;
    /**
     * Processes incoming setting updates (composeExtension/setting)
     * @param context the turn context
     * @returns {Promise<void>}
     */
    onSettings?(context: TurnContext): Promise<void>;
    /**
     * Processes incoming link queries (composeExtension/queryLink)
     * @param context the turn context
     * @param value the value of the query
     * @returns {Promise<MessagingExtensionResult>}
     */
    onQueryLink?(context: TurnContext, value: AppBasedLinkQuery): Promise<MessagingExtensionResult>;
    /**
     * Processes incoming link actions (composeExtension/submitAction)
     * @param context the turn context
     * @param value the value of the query
     * @returns {Promise<MessagingExtensionResult>}
     */
    onSubmitAction?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult>;
    /**
     * Processes incoming link actions (composeExtension/submitAction) where the `botMessagePreviewAction` is set to `send`
     * @param context the turn context
     * @param value the value of the query
     * @returns {Promise<MessagingExtensionResult>}
     */
    onBotMessagePreviewSend?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult>;
    /**
     * Processes incoming link actions (composeExtension/submitAction) where the `botMessagePreviewAction` is set to `edit`
     * @param context the turn context
     * @param value the value of the query
     * @returns {Promise<TaskModuleContinueResponse>}
     */
    onBotMessagePreviewEdit?(context: TurnContext, value: MessagingExtensionAction): Promise<TaskModuleContinueResponse>;
    /**
     * Processes incoming fetch task actions (`composeExtension/fetchTask`)
     * @param context the turn context
     * @param value commandContext
     * @returns {Promise<MessagingExtensionResult | TaskModuleContinueResponse>} Promise object is either a `MessagingExtensionResult` for `conf` or `auth` or a `TaskModuleContinueResponse` for `message` or `continue`
     */
    onFetchTask?(context: TurnContext, value: MessagingExtensionAction): Promise<MessagingExtensionResult | TaskModuleContinueResponse | TaskModuleMessageResponse>;
    /**
     * Handles Action.Submit from adaptive cards
     *
     * Note: this is experimental and it does not filter on the commandId which means that if there are
     * multiple registered message extension processors all will receive this command. You should ensure to
     * add a specific identifier to your adaptivecard.
     * @param context the turn context
     * @param value the card data
     * @returns {Promise<void>}
     */
    onCardButtonClicked?(context: TurnContext, value: any): Promise<void>;
    /**
     * Handles when an item is selected from the result list
     *
     * Note: this is experimental and it does not filter on the commandId which means that if there are
     * multiple registered message extension processors all will receive this command. You should ensure to
     * add a specific identifier to your invoke action.
     * @param context the turn context
     * @param value object passed in to invoke action
     * @returns {Promise<MessagingExtensionResult>}
     */
    onSelectItem?(context: TurnContext, value: any): Promise<MessagingExtensionResult>;
    /**
     * Handles Universal Bot Actions
     * Examples:
     * public async onActionExecute(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody> {
     *   return {
     *     statusCode: 200,
     *     type: "application/vnd.microsoft.activity.message",
     *    value: "A message"
     *  };
     * }
     * or
     * public async onActionExecute(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody> {
     *  return {
     *    statusCode: 200,
     *    type: "application/vnd.microsoft.card.adaptive",
     *    value: adaptiveCardObject
     *  };
    *  }
     * See https://docs.microsoft.com/en-us/microsoftteams/platform/task-modules-and-cards/cards/universal-actions-for-adaptive-cards/work-with-universal-actions-for-adaptive-cards#adaptivecardaction-invoke-activity
     * @param context
     * @param value
     * @returns
     */
    onActionExecute?(context: TurnContext, value: AdaptiveCardRequestValue): Promise<AdaptiveCardResponseBody>;
}
/**
 * A Messaging Extension Middleware for Microsoft Teams
 */
export declare class MessagingExtensionMiddleware implements Middleware {
    private commandId;
    private processor;
    /**
     * Default constructor
     * @param commandId The commandId of the Messaging Extension to process,
     *                  or `undefined` to process all incoming requests
     * @param processor The processor
     */
    constructor(commandId: string | undefined, processor: IMessagingExtensionMiddlewareProcessor);
    /**
     * Bot Framework `onTurn` method
     * @param context the turn context
     * @param next the next function
     */
    onTurn(context: TurnContext, next: () => Promise<void>): Promise<void>;
}
