// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import Foundation import SessionUtilitiesKit public struct SnodeReceivedMessage: CustomDebugStringConvertible { /// Service nodes cache messages for 14 days so default the expiration for message hashes to '15' days /// so we don't end up indefinitely storing records which will never be used public static let defaultExpirationSeconds: Int64 = ((15 * 24 * 60 * 60) * 1000) public let info: SnodeReceivedMessageInfo public let data: Data init?(snode: Snode, publicKey: String, rawMessage: JSON) { guard let hash: String = rawMessage["hash"] as? String else { return nil } guard let base64EncodedString: String = rawMessage["data"] as? String, let data: Data = Data(base64Encoded: base64EncodedString) else { SNLog("Failed to decode data for message: \(rawMessage).") return nil } let expirationDateMs: Int64? = (rawMessage["expiration"] as? Int64) self.info = SnodeReceivedMessageInfo( snode: snode, publicKey: publicKey, hash: hash, expirationDateMs: (expirationDateMs ?? SnodeReceivedMessage.defaultExpirationSeconds) ) self.data = data } public var debugDescription: String { return "{\"hash\":\(info.hash),\"expiration\":\(info.expirationDateMs),\"data\":\"\(data.base64EncodedString())\"}" } }