Skip to content

[BUG] Web SDK First Message Failure in Fresh Browser Session (errCode=10006) #1093

@canxiusi

Description

@canxiusi

OpenIM SDK Version

@openim/client-sdk@3.8.3

OpenIM Server Version

No response

SDK Platform

Web WASM SDK

Device Model

MacBook Pro (Apple Silicon)

Operating System Version

macOS 15.x

Bug Description and Steps to Reproduce

Web SDK First Message Failure in Fresh Browser Session (errCode=10006)

Summary

In a fresh browser session (new browser profile / incognito), the first message send may fail in OpenIM Web SDK with:

  • errCode: 10006
  • errMsg: Cannot read properties of undefined (reading 'si_<recvID>_<userID>')

App-side symptom: message send fails with a generic "unknown error".


Environment

  • SDK: @openim/client-sdk@3.8.3
  • Runtime: Browser (Vite dev environment)
  • Scenario: First login + first send in a fresh browser session

Reproduction Steps

  1. Open app in a fresh browser profile (or incognito window).
  2. Login with a valid user token and wait for SDK connect/sync events.
  3. Open a single-chat conversation page.
  4. Send the first text message.

Actual Result

First send fails with SDK internal error:

(event) GetOneConversation error:
Cannot read properties of undefined (reading 'si_<target>_<user>')
errCode: 10006

(event) SendMessage error:
Cannot read properties of undefined (reading 'si_<target>_<user>')
errCode: 10006

Expected Result

The first message in a fresh session should be sent successfully without requiring manual refresh or retries.


Logs (Key Snippets)

SDK => (invoked) run getOneConversation ...
SDK => (response) run getOneConversation with error {
  "event":"GetOneConversation",
  "errCode":10006,
  "errMsg":"Cannot read properties of undefined (reading 'si_...')"
}

SDK => (invoked) run sendMessage ...
SDK => (response) run sendMessage with error {
  "event":"SendMessage",
  "errCode":10006,
  "errMsg":"Cannot read properties of undefined (reading 'si_...')"
}

Suspected Root Cause

From Web SDK runtime behavior:

  1. In empty-conversation startup path, cachedHasReadAndMaxSeqs may become undefined.
  2. Later reads like cachedHasReadAndMaxSeqs[conversationID] hit undefined['si_*'].
  3. sendMessage/sendMessageNotOss pre-send depends on getOneConversationAndTryChange; when this fails with 10006, send flow aborts instead of degrading to init-and-send path.

Local Patch (Validated)

The following local patch consistently fixed the issue in repeated fresh-session tests:

  1. Defensive fallback for seq cache

    • cachedHasReadAndMaxSeqs = seqs || {}
    • getter fallback: cachedHasReadAndMaxSeqs || (cachedHasReadAndMaxSeqs = {})
  2. Degrade in pre-send conversation fetch

    • In sendMessage/sendMessageNotOss, do not abort sending when pre-send getOneConversationAndTryChange(...) fails in cold-start edge case.

After patch:

  • First send succeeds in fresh browser session
  • No si_* undefined error chain
  • No app-level generic send failure

Notes

I can provide a clean PR against upstream if maintainers agree with this fix direction.

Screenshots Link

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugCategorizes issue or PR as related to a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions