diff --git a/README.md b/README.md index e3cac83..63acd84 100644 --- a/README.md +++ b/README.md @@ -816,8 +816,18 @@ design — the web compile graph never imports them. - Deploys: any push to `main` touching `lib/`, `web/`, `site/` or pubspec redeploys GitHub Pages (`.github/workflows/deploy-pages.yml`). The artifact keeps `site/` byte-identical at the domain root (the - `/nft-claim` forwarder and `.well-known` app-link files are - load-bearing for native deep links) and serves the app under `/app/`. + `/nft-claim` and `/autopin-complete` forwarders and `.well-known` + app-link files are load-bearing for native deep links) and serves + the app under `/app/`. +- Blox pairing from the web: Settings → My Devices → Pair Blox hands + off to https://blox.fx.land (contract: `docs/AUTOPIN-HANDOFF.md`), + which returns to `files.fx.land/autopin-complete#secret=…` → + "Continue in web app". Known limitation: the web app cannot use the + Blox LAN gateway (`http://` is mixed content and browsers + have no mDNS), so web downloads always come from the cloud; pairing + still makes the Blox auto-pin your files. The stored credentials are + local to that browser — pair native/desktop FxFiles separately + (desktop's manual dialog accepts the pairing secret). - E2E harness: build with `--dart-define=E2E=true`, then drive headless Chrome with `?e2e=create|signin|restore|signout|upload|` `download|list|delete|share` (results print with an `[e2e]` prefix). diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d815c12..47602b2 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -71,12 +71,16 @@ - + + diff --git a/architecture.md b/architecture.md index fafff64..04a0603 100644 --- a/architecture.md +++ b/architecture.md @@ -91,13 +91,46 @@ FxFiles app ### Additional UX — Pairing +Contract: `docs/AUTOPIN-HANDOFF.md` (v1.1). URL builders + the return parser live in +`lib/core/services/blox_pairing_links.dart` (dart:io-free; unit-tested). + 1. User goes to **Settings → My Devices → Pair Blox** -2. App opens deeplink to **FxBlox companion app**, passing JWT -3. FxBlox app calls blox's `AutoPinPair(token, endpoint)` via libp2p +2. FxFiles hands off to FxBlox with the SAME params on one of two carriers: + - **App** (mobile): `fxblox://autopin-pair?token=&endpoint=&returnUrl=