@elizaos/plugin-farcaster 2.0.0-alpha.7 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +108 -0
- package/auto-enable.ts +21 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/auto-enable.d.ts +4 -0
- package/dist/auto-enable.d.ts.map +1 -0
- package/dist/browser/index.d.ts +2 -2
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.node.cjs +870 -719
- package/dist/cjs/index.node.js.map +23 -26
- package/dist/client/FarcasterClient.d.ts +41 -0
- package/dist/client/FarcasterClient.d.ts.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/connector-account-provider.d.ts +16 -0
- package/dist/connector-account-provider.d.ts.map +1 -0
- package/dist/generated/specs/spec-helpers.d.ts +36 -0
- package/dist/generated/specs/spec-helpers.d.ts.map +1 -0
- package/dist/generated/specs/specs.d.ts +48 -0
- package/dist/generated/specs/specs.d.ts.map +1 -0
- package/dist/index.browser.d.ts +11 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.node.d.ts +3 -0
- package/dist/index.node.d.ts.map +1 -0
- package/dist/managers/AgentManager.d.ts +20 -0
- package/dist/managers/AgentManager.d.ts.map +1 -0
- package/dist/managers/CastManager.d.ts +25 -0
- package/dist/managers/CastManager.d.ts.map +1 -0
- package/dist/managers/EmbedManager.d.ts +40 -0
- package/dist/managers/EmbedManager.d.ts.map +1 -0
- package/dist/managers/InteractionManager.d.ts +32 -0
- package/dist/managers/InteractionManager.d.ts.map +1 -0
- package/dist/managers/InteractionProcessor.d.ts +10 -0
- package/dist/managers/InteractionProcessor.d.ts.map +1 -0
- package/dist/managers/InteractionSource.d.ts +38 -0
- package/dist/managers/InteractionSource.d.ts.map +1 -0
- package/dist/managers/index.d.ts +7 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.node.d.ts +2 -0
- package/dist/node/index.node.js +830 -704
- package/dist/node/index.node.js.map +23 -26
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/profileProvider.d.ts +3 -0
- package/dist/providers/profileProvider.d.ts.map +1 -0
- package/dist/routes/webhook.d.ts +3 -0
- package/dist/routes/webhook.d.ts.map +1 -0
- package/dist/services/CastService.d.ts +133 -0
- package/dist/services/CastService.d.ts.map +1 -0
- package/dist/services/FarcasterService.d.ts +32 -0
- package/dist/services/FarcasterService.d.ts.map +1 -0
- package/dist/services/MessageService.d.ts +54 -0
- package/dist/services/MessageService.d.ts.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +119 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/asyncqueue.d.ts +13 -0
- package/dist/utils/asyncqueue.d.ts.map +1 -0
- package/dist/utils/callbacks.d.ts +14 -0
- package/dist/utils/callbacks.d.ts.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/index.d.ts +25 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/prompts.d.ts +5 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/workflow-credential-provider.d.ts +21 -0
- package/dist/workflow-credential-provider.d.ts.map +1 -0
- package/package.json +20 -9
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../
|
|
3
|
+
"sources": ["../../index.ts", "../../utils/config.ts", "../../types/index.ts", "../../connector-account-provider.ts", "../../generated/specs/specs.ts", "../../generated/specs/spec-helpers.ts", "../../providers/profileProvider.ts", "../../providers/index.ts", "../../routes/webhook.ts", "../../services/FarcasterService.ts", "../../managers/AgentManager.ts", "../../client/FarcasterClient.ts", "../../utils/index.ts", "../../managers/CastManager.ts", "../../utils/callbacks.ts", "../../managers/InteractionManager.ts", "../../utils/asyncqueue.ts", "../../managers/EmbedManager.ts", "../../managers/InteractionSource.ts", "../../services/CastService.ts", "../../services/MessageService.ts", "../../workflow-credential-provider.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import
|
|
6
|
-
"/**\n * Auto-generated canonical action/provider/evaluator docs for plugin-farcaster.\n * DO NOT EDIT - Generated from prompts/specs/**.\n */\n\nexport type ActionDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n parameters?: readonly unknown[];\n examples?: readonly (readonly unknown[])[];\n};\n\nexport type ProviderDoc = {\n name: string;\n description: string;\n position?: number;\n dynamic?: boolean;\n};\n\nexport type EvaluatorDoc = {\n name: string;\n description: string;\n similes?: readonly string[];\n alwaysRun?: boolean;\n examples?: readonly unknown[];\n};\n\nexport const coreActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"SEND_CAST\",\n description: \"Posts a cast (message) on Farcaster\",\n similes: [\"POST_CAST\", \"FARCASTER_POST\", \"CAST\", \"SHARE_ON_FARCASTER\", \"ANNOUNCE\"],\n parameters: [],\n },\n {\n name: \"REPLY_TO_CAST\",\n description: \"Replies to a cast on Farcaster\",\n similes: [\"REPLY_CAST\", \"RESPOND_CAST\", \"ANSWER_CAST\", \"COMMENT_CAST\"],\n parameters: [],\n },\n ],\n} as const;\nexport const allActionsSpec = {\n version: \"1.0.0\",\n actions: [\n {\n name: \"SEND_CAST\",\n description: \"Posts a cast (message) on Farcaster\",\n similes: [\"POST_CAST\", \"FARCASTER_POST\", \"CAST\", \"SHARE_ON_FARCASTER\", \"ANNOUNCE\"],\n parameters: [],\n },\n {\n name: \"REPLY_TO_CAST\",\n description: \"Replies to a cast on Farcaster\",\n similes: [\"REPLY_CAST\", \"RESPOND_CAST\", \"ANSWER_CAST\", \"COMMENT_CAST\"],\n parameters: [],\n },\n ],\n} as const;\nexport const coreProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"farcasterProfile\",\n description: \"Provides information about the agent\",\n dynamic: true,\n },\n {\n name: \"farcasterThread\",\n description:\n \"Provides thread context for Farcaster casts so the agent can reference the full conversation.\",\n dynamic: true,\n },\n {\n name: \"farcasterTimeline\",\n description: \"Provides recent casts from the agent\",\n dynamic: true,\n },\n ],\n} as const;\nexport const allProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"farcasterProfile\",\n description: \"Provides information about the agent\",\n dynamic: true,\n },\n {\n name: \"farcasterThread\",\n description:\n \"Provides thread context for Farcaster casts so the agent can reference the full conversation.\",\n dynamic: true,\n },\n {\n name: \"farcasterTimeline\",\n description: \"Provides recent casts from the agent\",\n dynamic: true,\n },\n ],\n} as const;\nexport const coreEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\nexport const allEvaluatorsSpec = {\n version: \"1.0.0\",\n evaluators: [],\n} as const;\n\nexport const coreActionDocs: readonly ActionDoc[] = coreActionsSpec.actions;\nexport const allActionDocs: readonly ActionDoc[] = allActionsSpec.actions;\nexport const coreProviderDocs: readonly ProviderDoc[] = coreProvidersSpec.providers;\nexport const allProviderDocs: readonly ProviderDoc[] = allProvidersSpec.providers;\nexport const coreEvaluatorDocs: readonly EvaluatorDoc[] = coreEvaluatorsSpec.evaluators;\nexport const allEvaluatorDocs: readonly EvaluatorDoc[] = allEvaluatorsSpec.evaluators;\n",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"import
|
|
11
|
-
"import {
|
|
12
|
-
"import
|
|
13
|
-
"import type { IAgentRuntime,
|
|
14
|
-
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport type { FarcasterService } from \"../services/FarcasterService\";\nimport { FARCASTER_SERVICE_NAME } from \"../types\";\n\nfunction getTimeAgo(date: Date): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n\n if (seconds < 60) return \"just now\";\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;\n return `${Math.floor(seconds / 86400)}d ago`;\n}\n\nconst spec = requireProviderSpec(\"farcasterTimeline\");\n\nexport const farcasterTimelineProvider: Provider = {\n name: spec.name,\n description: \"Provides recent casts from the agent's Farcaster timeline\",\n\n dynamic: true,\n get: async (runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> => {\n try {\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const castService = service?.getCastService(runtime.agentId);\n\n if (!castService) {\n return {\n text: \"Farcaster timeline not available.\",\n data: { available: false },\n };\n }\n\n const casts = await castService.getCasts({\n agentId: runtime.agentId,\n limit: 5,\n });\n\n if (!casts || casts.length === 0) {\n return {\n text: \"No recent casts in your timeline.\",\n data: {\n available: true,\n casts: [],\n count: 0,\n },\n };\n }\n\n const formattedCasts = casts\n .map((cast, index) => {\n const timeAgo = getTimeAgo(new Date(cast.timestamp));\n return `${index + 1}. @${cast.username} (${timeAgo}): ${cast.text}`;\n })\n .join(\"\\n\");\n\n return {\n text: `Recent casts from your timeline:\\n${formattedCasts}`,\n data: {\n available: true,\n castCount: casts.length,\n },\n values: {\n latestCastHash: String(casts[0]?.metadata?.castHash || \"\"),\n latestCastText: casts[0]?.text || \"\",\n },\n };\n } catch (error) {\n runtime.logger.error(\n \"[FarcasterTimelineProvider] Error:\",\n typeof error === \"string\" ? error : (error as Error).message\n );\n return {\n text: \"Unable to fetch Farcaster timeline.\",\n data: {\n available: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n },\n };\n }\n },\n};\n",
|
|
15
|
-
"import {
|
|
16
|
-
"import type {
|
|
17
|
-
"import {
|
|
18
|
-
"import type
|
|
19
|
-
"import {
|
|
20
|
-
"import type { IAgentRuntime, Memory, UUID } from \"@elizaos/core\";\nimport { stringToUuid } from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport { type Cast, FARCASTER_SOURCE } from \"../types\";\n\nexport const MAX_CAST_LENGTH = 1024;\n\nexport function castId({ hash, agentId }: { hash: string; agentId: string }): string {\n return `${hash}-${agentId}`;\n}\n\nexport function castUuid(props: { hash: string; agentId: string }): UUID {\n return stringToUuid(castId(props));\n}\n\nexport function splitPostContent(content: string, maxLength: number = MAX_CAST_LENGTH): string[] {\n const paragraphs = content.split(\"\\n\\n\").map((p) => p.trim());\n const posts: string[] = [];\n let currentCast = \"\";\n\n for (const paragraph of paragraphs) {\n if (!paragraph) continue;\n\n if (`${currentCast}\\n\\n${paragraph}`.trim().length <= maxLength) {\n if (currentCast) {\n currentCast += `\\n\\n${paragraph}`;\n } else {\n currentCast = paragraph;\n }\n } else {\n if (currentCast) {\n posts.push(currentCast.trim());\n }\n if (paragraph.length <= maxLength) {\n currentCast = paragraph;\n } else {\n const chunks = splitParagraph(paragraph, maxLength);\n posts.push(...chunks.slice(0, -1));\n currentCast = chunks[chunks.length - 1];\n }\n }\n }\n\n if (currentCast) {\n posts.push(currentCast.trim());\n }\n\n return posts;\n}\n\nexport function splitParagraph(paragraph: string, maxLength: number): string[] {\n const sentences = paragraph.match(/[^.!?]+[.!?]+|[^.!?]+$/g) || [paragraph];\n const chunks: string[] = [];\n let currentChunk = \"\";\n\n for (const sentence of sentences) {\n if (`${currentChunk} ${sentence}`.trim().length <= maxLength) {\n if (currentChunk) {\n currentChunk += ` ${sentence}`;\n } else {\n currentChunk = sentence;\n }\n } else {\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n if (sentence.length <= maxLength) {\n currentChunk = sentence;\n } else {\n const words = sentence.split(\" \");\n currentChunk = \"\";\n for (const word of words) {\n if (`${currentChunk} ${word}`.trim().length <= maxLength) {\n if (currentChunk) {\n currentChunk += ` ${word}`;\n } else {\n currentChunk = word;\n }\n } else {\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n currentChunk = word;\n }\n }\n }\n }\n }\n\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n\n return chunks;\n}\n\nexport function lastCastCacheKey(fid: number): string {\n return `farcaster/${fid}/lastCast`;\n}\n\nexport function neynarCastToCast(neynarCast: NeynarCast): Cast {\n return {\n hash: neynarCast.hash,\n authorFid: neynarCast.author.fid,\n text: neynarCast.text,\n threadId: neynarCast.thread_hash ?? undefined,\n profile: {\n fid: neynarCast.author.fid,\n name: neynarCast.author.display_name || \"anon\",\n username: neynarCast.author.username,\n },\n ...(neynarCast.parent_hash && neynarCast.parent_author?.fid\n ? {\n inReplyTo: {\n hash: neynarCast.parent_hash,\n fid: neynarCast.parent_author.fid,\n },\n }\n : {}),\n timestamp: new Date(neynarCast.timestamp),\n embeds: neynarCast.embeds && neynarCast.embeds.length > 0 ? neynarCast.embeds : undefined,\n };\n}\n\nexport function createCastMemory({\n roomId,\n senderId,\n runtime,\n cast,\n}: {\n roomId: UUID;\n senderId: UUID;\n runtime: IAgentRuntime;\n cast: Cast;\n}): Memory {\n const inReplyTo = cast.inReplyTo\n ? castUuid({\n hash: cast.inReplyTo.hash,\n agentId: runtime.agentId,\n })\n : undefined;\n\n return {\n id: castUuid({\n hash: cast.hash,\n agentId: runtime.agentId,\n }),\n agentId: runtime.agentId,\n entityId: senderId,\n content: {\n text: cast.text,\n source: FARCASTER_SOURCE,\n url: \"\",\n inReplyTo,\n hash: cast.hash,\n threadId: cast.threadId,\n attachments: cast.media && cast.media.length > 0 ? cast.media : undefined,\n },\n roomId,\n };\n}\n\nexport function formatCastTimestamp(timestamp: Date): string {\n return timestamp.toLocaleString(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n",
|
|
21
|
-
"import { createUniqueUuid, type EventPayload, EventType, type IAgentRuntime } from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport {\n FARCASTER_SOURCE,\n type FarcasterConfig,\n FarcasterEventTypes,\n type LastCast,\n} from \"../types\";\nimport { lastCastCacheKey } from \"../utils\";\nimport { standardCastHandlerCallback } from \"../utils/callbacks\";\n\ninterface FarcasterCastParams {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n}\n\nexport class FarcasterCastManager {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n fid: number;\n private timeout: ReturnType<typeof setTimeout> | undefined;\n private config: FarcasterConfig;\n private isRunning: boolean = false;\n\n constructor(opts: FarcasterCastParams) {\n this.client = opts.client;\n this.runtime = opts.runtime;\n this.config = opts.config;\n this.fid = this.config.FARCASTER_FID;\n }\n\n async start(): Promise<void> {\n if (this.isRunning || !this.config.ENABLE_CAST) {\n return;\n }\n\n this.isRunning = true;\n\n void this.runPeriodically();\n }\n\n async stop(): Promise<void> {\n if (this.timeout) clearTimeout(this.timeout);\n this.isRunning = false;\n }\n\n private calculateDelay(): { delay: number; randomMinutes: number } {\n const minMinutes = this.config.CAST_INTERVAL_MIN;\n const maxMinutes = this.config.CAST_INTERVAL_MAX;\n const randomMinutes = Math.floor(Math.random() * (maxMinutes - minMinutes + 1)) + minMinutes;\n const delay = randomMinutes * 60 * 1000;\n return { delay, randomMinutes };\n }\n\n private async runPeriodically(): Promise<void> {\n if (this.config.CAST_IMMEDIATELY) {\n await this.generateNewCast();\n }\n\n while (this.isRunning) {\n try {\n const lastPost = await this.runtime.getCache<LastCast>(lastCastCacheKey(this.fid));\n const lastPostTimestamp = lastPost?.timestamp ?? 0;\n const { delay, randomMinutes } = this.calculateDelay();\n\n if (Date.now() > lastPostTimestamp + delay) {\n await this.generateNewCast();\n }\n\n this.runtime.logger.log(`Next cast scheduled in ${randomMinutes} minutes`);\n await new Promise((resolve) => {\n const timeoutId = setTimeout(resolve, delay);\n this.timeout = timeoutId;\n });\n } catch (error) {\n this.runtime.logger.error(\n { agentId: this.runtime.agentId, error },\n \"[Farcaster] Error in periodic cast loop:\"\n );\n }\n }\n }\n\n private async generateNewCast(): Promise<void> {\n this.runtime.logger.info(\"Generating new cast\");\n try {\n const worldId = createUniqueUuid(this.runtime, this.fid.toString());\n const roomId = createUniqueUuid(this.runtime, `${this.fid}-home`);\n\n const callback = standardCastHandlerCallback({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n roomId,\n onCompletion: async (casts, _memories) => {\n const lastCast = casts[casts.length - 1];\n await this.runtime.setCache<LastCast>(lastCastCacheKey(this.fid), {\n hash: lastCast.hash,\n timestamp: new Date(lastCast.timestamp).getTime(),\n });\n },\n });\n\n await this.runtime.emitEvent(EventType.POST_GENERATED, {\n runtime: this.runtime,\n callback,\n worldId,\n userId: this.runtime.agentId,\n roomId,\n source: FARCASTER_SOURCE,\n });\n\n await this.runtime.emitEvent(\n FarcasterEventTypes.CAST_GENERATED as string,\n {\n runtime: this.runtime,\n source: FARCASTER_SOURCE,\n } as EventPayload\n );\n } catch (error) {\n this.runtime.logger.error({ error }, \"[Farcaster] Error generating new cast\");\n }\n }\n}\n",
|
|
22
|
-
"import type { Content, HandlerCallback, IAgentRuntime, Memory, UUID } from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport type { FarcasterClient } from \"../client\";\nimport type { CastId, FarcasterConfig } from \"../types\";\nimport { createCastMemory, neynarCastToCast } from \"./index\";\n\nexport function standardCastHandlerCallback({\n client,\n runtime,\n config,\n roomId,\n onCompletion,\n onError,\n inReplyTo,\n}: {\n inReplyTo?: CastId;\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n roomId: UUID;\n onCompletion?: (casts: NeynarCast[], memories: Memory[]) => Promise<void>;\n onError?: (error: unknown) => Promise<void>;\n}): HandlerCallback {\n const callback: HandlerCallback = async (content: Content): Promise<Memory[]> => {\n try {\n if (config.FARCASTER_DRY_RUN) {\n runtime.logger.info(`[Farcaster] Dry run: would have cast: ${content.text}`);\n return [];\n }\n\n const casts = await client.sendCast({ content, inReplyTo });\n\n if (casts.length === 0) {\n runtime.logger.warn(\"[Farcaster] No casts posted\");\n return [];\n }\n\n const memories: Memory[] = [];\n for (let i = 0; i < casts.length; i++) {\n const cast = casts[i];\n runtime.logger.success(`[Farcaster] Published cast ${cast.hash}`);\n\n const memory = createCastMemory({\n roomId,\n senderId: runtime.agentId,\n runtime,\n cast: neynarCastToCast(cast),\n });\n\n if (i === 0) {\n memory.content.actions = content.actions;\n }\n\n await runtime.createMemory(memory, \"messages\");\n memories.push(memory);\n }\n\n if (onCompletion) {\n await onCompletion(casts, memories);\n }\n\n return memories;\n } catch (error) {\n runtime.logger.error(\n \"[Farcaster] Error posting cast:\",\n typeof error === \"string\" ? error : (error as Error).message\n );\n\n if (onError) {\n await onError(error);\n }\n\n return [];\n }\n };\n\n return callback;\n}\n",
|
|
23
|
-
"import {\n ChannelType,\n createUniqueUuid,\n type EventPayload,\n type IAgentRuntime,\n type Memory,\n stringToUuid,\n type UUID,\n} from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport {\n type Cast,\n FARCASTER_SOURCE,\n type FarcasterConfig,\n FarcasterEventTypes,\n type FarcasterGenericCastPayload,\n type NeynarWebhookData,\n type Profile,\n} from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport { AsyncQueue } from \"../utils/asyncqueue\";\nimport { standardCastHandlerCallback } from \"../utils/callbacks\";\nimport { EmbedManager } from \"./EmbedManager\";\nimport type { IInteractionProcessor } from \"./InteractionProcessor\";\nimport {\n createFarcasterInteractionSource,\n type FarcasterInteractionSource,\n} from \"./InteractionSource\";\n\ninterface FarcasterInteractionManagerParams {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n}\n\nexport class FarcasterInteractionManager implements IInteractionProcessor {\n private client: FarcasterClient;\n private runtime: IAgentRuntime;\n private config: FarcasterConfig;\n private asyncQueue: AsyncQueue;\n private embedManager: EmbedManager;\n\n public readonly mode: \"polling\" | \"webhook\";\n public readonly source: FarcasterInteractionSource;\n\n constructor(opts: FarcasterInteractionManagerParams) {\n this.client = opts.client;\n this.runtime = opts.runtime;\n this.config = opts.config;\n this.asyncQueue = new AsyncQueue(1);\n this.embedManager = new EmbedManager(opts.runtime);\n\n this.mode = opts.config.FARCASTER_MODE as \"polling\" | \"webhook\";\n this.source = createFarcasterInteractionSource({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n processor: this,\n });\n\n this.runtime.logger.info(`Farcaster interaction mode: ${this.mode}`);\n }\n\n async processMention(cast: NeynarCast): Promise<void> {\n const agentFid = this.config.FARCASTER_FID;\n const agent = await this.client.getProfile(agentFid);\n const mention = neynarCastToCast(cast);\n\n if (mention.embeds && mention.embeds.length > 0) {\n try {\n this.runtime.logger.debug(\n { castHash: cast.hash, embedCount: mention.embeds.length },\n \"[Farcaster] Processing embeds for mention\"\n );\n const processedMedia = await this.embedManager.processEmbeds(mention.embeds);\n mention.media = processedMedia;\n this.runtime.logger.info(\n { castHash: cast.hash, mediaCount: processedMedia.length },\n \"[Farcaster] Processed embeds for mention\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: cast.hash,\n },\n \"[Farcaster] Failed to process embeds, continuing without media\"\n );\n }\n }\n\n await this.handleMentionCast({ agent, mention, cast });\n }\n\n async processReply(cast: NeynarCast): Promise<void> {\n const agentFid = this.config.FARCASTER_FID;\n const agent = await this.client.getProfile(agentFid);\n const reply = neynarCastToCast(cast);\n\n if (reply.embeds && reply.embeds.length > 0) {\n try {\n this.runtime.logger.debug(\n { castHash: cast.hash, embedCount: reply.embeds.length },\n \"[Farcaster] Processing embeds for reply\"\n );\n const processedMedia = await this.embedManager.processEmbeds(reply.embeds);\n reply.media = processedMedia;\n this.runtime.logger.info(\n { castHash: cast.hash, mediaCount: processedMedia.length },\n \"[Farcaster] Processed embeds for reply\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: cast.hash,\n },\n \"[Farcaster] Failed to process embeds, continuing without media\"\n );\n }\n }\n\n await this.handleMentionCast({ agent, mention: reply, cast });\n }\n\n async processWebhookData(webhookData: NeynarWebhookData): Promise<void> {\n if (webhookData.type !== \"cast.created\" || !webhookData.data) {\n this.runtime.logger.debug(\"Ignoring non-cast webhook event:\", webhookData.type);\n return;\n }\n\n const castData = webhookData.data;\n const agentFid = this.config.FARCASTER_FID;\n\n if (!castData.author || !castData.hash || typeof castData.author.fid !== \"number\") {\n this.runtime.logger.warn(\n \"Invalid webhook cast data structure - missing author, hash, or author.fid\"\n );\n return;\n }\n\n if (castData.author.fid === agentFid) {\n this.runtime.logger.debug(\"Skipping webhook event from agent itself\");\n return;\n }\n\n const memoryId = castUuid({\n agentId: this.runtime.agentId,\n hash: castData.hash,\n });\n if (await this.runtime.getMemoryById(memoryId)) {\n this.runtime.logger.debug(\"Skipping already processed webhook cast:\", castData.hash);\n return;\n }\n\n const isMention = castData.mentioned_profiles?.some(\n (profile: { fid: number }) => profile.fid === agentFid\n );\n\n const isReply = castData.parent_hash && castData.parent_author?.fid === agentFid;\n\n if (isMention) {\n const username = castData.author.username || \"unknown\";\n const text = castData.text || \"\";\n this.runtime.logger.info(`Processing webhook MENTION from @${username}: \"${text}\"`);\n\n try {\n const neynarCast = await this.client.getCast(castData.hash);\n await this.processMention(neynarCast);\n } catch (error) {\n this.runtime.logger.error(\n { agentId: this.runtime.agentId, error },\n `Failed to process webhook mention from @${username}`\n );\n }\n } else if (isReply) {\n const username = castData.author.username || \"unknown\";\n const text = castData.text || \"\";\n this.runtime.logger.info(`Processing webhook REPLY from @${username}: \"${text}\"`);\n\n try {\n const neynarCast = await this.client.getCast(castData.hash);\n await this.processReply(neynarCast);\n } catch (error) {\n this.runtime.logger.error({ error }, `Failed to process webhook reply from @${username}:`);\n }\n } else {\n this.runtime.logger.debug(\"Webhook cast is neither mention nor reply to agent\");\n }\n }\n\n async ensureCastConnection(cast: Cast): Promise<Memory> {\n return await this.asyncQueue.submit(async () => {\n const memoryId = castUuid({\n agentId: this.runtime.agentId,\n hash: cast.hash,\n });\n const conversationId = cast.threadId ?? cast.inReplyTo?.hash ?? cast.hash;\n const entityId = createUniqueUuid(this.runtime, cast.authorFid.toString());\n const worldId = createUniqueUuid(this.runtime, cast.authorFid.toString());\n const roomId = createUniqueUuid(this.runtime, conversationId);\n\n if (entityId !== this.runtime.agentId) {\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n worldName: `${cast.profile.username}'s Farcaster`,\n userName: cast.profile.username,\n name: cast.profile.name,\n source: FARCASTER_SOURCE,\n type: ChannelType.THREAD,\n channelId: conversationId,\n messageServerId: stringToUuid(cast.authorFid.toString()),\n worldId,\n metadata: {\n ownership: { ownerId: cast.authorFid.toString() },\n farcaster: {\n username: cast.profile.username,\n id: cast.authorFid.toString(),\n name: cast.profile.name,\n },\n },\n });\n }\n\n let text = cast.text;\n if (cast.media && cast.media.length > 0) {\n const attachmentTypes = cast.media.map((m) => m.source || \"attachment\").join(\", \");\n text = `${cast.text}\\n\\n(Attachments: ${cast.media.length} - ${attachmentTypes})`;\n }\n\n const memory: Memory = {\n id: memoryId,\n agentId: this.runtime.agentId,\n content: {\n text,\n inReplyTo: cast.inReplyTo?.hash\n ? castUuid({\n agentId: this.runtime.agentId,\n hash: cast.inReplyTo.hash,\n })\n : undefined,\n source: FARCASTER_SOURCE,\n channelType: ChannelType.THREAD,\n attachments: cast.media && cast.media.length > 0 ? cast.media : undefined,\n },\n entityId,\n roomId,\n createdAt: cast.timestamp.getTime(),\n };\n\n return memory;\n });\n }\n\n private async buildThreadForCast(cast: Cast, skipMemoryId: Set<UUID>): Promise<Cast[]> {\n const thread: Cast[] = [];\n const visited: Set<string> = new Set();\n const client = this.client;\n const runtime = this.runtime;\n const self = this;\n\n async function processThread(currentCast: Cast): Promise<void> {\n const memoryId = castUuid({\n hash: currentCast.hash,\n agentId: runtime.agentId,\n });\n\n if (visited.has(currentCast.hash) || skipMemoryId.has(memoryId)) {\n return;\n }\n\n visited.add(currentCast.hash);\n\n const memory = await runtime.getMemoryById(memoryId);\n\n if (!memory) {\n runtime.logger.info({ hash: currentCast.hash }, \"Creating memory for cast\");\n const newMemory = await self.ensureCastConnection(currentCast);\n await runtime.createMemory(newMemory, \"messages\");\n runtime.emitEvent(\n FarcasterEventTypes.THREAD_CAST_CREATED as string,\n {\n runtime,\n memory: newMemory,\n cast: currentCast,\n source: FARCASTER_SOURCE,\n } as EventPayload\n );\n }\n\n thread.unshift(currentCast);\n\n if (currentCast.inReplyTo) {\n const parentCast = await client.getCast(currentCast.inReplyTo.hash);\n await processThread(neynarCastToCast(parentCast));\n }\n }\n\n await processThread(cast);\n return thread;\n }\n\n private async handleMentionCast({\n agent,\n mention,\n cast,\n }: {\n agent: Profile;\n cast: NeynarCast;\n mention: Cast;\n }): Promise<void> {\n if (mention.profile.fid === agent.fid) {\n this.runtime.logger.info({ hash: mention.hash }, \"skipping cast from bot itself\");\n return;\n }\n\n const memory = await this.ensureCastConnection(mention);\n await this.buildThreadForCast(mention, memory.id ? new Set([memory.id]) : new Set());\n\n if (!memory.content.text || memory.content.text.trim() === \"\") {\n this.runtime.logger.info({ hash: mention.hash }, \"skipping cast with no text\");\n return;\n }\n\n const callback = standardCastHandlerCallback({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n roomId: memory.roomId,\n inReplyTo: {\n hash: mention.hash,\n fid: mention.authorFid,\n },\n });\n\n try {\n if (!this.runtime.messageService) {\n this.runtime.logger.warn(\n \"[Farcaster] messageService not available, skipping mention handling\"\n );\n return;\n }\n await this.runtime.messageService.handleMessage(this.runtime, memory, callback);\n } catch (error) {\n this.runtime.logger.error(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: mention.hash,\n },\n \"[Farcaster] Error processing mention\"\n );\n }\n\n const mentionPayload: FarcasterGenericCastPayload = {\n runtime: this.runtime,\n memory,\n cast,\n source: FARCASTER_SOURCE,\n callback,\n };\n this.runtime.emitEvent(FarcasterEventTypes.MENTION_RECEIVED, mentionPayload);\n }\n\n async start(): Promise<void> {\n this.runtime.logger.info(`Starting Farcaster interaction manager in ${this.mode} mode`);\n await this.source.start();\n }\n\n async stop(): Promise<void> {\n this.runtime.logger.info(\"Stopping Farcaster interaction manager\");\n await this.source.stop();\n }\n}\n",
|
|
5
|
+
"import { getConnectorAccountManager, logger, type Plugin } from \"@elizaos/core\";\nimport { createFarcasterConnectorAccountProvider } from \"./connector-account-provider\";\nimport { farcasterProviders } from \"./providers\";\nimport { farcasterWebhookRoutes } from \"./routes/webhook\";\nimport { FarcasterService } from \"./services/FarcasterService\";\nimport { FarcasterWorkflowCredentialProvider } from \"./workflow-credential-provider\";\n\nexport { FarcasterClient } from \"./client/FarcasterClient\";\nexport {\n createFarcasterConnectorAccountProvider,\n FARCASTER_PROVIDER_ID,\n} from \"./connector-account-provider\";\nexport {\n EmbedManager,\n isEmbedCast,\n isEmbedUrl,\n type ProcessedEmbed,\n} from \"./managers/EmbedManager\";\nexport { FarcasterService } from \"./services/FarcasterService\";\nexport type {\n Cast,\n CastEmbed,\n CastId,\n FarcasterConfig,\n FarcasterEventTypes,\n FarcasterMessageType,\n FidRequest,\n Profile,\n} from \"./types\";\nexport {\n DEFAULT_FARCASTER_ACCOUNT_ID,\n listFarcasterAccountIds,\n normalizeFarcasterAccountId,\n readFarcasterAccountId,\n resolveDefaultFarcasterAccountId,\n} from \"./utils/config\";\n\nexport const farcasterPlugin: Plugin = {\n name: \"farcaster\",\n description: \"Farcaster client plugin for sending and receiving casts\",\n services: [FarcasterService, FarcasterWorkflowCredentialProvider],\n actions: [],\n providers: farcasterProviders,\n routes: farcasterWebhookRoutes,\n // Self-declared auto-enable: activate when the \"farcaster\" connector is\n // configured under config.connectors. The hardcoded CONNECTOR_PLUGINS map\n // in plugin-auto-enable-engine.ts still serves as a fallback.\n autoEnable: {\n connectorKeys: [\"farcaster\"],\n },\n async init(_config, runtime) {\n try {\n const manager = getConnectorAccountManager(runtime);\n manager.registerProvider(createFarcasterConnectorAccountProvider(runtime));\n } catch (err) {\n logger.warn(\n {\n src: \"plugin:farcaster\",\n err: err instanceof Error ? err.message : String(err),\n },\n \"Failed to register Farcaster provider with ConnectorAccountManager\"\n );\n }\n },\n};\n\nexport default farcasterPlugin;\n",
|
|
6
|
+
"import { type IAgentRuntime, parseBooleanFromText } from \"@elizaos/core\";\nimport { z } from \"zod\";\nimport {\n DEFAULT_CAST_INTERVAL_MAX,\n DEFAULT_CAST_INTERVAL_MIN,\n DEFAULT_MAX_CAST_LENGTH,\n DEFAULT_POLL_INTERVAL,\n type FarcasterConfig,\n FarcasterConfigSchema,\n} from \"../types\";\n\ntype ProcessEnvLike = Record<string, string | undefined>;\ntype RawFarcasterAccountConfig = Partial<FarcasterConfig> &\n Record<string, unknown> & {\n accountId?: string;\n id?: string;\n };\ntype FarcasterMultiAccountConfig = RawFarcasterAccountConfig & {\n accounts?: Record<string, RawFarcasterAccountConfig>;\n};\n\nexport type ResolvedFarcasterConfig = FarcasterConfig & { accountId: string };\nexport const DEFAULT_FARCASTER_ACCOUNT_ID = \"default\";\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nfunction safeParseInt(value: string | undefined | null, defaultValue: number): number {\n if (!value) return defaultValue;\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? defaultValue : Math.max(1, parsed);\n}\n\nfunction stringSetting(runtime: IAgentRuntime, key: string): string | undefined {\n const value = runtime.getSetting(key);\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction characterConfig(runtime: IAgentRuntime): FarcasterMultiAccountConfig {\n const settings = runtime.character?.settings as Record<string, unknown> | undefined;\n const raw = settings?.farcaster;\n return raw && typeof raw === \"object\" ? (raw as FarcasterMultiAccountConfig) : {};\n}\n\nfunction parseAccountsJson(runtime: IAgentRuntime): Record<string, RawFarcasterAccountConfig> {\n const raw = stringSetting(runtime, \"FARCASTER_ACCOUNTS\");\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (Array.isArray(parsed)) {\n return Object.fromEntries(\n parsed\n .filter(\n (item): item is RawFarcasterAccountConfig => Boolean(item) && typeof item === \"object\"\n )\n .map((item) => [normalizeFarcasterAccountId(item.accountId ?? item.id), item])\n );\n }\n return parsed && typeof parsed === \"object\"\n ? (parsed as Record<string, RawFarcasterAccountConfig>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction allAccountConfigs(runtime: IAgentRuntime): Record<string, RawFarcasterAccountConfig> {\n return {\n ...(characterConfig(runtime).accounts ?? {}),\n ...parseAccountsJson(runtime),\n };\n}\n\nfunction accountConfig(runtime: IAgentRuntime, accountId: string): RawFarcasterAccountConfig {\n const accounts = allAccountConfigs(runtime);\n return accounts[accountId] ?? accounts[normalizeFarcasterAccountId(accountId)] ?? {};\n}\n\nfunction rawField(\n record: RawFarcasterAccountConfig | undefined,\n keys: string[]\n): string | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim()) return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n }\n return undefined;\n}\n\nexport function normalizeFarcasterAccountId(accountId?: unknown): string {\n if (typeof accountId !== \"string\") return DEFAULT_FARCASTER_ACCOUNT_ID;\n const trimmed = accountId.trim();\n return trimmed || DEFAULT_FARCASTER_ACCOUNT_ID;\n}\n\nexport function listFarcasterAccountIds(runtime: IAgentRuntime): string[] {\n const ids = new Set<string>();\n const config = characterConfig(runtime);\n if (\n stringSetting(runtime, \"FARCASTER_FID\") ||\n (config.FARCASTER_FID && config.FARCASTER_SIGNER_UUID)\n ) {\n ids.add(DEFAULT_FARCASTER_ACCOUNT_ID);\n }\n for (const id of Object.keys(allAccountConfigs(runtime))) {\n ids.add(normalizeFarcasterAccountId(id));\n }\n return Array.from(ids.size ? ids : new Set([DEFAULT_FARCASTER_ACCOUNT_ID])).sort((a, b) =>\n a.localeCompare(b)\n );\n}\n\nexport function resolveDefaultFarcasterAccountId(runtime: IAgentRuntime): string {\n const requested =\n stringSetting(runtime, \"FARCASTER_DEFAULT_ACCOUNT_ID\") ??\n stringSetting(runtime, \"FARCASTER_ACCOUNT_ID\");\n if (requested) return normalizeFarcasterAccountId(requested);\n const ids = listFarcasterAccountIds(runtime);\n return ids.includes(DEFAULT_FARCASTER_ACCOUNT_ID) ? DEFAULT_FARCASTER_ACCOUNT_ID : ids[0];\n}\n\nexport function readFarcasterAccountId(...sources: unknown[]): string | undefined {\n for (const source of sources) {\n if (!source || typeof source !== \"object\") continue;\n const record = source as Record<string, unknown>;\n const parameters =\n record.parameters && typeof record.parameters === \"object\"\n ? (record.parameters as Record<string, unknown>)\n : {};\n const data =\n record.data && typeof record.data === \"object\"\n ? (record.data as Record<string, unknown>)\n : {};\n const metadata =\n record.metadata && typeof record.metadata === \"object\"\n ? (record.metadata as Record<string, unknown>)\n : {};\n const farcaster =\n data.farcaster && typeof data.farcaster === \"object\"\n ? (data.farcaster as Record<string, unknown>)\n : {};\n const value =\n record.accountId ??\n parameters.accountId ??\n data.accountId ??\n farcaster.accountId ??\n metadata.accountId;\n if (typeof value === \"string\" && value.trim()) return normalizeFarcasterAccountId(value);\n }\n return undefined;\n}\n\nexport function getFarcasterFid(runtime: IAgentRuntime, accountId?: string | null): number | null {\n const normalizedAccountId = normalizeFarcasterAccountId(\n accountId ?? resolveDefaultFarcasterAccountId(runtime)\n );\n const account = accountConfig(runtime, normalizedAccountId);\n const base = characterConfig(runtime);\n const allowEnv = normalizedAccountId === DEFAULT_FARCASTER_ACCOUNT_ID;\n const fidStr =\n rawField(account, [\"FARCASTER_FID\", \"fid\"]) ??\n rawField(base, [\"FARCASTER_FID\", \"fid\"]) ??\n (allowEnv ? stringSetting(runtime, \"FARCASTER_FID\") : undefined);\n if (!fidStr) return null;\n const fid = Number.parseInt(fidStr as string, 10);\n return Number.isNaN(fid) ? null : fid;\n}\n\nexport function hasFarcasterEnabled(runtime: IAgentRuntime, accountId?: string | null): boolean {\n const normalizedAccountId = normalizeFarcasterAccountId(\n accountId ?? resolveDefaultFarcasterAccountId(runtime)\n );\n const account = accountConfig(runtime, normalizedAccountId);\n const base = characterConfig(runtime);\n const allowEnv = normalizedAccountId === DEFAULT_FARCASTER_ACCOUNT_ID;\n const fid = getFarcasterFid(runtime, normalizedAccountId);\n const signerUuid =\n rawField(account, [\"FARCASTER_SIGNER_UUID\", \"signerUuid\"]) ??\n rawField(base, [\"FARCASTER_SIGNER_UUID\", \"signerUuid\"]) ??\n (allowEnv ? stringSetting(runtime, \"FARCASTER_SIGNER_UUID\") : undefined);\n const apiKey =\n rawField(account, [\"FARCASTER_NEYNAR_API_KEY\", \"neynarApiKey\", \"apiKey\"]) ??\n rawField(base, [\"FARCASTER_NEYNAR_API_KEY\", \"neynarApiKey\", \"apiKey\"]) ??\n (allowEnv ? stringSetting(runtime, \"FARCASTER_NEYNAR_API_KEY\") : undefined);\n\n runtime.logger.debug(`[hasFarcasterEnabled] FID: ${fid ? \"Found\" : \"Missing\"}`);\n runtime.logger.debug(`[hasFarcasterEnabled] Signer UUID: ${signerUuid ? \"Found\" : \"Missing\"}`);\n runtime.logger.debug(`[hasFarcasterEnabled] API Key: ${apiKey ? \"Found\" : \"Missing\"}`);\n\n return !!(fid && signerUuid && apiKey);\n}\n\nexport function validateFarcasterConfig(\n runtime: IAgentRuntime,\n accountId?: string | null\n): ResolvedFarcasterConfig {\n const normalizedAccountId = normalizeFarcasterAccountId(\n accountId ?? resolveDefaultFarcasterAccountId(runtime)\n );\n const account = accountConfig(runtime, normalizedAccountId);\n const base = characterConfig(runtime);\n const allowEnv = normalizedAccountId === DEFAULT_FARCASTER_ACCOUNT_ID;\n const field = (keys: string[], envKey?: string): string | undefined =>\n rawField(account, keys) ??\n rawField(base, keys) ??\n (allowEnv && envKey ? stringSetting(runtime, envKey) : undefined);\n const fid = getFarcasterFid(runtime, normalizedAccountId);\n\n try {\n const farcasterConfig = {\n FARCASTER_DRY_RUN:\n field([\"FARCASTER_DRY_RUN\", \"dryRun\"], \"FARCASTER_DRY_RUN\") ||\n parseBooleanFromText(env.FARCASTER_DRY_RUN || \"false\"),\n\n FARCASTER_FID: fid ?? undefined,\n\n MAX_CAST_LENGTH: safeParseInt(\n field([\"MAX_CAST_LENGTH\", \"maxCastLength\"], \"MAX_CAST_LENGTH\"),\n DEFAULT_MAX_CAST_LENGTH\n ),\n\n FARCASTER_POLL_INTERVAL: safeParseInt(\n field([\"FARCASTER_POLL_INTERVAL\", \"pollInterval\"], \"FARCASTER_POLL_INTERVAL\"),\n DEFAULT_POLL_INTERVAL\n ),\n\n ENABLE_CAST:\n field([\"ENABLE_CAST\", \"enableCast\"], \"ENABLE_CAST\") ||\n parseBooleanFromText(env.ENABLE_CAST || \"true\"),\n\n CAST_INTERVAL_MIN: safeParseInt(\n field([\"CAST_INTERVAL_MIN\", \"castIntervalMin\"], \"CAST_INTERVAL_MIN\"),\n DEFAULT_CAST_INTERVAL_MIN\n ),\n\n CAST_INTERVAL_MAX: safeParseInt(\n field([\"CAST_INTERVAL_MAX\", \"castIntervalMax\"], \"CAST_INTERVAL_MAX\"),\n DEFAULT_CAST_INTERVAL_MAX\n ),\n\n ENABLE_ACTION_PROCESSING:\n field([\"ENABLE_ACTION_PROCESSING\", \"enableActionProcessing\"], \"ENABLE_ACTION_PROCESSING\") ||\n parseBooleanFromText(env.ENABLE_ACTION_PROCESSING || \"false\"),\n\n ACTION_INTERVAL: safeParseInt(\n field([\"ACTION_INTERVAL\", \"actionInterval\"], \"ACTION_INTERVAL\"),\n 5\n ),\n\n CAST_IMMEDIATELY:\n field([\"CAST_IMMEDIATELY\", \"castImmediately\"], \"CAST_IMMEDIATELY\") ||\n parseBooleanFromText(env.CAST_IMMEDIATELY || \"false\"),\n\n MAX_ACTIONS_PROCESSING: safeParseInt(\n field([\"MAX_ACTIONS_PROCESSING\", \"maxActionsProcessing\"], \"MAX_ACTIONS_PROCESSING\"),\n 1\n ),\n\n FARCASTER_SIGNER_UUID: field(\n [\"FARCASTER_SIGNER_UUID\", \"signerUuid\"],\n \"FARCASTER_SIGNER_UUID\"\n ),\n\n FARCASTER_NEYNAR_API_KEY: field(\n [\"FARCASTER_NEYNAR_API_KEY\", \"neynarApiKey\", \"apiKey\"],\n \"FARCASTER_NEYNAR_API_KEY\"\n ),\n\n FARCASTER_HUB_URL:\n field([\"FARCASTER_HUB_URL\", \"hubUrl\"], \"FARCASTER_HUB_URL\") || \"hub.pinata.cloud\",\n\n FARCASTER_MODE: field([\"FARCASTER_MODE\", \"mode\"], \"FARCASTER_MODE\") || \"polling\",\n };\n\n runtime.logger.debug(\n `[validateFarcasterConfig] Resolved FID: ${farcasterConfig.FARCASTER_FID}`\n );\n runtime.logger.debug(\n `[validateFarcasterConfig] Resolved Signer UUID: ${farcasterConfig.FARCASTER_SIGNER_UUID ? \"Found\" : \"Missing\"}`\n );\n runtime.logger.debug(\n `[validateFarcasterConfig] Resolved API Key: ${farcasterConfig.FARCASTER_NEYNAR_API_KEY ? \"Found\" : \"Missing\"}`\n );\n\n const config = FarcasterConfigSchema.parse(farcasterConfig);\n\n const isDryRun = config.FARCASTER_DRY_RUN;\n\n runtime.logger.info(\"Farcaster Client Configuration:\");\n runtime.logger.info(`- FID: ${config.FARCASTER_FID}`);\n runtime.logger.info(`- Dry Run Mode: ${isDryRun ? \"enabled\" : \"disabled\"}`);\n runtime.logger.info(`- Enable Cast: ${config.ENABLE_CAST ? \"enabled\" : \"disabled\"}`);\n\n if (config.ENABLE_CAST) {\n runtime.logger.info(\n `- Cast Interval: ${config.CAST_INTERVAL_MIN}-${config.CAST_INTERVAL_MAX} minutes`\n );\n runtime.logger.info(\n `- Cast Immediately: ${config.CAST_IMMEDIATELY ? \"enabled\" : \"disabled\"}`\n );\n }\n runtime.logger.info(\n `- Action Processing: ${config.ENABLE_ACTION_PROCESSING ? \"enabled\" : \"disabled\"}`\n );\n runtime.logger.info(`- Action Interval: ${config.ACTION_INTERVAL} minutes`);\n\n if (isDryRun) {\n runtime.logger.info(\n \"Farcaster client initialized in dry run mode - no actual casts should be posted\"\n );\n }\n\n return { ...config, accountId: normalizedAccountId };\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.issues\n .map((err) => `${err.path.join(\".\")}: ${err.message}`)\n .join(\"\\n\");\n throw new Error(`Farcaster configuration validation failed:\\n${errorMessages}`);\n }\n throw error;\n }\n}\n",
|
|
7
|
+
"import type { Media, Memory, MessagePayload } from \"@elizaos/core\";\nimport type { Cast as NeynarCast, Embed as NeynarEmbed } from \"@neynar/nodejs-sdk/build/api\";\nimport * as zod from \"zod\";\n\nconst z = zod.z ?? zod;\n\nexport interface Profile {\n fid: number;\n name: string;\n username: string;\n pfp?: string;\n bio?: string;\n url?: string;\n}\n\nexport interface CastEmbed {\n type: \"image\" | \"video\" | \"audio\" | \"url\" | \"cast\" | \"frame\" | \"unknown\";\n url: string;\n castHash?: string;\n metadata?: {\n contentType?: string;\n width?: number;\n height?: number;\n duration?: number;\n title?: string;\n description?: string;\n authorFid?: number;\n authorUsername?: string;\n };\n}\n\nexport interface Cast {\n hash: string;\n authorFid: number;\n text: string;\n profile: Profile;\n threadId?: string;\n inReplyTo?: {\n hash: string;\n fid: number;\n };\n timestamp: Date;\n stats?: {\n recasts: number;\n replies: number;\n likes: number;\n };\n embeds?: NeynarEmbed[];\n media?: Media[];\n}\n\nexport interface CastId {\n hash: string;\n fid: number;\n}\n\nexport interface FidRequest {\n fid: number;\n pageSize: number;\n}\n\nexport interface LastCast {\n hash: string;\n timestamp: number;\n}\n\nexport const DEFAULT_MAX_CAST_LENGTH = 320;\nexport const DEFAULT_POLL_INTERVAL = 120;\nexport const DEFAULT_CAST_INTERVAL_MIN = 90;\nexport const DEFAULT_CAST_INTERVAL_MAX = 180;\nexport const DEFAULT_CAST_CACHE_TTL = 1000 * 30 * 60;\nexport const DEFAULT_CAST_CACHE_SIZE = 9000;\n\nexport const FarcasterConfigSchema = z.object({\n FARCASTER_DRY_RUN: z\n .union([z.boolean(), z.string()])\n .transform((val) => (typeof val === \"string\" ? val.toLowerCase() === \"true\" : val)),\n FARCASTER_FID: z.number().int().min(1, \"Farcaster fid is required\"),\n MAX_CAST_LENGTH: z.number().int().default(DEFAULT_MAX_CAST_LENGTH),\n FARCASTER_POLL_INTERVAL: z.number().int().default(DEFAULT_POLL_INTERVAL),\n FARCASTER_MODE: z.enum([\"polling\", \"webhook\"]).default(\"polling\"),\n ENABLE_CAST: z\n .union([z.boolean(), z.string()])\n .transform((val) => (typeof val === \"string\" ? val.toLowerCase() === \"true\" : val)),\n CAST_INTERVAL_MIN: z.number().int(),\n CAST_INTERVAL_MAX: z.number().int(),\n ENABLE_ACTION_PROCESSING: z\n .union([z.boolean(), z.string()])\n .transform((val) => (typeof val === \"string\" ? val.toLowerCase() === \"true\" : val)),\n ACTION_INTERVAL: z.number().int(),\n CAST_IMMEDIATELY: z\n .union([z.boolean(), z.string()])\n .transform((val) => (typeof val === \"string\" ? val.toLowerCase() === \"true\" : val)),\n MAX_ACTIONS_PROCESSING: z.number().int(),\n FARCASTER_SIGNER_UUID: z.string().min(1, \"FARCASTER_SIGNER_UUID is not set\"),\n FARCASTER_NEYNAR_API_KEY: z.string().min(1, \"FARCASTER_NEYNAR_API_KEY is not set\"),\n FARCASTER_HUB_URL: z.string().min(1, \"FARCASTER_HUB_URL is not set\"),\n});\n\nexport type FarcasterConfig = zod.infer<typeof FarcasterConfigSchema>;\n\nexport enum FarcasterEventTypes {\n POST_GENERATED = \"FARCASTER_POST_GENERATED\",\n MENTION_RECEIVED = \"FARCASTER_MENTION_RECEIVED\",\n THREAD_CAST_CREATED = \"FARCASTER_THREAD_CAST_CREATED\",\n}\n\nexport enum FarcasterMessageType {\n CAST = \"CAST\",\n REPLY = \"REPLY\",\n}\n\nexport interface FarcasterGenericCastPayload extends Omit<MessagePayload, \"message\"> {\n memory: Memory;\n cast: NeynarCast;\n accountId?: string;\n}\n\nexport interface NeynarWebhookData {\n type: string;\n data?: {\n hash: string;\n text?: string;\n author: {\n fid: number;\n username?: string;\n };\n mentioned_profiles?: Array<{ fid: number }>;\n parent_hash?: string;\n parent_author?: { fid: number };\n };\n}\n\nexport const FARCASTER_SERVICE_NAME = \"farcaster\";\nexport const FARCASTER_SOURCE = \"farcaster\";\n",
|
|
8
|
+
"/**\n * Farcaster ConnectorAccountManager provider.\n *\n * Farcaster auth: Neynar API key + signer UUID per FID. The `accountKey` is the\n * Farcaster ID (FID). Multi-FID deployments configure additional accounts via\n * `FARCASTER_ACCOUNTS` env JSON or `character.settings.farcaster.accounts`.\n *\n * Persistence of new accounts is owned by the manager's storage; the provider\n * adapter just normalizes the account shape.\n */\n\nimport type {\n\tConnectorAccount,\n\tConnectorAccountManager,\n\tConnectorAccountPatch,\n\tConnectorAccountProvider,\n\tIAgentRuntime,\n} from \"@elizaos/core\";\nimport {\n\tlistFarcasterAccountIds,\n\tnormalizeFarcasterAccountId,\n\tvalidateFarcasterConfig,\n} from \"./utils/config\";\n\nexport const FARCASTER_PROVIDER_ID = \"farcaster\";\n\nfunction toConnectorAccount(\n\truntime: IAgentRuntime,\n\taccountId: string,\n): ConnectorAccount {\n\tlet connected = false;\n\tlet fid: number | undefined;\n\tlet hubUrl = \"\";\n\ttry {\n\t\tconst config = validateFarcasterConfig(runtime, accountId);\n\t\tfid = config.FARCASTER_FID;\n\t\thubUrl = config.FARCASTER_HUB_URL ?? \"\";\n\t\tconnected = Boolean(\n\t\t\tfid && config.FARCASTER_SIGNER_UUID && config.FARCASTER_NEYNAR_API_KEY,\n\t\t);\n\t} catch {\n\t\tconnected = false;\n\t}\n\tconst now = Date.now();\n\treturn {\n\t\tid: accountId,\n\t\tprovider: FARCASTER_PROVIDER_ID,\n\t\tlabel: fid ? `FID ${fid}` : accountId,\n\t\trole: \"OWNER\",\n\t\tpurpose: [\"posting\", \"reading\"],\n\t\taccessGate: \"open\",\n\t\tstatus: connected ? \"connected\" : \"disabled\",\n\t\texternalId: fid ? String(fid) : undefined,\n\t\tdisplayHandle: fid ? String(fid) : undefined,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now,\n\t\tmetadata: {\n\t\t\thubUrl,\n\t\t\tfid,\n\t\t},\n\t};\n}\n\nexport function createFarcasterConnectorAccountProvider(\n\truntime: IAgentRuntime,\n): ConnectorAccountProvider {\n\treturn {\n\t\tprovider: FARCASTER_PROVIDER_ID,\n\t\tlabel: \"Farcaster\",\n\t\tlistAccounts: async (\n\t\t\t_manager: ConnectorAccountManager,\n\t\t): Promise<ConnectorAccount[]> => {\n\t\t\tconst ids = listFarcasterAccountIds(runtime);\n\t\t\treturn ids.map((id) => toConnectorAccount(runtime, id));\n\t\t},\n\t\tcreateAccount: async (\n\t\t\tinput: ConnectorAccountPatch,\n\t\t\t_manager: ConnectorAccountManager,\n\t\t) => {\n\t\t\treturn {\n\t\t\t\t...input,\n\t\t\t\tprovider: FARCASTER_PROVIDER_ID,\n\t\t\t\trole: input.role ?? \"OWNER\",\n\t\t\t\tpurpose: input.purpose ?? [\"posting\", \"reading\"],\n\t\t\t\taccessGate: input.accessGate ?? \"open\",\n\t\t\t\tstatus: input.status ?? \"pending\",\n\t\t\t};\n\t\t},\n\t\tpatchAccount: async (\n\t\t\t_accountId: string,\n\t\t\tpatch: ConnectorAccountPatch,\n\t\t\t_manager: ConnectorAccountManager,\n\t\t) => {\n\t\t\treturn { ...patch, provider: FARCASTER_PROVIDER_ID };\n\t\t},\n\t\tdeleteAccount: async (\n\t\t\t_accountId: string,\n\t\t\t_manager: ConnectorAccountManager,\n\t\t) => {\n\t\t\t// Credentials live in character settings or env; out of band.\n\t\t},\n\t};\n}\n\nexport { normalizeFarcasterAccountId };\n",
|
|
9
|
+
"/**\n * Auto-generated canonical action/provider docs for plugin-farcaster.\n * DO NOT EDIT - Generated from prompts/specs/**.\n */\n\nexport type ActionDoc = {\n name: string;\n description: string;\n descriptionCompressed?: string;\n similes?: readonly string[];\n parameters?: readonly unknown[];\n examples?: readonly (readonly unknown[])[];\n};\n\nexport type ProviderDoc = {\n name: string;\n description: string;\n descriptionCompressed?: string;\n position?: number;\n dynamic?: boolean;\n};\n\nexport const coreActionsSpec = {\n version: \"1.0.0\",\n actions: [],\n} as const;\nexport const allActionsSpec = {\n version: \"1.0.0\",\n actions: [],\n} as const;\nexport const coreProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"farcasterProfile\",\n description: \"Provides information about the agent\",\n dynamic: true,\n },\n ],\n} as const;\nexport const allProvidersSpec = {\n version: \"1.0.0\",\n providers: [\n {\n name: \"farcasterProfile\",\n description: \"Provides information about the agent\",\n dynamic: true,\n },\n ],\n} as const;\n\nexport const coreActionDocs: readonly ActionDoc[] = coreActionsSpec.actions;\nexport const allActionDocs: readonly ActionDoc[] = allActionsSpec.actions;\nexport const coreProviderDocs: readonly ProviderDoc[] = coreProvidersSpec.providers;\nexport const allProviderDocs: readonly ProviderDoc[] = allProvidersSpec.providers;\n",
|
|
10
|
+
"/**\n * Helper functions to lookup action/provider specs by name.\n * These allow language-specific implementations to import their text content\n * (description, similes, examples) from the centralized specs.\n *\n * DO NOT EDIT the spec data - update prompts/actions.json, prompts/providers.json and regenerate.\n */\n\nimport {\n type ActionDoc,\n allActionDocs,\n allProviderDocs,\n coreActionDocs,\n coreProviderDocs,\n type ProviderDoc,\n} from \"./specs\";\n\n// Build lookup maps for O(1) access\nconst coreActionMap = new Map<string, ActionDoc>(coreActionDocs.map((doc) => [doc.name, doc]));\nconst allActionMap = new Map<string, ActionDoc>(allActionDocs.map((doc) => [doc.name, doc]));\nconst coreProviderMap = new Map<string, ProviderDoc>(\n coreProviderDocs.map((doc) => [doc.name, doc])\n);\nconst allProviderMap = new Map<string, ProviderDoc>(allProviderDocs.map((doc) => [doc.name, doc]));\n\n/**\n * Get an action spec by name from the core specs.\n * @param name - The action name\n * @returns The action spec or undefined if not found\n */\nexport function getActionSpec(name: string): ActionDoc | undefined {\n return coreActionMap.get(name) ?? allActionMap.get(name);\n}\n\n/**\n * Get an action spec by name, throwing if not found.\n * @param name - The action name\n * @returns The action spec\n * @throws Error if the action is not found\n */\nexport function requireActionSpec(name: string): ActionDoc {\n const spec = getActionSpec(name);\n if (!spec) {\n throw new Error(`Action spec not found: ${name}`);\n }\n return spec;\n}\n\n/**\n * Get a provider spec by name from the core specs.\n * @param name - The provider name\n * @returns The provider spec or undefined if not found\n */\nexport function getProviderSpec(name: string): ProviderDoc | undefined {\n return coreProviderMap.get(name) ?? allProviderMap.get(name);\n}\n\n/**\n * Get a provider spec by name, throwing if not found.\n * @param name - The provider name\n * @returns The provider spec\n * @throws Error if the provider is not found\n */\nexport function requireProviderSpec(name: string): ProviderDoc {\n const spec = getProviderSpec(name);\n if (!spec) {\n throw new Error(`Provider spec not found: ${name}`);\n }\n return spec;\n}\n\n// Re-export types for convenience\nexport type { ActionDoc, ProviderDoc };\n",
|
|
11
|
+
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport type { FarcasterService } from \"../services/FarcasterService\";\nimport { FARCASTER_SERVICE_NAME } from \"../types\";\nimport { getFarcasterFid, readFarcasterAccountId } from \"../utils/config\";\n\nconst spec = requireProviderSpec(\"farcasterProfile\");\nconst MAX_PROFILE_FIELD_LENGTH = 280;\n\nfunction truncateProfileField(value: string | undefined): string | undefined {\n return value ? value.slice(0, MAX_PROFILE_FIELD_LENGTH) : value;\n}\n\nexport const farcasterProfileProvider: Provider = {\n name: spec.name,\n description: \"Provides information about the agent's Farcaster profile\",\n descriptionCompressed: \"provide information agent Farcaster profile\",\n\n dynamic: true,\n contexts: [\"social_posting\", \"messaging\", \"connectors\"],\n contextGate: { anyOf: [\"social_posting\", \"messaging\", \"connectors\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async (runtime: IAgentRuntime, message: Memory, state: State): Promise<ProviderResult> => {\n try {\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const accountId = readFarcasterAccountId(message, state);\n const manager =\n service?.getManagerForAccount?.(accountId, runtime.agentId) ??\n service?.getManagerForAccount?.(undefined, runtime.agentId);\n\n if (!manager) {\n runtime.logger.debug(\"[FarcasterProfileProvider] No managers available\");\n return {\n text: \"Farcaster profile not available.\",\n data: { available: false },\n };\n }\n\n const selectedAccountId = manager.config.accountId;\n const fid = getFarcasterFid(runtime, selectedAccountId);\n if (!fid) {\n runtime.logger.warn(\"[FarcasterProfileProvider] Invalid or missing FARCASTER_FID\");\n return {\n text: \"Invalid Farcaster FID configured.\",\n data: { available: false, error: \"Invalid FID\" },\n };\n }\n\n try {\n const profile = await manager.client.getProfile(fid);\n const username = truncateProfileField(profile.username) ?? \"\";\n const name = truncateProfileField(profile.name);\n\n return {\n text: `Your Farcaster profile: @${username} (FID: ${profile.fid}). ${name ? `Display name: ${name}` : \"\"}`,\n data: {\n available: true,\n fid: profile.fid,\n username,\n name,\n pfp: profile.pfp,\n accountId: selectedAccountId,\n },\n values: {\n fid: profile.fid,\n username,\n },\n };\n } catch (error) {\n runtime.logger.error(\n \"[FarcasterProfileProvider] Error fetching profile:\",\n typeof error === \"string\" ? error : (error as Error).message\n );\n return {\n text: \"Unable to fetch Farcaster profile at this time.\",\n data: { available: false, error: \"Fetch failed\" },\n };\n }\n } catch (error) {\n runtime.logger.error(\n \"[FarcasterProfileProvider] Error:\",\n typeof error === \"string\" ? error : (error as Error).message\n );\n return {\n text: \"Farcaster service is not available.\",\n data: { available: false },\n };\n }\n },\n};\n",
|
|
12
|
+
"import { farcasterProfileProvider } from \"./profileProvider\";\n\nexport { farcasterProfileProvider };\nexport const farcasterProviders = [farcasterProfileProvider];\n",
|
|
13
|
+
"import type { IAgentRuntime, Route, RouteRequest, RouteResponse, UUID } from \"@elizaos/core\";\nimport type { FarcasterAgentManager } from \"../managers/AgentManager\";\nimport { FARCASTER_SERVICE_NAME, type NeynarWebhookData } from \"../types\";\nimport { readFarcasterAccountId } from \"../utils/config\";\n\ntype FarcasterWebhookService = {\n getManagerForAccount?: (\n accountId: string | undefined,\n agentId?: UUID\n ) => FarcasterAgentManager | undefined;\n getManagersForAgent?: (agentId?: UUID) => Map<string, FarcasterAgentManager>;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isNeynarWebhookData(value: unknown): value is NeynarWebhookData {\n if (!isRecord(value) || typeof value.type !== \"string\") return false;\n if (value.data === undefined) return true;\n if (!isRecord(value.data)) return false;\n if (typeof value.data.hash !== \"string\") return false;\n if (!isRecord(value.data.author) || typeof value.data.author.fid !== \"number\") return false;\n if (value.data.text !== undefined && typeof value.data.text !== \"string\") {\n return false;\n }\n if (\n value.data.mentioned_profiles !== undefined &&\n !(\n Array.isArray(value.data.mentioned_profiles) &&\n value.data.mentioned_profiles.every(\n (profile) => isRecord(profile) && typeof profile.fid === \"number\"\n )\n )\n ) {\n return false;\n }\n if (value.data.parent_hash !== undefined && typeof value.data.parent_hash !== \"string\") {\n return false;\n }\n if (\n value.data.parent_author !== undefined &&\n !(isRecord(value.data.parent_author) && typeof value.data.parent_author.fid === \"number\")\n ) {\n return false;\n }\n return true;\n}\n\nexport const farcasterWebhookRoutes: Route[] = [\n {\n type: \"POST\",\n name: \"Farcaster Webhook Handler\",\n path: \"/webhook\",\n handler: async (req: RouteRequest, res: RouteResponse, runtime: IAgentRuntime) => {\n try {\n if (!isNeynarWebhookData(req.body)) {\n res.status(400).json({\n success: false,\n error: \"Invalid webhook payload\",\n });\n return;\n }\n\n const webhookData = req.body;\n const eventType = webhookData.type;\n\n const farcasterService = runtime?.getService?.(FARCASTER_SERVICE_NAME) as\n | FarcasterWebhookService\n | undefined;\n const accountId = readFarcasterAccountId(webhookData);\n\n if (farcasterService && accountId) {\n const manager = farcasterService.getManagerForAccount?.(accountId, runtime.agentId);\n if (manager?.interactions.mode === \"webhook\") {\n await manager.interactions.processWebhookData(webhookData);\n }\n } else if (farcasterService) {\n const managers = farcasterService.getManagersForAgent?.(runtime.agentId) ?? new Map();\n await Promise.all(\n Array.from(managers.values())\n .filter((manager) => manager.interactions.mode === \"webhook\")\n .map((manager) => manager.interactions.processWebhookData(webhookData))\n );\n }\n\n res.status(200).json({\n success: true,\n message: \"Webhook processed successfully\",\n event_type: eventType,\n timestamp: new Date().toISOString(),\n });\n } catch (error) {\n if (runtime.logger) {\n runtime.logger.error(\n error instanceof Error ? error : new Error(String(error)),\n \"Webhook processing error\"\n );\n }\n res.status(500).json({\n success: false,\n error: \"Internal server error\",\n });\n }\n },\n },\n];\n",
|
|
14
|
+
"import {\n ChannelType,\n type Content,\n type IAgentRuntime,\n type Memory,\n Service,\n type UUID,\n} from \"@elizaos/core\";\nimport { FarcasterAgentManager } from \"../managers/AgentManager\";\nimport { FARCASTER_SERVICE_NAME } from \"../types\";\nimport {\n getFarcasterFid,\n hasFarcasterEnabled,\n listFarcasterAccountIds,\n normalizeFarcasterAccountId,\n resolveDefaultFarcasterAccountId,\n validateFarcasterConfig,\n} from \"../utils/config\";\nimport { FarcasterCastService } from \"./CastService\";\nimport { FarcasterMessageService } from \"./MessageService\";\n\ntype FarcasterPostConnectorRegistration = {\n source: string;\n label?: string;\n description?: string;\n capabilities?: string[];\n contexts?: string[];\n metadata?: Record<string, unknown>;\n postHandler: (runtime: IAgentRuntime, content: Content) => Promise<Memory>;\n fetchFeed?: FarcasterCastService[\"fetchFeed\"];\n searchPosts?: FarcasterCastService[\"searchPosts\"];\n contentShaping?: {\n systemPromptFragment?: string;\n constraints?: Record<string, unknown>;\n };\n accountId?: string;\n};\n\ntype RuntimeWithPostConnector = IAgentRuntime & {\n registerPostConnector?: (registration: FarcasterPostConnectorRegistration) => void;\n};\n\ninterface AgentAccounts {\n defaultAccountId: string;\n managers: Map<string, FarcasterAgentManager>;\n messageServices: Map<string, FarcasterMessageService>;\n castServices: Map<string, FarcasterCastService>;\n}\n\nexport class FarcasterService extends Service {\n private static instance?: FarcasterService;\n private agents = new Map<UUID, AgentAccounts>();\n\n static serviceType = FARCASTER_SERVICE_NAME;\n\n readonly description = \"Farcaster integration service for sending and receiving casts\";\n readonly capabilityDescription = \"The agent is able to send and receive messages on farcaster\";\n\n private static getInstance(): FarcasterService {\n if (!FarcasterService.instance) {\n FarcasterService.instance = new FarcasterService();\n }\n return FarcasterService.instance;\n }\n\n async initialize(runtime: IAgentRuntime): Promise<void> {\n await FarcasterService.start(runtime);\n }\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = FarcasterService.getInstance();\n if (service.agents.has(runtime.agentId)) {\n runtime.logger.warn({ agentId: runtime.agentId }, \"Farcaster service already started\");\n return service;\n }\n\n if (!hasFarcasterEnabled(runtime)) {\n runtime.logger.debug({ agentId: runtime.agentId }, \"Farcaster service not enabled\");\n return service;\n }\n\n const accounts: AgentAccounts = {\n defaultAccountId: normalizeFarcasterAccountId(resolveDefaultFarcasterAccountId(runtime)),\n managers: new Map(),\n messageServices: new Map(),\n castServices: new Map(),\n };\n service.agents.set(runtime.agentId, accounts);\n\n for (const accountId of listFarcasterAccountIds(runtime)) {\n if (!hasFarcasterEnabled(runtime, accountId)) {\n continue;\n }\n\n const farcasterConfig = validateFarcasterConfig(runtime, accountId);\n const manager = new FarcasterAgentManager(runtime, farcasterConfig);\n accounts.managers.set(accountId, manager);\n accounts.messageServices.set(\n accountId,\n new FarcasterMessageService(manager.client, runtime, accountId)\n );\n accounts.castServices.set(\n accountId,\n new FarcasterCastService(manager.client, runtime, accountId)\n );\n\n await manager.start();\n runtime.logger.success({ agentId: runtime.agentId, accountId }, \"Farcaster client started\");\n }\n\n return service;\n }\n\n static async stop(runtime: IAgentRuntime): Promise<void> {\n const service = FarcasterService.getInstance();\n const accounts = service.agents.get(runtime.agentId);\n if (accounts) {\n for (const manager of accounts.managers.values()) {\n await manager.stop();\n }\n service.agents.delete(runtime.agentId);\n runtime.logger.info({ agentId: runtime.agentId }, \"Farcaster client stopped\");\n } else {\n runtime.logger.debug({ agentId: runtime.agentId }, \"Farcaster service not running\");\n }\n }\n\n static registerSendHandlers(runtime: IAgentRuntime, serviceInstance: FarcasterService): void {\n const accounts = serviceInstance?.agents.get(runtime.agentId);\n if (!accounts || accounts.castServices.size === 0) {\n runtime.logger.warn(\n { src: \"plugin:farcaster\", agentId: runtime.agentId },\n \"Cannot register Farcaster post connector; cast service is not initialized\"\n );\n return;\n }\n\n const withPostConnector = runtime as RuntimeWithPostConnector;\n if (typeof withPostConnector.registerPostConnector !== \"function\") {\n return;\n }\n\n for (const castService of accounts.castServices.values()) {\n const accountId = castService.getAccountId();\n withPostConnector.registerPostConnector({\n source: \"farcaster\",\n accountId,\n label: \"Farcaster\",\n description:\n \"Farcaster public cast connector for publishing casts and reading or searching the authenticated account's recent feed.\",\n capabilities: [\"post\", \"fetch_feed\", \"search_posts\"],\n contexts: [\"social\", \"social_posting\", \"connectors\"],\n metadata: {\n accountId,\n service: FARCASTER_SERVICE_NAME,\n },\n postHandler: castService.handleSendPost.bind(castService),\n fetchFeed: castService.fetchFeed.bind(castService),\n searchPosts: castService.searchPosts.bind(castService),\n contentShaping: {\n systemPromptFragment:\n \"For Farcaster casts, write a conversational public cast under 320 characters. If replying, keep enough context for a public thread.\",\n constraints: {\n maxLength: 320,\n supportsMarkdown: false,\n channelType: ChannelType.FEED,\n },\n },\n });\n }\n\n runtime.logger.info(\n { src: \"plugin:farcaster\", agentId: runtime.agentId },\n \"Registered Farcaster post connector\"\n );\n }\n\n async stop(): Promise<void> {\n for (const [agentId, accounts] of Array.from(this.agents.entries())) {\n const runtime = accounts.managers.values().next().value?.runtime;\n runtime?.logger.debug(\"Stopping Farcaster service\");\n try {\n if (runtime) {\n await FarcasterService.stop(runtime);\n } else {\n this.agents.delete(agentId);\n }\n } catch (error) {\n runtime?.logger.error({ agentId, error }, \"Error stopping Farcaster service\");\n }\n }\n }\n\n getMessageService(agentId: UUID, accountId?: string): FarcasterMessageService | undefined {\n return this.getMessageServiceForAccount(accountId, agentId);\n }\n\n getCastService(agentId: UUID, accountId?: string): FarcasterCastService | undefined {\n return this.getCastServiceForAccount(accountId, agentId);\n }\n\n getMessageServiceForAccount(\n accountId: string | undefined,\n agentId?: UUID\n ): FarcasterMessageService | undefined {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n if (!resolvedAgentId) return undefined;\n const accounts = this.agents.get(resolvedAgentId);\n if (!accounts) return undefined;\n const id = accountId ? normalizeFarcasterAccountId(accountId) : accounts.defaultAccountId;\n return accounts.messageServices.get(id);\n }\n\n getCastServiceForAccount(\n accountId: string | undefined,\n agentId?: UUID\n ): FarcasterCastService | undefined {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n if (!resolvedAgentId) return undefined;\n const accounts = this.agents.get(resolvedAgentId);\n if (!accounts) return undefined;\n const id = accountId ? normalizeFarcasterAccountId(accountId) : accounts.defaultAccountId;\n return accounts.castServices.get(id);\n }\n\n getManagerForAccount(\n accountId: string | undefined,\n agentId?: UUID\n ): FarcasterAgentManager | undefined {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n if (!resolvedAgentId) return undefined;\n const accounts = this.agents.get(resolvedAgentId);\n if (!accounts) return undefined;\n const id = accountId ? normalizeFarcasterAccountId(accountId) : accounts.defaultAccountId;\n return accounts.managers.get(id);\n }\n\n getDefaultAccountId(agentId?: UUID): string | undefined {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n return resolvedAgentId ? this.agents.get(resolvedAgentId)?.defaultAccountId : undefined;\n }\n\n listAccountIds(agentId?: UUID): string[] {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n const accounts = resolvedAgentId ? this.agents.get(resolvedAgentId) : undefined;\n return accounts ? Array.from(accounts.managers.keys()) : [];\n }\n\n getManagersForAgent(agentId?: UUID): Map<string, FarcasterAgentManager> {\n const resolvedAgentId = agentId ?? this.firstAgentId();\n const accounts = resolvedAgentId ? this.agents.get(resolvedAgentId) : undefined;\n return new Map(accounts?.managers ?? []);\n }\n\n async healthCheck(): Promise<{\n healthy: boolean;\n details: Record<string, unknown>;\n }> {\n const managerStatuses: Record<string, unknown> = {};\n let overallHealthy = true;\n\n for (const [agentId, accounts] of Array.from(this.agents.entries())) {\n managerStatuses[agentId] = {};\n for (const [accountId, manager] of Array.from(accounts.managers.entries())) {\n try {\n const fid = getFarcasterFid(manager.runtime, accountId);\n if (!fid) {\n throw new Error(\"FARCASTER_FID not configured\");\n }\n const profile = await manager.client.getProfile(fid);\n (managerStatuses[agentId] as Record<string, unknown>)[accountId] = {\n status: \"healthy\",\n fid: profile.fid,\n username: profile.username,\n };\n } catch (error) {\n (managerStatuses[agentId] as Record<string, unknown>)[accountId] = {\n status: \"unhealthy\",\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n overallHealthy = false;\n }\n }\n }\n\n return {\n healthy: overallHealthy,\n details: {\n activeManagers: Array.from(this.agents.values()).reduce(\n (total, accounts) => total + accounts.managers.size,\n 0\n ),\n managerStatuses,\n },\n };\n }\n\n getActiveManagers(): Map<string, FarcasterAgentManager> {\n return new Map(\n Array.from(this.agents.entries()).flatMap(([agentId, accounts]) =>\n Array.from(accounts.managers.entries()).map(\n ([accountId, manager]) => [`${agentId}:${accountId}`, manager] as const\n )\n )\n );\n }\n\n private firstAgentId(): UUID | undefined {\n return this.agents.keys().next().value;\n }\n}\n",
|
|
15
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { Configuration, NeynarAPIClient } from \"@neynar/nodejs-sdk\";\nimport { FarcasterClient } from \"../client/FarcasterClient\";\nimport type { FarcasterConfig } from \"../types\";\nimport { FarcasterCastManager } from \"./CastManager\";\nimport { FarcasterInteractionManager } from \"./InteractionManager\";\n\nexport class FarcasterAgentManager {\n readonly runtime: IAgentRuntime;\n readonly client: FarcasterClient;\n readonly casts: FarcasterCastManager;\n readonly interactions: FarcasterInteractionManager;\n readonly config: FarcasterConfig & { accountId?: string };\n\n constructor(runtime: IAgentRuntime, config: FarcasterConfig & { accountId?: string }) {\n this.runtime = runtime;\n this.config = config;\n const signerUuid = config.FARCASTER_SIGNER_UUID;\n\n const neynarConfig = new Configuration({\n apiKey: config.FARCASTER_NEYNAR_API_KEY,\n });\n const neynar = new NeynarAPIClient(neynarConfig);\n const client = new FarcasterClient({ neynar, signerUuid });\n\n this.client = client;\n\n runtime.logger.success(\"Farcaster Neynar client initialized.\");\n\n this.interactions = new FarcasterInteractionManager({\n client,\n runtime,\n config,\n });\n this.casts = new FarcasterCastManager({ client, runtime, config });\n }\n\n async start(): Promise<void> {\n await Promise.all([this.casts.start(), this.interactions.start()]);\n }\n\n async stop(): Promise<void> {\n await Promise.all([this.casts.stop(), this.interactions.stop()]);\n }\n}\n",
|
|
16
|
+
"import { type Content, elizaLogger } from \"@elizaos/core\";\nimport { isApiErrorResponse, type NeynarAPIClient } from \"@neynar/nodejs-sdk\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport { LRUCache } from \"lru-cache\";\nimport {\n type Cast,\n type CastId,\n DEFAULT_CAST_CACHE_SIZE,\n DEFAULT_CAST_CACHE_TTL,\n type FidRequest,\n type Profile,\n} from \"../types\";\nimport { neynarCastToCast, splitPostContent } from \"../utils\";\n\nasync function logNeynarCall<T>(\n op: string,\n context: Record<string, unknown>,\n fn: () => Promise<T>\n): Promise<T> {\n const startedAt = Date.now();\n elizaLogger.debug({ sdk: \"neynar\", op, ...context }, `[FarcasterClient] ${op} started`);\n try {\n const result = await fn();\n elizaLogger.info(\n {\n sdk: \"neynar\",\n op,\n ...context,\n durationMs: Date.now() - startedAt,\n },\n `[FarcasterClient] ${op} ok`\n );\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n elizaLogger.warn(\n {\n sdk: \"neynar\",\n op,\n ...context,\n durationMs: Date.now() - startedAt,\n error: message,\n },\n `[FarcasterClient] ${op} failed`\n );\n throw error;\n }\n}\n\nconst castCache: LRUCache<string, NeynarCast> = new LRUCache({\n max: DEFAULT_CAST_CACHE_SIZE,\n ttl: DEFAULT_CAST_CACHE_TTL,\n});\n\nconst profileCache: LRUCache<number, Profile> = new LRUCache({\n max: 1000,\n ttl: 1000 * 60 * 15,\n});\n\nexport class FarcasterClient {\n private neynar: NeynarAPIClient;\n private signerUuid: string;\n\n constructor(opts: { neynar: NeynarAPIClient; signerUuid: string }) {\n this.neynar = opts.neynar;\n this.signerUuid = opts.signerUuid;\n }\n\n async sendCast({\n content,\n inReplyTo,\n }: {\n content: Content;\n inReplyTo?: CastId;\n }): Promise<NeynarCast[]> {\n const text = (content.text ?? \"\").trim();\n if (text.length === 0) {\n return [];\n }\n\n const chunks = splitPostContent(text);\n const sent: NeynarCast[] = [];\n\n for (const chunk of chunks) {\n const result = await this.publishCast(chunk, inReplyTo);\n sent.push(result);\n }\n return sent;\n }\n\n private async publishCast(cast: string, parentCastId?: CastId): Promise<NeynarCast> {\n try {\n const result = await logNeynarCall(\n \"publishCast\",\n { textLen: cast.length, parentHash: parentCastId?.hash ?? null },\n async () =>\n this.neynar.publishCast({\n signerUuid: this.signerUuid,\n text: cast,\n parent: parentCastId?.hash,\n })\n );\n if (result.success) {\n return this.getCast(result.cast.hash);\n }\n throw new Error(`[Farcaster] Error publishing [${cast}] parentCastId: [${parentCastId}]`);\n } catch (err) {\n if (isApiErrorResponse(err)) {\n elizaLogger.error(`Neynar error: ${JSON.stringify(err.response.data)}`);\n throw err.response.data;\n } else {\n throw err;\n }\n }\n }\n\n async getCast(castHash: string): Promise<NeynarCast> {\n const cachedCast = castCache.get(castHash);\n if (cachedCast) {\n return cachedCast;\n }\n\n const response = await logNeynarCall(\"lookupCastByHashOrUrl\", { castHash }, async () =>\n this.neynar.lookupCastByHashOrUrl({\n identifier: castHash,\n type: \"hash\",\n })\n );\n\n castCache.set(castHash, response.cast);\n\n return response.cast;\n }\n\n /**\n * Get mentions for a FID.\n */\n async getMentions(request: FidRequest): Promise<NeynarCast[]> {\n const neynarMentionsResponse = await logNeynarCall(\n \"fetchAllNotifications\",\n { fid: request.fid, pageSize: request.pageSize },\n async () =>\n this.neynar.fetchAllNotifications({\n fid: request.fid,\n type: [\"mentions\", \"replies\"],\n limit: request.pageSize,\n })\n );\n const mentions: NeynarCast[] = [];\n\n for (const notification of neynarMentionsResponse.notifications) {\n const neynarCast = notification.cast;\n if (neynarCast) {\n mentions.push(neynarCast);\n }\n }\n\n return mentions;\n }\n\n async getProfile(fid: number): Promise<Profile> {\n if (profileCache.has(fid)) {\n return profileCache.get(fid) as Profile;\n }\n\n const result = await logNeynarCall(\"fetchBulkUsers\", { fid }, async () =>\n this.neynar.fetchBulkUsers({ fids: [fid] })\n );\n if (result.users.length < 1) {\n throw new Error(\"Profile fetch failed\");\n }\n\n const neynarUserProfile = result.users[0];\n\n const profile: Profile = {\n fid,\n name: \"\",\n username: \"\",\n };\n\n profile.name = neynarUserProfile.display_name ?? \"\";\n profile.username = neynarUserProfile.username;\n profile.bio = neynarUserProfile.profile.bio.text;\n profile.pfp = neynarUserProfile.pfp_url;\n\n profileCache.set(fid, profile);\n\n return profile;\n }\n\n async getTimeline(request: FidRequest): Promise<{\n timeline: Cast[];\n cursor?: string;\n }> {\n const timeline: Cast[] = [];\n\n const response = await logNeynarCall(\n \"fetchCastsForUser\",\n { fid: request.fid, pageSize: request.pageSize },\n async () =>\n this.neynar.fetchCastsForUser({\n fid: request.fid,\n limit: request.pageSize,\n })\n );\n\n for (const cast of response.casts) {\n castCache.set(cast.hash, cast);\n timeline.push(neynarCastToCast(cast));\n }\n\n const nextCursor = response.next?.cursor ?? undefined;\n\n return {\n timeline,\n cursor: nextCursor,\n };\n }\n\n clearCache(): void {\n profileCache.clear();\n castCache.clear();\n }\n\n async publishReaction(params: {\n reactionType: \"like\" | \"recast\";\n target: string;\n }): Promise<{ success: boolean }> {\n try {\n const result = await logNeynarCall(\n \"publishReaction\",\n { reactionType: params.reactionType, target: params.target },\n async () =>\n this.neynar.publishReaction({\n signerUuid: this.signerUuid,\n reactionType: params.reactionType,\n target: params.target,\n })\n );\n\n return { success: result.success ?? false };\n } catch (err) {\n if (isApiErrorResponse(err)) {\n elizaLogger.error(`Neynar error publishing reaction: ${JSON.stringify(err.response.data)}`);\n throw err.response.data;\n }\n throw err;\n }\n }\n\n async deleteReaction(params: {\n reactionType: \"like\" | \"recast\";\n target: string;\n }): Promise<{ success: boolean }> {\n try {\n const result = await logNeynarCall(\n \"deleteReaction\",\n { reactionType: params.reactionType, target: params.target },\n async () =>\n this.neynar.deleteReaction({\n signerUuid: this.signerUuid,\n reactionType: params.reactionType,\n target: params.target,\n })\n );\n\n return { success: result.success ?? false };\n } catch (err) {\n if (isApiErrorResponse(err)) {\n elizaLogger.error(`Neynar error deleting reaction: ${JSON.stringify(err.response.data)}`);\n throw err.response.data;\n }\n throw err;\n }\n }\n}\n",
|
|
17
|
+
"import type { IAgentRuntime, Memory, UUID } from \"@elizaos/core\";\nimport { stringToUuid } from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport { type Cast, FARCASTER_SOURCE } from \"../types\";\n\nexport const MAX_CAST_LENGTH = 1024;\n\nexport function castId({ hash, agentId }: { hash: string; agentId: string }): string {\n return `${hash}-${agentId}`;\n}\n\nexport function castUuid(props: { hash: string; agentId: string }): UUID {\n return stringToUuid(castId(props));\n}\n\nexport function splitPostContent(content: string, maxLength: number = MAX_CAST_LENGTH): string[] {\n const paragraphs = content.split(\"\\n\\n\").map((p) => p.trim());\n const posts: string[] = [];\n let currentCast = \"\";\n\n for (const paragraph of paragraphs) {\n if (!paragraph) continue;\n\n if (`${currentCast}\\n\\n${paragraph}`.trim().length <= maxLength) {\n if (currentCast) {\n currentCast += `\\n\\n${paragraph}`;\n } else {\n currentCast = paragraph;\n }\n } else {\n if (currentCast) {\n posts.push(currentCast.trim());\n }\n if (paragraph.length <= maxLength) {\n currentCast = paragraph;\n } else {\n const chunks = splitParagraph(paragraph, maxLength);\n posts.push(...chunks.slice(0, -1));\n currentCast = chunks[chunks.length - 1];\n }\n }\n }\n\n if (currentCast) {\n posts.push(currentCast.trim());\n }\n\n return posts;\n}\n\nexport function splitParagraph(paragraph: string, maxLength: number): string[] {\n const sentences = paragraph.match(/[^.!?]+[.!?]+|[^.!?]+$/g) || [paragraph];\n const chunks: string[] = [];\n let currentChunk = \"\";\n\n for (const sentence of sentences) {\n if (`${currentChunk} ${sentence}`.trim().length <= maxLength) {\n if (currentChunk) {\n currentChunk += ` ${sentence}`;\n } else {\n currentChunk = sentence;\n }\n } else {\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n if (sentence.length <= maxLength) {\n currentChunk = sentence;\n } else {\n const words = sentence.split(\" \");\n currentChunk = \"\";\n for (const word of words) {\n if (`${currentChunk} ${word}`.trim().length <= maxLength) {\n if (currentChunk) {\n currentChunk += ` ${word}`;\n } else {\n currentChunk = word;\n }\n } else {\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n currentChunk = word;\n }\n }\n }\n }\n }\n\n if (currentChunk) {\n chunks.push(currentChunk.trim());\n }\n\n return chunks;\n}\n\nexport function lastCastCacheKey(fid: number): string {\n return `farcaster/${fid}/lastCast`;\n}\n\nexport function neynarCastToCast(neynarCast: NeynarCast): Cast {\n return {\n hash: neynarCast.hash,\n authorFid: neynarCast.author.fid,\n text: neynarCast.text,\n threadId: neynarCast.thread_hash ?? undefined,\n profile: {\n fid: neynarCast.author.fid,\n name: neynarCast.author.display_name || \"anon\",\n username: neynarCast.author.username,\n },\n ...(neynarCast.parent_hash && neynarCast.parent_author?.fid\n ? {\n inReplyTo: {\n hash: neynarCast.parent_hash,\n fid: neynarCast.parent_author.fid,\n },\n }\n : {}),\n timestamp: new Date(neynarCast.timestamp),\n embeds: neynarCast.embeds && neynarCast.embeds.length > 0 ? neynarCast.embeds : undefined,\n };\n}\n\nexport function createCastMemory({\n roomId,\n senderId,\n runtime,\n cast,\n accountId,\n}: {\n roomId: UUID;\n senderId: UUID;\n runtime: IAgentRuntime;\n cast: Cast;\n accountId?: string;\n}): Memory {\n const inReplyTo = cast.inReplyTo\n ? castUuid({\n hash: cast.inReplyTo.hash,\n agentId: runtime.agentId,\n })\n : undefined;\n\n return {\n id: castUuid({\n hash: cast.hash,\n agentId: runtime.agentId,\n }),\n agentId: runtime.agentId,\n entityId: senderId,\n content: {\n text: cast.text,\n source: FARCASTER_SOURCE,\n ...(accountId ? { accountId } : {}),\n url: \"\",\n inReplyTo,\n hash: cast.hash,\n threadId: cast.threadId,\n attachments: cast.media && cast.media.length > 0 ? cast.media : undefined,\n },\n metadata: {\n ...(accountId ? { accountId } : {}),\n },\n roomId,\n };\n}\n\nexport function formatCastTimestamp(timestamp: Date): string {\n return timestamp.toLocaleString(\"en-US\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n",
|
|
18
|
+
"import {\n createUniqueUuid,\n type EventPayload,\n EventType,\n type IAgentRuntime,\n setTrajectoryPurpose,\n withStandaloneTrajectory,\n} from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport {\n FARCASTER_SOURCE,\n type FarcasterConfig,\n FarcasterEventTypes,\n type LastCast,\n} from \"../types\";\nimport { lastCastCacheKey } from \"../utils\";\nimport { standardCastHandlerCallback } from \"../utils/callbacks\";\nimport { DEFAULT_FARCASTER_ACCOUNT_ID, normalizeFarcasterAccountId } from \"../utils/config\";\n\ninterface FarcasterCastParams {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n}\n\nexport class FarcasterCastManager {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n fid: number;\n private timeout: ReturnType<typeof setTimeout> | undefined;\n private config: FarcasterConfig;\n private isRunning: boolean = false;\n\n constructor(opts: FarcasterCastParams) {\n this.client = opts.client;\n this.runtime = opts.runtime;\n this.config = opts.config;\n this.fid = this.config.FARCASTER_FID;\n }\n\n private getAccountId(): string {\n return normalizeFarcasterAccountId(\n (this.config as FarcasterConfig & { accountId?: string }).accountId ??\n DEFAULT_FARCASTER_ACCOUNT_ID\n );\n }\n\n async start(): Promise<void> {\n if (this.isRunning || !this.config.ENABLE_CAST) {\n return;\n }\n\n this.isRunning = true;\n\n void this.runPeriodically();\n }\n\n async stop(): Promise<void> {\n if (this.timeout) clearTimeout(this.timeout);\n this.isRunning = false;\n }\n\n private calculateDelay(): { delay: number; randomMinutes: number } {\n const minMinutes = this.config.CAST_INTERVAL_MIN;\n const maxMinutes = this.config.CAST_INTERVAL_MAX;\n const randomMinutes = Math.floor(Math.random() * (maxMinutes - minMinutes + 1)) + minMinutes;\n const delay = randomMinutes * 60 * 1000;\n return { delay, randomMinutes };\n }\n\n private async runPeriodically(): Promise<void> {\n if (this.config.CAST_IMMEDIATELY) {\n await this.generateNewCast();\n }\n\n while (this.isRunning) {\n try {\n const lastPost = await this.runtime.getCache<LastCast>(lastCastCacheKey(this.fid));\n const lastPostTimestamp = lastPost?.timestamp ?? 0;\n const { delay, randomMinutes } = this.calculateDelay();\n\n if (Date.now() > lastPostTimestamp + delay) {\n await this.generateNewCast();\n }\n\n this.runtime.logger.log(`Next cast scheduled in ${randomMinutes} minutes`);\n await new Promise((resolve) => {\n const timeoutId = setTimeout(resolve, delay);\n this.timeout = timeoutId;\n });\n } catch (error) {\n this.runtime.logger.error(\n { agentId: this.runtime.agentId, error },\n \"[Farcaster] Error in periodic cast loop:\"\n );\n }\n }\n }\n\n private async generateNewCast(): Promise<void> {\n await withStandaloneTrajectory(\n this.runtime,\n {\n source: \"plugin-farcaster:auto-cast\",\n metadata: {\n platform: FARCASTER_SOURCE,\n kind: \"public_post_generation\",\n fid: this.fid,\n accountId: this.getAccountId(),\n },\n },\n async () => {\n setTrajectoryPurpose(\"background\");\n this.runtime.logger.info(\"Generating new cast\");\n try {\n const worldId = createUniqueUuid(this.runtime, this.fid.toString());\n const roomId = createUniqueUuid(this.runtime, `${this.fid}-home`);\n\n const callback = standardCastHandlerCallback({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n roomId,\n onCompletion: async (casts, _memories) => {\n const lastCast = casts[casts.length - 1];\n await this.runtime.setCache<LastCast>(lastCastCacheKey(this.fid), {\n hash: lastCast.hash,\n timestamp: new Date(lastCast.timestamp).getTime(),\n });\n },\n });\n\n await this.runtime.emitEvent(EventType.POST_GENERATED, {\n runtime: this.runtime,\n callback,\n worldId,\n userId: this.runtime.agentId,\n roomId,\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n } as EventPayload);\n\n await this.runtime.emitEvent(\n FarcasterEventTypes.POST_GENERATED as string,\n {\n runtime: this.runtime,\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n } as EventPayload\n );\n } catch (error) {\n this.runtime.logger.error({ error }, \"[Farcaster] Error generating new cast\");\n }\n }\n );\n }\n}\n",
|
|
19
|
+
"import type { Content, HandlerCallback, IAgentRuntime, Memory, UUID } from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport type { FarcasterClient } from \"../client\";\nimport type { CastId, FarcasterConfig } from \"../types\";\nimport { DEFAULT_FARCASTER_ACCOUNT_ID, normalizeFarcasterAccountId } from \"./config\";\nimport { createCastMemory, neynarCastToCast } from \"./index\";\n\nexport function standardCastHandlerCallback({\n client,\n runtime,\n config,\n roomId,\n onCompletion,\n onError,\n inReplyTo,\n}: {\n inReplyTo?: CastId;\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n roomId: UUID;\n onCompletion?: (casts: NeynarCast[], memories: Memory[]) => Promise<void>;\n onError?: (error: unknown) => Promise<void>;\n}): HandlerCallback {\n const callback: HandlerCallback = async (content: Content): Promise<Memory[]> => {\n try {\n const accountId = normalizeFarcasterAccountId(\n (config as FarcasterConfig & { accountId?: string }).accountId ??\n DEFAULT_FARCASTER_ACCOUNT_ID\n );\n if (config.FARCASTER_DRY_RUN) {\n runtime.logger.info(`[Farcaster] Dry run: would have cast: ${content.text}`);\n return [];\n }\n\n const casts = await client.sendCast({ content, inReplyTo });\n\n if (casts.length === 0) {\n runtime.logger.warn(\"[Farcaster] No casts posted\");\n return [];\n }\n\n const memories: Memory[] = [];\n for (let i = 0; i < casts.length; i++) {\n const cast = casts[i];\n runtime.logger.success(`[Farcaster] Published cast ${cast.hash}`);\n\n const memory = createCastMemory({\n roomId,\n senderId: runtime.agentId,\n runtime,\n cast: neynarCastToCast(cast),\n accountId,\n });\n\n if (i === 0) {\n memory.content.actions = content.actions;\n }\n\n await runtime.createMemory(memory, \"messages\");\n memories.push(memory);\n }\n\n if (onCompletion) {\n await onCompletion(casts, memories);\n }\n\n return memories;\n } catch (error) {\n runtime.logger.error(\n \"[Farcaster] Error posting cast:\",\n typeof error === \"string\" ? error : (error as Error).message\n );\n\n if (onError) {\n await onError(error);\n }\n\n return [];\n }\n };\n\n return callback;\n}\n",
|
|
20
|
+
"import {\n ChannelType,\n createUniqueUuid,\n type EventPayload,\n type IAgentRuntime,\n type Memory,\n stringToUuid,\n type UUID,\n} from \"@elizaos/core\";\nimport type { Cast as NeynarCast } from \"@neynar/nodejs-sdk/build/api\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport {\n type Cast,\n FARCASTER_SOURCE,\n type FarcasterConfig,\n FarcasterEventTypes,\n type FarcasterGenericCastPayload,\n type NeynarWebhookData,\n type Profile,\n} from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport { AsyncQueue } from \"../utils/asyncqueue\";\nimport { standardCastHandlerCallback } from \"../utils/callbacks\";\nimport { DEFAULT_FARCASTER_ACCOUNT_ID, normalizeFarcasterAccountId } from \"../utils/config\";\nimport { EmbedManager } from \"./EmbedManager\";\nimport type { IInteractionProcessor } from \"./InteractionProcessor\";\nimport {\n createFarcasterInteractionSource,\n type FarcasterInteractionSource,\n} from \"./InteractionSource\";\n\ninterface FarcasterInteractionManagerParams {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n}\n\nexport class FarcasterInteractionManager implements IInteractionProcessor {\n private client: FarcasterClient;\n private runtime: IAgentRuntime;\n private config: FarcasterConfig;\n private asyncQueue: AsyncQueue;\n private embedManager: EmbedManager;\n\n public readonly mode: \"polling\" | \"webhook\";\n public readonly source: FarcasterInteractionSource;\n\n constructor(opts: FarcasterInteractionManagerParams) {\n this.client = opts.client;\n this.runtime = opts.runtime;\n this.config = opts.config;\n this.asyncQueue = new AsyncQueue(1);\n this.embedManager = new EmbedManager(opts.runtime);\n\n this.mode = opts.config.FARCASTER_MODE as \"polling\" | \"webhook\";\n this.source = createFarcasterInteractionSource({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n processor: this,\n });\n\n this.runtime.logger.info(`Farcaster interaction mode: ${this.mode}`);\n }\n\n private getAccountId(): string {\n return normalizeFarcasterAccountId(\n (this.config as FarcasterConfig & { accountId?: string }).accountId ??\n DEFAULT_FARCASTER_ACCOUNT_ID\n );\n }\n\n async processMention(cast: NeynarCast): Promise<void> {\n const agentFid = this.config.FARCASTER_FID;\n const agent = await this.client.getProfile(agentFid);\n const mention = neynarCastToCast(cast);\n\n if (mention.embeds && mention.embeds.length > 0) {\n try {\n this.runtime.logger.debug(\n { castHash: cast.hash, embedCount: mention.embeds.length },\n \"[Farcaster] Processing embeds for mention\"\n );\n const processedMedia = await this.embedManager.processEmbeds(mention.embeds);\n mention.media = processedMedia;\n this.runtime.logger.info(\n { castHash: cast.hash, mediaCount: processedMedia.length },\n \"[Farcaster] Processed embeds for mention\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: cast.hash,\n },\n \"[Farcaster] Failed to process embeds, continuing without media\"\n );\n }\n }\n\n await this.handleMentionCast({ agent, mention, cast });\n }\n\n async processReply(cast: NeynarCast): Promise<void> {\n const agentFid = this.config.FARCASTER_FID;\n const agent = await this.client.getProfile(agentFid);\n const reply = neynarCastToCast(cast);\n\n if (reply.embeds && reply.embeds.length > 0) {\n try {\n this.runtime.logger.debug(\n { castHash: cast.hash, embedCount: reply.embeds.length },\n \"[Farcaster] Processing embeds for reply\"\n );\n const processedMedia = await this.embedManager.processEmbeds(reply.embeds);\n reply.media = processedMedia;\n this.runtime.logger.info(\n { castHash: cast.hash, mediaCount: processedMedia.length },\n \"[Farcaster] Processed embeds for reply\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: cast.hash,\n },\n \"[Farcaster] Failed to process embeds, continuing without media\"\n );\n }\n }\n\n await this.handleMentionCast({ agent, mention: reply, cast });\n }\n\n async processWebhookData(webhookData: NeynarWebhookData): Promise<void> {\n if (webhookData.type !== \"cast.created\" || !webhookData.data) {\n this.runtime.logger.debug(\"Ignoring non-cast webhook event:\", webhookData.type);\n return;\n }\n\n const castData = webhookData.data;\n const agentFid = this.config.FARCASTER_FID;\n\n if (!castData.author || !castData.hash || typeof castData.author.fid !== \"number\") {\n this.runtime.logger.warn(\n \"Invalid webhook cast data structure - missing author, hash, or author.fid\"\n );\n return;\n }\n\n if (castData.author.fid === agentFid) {\n this.runtime.logger.debug(\"Skipping webhook event from agent itself\");\n return;\n }\n\n const memoryId = castUuid({\n agentId: this.runtime.agentId,\n hash: castData.hash,\n });\n if (await this.runtime.getMemoryById(memoryId)) {\n this.runtime.logger.debug(\"Skipping already processed webhook cast:\", castData.hash);\n return;\n }\n\n const isMention = castData.mentioned_profiles?.some(\n (profile: { fid: number }) => profile.fid === agentFid\n );\n\n const isReply = castData.parent_hash && castData.parent_author?.fid === agentFid;\n\n if (isMention) {\n const username = castData.author.username || \"unknown\";\n const text = castData.text || \"\";\n this.runtime.logger.info(`Processing webhook MENTION from @${username}: \"${text}\"`);\n\n try {\n const neynarCast = await this.client.getCast(castData.hash);\n await this.processMention(neynarCast);\n } catch (error) {\n this.runtime.logger.error(\n { agentId: this.runtime.agentId, error },\n `Failed to process webhook mention from @${username}`\n );\n }\n } else if (isReply) {\n const username = castData.author.username || \"unknown\";\n const text = castData.text || \"\";\n this.runtime.logger.info(`Processing webhook REPLY from @${username}: \"${text}\"`);\n\n try {\n const neynarCast = await this.client.getCast(castData.hash);\n await this.processReply(neynarCast);\n } catch (error) {\n this.runtime.logger.error({ error }, `Failed to process webhook reply from @${username}:`);\n }\n } else {\n this.runtime.logger.debug(\"Webhook cast is neither mention nor reply to agent\");\n }\n }\n\n async ensureCastConnection(cast: Cast): Promise<Memory> {\n return await this.asyncQueue.submit(async () => {\n const memoryId = castUuid({\n agentId: this.runtime.agentId,\n hash: cast.hash,\n });\n const conversationId = cast.threadId ?? cast.inReplyTo?.hash ?? cast.hash;\n const entityId = createUniqueUuid(this.runtime, cast.authorFid.toString());\n const worldId = createUniqueUuid(this.runtime, cast.authorFid.toString());\n const roomId = createUniqueUuid(this.runtime, conversationId);\n\n if (entityId !== this.runtime.agentId) {\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n worldName: `${cast.profile.username}'s Farcaster`,\n userName: cast.profile.username,\n name: cast.profile.name,\n source: FARCASTER_SOURCE,\n type: ChannelType.THREAD,\n channelId: conversationId,\n messageServerId: stringToUuid(cast.authorFid.toString()),\n worldId,\n metadata: {\n accountId: this.getAccountId(),\n ownership: { ownerId: cast.authorFid.toString() },\n farcaster: {\n accountId: this.getAccountId(),\n username: cast.profile.username,\n id: cast.authorFid.toString(),\n name: cast.profile.name,\n },\n },\n });\n }\n\n let text = cast.text;\n if (cast.media && cast.media.length > 0) {\n const attachmentTypes = cast.media.map((m) => m.source || \"attachment\").join(\", \");\n text = `${cast.text}\\n\\n(Attachments: ${cast.media.length} - ${attachmentTypes})`;\n }\n\n const memory: Memory = {\n id: memoryId,\n agentId: this.runtime.agentId,\n content: {\n text,\n inReplyTo: cast.inReplyTo?.hash\n ? castUuid({\n agentId: this.runtime.agentId,\n hash: cast.inReplyTo.hash,\n })\n : undefined,\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n channelType: ChannelType.THREAD,\n attachments: cast.media && cast.media.length > 0 ? cast.media : undefined,\n },\n entityId,\n roomId,\n createdAt: cast.timestamp.getTime(),\n metadata: {\n accountId: this.getAccountId(),\n },\n };\n\n return memory;\n });\n }\n\n private async buildThreadForCast(cast: Cast, skipMemoryId: Set<UUID>): Promise<Cast[]> {\n const thread: Cast[] = [];\n const visited: Set<string> = new Set();\n const client = this.client;\n const runtime = this.runtime;\n const self = this;\n\n async function processThread(currentCast: Cast): Promise<void> {\n const memoryId = castUuid({\n hash: currentCast.hash,\n agentId: runtime.agentId,\n });\n\n if (visited.has(currentCast.hash) || skipMemoryId.has(memoryId)) {\n return;\n }\n\n visited.add(currentCast.hash);\n\n const memory = await runtime.getMemoryById(memoryId);\n\n if (!memory) {\n runtime.logger.info({ hash: currentCast.hash }, \"Creating memory for cast\");\n const newMemory = await self.ensureCastConnection(currentCast);\n await runtime.createMemory(newMemory, \"messages\");\n runtime.emitEvent(\n FarcasterEventTypes.THREAD_CAST_CREATED as string,\n {\n runtime,\n memory: newMemory,\n cast: currentCast,\n source: FARCASTER_SOURCE,\n accountId: self.getAccountId(),\n } as EventPayload\n );\n }\n\n thread.unshift(currentCast);\n\n if (currentCast.inReplyTo) {\n const parentCast = await client.getCast(currentCast.inReplyTo.hash);\n await processThread(neynarCastToCast(parentCast));\n }\n }\n\n await processThread(cast);\n return thread;\n }\n\n private async handleMentionCast({\n agent,\n mention,\n cast,\n }: {\n agent: Profile;\n cast: NeynarCast;\n mention: Cast;\n }): Promise<void> {\n if (mention.profile.fid === agent.fid) {\n this.runtime.logger.info({ hash: mention.hash }, \"skipping cast from bot itself\");\n return;\n }\n\n const memory = await this.ensureCastConnection(mention);\n await this.buildThreadForCast(mention, memory.id ? new Set([memory.id]) : new Set());\n\n if (!memory.content.text || memory.content.text.trim() === \"\") {\n this.runtime.logger.info({ hash: mention.hash }, \"skipping cast with no text\");\n return;\n }\n\n const callback = standardCastHandlerCallback({\n client: this.client,\n runtime: this.runtime,\n config: this.config,\n roomId: memory.roomId,\n inReplyTo: {\n hash: mention.hash,\n fid: mention.authorFid,\n },\n });\n\n try {\n if (!this.runtime.messageService) {\n this.runtime.logger.warn(\n \"[Farcaster] messageService not available, skipping mention handling\"\n );\n return;\n }\n await this.runtime.messageService.handleMessage(this.runtime, memory, callback);\n } catch (error) {\n this.runtime.logger.error(\n {\n error: error instanceof Error ? error.message : String(error),\n castHash: mention.hash,\n },\n \"[Farcaster] Error processing mention\"\n );\n }\n\n const mentionPayload: FarcasterGenericCastPayload = {\n runtime: this.runtime,\n memory,\n cast,\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n callback,\n };\n this.runtime.emitEvent(FarcasterEventTypes.MENTION_RECEIVED, mentionPayload);\n }\n\n async start(): Promise<void> {\n this.runtime.logger.info(`Starting Farcaster interaction manager in ${this.mode} mode`);\n await this.source.start();\n }\n\n async stop(): Promise<void> {\n this.runtime.logger.info(\"Stopping Farcaster interaction manager\");\n await this.source.stop();\n }\n}\n",
|
|
24
21
|
"export class AsyncQueue {\n private queue: (() => Promise<void>)[] = [];\n private running = 0;\n private emptyListeners: (() => void)[] = [];\n private maxConcurrent: number;\n\n constructor(maxConcurrent: number = 1) {\n this.maxConcurrent = maxConcurrent;\n }\n\n async submit<T>(work: () => Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n this.queue.push(async () => {\n try {\n resolve(await work());\n } catch (err) {\n reject(err);\n }\n });\n void this.doNextWork();\n });\n }\n\n private async doNextWork(): Promise<void> {\n if (this.running >= this.maxConcurrent) {\n return;\n }\n\n const work = this.queue.shift();\n if (!work) {\n this.checkIfEmptyAndNotify();\n return;\n }\n\n this.running++;\n try {\n await work();\n } catch {\n } finally {\n this.running--;\n void this.doNextWork();\n }\n }\n\n async size(): Promise<number> {\n return this.queue.length;\n }\n\n async waitUntilFinished(): Promise<void> {\n return new Promise((resolve) => {\n if (this.queue.length === 0 && this.running === 0) {\n resolve();\n } else {\n this.emptyListeners.push(resolve);\n }\n });\n }\n\n private checkIfEmptyAndNotify(): void {\n if (this.queue.length === 0 && this.running === 0) {\n while (this.emptyListeners.length) {\n const listener = this.emptyListeners.shift();\n if (listener) listener();\n }\n }\n }\n}\n",
|
|
25
|
-
"import { type IAgentRuntime, type Media, ModelType } from \"@elizaos/core\";\nimport type { EmbedCast, EmbedUrl, Embed as NeynarEmbed } from \"@neynar/nodejs-sdk/build/api\";\n\nexport function isEmbedUrl(embed: NeynarEmbed): embed is EmbedUrl {\n return \"url\" in embed && typeof (embed as EmbedUrl).url === \"string\";\n}\n\nexport function isEmbedCast(embed: NeynarEmbed): embed is EmbedCast {\n return \"cast\" in embed && typeof (embed as EmbedCast).cast === \"object\";\n}\n\nfunction getMediaTypeFromUrl(\n url: string,\n contentType?: string | null\n): \"image\" | \"video\" | \"audio\" | \"webpage\" | \"unknown\" {\n const lowerUrl = url.toLowerCase();\n const lowerContentType = contentType?.toLowerCase() || \"\";\n\n if (lowerContentType.startsWith(\"image/\")) return \"image\";\n if (lowerContentType.startsWith(\"video/\")) return \"video\";\n if (lowerContentType.startsWith(\"audio/\")) return \"audio\";\n\n const imageExtensions = [\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".svg\", \".bmp\", \".ico\"];\n const videoExtensions = [\".mp4\", \".webm\", \".mov\", \".avi\", \".mkv\", \".m4v\"];\n const audioExtensions = [\".mp3\", \".wav\", \".ogg\", \".flac\", \".aac\", \".m4a\"];\n\n if (imageExtensions.some((ext) => lowerUrl.includes(ext))) return \"image\";\n if (videoExtensions.some((ext) => lowerUrl.includes(ext))) return \"video\";\n if (audioExtensions.some((ext) => lowerUrl.includes(ext))) return \"audio\";\n\n return \"webpage\";\n}\n\nexport interface ProcessedEmbed {\n id: string;\n url: string;\n type: \"image\" | \"video\" | \"audio\" | \"webpage\" | \"cast\" | \"frame\" | \"unknown\";\n title?: string;\n description?: string;\n text?: string;\n source: string;\n metadata?: {\n width?: number;\n height?: number;\n duration?: number;\n contentType?: string;\n castHash?: string;\n authorFid?: number;\n authorUsername?: string;\n };\n}\n\nexport class EmbedManager {\n private runtime: IAgentRuntime;\n private embedCache: Map<string, ProcessedEmbed> = new Map();\n\n constructor(runtime: IAgentRuntime) {\n this.runtime = runtime;\n }\n\n async processEmbeds(embeds: NeynarEmbed[]): Promise<Media[]> {\n if (embeds.length === 0) {\n return [];\n }\n\n this.runtime.logger.info(\n { embedCount: embeds.length },\n \"[EmbedManager] Processing embeds from cast\"\n );\n\n const processedMedia: Media[] = [];\n\n for (const embed of embeds) {\n try {\n const processed = await this.processEmbed(embed);\n if (processed) {\n processedMedia.push(this.toMedia(processed));\n }\n } catch (error) {\n this.runtime.logger.warn(\n { error: error instanceof Error ? error.message : String(error) },\n \"[EmbedManager] Failed to process embed\"\n );\n }\n }\n\n this.runtime.logger.info(\n {\n processedCount: processedMedia.length,\n types: processedMedia.map((m) => m.source),\n },\n \"[EmbedManager] Finished processing embeds\"\n );\n\n return processedMedia;\n }\n\n async processEmbed(embed: NeynarEmbed): Promise<ProcessedEmbed | null> {\n if (isEmbedUrl(embed)) {\n return this.processUrlEmbed(embed);\n } else if (isEmbedCast(embed)) {\n return this.processCastEmbed(embed);\n }\n\n this.runtime.logger.debug(\"[EmbedManager] Unknown embed type\");\n return null;\n }\n\n private async processUrlEmbed(embed: EmbedUrl): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const embedId = `embed-${this.hashUrl(url)}`;\n\n const cached = this.embedCache.get(embedId);\n if (cached) {\n return cached;\n }\n\n const contentType = metadata?.content_type;\n const mediaType = getMediaTypeFromUrl(url, contentType);\n\n if (metadata?.frame) {\n return this.processFrameEmbed(embed, embedId);\n }\n\n let processed: ProcessedEmbed;\n\n switch (mediaType) {\n case \"image\":\n processed = await this.processImageEmbed(embed, embedId);\n break;\n case \"video\":\n processed = await this.processVideoEmbed(embed, embedId);\n break;\n case \"audio\":\n processed = await this.processAudioEmbed(embed, embedId);\n break;\n default:\n processed = await this.processWebpageEmbed(embed, embedId);\n }\n\n this.embedCache.set(embedId, processed);\n return processed;\n }\n\n private async processImageEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n let description = \"An image attachment\";\n let title = \"Image\";\n\n try {\n const result = await this.runtime.useModel(ModelType.IMAGE_DESCRIPTION, {\n prompt:\n \"Analyze this image and provide a concise title and description. Focus on the main subject and any notable details.\",\n imageUrl: url,\n });\n\n if (result && typeof result === \"object\") {\n const typedResult = result as { title?: string; description?: string };\n description = typedResult.description || description;\n title = typedResult.title || title;\n } else if (typeof result === \"string\") {\n description = result;\n }\n\n this.runtime.logger.info(\n {\n url: `${url.substring(0, 60)}...`,\n descriptionLength: description.length,\n title,\n },\n \"[EmbedManager] Processed image with vision model\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n { url, error: error instanceof Error ? error.message : String(error) },\n \"[EmbedManager] Failed to describe image, using fallback\"\n );\n }\n\n return {\n id: embedId,\n url,\n type: \"image\",\n title,\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n width: metadata?.image?.width_px,\n height: metadata?.image?.height_px,\n contentType: metadata?.content_type || \"image/*\",\n },\n };\n }\n\n private async processVideoEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n const description = metadata?.video?.duration_s\n ? `Video (${Math.round(metadata.video.duration_s)}s)`\n : \"Video attachment\";\n\n return {\n id: embedId,\n url,\n type: \"video\",\n title: \"Video\",\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n duration: metadata?.video?.duration_s,\n contentType: metadata?.content_type || \"video/*\",\n },\n };\n }\n\n private async processAudioEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n const description = \"Audio attachment\";\n\n return {\n id: embedId,\n url,\n type: \"audio\",\n title: \"Audio\",\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n contentType: metadata?.content_type || \"audio/*\",\n },\n };\n }\n\n private async processWebpageEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const html = metadata?.html;\n\n const title = html?.ogTitle || html?.ogSiteName || \"Web Page\";\n const hostnameMatch = url.match(/^(?:https?:\\/\\/)?([^/?#]+)/);\n const hostname = hostnameMatch ? hostnameMatch[1] : url;\n const description = html?.ogDescription || `Link to ${hostname}`;\n\n return {\n id: embedId,\n url,\n type: \"webpage\",\n title,\n description,\n text: `${title}: ${description}`,\n source: \"Web\",\n metadata: {\n contentType: \"text/html\",\n },\n };\n }\n\n private async processFrameEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const frame = metadata?.frame;\n\n const title = frame?.title || \"Farcaster Frame\";\n const description = `Interactive Frame: ${title}`;\n\n return {\n id: embedId,\n url,\n type: \"frame\",\n title,\n description,\n text: description,\n source: \"Frame\",\n metadata: {\n contentType: \"application/x-farcaster-frame\",\n },\n };\n }\n\n private async processCastEmbed(embed: EmbedCast): Promise<ProcessedEmbed> {\n const cast = embed.cast;\n const embedId = `cast-${cast.hash}`;\n\n const cached = this.embedCache.get(embedId);\n if (cached) {\n return cached;\n }\n\n const authorUsername = cast.author?.username || \"unknown\";\n const title = `Quoted cast from @${authorUsername}`;\n const description = cast.text || \"\";\n\n const processed: ProcessedEmbed = {\n id: embedId,\n url: `https://warpcast.com/${authorUsername}/${cast.hash.slice(0, 10)}`,\n type: \"cast\",\n title,\n description,\n text: `[Quote from @${authorUsername}]: ${description}`,\n source: \"Farcaster\",\n metadata: {\n castHash: cast.hash,\n authorFid: cast.author?.fid,\n authorUsername,\n },\n };\n\n this.embedCache.set(embedId, processed);\n return processed;\n }\n\n private toMedia(embed: ProcessedEmbed): Media {\n return {\n id: embed.id,\n url: embed.url,\n title: embed.title || embed.type,\n source: embed.source,\n description: embed.description,\n text: embed.text,\n };\n }\n\n private hashUrl(url: string): string {\n let hash = 0;\n for (let i = 0; i < url.length; i++) {\n const char = url.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n }\n\n clearCache(): void {\n this.embedCache.clear();\n }\n}\n",
|
|
22
|
+
"import { type IAgentRuntime, type Media, ModelType, withStandaloneTrajectory } from \"@elizaos/core\";\nimport type { EmbedCast, EmbedUrl, Embed as NeynarEmbed } from \"@neynar/nodejs-sdk/build/api\";\n\nexport function isEmbedUrl(embed: EmbedCast | EmbedUrl): embed is EmbedUrl {\n return \"url\" in embed;\n}\n\nexport function isEmbedCast(embed: EmbedCast | EmbedUrl): embed is EmbedCast {\n return \"cast\" in embed;\n}\n\nfunction getMediaTypeFromUrl(\n url: string,\n contentType?: string | null\n): \"image\" | \"video\" | \"audio\" | \"webpage\" | \"unknown\" {\n const lowerUrl = url.toLowerCase();\n const lowerContentType = contentType?.toLowerCase() || \"\";\n\n if (lowerContentType.startsWith(\"image/\")) return \"image\";\n if (lowerContentType.startsWith(\"video/\")) return \"video\";\n if (lowerContentType.startsWith(\"audio/\")) return \"audio\";\n\n const imageExtensions = [\".jpg\", \".jpeg\", \".png\", \".gif\", \".webp\", \".svg\", \".bmp\", \".ico\"];\n const videoExtensions = [\".mp4\", \".webm\", \".mov\", \".avi\", \".mkv\", \".m4v\"];\n const audioExtensions = [\".mp3\", \".wav\", \".ogg\", \".flac\", \".aac\", \".m4a\"];\n\n if (imageExtensions.some((ext) => lowerUrl.includes(ext))) return \"image\";\n if (videoExtensions.some((ext) => lowerUrl.includes(ext))) return \"video\";\n if (audioExtensions.some((ext) => lowerUrl.includes(ext))) return \"audio\";\n\n return \"webpage\";\n}\n\nexport interface ProcessedEmbed {\n id: string;\n url: string;\n type: \"image\" | \"video\" | \"audio\" | \"webpage\" | \"cast\" | \"frame\" | \"unknown\";\n title?: string;\n description?: string;\n text?: string;\n source: string;\n metadata?: {\n width?: number;\n height?: number;\n duration?: number;\n contentType?: string;\n castHash?: string;\n authorFid?: number;\n authorUsername?: string;\n };\n}\n\nexport class EmbedManager {\n private runtime: IAgentRuntime;\n private embedCache: Map<string, ProcessedEmbed> = new Map();\n\n constructor(runtime: IAgentRuntime) {\n this.runtime = runtime;\n }\n\n async processEmbeds(embeds: NeynarEmbed[]): Promise<Media[]> {\n if (embeds.length === 0) {\n return [];\n }\n\n this.runtime.logger.info(\n { embedCount: embeds.length },\n \"[EmbedManager] Processing embeds from cast\"\n );\n\n const processedMedia: Media[] = [];\n\n for (const embed of embeds) {\n try {\n const processed = await this.processEmbed(embed);\n if (processed) {\n processedMedia.push(this.toMedia(processed));\n }\n } catch (error) {\n this.runtime.logger.warn(\n { error: error instanceof Error ? error.message : String(error) },\n \"[EmbedManager] Failed to process embed\"\n );\n }\n }\n\n this.runtime.logger.info(\n {\n processedCount: processedMedia.length,\n types: processedMedia.map((m) => m.source),\n },\n \"[EmbedManager] Finished processing embeds\"\n );\n\n return processedMedia;\n }\n\n async processEmbed(embed: NeynarEmbed): Promise<ProcessedEmbed | null> {\n if (isEmbedUrl(embed)) {\n return this.processUrlEmbed(embed);\n } else if (isEmbedCast(embed)) {\n return this.processCastEmbed(embed);\n }\n\n this.runtime.logger.debug(\"[EmbedManager] Unknown embed type\");\n return null;\n }\n\n private async processUrlEmbed(embed: EmbedUrl): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const embedId = `embed-${this.hashUrl(url)}`;\n\n const cached = this.embedCache.get(embedId);\n if (cached) {\n return cached;\n }\n\n const contentType = metadata?.content_type;\n const mediaType = getMediaTypeFromUrl(url, contentType);\n\n if (metadata?.frame) {\n return this.processFrameEmbed(embed, embedId);\n }\n\n let processed: ProcessedEmbed;\n\n switch (mediaType) {\n case \"image\":\n processed = await this.processImageEmbed(embed, embedId);\n break;\n case \"video\":\n processed = await this.processVideoEmbed(embed, embedId);\n break;\n case \"audio\":\n processed = await this.processAudioEmbed(embed, embedId);\n break;\n default:\n processed = await this.processWebpageEmbed(embed, embedId);\n }\n\n this.embedCache.set(embedId, processed);\n return processed;\n }\n\n private async processImageEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n let description = \"An image attachment\";\n let title = \"Image\";\n\n try {\n const result = await withStandaloneTrajectory(\n this.runtime,\n { source: \"farcaster-embed\" },\n async () =>\n this.runtime.useModel(ModelType.IMAGE_DESCRIPTION, {\n prompt:\n \"Analyze this image and provide a concise title and description. Focus on the main subject and any notable details.\",\n imageUrl: url,\n })\n );\n\n if (result && typeof result === \"object\") {\n const typedResult = result as { title?: string; description?: string };\n description = typedResult.description || description;\n title = typedResult.title || title;\n } else if (typeof result === \"string\") {\n description = result;\n }\n\n this.runtime.logger.info(\n {\n url: `${url.substring(0, 60)}...`,\n descriptionLength: description.length,\n title,\n },\n \"[EmbedManager] Processed image with vision model\"\n );\n } catch (error) {\n this.runtime.logger.warn(\n { url, error: error instanceof Error ? error.message : String(error) },\n \"[EmbedManager] Failed to describe image, using fallback\"\n );\n }\n\n return {\n id: embedId,\n url,\n type: \"image\",\n title,\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n width: metadata?.image?.width_px,\n height: metadata?.image?.height_px,\n contentType: metadata?.content_type || \"image/*\",\n },\n };\n }\n\n private async processVideoEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n const description = metadata?.video?.duration_s\n ? `Video (${Math.round(metadata.video.duration_s)}s)`\n : \"Video attachment\";\n\n return {\n id: embedId,\n url,\n type: \"video\",\n title: \"Video\",\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n duration: metadata?.video?.duration_s,\n contentType: metadata?.content_type || \"video/*\",\n },\n };\n }\n\n private async processAudioEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n\n const description = \"Audio attachment\";\n\n return {\n id: embedId,\n url,\n type: \"audio\",\n title: \"Audio\",\n description,\n text: description,\n source: \"Farcaster\",\n metadata: {\n contentType: metadata?.content_type || \"audio/*\",\n },\n };\n }\n\n private async processWebpageEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const html = metadata?.html;\n\n const title = html?.ogTitle || html?.ogSiteName || \"Web Page\";\n const hostnameMatch = url.match(/^(?:https?:\\/\\/)?([^/?#]+)/);\n const hostname = hostnameMatch ? hostnameMatch[1] : url;\n const description = html?.ogDescription || `Link to ${hostname}`;\n\n return {\n id: embedId,\n url,\n type: \"webpage\",\n title,\n description,\n text: `${title}: ${description}`,\n source: \"Web\",\n metadata: {\n contentType: \"text/html\",\n },\n };\n }\n\n private async processFrameEmbed(embed: EmbedUrl, embedId: string): Promise<ProcessedEmbed> {\n const { url, metadata } = embed;\n const frame = metadata?.frame;\n\n const title = frame?.title || \"Farcaster Frame\";\n const description = `Interactive Frame: ${title}`;\n\n return {\n id: embedId,\n url,\n type: \"frame\",\n title,\n description,\n text: description,\n source: \"Frame\",\n metadata: {\n contentType: \"application/x-farcaster-frame\",\n },\n };\n }\n\n private async processCastEmbed(embed: EmbedCast): Promise<ProcessedEmbed> {\n const cast = embed.cast;\n const embedId = `cast-${cast.hash}`;\n\n const cached = this.embedCache.get(embedId);\n if (cached) {\n return cached;\n }\n\n const authorUsername = cast.author?.username || \"unknown\";\n const title = `Quoted cast from @${authorUsername}`;\n const description = cast.text || \"\";\n\n const processed: ProcessedEmbed = {\n id: embedId,\n url: `https://warpcast.com/${authorUsername}/${cast.hash.slice(0, 10)}`,\n type: \"cast\",\n title,\n description,\n text: `[Quote from @${authorUsername}]: ${description}`,\n source: \"Farcaster\",\n metadata: {\n castHash: cast.hash,\n authorFid: cast.author?.fid,\n authorUsername,\n },\n };\n\n this.embedCache.set(embedId, processed);\n return processed;\n }\n\n private toMedia(embed: ProcessedEmbed): Media {\n return {\n id: embed.id,\n url: embed.url,\n title: embed.title || embed.type,\n source: embed.source,\n description: embed.description,\n text: embed.text,\n };\n }\n\n private hashUrl(url: string): string {\n let hash = 0;\n for (let i = 0; i < url.length; i++) {\n const char = url.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n }\n\n clearCache(): void {\n this.embedCache.clear();\n }\n}\n",
|
|
26
23
|
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport type { FarcasterConfig, NeynarWebhookData } from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport type { IInteractionProcessor } from \"./InteractionProcessor\";\n\ninterface FarcasterInteractionSourceParams {\n client: FarcasterClient;\n runtime: IAgentRuntime;\n config: FarcasterConfig;\n processor: IInteractionProcessor;\n}\n\nexport abstract class FarcasterInteractionSource {\n protected client: FarcasterClient;\n protected runtime: IAgentRuntime;\n protected config: FarcasterConfig;\n protected processor: IInteractionProcessor;\n protected isRunning: boolean = false;\n\n constructor(params: FarcasterInteractionSourceParams) {\n this.client = params.client;\n this.runtime = params.runtime;\n this.config = params.config;\n this.processor = params.processor;\n }\n\n abstract start(): Promise<void>;\n abstract stop(): Promise<void>;\n}\n\n/**\n * Polling-based interaction source.\n */\nexport class FarcasterPollingSource extends FarcasterInteractionSource {\n private timeout: ReturnType<typeof setTimeout> | undefined;\n\n async start(): Promise<void> {\n this.runtime.logger.info(\"Starting Farcaster polling mode\");\n if (this.isRunning) {\n return;\n }\n\n this.isRunning = true;\n void this.runPeriodically();\n }\n\n async stop(): Promise<void> {\n this.runtime.logger.info(\"Stopping Farcaster polling mode\");\n if (this.timeout) clearTimeout(this.timeout);\n this.isRunning = false;\n }\n\n private async runPeriodically(): Promise<void> {\n while (this.isRunning) {\n try {\n await this.pollForInteractions();\n\n const delay = this.config.FARCASTER_POLL_INTERVAL * 1000;\n await new Promise((resolve) => {\n this.timeout = setTimeout(resolve, delay);\n });\n } catch (error) {\n this.runtime.logger.error({ error }, \"[Farcaster] Error in polling:\");\n }\n }\n }\n\n private async pollForInteractions(): Promise<void> {\n const agentFid = this.config.FARCASTER_FID;\n const mentions = await this.client.getMentions({\n fid: agentFid,\n pageSize: 20,\n });\n\n for (const cast of mentions) {\n try {\n const mention = neynarCastToCast(cast);\n const memoryId = castUuid({\n agentId: this.runtime.agentId,\n hash: mention.hash,\n });\n\n if (await this.runtime.getMemoryById(memoryId)) {\n continue;\n }\n\n this.runtime.logger.info({ hash: mention.hash }, \"New Cast found\");\n\n if (mention.authorFid === agentFid) {\n const memory = await this.processor.ensureCastConnection(mention);\n await this.runtime.addEmbeddingToMemory(memory);\n await this.runtime.createMemory(memory, \"messages\");\n continue;\n }\n\n await this.processor.processMention(cast);\n } catch (error) {\n this.runtime.logger.error({ error }, \"[Farcaster] Error processing mention:\");\n }\n }\n }\n}\n\nexport class FarcasterWebhookSource extends FarcasterInteractionSource {\n async start(): Promise<void> {\n this.runtime.logger.info(\"Starting Farcaster webhook mode\");\n if (this.isRunning) {\n return;\n }\n\n this.isRunning = true;\n this.runtime.logger.info(\"Webhook source is active - waiting for webhook events\");\n }\n\n async stop(): Promise<void> {\n this.runtime.logger.info(\"Stopping Farcaster webhook mode\");\n this.isRunning = false;\n }\n\n async processWebhookData(webhookData: NeynarWebhookData): Promise<void> {\n if (!this.isRunning) {\n this.runtime.logger.warn(\"Webhook source is not running, ignoring webhook data\");\n return;\n }\n\n try {\n await this.processor.processWebhookData(webhookData);\n } catch (error) {\n this.runtime.logger.error({ error }, \"[Farcaster] Error processing webhook data:\");\n }\n }\n}\n\nexport function createFarcasterInteractionSource(\n params: FarcasterInteractionSourceParams\n): FarcasterInteractionSource {\n const mode = params.config.FARCASTER_MODE;\n\n switch (mode) {\n case \"webhook\":\n return new FarcasterWebhookSource(params);\n default:\n return new FarcasterPollingSource(params);\n }\n}\n",
|
|
27
|
-
"import { createUniqueUuid, type IAgentRuntime, ModelType, type UUID } from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport { type Cast, FARCASTER_SOURCE } from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport { getFarcasterFid } from \"../utils/config\";\n\ninterface FarcasterCast {\n id: string;\n agentId: UUID;\n roomId: UUID;\n userId: string;\n username: string;\n text: string;\n timestamp: number;\n inReplyTo?: string;\n media?: Array<Record<string, string | number | boolean>>;\n metadata?: Record<string, string | number | boolean>;\n}\n\nexport interface CastServiceInterface {\n getCasts(params: { agentId: UUID; limit?: number; cursor?: string }): Promise<FarcasterCast[]>;\n createCast(params: {\n agentId: UUID;\n roomId: UUID;\n text: string;\n media?: string[];\n replyTo?: { hash: string; fid: number };\n }): Promise<FarcasterCast>;\n deleteCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n likeCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n unlikeCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n recast(params: { agentId: UUID; castHash: string }): Promise<void>;\n unrecast(params: { agentId: UUID; castHash: string }): Promise<void>;\n getMentions(params: { agentId: UUID; limit?: number }): Promise<FarcasterCast[]>;\n}\n\nexport class FarcasterCastService implements CastServiceInterface {\n static serviceType = \"ICastService\";\n\n constructor(\n private client: FarcasterClient,\n private runtime: IAgentRuntime\n ) {}\n\n async getCasts(params: {\n agentId: UUID;\n limit?: number;\n cursor?: string;\n }): Promise<FarcasterCast[]> {\n try {\n const fid = getFarcasterFid(this.runtime);\n if (!fid) {\n this.runtime.logger.error(\"FARCASTER_FID is not configured\");\n return [];\n }\n\n const { timeline } = await this.client.getTimeline({\n fid,\n pageSize: params.limit || 50,\n });\n\n return timeline.map((cast) => this.castToFarcasterCast(cast, params.agentId));\n } catch (error) {\n this.runtime.logger.error(`Failed to get casts: ${JSON.stringify({ params, error })}`);\n return [];\n }\n }\n\n async createCast(params: {\n agentId: UUID;\n roomId: UUID;\n text: string;\n media?: string[];\n replyTo?: { hash: string; fid: number };\n }): Promise<FarcasterCast> {\n try {\n let castText = params.text;\n\n if (!castText || castText.trim() === \"\") {\n castText = await this.generateCastContent();\n }\n\n if (castText.length > 320) {\n castText = await this.truncateCast(castText);\n }\n\n const casts = await this.client.sendCast({\n content: { text: castText },\n inReplyTo: params.replyTo\n ? { hash: params.replyTo.hash, fid: params.replyTo.fid }\n : undefined,\n });\n\n if (casts.length === 0) {\n throw new Error(\"No cast was created\");\n }\n\n const cast = neynarCastToCast(casts[0]);\n const farcasterCast: FarcasterCast = {\n id: castUuid({ hash: cast.hash, agentId: params.agentId }),\n agentId: params.agentId,\n roomId: params.roomId,\n userId: cast.profile.fid.toString(),\n username: cast.profile.username,\n text: cast.text,\n timestamp: cast.timestamp.getTime(),\n inReplyTo: params.replyTo?.hash,\n media: [],\n metadata: {\n castHash: cast.hash,\n authorFid: cast.authorFid,\n source: FARCASTER_SOURCE,\n ...(cast.threadId ? { threadId: cast.threadId } : {}),\n },\n };\n\n await this.storeCastInMemory(params.roomId, farcasterCast);\n\n return farcasterCast;\n } catch (error) {\n this.runtime.logger.error(`Failed to create cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async deleteCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n this.runtime.logger.warn(\n `Cast deletion is not supported by the Farcaster API: ${JSON.stringify({ castHash: params.castHash })}`\n );\n }\n\n async likeCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.publishReaction({\n reactionType: \"like\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to like cast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Liked cast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to like cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async unlikeCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.deleteReaction({\n reactionType: \"like\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to unlike cast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Unliked cast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to unlike cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async recast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.publishReaction({\n reactionType: \"recast\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to recast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Recasted: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to recast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async unrecast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.deleteReaction({\n reactionType: \"recast\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to remove recast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Removed recast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to remove recast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async getMentions(params: { agentId: UUID; limit?: number }): Promise<FarcasterCast[]> {\n try {\n const fid = getFarcasterFid(this.runtime);\n if (!fid) {\n this.runtime.logger.error(\"FARCASTER_FID is not configured\");\n return [];\n }\n\n const mentions = await this.client.getMentions({\n fid,\n pageSize: params.limit || 20,\n });\n\n return mentions.map((castWithInteractions) => {\n const cast = neynarCastToCast(castWithInteractions);\n return this.castToFarcasterCast(cast, params.agentId);\n });\n } catch (error) {\n this.runtime.logger.error(`Failed to get mentions: ${JSON.stringify({ params, error })}`);\n return [];\n }\n }\n\n private async generateCastContent(): Promise<string> {\n const prompt = `Generate an interesting and engaging Farcaster cast. It should be conversational, authentic, and under 320 characters. Topics can include technology, AI, crypto, decentralized social media, or general observations about life.`;\n\n try {\n const response = await this.runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n maxTokens: 100,\n });\n\n return response as string;\n } catch (error) {\n this.runtime.logger.error(`Failed to generate cast content: ${JSON.stringify({ error })}`);\n return \"Hello Farcaster! 👋\";\n }\n }\n\n private async truncateCast(text: string): Promise<string> {\n const prompt = `Shorten this text to under 320 characters while keeping the main message intact: \"${text}\"`;\n\n try {\n const response = await this.runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n maxTokens: 100,\n });\n\n const truncated = response as string;\n\n if (truncated.length > 320) {\n return `${truncated.substring(0, 317)}...`;\n }\n\n return truncated;\n } catch (error) {\n this.runtime.logger.error(`Failed to truncate cast: ${JSON.stringify({ error })}`);\n return `${text.substring(0, 317)}...`;\n }\n }\n\n private async storeCastInMemory(roomId: UUID, cast: FarcasterCast): Promise<void> {\n try {\n const entityId = createUniqueUuid(this.runtime, cast.userId);\n const memory = {\n id: createUniqueUuid(this.runtime, cast.id),\n agentId: this.runtime.agentId,\n entityId,\n content: {\n text: cast.text,\n castHash: String(cast.metadata?.castHash || \"\"),\n castId: cast.id,\n author: cast.username,\n timestamp: cast.timestamp,\n },\n roomId,\n createdAt: Date.now(),\n };\n\n // Use the database adapter's createMemory method\n await this.runtime.createMemory(memory, \"farcaster_casts\");\n } catch (error) {\n this.runtime.logger.error(`Failed to store cast in memory: ${JSON.stringify({ error })}`);\n }\n }\n\n private castToFarcasterCast(cast: Cast, agentId: UUID): FarcasterCast {\n return {\n id: castUuid({ hash: cast.hash, agentId }),\n agentId,\n roomId: createUniqueUuid(this.runtime, cast.threadId || cast.hash),\n userId: cast.profile.fid.toString(),\n username: cast.profile.username,\n text: cast.text,\n timestamp: cast.timestamp.getTime(),\n media: [],\n metadata: {\n castHash: cast.hash,\n authorFid: cast.authorFid,\n source: FARCASTER_SOURCE,\n ...(cast.threadId ? { threadId: cast.threadId } : {}),\n ...(cast.stats\n ? {\n recasts: cast.stats.recasts,\n replies: cast.stats.replies,\n likes: cast.stats.likes,\n }\n : {}),\n },\n };\n }\n}\n",
|
|
28
|
-
"import { createUniqueUuid, type IAgentRuntime, type UUID } from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport { type Cast, FARCASTER_SOURCE, FarcasterEventTypes, FarcasterMessageType } from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport {
|
|
29
|
-
"import type
|
|
24
|
+
"import {\n ChannelType,\n type Content,\n createUniqueUuid,\n type IAgentRuntime,\n type Memory,\n ModelType,\n type UUID,\n} from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport { type Cast, FARCASTER_SOURCE } from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport {\n DEFAULT_FARCASTER_ACCOUNT_ID,\n getFarcasterFid,\n normalizeFarcasterAccountId,\n readFarcasterAccountId,\n} from \"../utils/config\";\n\ninterface FarcasterCast {\n id: string;\n agentId: UUID;\n roomId: UUID;\n userId: string;\n username: string;\n text: string;\n timestamp: number;\n inReplyTo?: string;\n media?: Array<Record<string, string | number | boolean>>;\n metadata?: Record<string, string | number | boolean>;\n}\n\ninterface PostConnectorQueryContext {\n runtime: IAgentRuntime;\n roomId?: UUID;\n source?: string;\n accountId?: string;\n target?: { entityId?: UUID | string; channelId?: string; threadId?: string };\n metadata?: Record<string, unknown>;\n}\n\nfunction clampLimit(value: number | undefined, fallback: number, max: number): number {\n if (!Number.isFinite(value)) {\n return fallback;\n }\n return Math.min(Math.max(1, Math.floor(value as number)), max);\n}\n\nfunction readContentString(content: Content, keys: string[]): string | undefined {\n const record = content as Content & Record<string, unknown>;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nexport interface CastServiceInterface {\n getCasts(params: { agentId: UUID; limit?: number; cursor?: string }): Promise<FarcasterCast[]>;\n createCast(params: {\n agentId: UUID;\n roomId: UUID;\n text: string;\n media?: string[];\n replyTo?: { hash: string; fid: number };\n }): Promise<FarcasterCast>;\n deleteCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n likeCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n unlikeCast(params: { agentId: UUID; castHash: string }): Promise<void>;\n recast(params: { agentId: UUID; castHash: string }): Promise<void>;\n unrecast(params: { agentId: UUID; castHash: string }): Promise<void>;\n getMentions(params: { agentId: UUID; limit?: number }): Promise<FarcasterCast[]>;\n}\n\nexport class FarcasterCastService implements CastServiceInterface {\n static serviceType = \"ICastService\";\n\n constructor(\n private client: FarcasterClient,\n private runtime: IAgentRuntime,\n private accountId: string = DEFAULT_FARCASTER_ACCOUNT_ID\n ) {}\n\n getAccountId(): string {\n return normalizeFarcasterAccountId(this.accountId);\n }\n\n async getCasts(params: {\n agentId: UUID;\n limit?: number;\n cursor?: string;\n }): Promise<FarcasterCast[]> {\n try {\n const fid = getFarcasterFid(this.runtime, this.getAccountId());\n if (!fid) {\n this.runtime.logger.error(\"FARCASTER_FID is not configured\");\n return [];\n }\n\n const { timeline } = await this.client.getTimeline({\n fid,\n pageSize: params.limit || 50,\n });\n\n return timeline.map((cast) => this.castToFarcasterCast(cast, params.agentId));\n } catch (error) {\n this.runtime.logger.error(`Failed to get casts: ${JSON.stringify({ params, error })}`);\n return [];\n }\n }\n\n async createCast(params: {\n agentId: UUID;\n roomId: UUID;\n text: string;\n media?: string[];\n replyTo?: { hash: string; fid: number };\n }): Promise<FarcasterCast> {\n try {\n let castText = params.text;\n\n if (!castText || castText.trim() === \"\") {\n castText = await this.generateCastContent();\n }\n\n if (castText.length > 320) {\n castText = await this.truncateCast(castText);\n }\n\n const casts = await this.client.sendCast({\n content: { text: castText },\n inReplyTo: params.replyTo\n ? { hash: params.replyTo.hash, fid: params.replyTo.fid }\n : undefined,\n });\n\n if (casts.length === 0) {\n throw new Error(\"No cast was created\");\n }\n\n const cast = neynarCastToCast(casts[0]);\n const farcasterCast: FarcasterCast = {\n id: castUuid({ hash: cast.hash, agentId: params.agentId }),\n agentId: params.agentId,\n roomId: params.roomId,\n userId: cast.profile.fid.toString(),\n username: cast.profile.username,\n text: cast.text,\n timestamp: cast.timestamp.getTime(),\n inReplyTo: params.replyTo?.hash,\n media: [],\n metadata: {\n accountId: this.getAccountId(),\n castHash: cast.hash,\n authorFid: cast.authorFid,\n source: FARCASTER_SOURCE,\n ...(cast.threadId ? { threadId: cast.threadId } : {}),\n },\n };\n\n await this.storeCastInMemory(params.roomId, farcasterCast);\n\n return farcasterCast;\n } catch (error) {\n this.runtime.logger.error(`Failed to create cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async handleSendPost(runtime: IAgentRuntime, content: Content): Promise<Memory> {\n const requestedAccountId = normalizeFarcasterAccountId(\n readFarcasterAccountId(content) ?? this.getAccountId()\n );\n if (requestedAccountId !== this.getAccountId()) {\n throw new Error(\n `Farcaster account '${requestedAccountId}' is not available in this service instance`\n );\n }\n\n const text = typeof content.text === \"string\" ? content.text.trim() : \"\";\n if (!text) {\n throw new Error(\"Farcaster post connector requires non-empty text content.\");\n }\n\n const parentHash = readContentString(content, [\"parentHash\", \"replyTo\", \"replyToHash\"]);\n const fid = getFarcasterFid(this.runtime, this.getAccountId());\n const cast = await this.createCast({\n agentId: runtime.agentId,\n roomId: createUniqueUuid(runtime, `farcaster:feed:${fid ?? runtime.agentId}`),\n text,\n ...(parentHash && fid ? { replyTo: { hash: parentHash, fid } } : {}),\n });\n\n return this.farcasterCastToMemory(runtime, cast);\n }\n\n async fetchFeed(\n context: PostConnectorQueryContext,\n params: {\n feed?: string;\n target?: PostConnectorQueryContext[\"target\"];\n limit?: number;\n cursor?: string;\n } = {}\n ): Promise<Memory[]> {\n const requestedAccountId = normalizeFarcasterAccountId(\n context.accountId ?? context.metadata?.accountId ?? this.getAccountId()\n );\n if (requestedAccountId !== this.getAccountId()) {\n throw new Error(\n `Farcaster account '${requestedAccountId}' is not available in this service instance`\n );\n }\n\n const casts = await this.getCasts({\n agentId: context.runtime.agentId,\n limit: clampLimit(params.limit, 25, 100),\n cursor: params.cursor,\n });\n return casts.map((cast) => this.farcasterCastToMemory(context.runtime, cast));\n }\n\n async searchPosts(\n context: PostConnectorQueryContext,\n params: { query: string; limit?: number; cursor?: string }\n ): Promise<Memory[]> {\n const requestedAccountId = normalizeFarcasterAccountId(\n context.accountId ?? context.metadata?.accountId ?? this.getAccountId()\n );\n if (requestedAccountId !== this.getAccountId()) {\n throw new Error(\n `Farcaster account '${requestedAccountId}' is not available in this service instance`\n );\n }\n\n const query = params.query.trim().toLowerCase();\n if (!query) {\n return [];\n }\n\n const limit = clampLimit(params.limit, 25, 100);\n const casts = await this.getCasts({\n agentId: context.runtime.agentId,\n limit: 100,\n cursor: params.cursor,\n });\n return casts\n .filter((cast) => {\n const text = cast.text.toLowerCase();\n const username = cast.username.toLowerCase();\n return text.includes(query) || username.includes(query);\n })\n .slice(0, limit)\n .map((cast) => this.farcasterCastToMemory(context.runtime, cast));\n }\n\n async deleteCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n this.runtime.logger.warn(\n `Cast deletion is not supported by the Farcaster API: ${JSON.stringify({ castHash: params.castHash })}`\n );\n }\n\n async likeCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.publishReaction({\n reactionType: \"like\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to like cast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Liked cast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to like cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async unlikeCast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.deleteReaction({\n reactionType: \"like\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to unlike cast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Unliked cast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to unlike cast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async recast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.publishReaction({\n reactionType: \"recast\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to recast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Recasted: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to recast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async unrecast(params: { agentId: UUID; castHash: string }): Promise<void> {\n try {\n const result = await this.client.deleteReaction({\n reactionType: \"recast\",\n target: params.castHash,\n });\n\n if (!result.success) {\n throw new Error(`Failed to remove recast: ${params.castHash}`);\n }\n\n this.runtime.logger.info(`Removed recast: ${params.castHash}`);\n } catch (error) {\n this.runtime.logger.error(`Failed to remove recast: ${JSON.stringify({ params, error })}`);\n throw error;\n }\n }\n\n async getMentions(params: { agentId: UUID; limit?: number }): Promise<FarcasterCast[]> {\n try {\n const fid = getFarcasterFid(this.runtime, this.getAccountId());\n if (!fid) {\n this.runtime.logger.error(\"FARCASTER_FID is not configured\");\n return [];\n }\n\n const mentions = await this.client.getMentions({\n fid,\n pageSize: params.limit || 20,\n });\n\n return mentions.map((castWithInteractions) => {\n const cast = neynarCastToCast(castWithInteractions);\n return this.castToFarcasterCast(cast, params.agentId);\n });\n } catch (error) {\n this.runtime.logger.error(`Failed to get mentions: ${JSON.stringify({ params, error })}`);\n return [];\n }\n }\n\n private async generateCastContent(): Promise<string> {\n const prompt = `Generate an interesting and engaging Farcaster cast. It should be conversational, authentic, and under 320 characters. Topics can include technology, AI, crypto, decentralized social media, or general observations about life.`;\n\n try {\n const response = await this.runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n maxTokens: 100,\n });\n\n return response as string;\n } catch (error) {\n this.runtime.logger.error(`Failed to generate cast content: ${JSON.stringify({ error })}`);\n return \"Hello Farcaster! 👋\";\n }\n }\n\n private async truncateCast(text: string): Promise<string> {\n const prompt = `Shorten this text to under 320 characters while keeping the main message intact: \"${text}\"`;\n\n try {\n const response = await this.runtime.useModel(ModelType.TEXT_SMALL, {\n prompt,\n maxTokens: 100,\n });\n\n const truncated = response as string;\n\n if (truncated.length > 320) {\n return `${truncated.substring(0, 317)}...`;\n }\n\n return truncated;\n } catch (error) {\n this.runtime.logger.error(`Failed to truncate cast: ${JSON.stringify({ error })}`);\n return `${text.substring(0, 317)}...`;\n }\n }\n\n private async storeCastInMemory(roomId: UUID, cast: FarcasterCast): Promise<void> {\n try {\n const entityId = createUniqueUuid(this.runtime, cast.userId);\n const memory = {\n id: createUniqueUuid(this.runtime, cast.id),\n agentId: this.runtime.agentId,\n entityId,\n content: {\n text: cast.text,\n castHash: String(cast.metadata?.castHash || \"\"),\n castId: cast.id,\n author: cast.username,\n timestamp: cast.timestamp,\n accountId: this.getAccountId(),\n },\n metadata: {\n accountId: this.getAccountId(),\n },\n roomId,\n createdAt: Date.now(),\n };\n\n // Use the database adapter's createMemory method\n await this.runtime.createMemory(memory, \"farcaster_casts\");\n } catch (error) {\n this.runtime.logger.error(`Failed to store cast in memory: ${JSON.stringify({ error })}`);\n }\n }\n\n private farcasterCastToMemory(runtime: IAgentRuntime, cast: FarcasterCast): Memory {\n const authorId = cast.userId || \"unknown\";\n const entityId =\n authorId === runtime.agentId\n ? runtime.agentId\n : createUniqueUuid(runtime, `farcaster:user:${authorId}`);\n const roomId = cast.roomId || createUniqueUuid(runtime, `farcaster:feed:${authorId}`);\n const castHash = typeof cast.metadata?.castHash === \"string\" ? cast.metadata.castHash : cast.id;\n\n return {\n id: createUniqueUuid(runtime, `farcaster:cast:${castHash}`),\n agentId: runtime.agentId,\n entityId,\n roomId,\n createdAt: cast.timestamp || Date.now(),\n content: {\n text: cast.text,\n source: FARCASTER_SOURCE,\n channelType: ChannelType.FEED,\n ...(cast.inReplyTo\n ? { inReplyTo: createUniqueUuid(runtime, `farcaster:cast:${cast.inReplyTo}`) }\n : {}),\n },\n metadata: {\n type: \"message\",\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n provider: FARCASTER_SOURCE,\n timestamp: cast.timestamp,\n fromBot: entityId === runtime.agentId,\n messageIdFull: castHash,\n chatType: ChannelType.FEED,\n sender: {\n id: authorId,\n username: cast.username,\n },\n farcaster: {\n accountId: this.getAccountId(),\n castId: cast.id,\n castHash,\n authorFid: cast.metadata?.authorFid,\n username: cast.username,\n inReplyTo: cast.inReplyTo,\n metrics: {\n recasts: cast.metadata?.recasts,\n replies: cast.metadata?.replies,\n likes: cast.metadata?.likes,\n },\n ...(cast.metadata ?? {}),\n },\n } as Memory[\"metadata\"],\n };\n }\n\n private castToFarcasterCast(cast: Cast, agentId: UUID): FarcasterCast {\n return {\n id: castUuid({ hash: cast.hash, agentId }),\n agentId,\n roomId: createUniqueUuid(this.runtime, cast.threadId || cast.hash),\n userId: cast.profile.fid.toString(),\n username: cast.profile.username,\n text: cast.text,\n timestamp: cast.timestamp.getTime(),\n media: [],\n metadata: {\n castHash: cast.hash,\n authorFid: cast.authorFid,\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n ...(cast.threadId ? { threadId: cast.threadId } : {}),\n ...(cast.stats\n ? {\n recasts: cast.stats.recasts,\n replies: cast.stats.replies,\n likes: cast.stats.likes,\n }\n : {}),\n },\n };\n }\n}\n",
|
|
25
|
+
"import { createUniqueUuid, type IAgentRuntime, type UUID } from \"@elizaos/core\";\nimport type { FarcasterClient } from \"../client/FarcasterClient\";\nimport { type Cast, FARCASTER_SOURCE, FarcasterEventTypes, FarcasterMessageType } from \"../types\";\nimport { castUuid, neynarCastToCast } from \"../utils\";\nimport {\n DEFAULT_FARCASTER_ACCOUNT_ID,\n getFarcasterFid,\n normalizeFarcasterAccountId,\n readFarcasterAccountId,\n} from \"../utils/config\";\n\ntype MessageMetadata = Record<string, string | number | boolean | null | undefined>;\n\ninterface Message {\n id: string;\n agentId: UUID;\n roomId: string;\n userId: string;\n username: string;\n text: string;\n type: FarcasterMessageType;\n timestamp: number;\n inReplyTo?: string;\n metadata?: MessageMetadata;\n}\n\ninterface GetMessagesOptions {\n agentId: UUID;\n roomId?: string;\n limit?: number;\n}\n\ninterface SendMessageOptions {\n agentId: UUID;\n roomId: string;\n text: string;\n type: string;\n accountId?: string;\n replyToId?: string;\n metadata?: MessageMetadata;\n}\n\ninterface IMessageService {\n getMessages(options: GetMessagesOptions): Promise<Message[]>;\n sendMessage(options: SendMessageOptions): Promise<Message>;\n getMessage(messageId: string, agentId: UUID): Promise<Message | null>;\n}\n\nexport class FarcasterMessageService implements IMessageService {\n constructor(\n private client: FarcasterClient,\n private runtime: IAgentRuntime,\n private accountId: string = DEFAULT_FARCASTER_ACCOUNT_ID\n ) {}\n\n getAccountId(): string {\n return normalizeFarcasterAccountId(this.accountId);\n }\n\n private castToMessage(cast: Cast, agentId: UUID, extraMetadata?: MessageMetadata): Message {\n return {\n id: castUuid({ hash: cast.hash, agentId }),\n agentId,\n roomId: createUniqueUuid(this.runtime, cast.threadId || cast.hash),\n userId: cast.profile.fid.toString(),\n username: cast.profile.username,\n text: cast.text,\n type: cast.inReplyTo ? FarcasterMessageType.REPLY : FarcasterMessageType.CAST,\n timestamp: cast.timestamp.getTime(),\n inReplyTo: cast.inReplyTo ? castUuid({ hash: cast.inReplyTo.hash, agentId }) : undefined,\n metadata: {\n source: FARCASTER_SOURCE,\n accountId: this.getAccountId(),\n castHash: cast.hash,\n threadId: cast.threadId,\n authorFid: cast.authorFid,\n ...(extraMetadata || {}),\n },\n };\n }\n\n async getMessages(options: GetMessagesOptions): Promise<Message[]> {\n try {\n const { agentId, roomId, limit = 20 } = options;\n\n const fid = getFarcasterFid(this.runtime, this.getAccountId());\n if (!fid) {\n this.runtime.logger.error(\"[Farcaster] FARCASTER_FID is not configured\");\n return [];\n }\n\n const { timeline } = await this.client.getTimeline({\n fid,\n pageSize: limit,\n });\n\n const messages: Message[] = timeline\n .map((cast) => this.castToMessage(cast, agentId))\n .filter((message) => {\n if (roomId) {\n return message.roomId === roomId;\n }\n return true;\n });\n\n return messages;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.runtime.logger.error(err, \"[Farcaster] Error fetching messages\");\n return [];\n }\n }\n\n async sendMessage(options: SendMessageOptions): Promise<Message> {\n try {\n const requestedAccountId = normalizeFarcasterAccountId(\n options.accountId ?? readFarcasterAccountId(options.metadata) ?? this.getAccountId()\n );\n if (requestedAccountId !== this.getAccountId()) {\n throw new Error(\n `Farcaster account '${requestedAccountId}' is not available in this service instance`\n );\n }\n\n const { text, type, roomId, replyToId, agentId } = options;\n\n let inReplyTo: { hash: string; fid: number } | undefined;\n if (replyToId && type === FarcasterMessageType.REPLY) {\n const parentHash =\n typeof options.metadata?.parentHash === \"string\"\n ? options.metadata.parentHash\n : replyToId;\n const fid = getFarcasterFid(this.runtime, this.getAccountId());\n if (!fid) {\n throw new Error(\"FARCASTER_FID is not configured\");\n }\n inReplyTo = {\n hash: parentHash,\n fid,\n };\n }\n\n const casts = await this.client.sendCast({\n content: { text },\n inReplyTo,\n });\n\n if (casts.length === 0) {\n throw new Error(\"No cast was created\");\n }\n\n const cast = neynarCastToCast(casts[0]);\n const message = this.castToMessage(cast, agentId, options.metadata);\n message.roomId = roomId;\n message.type = type as FarcasterMessageType;\n\n const postGeneratedPayload = {\n runtime: this.runtime,\n source: FARCASTER_SOURCE,\n castHash: cast.hash,\n ...(cast.threadId ? { threadId: cast.threadId } : {}),\n messageId: message.id,\n roomId,\n accountId: this.getAccountId(),\n };\n await this.runtime.emitEvent(\n FarcasterEventTypes.POST_GENERATED as string,\n postGeneratedPayload\n );\n\n return message;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.runtime.logger.error(err, \"[Farcaster] Error sending message\");\n throw err;\n }\n }\n\n async deleteMessage(_messageId: string, _agentId: UUID): Promise<void> {\n this.runtime.logger.warn(\"[Farcaster] Cast deletion is not supported by the Farcaster API\");\n }\n\n async getMessage(messageId: string, agentId: UUID): Promise<Message | null> {\n try {\n const castHash = messageId;\n\n const cast = await this.client.getCast(castHash);\n const farcasterCast = neynarCastToCast(cast);\n\n return this.castToMessage(farcasterCast, agentId);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.runtime.logger.error(err, \"[Farcaster] Error fetching message\");\n return null;\n }\n }\n\n async getThread(params: { agentId: UUID; castHash: string }): Promise<Message[]> {\n try {\n const thread: Message[] = [];\n const visited = new Set<string>();\n let currentHash: string | undefined = params.castHash;\n\n while (currentHash) {\n if (visited.has(currentHash)) {\n break;\n }\n visited.add(currentHash);\n\n const cast = neynarCastToCast(await this.client.getCast(currentHash));\n thread.unshift(this.castToMessage(cast, params.agentId));\n\n currentHash = cast.inReplyTo?.hash;\n }\n\n return thread;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.runtime.logger.error(err, \"[Farcaster] Error fetching thread\");\n return [];\n }\n }\n\n async markAsRead(_messageIds: string[], _agentId: UUID): Promise<void> {\n this.runtime.logger.debug(\"[Farcaster] Mark as read is not applicable for Farcaster casts\");\n }\n}\n",
|
|
26
|
+
"import { type IAgentRuntime, Service } from '@elizaos/core';\n\n// Inlined to avoid adding @elizaos/plugin-workflow as a compile-time dependency.\n// The runtime duck-types the service — only the serviceType string and resolve() shape matter.\nconst WORKFLOW_CREDENTIAL_PROVIDER_TYPE = 'workflow_credential_provider';\ntype CredentialProviderResult =\n | { status: 'credential_data'; data: Record<string, unknown> }\n | { status: 'needs_auth'; authUrl: string }\n | null;\n\n// Farcaster uses the Neynar API (api-key header). No dedicated workflow node; use HTTP Request node.\nconst SUPPORTED = ['httpHeaderAuth'];\n\nexport class FarcasterWorkflowCredentialProvider extends Service {\n static override readonly serviceType = WORKFLOW_CREDENTIAL_PROVIDER_TYPE;\n override capabilityDescription =\n 'Supplies Farcaster (Neynar API) credentials to the workflow plugin.';\n\n static async start(runtime: IAgentRuntime): Promise<FarcasterWorkflowCredentialProvider> {\n return new FarcasterWorkflowCredentialProvider(runtime);\n }\n\n async stop(): Promise<void> {}\n\n async resolve(_userId: string, credType: string): Promise<CredentialProviderResult> {\n if (credType !== 'httpHeaderAuth') return null;\n const neynarApiKey = this.runtime.getSetting('FARCASTER_NEYNAR_API_KEY') as string | undefined;\n if (!neynarApiKey?.trim()) return null;\n return {\n status: 'credential_data',\n data: { name: 'api_key', value: neynarApiKey.trim() },\n };\n }\n\n checkCredentialTypes(credTypes: string[]): { supported: string[]; unsupported: string[] } {\n return {\n supported: credTypes.filter((t) => SUPPORTED.includes(t)),\n unsupported: credTypes.filter((t) => !SUPPORTED.includes(t)),\n };\n }\n}\n"
|
|
30
27
|
],
|
|
31
|
-
"mappings": "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",
|
|
32
|
-
"debugId": "
|
|
28
|
+
"mappings": "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",
|
|
29
|
+
"debugId": "8F6A0088AE903E9C64756E2164756E21",
|
|
33
30
|
"names": []
|
|
34
31
|
}
|