You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

41 lines
1.4 KiB

import { CALENDAR_EVENT_KINDS, ExtendedKind } from '@/constants'
import type { TFeedSubRequest } from '@/types'
/**
* REQ shards for a profile “posts” timeline: per-relay URL group, `authors` + `kinds`, plus optional
* calendar-invite filters (#p) when {@link kindsArg} includes NIP-52 calendar kinds.
* Same shape as {@link useProfileTimeline}’s internal {@code buildSubRequests}, for {@link NoteList} / {@link NormalFeed}.
*/
export function buildProfileAuthorSubRequestsFromUrlGroups(
groups: string[][],
authorPubkeyHex: string,
kindsArg: number[],
limit: number
): TFeedSubRequest[] {
const hasCalendarKinds = kindsArg.some((k) =>
(CALENDAR_EVENT_KINDS as readonly number[]).includes(k)
)
const authorRequests: TFeedSubRequest[] = groups
.map((urls) => ({
urls,
filter: {
authors: [authorPubkeyHex],
kinds: kindsArg,
limit
}
}))
.filter((request) => request.urls.length > 0)
const calendarInviteRequests: TFeedSubRequest[] = hasCalendarKinds
? groups
.map((urls) => ({
urls,
filter: {
kinds: [ExtendedKind.CALENDAR_EVENT_DATE, ExtendedKind.CALENDAR_EVENT_TIME],
'#p': [authorPubkeyHex],
limit: 100
}
}))
.filter((request) => request.urls.length > 0)
: []
return [...authorRequests, ...calendarInviteRequests]
}