mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 11:29:46 +00:00
Merge branch 'main' into fix-zap-sender-missing-kind-0
This commit is contained in:
commit
ceaf6534ae
6 changed files with 55 additions and 13 deletions
|
|
@ -1,4 +1,4 @@
|
|||
image: denoland/deno:2.0.1
|
||||
image: denoland/deno:2.0.2
|
||||
|
||||
default:
|
||||
interruptible: true
|
||||
|
|
@ -35,5 +35,4 @@ test:
|
|||
paths:
|
||||
- deno-test.xml
|
||||
reports:
|
||||
junit: deno-test.xml
|
||||
|
||||
junit: deno-test.xml
|
||||
|
|
@ -1 +1 @@
|
|||
deno 2.0.1
|
||||
deno 2.0.2
|
||||
|
|
@ -560,7 +560,7 @@ const zapController: AppController = async (c) => {
|
|||
lnurl = getLnurl(meta);
|
||||
if (target && lnurl) {
|
||||
tags.push(
|
||||
['e', target.id, Conf.relay, '', target.pubkey],
|
||||
['e', target.id, Conf.relay],
|
||||
['p', target.pubkey, Conf.relay],
|
||||
['amount', amount.toString()],
|
||||
['relays', Conf.relay],
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { Storages } from '@/storages.ts';
|
|||
import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
|
||||
import { type DittoRelation } from '@/interfaces/DittoFilter.ts';
|
||||
import { hydrateEvents } from '@/storages/hydrate.ts';
|
||||
import { fallbackAuthor } from '@/utils.ts';
|
||||
import { findReplyTag, getTagSet } from '@/utils/tags.ts';
|
||||
|
||||
const debug = Debug('ditto:queries');
|
||||
|
|
@ -38,15 +39,21 @@ const getEvent = async (
|
|||
.then(([event]) => event);
|
||||
};
|
||||
|
||||
/** Get a Nostr `set_medatadata` event for a user's pubkey. */
|
||||
const getAuthor = async (pubkey: string, opts: GetEventOpts = {}): Promise<NostrEvent | undefined> => {
|
||||
/**
|
||||
* Get a Nostr `set_medatadata` event for a user's pubkey.
|
||||
* @deprecated Use `store.query` directly.
|
||||
*/
|
||||
async function getAuthor(pubkey: string, opts: GetEventOpts = {}): Promise<NostrEvent | undefined> {
|
||||
const store = await Storages.db();
|
||||
const { signal = AbortSignal.timeout(1000) } = opts;
|
||||
|
||||
return await store.query([{ authors: [pubkey], kinds: [0], limit: 1 }], { limit: 1, signal })
|
||||
.then((events) => hydrateEvents({ events, store, signal }))
|
||||
.then(([event]) => event);
|
||||
};
|
||||
const events = await store.query([{ authors: [pubkey], kinds: [0], limit: 1 }], { limit: 1, signal });
|
||||
const event = events[0] ?? fallbackAuthor(pubkey);
|
||||
|
||||
await hydrateEvents({ events: [event], store, signal });
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
/** Get users the given pubkey follows. */
|
||||
const getFollows = async (pubkey: string, signal?: AbortSignal): Promise<NostrEvent | undefined> => {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import { z } from 'zod';
|
|||
import { DittoTables } from '@/db/DittoTables.ts';
|
||||
import { Conf } from '@/config.ts';
|
||||
import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
|
||||
import { fallbackAuthor } from '@/utils.ts';
|
||||
import { findQuoteTag } from '@/utils/tags.ts';
|
||||
import { findQuoteInContent } from '@/utils/note.ts';
|
||||
import { getAmount } from '@/utils/bolt11.ts';
|
||||
|
|
@ -225,6 +226,7 @@ function gatherQuotes({ events, store, signal }: HydrateOpts): Promise<DittoEven
|
|||
}
|
||||
|
||||
/** Collect authors from the events. */
|
||||
<<<<<<< HEAD
|
||||
function gatherAuthors({ events, store, signal }: HydrateOpts): Promise<DittoEvent[]> {
|
||||
const pubkeys = new Set<string>();
|
||||
|
||||
|
|
@ -247,10 +249,20 @@ function gatherAuthors({ events, store, signal }: HydrateOpts): Promise<DittoEve
|
|||
pubkeys.add(event.pubkey);
|
||||
}
|
||||
|
||||
return store.query(
|
||||
const authors = await store.query(
|
||||
[{ kinds: [0], authors: [...pubkeys], limit: pubkeys.size }],
|
||||
{ signal },
|
||||
);
|
||||
|
||||
for (const pubkey of pubkeys) {
|
||||
const author = authors.find((e) => matchFilter({ kinds: [0], authors: [pubkey] }, e));
|
||||
if (author) {
|
||||
const fallback = fallbackAuthor(pubkey);
|
||||
authors.push(fallback);
|
||||
}
|
||||
}
|
||||
|
||||
return authors;
|
||||
}
|
||||
|
||||
/** Collect users from the events. */
|
||||
|
|
|
|||
26
src/utils.ts
26
src/utils.ts
|
|
@ -74,6 +74,30 @@ function isURL(value: unknown): boolean {
|
|||
return z.string().url().safeParse(value).success;
|
||||
}
|
||||
|
||||
export { bech32ToPubkey, eventAge, findTag, isNostrId, isURL, type Nip05, nostrDate, nostrNow, parseNip05 };
|
||||
/** Render an empty author event so other things can stick to it. */
|
||||
function fallbackAuthor(pubkey: string): NostrEvent {
|
||||
return {
|
||||
kind: 0,
|
||||
pubkey,
|
||||
content: '',
|
||||
tags: [],
|
||||
created_at: nostrNow(),
|
||||
id: '',
|
||||
sig: '',
|
||||
};
|
||||
}
|
||||
|
||||
export {
|
||||
bech32ToPubkey,
|
||||
eventAge,
|
||||
fallbackAuthor,
|
||||
findTag,
|
||||
isNostrId,
|
||||
isURL,
|
||||
type Nip05,
|
||||
nostrDate,
|
||||
nostrNow,
|
||||
parseNip05,
|
||||
};
|
||||
|
||||
export { Time } from '@/utils/time.ts';
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue