diff --git a/lib/utils/neynar-client.js b/lib/utils/neynar-client.js --- a/lib/utils/neynar-client.js +++ b/lib/utils/neynar-client.js @@ -24,6 +24,10 @@ }, }; +type FetchFarcasterChannelByNameResponse = { + +channels: $ReadOnlyArray<FarcasterChannel>, +}; + const neynarBaseURL = 'https://api.neynar.com/'; const neynarURLs = { '1': `${neynarBaseURL}v1/farcaster/`, @@ -143,6 +147,44 @@ return farcasterChannels; } + + async fetchFarcasterChannelByName( + channelName: string, + ): Promise<?FarcasterChannel> { + const params: { [string]: string } = { + q: channelName, + }; + + const url = getNeynarURL('2', 'channel/search', params); + + try { + const response = await fetch(url, { + method: 'GET', + headers: { + Accept: 'application/json', + api_key: this.apiKey, + }, + }); + + const json: FetchFarcasterChannelByNameResponse = await response.json(); + + const { channels } = json; + + for (const channel of channels) { + if (channel.name.toLowerCase() === channelName.toLowerCase()) { + return channel; + } + } + + return null; + } catch (error) { + console.log( + 'Failed to search Farcaster channel by name:', + getMessageForException(error) ?? 'unknown', + ); + throw error; + } + } } export { NeynarClient };