{
  "name": "whispr-mobile",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node scripts/start.js",
    "start:preprod": "node scripts/start.js preprod",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:coverage": "jest --watchAll=false --coverage --coverageReporters=json-summary --coverageReporters=text --coverageReporters=html && node scripts/check-coverage.js",
    "lint": "eslint src/",
    "lint:fix": "eslint src/ --fix",
    "type-check": "tsc --noEmit",
    "e2e:web": "playwright test",
    "e2e:web:install": "playwright install --with-deps chromium webkit",
    "prepare": "husky",
    "postinstall": "patch-package"
  },
  "dependencies": {
    "@expo-google-fonts/inter": "^0.4.2",
    "@livekit/react-native": "^2.10.1",
    "@livekit/react-native-webrtc": "^144.0.0",
    "@react-native-async-storage/async-storage": "^2.2.0",
    "@react-native-community/netinfo": "^12.0.1",
    "@react-native-masked-view/masked-view": "^0.3.2",
    "@react-navigation/native": "^7.1.17",
    "@react-navigation/stack": "^7.4.8",
    "@tanstack/react-query": "^5.100.10",
    "@tensorflow/tfjs": "^4.22.0",
    "@types/jpeg-js": "^0.3.0",
    "@yudiel/react-qr-scanner": "^2.5.1",
    "expo": "~54.0.33",
    "expo-av": "~16.0.8",
    "expo-blur": "~15.0.8",
    "expo-camera": "~17.0.10",
    "expo-clipboard": "~8.0.8",
    "expo-constants": "~18.0.13",
    "expo-contacts": "~15.0.11",
    "expo-crypto": "^15.0.8",
    "expo-dev-client": "~6.0.20",
    "expo-device": "~8.0.10",
    "expo-document-picker": "~14.0.8",
    "expo-file-system": "~19.0.21",
    "expo-font": "^55.0.6",
    "expo-gl": "~16.0.10",
    "expo-haptics": "~15.0.7",
    "expo-image-manipulator": "~14.0.8",
    "expo-image-picker": "^17.0.8",
    "expo-linear-gradient": "^15.0.7",
    "expo-local-authentication": "~17.0.8",
    "expo-notifications": "~0.32.12",
    "expo-secure-store": "~15.0.8",
    "expo-splash-screen": "~31.0.13",
    "expo-status-bar": "~3.0.9",
    "expo-system-ui": "~6.0.9",
    "expo-video-thumbnails": "~10.0.8",
    "jpeg-js": "^0.4.4",
    "livekit-client": "^2.18.4",
    "react": "19.1.0",
    "react-dom": "19.1.0",
    "react-hook-form": "^7.76.0",
    "react-native": "0.81.5",
    "react-native-call-keeper": "^2.1.1",
    "react-native-fs": "^2.20.0",
    "react-native-gesture-handler": "~2.28.0",
    "react-native-get-random-values": "~1.11.0",
    "react-native-qrcode-styled": "^0.4.0",
    "react-native-reanimated": "4.1.1",
    "react-native-safe-area-context": "~5.6.0",
    "react-native-screens": "~4.16.0",
    "react-native-spotlight-tour": "^4.0.0",
    "react-native-svg": "15.12.1",
    "react-native-web": "^0.21.2",
    "react-native-webview": "13.15.0",
    "react-native-worklets": "0.5.1",
    "tweetnacl": "^1.0.3",
    "tweetnacl-util": "^0.15.1",
    "zod": "^4.4.3",
    "zustand": "^5.0.11"
  },
  "devDependencies": {
    "@babel/core": "^7.20.0",
    "@expo/ngrok": "^4.1.3",
    "@playwright/test": "^1.59.1",
    "@testing-library/react-native": "^13.3.3",
    "@types/jest": "^29.5.0",
    "@types/react": "~19.1.0",
    "@typescript-eslint/eslint-plugin": "^6.21.0",
    "@typescript-eslint/parser": "^6.21.0",
    "eslint": "^8.57.0",
    "eslint-config-prettier": "^10.1.8",
    "eslint-plugin-react-hooks": "^4.6.2",
    "express": "^5.2.1",
    "fake-indexeddb": "^6.2.5",
    "http-proxy-middleware": "^3.0.5",
    "husky": "^9.1.7",
    "jest": "^29.7.0",
    "jest-expo": "~54.0.17",
    "lint-staged": "^16.4.0",
    "patch-package": "^8.0.1",
    "postinstall-postinstall": "^2.1.0",
    "prettier": "^3.6.2",
    "react-test-renderer": "19.1.0",
    "typescript": "~5.9.2"
  },
  "private": true,
  "overrides": {
    "rimraf": "^5.0.10",
    "glob": "^10.4.5"
  },
  "lint-staged": {
    "src/**/*.{ts,tsx}": [
      "eslint --fix",
      "prettier --write"
    ]
  },
  "jest": {
    "preset": "jest-expo",
    "coverageProvider": "v8",
    "roots": [
      "<rootDir>/src"
    ],
    "testMatch": [
      "**/__tests__/**/*.test.(ts|tsx)"
    ],
    "testPathIgnorePatterns": [
      "/node_modules/",
      "/e2e/"
    ],
    "setupFiles": [
      "<rootDir>/jest.setup.js"
    ],
    "moduleNameMapper": {
      "@react-native-async-storage/async-storage": "<rootDir>/node_modules/@react-native-async-storage/async-storage/jest/async-storage-mock",
      "\\.bin$": "<rootDir>/src/__test-utils__/binaryAssetMock.js",
      "^expo-local-authentication$": "<rootDir>/src/__test-utils__/expoLocalAuthMock.js"
    },
    "transformIgnorePatterns": [
      "node_modules/(?!((jest-)?react-native|@react-native(-community)?|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg|@sentry/.*))"
    ],
    "collectCoverageFrom": [
      "src/**/*.{ts,tsx}",
      "!src/**/*.d.ts",
      "!src/**/__tests__/**",
      "!src/__test-utils__/**",
      "!src/types/**",
      "!src/**/index.ts",
      "!src/services/moderation/image-to-tensor.ts",
      "!src/services/moderation/tfjs.service.ts",
      "!src/services/moderation/tfjs.service.web.ts",
      "!src/services/moderation/tflite.service.web.ts",
      "!src/services/calls/bootstrap.native.ts",
      "!src/services/calls/callNotificationBridge.ts",
      "!src/services/calls/systemCallProvider.ts",
      "!src/services/calls/liveKitProvider.ts",
      "!src/components/Calls/CallParticipantTile.web.tsx",
      "!src/services/storage.web.ts",
      "!src/services/webCryptoVault.web.ts",
      "!src/components/Common/SafariPWABanner.tsx"
    ]
  }
}
