Commit Graph
1671 Commits
Author SHA1 Message Date
spaced4ndy e48168e6d8 improve comments 2026-09-25 14:47:00 +04:00
spaced4ndy 692e43337d tests, refactor 2026-09-24 22:03:03 +04:00
spaced4ndy b6f141d6e5 Merge branch 'master' into f/directory-integration-plan 2026-09-24 16:37:55 +04:00
EvgenyandEvgeny @ SimpleX Chat 64014cd8b0 tests: stabilize (#7576)
* tests: stabilize

* query plans

* fix test

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-24 12:30:31 +01:00
EvgenyandEvgeny @ SimpleX Chat 9a9ce70b2f core: fix connecting via prepared connection with contact card (#7575)
* core: fix connecting via prepared connection with contact card

* simplify

* merge transactions

* update query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-24 08:11:29 +01:00
EvgenyandEvgeny @ SimpleX Chat 3af6e2abfe core: store extended contact and group preferences, for forward compatibility (#7506)
* core: store extended contact and group preferences, for forward compatibility

* simiplify

* fix

* fix bot api types

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-23 23:25:20 +01:00
EvgenyandEvgeny @ SimpleX Chat 23136f1cd5 core: update agent API for connections (#7574)
* core: update agent API for connections

* update simplexmq

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-23 21:29:41 +01:00
spaced4ndy 1c8ca01fb0 Merge branch 'master' into f/directory-integration-plan 2026-09-22 20:32:41 +04:00
spaced4ndy 150897d637 core, ui: alert the user when badge renewal is failing (#7532) 2026-09-22 12:55:08 +00:00
sh c8f20bcc91 core, libs: configurable queue size, library fixes (#7542)
* core: add chat_migrate_init_queue FFI export

* bots: fix BadgeServiceErrorCode API type

* nodejs: pass required command fields

* nodejs: fix migration error types

* nodejs: install libsimplex from SIMPLEX_LIBS_DIR

* nodejs: add queue size option

* nodejs: regenerate docs

* python: add queue size option

* bots: pass incognito in APIConnect

* nodejs: accept documented success responses

* python: accept documented success responses

* nodejs: dispatch each bot message once

* nodejs: fix startChat events loop lifecycle

* nodejs, python: parse multi-line bot commands

* nodejs: fix file buffer handling in addon

* nodejs: keep events loop when chat stop fails

* python: fix send_and_wait race, load lib off loop

* python: make queue size export optional

* nodejs: receive events on a dedicated thread

* nodejs: release haskell thread after receive

* python: receive on a dedicated thread per chat

* python: test receive shutdown order

* nodejs: one receive thread per chat controller

* nodejs: harden receiver shutdown and tests

* nodejs: stop chat before closing store

* python: stop chat before closing store

* nodejs, python: harden close regression and retry

* python: free results with ucrt on windows

* nodejs: enable c++ exceptions on mac and windows
2026-09-19 12:18:46 +01:00
spaced4ndy 54ed1d846a review fixes
- core: reject service payloads nested deeper than 32 levels, so a hostile service cannot crash the app's JSON decoder
- core: one parseServiceBody (decompress, decode, depth check) at all three decode points: incoming requests, sendServiceRequestTo, redeemBadgeCode
- directory: '%' and '_' in search text match literally instead of acting as LIKE wildcards
- directory: search text over 100 characters is rejected over RPC
- directory: a new directory creates its address with DR keys, so service requests work without a manual key rotation
- directory: service requests are always processed; the --service-requests switch is no longer needed for the directory
- directory: the in-flight service request cap is a DirectoryOpts field (default 8) instead of a hardcoded constant
- directory: the page-fit check compresses the exact response object that is sent, not a proxy with a different key order and cursor
- directory: search entries omit the full link when a short link exists, saving hundreds of bytes per entry in the envelope
- ios: add DirectorySearch.swift and DirectorySearchView.swift to the Xcode project; the app did not build without them
- ios: in the onboarding state the search bar is at the bottom in one-hand mode, as in the chat list
- ios: in the onboarding state a failed search shows the retry row instead of returning to the cards
- ios: a search with no results shows a "No results" row
- ios: the "No chats found" overlay no longer covers directory results, the retry row or the no-results row
- ios: directory rows are rendered by one builder for both the onboarding and chat-list branches
- ios: retrying after a failed "Show more" resumes from the cursor instead of restarting the search
- ios: cancelling the spinner, or tapping a result mid-search, drops the pending request without clearing results already shown
- ios: typing during a search stops the spinner, and a stale response no longer clears a newer search's spinner
- ios: repeated Search taps for the same text while a search is in flight are ignored
- ios: channel results show the subscriber count and channel icon; group results show the group icon
- ios: remove the unused searchText parameter of SearchInDirectoryRow
- android: a directory search timeout no longer pops the retry alert (the UI will show a retry row)
- tests: RPC paging by the echoed cursor, literal wildcards and the length bound, rejection over the cap, page fitting to the envelope, nested payload rejection
2026-09-18 16:45:42 +04:00
EvgenyandEvgeny @ SimpleX Chat c8466b2010 core: refactor groups (#7503)
* core: refactor groups

* refactor

* refactor

* refactor

* refactor

* refactor

* rename

* refactor

* remove

* rename

* diff

* simplify

* relay requests

* bot types

* check useRelays

* refactor

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-18 10:18:10 +01:00
spaced4ndy c7b3e362ec core, ui: badge credential details in developer tools (#7527) 2026-09-17 16:18:04 +00:00
spaced4ndy 125bd0e3dd Merge branch 'master' into f/directory-integration-plan 2026-09-17 13:34:26 +04:00
Evgeny Poberezkin fea9f482cf core: update bot api and query plans 2026-09-16 19:48:57 +01:00
spaced4ndy f38c7e0f2b core, ui: badge redeem errors and fixes (#7515)
- redeem errors are typed (CEBadgeRedeemError) instead of matched by text in the apps
- service timeout (A_SERVICE) decodes in the apps and offers Retry via the existing retry alert
- unexpected redeem errors show the error itself instead of a generic message
- service error codes are a typed enum in the apps (BadgeServiceErrorCode)
- CRBadgeRedeemed returns badge state, so the apps skip a second round-trip after redeem
- setBadgeAlertAcked is scoped to user_id
- badgeChanged updates non-active profiles, so other profiles' badges don't go stale
- pitch banner is not shown to a profile that already has a badge
- one badgeTypeName per platform, used by the badge screen and the badge info alert
- BadgeAlertKind and BadgeAlertPrice decode via standard JSON, no custom decoders
- dead "Support ended" title branch removed from Your Badge view
- kotlin: users from badge responses carry remoteHostId
- kotlin: redeem code field keeps the IME's cursor and composition state
- kotlin: "Get your code" shown in all flavours
- kotlin: "Don't show again" -> "Dismiss", matching iOS
- kotlin: parseBadgeCode moved next to its FFI in platform/Core.kt
- kotlin: BadgesView no longer cross-fades on badge state updates
- kotlin: section title not uppercased
- ios: redeem code field parses once per change
- ios: A_SERVICE rejected reason is not decoded
- CLI: "cannot redeem badge code: ..." with the source of the error
- comments clarified
2026-09-16 14:15:11 +00:00
brenzi 9af6fb00e6 minimal adjustment to make client compile against SMP-v22 PR (#7520)
* minimal adjustment to make client compile against SMP-v22 PR

* repin after upstream merge
2026-09-16 10:07:18 +01:00
spaced4ndy 56ced9bfea Merge branch 'master' into badges 2026-09-15 18:26:13 +04:00
spaced4ndy 6a7eae2751 ui: redeem code (#7482) 2026-09-15 14:23:13 +00:00
spaced4ndy a7aed3ebd5 core: update query plans 2026-09-15 15:26:53 +04:00
spaced4ndy 069efad7a2 core: consolidate badges schema (#7513) 2026-09-15 10:15:34 +00:00
Evgeny Poberezkin ebabcc4053 core: 7.1.0.5 (simplexmq 7.1.0.6) 2026-09-15 10:13:10 +01:00
spaced4ndy bac8d187ba Merge branch 'master' into badges 2026-09-14 17:13:58 +04:00
EvgenyandEvgeny @ SimpleX Chat 237409890e core: stop all workers on chat controller stop (#7502)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-13 17:19:15 +01:00
EvgenyandEvgeny @ SimpleX Chat ca114a7a2a core: option to limit the max number of loaded chats (#7499)
* core: option to limit the max number of loaded chats

* update bot api

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-13 12:23:39 +01:00
EvgenyandEvgeny @ SimpleX Chat be673038ab core: optimize transactions during message delivery (#7498)
* core: optimize transactions during message delivery

* merge more transactions

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-13 11:01:51 +01:00
EvgenyandEvgeny @ SimpleX Chat 5ffbe733a8 core: attach badge proofs to files over size limit (#7455)
* core: attach badge proofs to files over size limit

* types

* more types

* implement file badge proofs

* tests

* move file limits to config, add tests

* more tests, work correctly in "send as group" case

* fix races in tests

* group badge tests

* query plans

* add history support, fixes

* simplify

* refactor

* refactor

* type

* restructure schema for proofs

* rename, refactor

* refactor

* fix, refactor

* refactor

* ui

* comments

* alerts

* update nix, ios library

* updare sharing

* update simplexmq

* update text

* improve messages

* api types

* postgres schema

* fix

* test

* query plans

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-12 14:33:52 +01:00
47d32b674a bots: add APIs (#7494)
* docs: fix bot API surface

- Fix missing space in APIShareMyAddress syntax expression which
  resulted in parse errors

- Document missing `Connect` responses: `CRConnectionPlan`, `CRSentInvitationToContact`,
  `CRStartedConnectionToContact`, and `CRStartedConnectionToGroup` (relay channel links).

- Document missing `CRUserProfileNoChange` responsed returned when `APISetProfileAddress` doesn't change the profile.

- Expose remote control APIs to bots

* website: improve sign-up forms (#7484)

* website: improve sign-up forms

* name

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

* rename field

* generic

---------

Co-authored-by: a1akris <alkrivitskiy@pm.me>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-12 14:13:11 +01:00
EvgenyandEvgeny @ SimpleX Chat 44773d0412 core: support message signing in p2p groups (#7312)
* core: support message signing in p2p groups

* improve

* add member key

* distribute keys and sign

* refactor

* better query

* map

* sign in relay groups too

* clean up

* list

* fix test

* update bot types

* some refactor

* remove unnecessary condition

* simplify

* refactor

* simplify

* move

* clean up

* diff

* diff

* limit attempts for key sending

* optimize

* fix test

* split

* fuse

* null

* only mark as "key sent" when forwarder supports binary encoding

* fix bot apis

* fix some tests

* add key distribution steps, and fix some tests

* fix test

* increase timeout

* fix tests

* fix more tests

* simplify

* disable test output

* mark keys sent with invitations

* fix test

* fix test, query plans

* unify signing of connection info packets

* revert change to createNewGroup

* create key at group/member creation

* rename, remove liftIO

* clean up

* fix type

* remove ad hoc key sending

* update bot api

* diff

* reduce diff

* failing test

* fix sending messages in groups with members before version 18

* remove test delays

* update query plans

* update test

* add tests

* fix tests

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-11 12:33:07 +01:00
spaced4ndy bd97e4df34 core: verify the badge ledger sent by the service (#7480) 2026-09-11 09:41:23 +00:00
spaced4ndy db4b73962d Merge branch 'master' into badges 2026-09-10 13:23:28 +04:00
spaced4ndy 47b499dcc4 core: change badge code prefix to "SB" (#7478) 2026-09-09 14:42:52 +00:00
spaced4ndy f9bab17643 core: renew badges monthly and alert when support ends (#7448) 2026-09-09 14:31:05 +00:00
EvgenyandEvgeny @ SimpleX Chat 76a577afb3 core: use file expiration time when sending history (#7454)
* core: use file expiration time when sending history

* simplify

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-05 11:03:57 +01:00
spaced4ndy c623f4284c Merge branch 'master' into badges 2026-09-02 13:53:35 +04:00
EvgenyandEvgeny @ SimpleX Chat 735662902f core, ui: make badge expiration non-optional (#7445)
* core, ui: make badge expiration non-optional

* update

* update bot types

* fix to use non-optional badge expiry

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-02 08:14:09 +01:00
EvgenyandEvgeny @ SimpleX Chat f99c474ca6 core: send badge ZK-proofs to XFTP servers, add file expiry time (#7430)
* core: send badge ZK-proofs to XFTP servers

* update simplexmq, use keys and header from simplexmq

* core: add file expiry time

* refactor

* remove posix module

* rename migrations

* bot api

* update UI

* import

* show item from loaded information

* ios: update core library

* text

* send entitlements in handshake

* simplexmq

* query plans

* update simplexmq

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-01 23:16:15 +01:00
spaced4ndy 3ddf17dce5 core: redeem badge codes (#7438) 2026-09-01 12:06:51 +00:00
EvgenyandEvgeny @ SimpleX Chat f71b132536 core: support **text** as bold markdown (#7444)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-09-01 12:27:53 +01:00
spaced4ndy 6075ea5797 core: register badges migration (#7429) 2026-08-28 10:20:13 +00:00
spaced4ndy e80a174f13 core: badge codes schema, plan (#7427) 2026-08-28 09:31:24 +00:00
spaced4ndy 7af42558c5 Merge branch 'master' into f/directory-integration-plan 2026-08-27 13:11:04 +04:00
EvgenyandEvgeny @ SimpleX Chat 1c7bc1aed4 core: refactor badge types (#7387)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-27 08:02:46 +01:00
Evgeny Poberezkin 78332d0c73 Merge branch 'master' into badges 2026-08-27 07:59:57 +01:00
Evgeny c14770ce51 core: fix test for aborting connection switching (pin to previous version) (#7418) 2026-08-25 13:13:16 +01:00
EvgenyandEvgeny @ SimpleX Chat 17cdef1692 core: include channel link and name when forwarding messages (#7409)
* core: include channel link and name when forwarding messages

* wip

* simplify

* add member ID

* refactor

* refactor

* refactor

* update api types

* store forward source group type

* rename

* api types

* simpler layout

* layout, translations

* refactor ios

* public

* simpler

* refactor kotlin

* padding

* padding

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-24 21:36:57 +01:00
Evgeny Poberezkin 293e47d033 core: 7.1.0.3 (simplexmq 7.1.0.4) 2026-08-20 10:57:15 +01:00
shandEvgeny Poberezkin b9d38ec05d core: fast queue rotation not requiring the current server to be online (#7397)
* core: fast queue rotation not requiring the current server to be online

* simplexmq

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-08-20 10:39:02 +01:00
ecb008b792 core, ui: auto-accept group invitations per user profile (#7377)
* core, ui: auto-accept group invitations per user profile

Add a per-profile toggle for auto-accepting group invitations, and regroup it
with the existing contact-requests setting under a single Auto-accept section
in Privacy & Security, relabelled "Contact requests in groups".

The join is fully async. processGroupInvitation already had an async accept
path, used when the invitation matches a group link the user opened:
prepareAgentJoin + createMemberConnectionAsync + joinAgentConnectionAsync,
with the outcome reported later against the CFJoinConn command id. Auto-accept
takes that same path instead of going through APIJoinGroup, so it works while
the app is closed and never blocks message processing.

An auto-accepted invitation still records a CIRcvGroupInvitation item in the
chat with the inviting contact, so there is a record of who added the user to
which group.

Two details worth noting for review:

hostContact is reported to clients only for group links. Clients respond to it
by replacing the transient host connection view with the group and removing
that chat - correct for a group link, where the contact is a placeholder, but
wrong for a plain invitation, where it is a real contact.

A resent invitation returns the existing group, because createGroupInvitation
is idempotent on inv_queue_info. The join therefore only runs while the
membership is still GSMemInvited, so a resend cannot open a second connection.

* booldef

* order

* refactor

* update translation key

* query plans

* ios: export translations

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2026-08-19 00:10:54 +01:00
shandEvgeny Poberezkin cbfdf63f4b core: drop agent versions in simplexmq (#7360)
* core: adapt to dropped agent versions

* refactor

* remove comments

* api types, protocol tests

* fix test

---------

Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-08-18 22:50:59 +01:00