diff --git a/nostr_dvm/dvm.py b/nostr_dvm/dvm.py index fca3dbc..2abc8c3 100644 --- a/nostr_dvm/dvm.py +++ b/nostr_dvm/dvm.py @@ -494,9 +494,12 @@ class DVM: if encrypted: encryption_tags.append(p_tag) + encryption_tags.append(e_tag) + else: reply_tags.append(p_tag) + if status == "success" or status == "error": # for x in self.job_list: if x.event == original_event: diff --git a/ui/noogle/src/components/Login.vue b/ui/noogle/src/components/Login.vue index 0f6cb94..f96d493 100644 --- a/ui/noogle/src/components/Login.vue +++ b/ui/noogle/src/components/Login.vue @@ -683,7 +683,7 @@ export default { //let keys = Keys.generate() let keys = Keys.parse(store.state.nooglekey) - let signer = NostrSigner.keys(keys) //TODO store keys + let signer = NostrSigner.keys(keys) let client = new ClientBuilder().signer(signer).build() for (const relay of store.state.relays) { @@ -753,6 +753,15 @@ export default { if(!jsonentry.amount){ jsonentry.amount = "" } + + if(!jsonentry.encryptionSupported){ + jsonentry.encryptionSupported = false + } + + if(!jsonentry.cashuAccepted){ + jsonentry.cashuAccepted = false + } + if(jsonentry.subscription === true){ // if(susbcrition_tier) { const filter = new Filter().kind(37001).author(entry.author) diff --git a/ui/noogle/src/components/RecommendationGeneration.vue b/ui/noogle/src/components/RecommendationGeneration.vue index 1bba5ac..41ca3f7 100644 --- a/ui/noogle/src/components/RecommendationGeneration.vue +++ b/ui/noogle/src/components/RecommendationGeneration.vue @@ -77,15 +77,46 @@ async function generate_feed(id) { try { let client = store.state.client + //console.log(dvms.find(i => i.id === id).encryptionSupported) + + let current_dvm = dvms.find(i => i.id === id) let content = "NIP 90 Content Discovery request" let kind = 5300 let tags = [] - tags.push(["p", id]) + let res; let requestid; - if (localStorage.getItem('nostr-key-method') === 'android-signer') { + // for now we only want to use encrypted events for subscribed dvms (might change later) + if(current_dvm.encryptionSupported && current_dvm.nip88 && current_dvm.nip88.hasActiveSubscription){ + let tags_str = [] + for (let tag in tags){ + tags_str.append(tag) + } + + let params_as_str = JSON.stringify(tags_str) + //console.log(params_as_str) + + let client = store.state.client + let signer = store.state.signer + let content = await signer.nip04Encrypt(PublicKey.parse(id), params_as_str) + + let tags_t = [] + tags_t.push(Tag.parse(["p", id])) + tags_t.push(Tag.parse(["encrypted"])) + tags_t.push(Tag.parse(["client", "noogle"])) + + + let evt = new EventBuilder(kind, content, tags_t) + res = await client.sendEventBuilder(evt); + requestid = res.toHex(); + + } + + else{ + tags.push(["p", id]) + if (localStorage.getItem('nostr-key-method') === 'android-signer') { let draft = { content: content, kind: kind, @@ -99,7 +130,7 @@ async function generate_feed(id) { requestid = res.id; } - else { + else { let tags_t = [] for (let tag of tags){ @@ -112,6 +143,13 @@ async function generate_feed(id) { requestid = res.toHex(); } + } + + + + + + store.commit('set_current_request_id_recommendation', requestid) if (!store.state.recommendationehasEventListener){ store.commit('set_recommendationEventListener', true) @@ -157,6 +195,49 @@ async function listen() { dvms.find(i => i.id === event.author.toHex()).laststatusid = event.id.toHex() let ob = dvms.find(i => i.id === event.author.toHex()) console.log(ob) + let is_encrypted = false + let ptag = "" + + console.log(event.content) + for (const tag in event.tags) { + if (event.tags[tag].asVec()[0] === "encrypted") { + is_encrypted = true + console.log("encrypted response") + } + else if (event.tags[tag].asVec()[0] === "p") { + ptag = event.tags[tag].asVec()[1] + } + } + + if (is_encrypted){ + if (ptag === store.state.pubkey.toHex()){ + let signer = store.state.signer + let tags_str = await signer.nip04Decrypt(event.author, event.content) + + let params = JSON.parse(tags_str) + //console.log(params) + // params.push(["p", ptag]) + // params.push(["encrypted"]) + let event_as_json = JSON.parse(event.asJson()) + event_as_json['tags'] = params + let content = "" + for (const tag in params){ + if (params[tag][0] === "content"){ + content = params[tag][1] + } + } + event_as_json['content'] = content + event = Event.fromJson(JSON.stringify(event_as_json)) + } + else { + console.log("not addressed to us") + console.log(ptag) + + return + } + } + + for (const tag in event.tags) { if (event.tags[tag].asVec()[0] === "status") { @@ -221,8 +302,35 @@ async function listen() { else if (event.kind === 6300) { let entries = [] //console.log("6300:", event.content); + let is_encrypted = false + let ptag = "" - let event_etags = JSON.parse(event.content) + for (const tag in event.tags) { + if (event.tags[tag].asVec()[0] === "encrypted") { + is_encrypted = true + console.log("encrypted reply") + } + else if (event.tags[tag].asVec()[0] === "p") { + ptag = event.tags[tag].asVec()[1] + } + } + + let content = event.content + + if (is_encrypted){ + if (ptag === store.state.pubkey.toHex()){ + let signer = store.state.signer + content = await signer.nip04Decrypt(event.author, event.content) + } + else { + console.log("not addressed to us") + return + } + } + + + + let event_etags = JSON.parse(content) if (event_etags.length > 0) { for (let etag of event_etags) { const eventid = EventId.fromHex(etag[1]).toHex() @@ -395,6 +503,8 @@ async function addAllContentDVMs() { about: el.about, image: el.image, amount: el.amount, + encryptionSupported: el.encryptionSupported, + cashuAccepted: el.cashuAccepted, bolt11: "", lud16: el.lud16, subscription: "", @@ -426,7 +536,9 @@ async function addDVM(event){ amount: 0, bolt11: "", lud16: "", - subscription: "" + subscription: "", + encryptionSupported: false, + cashuAccepted: false } for (const tag in event.tags) { @@ -475,6 +587,8 @@ async function addDVM(event){ jsonentry.about = el.about jsonentry.image = el.image jsonentry.lud16 = el.lud16 + jsonentry.encryptionSupported = el.encryptionSupported + jsonentry.cashuAccepted = el.cashuAccepted console.log(jsonentry) @@ -860,14 +974,24 @@ const closeNWCModal = () => {
Free
Flexible
+ + - +