现象一:Profile 组件(好友/陌生人资料页)在 getConversationContext 回来后只合并了 relationship 字段,没有一并合并 capabilities——这个组件判断"能否显示添加好友按钮" 用的是 profile.capabilities.can_add_friend,不是 relationship 本身。已实测复现: 刚发送好友申请、relationship 已经变成 pending_outbound 时,若走的是"直接刷新这个 资料页"而不是 Verification 组件自己的发送成功回调(该回调已由另一处提交单独修复), canAdd 依然读到发送前搜索结果种子里的 can_add_friend:true,"添加好友"按钮继续可点, 可再次触发一次好友申请(配合后端不去重的缺口——新增44)。 现象二:Verification 组件(好友验证/发送申请页)完全没有用 getConversationContext 校正过 relationship,只依赖 getUserProfile——但该接口对非好友直接 403,403 时的 catch 分支什么都不做。真实复现:本次会话内先成为好友、再解除好友关系后,若该好友的 profile-seed 缓存还留着"好友"时期的旧数据,重新打开验证页会一直显示"你们已经是 好友了",且不提供发送框,除非整页刷新清掉内存缓存,否则无法向这个人重新发起好友申请。 修复:两处都在 getConversationContext 成功回调里,把它返回的字段当作当前关系的权威 来源合并进本地 profile 状态——Profile 一并合并 capabilities(而不只是 relationship), Verification 补上原本没有的 getConversationContext 调用去合并 relationship。 验证:真实浏览器操作,两个全新注册账号之间反复走查——(1) 发送好友申请后直接刷新 资料页,"添加好友"按钮正确消失、显示"好友申请正在等待验证";(2) 成为好友后互相 删除好友关系,立刻重新打开验证页,正确显示可发送的验证留言表单,不再卡在"你们已经 是好友了"。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tinode Web
Briefing
Single-page web chat application for Tinode. The app is built on React. The Tinode javascript SDK has no external dependencies. Overall, it's a lot like open source WhatsApp or Telegram web apps.
Although the app is generally usable, keep in mind that this is work in progress. Some bugs probably exist, some features are missing. The app was tested in the latest Chrome & Firefox only. NPM package is available.
Try possibly newer or older version live at https://sandbox.tinode.co/.
For demo access and other instructions see here.
Installing and running
This is NOT a standalone app, this is just a frontend, a client. It requires a backend. See installation instructions. See instructions for enabling push notifications.
Getting support
- Read client-side and server-side API documentation.
- For support, general questions, discussions post to https://groups.google.com/d/forum/tinode.
- For bugs and feature requests open an issue.
- Use https://tinode.co/contact for commercial inquiries.
Helping out
- If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.
- Consider buying paid support: https://tinode.co/support.html
- If you are a software developer, send us your pull requests with bug fixes and new features.
- If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing feature requests you find most valuable.
- If you speak a language other than English, translate the apps into your language. You may also review and improve existing translations.
- If you are a UI/UX expert, help us polish the app UI.
- Use it: install it for your colleagues or friends at work or at home.
Internationalization
The app is fully internationalized using React-Intl. The UI language is selected automatically from the language specified by the browser. A specific language can be forced by adding #?hl=XX parameter to the URL when starting the app, e.g. https://web.tinode.co/#?hl=fr.
The app is currently available in the following languages:
- English - default
- Arabic
- Chinese simplified
- Chinese traditional
- French
- German
- Italian
- Korean
- Romanian
- Russian
- Spanish
- Thai
- Ukrainian
- Vietnamese
More translations are welcome. See instructions.
Not done yet
- End-to-End encryption.
- Emoji support is weak.
- Mentions, hashtags.
- Previews not generated for links and docs.
- Location and contact sharing.
- Recording video messages.
Other
- Demo avatars and some other graphics are from https://www.pexels.com/ under CC0 license.
- Background patterns from http://subtlepatterns.com/, commercial and non-commercial use allowed with attribution.
- Fonts and icons from Google under license which permits commercial and non-commercial use.
- Push notifications built with https://firebase.google.com/.






