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 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 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>
<td class="w-12 verified text-center md:table-cell lg:table-cell xl:table-cell">
@ -268,11 +270,37 @@
},
computed: Object.assign(SharedComputed, {
ifSyncedWithNostr(){
return (relay) => {
relay
if(this.store.relays.nip23Synced?.[relay])
this.store.relays.nip23Local.forEach( nip23Local => {
const relayLocal = new URL(nip23Local[0]),
readLocal = nip23Local[1],
writeLocal = nip23Local[2]
const exists = this.store.nip23Remote.filter( nip23Remote => {
const relayRemote = new URL(nip23Remote[0])
if(relayRemote === relayLocal)
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(){
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(){
this.setFavoritesAsNip23()
await this.getNip23()
this.store.relays.persistNip23( 'local', this.setFavoritesAsNip23() )
this.persistNip23( 'remote', await this.getNip23() )
this.mergeLocalAndRemote()
console.log('nip23', this.store.relays.getNip23)
this.store.relays.$subscribe( mutation => {
console.log(mutation.events)
@ -63,20 +64,27 @@ export default {
clearInterval(this.interval)
},
methods: {
mergeLocalAndRemote: function(){
},
setFavoritesAsNip23: function(){
// const nip23 = {}
// this.store.relays.getFavorites.forEach( relay => {
// nip23[relay] = {}
// nip23[relay].read = true
// nip23[relay].write = true
// })
// this.store.relays.setNip23(nip23)
const nip23 = []
this.store.relays.getFavorites.forEach( relay => {
const tag = []
tag[0] = relay
tag[1].read = ""
tag[2].write = ""
nip23.push(tag)
})
return true
},
getNip23: async function(){
return new Promise( resolve => {
const subid = `kind1001-${this.store.user.getPublicKey}`
const filters = { limit:1, kinds:[10001], authors: [this.store.user.getPublicKey] }
let invalid = false
console.log(filters)
this.$pool
.subscribe(subid, filters)
@ -86,25 +94,25 @@ export default {
return
if(event.kind !== 10001)
return
if(!event.tags.length)
return
if(!this.validNip23(event.tags))
invalid = true
this.$pool.unsubscribe(subid)
const parsed = this.parseNip23(event)
// this.updateFavorites(parsed)
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()
resolve(event.tags)
})
this.$pool
.on('ok', () => console.log('event saved'))
setTimeout( () => resolve(), 2000 )
})
},
validNip23: function(tags){
const filtered = tags.filter( tag => tag.length === 3 )
if(tags.length === filtered.length)
return true
},
makeFavorites: function(nip23){
Object.keys(nip23).forEach( relay => {
this.store.relays.setFavorite(relay)
@ -156,16 +164,14 @@ export default {
this.$pool.send(['EVENT', signedEvent])
},
parseNip23: function(event){
return JSON.parse(event.content)
},
updateFavorites: function(relays){
Object.keys(relays).forEach( relayUrl => {
this.store.relays.setFavorite(relayUrl)
})
},
persistNip23: function(relays){
this.store.relays.setNip23(relays)
persistNip23: function(type, tags){
const key = `nip23${type.charAt(0).toUpperCase()}`
this.store.relays[key] = tags
},
togglePopover: function(){
if(this.popoverShow){

4
src/store/relays.js

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

Loading…
Cancel
Save