import { Request, Response } from "express"; import { DeploymentOptions, FailurePolicy, Schedule } from "./function-configuration"; export { Request, Response }; import { ManifestEndpoint, ManifestRequiredAPI } from "../runtime/manifest"; export { Change } from "../common/change"; /** * Wire format for an event. */ export interface Event { /** * Wire format for an event context. */ context: { eventId: string; timestamp: string; eventType: string; resource: Resource; domain?: string; auth?: { variable?: { uid?: string; token?: string; }; admin: boolean; }; }; /** * Event data over wire. */ data: any; } /** * The context in which an event occurred. * * @remarks * An EventContext describes: * - The time an event occurred. * - A unique identifier of the event. * - The resource on which the event occurred, if applicable. * - Authorization of the request that triggered the event, if applicable and * available. */ export interface EventContext> { /** * Authentication information for the user that triggered the function. * * @remarks * This object contains `uid` and `token` properties for authenticated users. * For more detail including token keys, see the * {@link https://firebase.google.com/docs/reference/rules/rules#properties | security rules reference}. * * This field is only populated for Realtime Database triggers and Callable * functions. For an unauthenticated user, this field is null. For Firebase * admin users and event types that do not provide user information, this field * does not exist. */ auth?: { token: object; uid: string; }; /** * The level of permissions for a user. * * @remarks * Valid values are: * * - `ADMIN`: Developer user or user authenticated via a service account. * * - `USER`: Known user. * * - `UNAUTHENTICATED`: Unauthenticated action * * - `null`: For event types that do not provide user information (all except * Realtime Database). */ authType?: "ADMIN" | "USER" | "UNAUTHENTICATED"; /** * The event’s unique identifier. */ eventId: string; /** * Type of event. * * @remarks * Possible values are: * * - `google.analytics.event.log` * * - `google.firebase.auth.user.create` * * - `google.firebase.auth.user.delete` * * - `google.firebase.database.ref.write` * * - `google.firebase.database.ref.create` * * - `google.firebase.database.ref.update` * * - `google.firebase.database.ref.delete` * * - `google.firestore.document.write` * * - `google.firestore.document.create` * * - `google.firestore.document.update` * * - `google.firestore.document.delete` * * - `google.pubsub.topic.publish` * * - `google.firebase.remoteconfig.update` * * - `google.storage.object.finalize` * * - `google.storage.object.archive` * * - `google.storage.object.delete` * * - `google.storage.object.metadataUpdate` * * - `google.testing.testMatrix.complete` */ eventType: string; /** * An object containing the values of the wildcards in the `path` parameter * provided to the {@link fireabase-functions.v1.database#ref | `ref()`} method for a Realtime Database trigger. */ params: Params; /** * The resource that emitted the event. * * @remarks * Valid values are: * * Analytics: `projects//events/` * * Realtime Database: `projects/_/instances//refs/` * * Storage: `projects/_/buckets//objects/#` * * Authentication: `projects/` * * Pub/Sub: `projects//topics/` * * Because Realtime Database instances and Cloud Storage buckets are globally * unique and not tied to the project, their resources start with `projects/_`. * Underscore is not a valid project name. */ resource: Resource; /** * Timestamp for the event as an {@link https://www.ietf.org/rfc/rfc3339.txt | RFC 3339} string. */ timestamp: string; } /** * Resource is a standard format for defining a resource * (google.rpc.context.AttributeContext.Resource). In Cloud Functions, it is the * resource that triggered the function - such as a storage bucket. */ export interface Resource { /** The name of the service that this resource belongs to. */ service: string; /** * The stable identifier (name) of a resource on the service. * A resource can be logically identified as "//{resource.service}/{resource.name}" */ name: string; /** * The type of the resource. The syntax is platform-specific because different platforms define their resources differently. * For Google APIs, the type format must be "{service}/{kind}" */ type?: string; /** Map of Resource's labels. */ labels?: { [tag: string]: string; }; } /** * TriggerAnnotion is used internally by the firebase CLI to understand what * type of Cloud Function to deploy. */ interface TriggerAnnotation { availableMemoryMb?: number; blockingTrigger?: { eventType: string; options?: Record; }; eventTrigger?: { eventType: string; resource: string; service: string; }; failurePolicy?: FailurePolicy; httpsTrigger?: { invoker?: string[]; }; labels?: { [key: string]: string; }; regions?: string[]; schedule?: Schedule; timeout?: string; vpcConnector?: string; vpcConnectorEgressSettings?: string; serviceAccountEmail?: string; ingressSettings?: string; secrets?: string[]; } /** * A Runnable has a `run` method which directly invokes the user-defined * function - useful for unit testing. */ export interface Runnable { /** Directly invoke the user defined function. */ run: (data: T, context: any) => PromiseLike | any; } /** * The function type for HTTPS triggers. This should be exported from your * JavaScript file to define a Cloud Function. * * @remarks * This type is a special JavaScript function which takes Express * {@link https://expressjs.com/en/api.html#req | `Request` } and * {@link https://expressjs.com/en/api.html#res | `Response` } objects as its only * arguments. */ export interface HttpsFunction { (req: Request, resp: Response): void | Promise; /** @alpha */ __trigger: TriggerAnnotation; /** @alpha */ __endpoint: ManifestEndpoint; /** @alpha */ __requiredAPIs?: ManifestRequiredAPI[]; } /** * The function type for Auth Blocking triggers. * * @remarks * This type is a special JavaScript function for Auth Blocking triggers which takes Express * {@link https://expressjs.com/en/api.html#req | `Request` } and * {@link https://expressjs.com/en/api.html#res | `Response` } objects as its only * arguments. */ export interface BlockingFunction { /** @public */ (req: Request, resp: Response): void | Promise; /** @alpha */ __trigger: TriggerAnnotation; /** @alpha */ __endpoint: ManifestEndpoint; /** @alpha */ __requiredAPIs?: ManifestRequiredAPI[]; } /** * The function type for all non-HTTPS triggers. This should be exported * from your JavaScript file to define a Cloud Function. * * This type is a special JavaScript function which takes a templated * `Event` object as its only argument. */ export interface CloudFunction extends Runnable { (input: any, context?: any): PromiseLike | any; /** @alpha */ __trigger: TriggerAnnotation; /** @alpha */ __endpoint: ManifestEndpoint; /** @alpha */ __requiredAPIs?: ManifestRequiredAPI[]; } /** @hidden */ export declare function optionsToTrigger(options: DeploymentOptions): any; export declare function optionsToEndpoint(options: DeploymentOptions): ManifestEndpoint;