-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathErrors.swift
More file actions
369 lines (354 loc) · 15 KB
/
Errors.swift
File metadata and controls
369 lines (354 loc) · 15 KB
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
import Foundation
import LDKNode
enum CustomServiceError: Error {
case nodeNotSetup
case nodeNotStarted
case onchainWalletNotInitialized
case ldkNodeSqliteAlreadyExists
case ldkToLdkNodeMigration
case mnemonicNotFound
case nodeStillRunning
case onchainWalletStillRunning
case invalidNodeSigningMessage
case regtestOnlyMethod
case channelSizeExceedsMaximum
case currencyRateUnavailable
}
enum KeychainError: Error {
case failedToSave
case failedToSaveAlreadyExists
case failedToDelete
case failedToLoad
case failedToDecrypt
case keychainWipeNotAllowed
}
enum BlocktankError_deprecated: Error {
case missingResponse
case invalidResponse
case invalidJson
case missingDeviceToken
}
/// Translates LDK and BDK error messages into translated messages that can be displayed to end users
struct AppError: LocalizedError {
let message: String
let debugMessage: String?
var errorDescription: String? {
return NSLocalizedString(message, comment: "")
}
/// Pass any LDK or BDK error to get a translated error message
/// - Parameter error: any error
init(error: Error) {
if let ldkBuildError = error as? BuildError {
self.init(ldkBuildError: ldkBuildError)
return
}
if let ldkError = error as? NodeError {
self.init(ldkError: ldkError)
return
}
// TODO: support all message types in switch case
// CalculateFeeError
// CannotConnectError
// DescriptorError
// EsploraError
// PersistenceError
self.init(message: "App Error", debugMessage: error.localizedDescription)
}
init(message: String, debugMessage: String?) {
self.message = message
self.debugMessage = debugMessage
}
init(serviceError: CustomServiceError) {
switch serviceError {
case .nodeNotSetup:
message = "Node is not setup"
debugMessage = nil
case .nodeNotStarted:
message = "Node is not started"
debugMessage = nil
case .onchainWalletNotInitialized:
message = "Onchain wallet not created"
debugMessage = nil
case .ldkNodeSqliteAlreadyExists:
message = "LDK-node SQLite file already exists"
debugMessage = nil
case .ldkToLdkNodeMigration:
message = "LDK to LDK-node migration issue"
debugMessage = nil
case .mnemonicNotFound:
message = "Mnemonic not found"
debugMessage = nil
case .nodeStillRunning:
message = "Node is still running"
debugMessage = nil
case .onchainWalletStillRunning:
message = "Onchain wallet is still running"
debugMessage = nil
case .invalidNodeSigningMessage:
message = "Invalid node signing message"
debugMessage = nil
case .regtestOnlyMethod:
message = "Method only available in regtest environment"
debugMessage = nil
case .channelSizeExceedsMaximum:
message = "Channel size exceeds maximum allowed size"
debugMessage = nil
case .currencyRateUnavailable:
message = "Currency rate unavailable"
debugMessage = nil
}
Logger.error("\(message) [\(debugMessage ?? "")]", context: "service error")
}
// private init(bdkError: Error) {
// message = "Onchain wallet error"
// debugMessage = bdkError.localizedDescription
//
//
//
// Logger.error("\(message) [\(debugMessage ?? "")]", context: "BdkError")
// }
private init(ldkBuildError: BuildError) {
switch ldkBuildError as BuildError {
case let .InvalidSeedBytes(message: ldkMessage):
message = "Invalid seed bytes"
debugMessage = ldkMessage
case let .InvalidSeedFile(message: ldkMessage):
message = "Invalid seed file"
debugMessage = ldkMessage
case let .InvalidSystemTime(message: ldkMessage):
message = "Invalid system time"
debugMessage = ldkMessage
case let .InvalidChannelMonitor(message: ldkMessage):
message = "Invalid channel monitor"
debugMessage = ldkMessage
case let .InvalidListeningAddresses(message: ldkMessage):
message = "Invalid listening addresses"
debugMessage = ldkMessage
case let .InvalidAnnouncementAddresses(message: ldkMessage):
message = "Invalid announcement addresses"
debugMessage = ldkMessage
case let .InvalidNodeAlias(message: ldkMessage):
message = "Invalid node alias"
debugMessage = ldkMessage
case let .RuntimeSetupFailed(message: ldkMessage):
message = "Runtime setup failed"
debugMessage = ldkMessage
case let .ReadFailed(message: ldkMessage):
message = "Read failed"
debugMessage = ldkMessage
case let .WriteFailed(message: ldkMessage):
message = "Write failed"
debugMessage = ldkMessage
case let .StoragePathAccessFailed(message: ldkMessage):
message = "Storage path access failed"
debugMessage = ldkMessage
case let .KvStoreSetupFailed(message: ldkMessage):
message = "KV store setup failed"
debugMessage = ldkMessage
case let .WalletSetupFailed(message: ldkMessage):
message = "Wallet setup failed"
debugMessage = ldkMessage
case let .LoggerSetupFailed(message: ldkMessage):
message = "Logger setup failed"
debugMessage = ldkMessage
case let .NetworkMismatch(message: ldkMessage):
message = "Network mismatch"
debugMessage = ldkMessage
case let .AsyncPaymentsConfigMismatch(message: ldkMessage):
message = "Async payments config mismatch"
debugMessage = ldkMessage
}
}
private init(ldkError: NodeError) {
switch ldkError as NodeError {
case let .AlreadyRunning(message: ldkMessage):
message = "Node is already running"
debugMessage = ldkMessage
case let .NotRunning(message: ldkMessage):
message = "Node is not running"
debugMessage = ldkMessage
case let .OnchainTxCreationFailed(message: ldkMessage):
message = "Failed to create onchain transaction"
debugMessage = ldkMessage
case let .ConnectionFailed(message: ldkMessage):
message = "Failed to connect to node"
debugMessage = ldkMessage
case let .InvoiceCreationFailed(message: ldkMessage):
message = "Failed to create invoice"
debugMessage = ldkMessage
case let .InvoiceRequestCreationFailed(message: ldkMessage):
message = "Failed to create invoice request"
debugMessage = ldkMessage
case let .OfferCreationFailed(message: ldkMessage):
message = "Failed to create offer"
debugMessage = ldkMessage
case let .RefundCreationFailed(message: ldkMessage):
message = "Failed to create refund"
debugMessage = ldkMessage
case let .PaymentSendingFailed(message: ldkMessage):
// message = "Failed to send payment. \(ldkMessage)"
message = ldkMessage
debugMessage = ldkMessage
case let .InvalidCustomTlvs(message: ldkMessage):
message = "Invalid custom TLVs"
debugMessage = ldkMessage
case let .ProbeSendingFailed(message: ldkMessage):
message = "Failed to send probe"
debugMessage = ldkMessage
case let .RouteNotFound(message: ldkMessage):
message = "Failed to find a route for fee estimation"
debugMessage = ldkMessage
case let .ChannelCreationFailed(message: ldkMessage):
message = "Failed to create channel"
debugMessage = ldkMessage
case let .ChannelClosingFailed(message: ldkMessage):
message = "Failed to close channel"
debugMessage = ldkMessage
case let .ChannelSplicingFailed(message: ldkMessage):
message = "Failed to splice channel"
debugMessage = ldkMessage
case let .ChannelConfigUpdateFailed(message: ldkMessage):
message = "Failed to update channel config"
debugMessage = ldkMessage
case let .PersistenceFailed(message: ldkMessage):
message = "Failed to persist data"
debugMessage = ldkMessage
case let .FeerateEstimationUpdateFailed(message: ldkMessage):
message = "Failed to update feerate estimation"
debugMessage = ldkMessage
case let .FeerateEstimationUpdateTimeout(message: ldkMessage):
message = "Failed to update feerate estimation due to timeout"
debugMessage = ldkMessage
case let .WalletOperationFailed(message: ldkMessage):
message = "Failed to perform wallet operation"
debugMessage = ldkMessage
case let .WalletOperationTimeout(message: ldkMessage):
message = "Failed to perform wallet operation due to timeout"
debugMessage = ldkMessage
case let .OnchainTxSigningFailed(message: ldkMessage):
message = "Failed to sign onchain transaction"
debugMessage = ldkMessage
case let .TxSyncFailed(message: ldkMessage):
message = "Failed to sync transaction"
debugMessage = ldkMessage
case let .TxSyncTimeout(message: ldkMessage):
message = "Failed to sync transaction due to timeout"
debugMessage = ldkMessage
case let .GossipUpdateFailed(message: ldkMessage):
message = "Failed to update gossip"
debugMessage = ldkMessage
case let .GossipUpdateTimeout(message: ldkMessage):
message = "Failed to update gossip due to timeout"
debugMessage = ldkMessage
case let .LiquidityRequestFailed(message: ldkMessage):
message = "Failed to request liquidity"
debugMessage = ldkMessage
case let .UriParameterParsingFailed(message: ldkMessage):
message = "Failed to parse URI parameters"
debugMessage = ldkMessage
case let .InvalidAddress(message: ldkMessage):
message = "Invalid address"
debugMessage = ldkMessage
case let .InvalidSocketAddress(message: ldkMessage):
message = "Invalid socket address"
debugMessage = ldkMessage
case let .InvalidPublicKey(message: ldkMessage):
message = "Invalid public key"
debugMessage = ldkMessage
case let .InvalidSecretKey(message: ldkMessage):
message = "Invalid secret key"
debugMessage = ldkMessage
case let .InvalidOfferId(message: ldkMessage):
message = "Invalid offer ID"
debugMessage = ldkMessage
case let .InvalidNodeId(message: ldkMessage):
message = "Invalid node ID"
debugMessage = ldkMessage
case let .InvalidPaymentId(message: ldkMessage):
message = "Invalid payment ID"
debugMessage = ldkMessage
case let .InvalidPaymentHash(message: ldkMessage):
message = "Invalid payment hash"
debugMessage = ldkMessage
case let .InvalidPaymentPreimage(message: ldkMessage):
message = "Invalid payment preimage"
debugMessage = ldkMessage
case let .InvalidPaymentSecret(message: ldkMessage):
message = "Invalid payment secret"
debugMessage = ldkMessage
case let .InvalidAmount(message: ldkMessage):
message = "Invalid amount"
debugMessage = ldkMessage
case let .InvalidInvoice(message: ldkMessage):
message = "Invalid invoice"
debugMessage = ldkMessage
case let .InvalidOffer(message: ldkMessage):
message = "Invalid offer"
debugMessage = ldkMessage
case let .InvalidRefund(message: ldkMessage):
message = "Invalid refund"
debugMessage = ldkMessage
case let .InvalidChannelId(message: ldkMessage):
message = "Invalid channel ID"
debugMessage = ldkMessage
case let .InvalidNetwork(message: ldkMessage):
message = "Invalid network"
debugMessage = ldkMessage
case let .DuplicatePayment(message: ldkMessage):
message = "Duplicate payment"
debugMessage = ldkMessage
case let .UnsupportedCurrency(message: ldkMessage):
message = "Unsupported currency"
debugMessage = ldkMessage
case let .InsufficientFunds(message: ldkMessage):
message = "Insufficient funds"
debugMessage = ldkMessage
case let .LiquiditySourceUnavailable(message: ldkMessage):
message = "Liquidity source unavailable"
debugMessage = ldkMessage
case let .LiquidityFeeTooHigh(message: ldkMessage):
message = "Liquidity fee too high"
debugMessage = ldkMessage
case let .InvalidBlindedPaths(message: ldkMessage):
message = "Invalid blinded paths"
debugMessage = ldkMessage
case let .AsyncPaymentServicesDisabled(message: ldkMessage):
message = "Async payment services disabled"
debugMessage = ldkMessage
case let .InvalidUri(message: ldkMessage):
message = "Invalid URI"
debugMessage = ldkMessage
case let .InvalidQuantity(message: ldkMessage):
message = "Invalid quantity"
debugMessage = ldkMessage
case let .InvalidNodeAlias(message: ldkMessage):
message = "Invalid node alias"
debugMessage = ldkMessage
case let .InvalidCustomTlvs(message: ldkMessage):
message = "Invalid custom TLVs"
debugMessage = ldkMessage
case let .InvalidDateTime(message: ldkMessage):
message = "Invalid date time"
debugMessage = ldkMessage
case let .InvalidFeeRate(message: ldkMessage):
message = "Invalid fee rate"
debugMessage = ldkMessage
case let .CannotRbfFundingTransaction(ldkMessage):
message = "Cannot RBF funding transaction"
debugMessage = ldkMessage
case let .TransactionNotFound(ldkMessage):
message = "Transaction not found"
debugMessage = ldkMessage
case let .TransactionAlreadyConfirmed(ldkMessage):
message = "Transaction already confirmed"
debugMessage = ldkMessage
case let .NoSpendableOutputs(ldkMessage):
message = "No spendable outputs"
debugMessage = ldkMessage
case let .CoinSelectionFailed(ldkMessage):
message = "Coin selection failed"
debugMessage = ldkMessage
}
Logger.error("\(message) [\(debugMessage ?? "")]", context: "ldk-node error")
}
}