mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
| // Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
 | |
| //
 | |
| // stringlint:disable
 | |
| 
 | |
| import Foundation
 | |
| import SessionUtilitiesKit
 | |
| 
 | |
| // MARK: - SnodeTarget
 | |
| 
 | |
| internal extension Network {
 | |
|     struct SnodeTarget: RequestTarget, Equatable {
 | |
|         let snode: LibSession.Snode
 | |
|         let swarmPublicKey: String?
 | |
|         
 | |
|         var url: URL? { URL(string: "snode:\(snode.address)") }
 | |
|         var urlPathAndParamsString: String { return "" }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: - RandomSnodeTarget
 | |
| 
 | |
| internal extension Network {
 | |
|     struct RandomSnodeTarget: RequestTarget, Equatable {
 | |
|         let swarmPublicKey: String
 | |
|         let retryCount: Int
 | |
|         
 | |
|         var url: URL? { URL(string: "snode:\(swarmPublicKey)") }
 | |
|         var urlPathAndParamsString: String { return "" }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: - RandomSnodeLatestNetworkTimeTarget
 | |
| 
 | |
| internal extension Network {
 | |
|     struct RandomSnodeLatestNetworkTimeTarget: RequestTarget, Equatable {
 | |
|         let swarmPublicKey: String
 | |
|         let retryCount: Int
 | |
|         let urlRequestWithUpdatedTimestampMs: ((UInt64, Dependencies) throws -> URLRequest)
 | |
|         
 | |
|         var url: URL? { URL(string: "snode:\(swarmPublicKey)") }
 | |
|         var urlPathAndParamsString: String { return "" }
 | |
|         
 | |
|         static func == (lhs: Network.RandomSnodeLatestNetworkTimeTarget, rhs: Network.RandomSnodeLatestNetworkTimeTarget) -> Bool {
 | |
|             lhs.swarmPublicKey == rhs.swarmPublicKey && lhs.retryCount == rhs.retryCount
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: Request - SnodeTarget
 | |
| 
 | |
| public extension Request {
 | |
|     init(
 | |
|         method: HTTPMethod = .get,
 | |
|         endpoint: Endpoint,
 | |
|         snode: LibSession.Snode,
 | |
|         headers: [HTTPHeader: String] = [:],
 | |
|         body: T? = nil,
 | |
|         swarmPublicKey: String?,
 | |
|         retryCount: Int
 | |
|     ) {
 | |
|         self = Request(
 | |
|             method: method,
 | |
|             endpoint: endpoint,
 | |
|             target: Network.SnodeTarget(
 | |
|                 snode: snode,
 | |
|                 swarmPublicKey: swarmPublicKey
 | |
|             ),
 | |
|             headers: headers,
 | |
|             body: body
 | |
|         )
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: Request - RandomSnodeTarget
 | |
| 
 | |
| public extension Request {
 | |
|     init(
 | |
|         method: HTTPMethod = .get,
 | |
|         endpoint: Endpoint,
 | |
|         swarmPublicKey: String,
 | |
|         headers: [HTTPHeader: String] = [:],
 | |
|         body: T? = nil,
 | |
|         retryCount: Int
 | |
|     ) {
 | |
|         self = Request(
 | |
|             method: method,
 | |
|             endpoint: endpoint,
 | |
|             target: Network.RandomSnodeTarget(
 | |
|                 swarmPublicKey: swarmPublicKey,
 | |
|                 retryCount: retryCount
 | |
|             ),
 | |
|             headers: headers,
 | |
|             body: body
 | |
|         )
 | |
|     }
 | |
| }
 | |
| 
 | |
| // MARK: Request - RandomSnodeLatestNetworkTimeTarget
 | |
|     
 | |
| public extension Request {
 | |
|     init(
 | |
|         method: HTTPMethod = .get,
 | |
|         endpoint: Endpoint,
 | |
|         swarmPublicKey: String,
 | |
|         headers: [HTTPHeader: String] = [:],
 | |
|         requiresLatestNetworkTime: Bool,
 | |
|         body: T? = nil,
 | |
|         retryCount: Int
 | |
|     ) where T: UpdatableTimestamp {
 | |
|         self = Request(
 | |
|             method: method,
 | |
|             endpoint: endpoint,
 | |
|             target: Network.RandomSnodeLatestNetworkTimeTarget(
 | |
|                 swarmPublicKey: swarmPublicKey,
 | |
|                 retryCount: retryCount,
 | |
|                 urlRequestWithUpdatedTimestampMs: { timestampMs, dependencies in
 | |
|                     try Request(
 | |
|                         method: method,
 | |
|                         endpoint: endpoint,
 | |
|                         swarmPublicKey: swarmPublicKey,
 | |
|                         headers: headers,
 | |
|                         body: body?.with(timestampMs: timestampMs),
 | |
|                         retryCount: retryCount
 | |
|                     ).generateUrlRequest(using: dependencies)
 | |
|                 }
 | |
|             ),
 | |
|             headers: headers,
 | |
|             body: body
 | |
|         )
 | |
|     }
 | |
| }
 |