1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
//
// APIRequest.swift
// MullvadVPN
//
// Created by Jon Petersson on 2025-02-24.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import MullvadTypes
@preconcurrency import WireGuardKitTypes
public enum APIRequest: Codable, Sendable {
// Api Proxy
case getAddressList(_ retryStrategy: REST.RetryStrategy)
case getRelayList(_ retryStrategy: REST.RetryStrategy, etag: String?)
case sendProblemReport(_ retryStrategy: REST.RetryStrategy, problemReportRequest: ProblemReportRequest)
case checkApiAvailability(_ retryStrategy: REST.RetryStrategy, accessMethod: PersistentAccessMethod)
// Account Proxy
case createAccount(_ retryStrategy: REST.RetryStrategy)
case getAccount(_ retryStrategy: REST.RetryStrategy, accountNumber: String)
case deleteAccount(_ retryStrategy: REST.RetryStrategy, accountNumber: String)
case legacyStorekitPayment(
retryStrategy: REST.RetryStrategy,
accountNumber: String,
request: LegacyStorekitRequest
)
case initStorekitPayment(retryStrategy: REST.RetryStrategy, accountNumber: String)
case checkStorekitPayment(
retryStrategy: REST.RetryStrategy,
accountNumber: String,
transaction: StorekitTransaction
)
// Device Proxy
case getDevice(_ retryStrategy: REST.RetryStrategy, accountNumber: String, identifier: String)
case getDevices(_ retryStrategy: REST.RetryStrategy, accountNumber: String)
case createDevice(_ retryStrategy: REST.RetryStrategy, accountNumber: String, request: CreateDeviceRequest)
case deleteDevice(_ retryStrategy: REST.RetryStrategy, accountNumber: String, identifier: String)
case rotateDeviceKey(
_ retryStrategy: REST.RetryStrategy,
accountNumber: String,
identifier: String,
publicKey: PublicKey
)
var name: String {
switch self {
case .getAddressList:
"get-address-list"
case .getRelayList:
"get-relay-list"
case .sendProblemReport:
"send-problem-report"
case .createAccount:
"create-account"
case .getAccount:
"get-account"
case .deleteAccount:
"delete-account"
case .getDevice:
"get-device"
case .getDevices:
"get-devices"
case .deleteDevice:
"delete-device"
case .rotateDeviceKey:
"rotate-device-key"
case .createDevice:
"create-device"
case .legacyStorekitPayment:
"legacy-storekit-payment"
case .initStorekitPayment:
"init-storekit-payment"
case .checkStorekitPayment:
"check-storekit-payment"
case .checkApiAvailability:
"check-api-availability"
}
}
var retryStrategy: REST.RetryStrategy {
switch self {
case let .getAddressList(strategy),
let .getRelayList(strategy, _),
let .sendProblemReport(strategy, _),
let .createAccount(strategy),
let .getAccount(strategy, _),
let .deleteAccount(strategy, _),
let .createDevice(strategy, _, _),
let .getDevice(strategy, _, _),
let .getDevices(strategy, _),
let .deleteDevice(strategy, _, _),
let .rotateDeviceKey(strategy, _, _, _),
let .legacyStorekitPayment(strategy, _, _),
let .initStorekitPayment(strategy, _),
let .checkStorekitPayment(strategy, _, _),
let .checkApiAvailability(strategy, _):
strategy
}
}
}
public struct ProxyAPIRequest: Codable, Sendable {
public let id: UUID
public let request: APIRequest
public init(id: UUID, request: APIRequest) {
self.id = id
self.request = request
}
}
public struct ProxyAPIResponse: Codable, Sendable {
public let data: Data?
public let error: APIError?
public let etag: String?
public init(data: Data?, error: APIError?, etag: String? = nil) {
self.data = data
self.error = error
self.etag = etag
}
}
|