diff --git a/lib/types/backup-types.js b/lib/types/backup-types.js --- a/lib/types/backup-types.js +++ b/lib/types/backup-types.js @@ -19,6 +19,19 @@ siweBackupMsgIssuedAt: t.String, }); +// This type should match `BackupVersionInfo` in +// `shared/comm-lib/src/backup/mod.rs` +export type BackupVersionInfo = { + +codeVersion: number, + +stateVersion: number, + +dbVersion: number, +}; +export const backupVersionInfoValidator: TInterface = + tShape({ + codeVersion: t.Number, + stateVersion: t.Number, + dbVersion: t.Number, + }); // This type should match `LatestBackupInfo` in // `native/native_rust_library/src/backup.rs` export type LatestBackupInfo = { @@ -26,6 +39,10 @@ +userID: string, +siweBackupData?: ?SIWEBackupData, +keyserverDeviceID?: ?string, + // ISO 8601 / RFC 3339 DateTime string + +creationTimestamp: string, + +totalBackupSize: number, + +versionInfo: BackupVersionInfo, }; export const latestBackupInfoResponseValidator: TInterface = tShape({ @@ -33,6 +50,9 @@ userID: t.String, siweBackupData: t.maybe(siweBackupDataValidator), keyserverDeviceID: t.maybe(t.String), + creationTimestamp: t.String, + totalBackupSize: t.Number, + versionInfo: backupVersionInfoValidator, }); // This type should match `UserKeys` in diff --git a/native/account/restore.js b/native/account/restore.js --- a/native/account/restore.js +++ b/native/account/restore.js @@ -69,7 +69,22 @@ if (!latestBackupInfo) { throw new Error('Backup not found'); } - const { userID, backupID, keyserverDeviceID } = latestBackupInfo; + const { + userID, + backupID, + keyserverDeviceID, + creationTimestamp, + totalBackupSize, + versionInfo, + } = latestBackupInfo; + + const backupDate = new Date(creationTimestamp).toString(); + console.log('Restoring from Backup:', { + backupID, + backupDate, + totalBackupSize, + versionInfo, + }); const { pickledAccount, pickleKey, backupDataKey, backupLogDataKey } = await getBackupUserKeys(userIdentifier, secret, backupID); diff --git a/native/native_rust_library/src/backup.rs b/native/native_rust_library/src/backup.rs --- a/native/native_rust_library/src/backup.rs +++ b/native/native_rust_library/src/backup.rs @@ -15,8 +15,8 @@ use crate::BACKUP_SOCKET_ADDR; use crate::RUNTIME; use backup_client::{ - BackupClient, BackupDescriptor, LatestBackupInfoResponse, RequestedData, - TryStreamExt, UserIdentity, + BackupClient, BackupDescriptor, BackupVersionInfo, LatestBackupInfoResponse, + RequestedData, TryStreamExt, UserIdentity, }; use serde::{Deserialize, Serialize}; use siwe::Message; @@ -258,7 +258,9 @@ user_id, siwe_backup_msg, keyserver_device_id, - .. + creation_timestamp, + total_backup_size, + version_info, } = result; let siwe_backup_data = match siwe_backup_msg { @@ -279,6 +281,9 @@ user_id, siwe_backup_data, keyserver_device_id, + creation_timestamp, + total_backup_size, + version_info, }; let serialize_result = serde_json::to_string(&result); @@ -487,6 +492,10 @@ pub siwe_backup_data: Option, #[serde(rename = "keyserverDeviceID")] pub keyserver_device_id: Option, + // ISO 8601 / RFC 3339 DateTime string + pub creation_timestamp: String, + pub total_backup_size: u64, + pub version_info: BackupVersionInfo, } struct CompactionDownloadResult { diff --git a/shared/backup_client/src/lib.rs b/shared/backup_client/src/lib.rs --- a/shared/backup_client/src/lib.rs +++ b/shared/backup_client/src/lib.rs @@ -4,8 +4,8 @@ use async_stream::{stream, try_stream}; pub use comm_lib::auth::UserIdentity; pub use comm_lib::backup::{ - DownloadLogsRequest, LatestBackupInfoResponse, LogWSRequest, LogWSResponse, - UploadLogRequest, + BackupVersionInfo, DownloadLogsRequest, LatestBackupInfoResponse, + LogWSRequest, LogWSResponse, UploadLogRequest, }; pub use futures_util::{Sink, SinkExt, Stream, StreamExt, TryStreamExt}; use hex::ToHex;