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
 | 
						|
        )
 | 
						|
    }
 | 
						|
}
 |