Commit Graph
6450 Commits
Author SHA1 Message Date
Alain Brenzikofer 1ae44e0616 more robust testing 2026-08-31 15:03:33 +02:00
Alain Brenzikofer 3f537d726e use labelhash for name queries instead of plaintext 2026-08-31 14:34:06 +02:00
Alain Brenzikofer 25e3bcbef3 another round of review 2026-08-31 08:32:46 +02:00
Alain Brenzikofer 3de738e9bf another adversarial review's fixes 2026-08-31 08:10:19 +02:00
Alain BrenzikoferandClaude Opus 5 52afb09711 names: fix API docs lists, route signing through signSnrcIntent
The 12 new /name commands and 8 responses were in none of the docs
  lists, and APINameAddress/CRNameAddress outlived their constructors.
  Added alongside APINameRegister, which set the precedent. Also
  regenerates TYPES.md and the TS/Python types, stale since
  CENameRegistrationFailed gained nameRegRetryAfter.

  APINameSetLink now signs through signSnrcIntent, so "the only bridge
  to the wallet" is enforced rather than documented. tokenId is dropped
  and setTextTypeString unexported, both without callers.

  nameKeyOf no longer reads the bound account: the path is literal, so
  the binding never affected which key came back. The mock's idempotent
  is one transaction, and a buy with no link stores no link rather than
  an empty one.

  ownedNames stays device-wide, now with the reason on it.

  Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-30 21:39:24 +02:00
Alain Brenzikofer 2f0f8a7499 show name derivation index as well in list 2026-08-29 15:53:15 +02:00
Alain Brenzikofer 0f10cf30b0 names: wire key selection into derivation, restore marks on rescan
/name keys use never reached deriveNameOwner, so it did not change where a
  purchase went. Pass the selection through.

  Nothing restored the derivation marks after an import, so import + rescan +
  buy derived the recovered name's own key, failing after the code was spent.
  A scan now raises both marks; a purchase re-checks the path first.

  Also from review: three Haddock blocks moved onto their bindings, the
  hardcoded "of 10" dropped, scanSeed's fan-out documented, unused user
  bindings removed.
2026-08-29 15:17:21 +02:00
Alain Brenzikofer 977ffbc3e1 remove blinded codes which will become a separate PR 2026-08-27 17:32:43 +02:00
Alain Brenzikofer e50898ce58 add more reasoning to RFC 2026-08-27 16:38:59 +02:00
Alain Brenzikofer e0dbb4f12f first round implementation of cli ready for investor presale with redemption codes 2026-08-27 16:06:00 +02:00
Alain Brenzikofer 8a62fc49c1 names: derive one key per name at m/44'/60'/i'/0/k 2026-08-26 20:40:23 +02:00
Alain Brenzikofer 5fc7215f3b test postgres build and update migration 2026-08-18 18:22:40 +02:00
Alain Brenzikofer 2015b501db re-pin simplexmq and auto-derive josn encoding of address 2026-08-18 18:05:42 +02:00
Alain Brenzikofer a445166fe2 stricter house conventions 2026-08-18 17:40:53 +02:00
Alain Brenzikofer 46a80c6c55 add /name address getter and more tests 2026-08-18 17:30:21 +02:00
Alain Brenzikofer 31909213b4 add proper error types 2026-08-18 17:12:17 +02:00
Alain Brenzikofer 58916c0303 redate migration 2026-08-18 16:54:51 +02:00
Alain Brenzikofer 29f612225a fix review comment 2026-08-18 16:49:24 +02:00
Alain Brenzikofer 75d093e79a add help for names 2026-08-18 16:21:28 +02:00
Alain Brenzikofer 4f75f832af cosmetics 2026-08-18 15:12:04 +02:00
Alain Brenzikofer cee76fe787 add changelog and shrink diff 2026-08-18 15:02:14 +02:00
Alain Brenzikofer d2cc96516a re-pin simplexmq 2026-08-18 14:32:48 +02:00
Alain Brenzikofer d85da0647b implement names purchase MVP integrating with the badges service 2026-08-18 14:06:21 +02:00
EvgenyandEvgeny @ SimpleX Chat 352550089f core: client and service schema for badge purchases (#7358)
* core: client and service schema for badge purchases

* simplify api, receipt is payment type

* split invoice

* update

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-17 19:25:18 +01:00
spaced4ndy 9c845222e4 ui: badges app store integration (#7374) 2026-08-17 16:12:09 +00:00
spaced4ndy cd670548b9 ui: badges WIP views (#7321) 2026-08-14 07:36:02 +00:00
spaced4ndy 4217c9ee84 Merge branch 'master' into badges 2026-08-14 11:31:01 +04:00
spaced4ndy 6fcfbd54c5 core: enforce allowRemoteCommand on the host (#7370) 2026-08-13 11:56:22 +00:00
spaced4ndy 493fb9cee8 core: limit the number of messages in a batch (#7364) 2026-08-13 10:04:21 +00:00
SimpleX Chat 1fe94aad78 7.1-beta.0: android 369, desktop 156, ios 346 v7.1.0-beta.0 2026-08-13 11:03:55 +01:00
Evgeny Poberezkin 0f45645afe Merge branch 'stable' 2026-08-12 15:30:16 +01:00
Narasimha-sc abd5954675 ui: send dropped .webm as video only when it has a video track (#7354)
* ui: send dropped .webm as video only when it has a video track

.webm is as commonly an audio-only container as a video one, so the
extension alone cannot tell whether there is a frame to embed. Read the
container to decide: files with a video track are sent as video, the rest
as files.

Only done for files attached without the user saying how to send them
(drag & drop, paste). An explicitly picked video is still sent as one, so
.webm is now listed in the video file picker too.

* plan: send dropped .webm as video only when it has a video track
2026-08-12 15:29:43 +01:00
sh 0a61b0ddea android: add google and foss build flavors (#7328)
* android: add google and foss build flavors

* android: get the Google Play account country in the google flavor

* android, desktop: update whats new

* temp: comment out wefunder link
2026-08-12 15:28:59 +01:00
Narasimha-scandEvgeny 486c2abf26 ui: connect when a SimpleX link is pasted as a markdown hyperlink (#7348)
* ui: connect when a SimpleX link is pasted as a markdown hyperlink

* remove comments

Co-authored-by: Evgeny <evgeny@poberezkin.com>

---------

Co-authored-by: Evgeny <evgeny@poberezkin.com>
2026-08-12 14:54:45 +01:00
sh 3d0fa806a9 core: 7.1.0.2 (simplexmq 7.1.0.2) (#7367) 2026-08-12 11:28:19 +01:00
sh 398c777c93 core: 7.1.0.1 (simplexmq 7.1.0.1) (#7366) 2026-08-12 09:33:46 +01:00
Evgeny Poberezkin 9ca5cbb895 website: update links 2026-08-10 22:51:08 +01:00
Evgeny Poberezkin 1be2634b0c website: links in navbar 2026-08-10 21:25:36 +01:00
EvgenyandEvgeny @ SimpleX Chat ec6e975001 ios: update whats new (#7359)
* ios: update whats new

* custom view

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-10 13:00:38 +01:00
EvgenyandEd Asriyan 24816b66fe core: enhance server test result handling with additional server info (#7357)
* core: enhance server test result handling with additional server info

* simpler

* nix

---------

Co-authored-by: Ed Asriyan <service.github@asriyan.me>
2026-08-09 16:09:29 +01:00
spaced4ndyandEvgeny Poberezkin 7ce2e6583e core: simplex-badge-service scaffolding (#7353)
* core: simplex-badge-service scaffolding

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* clean-up

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-08-08 21:00:23 +01:00
spaced4ndy e04e080a3d core: prevent remote controller from writing files outside files folder (#7352) 2026-08-07 13:26:48 +00:00
Evgeny Poberezkin b832d7c8f7 Merge branch 'stable' 2026-08-07 10:14:02 +01:00
Evgeny Poberezkin 302988a50b docs: add email updates signup link to contact us page 2026-08-06 23:21:45 +01:00
Narasimha-sc f921bd47bb android, desktop: fix live message sent to the chat opened after switching (#7323)
* android, desktop: fix live message sent to the chat opened after switching

A live message is sent when the chat is switched, but by then this view
already shows the chat that was opened - the effect that sends it runs
with that chat, so the message typed in one chat was sent to another.

The chat the message was composed in is passed to the send, and it is
resolved by the chat id from before the switch. If that chat is no longer
there the message is not sent at all, rather than sent to the chat opened
instead. The draft cleared after sending is the one of that chat too.

* plan: correct references; clear the draft of the chat the message is sent to

* plan: note the blast radius and how to resolve the overlap with #7308

* android, desktop: only pass the chat to what a live message can reach

A live message has no context item, so the forwarding, editing and
reporting branches of the send cannot run for it - they keep using the
chat of the view, and the chat it was composed in is passed only to the
message send, to the update of an already sent live message, and to
clearing the draft after sending.

* android, desktop: give the opened chat its own compose state while the live message is sent

Sending the live message to the chat it was composed in is not enough on
its own: composeState is shared between the chats opened in this view, and
the chat switch branch of KeyChangeEffect is the only one that neither
resets it nor loads the opened chat's draft - the branch that loads a
draft is later in the same if chain and cannot be reached.

sendMessageAsync then made it visible. It runs on Dispatchers.Default, so
its writes land after the switch: the whole composed state (via
cs.copy(liveMessage = null)) and its spinner (sending()) were written to
the compose state of a view that already shows another chat, which then
displayed the text composed in the previous one until the send completed.
The draft it should have shown was still in the model, and the next switch
away dropped it.

- sendMessageAsync takes composed, and sendMessage takes it as null by
  default, so only the chat switch passes a state and every other sender
  reads it inside the coroutine, where the send read it before. The chat
  switch captures it on the main thread before replacing it - otherwise
  the send would read the compose state of the chat that was opened and
  send its draft to the previous chat.
- checkLinkPreview takes that state too. It re-read composeState rather
  than what was passed in, and every text live message reaches it through
  updateMsgContent, so it would have rebuilt the message from the opened
  chat's draft instead of committing what was composed.
- every composeState write in sendMessageAsync is guarded by
  composeIsForSend() (toChat.id == chat.id), which compares the two chats
  instead of checking which one is open, so this send never takes the
  compose state back if that chat is opened again before it completes.
- the chat switch branch then resets composeState to the opened chat's
  draft, or to an empty state, like the branches below it do.

* plan: document the compose state handoff; correct the #7308 overlap resolution

The note on resolving the overlap with #7308 said its cs.liveMessage !=
null clause "already covers the send made by the chat switch". It does
not - in #7308 that clause sits outside the chatIsOpen check, which is
correct only while a live message is always sent to the chat that is
open, the assumption this fix removes. Read as written it exempts the
chat switch send from the guard that protects the opened chat, and a
merge that follows it reintroduces the leak.

Also records what manual test 2 was found failing on, and adds a slow
send variant so the window between the switch and the send completing is
long enough to type in the chat that was opened.

* android, desktop: keep reading the current state where a forward appends it

checkLinkPreview taking the composed state is needed where a live message
reaches it, but the forwarding branch is not one of those - it cannot run
with a chat other than the view's - and forwardItem suspends before it. So
there the captured state is stale by a network round trip, and text typed
while the forward was in flight stopped being appended to the message it
adds, while still being cleared when the send completed.

* plan: correct references and the claims that no longer hold

Line references were against the base this branch forked from, before
#7308 landed. Also: the live message loop no longer exits because the send
clears liveMessage - the chat switch replaces the compose state, on the
main thread, before the send runs; checkLinkPreview is not passed the
captured state everywhere; and chatsCtx.getChat can only return null in a
secondary context, which is not how "the chat is gone" reads.

Adds the two manual checks the review implied: a live message carrying a
link preview, which is what breaks if checkLinkPreview stops reading the
state it was given, and returning to the chat before the send completes.

* android, desktop: narrow the change to what the fix needs

- the draft id a failed message is saved under keeps using chat: that
  branch is behind !liveSend, which the send made by a chat switch never
  satisfies, so toChat is always chat where it is read;
- the state the chat switch installs no longer carries maxFileSize over.
  That field is kept in sync on chat switch by LaunchedEffect(chat.chatInfo),
  which is why the branches below this one construct it without one, and
  the paths where that effect does not re-run are the ones where the send
  overwrites the state anyway;
- sendMessageAsync takes its cs as a parameter rather than aliasing a
  separately named one.

* plan: follow the narrowed change

* android, desktop: shorten the comments

The threading mechanism behind cs is explained where it is used, so the
function comment only has to say what it is; the rest is rewording.
2026-08-06 23:08:15 +01:00
Narasimha-sc 0b2f030dc6 support bot: add crowdfunding announcement to welcome message (#7351) 2026-08-06 15:51:23 +01:00
Narasimha-sc 67fd6f528a support bot: add crowdfunding announcement to welcome message (#7351) 2026-08-06 15:50:36 +01:00
EvgenyandEvgeny @ SimpleX Chat 9c7128d547 core: plan for supporter badges (#7325)
* core: plan for supporter badges

* ledger maths

* update plan

* language

* lines

* lists

* redeem

* badge rpc protocol and draft service schema/plan

* update badge service protocol to support upgrades

* badge purchase ledger types and schema

* type, mvp plan

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-06 09:37:10 +01:00
spaced4ndy 8c9c0211f9 core: prohibit admission review in channels, don't send history to pending members (#7347) 2026-08-05 14:52:45 +00:00
Evgeny Poberezkin 1a56b7f0f8 Merge branch 'stable' 2026-08-05 11:51:17 +01:00