import { CloudEvent } from "../../core";
import { HttpsFunction, HttpsError, FunctionsErrorCode } from "../https";
import { EventHandlerOptions } from "../../options";
import { Expression } from "../../../params";
import { ResetValue } from "../../../common/options";
export { HttpsError };
export declare const rpcCodeMap: Record<FunctionsErrorCode, number>;
import { type GenerateContentRequest as VertexV1Beta1GenerateContentRequest, type GenerateContentResponse as VertexV1Beta1GenerateContentResponse } from "./types/vertex/v1beta1";
import { type GenerateContentRequest as GeminiV1BetaGenerateContentRequest, type GenerateContentResponse as GeminiV1BetaGenerateContentResponse } from "./types/gemini/v1beta";
export { type VertexV1Beta1GenerateContentRequest, type VertexV1Beta1GenerateContentResponse, type GeminiV1BetaGenerateContentRequest, type GeminiV1BetaGenerateContentResponse, };
type MultipleLocationsIf<Allowed extends boolean> = Allowed extends true ? string[] : never;
export interface WebhookOptions<Regional extends boolean = false> extends Omit<EventHandlerOptions, "location"> {
    location?: string | Expression<string> | MultipleLocationsIf<Regional> | ResetValue;
    regionalWebhook?: Regional;
}
export interface PromptTemplateInfo {
    templateName?: string;
}
export type AuthType = "app_user" | "unauthenticated" | "unknown";
export declare const beforeGenerateEventType = "google.firebase.ailogic.v1.beforeGenerate";
export declare const afterGenerateEventType = "google.firebase.ailogic.v1.afterGenerate";
export type AnyValidAIRequest = GeminiV1BetaGenerateContentRequest | VertexV1Beta1GenerateContentRequest;
export type AnyValidAIResponse = GeminiV1BetaGenerateContentResponse | VertexV1Beta1GenerateContentResponse;
export declare const geminiV1Beta = "google.ai.generativelanguage.v1beta";
export declare const vertexV1Beta1 = "google.cloud.aiplatform.v1beta1";
export type SupportedAPI = typeof geminiV1Beta | typeof vertexV1Beta1;
export type AIRequest<API> = string extends API ? AnyValidAIRequest : API extends typeof geminiV1Beta ? GeminiV1BetaGenerateContentRequest : API extends typeof vertexV1Beta1 ? VertexV1Beta1GenerateContentRequest : never;
export type AIResponse<API> = string extends API ? AnyValidAIResponse : API extends typeof geminiV1Beta ? GeminiV1BetaGenerateContentResponse : API extends typeof vertexV1Beta1 ? VertexV1Beta1GenerateContentResponse : never;
export interface BeforeGenerateContentData<API extends string = string> {
    model: string;
    template?: PromptTemplateInfo;
    api: SupportedAPI;
    request: AIRequest<API>;
}
export interface AfterGenerateContentData<API extends string = string> extends BeforeGenerateContentData<API> {
    response: AIResponse<API>;
}
export interface AIBlockingEvent<T = any> extends CloudEvent<T> {
    authType: AuthType;
    authId?: string;
    authClaims?: any;
    resourceName?: string;
    appId?: string;
    displayName?: string;
    androidPackageName?: string;
    iosBundleId?: string;
}
type MaybeAsync<T> = T | Promise<T>;
export type BlockingFunction = HttpsFunction;
export declare function beforeGenerateContent(callback: (event: AIBlockingEvent<BeforeGenerateContentData>) => MaybeAsync<void | Partial<AnyValidAIRequest>>): BlockingFunction;
export declare function beforeGenerateContent<Regional extends boolean = false>(options: WebhookOptions<Regional>, callback: (event: AIBlockingEvent<BeforeGenerateContentData>) => MaybeAsync<void | Partial<AnyValidAIRequest>>): BlockingFunction;
export declare function afterGenerateContent(callback: (event: AIBlockingEvent<AfterGenerateContentData>) => MaybeAsync<void | Partial<AnyValidAIResponse>>): BlockingFunction;
export declare function afterGenerateContent<Regional extends boolean = false>(options: WebhookOptions<Regional>, callback: (event: AIBlockingEvent<AfterGenerateContentData>) => MaybeAsync<void | Partial<AnyValidAIResponse>>): BlockingFunction;
