Edit File: index.d.ts
/*! firebase-admin v9.12.0 */ /*! * Copyright 2020 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { app, FirebaseError, FirebaseArrayIndexError } from '../firebase-namespace-api'; /** * Gets the {@link messaging.Messaging `Messaging`} service for the * default app or a given app. * * `admin.messaging()` can be called with no arguments to access the default * app's {@link messaging.Messaging `Messaging`} service or as * `admin.messaging(app)` to access the * {@link messaging.Messaging `Messaging`} service associated with a * specific app. * * @example * ```javascript * // Get the Messaging service for the default app * var defaultMessaging = admin.messaging(); * ``` * * @example * ```javascript * // Get the Messaging service for a given app * var otherMessaging = admin.messaging(otherApp); * ``` * * @param app Optional app whose `Messaging` service to * return. If not provided, the default `Messaging` service will be returned. * * @return The default `Messaging` service if no * app is provided or the `Messaging` service associated with the provided * app. */ export declare function messaging(app?: app.App): messaging.Messaging; export declare namespace messaging { interface BaseMessage { data?: { [key: string]: string; }; notification?: Notification; android?: AndroidConfig; webpush?: WebpushConfig; apns?: ApnsConfig; fcmOptions?: FcmOptions; } export interface TokenMessage extends BaseMessage { token: string; } export interface TopicMessage extends BaseMessage { topic: string; } export interface ConditionMessage extends BaseMessage { condition: string; } /** * Payload for the `admin.messaging.send()` operation. The payload contains all the fields * in the `BaseMessage` type, and exactly one of token, topic or condition. */ export type Message = TokenMessage | TopicMessage | ConditionMessage; /** * Payload for the `admin.messaging.sendMulticast()` method. The payload contains all the fields * in the `BaseMessage` type, and a list of tokens. */ export interface MulticastMessage extends BaseMessage { tokens: string[]; } /** * A notification that can be included in {@link messaging.Message}. */ export interface Notification { /** * The title of the notification. */ title?: string; /** * The notification body */ body?: string; /** * URL of an image to be displayed in the notification. */ imageUrl?: string; } /** * Represents platform-independent options for features provided by the FCM SDKs. */ export interface FcmOptions { /** * The label associated with the message's analytics data. */ analyticsLabel?: string; } /** * Represents the WebPush protocol options that can be included in an * {@link messaging.Message}. */ export interface WebpushConfig { /** * A collection of WebPush headers. Header values must be strings. * * See [WebPush specification](https://tools.ietf.org/html/rfc8030#section-5) * for supported headers. */ headers?: { [key: string]: string; }; /** * A collection of data fields. */ data?: { [key: string]: string; }; /** * A WebPush notification payload to be included in the message. */ notification?: WebpushNotification; /** * Options for features provided by the FCM SDK for Web. */ fcmOptions?: WebpushFcmOptions; } /** Represents options for features provided by the FCM SDK for Web * (which are not part of the Webpush standard). */ export interface WebpushFcmOptions { /** * The link to open when the user clicks on the notification. * For all URL values, HTTPS is required. */ link?: string; } /** * Represents the WebPush-specific notification options that can be included in * {@link messaging.WebpushConfig}. This supports most of the standard * options as defined in the Web Notification * [specification](https://developer.mozilla.org/en-US/docs/Web/API/notification/Notification). */ export interface WebpushNotification { /** * Title text of the notification. */ title?: string; /** * An array of notification actions representing the actions * available to the user when the notification is presented. */ actions?: Array<{ /** * An action available to the user when the notification is presented */ action: string; /** * Optional icon for a notification action. */ icon?: string; /** * Title of the notification action. */ title: string; }>; /** * URL of the image used to represent the notification when there is * not enough space to display the notification itself. */ badge?: string; /** * Body text of the notification. */ body?: string; /** * Arbitrary data that you want associated with the notification. * This can be of any data type. */ data?: any; /** * The direction in which to display the notification. Must be one * of `auto`, `ltr` or `rtl`. */ dir?: 'auto' | 'ltr' | 'rtl'; /** * URL to the notification icon. */ icon?: string; /** * URL of an image to be displayed in the notification. */ image?: string; /** * The notification's language as a BCP 47 language tag. */ lang?: string; /** * A boolean specifying whether the user should be notified after a * new notification replaces an old one. Defaults to false. */ renotify?: boolean; /** * Indicates that a notification should remain active until the user * clicks or dismisses it, rather than closing automatically. * Defaults to false. */ requireInteraction?: boolean; /** * A boolean specifying whether the notification should be silent. * Defaults to false. */ silent?: boolean; /** * An identifying tag for the notification. */ tag?: string; /** * Timestamp of the notification. Refer to * https://developer.mozilla.org/en-US/docs/Web/API/notification/timestamp * for details. */ timestamp?: number; /** * A vibration pattern for the device's vibration hardware to emit * when the notification fires. */ vibrate?: number | number[]; [key: string]: any; } /** * Represents the APNs-specific options that can be included in an * {@link messaging.Message}. Refer to * [Apple documentation](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html) * for various headers and payload fields supported by APNs. */ export interface ApnsConfig { /** * A collection of APNs headers. Header values must be strings. */ headers?: { [key: string]: string; }; /** * An APNs payload to be included in the message. */ payload?: ApnsPayload; /** * Options for features provided by the FCM SDK for iOS. */ fcmOptions?: ApnsFcmOptions; } /** * Represents the payload of an APNs message. Mainly consists of the `aps` * dictionary. But may also contain other arbitrary custom keys. */ export interface ApnsPayload { /** * The `aps` dictionary to be included in the message. */ aps: Aps; [customData: string]: any; } /** * Represents the [aps dictionary](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html) * that is part of APNs messages. */ export interface Aps { /** * Alert to be included in the message. This may be a string or an object of * type `admin.messaging.ApsAlert`. */ alert?: string | ApsAlert; /** * Badge to be displayed with the message. Set to 0 to remove the badge. When * not specified, the badge will remain unchanged. */ badge?: number; /** * Sound to be played with the message. */ sound?: string | CriticalSound; /** * Specifies whether to configure a background update notification. */ contentAvailable?: boolean; /** * Specifies whether to set the `mutable-content` property on the message * so the clients can modify the notification via app extensions. */ mutableContent?: boolean; /** * Type of the notification. */ category?: string; /** * An app-specific identifier for grouping notifications. */ threadId?: string; [customData: string]: any; } export interface ApsAlert { title?: string; subtitle?: string; body?: string; locKey?: string; locArgs?: string[]; titleLocKey?: string; titleLocArgs?: string[]; subtitleLocKey?: string; subtitleLocArgs?: string[]; actionLocKey?: string; launchImage?: string; } /** * Represents a critical sound configuration that can be included in the * `aps` dictionary of an APNs payload. */ export interface CriticalSound { /** * The critical alert flag. Set to `true` to enable the critical alert. */ critical?: boolean; /** * The name of a sound file in the app's main bundle or in the `Library/Sounds` * folder of the app's container directory. Specify the string "default" to play * the system sound. */ name: string; /** * The volume for the critical alert's sound. Must be a value between 0.0 * (silent) and 1.0 (full volume). */ volume?: number; } /** * Represents options for features provided by the FCM SDK for iOS. */ export interface ApnsFcmOptions { /** * The label associated with the message's analytics data. */ analyticsLabel?: string; /** * URL of an image to be displayed in the notification. */ imageUrl?: string; } /** * Represents the Android-specific options that can be included in an * {@link messaging.Message}. */ export interface AndroidConfig { /** * Collapse key for the message. Collapse key serves as an identifier for a * group of messages that can be collapsed, so that only the last message gets * sent when delivery can be resumed. A maximum of four different collapse keys * may be active at any given time. */ collapseKey?: string; /** * Priority of the message. Must be either `normal` or `high`. */ priority?: ('high' | 'normal'); /** * Time-to-live duration of the message in milliseconds. */ ttl?: number; /** * Package name of the application where the registration tokens must match * in order to receive the message. */ restrictedPackageName?: string; /** * A collection of data fields to be included in the message. All values must * be strings. When provided, overrides any data fields set on the top-level * `admin.messaging.Message`.} */ data?: { [key: string]: string; }; /** * Android notification to be included in the message. */ notification?: AndroidNotification; /** * Options for features provided by the FCM SDK for Android. */ fcmOptions?: AndroidFcmOptions; } /** * Represents the Android-specific notification options that can be included in * {@link messaging.AndroidConfig}. */ export interface AndroidNotification { /** * Title of the Android notification. When provided, overrides the title set via * `admin.messaging.Notification`. */ title?: string; /** * Body of the Android notification. When provided, overrides the body set via * `admin.messaging.Notification`. */ body?: string; /** * Icon resource for the Android notification. */ icon?: string; /** * Notification icon color in `#rrggbb` format. */ color?: string; /** * File name of the sound to be played when the device receives the * notification. */ sound?: string; /** * Notification tag. This is an identifier used to replace existing * notifications in the notification drawer. If not specified, each request * creates a new notification. */ tag?: string; /** * URL of an image to be displayed in the notification. */ imageUrl?: string; /** * Action associated with a user click on the notification. If specified, an * activity with a matching Intent Filter is launched when a user clicks on the * notification. */ clickAction?: string; /** * Key of the body string in the app's string resource to use to localize the * body text. * */ bodyLocKey?: string; /** * An array of resource keys that will be used in place of the format * specifiers in `bodyLocKey`. */ bodyLocArgs?: string[]; /** * Key of the title string in the app's string resource to use to localize the * title text. */ titleLocKey?: string; /** * An array of resource keys that will be used in place of the format * specifiers in `titleLocKey`. */ titleLocArgs?: string[]; /** * The Android notification channel ID (new in Android O). The app must create * a channel with this channel ID before any notification with this channel ID * can be received. If you don't send this channel ID in the request, or if the * channel ID provided has not yet been created by the app, FCM uses the channel * ID specified in the app manifest. */ channelId?: string; /** * Sets the "ticker" text, which is sent to accessibility services. Prior to * API level 21 (Lollipop), sets the text that is displayed in the status bar * when the notification first arrives. */ ticker?: string; /** * When set to `false` or unset, the notification is automatically dismissed when * the user clicks it in the panel. When set to `true`, the notification persists * even when the user clicks it. */ sticky?: boolean; /** * For notifications that inform users about events with an absolute time reference, sets * the time that the event in the notification occurred. Notifications * in the panel are sorted by this time. */ eventTimestamp?: Date; /** * Sets whether or not this notification is relevant only to the current device. * Some notifications can be bridged to other devices for remote display, such as * a Wear OS watch. This hint can be set to recommend this notification not be bridged. * See [Wear OS guides](https://developer.android.com/training/wearables/notifications/bridger#existing-method-of-preventing-bridging) */ localOnly?: boolean; /** * Sets the relative priority for this notification. Low-priority notifications * may be hidden from the user in certain situations. Note this priority differs * from `AndroidMessagePriority`. This priority is processed by the client after * the message has been delivered. Whereas `AndroidMessagePriority` is an FCM concept * that controls when the message is delivered. */ priority?: ('min' | 'low' | 'default' | 'high' | 'max'); /** * Sets the vibration pattern to use. Pass in an array of milliseconds to * turn the vibrator on or off. The first value indicates the duration to wait before * turning the vibrator on. The next value indicates the duration to keep the * vibrator on. Subsequent values alternate between duration to turn the vibrator * off and to turn the vibrator on. If `vibrate_timings` is set and `default_vibrate_timings` * is set to `true`, the default value is used instead of the user-specified `vibrate_timings`. */ vibrateTimingsMillis?: number[]; /** * If set to `true`, use the Android framework's default vibrate pattern for the * notification. Default values are specified in [`config.xml`](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). * If `default_vibrate_timings` is set to `true` and `vibrate_timings` is also set, * the default value is used instead of the user-specified `vibrate_timings`. */ defaultVibrateTimings?: boolean; /** * If set to `true`, use the Android framework's default sound for the notification. * Default values are specified in [`config.xml`](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). */ defaultSound?: boolean; /** * Settings to control the notification's LED blinking rate and color if LED is * available on the device. The total blinking time is controlled by the OS. */ lightSettings?: LightSettings; /** * If set to `true`, use the Android framework's default LED light settings * for the notification. Default values are specified in [`config.xml`](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). * If `default_light_settings` is set to `true` and `light_settings` is also set, * the user-specified `light_settings` is used instead of the default value. */ defaultLightSettings?: boolean; /** * Sets the visibility of the notification. Must be either `private`, `public`, * or `secret`. If unspecified, defaults to `private`. */ visibility?: ('private' | 'public' | 'secret'); /** * Sets the number of items this notification represents. May be displayed as a * badge count for Launchers that support badging. See [`NotificationBadge`(https://developer.android.com/training/notify-user/badges). * For example, this might be useful if you're using just one notification to * represent multiple new messages but you want the count here to represent * the number of total new messages. If zero or unspecified, systems * that support badging use the default, which is to increment a number * displayed on the long-press menu each time a new notification arrives. */ notificationCount?: number; } /** * Represents settings to control notification LED that can be included in * {@link messaging.AndroidNotification}. */ export interface LightSettings { /** * Required. Sets color of the LED in `#rrggbb` or `#rrggbbaa` format. */ color: string; /** * Required. Along with `light_off_duration`, defines the blink rate of LED flashes. */ lightOnDurationMillis: number; /** * Required. Along with `light_on_duration`, defines the blink rate of LED flashes. */ lightOffDurationMillis: number; } /** * Represents options for features provided by the FCM SDK for Android. */ export interface AndroidFcmOptions { /** * The label associated with the message's analytics data. */ analyticsLabel?: string; } /** * Interface representing an FCM legacy API data message payload. Data * messages let developers send up to 4KB of custom key-value pairs. The * keys and values must both be strings. Keys can be any custom string, * except for the following reserved strings: * * * `"from"` * * Anything starting with `"google."`. * * See [Build send requests](/docs/cloud-messaging/send-message) * for code samples and detailed documentation. */ export interface DataMessagePayload { [key: string]: string; } /** * Interface representing an FCM legacy API notification message payload. * Notification messages let developers send up to 4KB of predefined * key-value pairs. Accepted keys are outlined below. * * See [Build send requests](/docs/cloud-messaging/send-message) * for code samples and detailed documentation. */ export interface NotificationMessagePayload { /** * Identifier used to replace existing notifications in the notification drawer. * * If not specified, each request creates a new notification. * * If specified and a notification with the same tag is already being shown, * the new notification replaces the existing one in the notification drawer. * * **Platforms:** Android */ tag?: string; /** * The notification's body text. * * **Platforms:** iOS, Android, Web */ body?: string; /** * The notification's icon. * * **Android:** Sets the notification icon to `myicon` for drawable resource * `myicon`. If you don't send this key in the request, FCM displays the * launcher icon specified in your app manifest. * * **Web:** The URL to use for the notification's icon. * * **Platforms:** Android, Web */ icon?: string; /** * The value of the badge on the home screen app icon. * * If not specified, the badge is not changed. * * If set to `0`, the badge is removed. * * **Platforms:** iOS */ badge?: string; /** * The notification icon's color, expressed in `#rrggbb` format. * * **Platforms:** Android */ color?: string; /** * The sound to be played when the device receives a notification. Supports * "default" for the default notification sound of the device or the filename of a * sound resource bundled in the app. * Sound files must reside in `/res/raw/`. * * **Platforms:** Android */ sound?: string; /** * The notification's title. * * **Platforms:** iOS, Android, Web */ title?: string; /** * The key to the body string in the app's string resources to use to localize * the body text to the user's current localization. * * **iOS:** Corresponds to `loc-key` in the APNs payload. See * [Payload Key Reference](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html) * and * [Localizing the Content of Your Remote Notifications](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW9) * for more information. * * **Android:** See * [String Resources](http://developer.android.com/guide/topics/resources/string-resource.html) * for more information. * * **Platforms:** iOS, Android */ bodyLocKey?: string; /** * Variable string values to be used in place of the format specifiers in * `body_loc_key` to use to localize the body text to the user's current * localization. * * The value should be a stringified JSON array. * * **iOS:** Corresponds to `loc-args` in the APNs payload. See * [Payload Key Reference](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html) * and * [Localizing the Content of Your Remote Notifications](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW9) * for more information. * * **Android:** See * [Formatting and Styling](http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling) * for more information. * * **Platforms:** iOS, Android */ bodyLocArgs?: string; /** * Action associated with a user click on the notification. If specified, an * activity with a matching Intent Filter is launched when a user clicks on the * notification. * * * **Platforms:** Android */ clickAction?: string; /** * The key to the title string in the app's string resources to use to localize * the title text to the user's current localization. * * **iOS:** Corresponds to `title-loc-key` in the APNs payload. See * [Payload Key Reference](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html) * and * [Localizing the Content of Your Remote Notifications](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW9) * for more information. * * **Android:** See * [String Resources](http://developer.android.com/guide/topics/resources/string-resource.html) * for more information. * * **Platforms:** iOS, Android */ titleLocKey?: string; /** * Variable string values to be used in place of the format specifiers in * `title_loc_key` to use to localize the title text to the user's current * localization. * * The value should be a stringified JSON array. * * **iOS:** Corresponds to `title-loc-args` in the APNs payload. See * [Payload Key Reference](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html) * and * [Localizing the Content of Your Remote Notifications](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH10-SW9) * for more information. * * **Android:** See * [Formatting and Styling](http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling) * for more information. * * **Platforms:** iOS, Android */ titleLocArgs?: string; [key: string]: string | undefined; } /** * Interface representing a Firebase Cloud Messaging message payload. One or * both of the `data` and `notification` keys are required. * * See * [Build send requests](/docs/cloud-messaging/send-message) * for code samples and detailed documentation. */ export interface MessagingPayload { /** * The data message payload. */ data?: DataMessagePayload; /** * The notification message payload. */ notification?: NotificationMessagePayload; } /** * Interface representing the options that can be provided when sending a * message via the FCM legacy APIs. * * See [Build send requests](/docs/cloud-messaging/send-message) * for code samples and detailed documentation. */ export interface MessagingOptions { /** * Whether or not the message should actually be sent. When set to `true`, * allows developers to test a request without actually sending a message. When * set to `false`, the message will be sent. * * **Default value:** `false` */ dryRun?: boolean; /** * The priority of the message. Valid values are `"normal"` and `"high".` On * iOS, these correspond to APNs priorities `5` and `10`. * * By default, notification messages are sent with high priority, and data * messages are sent with normal priority. Normal priority optimizes the client * app's battery consumption and should be used unless immediate delivery is * required. For messages with normal priority, the app may receive the message * with unspecified delay. * * When a message is sent with high priority, it is sent immediately, and the * app can wake a sleeping device and open a network connection to your server. * * For more information, see * [Setting the priority of a message](/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message). * * **Default value:** `"high"` for notification messages, `"normal"` for data * messages */ priority?: string; /** * How long (in seconds) the message should be kept in FCM storage if the device * is offline. The maximum time to live supported is four weeks, and the default * value is also four weeks. For more information, see * [Setting the lifespan of a message](/docs/cloud-messaging/concept-options#ttl). * * **Default value:** `2419200` (representing four weeks, in seconds) */ timeToLive?: number; /** * String identifying a group of messages (for example, "Updates Available") * that can be collapsed, so that only the last message gets sent when delivery * can be resumed. This is used to avoid sending too many of the same messages * when the device comes back online or becomes active. * * There is no guarantee of the order in which messages get sent. * * A maximum of four different collapse keys is allowed at any given time. This * means FCM server can simultaneously store four different * send-to-sync messages per client app. If you exceed this number, there is no * guarantee which four collapse keys the FCM server will keep. * * **Default value:** None */ collapseKey?: string; /** * On iOS, use this field to represent `mutable-content` in the APNs payload. * When a notification is sent and this is set to `true`, the content of the * notification can be modified before it is displayed, using a * [Notification Service app extension](https://developer.apple.com/reference/usernotifications/unnotificationserviceextension) * * On Android and Web, this parameter will be ignored. * * **Default value:** `false` */ mutableContent?: boolean; /** * On iOS, use this field to represent `content-available` in the APNs payload. * When a notification or data message is sent and this is set to `true`, an * inactive client app is awoken. On Android, data messages wake the app by * default. On Chrome, this flag is currently not supported. * * **Default value:** `false` */ contentAvailable?: boolean; /** * The package name of the application which the registration tokens must match * in order to receive the message. * * **Default value:** None */ restrictedPackageName?: string; [key: string]: any | undefined; } export interface MessagingDeviceResult { /** * The error that occurred when processing the message for the recipient. */ error?: FirebaseError; /** * A unique ID for the successfully processed message. */ messageId?: string; /** * The canonical registration token for the client app that the message was * processed and sent to. You should use this value as the registration token * for future requests. Otherwise, future messages might be rejected. */ canonicalRegistrationToken?: string; } /** * Interface representing the status of a message sent to an individual device * via the FCM legacy APIs. * * See * [Send to individual devices](/docs/cloud-messaging/admin/send-messages#send_to_individual_devices) * for code samples and detailed documentation. */ export interface MessagingDevicesResponse { canonicalRegistrationTokenCount: number; failureCount: number; multicastId: number; results: MessagingDeviceResult[]; successCount: number; } /** * Interface representing the server response from the * {@link messaging.Messaging.sendToDeviceGroup `sendToDeviceGroup()`} * method. * * See * [Send messages to device groups](/docs/cloud-messaging/send-message?authuser=0#send_messages_to_device_groups) * for code samples and detailed documentation. */ export interface MessagingDeviceGroupResponse { /** * The number of messages that could not be processed and resulted in an error. */ successCount: number; /** * The number of messages that could not be processed and resulted in an error. */ failureCount: number; /** * An array of registration tokens that failed to receive the message. */ failedRegistrationTokens: string[]; } /** * Interface representing the server response from the legacy * {@link messaging.Messaging.sendToTopic `sendToTopic()`} method. * * See * [Send to a topic](/docs/cloud-messaging/admin/send-messages#send_to_a_topic) * for code samples and detailed documentation. */ export interface MessagingTopicResponse { /** * The message ID for a successfully received request which FCM will attempt to * deliver to all subscribed devices. */ messageId: number; } /** * Interface representing the server response from the legacy * {@link messaging.Messaging.sendToCondition `sendToCondition()`} method. * * See * [Send to a condition](/docs/cloud-messaging/admin/send-messages#send_to_a_condition) * for code samples and detailed documentation. */ export interface MessagingConditionResponse { /** * The message ID for a successfully received request which FCM will attempt to * deliver to all subscribed devices. */ messageId: number; } /** * Interface representing the server response from the * {@link messaging.Messaging.subscribeToTopic `subscribeToTopic()`} and * {@link messaging.Messaging.unsubscribeFromTopic `unsubscribeFromTopic()`} * methods. * * See * [Manage topics from the server](/docs/cloud-messaging/manage-topics) * for code samples and detailed documentation. */ export interface MessagingTopicManagementResponse { /** * The number of registration tokens that could not be subscribed to the topic * and resulted in an error. */ failureCount: number; /** * The number of registration tokens that were successfully subscribed to the * topic. */ successCount: number; /** * An array of errors corresponding to the provided registration token(s). The * length of this array will be equal to [`failureCount`](#failureCount). */ errors: FirebaseArrayIndexError[]; } /** * Interface representing the server response from the * {@link messaging.Messaging.sendAll `sendAll()`} and * {@link messaging.Messaging.sendMulticast `sendMulticast()`} methods. */ export interface BatchResponse { /** * An array of responses, each corresponding to a message. */ responses: SendResponse[]; /** * The number of messages that were successfully handed off for sending. */ successCount: number; /** * The number of messages that resulted in errors when sending. */ failureCount: number; } /** * Interface representing the status of an individual message that was sent as * part of a batch request. */ export interface SendResponse { /** * A boolean indicating if the message was successfully handed off to FCM or * not. When true, the `messageId` attribute is guaranteed to be set. When * false, the `error` attribute is guaranteed to be set. */ success: boolean; /** * A unique message ID string, if the message was handed off to FCM for * delivery. * */ messageId?: string; /** * An error, if the message was not handed off to FCM successfully. */ error?: FirebaseError; } export interface Messaging { /** * The {@link app.App app} associated with the current `Messaging` service * instance. * * @example * ```javascript * var app = messaging.app; * ``` */ app: app.App; /** * Sends the given message via FCM. * * @param message The message payload. * @param dryRun Whether to send the message in the dry-run * (validation only) mode. * @return A promise fulfilled with a unique message ID * string after the message has been successfully handed off to the FCM * service for delivery. */ send(message: Message, dryRun?: boolean): Promise<string>; /** * Sends all the messages in the given array via Firebase Cloud Messaging. * Employs batching to send the entire list as a single RPC call. Compared * to the `send()` method, this method is a significantly more efficient way * to send multiple messages. * * The responses list obtained from the return value * corresponds to the order of tokens in the `MulticastMessage`. An error * from this method indicates a total failure -- i.e. none of the messages in * the list could be sent. Partial failures are indicated by a `BatchResponse` * return value. * * @param messages A non-empty array * containing up to 500 messages. * @param dryRun Whether to send the messages in the dry-run * (validation only) mode. * @return A Promise fulfilled with an object representing the result of the * send operation. */ sendAll(messages: Array<Message>, dryRun?: boolean): Promise<BatchResponse>; /** * Sends the given multicast message to all the FCM registration tokens * specified in it. * * This method uses the `sendAll()` API under the hood to send the given * message to all the target recipients. The responses list obtained from the * return value corresponds to the order of tokens in the `MulticastMessage`. * An error from this method indicates a total failure -- i.e. the message was * not sent to any of the tokens in the list. Partial failures are indicated by * a `BatchResponse` return value. * * @param message A multicast message * containing up to 500 tokens. * @param dryRun Whether to send the message in the dry-run * (validation only) mode. * @return A Promise fulfilled with an object representing the result of the * send operation. */ sendMulticast(message: MulticastMessage, dryRun?: boolean): Promise<BatchResponse>; /** * Sends an FCM message to a single device corresponding to the provided * registration token. * * See * [Send to individual devices](/docs/cloud-messaging/admin/legacy-fcm#send_to_individual_devices) * for code samples and detailed documentation. Takes either a * `registrationToken` to send to a single device or a * `registrationTokens` parameter containing an array of tokens to send * to multiple devices. * * @param registrationToken A device registration token or an array of * device registration tokens to which the message should be sent. * @param payload The message payload. * @param options Optional options to * alter the message. * * @return A promise fulfilled with the server's response after the message * has been sent. */ sendToDevice(registrationToken: string | string[], payload: MessagingPayload, options?: MessagingOptions): Promise<MessagingDevicesResponse>; /** * Sends an FCM message to a device group corresponding to the provided * notification key. * * See * [Send to a device group](/docs/cloud-messaging/admin/legacy-fcm#send_to_a_device_group) * for code samples and detailed documentation. * * @param notificationKey The notification key for the device group to * which to send the message. * @param payload The message payload. * @param options Optional options to * alter the message. * * @return A promise fulfilled with the server's response after the message * has been sent. */ sendToDeviceGroup(notificationKey: string, payload: MessagingPayload, options?: MessagingOptions): Promise<MessagingDeviceGroupResponse>; /** * Sends an FCM message to a topic. * * See * [Send to a topic](/docs/cloud-messaging/admin/legacy-fcm#send_to_a_topic) * for code samples and detailed documentation. * * @param topic The topic to which to send the message. * @param payload The message payload. * @param options Optional options to * alter the message. * * @return A promise fulfilled with the server's response after the message * has been sent. */ sendToTopic(topic: string, payload: MessagingPayload, options?: MessagingOptions): Promise<MessagingTopicResponse>; /** * Sends an FCM message to a condition. * * See * [Send to a condition](/docs/cloud-messaging/admin/legacy-fcm#send_to_a_condition) * for code samples and detailed documentation. * * @param condition The condition determining to which topics to send * the message. * @param payload The message payload. * @param options Optional options to * alter the message. * * @return A promise fulfilled with the server's response after the message * has been sent. */ sendToCondition(condition: string, payload: MessagingPayload, options?: MessagingOptions): Promise<MessagingConditionResponse>; /** * Subscribes a device to an FCM topic. * * See [Subscribe to a * topic](/docs/cloud-messaging/manage-topics#suscribe_and_unsubscribe_using_the) * for code samples and detailed documentation. Optionally, you can provide an * array of tokens to subscribe multiple devices. * * @param registrationTokens A token or array of registration tokens * for the devices to subscribe to the topic. * @param topic The topic to which to subscribe. * * @return A promise fulfilled with the server's response after the device has been * subscribed to the topic. */ subscribeToTopic(registrationTokens: string | string[], topic: string): Promise<MessagingTopicManagementResponse>; /** * Unsubscribes a device from an FCM topic. * * See [Unsubscribe from a * topic](/docs/cloud-messaging/admin/manage-topic-subscriptions#unsubscribe_from_a_topic) * for code samples and detailed documentation. Optionally, you can provide an * array of tokens to unsubscribe multiple devices. * * @param registrationTokens A device registration token or an array of * device registration tokens to unsubscribe from the topic. * @param topic The topic from which to unsubscribe. * * @return A promise fulfilled with the server's response after the device has been * unsubscribed from the topic. */ unsubscribeFromTopic(registrationTokens: string | string[], topic: string): Promise<MessagingTopicManagementResponse>; } export {}; }
Back to File Manager