import * as pulumi from "@pulumi/pulumi";
import * as cloudfunctions from "../cloudfunctions";
/**
 * Arguments that can be provided to control the Cloud Function created as the serverless endpoint
 * for a topic event.
 */
export interface TopicEventCallbackFunctionArgs extends cloudfunctions.CallbackFunctionArgs {
    callback?: TopicEventHandler;
    callbackFactory?: () => TopicEventHandler;
    httpsTriggerUrl?: never;
    triggerHttp?: never;
    eventTrigger?: never;
}
/**
 * Arguments to control how GCP will respond if the Cloud Function fails.  Currently, the only
 * specialized behavior supported is to attempt retrying the Cloud Function.
 * See [cloudfunctions.FailurePolicy] for more information on this.
 */
export interface TopicMessagePublishedArgs {
    failurePolicy?: cloudfunctions.FailurePolicy;
}
/**
 * Shape of the [context] object passed to a Cloud Function when a topic event fires.
 */
export interface TopicContext extends cloudfunctions.Context {
    eventType: "google.pubsub.topic.publish";
    resource: {
        service: "pubsub.googleapis.com";
        name: string;
        type: "type.googleapis.com/google.pubsub.v1.PubsubMessage";
    };
}
/**
 * Shape of the [data] object passed to a Cloud Function when a topic event fires.
 *
 * See https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage for more details.
 */
export interface TopicData {
    "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage";
    /**
     * key/value pairs included with the topic even.
     */
    attributes: Record<string, string>;
    /**
     * Base64 encoded data.  Use `Buffer.from(pubSubMessage.data, 'base64')` to get raw bytes of the
     * message.
     */
    data: string;
}
export type TopicEventHandler = cloudfunctions.Callback<TopicData, TopicContext, void>;
declare module "./topic" {
    interface Topic {
        /**
         * Creates and publishes a Cloud Functions that will be triggered by messages published to
         * Cloud Pub/Sub topics in the same GCP project as the Function. Cloud Pub/Sub is a globally
         * distributed message bus that automatically scales as you need it and provides a
         * foundation for building your own robust, global services.
         *
         * See https://cloud.google.com/functions/docs/calling/pubsub for more details.
         */
        onMessagePublished(name: string, handler: TopicEventHandler | TopicEventCallbackFunctionArgs, args?: TopicMessagePublishedArgs, opts?: pulumi.ComponentResourceOptions): cloudfunctions.CallbackFunction;
    }
}
//# sourceMappingURL=zMixins.d.ts.map