mirror of
git://jb55.com/damus
synced 2024-09-30 08:50:42 +00:00
nwc: fix response parsing
This commit is contained in:
parent
64a224135a
commit
85262e1a4e
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user