Browse Source

add nip23a parsing, validation and populate columns with new actions

feature/nip23a
dskvr 2 years ago
parent
commit
46c290188d
  1. 40
      src/components/relays/blocks/RelaysResultTable.vue
  2. 56
      src/components/relays/partials/NostrSyncPopoverNag.vue
  3. 4
      src/store/relays.js

40
src/components/relays/blocks/RelaysResultTable.vue

@ -100,11 +100,13 @@
</th> </th>
<th v-if="subsection == 'favorite'" class="do-read"> <th v-if="subsection == 'favorite'" class="do-read">
<input v-if="typeof store.relays.nip23?.[relay]?.read !== 'undefined'" type="checkbox" v-model="store.relays.nip23[relay].read" /> <button>Read</button>
{{ store.relays.nip23Local }}
</th> </th>
<th v-if="subsection == 'favorite'" class="do-write"> <th v-if="subsection == 'favorite'" class="do-write">
<input v-if="typeof store.relays.nip23?.[relay]?.write !== 'undefined'" type="checkbox" v-model="store.relays.nip23[relay].write" /> <button>Write</button>
{{ store.relays.nip23Local }}
</th> </th>
<td class="w-12 verified text-center md:table-cell lg:table-cell xl:table-cell"> <td class="w-12 verified text-center md:table-cell lg:table-cell xl:table-cell">
@ -268,11 +270,37 @@
}, },
computed: Object.assign(SharedComputed, { computed: Object.assign(SharedComputed, {
ifSyncedWithNostr(){ ifSyncedWithNostr(){
return (relay) => { this.store.relays.nip23Local.forEach( nip23Local => {
relay const relayLocal = new URL(nip23Local[0]),
if(this.store.relays.nip23Synced?.[relay]) readLocal = nip23Local[1],
writeLocal = nip23Local[2]
const exists = this.store.nip23Remote.filter( nip23Remote => {
const relayRemote = new URL(nip23Remote[0])
if(relayRemote === relayLocal)
return true return true
} })
if(!exists.length)
return false
const rulesMatch = this.store.nip23Remote.filter( nip23Remote => {
const relayRemote = new URL(nip23Remote[0]),
readRemote = nip23Remote[1],
writeRemote = nip23Remote[2]
if(readRemote === readLocal && writeRemote === writeLocal)
return true
})
if(!rulesMatch.length)
return false
return true
})
//iterate through tags
//check if the local nip23 === remote nip23
}, },
subsectionRelays(){ subsectionRelays(){
return this.getRelays( this.store.relays.getRelays(this.subsection, this.results ) ) return this.getRelays( this.store.relays.getRelays(this.subsection, this.results ) )

56
src/components/relays/partials/NostrSyncPopoverNag.vue

@ -51,8 +51,9 @@ export default {
} }
}, },
async mounted(){ async mounted(){
this.setFavoritesAsNip23() this.store.relays.persistNip23( 'local', this.setFavoritesAsNip23() )
await this.getNip23() this.persistNip23( 'remote', await this.getNip23() )
this.mergeLocalAndRemote()
console.log('nip23', this.store.relays.getNip23) console.log('nip23', this.store.relays.getNip23)
this.store.relays.$subscribe( mutation => { this.store.relays.$subscribe( mutation => {
console.log(mutation.events) console.log(mutation.events)
@ -63,20 +64,27 @@ export default {
clearInterval(this.interval) clearInterval(this.interval)
}, },
methods: { methods: {
mergeLocalAndRemote: function(){
},
setFavoritesAsNip23: function(){ setFavoritesAsNip23: function(){
// const nip23 = {} const nip23 = []
// this.store.relays.getFavorites.forEach( relay => { this.store.relays.getFavorites.forEach( relay => {
// nip23[relay] = {} const tag = []
// nip23[relay].read = true tag[0] = relay
// nip23[relay].write = true tag[1].read = ""
// }) tag[2].write = ""
// this.store.relays.setNip23(nip23) nip23.push(tag)
})
return true return true
}, },
getNip23: async function(){ getNip23: async function(){
return new Promise( resolve => { return new Promise( resolve => {
const subid = `kind1001-${this.store.user.getPublicKey}` const subid = `kind1001-${this.store.user.getPublicKey}`
const filters = { limit:1, kinds:[10001], authors: [this.store.user.getPublicKey] } const filters = { limit:1, kinds:[10001], authors: [this.store.user.getPublicKey] }
let invalid = false
console.log(filters) console.log(filters)
this.$pool this.$pool
.subscribe(subid, filters) .subscribe(subid, filters)
@ -86,25 +94,25 @@ export default {
return return
if(event.kind !== 10001) if(event.kind !== 10001)
return return
if(!event.tags.length)
return
if(!this.validNip23(event.tags))
invalid = true
this.$pool.unsubscribe(subid) this.$pool.unsubscribe(subid)
const parsed = this.parseNip23(event)
// this.updateFavorites(parsed) resolve(event.tags)
Object.keys(parsed).forEach( relay => {
parsed[relay].read = parsed[relay].read == 'true' ? true : false
parsed[relay].write = parsed[relay].write ? true : false
})
this.persistNip23(parsed)
this.setSyncStatus(parsed)
// this.makeFavorites(parsed)
console.log(event)
resolve()
}) })
this.$pool this.$pool
.on('ok', () => console.log('event saved')) .on('ok', () => console.log('event saved'))
setTimeout( () => resolve(), 2000 ) setTimeout( () => resolve(), 2000 )
}) })
}, },
validNip23: function(tags){
const filtered = tags.filter( tag => tag.length === 3 )
if(tags.length === filtered.length)
return true
},
makeFavorites: function(nip23){ makeFavorites: function(nip23){
Object.keys(nip23).forEach( relay => { Object.keys(nip23).forEach( relay => {
this.store.relays.setFavorite(relay) this.store.relays.setFavorite(relay)
@ -156,16 +164,14 @@ export default {
this.$pool.send(['EVENT', signedEvent]) this.$pool.send(['EVENT', signedEvent])
}, },
parseNip23: function(event){
return JSON.parse(event.content)
},
updateFavorites: function(relays){ updateFavorites: function(relays){
Object.keys(relays).forEach( relayUrl => { Object.keys(relays).forEach( relayUrl => {
this.store.relays.setFavorite(relayUrl) this.store.relays.setFavorite(relayUrl)
}) })
}, },
persistNip23: function(relays){ persistNip23: function(type, tags){
this.store.relays.setNip23(relays) const key = `nip23${type.charAt(0).toUpperCase()}`
this.store.relays[key] = tags
}, },
togglePopover: function(){ togglePopover: function(){
if(this.popoverShow){ if(this.popoverShow){

4
src/store/relays.js

@ -16,8 +16,8 @@ export const useRelaysStore = defineStore('relays', {
aggregatesAreSet: false, aggregatesAreSet: false,
cached: new Object(), cached: new Object(),
canonicals: new Object(), canonicals: new Object(),
nip23: new Object(), nip23Local: new Object(),
nip23Synced: new Object(), nip23Remote: new Object(),
}), }),
getters: { getters: {
getAll: (state) => state.urls, getAll: (state) => state.urls,

Loading…
Cancel
Save