- 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
46 lines
1.4 KiB
JSON
46 lines
1.4 KiB
JSON
{
|
|
"name": "webui",
|
|
"version": "2.0.0",
|
|
"main": "expo-router/entry",
|
|
"dependencies": {
|
|
"@expo/vector-icons": "^15.1.1",
|
|
"@tanstack/react-query": "^5.102.8",
|
|
"expo": "~57.0.8",
|
|
"expo-constants": "~57.0.17",
|
|
"expo-file-system": "~57.0.6",
|
|
"expo-linking": "~57.0.9",
|
|
"expo-localization": "~57.0.1",
|
|
"expo-router": "~57.0.20",
|
|
"expo-secure-store": "~57.0.3",
|
|
"expo-sqlite": "~57.0.2",
|
|
"expo-status-bar": "~57.0.1",
|
|
"i18n-js": "^4.5.3",
|
|
"react": "19.2.3",
|
|
"react-dom": "19.2.3",
|
|
"react-native": "0.86.0",
|
|
"react-native-safe-area-context": "~5.7.0",
|
|
"react-native-screens": "~4.26.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/better-sqlite3": "^9.6.0",
|
|
"@types/react": "~19.2.2",
|
|
"babel-preset-expo": "^57.0.4",
|
|
"better-sqlite3": "^13.0.3",
|
|
"tsx": "^4.23.13",
|
|
"typescript": "~6.0.3"
|
|
},
|
|
"scripts": {
|
|
"start": "expo start",
|
|
"android": "expo run:android",
|
|
"ios": "expo run:ios",
|
|
"web": "expo start --web",
|
|
"test:db": "tsx --test tests/migrations.test.ts tests/repositories.test.ts",
|
|
"test:migrations": "tsx --test tests/migrations.test.ts",
|
|
"test:api": "tsx --test tests/apiClient.test.ts",
|
|
"test:sync": "tsx --test tests/syncOutbox.test.ts",
|
|
"test:e2e": "tsx --test tests/e2e.live.test.ts",
|
|
"test": "npm run test:db && npm run test:api && npm run test:sync"
|
|
},
|
|
"private": true
|
|
}
|