feat: Passwordless cross-device authentication

- Arkitektur: docs/auth/passwordless-architecture.md
- Backend: iom/quixzoom-auth-service/ (FastAPI + Redis)
- Webb: quixzoom-market-pages/se/login/ (QR-kod + polling)
- App: iom/quixzoom-app/src/features/auth/ (push + deep links)

Flöde: QR-kod → app-godkännande → webb-inloggad
This commit is contained in:
Bernt
2026-07-07 07:11:50 +00:00
parent 4aa984ad74
commit 6989a98d75
61843 changed files with 5491611 additions and 872231 deletions
+29 -59
View File
@@ -1,68 +1,38 @@
{
"name": "quixzoom-app",
"name": "quixzoom-mobile",
"version": "1.0.0",
"description": "quiXzoom Native App — Field data collection for iOS/Android",
"main": "index.js",
"main": "index.ts",
"scripts": {
"start": "react-native start",
"android": "react-native run-android",
"ios": "react-native run-ios",
"test": "jest",
"lint": "eslint ."
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
"dependencies": {
"react": "18.2.0",
"react-native": "0.72.0",
"@react-native-async-storage/async-storage": "^1.19.0",
"@react-native-community/geolocation": "^3.0.0",
"react-native-vision-camera": "^3.0.0",
"react-native-maps": "^1.7.0",
"react-native-vector-icons": "^10.0.0",
"react-native-share": "^9.0.0",
"react-native-fs": "^2.20.0",
"react-native-image-resizer": "^3.0.0",
"react-native-background-upload": "^6.0.0",
"react-native-offline": "^6.0.0",
"react-native-permissions": "^3.8.0",
"react-native-device-info": "^10.0.0",
"react-native-sensors": "^7.3.0",
"react-native-keep-awake": "^4.0.0",
"react-native-haptic-feedback": "^2.0.0",
"react-native-localize": "^3.0.0",
"react-native-keychain": "^8.1.0",
"react-native-encrypted-storage": "^4.0.0",
"@react-navigation/native": "^6.1.0",
"@react-navigation/bottom-tabs": "^6.5.0",
"@react-navigation/stack": "^6.3.0",
"react-native-gesture-handler": "^2.12.0",
"react-native-reanimated": "^3.3.0",
"react-native-screens": "^3.22.0",
"react-native-safe-area-context": "^4.6.0",
"@reduxjs/toolkit": "^1.9.0",
"react-redux": "^8.1.0",
"redux-persist": "^6.0.0",
"axios": "^1.4.0",
"date-fns": "^2.30.0",
"uuid": "^9.0.0"
"@react-navigation/bottom-tabs": "^7.15.7",
"@react-navigation/native": "^7.2.0",
"@react-navigation/native-stack": "^7.14.7",
"@supabase/supabase-js": "^2.100.0",
"@tanstack/react-query": "^5.95.2",
"expo": "~55.0.8",
"expo-camera": "~55.0.10",
"expo-image-picker": "~55.0.13",
"expo-linking": "~7.1.4",
"expo-location": "~55.1.4",
"expo-notifications": "^0.30.7",
"expo-secure-store": "~55.0.9",
"expo-status-bar": "~55.0.4",
"react": "19.2.0",
"react-native": "0.83.2",
"react-native-gesture-handler": "~2.30.0",
"react-native-maps": "^1.27.2",
"react-native-safe-area-context": "^5.7.0",
"react-native-screens": "~4.23.0",
"zustand": "^5.0.12"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/preset-env": "^7.20.0",
"@babel/runtime": "^7.20.0",
"@react-native/eslint-config": "^0.72.0",
"@react-native/metro-config": "^0.72.0",
"@tsconfig/react-native": "^3.0.0",
"@types/react": "^18.0.24",
"@types/react-test-renderer": "^18.0.0",
"babel-jest": "^29.2.1",
"eslint": "^8.19.0",
"jest": "^29.2.1",
"metro-react-native-babel-preset": "0.76.5",
"prettier": "^2.4.1",
"react-test-renderer": "18.2.0",
"typescript": "4.8.4"
"@types/react": "~19.2.2",
"typescript": "~5.9.2"
},
"jest": {
"preset": "react-native"
}
"private": true
}