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.
session-ios/SessionSnodeKit/Networking/Request+SnodeAPI.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
)
}
}