diff --git a/lib/types/tunnelbroker/message-to-tunnelbroker-request-types.js b/lib/types/tunnelbroker/message-to-tunnelbroker-request-types.js new file mode 100644 index 000000000..48008f568 --- /dev/null +++ b/lib/types/tunnelbroker/message-to-tunnelbroker-request-types.js @@ -0,0 +1,19 @@ +// @flow + +import type { TInterface } from 'tcomb'; +import t from 'tcomb'; + +import { tShape, tString } from '../../utils/validation-utils.js'; + +export type MessageToTunnelbrokerRequest = { + +type: 'MessageToTunnelbrokerRequest', + +clientMessageID: string, + +payload: string, +}; + +export const messageToTunnelbrokerRequestValidator: TInterface = + tShape({ + type: tString('MessageToTunnelbrokerRequest'), + clientMessageID: t.String, + payload: t.String, + }); diff --git a/lib/types/tunnelbroker/messages.js b/lib/types/tunnelbroker/messages.js index b2cb1f39b..e1bd4d19e 100644 --- a/lib/types/tunnelbroker/messages.js +++ b/lib/types/tunnelbroker/messages.js @@ -1,75 +1,82 @@ // @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 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', 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; + | Heartbeat + | MessageToTunnelbrokerRequest; diff --git a/shared/tunnelbroker_messages/src/messages/message_to_tunnelbroker_request.rs b/shared/tunnelbroker_messages/src/messages/message_to_tunnelbroker_request.rs new file mode 100644 index 000000000..b46db4f26 --- /dev/null +++ b/shared/tunnelbroker_messages/src/messages/message_to_tunnelbroker_request.rs @@ -0,0 +1,11 @@ +//! Message sent from device to Tunnelbroker. + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +#[serde(tag = "type", rename_all = "camelCase")] +pub struct MessageToTunnelbrokerRequest { + #[serde(rename = "clientMessageID")] + pub client_message_id: String, + pub payload: String, +} diff --git a/shared/tunnelbroker_messages/src/messages/mod.rs b/shared/tunnelbroker_messages/src/messages/mod.rs index 46f6574fa..8f40b6b90 100644 --- a/shared/tunnelbroker_messages/src/messages/mod.rs +++ b/shared/tunnelbroker_messages/src/messages/mod.rs @@ -1,54 +1,61 @@ //! 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_request; 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_request::*; pub use session::*; pub use websocket_messages::{ ConnectionInitializationResponse, ConnectionInitializationStatus, Heartbeat, }; 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. 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 {}