async onmessage()

in example-apps/chatbot-rag-app/frontend/src/store/provider.tsx [183:245]


          async onmessage(event) {
            if (event.event === 'FatalError') {
              throw new FatalError(event.data)
            }

            if (event.data.startsWith(STREAMING_EVENTS.SESSION_ID)) {
              const sessionId = event.data.split(' ')[1].trim()
              dispatch(actions.setSessionId({ sessionId }))
            } else if (event.data.startsWith(STREAMING_EVENTS.SOURCE)) {
              const source = event.data.replace(
                `${STREAMING_EVENTS.SOURCE} `,
                ''
              )

              try {
                if (source) {
                  const parsedSource: {
                    name: string
                    page_content: string
                    url?: string
                    category?: string
                    updated_at?: string | null
                  } = JSON.parse(source.replaceAll('\n', ''))

                  if (parsedSource.page_content && parsedSource.name) {
                    dispatch(
                      actions.addSource({
                        source: {
                          name: parsedSource.name,
                          url: parsedSource.url,
                          summary: parsedSource.page_content,
                          icon: parsedSource.category,
                          updated_at: parsedSource.updated_at,
                        },
                      })
                    )
                  }
                }
              } catch (e) {
                console.log('error', source, event.data)
                console.error(e)
              }
            } else if (event.data === STREAMING_EVENTS.DONE) {
              const sources = parseSources(message)
              dispatch(
                actions.setMessageSource({
                  id: conversationId,
                  sources,
                })
              )
        
              dispatch(actions.setStatus({ status: AppStatus.Done }))
            } else {
              message += event.data

              dispatch(
                actions.updateMessage({
                  id: conversationId,
                  content: message.replace(/SOURCES:(.+)*/, ''),
                })
              )
            }
          },