mirror of
https://gitlab.com/soapbox-pub/ditto.git
synced 2025-12-06 03:19:46 +00:00
feat: add accepts_zaps_cashu boolean field to DittoEvent and hydrate it
This commit is contained in:
parent
8a75f9e944
commit
69fe86890f
4 changed files with 30 additions and 0 deletions
|
|
@ -57,4 +57,6 @@ export interface DittoEvent extends NostrEvent {
|
||||||
zap_message?: string;
|
zap_message?: string;
|
||||||
/** Language of the event (kind 1s are more accurate). */
|
/** Language of the event (kind 1s are more accurate). */
|
||||||
language?: LanguageCode;
|
language?: LanguageCode;
|
||||||
|
/** Whether or not pubkey accepts cashu. */
|
||||||
|
accepts_zaps_cashu?: boolean;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,10 @@ async function hydrateEvents(opts: HydrateOpts): Promise<DittoEvent[]> {
|
||||||
cache.push(event);
|
cache.push(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const event of await gatherAcceptCashu({ ...opts, events: cache })) {
|
||||||
|
cache.push(event);
|
||||||
|
}
|
||||||
|
|
||||||
const authorStats = await gatherAuthorStats(cache, db.kysely);
|
const authorStats = await gatherAuthorStats(cache, db.kysely);
|
||||||
const eventStats = await gatherEventStats(cache, db.kysely);
|
const eventStats = await gatherEventStats(cache, db.kysely);
|
||||||
|
|
||||||
|
|
@ -194,6 +198,10 @@ export function assembleEvents(
|
||||||
event.zap_message = zapRequest?.content ?? '';
|
event.zap_message = zapRequest?.content ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
event.accepts_zaps_cashu = b.find((e) => matchFilter({ kinds: [10019], authors: [event.pubkey] }, e))
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
|
|
||||||
event.author_stats = authorStats[event.pubkey];
|
event.author_stats = authorStats[event.pubkey];
|
||||||
event.event_stats = eventStats[event.id];
|
event.event_stats = eventStats[event.id];
|
||||||
}
|
}
|
||||||
|
|
@ -353,6 +361,24 @@ async function gatherInfo({ conf, events, relay, signal }: HydrateOpts): Promise
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Collect nutzap informational events. */
|
||||||
|
function gatherAcceptCashu({ events, relay, signal }: HydrateOpts): Promise<DittoEvent[]> {
|
||||||
|
const pubkeys = new Set<string>();
|
||||||
|
|
||||||
|
for (const event of events) {
|
||||||
|
pubkeys.add(event.pubkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pubkeys.size) {
|
||||||
|
return Promise.resolve([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return relay.query(
|
||||||
|
[{ kinds: [10019], authors: [...pubkeys], limit: pubkeys.size }],
|
||||||
|
{ signal },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Collect author stats from the events. */
|
/** Collect author stats from the events. */
|
||||||
async function gatherAuthorStats(
|
async function gatherAuthorStats(
|
||||||
events: DittoEvent[],
|
events: DittoEvent[],
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ function renderAccount(event: Omit<DittoEvent, 'id' | 'sig'>, opts: ToAccountOpt
|
||||||
username: parsed05?.nickname || npub.substring(0, 8),
|
username: parsed05?.nickname || npub.substring(0, 8),
|
||||||
ditto: {
|
ditto: {
|
||||||
accepts_zaps: Boolean(getLnurl({ lud06, lud16 })),
|
accepts_zaps: Boolean(getLnurl({ lud06, lud16 })),
|
||||||
|
accepts_zaps_cashu: Boolean(event?.accepts_zaps_cashu),
|
||||||
external_url: Conf.external(nprofile),
|
external_url: Conf.external(nprofile),
|
||||||
streak: {
|
streak: {
|
||||||
days: streakDays,
|
days: streakDays,
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ export interface MastodonAccount {
|
||||||
username: string;
|
username: string;
|
||||||
ditto: {
|
ditto: {
|
||||||
accepts_zaps: boolean;
|
accepts_zaps: boolean;
|
||||||
|
accepts_zaps_cashu: boolean;
|
||||||
external_url: string;
|
external_url: string;
|
||||||
streak: {
|
streak: {
|
||||||
days: number;
|
days: number;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue