m
2d9be3f489
fix the unfixeble
2026-09-11 10:49:12 +02:00
m
76ed3aa66b
add saf directory display fix
2026-09-10 23:08:17 +02:00
m
367073ed89
add floating nav bar + regroup files by date
2026-09-10 22:21:46 +02:00
m
6332e9cac4
add test + fix sqlite pb
2026-09-10 22:08:27 +02:00
m
4e2d92a80e
login without distant server local only mode
2026-09-10 21:56:34 +02:00
m
cac2400917
test(e2e): purge de l'active user avant de retirer l'override DB (évite le chargement lazy d'expo-sqlite sous Node)
2026-09-10 21:38:54 +02:00
m
0536fca6c3
feat(mobile): identité user-first — login/password, SecureStore, scoping par compte
...
- api: DeviceRegistration device-only, login/changePassword/resolveUser, interception 401 (purge) exonérée sur le login ; type User aligné sur le fil (is_admin)
- SecureStore (expo-secure-store v57) : token + profil, jamais en SQLite ; miroir active_user_id
- AuthContext : statut loading/signedOut/signedIn, bootstrap register→restore, signIn/signOut, garde-fou switch de compte
- app/login.tsx + gate de routes dans _layout (Redirect signedOut) ; i18n fr/en
- DB v5 : user_id sur pending_operations + resource_permissions (UNIQUE par user), repos scopés (user_id IS ? OR IS NULL)
- syncOutbox : delta permissions par compte (Map), outbox poussée du compte actif uniquement
- tests: register/login/401/resolve/changePassword, scoping outbox+permissions, migrations v5 ; e2e live revert register→login admin
2026-09-10 21:34:34 +02:00
m
197c7db8a9
feat(mobile): boucle sync client↔serveur — outbox push + snapshot permissions
...
- api/types.ts : SyncOperation, SyncResult (sémantique `applied` = INDEX documentée),
ResourcePermission (miroir docs/api-v1.md §6, consommé tel quel par saveResourcePermission)
- api/client.ts : syncOps (POST /sync/ops), getSyncPermissions (GET /sync/permissions?after=),
hasAuthToken() ; INVALID_RESPONSE documenté dans docs/api-v1.md §1/§4
- services/db/repositories/pendingOps.ts : listQueuedOperations(limit) (batch FIFO due)
+ scheduleRetries(ids, retryAt) qui ne modifie JAMAIS attempts (erreur transitoire,
contrairement à markPendingOperation('failed') qui incrémente + backoff)
- features/syncOutbox.ts (nouveau) :
* pushPendingOps : batch ≤ SYNC_BATCH_SIZE (50) → ops [0, applied) passent 'completed' ;
op à l'index applied refusée → 'failed' (backoff, dead-letter MAX_PENDING_ATTEMPTS) ;
ops suivantes intactes (re-soumission) ; réseau/5xx → scheduleRetries (retried) sans
dead-letter prématurée ; applied==0 && failed → rien commité, aucun compteur touché
* refreshPermissions : delta monotone en mémoire lastPermissionCachedAt → `after`,
upsert saveResourcePermission ; no-op sans token
- features/syncDevice.ts : le tick useSyncDevice() enchaîne SAF walk → pushPendingOps()
→ refreshPermissions(), tous deux gardés par hasAuthToken()
- tests/syncOutbox.test.ts : 12 cas (FIFO/limit, succès complet/partiel, applied=0,
transitoire réseau + 5xx sans incrément, dead-letter après MAX_PENDING_ATTEMPTS,
delta snapshot croisé) — npm run test:sync
- tests/e2e.live.test.ts : smoke real backend (register → push → relecture /files/folders →
snapshot), skip si serveur down, SORTI de npm test via npm run test:e2e
- gates : npx tsc --noEmit + npm run test → 56/56 verts (24 db + 20 api + 12 sync)
2026-09-10 20:23:55 +02:00
m
eddab392a2
test(mobile): blindage contrat API — suite apiClient + durcissement INVALID_RESPONSE
...
- tests/apiClient.test.ts (tsx/node:test, fetch stubbé) : paths/méthodes/query/body de tous les endpoints, multipart FormData sans Content-Type manuel, enveloppe {data,meta}, Bearer (présent/absent/fusion)
- cas hostiles : 2xx HTML/corps vide/JSON invalide/objet sans data/error → ApiError INVALID_RESPONSE (jamais de TypeError ni data indéfini) ; bare 5xx → HTTP_<status> ; fetch rejeté (dont AbortError) → NETWORK_ERROR ; [] toléré en data
- client.ts : parse d'enveloppe stricte dans request() (nouveau code client INVALID_RESPONSE)
- package.json : scripts test:api + test (db + api)
2026-09-10 20:16:27 +02:00
m
293c1ca9b2
add navbar
2026-09-10 07:27:21 +02:00
m
caa6e6483c
feat(api): /devices register + paseto v4 (middleware Bearer, bootstrap mobile du token)
2026-09-10 07:25:11 +02:00
m
4ad2166559
add i19n
2026-09-10 07:09:42 +02:00
m
8ff2339c8a
better iterface
2026-09-10 06:46:22 +02:00
m
27d4eb6a65
add missing features
2026-09-10 06:40:58 +02:00
m
85b1871c18
part ok
2026-09-10 06:39:25 +02:00
m
7dd29239b7
sqlite local
2026-09-09 23:12:15 +02:00
m
e1360c19a2
add sqlite
2026-09-09 22:50:05 +02:00
m
d839bbdf70
saf + sqlite
2026-09-09 22:31:20 +02:00
m
b671a222a5
local storage add add folders
2026-09-09 22:04:33 +02:00
m
ce966e67c5
distant storage
2026-09-09 21:55:51 +02:00
m
2e01484383
saf directory
2026-09-09 18:40:39 +02:00
m
2174eecffc
auth ctx
2026-09-09 18:29:54 +02:00
m
45cffb15c3
layout + app
2026-09-09 18:28:08 +02:00
m
19af7d4bed
index
2026-09-09 18:26:50 +02:00
m
2ba837bcb0
from scratch
2026-09-09 18:23:01 +02:00
m
479c8ab61c
use auto sync
2026-08-29 09:31:53 +02:00
m
e43aa2d793
sync detail
2026-08-28 23:48:19 +02:00
m
bba46fa2b3
fix sync detail
2026-08-28 23:46:59 +02:00
m
0056a83a69
search bar filters
2026-08-28 23:41:42 +02:00
m
e41ccb986a
search bar
2026-08-28 23:37:53 +02:00
m
d6a014ef84
add sort into header
2026-08-28 23:36:14 +02:00
m
ae8931ee21
add sync status
2026-08-28 23:34:35 +02:00
m
bb78d6ac95
remove picture read access
2026-08-28 23:08:52 +02:00
m
523454fe91
add list view
2026-08-28 23:03:35 +02:00
m
57d8e70d7f
add network status
2026-08-28 22:34:00 +02:00
m
f4024c8aae
add pending actions
2026-08-26 17:29:10 +02:00
m
664e1dd290
add status
2026-08-26 15:35:42 +02:00
m
1cf9cf24a4
settings fix
2026-08-25 21:06:47 +02:00
m
70adedeed2
fix onboarding error
2026-08-25 17:50:21 +02:00
m
4602f1da79
get local files
2026-08-25 17:48:47 +02:00
m
a791df26bf
fix sync
2026-08-25 17:04:17 +02:00
m
7e7d669d63
delete files etc ..
2026-07-29 23:30:53 +02:00
m
4119e84f33
fix upload edit
2026-07-29 23:05:18 +02:00
m
79ff07b7c4
delete fikes
2026-07-29 22:54:10 +02:00
m
e4b6e393d8
fix folders on main page
2026-07-29 22:37:23 +02:00
m
eb60aa3068
fix onboarding
2026-07-29 22:24:18 +02:00
m
881767cfec
page + upload queue + folders
2026-07-29 22:16:47 +02:00
m
470474011d
display folders
2026-07-29 21:58:52 +02:00
m
3c7a1d18da
header size
2026-07-29 20:16:20 +02:00
m
60b549902c
resize animation ok
2026-07-29 19:46:51 +02:00