mirror of
https://github.com/styppo/hamstr.git
synced 2024-10-18 13:33:22 +00:00
remove userrelays and use the profile event instead + fixes.
This commit is contained in:
parent
42e9848c85
commit
12dfed7e31
@ -11,7 +11,7 @@
|
||||
|
||||
<script>
|
||||
import helpersMixin from '../utils/mixin'
|
||||
import {cleanEvent} from '../utils/helpers'
|
||||
import {cleanEvent} from '../utils/event'
|
||||
|
||||
export default {
|
||||
name: 'RawEventData',
|
||||
|
@ -67,13 +67,11 @@ export default {
|
||||
// add last 4 pubkeys mentioned
|
||||
let pubkeys = usableTags.filter(([t, v]) => t === 'p').map(([_, v]) => v)
|
||||
for (let i = 0; i < Math.min(4, pubkeys.length); i++) {
|
||||
tags.push(
|
||||
await getPubKeyTagWithRelay('p', pubkeys[pubkeys.length - 1 - i])
|
||||
)
|
||||
tags.push(await getPubKeyTagWithRelay(pubkeys[pubkeys.length - 1 - i]))
|
||||
}
|
||||
// plus the author of the note being replied to, if not present already
|
||||
if (!tags.find(([_, v]) => v === this.event.pubkey)) {
|
||||
tags.push(await getPubKeyTagWithRelay('p', this.event.pubkey))
|
||||
tags.push(await getPubKeyTagWithRelay(this.event.pubkey))
|
||||
}
|
||||
|
||||
// add the first and the last event ids
|
||||
|
@ -4,11 +4,8 @@ import {Notify, LocalStorage} from 'quasar'
|
||||
|
||||
import {pool, signAsynchronously} from '../pool'
|
||||
import {dbSave, dbGetProfile, dbGetContactList} from '../db'
|
||||
import {
|
||||
metadataFromEvent,
|
||||
processMentions,
|
||||
getPubKeyTagWithRelay
|
||||
} from '../utils/helpers'
|
||||
import {processMentions, getPubKeyTagWithRelay} from '../utils/helpers'
|
||||
import {metadataFromEvent} from '../utils/event'
|
||||
|
||||
export function initKeys(store, keys) {
|
||||
store.commit('setKeys', keys)
|
||||
@ -339,7 +336,7 @@ export async function publishContactList(store) {
|
||||
// tags that we don't want to replace
|
||||
store.state.following.forEach(async pubkey => {
|
||||
if (!tags.find(([t, v]) => t === 'p' && v === pubkey)) {
|
||||
tags.push(await getPubKeyTagWithRelay('p', pubkey))
|
||||
tags.push(await getPubKeyTagWithRelay(pubkey))
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -11,7 +11,8 @@ const getMainnetRelays = () => {
|
||||
const optional = [
|
||||
['wss://nostr.rocks', {read: true, write: true}],
|
||||
['wss://relayer.fiatjaf.com', {read: true, write: true}],
|
||||
['wss://nostrrr.bublina.eu.org', {read: true, write: true}],
|
||||
['wss://nostr.onsats.org', {read: true, write: true}],
|
||||
['wss://nostr-relay.untethr.me ', {read: true, write: true}],
|
||||
['wss://nostr-relay.wlvs.space', {read: true, write: true}],
|
||||
['wss://nostr.bitcoiner.social', {read: true, write: true}],
|
||||
['wss://nostr-relay.freeberty.net', {read: true, write: true}]
|
||||
@ -28,13 +29,14 @@ const getMainnetRelays = () => {
|
||||
}
|
||||
|
||||
const getTorRelays = () => ({
|
||||
'ws://jgqaglhautb4k6e6i2g34jakxiemqp6z4wynlirltuukgkft2xuglmqd.onion': {read: true, write: true},
|
||||
'ws://jgqaglhautb4k6e6i2g34jakxiemqp6z4wynlirltuukgkft2xuglmqd.onion': {
|
||||
read: true,
|
||||
write: true
|
||||
}
|
||||
})
|
||||
|
||||
export default function () {
|
||||
const relays = isClientUsingTor()
|
||||
? getTorRelays()
|
||||
: getMainnetRelays()
|
||||
const relays = isClientUsingTor() ? getTorRelays() : getMainnetRelays()
|
||||
|
||||
return {
|
||||
keys: LocalStorage.getItem('keys') || {}, // {priv, pub }
|
||||
|
21
src/utils/event.js
Normal file
21
src/utils/event.js
Normal file
@ -0,0 +1,21 @@
|
||||
export function cleanEvent(event) {
|
||||
return {
|
||||
id: event.id,
|
||||
pubkey: event.pubkey,
|
||||
created_at: event.created_at,
|
||||
kind: event.kind,
|
||||
tags: event.tags,
|
||||
content: event.content,
|
||||
sig: event.sig
|
||||
}
|
||||
}
|
||||
|
||||
export function metadataFromEvent(event) {
|
||||
try {
|
||||
let metadata = JSON.parse(event.content)
|
||||
metadata.pubkey = event.pubkey
|
||||
return metadata
|
||||
} catch (_) {
|
||||
return {}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
import {dbGetRelayForPubKey} from '../db'
|
||||
import {dbGetProfile} from '../db'
|
||||
|
||||
export function shorten(str) {
|
||||
return str ? str.slice(0, 3) + '…' + str.slice(-4) : ''
|
||||
@ -18,28 +18,6 @@ export function isElementFullyScrolled(element) {
|
||||
)
|
||||
}
|
||||
|
||||
export function cleanEvent(event) {
|
||||
return {
|
||||
id: event.id,
|
||||
pubkey: event.pubkey,
|
||||
created_at: event.created_at,
|
||||
kind: event.kind,
|
||||
tags: event.tags,
|
||||
content: event.content,
|
||||
sig: event.sig
|
||||
}
|
||||
}
|
||||
|
||||
export function metadataFromEvent(event) {
|
||||
try {
|
||||
let metadata = JSON.parse(event.content)
|
||||
metadata.pubkey = event.pubkey
|
||||
return metadata
|
||||
} catch (_) {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
export function addSorted(list, newItem, compare) {
|
||||
for (let i = 0; i < list.length; i++) {
|
||||
let item = list[i]
|
||||
@ -55,16 +33,15 @@ export function addSorted(list, newItem, compare) {
|
||||
|
||||
export async function processMentions(event) {
|
||||
const mentionRegex = /\B@(?<p>[a-f0-9]{64})\b/g
|
||||
let matches = event.content.matchAll(mentionRegex)
|
||||
|
||||
var profileTagIndexMap = {}
|
||||
for (let i = 0; i < matches.length; i++) {
|
||||
let pubkey = matches[i].groups.p
|
||||
for (let match of event.content.matchAll(mentionRegex)) {
|
||||
let pubkey = match.groups.p
|
||||
let idx = event.tags.findIndex(([t, v]) => t === 'p' && v === pubkey)
|
||||
if (idx) {
|
||||
if (idx !== -1) {
|
||||
profileTagIndexMap[pubkey] = idx
|
||||
} else {
|
||||
event.tags.push(await getPubKeyTagWithRelay('p', pubkey))
|
||||
event.tags.push(await getPubKeyTagWithRelay(pubkey))
|
||||
profileTagIndexMap[pubkey] = event.tags.length - 1
|
||||
}
|
||||
}
|
||||
@ -79,9 +56,10 @@ export async function processMentions(event) {
|
||||
|
||||
export async function getPubKeyTagWithRelay(pubkey) {
|
||||
var base = ['p', pubkey]
|
||||
let relay = await dbGetRelayForPubKey(pubkey)
|
||||
if (relay) {
|
||||
base.push(relay)
|
||||
let event = await dbGetProfile(pubkey)
|
||||
if (event && event.seen_on && event.seen_on.length) {
|
||||
let random = event.seen_on[Math.floor(Math.random() * event.seen_on.length)]
|
||||
base.push(random)
|
||||
}
|
||||
return base
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import PouchDBUpsert from 'pouchdb-upsert'
|
||||
import PouchDBMapReduce from 'pouchdb-mapreduce'
|
||||
import PouchDBAdapterIDB from 'pouchdb-adapter-idb'
|
||||
|
||||
import {cleanEvent} from './utils/helpers'
|
||||
import {cleanEvent} from './utils/event'
|
||||
|
||||
PouchDB.plugin(PouchDBAdapterIDB).plugin(PouchDBMapReduce).plugin(PouchDBUpsert)
|
||||
|
||||
@ -18,7 +18,7 @@ const db = new PouchDB('nostr-events', {
|
||||
|
||||
// db schema (views)
|
||||
// ~
|
||||
const DESIGN_VERSION = 6
|
||||
const DESIGN_VERSION = 7
|
||||
db.upsert('_design/main', current => {
|
||||
if (current && current.version >= DESIGN_VERSION) return false
|
||||
|
||||
@ -94,13 +94,6 @@ db.upsert('_design/main', current => {
|
||||
}
|
||||
}
|
||||
}.toString()
|
||||
},
|
||||
userrelays: {
|
||||
map: function (event) {
|
||||
event.seen_on.forEach(relay => {
|
||||
emit([event.pubkey, event.created_at], relay)
|
||||
})
|
||||
}.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -414,30 +407,6 @@ const methods = {
|
||||
return sorted[0].doc
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async dbGetRelayForPubKey(pubkey) {
|
||||
let result = await db.query('main/userrelays', {
|
||||
include_docs: false,
|
||||
startkey: [pubkey, null],
|
||||
endkey: [pubkey, {}]
|
||||
})
|
||||
|
||||
let scores = {}
|
||||
let top = {score: 0, relay: null}
|
||||
for (let i = 0; i < result.rows.length; i++) {
|
||||
let {
|
||||
key: [_, time],
|
||||
value: relay
|
||||
} = result.rows[i]
|
||||
let newScore = (scores[relay] || 0) + time - 1644269009
|
||||
scores[relay] = newScore
|
||||
if (newScore > top.score) {
|
||||
top = {score: newScore, relay}
|
||||
}
|
||||
}
|
||||
|
||||
return top.relay
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user