feat: v6.3.0 API publique complete v2 (REST /api/v2, scopes, OpenAPI)
FlowDeck CI / lint (push) Successful in 1m13s
FlowDeck CI / test (push) Successful in 9m20s
FlowDeck CI / docker (push) Successful in 1m10s

- Router api_v2.py (~100 endpoints) : tokens, users, workspaces/members,
  collections, pages, proprietes, vues/dashboards, commentaires/mentions,
  notifications, favoris/tags/recents, partage/publish, historique, sprints,
  templates, export/import, forges, recherche FTS, admin, webhooks CRUD
- Helpers api_v2_helpers.py : Bearer unifie (sha256/expires_at/extension_devices),
  scopes hierarchiques read<write<admin, pagination + X-Total-Count, ISO-8601,
  RFC 7807, idempotence, audit, rate-limit par token
- Migration 20 : api_tokens.scopes/expires_at, webhook_deliveries,
  api_audit_log, idempotency_keys
- main.py : handler d'erreurs unifie StarletteHTTPException, /docs + /redoc
- config : PUBLIC_API_INSECURE_OK (dev only), API_V2_RATE_LIMIT_PER_TOKEN
- OpenAPI docs/openapi-v2.json (402 chemins), tests/test_public_api_v2.py (24)
- Docs : CHANGELOG (v6.2.0/6.2.1 clipper + v6.3.0), ROADMAP, API_GUIDE_V6,
  V6_Web_Clipper, README, ARCHITECTURE, /help
- Suite complete 668 verte, ruff OK
This commit is contained in:
2026-09-20 13:19:29 -04:00
parent ea19d1d050
commit 95bc861cdb
25 changed files with 25078 additions and 66 deletions
+22 -21
View File
@@ -1,8 +1,8 @@
# V6.0.0 — Web Clipper : Extension Navigateur
# V6.2.0 — Web Clipper : Extension Navigateur
> **Statut** : Conception détaillée — v6.0.0
> **Date** : 2026-09-15
> **Route** : `feat/v6-web-clipper` → `develop` → `main`
> **Statut** : COMPLETED — livré v6.2.0 (2026-09-19) + polish v6.2.1 (2026-09-20) sur `main` (`0b25164`, `ea19d1d`)
> **Date** : 2026-09-15 conception → 2026-09-19 implémentation
> **Route** : `feat/v6-web-clipper` → `develop` → `main` ✅ mergé
> **Dépendances** : v4.0.0 Share & Publish, v5.5.0 Embeds & Rich Media, v5.2.0 OAuth (GitHub)
---
@@ -546,20 +546,20 @@ CREATE INDEX idx_clips_user ON extension_clips(user_id, created_at);
---
## 12. Checklist d'implémentation
## 12. Checklist d'implémentation — ✅ LIVRÉ (v6.2.0/6.2.1)
1. **`app/routers/web_clipper.py`** — endpoints clip et auth
2. **`app/services/web_clipper.py`** — service de traitement (extraction + création de page)
3. **Migrations DB** — `extension_devices`, `extension_clips`, colonne `source` sur `api_tokens`
4. **Readability.js intégré** dans le content script
5. **Extension côté client** — manifest.json, content.js, background.js, popup.html
6. **Settings UI** — section Extensions dans settings.html
7. **Page `/extensions`** — téléchargement
8. **OAuth pour extension** — device flow ou popup
9. **Content sanitization** — nettoyage HTML côté serveur
10. **Tests** — tous les scénarios de clipping
11. **Packaging** — Chrome Web Store / Firefox Add-on soumission
12. **Documentation utilisateur** — guide d'installation et usage
1. ✅ **`app/routers/web_clipper.py`** — `POST /clip`, `GET /status`, `POST /auth/verify`, `GET/DELETE /devices` + page `/extensions`
2. ✅ **`app/services/web_clipper.py`** — `sanitize_html`, `html_to_blocks`, `extract_article`, `create_page_from_clip`, `register_device`, `log_clip`, rate-limit 50/h
3. ✅ **Migrations DB (19)** — `extension_devices`, `extension_clips` (index `idx_ext_*`)
4. ✅ **Extraction embarquée** dans le content script (heuristique article/sélection)
5. ✅ **Extension côté client** — `extension/` + `static/extension/` : manifest.json, content.js, background.js, popup.html/js, clipper.css, icônes, `flowdeck-clipper.zip`
6. ✅ **Settings UI** — section Extensions dans `settings.html`
7. ✅ **Page `/extensions`** — téléchargement + liste devices/clips
8. ✅ **Auth** — session cookie OU Bearer `api_tokens` / `extension_devices` (token montré une fois)
9. ✅ **Content sanitization** — nettoyage HTML côté serveur (`sanitize_html`)
10. ✅ **Tests** — `tests/test_web_clipper.py` (16 tests)
11. ⚠️ **Packaging** — bundle `.zip` servi ; soumission Chrome Web Store / Firefox Add-on **non faite** (distribution manuelle « load unpacked »)
12. ✅ **Documentation** — page `/extensions`, `/help`, ce guide
---
@@ -582,8 +582,9 @@ requests>=2.32 # Download images dans le service
- [Readability.js (Mozilla)](https://github.com/mozilla/readability)
- [Mercury Parser](https://github.com/postlight/mercury-parser)
- [OAuth 2.0 Device Flow](https://datatracker.ietf.org/doc/html/rfc8628)
- `app/services/web_clipper.py` — (à créer)
- `app/routers/web_clipper.py` — (à créer)
- `app/templates/settings.html` — section Extensions à ajouter
- `app/services/web_clipper.py` — service de traitement (livré)
- `app/routers/web_clipper.py` — endpoints clip/auth (livré)
- `app/templates/settings.html` — section Extensions (livrée)
- `extension/` + `static/extension/` — bundle navigateur (livré)
- `docs/API_GUIDE_V6.md` — référence API v2
- `ROADMAP.md` — v6.0.0 Web Clipper item
- `ROADMAP.md` — v6.2.0 Web Clipper (livré)