// 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;
};
