blob: 495f073f6867917bad5138a999621f95800768db [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;
struct Application {
/// Full package name of the application.
string name;
/// Sender ID associated with the firebase project.
string sender;
/// Application-defined string.
string version;
};
/// Connectivity events to sign up for.
bits ConnectivityEvent: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;
};
struct Pair {
string:4096 key;
string:4096 val;
};
enum Priority {
NORMAL = 5;
HIGH = 10;
};
/// Data wrapper for FCM.
table Message {
/// 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: string to;
/// 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: vector<Pair>:4096 metadata;
/// Binary payload. For webpush and non-json messages, this is the body of
/// the request entity.
3: bytes:4096 payload;
/// 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: string id;
};
table DownstreamMessage {
1: Message message;
/// Authenticated ID of the sender. This is a project number in most cases.
2: string from;
/// The collapse key used for collapsible messages.
3: string collapse_key;
/// 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: string type;
/// Priority level. By default messages are sent with normal priority.
5: Priority priority;
/// Time to live, in seconds.
6: uint32 time_to_live;
};