Page MenuHomePhorge

D15278.1764994091.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D15278.1764994091.diff

diff --git a/lib/shared/farcaster/farcaster-api.js b/lib/shared/farcaster/farcaster-api.js
--- a/lib/shared/farcaster/farcaster-api.js
+++ b/lib/shared/farcaster/farcaster-api.js
@@ -14,6 +14,10 @@
} from './farcaster-conversation-types.js';
import type { FarcasterMessage } from './farcaster-messages-types.js';
import { farcasterMessageValidator } from './farcaster-messages-types.js';
+import {
+ farcasterDCUserValidator,
+ type FarcasterDCUser,
+} from './farcaster-user-types.js';
import { useTunnelbroker } from '../../tunnelbroker/tunnelbroker-context.js';
import {
tShapeInexact,
@@ -366,6 +370,81 @@
);
}
+export type GetFarcasterDirectCastUsersInput = {
+ +q: string,
+ +limit?: ?number,
+ +cursor?: ?string,
+ +excludeFIDs?: ?$ReadOnlyArray<string>,
+};
+
+type GetFarcasterDirectCastUsersResultData = {
+ +users: $ReadOnlyArray<FarcasterDCUser>,
+ ...
+};
+const getFarcasterDirectCastUsersResultDataValidator: TInterface<GetFarcasterDirectCastUsersResultData> =
+ tShapeInexact({
+ users: t.list(farcasterDCUserValidator),
+ });
+
+type GetFarcasterDirectCastUsersCursor = {
+ +cursor?: string,
+};
+const getFarcasterDirectCastUsersCursorValidator: TInterface<GetFarcasterDirectCastUsersCursor> =
+ tShapeInexact({
+ cursor: t.maybe(t.String),
+ });
+
+export type GetFarcasterDirectCastUsersResult = {
+ +result: GetFarcasterDirectCastUsersResultData,
+ +next?: GetFarcasterDirectCastUsersCursor,
+ ...
+};
+const getFarcasterDirectCastUsersResultValidator: TInterface<GetFarcasterDirectCastUsersResult> =
+ tShapeInexact({
+ result: getFarcasterDirectCastUsersResultDataValidator,
+ next: t.maybe(getFarcasterDirectCastUsersCursorValidator),
+ });
+
+function useGetFarcasterDirectCastUsers(): (
+ input: GetFarcasterDirectCastUsersInput,
+) => Promise<GetFarcasterDirectCastUsersResult> {
+ const { sendFarcasterRequest } = useTunnelbroker();
+ return React.useCallback(
+ async (input: GetFarcasterDirectCastUsersInput) => {
+ const { q, limit, cursor, excludeFIDs } = input;
+ // vNext doesn't work when cursor is set
+ let query = { q };
+ if (limit) {
+ query = { ...query, limit };
+ }
+ if (excludeFIDs) {
+ query = { ...query, excludeFIDs };
+ }
+ if (cursor) {
+ query = { ...query, cursor };
+ } else {
+ // vNext doesn't work when cursor is set
+ query = { ...query, vNext: 'true' };
+ }
+
+ const params = new URLSearchParams(query);
+ const response = await sendFarcasterRequest({
+ apiVersion: 'v2',
+ endpoint: 'direct-cast-users',
+ method: { type: 'GET' },
+ payload: params.toString(),
+ });
+ const parsedResult = JSON.parse(response);
+ const result: GetFarcasterDirectCastUsersResult = assertWithValidator(
+ parsedResult,
+ getFarcasterDirectCastUsersResultValidator,
+ );
+ return result;
+ },
+ [sendFarcasterRequest],
+ );
+}
+
export {
useSendFarcasterTextMessage,
useFetchFarcasterMessages,
@@ -375,4 +454,5 @@
useUpdateFarcasterSubscription,
useStreamFarcasterDirectCastRead,
useMarkFarcasterDirectCastUnread,
+ useGetFarcasterDirectCastUsers,
};

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 6, 4:08 AM (9 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5831968
Default Alt Text
D15278.1764994091.diff (3 KB)

Event Timeline