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>
|
<script>
|
||||||
import helpersMixin from '../utils/mixin'
|
import helpersMixin from '../utils/mixin'
|
||||||
import {cleanEvent} from '../utils/helpers'
|
import {cleanEvent} from '../utils/event'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'RawEventData',
|
name: 'RawEventData',
|
||||||
|
@ -67,13 +67,11 @@ export default {
|
|||||||
// add last 4 pubkeys mentioned
|
// add last 4 pubkeys mentioned
|
||||||
let pubkeys = usableTags.filter(([t, v]) => t === 'p').map(([_, v]) => v)
|
let pubkeys = usableTags.filter(([t, v]) => t === 'p').map(([_, v]) => v)
|
||||||
for (let i = 0; i < Math.min(4, pubkeys.length); i++) {
|
for (let i = 0; i < Math.min(4, pubkeys.length); i++) {
|
||||||
tags.push(
|
tags.push(await getPubKeyTagWithRelay(pubkeys[pubkeys.length - 1 - i]))
|
||||||
await getPubKeyTagWithRelay('p', pubkeys[pubkeys.length - 1 - i])
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
// plus the author of the note being replied to, if not present already
|
// plus the author of the note being replied to, if not present already
|
||||||
if (!tags.find(([_, v]) => v === this.event.pubkey)) {
|
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
|
// add the first and the last event ids
|
||||||
|
@ -4,11 +4,8 @@ import {Notify, LocalStorage} from 'quasar'
|
|||||||
|
|
||||||
import {pool, signAsynchronously} from '../pool'
|
import {pool, signAsynchronously} from '../pool'
|
||||||
import {dbSave, dbGetProfile, dbGetContactList} from '../db'
|
import {dbSave, dbGetProfile, dbGetContactList} from '../db'
|
||||||
import {
|
import {processMentions, getPubKeyTagWithRelay} from '../utils/helpers'
|
||||||
metadataFromEvent,
|
import {metadataFromEvent} from '../utils/event'
|
||||||
processMentions,
|
|
||||||
getPubKeyTagWithRelay
|
|
||||||
} from '../utils/helpers'
|
|
||||||
|
|
||||||
export function initKeys(store, keys) {
|
export function initKeys(store, keys) {
|
||||||
store.commit('setKeys', keys)
|
store.commit('setKeys', keys)
|
||||||
@ -339,7 +336,7 @@ export async function publishContactList(store) {
|
|||||||
// tags that we don't want to replace
|
// tags that we don't want to replace
|
||||||
store.state.following.forEach(async pubkey => {
|
store.state.following.forEach(async pubkey => {
|
||||||
if (!tags.find(([t, v]) => t === 'p' && v === 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 = [
|
const optional = [
|
||||||
['wss://nostr.rocks', {read: true, write: true}],
|
['wss://nostr.rocks', {read: true, write: true}],
|
||||||
['wss://relayer.fiatjaf.com', {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-relay.wlvs.space', {read: true, write: true}],
|
||||||
['wss://nostr.bitcoiner.social', {read: true, write: true}],
|
['wss://nostr.bitcoiner.social', {read: true, write: true}],
|
||||||
['wss://nostr-relay.freeberty.net', {read: true, write: true}]
|
['wss://nostr-relay.freeberty.net', {read: true, write: true}]
|
||||||
@ -28,13 +29,14 @@ const getMainnetRelays = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getTorRelays = () => ({
|
const getTorRelays = () => ({
|
||||||
'ws://jgqaglhautb4k6e6i2g34jakxiemqp6z4wynlirltuukgkft2xuglmqd.onion': {read: true, write: true},
|
'ws://jgqaglhautb4k6e6i2g34jakxiemqp6z4wynlirltuukgkft2xuglmqd.onion': {
|
||||||
|
read: true,
|
||||||
|
write: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
const relays = isClientUsingTor()
|
const relays = isClientUsingTor() ? getTorRelays() : getMainnetRelays()
|
||||||
? getTorRelays()
|
|
||||||
: getMainnetRelays()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
keys: LocalStorage.getItem('keys') || {}, // {priv, pub }
|
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) {
|
export function shorten(str) {
|
||||||
return str ? str.slice(0, 3) + '…' + str.slice(-4) : ''
|
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) {
|
export function addSorted(list, newItem, compare) {
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
let item = list[i]
|
let item = list[i]
|
||||||
@ -55,16 +33,15 @@ export function addSorted(list, newItem, compare) {
|
|||||||
|
|
||||||
export async function processMentions(event) {
|
export async function processMentions(event) {
|
||||||
const mentionRegex = /\B@(?<p>[a-f0-9]{64})\b/g
|
const mentionRegex = /\B@(?<p>[a-f0-9]{64})\b/g
|
||||||
let matches = event.content.matchAll(mentionRegex)
|
|
||||||
|
|
||||||
var profileTagIndexMap = {}
|
var profileTagIndexMap = {}
|
||||||
for (let i = 0; i < matches.length; i++) {
|
for (let match of event.content.matchAll(mentionRegex)) {
|
||||||
let pubkey = matches[i].groups.p
|
let pubkey = match.groups.p
|
||||||
let idx = event.tags.findIndex(([t, v]) => t === 'p' && v === pubkey)
|
let idx = event.tags.findIndex(([t, v]) => t === 'p' && v === pubkey)
|
||||||
if (idx) {
|
if (idx !== -1) {
|
||||||
profileTagIndexMap[pubkey] = idx
|
profileTagIndexMap[pubkey] = idx
|
||||||
} else {
|
} else {
|
||||||
event.tags.push(await getPubKeyTagWithRelay('p', pubkey))
|
event.tags.push(await getPubKeyTagWithRelay(pubkey))
|
||||||
profileTagIndexMap[pubkey] = event.tags.length - 1
|
profileTagIndexMap[pubkey] = event.tags.length - 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,9 +56,10 @@ export async function processMentions(event) {
|
|||||||
|
|
||||||
export async function getPubKeyTagWithRelay(pubkey) {
|
export async function getPubKeyTagWithRelay(pubkey) {
|
||||||
var base = ['p', pubkey]
|
var base = ['p', pubkey]
|
||||||
let relay = await dbGetRelayForPubKey(pubkey)
|
let event = await dbGetProfile(pubkey)
|
||||||
if (relay) {
|
if (event && event.seen_on && event.seen_on.length) {
|
||||||
base.push(relay)
|
let random = event.seen_on[Math.floor(Math.random() * event.seen_on.length)]
|
||||||
|
base.push(random)
|
||||||
}
|
}
|
||||||
return base
|
return base
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import PouchDBUpsert from 'pouchdb-upsert'
|
|||||||
import PouchDBMapReduce from 'pouchdb-mapreduce'
|
import PouchDBMapReduce from 'pouchdb-mapreduce'
|
||||||
import PouchDBAdapterIDB from 'pouchdb-adapter-idb'
|
import PouchDBAdapterIDB from 'pouchdb-adapter-idb'
|
||||||
|
|
||||||
import {cleanEvent} from './utils/helpers'
|
import {cleanEvent} from './utils/event'
|
||||||
|
|
||||||
PouchDB.plugin(PouchDBAdapterIDB).plugin(PouchDBMapReduce).plugin(PouchDBUpsert)
|
PouchDB.plugin(PouchDBAdapterIDB).plugin(PouchDBMapReduce).plugin(PouchDBUpsert)
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ const db = new PouchDB('nostr-events', {
|
|||||||
|
|
||||||
// db schema (views)
|
// db schema (views)
|
||||||
// ~
|
// ~
|
||||||
const DESIGN_VERSION = 6
|
const DESIGN_VERSION = 7
|
||||||
db.upsert('_design/main', current => {
|
db.upsert('_design/main', current => {
|
||||||
if (current && current.version >= DESIGN_VERSION) return false
|
if (current && current.version >= DESIGN_VERSION) return false
|
||||||
|
|
||||||
@ -94,13 +94,6 @@ db.upsert('_design/main', current => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.toString()
|
}.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
|
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