@@ -155,45 +155,42 @@ class Farcaster {
155155 } ) ;
156156 }
157157
158- async getMessages ( conversationId , cursor = null ) {
159- try {
160- const allMessages = [ ] ;
161- const messageIds = new Set ( ) ;
162- let currentCursor = cursor ;
163- let iterationCount = 0 ;
164- const maxIterations = 5 ;
165-
166- while ( iterationCount < maxIterations ) {
167- let endpoint = `/direct-cast-conversation-messages?conversationId=${ conversationId } &limit=100` ;
168- if ( currentCursor ) {
169- endpoint += `&cursor=${ currentCursor } ` ;
170- }
158+ async getMessages ( conversationId ) {
159+ const messages = await this . fetchMessages ( conversationId ) ;
160+ return messages . map ( message => formatMessage ( message ) ) . filter ( Boolean ) ;
161+ }
171162
172- console . log ( "getting messages" , endpoint ) ;
163+ async fetchMessages ( conversationId , cursor = null , collectedMessages = [ ] , seenMessageIds = new Set ( ) , attempts = 0 ) {
164+ const maxAttempts = 5 ;
165+ if ( attempts >= maxAttempts ) {
166+ return collectedMessages . reverse ( ) ;
167+ }
173168
174- const response = await this . #makeApiCall( endpoint , 'GET' ) ;
169+ const endpoint = cursor
170+ ? `/direct-cast-conversation-messages?conversationId=${ conversationId } &limit=100&cursor=${ cursor } `
171+ : `/direct-cast-conversation-messages?conversationId=${ conversationId } &limit=100` ;
175172
176- const messages = response . result . messages ? response . result . messages . map ( message => formatMessage ( message ) ) . filter ( Boolean ) : [ ] ;
177-
178- messages . forEach ( message => {
179- if ( ! messageIds . has ( message . messageId ) ) {
180- allMessages . push ( message ) ;
181- messageIds . add ( message . messageId ) ;
182- }
183- } ) ;
173+ console . log ( "Fetching messages from" , endpoint ) ;
174+
175+ try {
176+ const response = await this . #makeApiCall( endpoint , 'GET' ) ;
177+ const messages = response . result . messages || [ ] ;
184178
185- if ( ! response . next || ! response . next . cursor ) {
186- console . log ( "no more messages" ) ;
187- break ;
179+ messages . forEach ( msg => {
180+ if ( ! seenMessageIds . has ( msg . messageId ) ) {
181+ collectedMessages . push ( msg ) ;
182+ seenMessageIds . add ( msg . messageId ) ;
188183 }
189-
190- currentCursor = response . next . cursor ;
191- iterationCount ++ ;
192- }
184+ } ) ;
193185
194- return allMessages . reverse ( ) ;
186+ if ( response . next && response . next . cursor ) {
187+ return this . getMessages ( conversationId , response . next . cursor , collectedMessages , seenMessageIds , attempts + 1 ) ;
188+ } else {
189+ console . log ( "No more messages to fetch" ) ;
190+ return collectedMessages . reverse ( ) ;
191+ }
195192 } catch ( error ) {
196- console . error ( 'Error fetching messages:' , error ) ;
193+ console . error ( 'Failed to fetch messages:' , error ) ;
197194 throw error ;
198195 }
199196 }
0 commit comments