* core: cancel the chat callback on interrupt
* badges: add multi-use codes
* badges: add the managed group
* badges: document multi-use codes and the group
* core: sign test badges with whole-second expiry
* badges: rework tracker and reply texts
* core: fix races when sending and receiving files (in tests, or when server is very fast)
* update simplexmq
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
* badges: webapp (#7433)
* badges: service migrations, store and catalog
* badges: BTCPay provider and settlement poller
* badges: web listener and /api endpoints
* web: checkout single-page app
* badges: tests and BTCPay fixtures
* badges: README and ini reference
* badges: fix hex16 build on GHC 8.10.7
* badges: Stripe card lane
* badges: fix Stripe card checkout, add theming
* badges: add a discount row to the order summary
* badges: site navbar, embedding, theme, Forget move
* badges: use SB code prefix in web checkout
* badges: rename sxb app namespace to sb
* badges: embed checkout nav via site; keep original app navbar
* badges: post iframe height, apply site background when embedded
* badges: embed dark surfaces, steadier iframe height
* badges: hide app footer when embedded
* badges: size embedded body to content, not viewport
* badges: declare color-scheme to stop reload flash
* badges: fade shell in on load, no reload blank
* badges: prerender app shell into index.html
* badges: pre-paint theme, hide shell on deep reload
* badges: logo returns to landing client-side
* badges: embedded wizard back, buy-a-code, resume
* badges: signal app-managed screens, resume across reload
* badges: rebuild wizard history on deep load so Back walks it
* badges: carry welcome-page height as the iframe floor
* badges: keep selection on Buy a code; rename to Your codes
* badges: read web shell as UTF-8, not locale
* badges: resume the exact paid order after Stripe card redirect
* badges: move docker deploy under scripts
* badges: add serve_webapp toggle and webapp export
* badges: wire split webapp deploy in docker config
* badges: quiet agent logs by default
* badges: resume card redirect in the embedded frame
* badges: migrate Stripe adapter to PaymentIntents
* badges: correct Stripe restricted key scopes in ini example
* badges: card via Payment Element and PaymentIntents
* badges: fix stale Checkout Session wording in Stripe adapter
* badges: fix stale CheckoutActions reference in card comment
* badges: order shell stylesheet before bootstrap script
* badges: remove development card stand-in
* badges: theme the Stripe card form with the site palette
* badges: exclude web from the Haskell build stage
* badges: unify invoice cancel and mark canceled
* badges: default log level to info
* badges: unify closed-invoice buy-again button
* badges: mute agent connection logs at info level
* badges: show purchase time in local timezone in Your codes
* badges: log service events on own channel, quiet agent
* badges: fold service migrations into one baseline
* badges: run compose on postgres over host network
* badges: use high-res hero art
* badges: add web CI to catch stale builds
* badges: rebuild web shell from committed source
* badges: normalize invoice-code link and columns
* badges: drop unused columns, rename index
* badges: note deferred receipt_hash in migrations
* badges: apply code-review fixes
* badges: reduce comments across service and web
---------
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
* badges: improve web page (#7546)
* badges: improve web page
* improve layout
* improve layout
* fix
* small changes
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
* badges: read one issuer key from the ini
* badges: move and group the service tests
* badges: service fixes (#7567)
* badges: match the redeem error wording in tests
* badges: drop unused imports in the bot tests
* badges: cancel Stripe orders when they expire
* badges: correct the Stripe config and docs
* badges: refuse to revoke a redeemed code
* badges: make the fake Stripe cancel like Stripe
* badges: limit replayed webhook deliveries
---------
Co-authored-by: sh <37271604+shumvgolove@users.noreply.github.com>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: shum <github.shum@liber.li>
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
* core: fast queue rotation not requiring the current server to be online
* simplexmq
---------
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
* 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
* core: enhance server test result handling with additional server info
* simpler
* nix
---------
Co-authored-by: Ed Asriyan <service.github@asriyan.me>
* cli: add --relay-address-server option for chat relay
New CLI flag --relay-address-server SERVER selects the SMP server used
for the chat relay address link created at startup. Only valid together
with --relay; errors out otherwise.
Threads Maybe SMPServerWithAuth through APICreateMyAddress to the new
agent createConnection parameter.
* cli: add --user-display-name option
Selects or creates the active user non-interactively:
- no active user: create one with the given display name
- active user with matching localDisplayName: continue
- active user with different name: exit with error
Mutually exclusive with --create-bot-display-name.
* cli: add --user-image-file option
Sets the active user's profile image from a .png/.jpg/.jpeg file at
startup. Reads file, base64-encodes as data URL, and updates the user
profile directly in the DB - no notification is sent to existing
contacts. Skips the update if the stored image already matches.
Requires --user-display-name.
* cli: address PR review comments
- rename APICreateMyAddress field srv_ to server_
- extract repeated `loop` and putStrLn from createActiveUser via
prompt where-clause
- fuse u_ inspection: validate active user display name in the same
case that creates the user when missing
* cli: enforce profile image size limit in --user-image-file
Reject the file if the encoded data URL exceeds 12500 bytes - matches
the cap mobile and desktop UIs pass to resizeImageToStrSize for profile
images. Without this, oversized images would be silently set on the
user profile.
* core: validate profile image size in chat commands
Enforced in CreateActiveUser, updateProfile_, newGroup, runUpdateGroupProfile
via checkProfileImageSize; max 12500 bytes (matches mobile UIs).
* fix: thread new ChatOpts/CoreChatOpts fields through bot/test constructors
* bots/docs: filter hidden params before type introspection
Hide APICreateMyAddress server_ field so the bot doc generator does not
try to introspect SMPServerWithAuth (an unregistered type).
* core: validate full encoded profile size
Add checkProfileSize / checkGroupProfileSize that encode the full
ChatMessage and check against maxEncodedInfoLength, so a long
displayName/bio combined with a near-max image is also caught at
command time instead of failing later at send time with CEException.
Run alongside the existing checkProfileImageSize (image-only cap of
12500 bytes, matching mobile UIs) in CreateActiveUser, updateProfile_,
newGroup, runUpdateGroupProfile. Update genProfileImg to fit the cap.
* cli: add --headless option for chat relay
Skips interactive prompts (relay address creation, display name) so the
chat relay can run non-interactively as a service. Requires --relay;
creating a new profile also requires --user-display-name.
* test: cover profile image size limit and address server
Adds tests for two new capabilities:
- profile image size validation rejects oversized images
- /_address with a server pins the address to the requested SMP server
* core: update simplexmq (pass optional SMP server to prepareConnectionLink)
* cli: add /set profile image file, fix image flag
Add "/set profile image file <path>" command to set the profile image
from a .png/.jpg/.jpeg file in a running session.
Make --user-image-file create-only: for an existing user it now no-ops
with a note instead of failing with "chat not started" (the update ran
before the chat controller was started).
* core: unify image loading and profile size checks
- loadImageFile (CLI) and readProfileImageFile (command) now share one
loadImageData; removes the duplicated mime/base64 encoding and its
decodeUtf8/safeDecodeUtf8 divergence. A missing --user-image-file no
longer crashes with an uncaught IOException, and empty files are rejected.
- checkProfileSize/checkGroupProfileSize share checkInfoSize.
- --relay-address-server/--headless requires-relay checks use
errorWithoutStackTrace, matching the adjacent validation (no callstack dump).
* bots/docs: document UpdateProfileImageFromFile as a CLI command