diff --git a/packages/client/src/actions/account.ts b/packages/client/src/actions/account.ts index 6cc3461bf..193112acb 100644 --- a/packages/client/src/actions/account.ts +++ b/packages/client/src/actions/account.ts @@ -4,7 +4,6 @@ import type { CreateAccountWithUsernameRequest, CreateAccountWithUsernameResult, EnableSignlessResult, - PaginatedAccountsResult, SearchAccountsRequest, SetAccountMetadataRequest, SetAccountMetadataResult, @@ -22,6 +21,7 @@ import type { ResultAsync } from '@lens-protocol/types'; import type { RemoveSignlessResult } from '@lens-protocol/graphql'; import type { AnyClient, SessionClient } from '../clients'; import type { UnauthenticatedError, UnexpectedError } from '../errors'; +import type { Paginated } from '../types'; /** * Fetch an Account. @@ -61,7 +61,7 @@ export function fetchAccount( export function searchAccounts( client: AnyClient, request: SearchAccountsRequest, -): ResultAsync { +): ResultAsync | null, UnexpectedError> { return client.query(SearchAccountsQuery, { request }); } diff --git a/packages/client/src/actions/timeline.ts b/packages/client/src/actions/timeline.ts new file mode 100644 index 000000000..e9d2243e0 --- /dev/null +++ b/packages/client/src/actions/timeline.ts @@ -0,0 +1,52 @@ +import type { + Post, + TimelineHighlightsRequest, + TimelineItem, + TimelineRequest, +} from '@lens-protocol/graphql'; +import { TimelineHighlightsQuery, TimelineQuery } from '@lens-protocol/graphql'; +import type { ResultAsync } from '@lens-protocol/types'; + +import type { AnyClient } from '../clients'; +import type { UnexpectedError } from '../errors'; +import type { Paginated } from '../types'; + +/** + * Fetch timeline from an account. + * + * ```ts + * const result = await fetchTimeline(anyClient, { + * account: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - Any Lens client. + * @param request - The query request. + * @returns The list of timeline items. + */ +export function fetchTimeline( + client: AnyClient, + request: TimelineRequest, +): ResultAsync | null, UnexpectedError> { + return client.query(TimelineQuery, { request }); +} + +/** + * Fetch fetchTimelineHighlights from an account. + * + * ```ts + * const result = await fetchTimelineHighlights(anyClient, { + * account: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - Any Lens client. + * @param request - The query request. + * @returns The list of highlights post for an account. + */ +export function fetchTimelineHighlights( + client: AnyClient, + request: TimelineHighlightsRequest, +): ResultAsync | null, UnexpectedError> { + return client.query(TimelineHighlightsQuery, { request }); +} diff --git a/packages/graphql/src/accounts/account.ts b/packages/graphql/src/accounts/account.ts index 8ba44f54b..01bff093d 100644 --- a/packages/graphql/src/accounts/account.ts +++ b/packages/graphql/src/accounts/account.ts @@ -19,27 +19,19 @@ export const AccountQuery = graphql( export type AccountRequest = RequestOf; -const PaginatedAccountsResult = graphql( - `fragment PaginatedAccountsResult on PaginatedAccountsResult { - __typename - items { +export const SearchAccountsQuery = graphql( + `query SearchAccounts($request: AccountSearchRequest!) { + value: searchAccounts(request: $request) { + __typename + items { ...Account } pageInfo { ...PaginatedResultInfo } - }`, - [Account, PaginatedResultInfo], -); -export type PaginatedAccountsResult = FragmentOf; - -export const SearchAccountsQuery = graphql( - `query SearchAccounts($request: AccountSearchRequest!) { - value: searchAccounts(request: $request) { - ...PaginatedAccountsResult } }`, - [PaginatedAccountsResult], + [Account, PaginatedResultInfo], ); export type SearchAccountsRequest = RequestOf; diff --git a/packages/graphql/src/index.ts b/packages/graphql/src/index.ts index 15eea6e32..2bddf8312 100644 --- a/packages/graphql/src/index.ts +++ b/packages/graphql/src/index.ts @@ -8,3 +8,4 @@ export * from './graphql'; export * from './health'; export * from './post'; export * from './transactions'; +export * from './timeline'; diff --git a/packages/graphql/src/timeline.ts b/packages/graphql/src/timeline.ts new file mode 100644 index 000000000..9ab08dd74 --- /dev/null +++ b/packages/graphql/src/timeline.ts @@ -0,0 +1,53 @@ +import type { FragmentOf } from 'gql.tada'; +import { PaginatedResultInfo, Post } from './fragments'; +import { type RequestOf, graphql } from './graphql'; + +const TimelineItem = graphql( + `fragment TimelineItem on TimelineItem { + __typename + id + primary { + ...Post + } + comments { + ...Post + } + reposts { + ...Post + } + }`, + [Post], +); +export type TimelineItem = FragmentOf; + +export const TimelineQuery = graphql( + `query Timeline($request: TimelineRequest!) { + value: timeline(request: $request) { + __typename + items { + ...TimelineItem + } + pageInfo { + ...PaginatedResultInfo + } + } + }`, + [TimelineItem, PaginatedResultInfo], +); +export type TimelineRequest = RequestOf; + +export const TimelineHighlightsQuery = graphql( + `query TimelineHighlights($request: TimelineHighlightsRequest!) { + value: timelineHighlights(request: $request) { + __typename + items { + ...Post + } + pageInfo { + ...PaginatedResultInfo + } + } + }`, + [Post, PaginatedResultInfo], +); +export type TimelineHighlightsRequest = RequestOf;