// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved. // // stringlint:disable import Foundation import SessionUtilitiesKit // MARK: Request - SnodeAPI public extension Request where Endpoint == SnodeAPI.Endpoint { init( endpoint: SnodeAPI.Endpoint, snode: LibSession.Snode, swarmPublicKey: String? = nil, body: B ) throws where T == SnodeRequest { self = try Request( endpoint: endpoint, destination: .snode( snode, swarmPublicKey: swarmPublicKey ), body: SnodeRequest( endpoint: endpoint, body: body ) ) } init( endpoint: SnodeAPI.Endpoint, swarmPublicKey: String, body: B, snodeRetrievalRetryCount: Int = SnodeAPI.maxRetryCount ) throws where T == SnodeRequest { self = try Request( endpoint: endpoint, destination: .randomSnode( swarmPublicKey: swarmPublicKey, snodeRetrievalRetryCount: snodeRetrievalRetryCount ), body: SnodeRequest( endpoint: endpoint, body: body ) ) } init( endpoint: Endpoint, swarmPublicKey: String, requiresLatestNetworkTime: Bool, body: B, snodeRetrievalRetryCount: Int = SnodeAPI.maxRetryCount ) throws where T == SnodeRequest, B: Encodable & UpdatableTimestamp { self = try Request( endpoint: endpoint, destination: .randomSnodeLatestNetworkTimeTarget( swarmPublicKey: swarmPublicKey, snodeRetrievalRetryCount: snodeRetrievalRetryCount, bodyWithUpdatedTimestampMs: { timestampMs, dependencies in SnodeRequest( endpoint: endpoint, body: body.with(timestampMs: timestampMs) ) } ), body: SnodeRequest( endpoint: endpoint, body: body ) ) } }