/** * Cloud functions to handle Crashlytics events from Firebase Alerts. * @packageDocumentation */ import { ResetValue } from "../../../common/options"; import { Expression } from "../../../params"; import { CloudEvent, CloudFunction } from "../../core"; import { FirebaseAlertData } from "./alerts"; import * as options from "../../options"; import { SecretParam } from "../../../params/types"; /** Generic Crashlytics issue interface */ export interface Issue { /** The ID of the Crashlytics issue */ id: string; /** The title of the Crashlytics issue */ title: string; /** The subtitle of the Crashlytics issue */ subtitle: string; /** The application version of the Crashlytics issue */ appVersion: string; } /** * The internal payload object for a new fatal issue. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface NewFatalIssuePayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsNewFatalIssuePayload"; /** Basic information of the Crashlytics issue */ issue: Issue; } /** * The internal payload object for a new non-fatal issue. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface NewNonfatalIssuePayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsNewNonfatalIssuePayload"; /** Basic information of the Crashlytics issue */ issue: Issue; } /** * The internal payload object for a regression alert. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface RegressionAlertPayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsRegressionAlertPayload"; /** The type of the Crashlytics issue, e.g. new fatal, new nonfatal, ANR */ type: string; /** Basic information of the Crashlytics issue */ issue: Issue; /** * The time that the Crashlytics issues was most recently resolved before it * began to reoccur. */ resolveTime: string; } /** Generic Crashlytics trending issue interface */ export interface TrendingIssueDetails { /** The type of the Crashlytics issue, e.g. new fatal, new nonfatal, ANR */ type: string; /** Basic information of the Crashlytics issue */ issue: Issue; /** The number of crashes that occurred with the issue */ eventCount: number; /** The number of distinct users that were affected by the issue */ userCount: number; } /** * The internal payload object for a stability digest. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface StabilityDigestPayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsStabilityDigestPayload"; /** * The date that the digest gets created. Issues in the digest should have the * same date as the digest date */ digestDate: string; /** A stability digest containing several trending Crashlytics issues */ trendingIssues: TrendingIssueDetails[]; } /** * The internal payload object for a velocity alert. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface VelocityAlertPayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsVelocityAlertPayload"; /** Basic information of the Crashlytics issue */ issue: Issue; /** The time that the Crashlytics issue gets created */ createTime: string; /** * The number of user sessions for the given app version that had this * specific crash issue in the time period used to trigger the velocity alert. */ crashCount: number; /** * The percentage of user sessions for the given app version that had this * specific crash issue in the time period used to trigger the velocity alert. */ crashPercentage: number; /** * The first app version where this issue was seen, and not necessarily the * version that has triggered the alert. */ firstVersion: string; } /** * The internal payload object for a new Application Not Responding issue. * Payload is wrapped inside a `FirebaseAlertData` object. */ export interface NewAnrIssuePayload { ["@type"]: "type.googleapis.com/google.events.firebase.firebasealerts.v1.CrashlyticsNewAnrIssuePayload"; /** Basic information of the Crashlytics issue */ issue: Issue; } /** * A custom CloudEvent for Firebase Alerts (with custom extension attributes). * @typeParam T - the data type for Crashlytics alerts that is wrapped in a `FirebaseAlertData` object. */ export interface CrashlyticsEvent extends CloudEvent> { /** The type of the alerts that got triggered. */ alertType: string; /** The Firebase App ID that’s associated with the alert. */ appId: string; } /** * Configuration for Crashlytics functions. */ export interface CrashlyticsOptions extends options.EventHandlerOptions { /** Scope the function to trigger on a specific application. */ appId?: string; /** * If true, do not deploy or emulate this function. */ omit?: boolean | Expression; /** * Region where functions should be deployed. */ region?: options.SupportedRegion | string | Expression | ResetValue; /** * Amount of memory to allocate to a function. */ memory?: options.MemoryOption | Expression | ResetValue; /** * Timeout for the function in seconds, possible values are 0 to 540. * HTTPS functions can specify a higher timeout. * * @remarks * The minimum timeout for a gen 2 function is 1s. The maximum timeout for a * function depends on the type of function: Event handling functions have a * maximum timeout of 540s (9 minutes). HTTPS and callable functions have a * maximum timeout of 36,00s (1 hour). Task queue functions have a maximum * timeout of 1,800s (30 minutes) */ timeoutSeconds?: number | Expression | ResetValue; /** * Min number of actual instances to be running at a given time. * * @remarks * Instances will be billed for memory allocation and 10% of CPU allocation * while idle. */ minInstances?: number | Expression | ResetValue; /** * Max number of instances to be running in parallel. */ maxInstances?: number | Expression | ResetValue; /** * Number of requests a function can serve at once. * * @remarks * Can only be applied to functions running on Cloud Functions v2. * A value of null restores the default concurrency (80 when CPU >= 1, 1 otherwise). * Concurrency cannot be set to any value other than 1 if `cpu` is less than 1. * The maximum value for concurrency is 1,000. */ concurrency?: number | Expression | ResetValue; /** * Fractional number of CPUs to allocate to a function. * * @remarks * Defaults to 1 for functions with <= 2GB RAM and increases for larger memory sizes. * This is different from the defaults when using the gcloud utility and is different from * the fixed amount assigned in Google Cloud Functions generation 1. * To revert to the CPU amounts used in gcloud or in Cloud Functions generation 1, set this * to the value "gcf_gen1" */ cpu?: number | "gcf_gen1"; /** * Connect cloud function to specified VPC connector. */ vpcConnector?: string | Expression | ResetValue; /** * Egress settings for VPC connector. */ vpcConnectorEgressSettings?: options.VpcEgressSetting | ResetValue; /** * Specific service account for the function to run as. */ serviceAccount?: string | Expression | ResetValue; /** * Ingress settings which control where this function can be called from. */ ingressSettings?: options.IngressSetting | ResetValue; /** * User labels to set on the function. */ labels?: Record; secrets?: (string | SecretParam)[]; /** Whether failed executions should be delivered again. */ retry?: boolean | Expression | ResetValue; } /** * Declares a function that can handle a new fatal issue published to Crashlytics. * @param handler - Event handler that is triggered when a new fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewFatalIssuePublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new fatal issue published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a new fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewFatalIssuePublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new fatal issue published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a new fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewFatalIssuePublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new non-fatal issue published to Crashlytics. * @param handler - Event handler that is triggered when a new fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewNonfatalIssuePublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new non-fatal issue published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a new non-fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewNonfatalIssuePublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new non-fatal issue published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a new non-fatal issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewNonfatalIssuePublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a regression alert published to Crashlytics. * @param handler - Event handler that is triggered when a regression alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onRegressionAlertPublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a regression alert published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a regression alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onRegressionAlertPublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a regression alert published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a regression alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onRegressionAlertPublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a stability digest published to Crashlytics. * @param handler - Event handler that is triggered when a stability digest is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onStabilityDigestPublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a stability digest published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a stability digest is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onStabilityDigestPublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a stability digest published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a stability digest is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onStabilityDigestPublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a velocity alert published to Crashlytics. * @param handler - Event handler that is triggered when a velocity alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onVelocityAlertPublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a velocity alert published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a velocity alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onVelocityAlertPublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a velocity alert published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a velocity alert is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onVelocityAlertPublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new Application Not Responding issue published to Crashlytics. * @param handler - Event handler that is triggered when a new Application Not Responding issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewAnrIssuePublished(handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new Application Not Responding issue published to Crashlytics. * @param appId - A specific application the handler will trigger on. * @param handler - Event handler that is triggered when a new Application Not Responding issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewAnrIssuePublished(appId: string, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>; /** * Declares a function that can handle a new Application Not Responding issue published to Crashlytics. * @param opts - Options that can be set on the function. * @param handler - Event handler that is triggered when a new Application Not Responding issue is published to Crashlytics. * @returns A function that you can export and deploy. */ export declare function onNewAnrIssuePublished(opts: CrashlyticsOptions, handler: (event: CrashlyticsEvent) => any | Promise): CloudFunction>;