diff --git a/keyserver/src/responders/farcaster-webhook-responders.js b/keyserver/src/responders/farcaster-webhook-responders.js --- a/keyserver/src/responders/farcaster-webhook-responders.js +++ b/keyserver/src/responders/farcaster-webhook-responders.js @@ -5,6 +5,7 @@ import invariant from 'invariant'; import bots from 'lib/facts/bots.js'; +import { inviteLinkURL } from 'lib/facts/links.js'; import { extractKeyserverIDFromID } from 'lib/keyserver-conn/keyserver-call-utils.js'; import { createSidebarThreadName } from 'lib/shared/sidebar-utils.js'; import { type NeynarWebhookCastCreatedEvent } from 'lib/types/farcaster-types.js'; @@ -211,6 +212,7 @@ return; } + const neynarConfigPromise = getNeynarConfig(); const taggerUserIDPromise = getVerifiedUserIDForFID( eventTaggerFID.toString(), ); @@ -290,13 +292,32 @@ } const inviteLinkName = Math.random().toString(36).slice(-9); - const inviteLink = await createOrUpdatePublicLink(commbotViewer, { - name: inviteLinkName, - communityID: channelCommunityID, - threadID: sidebarThreadResponse.newThreadID, - }); - console.log(inviteLink); + const [inviteLink, neynarConfig] = await Promise.all([ + createOrUpdatePublicLink(commbotViewer, { + name: inviteLinkName, + communityID: channelCommunityID, + threadID: sidebarThreadResponse.newThreadID, + }), + neynarConfigPromise, + ]); + + const introText = 'I created a thread on Comm. Join the conversation here:'; + const replyText = `${introText} ${inviteLinkURL(inviteLink.name)}`; + + if (!neynarConfig?.signerUUID) { + throw new ServerError('missing_signer_uuid'); + } + + const postCastResponse = await neynarClient?.postCast( + neynarConfig.signerUUID, + castHash, + replyText, + ); + + if (!postCastResponse?.success) { + throw new ServerError('post_cast_failed'); + } } export { taggedCommFarcasterResponder, taggedCommFarcasterInputValidator };