1
0
mirror of git://jb55.com/damus synced 2024-09-30 08:50:42 +00:00

nwc: fix response parsing

This commit is contained in:
William Casarin 2023-05-13 23:54:25 -07:00
parent 64a224135a
commit 85262e1a4e
2 changed files with 14 additions and 4 deletions

View File

@ -138,7 +138,10 @@ class HomeModel: ObservableObject {
func handle_nwc_response(_ ev: NostrEvent) { func handle_nwc_response(_ ev: NostrEvent) {
Task { @MainActor in Task { @MainActor in
guard let resp = await FullWalletResponse(from: ev) else { // TODO: Adapt KeychainStorage to StringCodable and instead of parsing to WalletConnectURL every time
guard let nwc_str = damus_state.settings.nostr_wallet_connect,
let nwc = WalletConnectURL(str: nwc_str),
let resp = await FullWalletResponse(from: ev, nwc: nwc) else {
return return
} }

View File

@ -88,7 +88,7 @@ struct FullWalletResponse {
let req_id: String let req_id: String
let response: WalletResponse let response: WalletResponse
init?(from: NostrEvent) async { init?(from: NostrEvent, nwc: WalletConnectURL) async {
guard let req_id = from.referenced_ids.first else { guard let req_id = from.referenced_ids.first else {
return nil return nil
} }
@ -96,7 +96,9 @@ struct FullWalletResponse {
self.req_id = req_id.ref_id self.req_id = req_id.ref_id
let ares = Task { let ares = Task {
guard let resp: WalletResponse = decode_json(from.content) else { guard let json = decrypt_dm(nwc.keypair.privkey, pubkey: nwc.pubkey, content: from.content, encoding: .base64),
let resp: WalletResponse = decode_json(json)
else {
let resp: WalletResponse? = nil let resp: WalletResponse? = nil
return resp return resp
} }
@ -116,7 +118,7 @@ struct FullWalletResponse {
struct WalletResponse: Decodable { struct WalletResponse: Decodable {
let result_type: WalletResponseResultType let result_type: WalletResponseResultType
let error: WalletResponseErr? let error: WalletResponseErr?
let result: WalletResponseResult let result: WalletResponseResult?
private enum CodingKeys: CodingKey { private enum CodingKeys: CodingKey {
case result_type, error, result case result_type, error, result
@ -133,6 +135,11 @@ struct WalletResponse: Decodable {
self.result_type = result_type self.result_type = result_type
self.error = try container.decodeIfPresent(WalletResponseErr.self, forKey: .error) self.error = try container.decodeIfPresent(WalletResponseErr.self, forKey: .error)
guard self.error == nil else {
self.result = nil
return
}
switch result_type { switch result_type {
case .pay_invoice: case .pay_invoice:
let res = try container.decode(PayInvoiceResponse.self, forKey: .result) let res = try container.decode(PayInvoiceResponse.self, forKey: .result)