* badge-service: accept a list of Apple roots
* badge-service: document root_certificates
---------
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
The Play subscription check reads purchases.subscriptionsv2 by token
through the existing service-account client, with the same HTTP classes as
product reads, and maps Play's state, base plan, period, order id and
offer phase; the period start is its end minus the plan's length, and a
pending subscription stays pending. A subscription is acknowledged with
purchases.subscriptions.acknowledge before it is credited, skipped when
Play reports it acknowledged, so it never reaches the one-time endpoint.
Each store's subscriptions answer provider_not_configured when that store
is not configured. A charge on a plan the catalog does not sell is pending
rather than a malformed period.
Run: 001-badge-subscriptions, slice 7
While a subscription purchase's coverage runs, issueBadge is unchanged
and makes no store call. Once it has ended, the service asks the store at
most once an hour per subscription, stamping every attempt, and answers
from the stored state in between; a failed check is retried after the
whole interval. A grantable charge is planned from the tip at the store's
period start, signed, and written with its issuance and state in one
transaction that re-reads the tip, answering internal if it moved. Any
other charge and the state are recorded without a ledger row. Every answer
for a subscription purchase carries its state.
Run: 001-badge-subscriptions, slice 4
The catalog now tells subscription products from one-time ones and maps a
store plan to its tier and months. A subscription receipt is checked with
the store once: with a grantable charge, the service plans the charge's
rows from the store's period start, signs the first month, and writes the
payment, purchase, charge, ledger rows, issuance, state and Play token in
one transaction, answering with the subscription state. Without one, it
answers payment_pending (300 s while the period has not started or the
store is pending, a day otherwise), receipt_invalid for an ended Play
subscription, or test_purchase, and writes nothing. Replays carry the
state. The store verifier interface gains the subscription check, which no
real store implements yet; the fake store does.
Run: 001-badge-subscriptions, slice 3b
* core: compress messages if needed to fit envelope, even if there is no PQ e2ee in connection
* simplify
* remove noise
* compress messages without PQ too
* case
* update query plans
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
* 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
* directory: only create group links after approval
* update test
* update messages
* diff
* get group and link in one query
* reduce database reads
* better errors
* typos
* query plans
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.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
* 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>
* 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>
* docs: add Hosting your own Chat Relay guide
* cli: run headless relay without a terminal
--headless (no -e) now runs via simplexChatCore instead of the terminal
UI, so the relay runs as a systemd service without a TTY (withTerminal
requires one). Drains the event queue logging only errors, and sets
stdout to line-buffering so logs reach the journal.
* docs/chat-relay: debounce service
* Apply suggestions from code review
Co-authored-by: Evgeny <evgeny@poberezkin.com>
---------
Co-authored-by: Evgeny <evgeny@poberezkin.com>
* website: fix broken GitHub links for project files in docs
* website: fix broken links across docs and pages
Render glossary tooltips through the shared replaceLink transform so
their relative links become absolute site URLs instead of 404ing when
injected across pages; add the English-only routes (downloads, faq,
jobs, reproduce, security, transparency) to supportedRoutes so the
language switcher stops emitting href="undefined"; passthrough-copy
docs/guide/images, docs/guide/diagrams and docs/themes.
Fix the SIMPLEX.md p2p anchor typo and correct image paths in CLI,
the v0.4 blog post and the fr/pl translation docs to point at the
existing shared assets.
* docs: add name resolution setup to SMP server guide
* docs: link SMP server names section to public names overview
* link
---------
Co-authored-by: Evgeny <evgeny@poberezkin.com>
* docs: add SimpleX name registration guide
* docs: clarify SimpleX name registration steps
Explain why registration needs two on-chain transactions with a wait
(commit-reveal prevents someone from grabbing the name mid-registration).
Mark attaching both contact and channel links as advanced usage.
* docs: switch name guide to official dapp, apply review
Use testing-names.simplex.chat and its simpler flow (both SimpleX
contact/channel fields on Create your profile; no Add profile fields
modal). Apply @epoberezkin review suggestions (intro, testing page URL,
'main names launch', claim purpose).
* Apply suggestions from code review
Co-authored-by: Evgeny <evgeny@poberezkin.com>
* docs: light screenshots, update name flow diagram
Use light-theme official-dapp screenshots. Rework the flow diagram:
drop the 'both' branch, split contact vs channel before step 4 (each
set in its own window), and match the reviewed connect wording (search
or type the name).
---------
Co-authored-by: Evgeny <evgeny@poberezkin.com>
* docs: add channel webpage setup guide
Step-by-step guide for channel owners to set up a web preview page:
enable the webpage in the app, copy the generated embed code, and host
the page. Includes the customizable data-* attributes and troubleshooting.
Linked from the user guide contents.
* docs: reorder channel webpage steps to recommended flow
Set up embedding first to build and test the page from any address,
and set the webpage URL last so the link is only shown to subscribers
once the page works. Also drop the incorrect 'Save and notify channel
subscribers' prompt references (that dialog only appears when leaving
with unsaved changes, not on Save).