feat: v6.3.0 API publique complete v2 (REST /api/v2, scopes, OpenAPI)
- 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:
+22
-21
@@ -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é)
|
||||
|
||||
Reference in New Issue
Block a user