blob: 6adc6ea296a9c2e153d7f7b709a967b6476b70ef [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.firebase.messaging;
type Application = struct {
/// Full package name of the application.
name string:MAX;
/// Sender ID associated with the firebase project.
sender string:MAX;
/// Application-defined string.
version string:MAX;
};
/// Connectivity events to sign up for.
type ConnectivityEvent = strict bits : uint8 {
/// Indicates that the client has signed up for connectivity notifications.
START = 1;
/// Informs the service on client disconnection.
DISCONNECT = 2;
/// Informs the service of heartbeats from the client. May be noisy.
HEARTBEAT = 4;
};
type Pair = struct {
key string:4096;
val string:4096;
};
type Priority = strict enum {
NORMAL = 5;
HIGH = 10;
};
/// Data wrapper for FCM.
type Message = table {
/// This parameter specifies the recipient of a message.
///
/// For example it can be a registration token, a topic name, a IID or
/// project ID.
///
/// For upstream messages, `PROJECT_ID@gcm.googleapis.com` or the more general
/// IID format are accepted.
1: to string:MAX;
/// The metadata, including all original key/value pairs. Includes some of
/// the HTTP headers used when sending the message. `gcm`, `google` and
/// `goog` prefixes are reserved for internal use.
2: metadata vector<Pair>:4096;
/// Binary payload. For webpush and non-json messages, this is the body of
/// the request entity.
3: payload vector<uint8>:4096;
/// Message ID. This can be specified by sender. Internally a hash of the
/// message ID and other elements will be used for storage. The ID must be
/// unique for each topic subscription - using the same ID may result in
/// overriding the original message or duplicate delivery.
4: id string:MAX;
};
type DownstreamMessage = table {
1: message Message;
/// Authenticated ID of the sender. This is a project number in most cases.
2: from string:MAX;
/// The collapse key used for collapsible messages.
3: collapse_key string:MAX;
/// Equivalent with a content-type.
/// Special types:
/// "ack" and "nack" are used for flow control and error handling.
/// "control" is used for connection control.
4: type string:MAX;
/// Priority level. If absent, indicates normal priority (i.e.
/// Priority.NORMAL).
5: priority Priority;
/// Time to live, in seconds.
6: time_to_live uint32;
};