diff --git a/lib/types/tunnelbroker/messages.js b/lib/types/tunnelbroker/messages.js index e1bd4d19e..fbc4d3518 100644 --- a/lib/types/tunnelbroker/messages.js +++ b/lib/types/tunnelbroker/messages.js @@ -1,82 +1,85 @@ // @flow import type { TUnion } from 'tcomb'; import t from 'tcomb'; import { type MessageReceiveConfirmation, messageReceiveConfirmationValidator, } from './message-receive-confirmation-types.js'; import { type MessageToDeviceRequestStatus, messageToDeviceRequestStatusValidator, } from './message-to-device-request-status-types.js'; import { type MessageToDeviceRequest, messageToDeviceRequestValidator, } from './message-to-device-request-types.js'; import { type MessageToDevice, messageToDeviceValidator, } from './message-to-device-types.js'; import { type MessageToTunnelbrokerRequest, messageToTunnelbrokerRequestValidator, } from './message-to-tunnelbroker-request-types.js'; +import { type TunnelbrokerAPNsNotif } from './notif-types.js'; import { type ConnectionInitializationMessage, connectionInitializationMessageValidator, } from './session-types.js'; import { type ConnectionInitializationResponse, connectionInitializationResponseValidator, } from '../websocket/connection-initialization-response-types.js'; import { type Heartbeat, heartbeatValidator, } from '../websocket/heartbeat-types.js'; /* * This file defines types and validation for messages exchanged * with the Tunnelbroker. The definitions in this file should remain in sync * with the structures defined in the corresponding * Rust file at `shared/tunnelbroker_messages/src/messages/mod.rs`. * * If you edit the definitions in one file, * please make sure to update the corresponding definitions in the other. * */ export const tunnelbrokerMessageTypes = Object.freeze({ CONNECTION_INITIALIZATION_MESSAGE: 'ConnectionInitializationMessage', CONNECTION_INITIALIZATION_RESPONSE: 'ConnectionInitializationResponse', ANONYMOUS_INITIALIZATION_MESSAGE: 'AnonymousInitializationMessage', + TUNNELBROKER_APNS_NOTIF: 'APNsNotif', MESSAGE_TO_DEVICE_REQUEST_STATUS: 'MessageToDeviceRequestStatus', MESSAGE_TO_DEVICE_REQUEST: 'MessageToDeviceRequest', MESSAGE_TO_TUNNELBROKER_REQUEST: 'MessageToTunnelbrokerRequest', MESSAGE_TO_DEVICE: 'MessageToDevice', MESSAGE_RECEIVE_CONFIRMATION: 'MessageReceiveConfirmation', HEARTBEAT: 'Heartbeat', }); export const tunnelbrokerMessageValidator: TUnion = t.union([ connectionInitializationMessageValidator, connectionInitializationResponseValidator, messageToDeviceRequestStatusValidator, messageToDeviceRequestValidator, messageToDeviceValidator, messageReceiveConfirmationValidator, heartbeatValidator, messageToTunnelbrokerRequestValidator, ]); export type TunnelbrokerMessage = | ConnectionInitializationMessage | ConnectionInitializationResponse | MessageToDeviceRequestStatus | MessageToDeviceRequest | MessageToDevice | MessageReceiveConfirmation | Heartbeat - | MessageToTunnelbrokerRequest; + | MessageToTunnelbrokerRequest + | TunnelbrokerAPNsNotif; diff --git a/lib/types/tunnelbroker/notif-types.js b/lib/types/tunnelbroker/notif-types.js new file mode 100644 index 000000000..31c7c09b0 --- /dev/null +++ b/lib/types/tunnelbroker/notif-types.js @@ -0,0 +1,9 @@ +// @flow + +export type TunnelbrokerAPNsNotif = { + +type: 'APNsNotif', + +headers: string, + +clientMessageID: string, + +deviceID: string, + +payload: string, +}; diff --git a/shared/tunnelbroker_messages/src/messages/mod.rs b/shared/tunnelbroker_messages/src/messages/mod.rs index 708fa3e66..f62304351 100644 --- a/shared/tunnelbroker_messages/src/messages/mod.rs +++ b/shared/tunnelbroker_messages/src/messages/mod.rs @@ -1,65 +1,68 @@ //! Messages sent between Tunnelbroker and a device. pub mod device_list_updated; pub mod keys; pub mod message_receive_confirmation; pub mod message_to_device; pub mod message_to_device_request; pub mod message_to_device_request_status; pub mod message_to_tunnelbroker; pub mod message_to_tunnelbroker_request; +pub mod notif; pub mod session; pub use device_list_updated::*; pub use keys::*; pub use message_receive_confirmation::*; pub use message_to_device::*; pub use message_to_device_request::*; pub use message_to_device_request_status::*; pub use message_to_tunnelbroker::*; pub use message_to_tunnelbroker_request::*; pub use session::*; pub use websocket_messages::{ ConnectionInitializationResponse, ConnectionInitializationStatus, Heartbeat, }; +use crate::notif::*; use serde::{Deserialize, Serialize}; // This file defines types and validation for messages exchanged // with the Tunnelbroker. The definitions in this file should remain in sync // with the structures defined in the corresponding // JavaScript file at `lib/types/tunnelbroker/messages.js`. // If you edit the definitions in one file, // please make sure to update the corresponding definitions in the other. #[derive(Serialize, Deserialize, Debug)] #[serde(untagged)] pub enum Messages { ConnectionInitializationMessage(ConnectionInitializationMessage), ConnectionInitializationResponse(ConnectionInitializationResponse), AnonymousInitializationMessage(AnonymousInitializationMessage), // MessageToDeviceRequestStatus must be placed before MessageToDeviceRequest. // This is due to serde's pattern matching behavior where it prioritizes // the first matching pattern it encounters. + APNsNotif(APNsNotif), MessageToDeviceRequestStatus(MessageToDeviceRequestStatus), MessageToDeviceRequest(MessageToDeviceRequest), MessageToDevice(MessageToDevice), MessageReceiveConfirmation(MessageReceiveConfirmation), MessageToTunnelbrokerRequest(MessageToTunnelbrokerRequest), Heartbeat(Heartbeat), IdentityDeviceListUpdated(IdentityDeviceListUpdated), } #[derive(Serialize, Deserialize, Debug)] #[serde(untagged)] pub enum PeerToPeerMessages { RefreshKeysRequest(RefreshKeyRequest), IdentityDeviceListUpdated(IdentityDeviceListUpdated), } #[derive(Serialize, Deserialize, Debug)] #[serde(untagged)] pub enum MessageToTunnelbroker { SetDeviceToken(SetDeviceToken), } diff --git a/shared/tunnelbroker_messages/src/messages/notif.rs b/shared/tunnelbroker_messages/src/messages/notif.rs new file mode 100644 index 000000000..cb51df58c --- /dev/null +++ b/shared/tunnelbroker_messages/src/messages/notif.rs @@ -0,0 +1,14 @@ +//! APNs notif built on client. + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[serde(tag = "type", rename_all = "camelCase")] +pub struct APNsNotif { + pub headers: String, + #[serde(rename = "clientMessageID")] + pub client_message_id: String, + #[serde(rename = "deviceID")] + pub device_id: String, + pub payload: String, +}