{ "name": "GaloyApp", "version": "1.0.1", "private": true, "scripts": { "start": "react-native start", "ios": "react-native run-ios", "android": "react-native run-android", "watchman:del": "if which watchman >/dev/null; then watchman watch-del $(pwd) >/dev/null; fi", "tsc:check": "tsc -p .", "watch:compile": "tsc --watch --noEmit", "eslint:check": "eslint . --ext .js,.ts,.tsx", "eslint:fix": "eslint . --ext .js,.ts,.tsx --fix", "check-code": "yarn tsc:check && yarn eslint:check && yarn check:translations && yarn check:codegen && yarn graphql-check", "check:translations": "yarn update-translations && if git diff --name-only | grep -q 'app/i18n/i18n-types.ts'; then echo 'Error: app/i18n/i18n-types.ts has changes, run `yarn update-translations` and re-commit' >&2; exit 1; fi", "check:codegen": "yarn dev:codegen && if git diff --name-only | grep -q 'app/graphql/generated.ts'; then echo 'Error: app/graphql/generated.ts has changes, run `yarn dev:codegen` and re-commit' >&2; exit 1; fi", "test": "LOGLEVEL=warn jest --runInBand --forceExit", "graphql-check": "npx -f @graphql-inspector/cli validate app/graphql/generated.gql $(grep 'schema:' codegen.yml | cut -d' ' -f2 | tr -d '\"') --apollo --noStrictFragments --method=GET --header=apollo-require-preflight", "coverage": "jest --runInBand --coverage", "fastlane-update": "(cd ios && bundle update fastlane && cd ../android && bundle update fastlane)", "increment": "(cd ios && fastlane ios increment && cd ../android && echo 'fastlane android increment')", "dev:codegen": "graphql-codegen --config codegen.yml && yarn dev:gengql", "dev:gengql": "yarn node utils/create-gql.ts", "adb": "adb reverse tcp:9090 tcp:9090 && adb reverse tcp:3000 tcp:3000 && adb reverse tcp:4000 tcp:4000 && adb reverse tcp:8081 tcp:8081 && adb reverse tcp:4002 tcp:4002 && adb reverse tcp:4455 tcp:4455", "patch": "patch-package --error-on-fail", "postinstall": "jetify && yarn patch-package --error-on-fail && if [ \"$(uname)\" = \"Darwin\" ] && which pod >/dev/null; then (cd ios; pod install --allow-root --repo-update); fi", "hack:types-react-native": "rimraf node_modules/@types/react-native/node_modules/@types", "prepare": "npm-run-all patch hack:*", "client:dev": "yalc add @blinkbitcoin/blink-client", "yalc:check": "yalc check", "update-translations": "yarn typesafe-i18n && yarn typesafe-i18n:export", "typesafe-i18n": "typesafe-i18n --no-watch", "typesafe-i18n:export": "node utils/export-language.mjs", "fetch-address-metadata": "node scripts/fetch-address-metadata.mjs", "fonts": "npx react-native-asset", "apk:debug": "cd android && ./gradlew assembleDebug", "start:appium": "appium", "fix:appium": "yarn appium-doctor", "e2e": "yarn test:e2e:android && yarn test:e2e:ios", "test:get:device": "./bin/get-testing-device.sh", "test:e2e:android": ". ./bin/get-testing-device.sh && E2E_DEVICE=\"android\" ./node_modules/.bin/wdio e2e/config/wdio.conf.js", "test:e2e:ios": ". ./bin/get-testing-device.sh && E2E_DEVICE=\"ios\" ./node_modules/.bin/wdio e2e/config/wdio.conf.js", "test:browserstack:android": "E2E_DEVICE=\"android\" ./node_modules/.bin/wdio e2e/config/browserstack.conf.js", "test:browserstack:ios": "E2E_DEVICE=\"ios\" ./node_modules/.bin/wdio e2e/config/browserstack.conf.js", "test-android": ". ./bin/get-testing-device.sh && E2E_DEVICE=\"android\" NO_RESET=true ./node_modules/.bin/wdio e2e/config/wdio.conf.js --spec e2e/config/single-test-runner.js", "test-ios": ". ./bin/get-testing-device.sh && E2E_DEVICE=\"ios\" NO_RESET=true ./node_modules/.bin/wdio e2e/config/wdio.conf.js --spec e2e/config/single-test-runner.js", "cache:clear": "watchman watch-del-all && rm -rf node_modules && rm -rf /tmp/metro-* && rm -rf ios/Pods && rm -rf ~/Library/Developer/Xcode/DerivedData", "android:prepareAssets": "./android/gradlew clean -b ./android/build.gradle && npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res", "android:buildDebug": "yarn android:prepareAssets && ./android/gradlew -b ./android/build.gradle assembleDebug -Dorg.gradle.jvmargs='-Xmx4g -XX:MaxPermSize=512m'", "ios:prepareAssets": "react-native bundle --entry-file index.js --bundle-output ./ios/main.jsbundle --assets-dest ./ios/ --platform ios --dev false", "bundle-visualizer": "yarn run react-native-bundle-visualizer", "splash": "yarn splash:ios && yarn splash:android", "splash:ios": "yarn react-native generate-bootsplash --platforms ios --background \"#000\" --logo-width 288 app/assets/logo/app-logo-dark.svg", "splash:android": "yarn react-native generate-bootsplash --platforms android --background \"#000\" --logo-width 224 app/assets/logo/app-logo-dark.svg", "e2e:build": "detox build --configuration", "e2e:test": "detox test --configuration", "find-unused-ll-keys": "yarn node utils/find-unused-ll-keys.js", "deps:check": "rnx-align-deps", "deps:fix": "rnx-align-deps --write" }, "dependencies": { "@apollo/client": "^3.9.11", "@bitcoinerlab/secp256k1": "^1.1.1", "@blinkbitcoin/blink-client": "1.1.0", "@blinkbitcoin/react-native-geetest-module": "0.1.2", "@breeztech/breez-sdk-spark-react-native": "0.22.0", "@expo/react-native-action-sheet": "^4.0.1", "@formatjs/intl-getcanonicallocales": "^2.3.0", "@formatjs/intl-locale": "^3.4.5", "@formatjs/intl-numberformat": "^9.2.4", "@formatjs/intl-relativetimeformat": "^11.2.12", "@noble/hashes": "^1.8.0", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-clipboard/clipboard": "^1.14.0", "@react-native-community/blur": "^4.4.1", "@react-native-community/datetimepicker": "^8.0.0", "@react-native-community/geolocation": "^3.2.1", "@react-native-firebase/analytics": "^23.3.1", "@react-native-firebase/app": "^23.3.1", "@react-native-firebase/app-check": "^23.3.1", "@react-native-firebase/crashlytics": "^23.3.1", "@react-native-firebase/messaging": "^23.3.1", "@react-native-firebase/remote-config": "^23.3.1", "@react-native-google-signin/google-signin": "^16.1.2", "@react-navigation/bottom-tabs": "^7.16.2", "@react-navigation/elements": "^2.9.19", "@react-navigation/native": "^7.2.5", "@react-navigation/native-stack": "~7.16.0", "@rn-vui/base": "^5.1.10", "@rn-vui/themed": "^5.1.10", "@ronradtke/react-native-markdown-display": "^8.0.0", "@scure/base": "^1.1.9", "@shopify/react-native-skia": "^2.6.4", "apollo3-cache-persist": "^0.15.0", "axios": "^1.11.0", "bech32": "^2.0.0", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.5", "bolt11": "~1.4.1", "graphql": "^16.8.1", "graphql-ws": "^5.16.0", "intl": "^1.2.5", "intl-pluralrules": "^2.0.1", "js-lnurl": "0.6.0", "js-sha256": "^0.11.0", "libphonenumber-js": "^1.12.38", "lnurl-pay": "^5.0.2", "lodash.debounce": "^4.0.8", "lodash.merge": "^4.6.2", "node-libs-react-native": "^1.2.1", "phosphor-react-native": "^3.0.3", "react": "19.2.3", "react-content-loader": "^7.0.0", "react-dom": "^19.2.3", "react-native": "0.85.3", "react-native-bootsplash": "^5.5.3", "react-native-camera-kit": "^18.0.0", "react-native-cloud-storage": "^2.3.0", "react-native-config": "^1.5.1", "react-native-countdown-circle-timer": "^3.2.1", "react-native-country-picker-modal": "^2.0.0", "react-native-credentials-manager": "0.8.1", "react-native-currency-input": "^1.1.1", "react-native-device-info": "^14.0.4", "react-native-error-boundary": "^1.2.4", "react-native-fingerprint-scanner": "git+https://github.com/hieuvp/react-native-fingerprint-scanner.git#9cecc0db326471c571553ea85f7c016fee2f803d", "react-native-fs": "^2.20.0", "react-native-gesture-handler": "2.31.2", "react-native-haptic-feedback": "^2.3.3", "react-native-image-picker": "^7.1.2", "react-native-inappbrowser-reborn": "^3.7.0", "react-native-keyboard-aware-scroll-view": "^0.9.5", "react-native-keychain": "^10.0.0", "react-native-linear-gradient": "^2.8.2", "react-native-localize": "^3.1.0", "react-native-maps": "1.27.2", "react-native-modal": "^13.0.0", "react-native-nfc-manager": "^3.14.14", "react-native-nitro-modules": "0.35.2", "react-native-permissions": "^4.1.5", "react-native-push-notification": "^8.1.1", "react-native-qrcode-svg": "^6.3.0", "react-native-quick-base64": "^2.2.2", "react-native-quick-crypto": "1.0.18", "react-native-reanimated": "^4.3.1", "react-native-reanimated-carousel": "4.0.3", "react-native-root-siblings": "^5.0.1", "react-native-safe-area-context": "^5.6.0", "react-native-screenguard": "^2.0.0-beta5", "react-native-screens": ">=4.25 <4.26", "react-native-secure-key-store": "^2.0.9", "react-native-securerandom": "^1.0.1", "react-native-share": "^11.1.0", "react-native-svg": "^15.15.5", "react-native-text-size-latest": "^1.9.0", "react-native-toast-message": "^2.2.0", "react-native-url-polyfill": "^2.0.0", "react-native-vector-icons": "^10.3.0", "react-native-view-shot": "^5.1.0", "react-native-webln": "^0.1.11", "react-native-webview": "^13.16.0", "react-native-worklets": "^0.8.0", "rn-qr-generator": "^1.4.5", "supercluster": "^9.0.0", "typesafe-i18n": "^5.26.2", "use-count-up": "^3.0.1", "uuid": "^9.0.0", "validator": "^13.15.22", "victory-native": "^40.1.1", "webln": "^0.3.2" }, "devDependencies": { "@babel/core": "^7.29.6", "@babel/preset-env": "^7.25.3", "@babel/runtime": "^7.25.0", "@graphql-codegen/add": "^5.0.2", "@graphql-codegen/cli": "^5.0.2", "@graphql-codegen/client-preset": "^4.2.5", "@graphql-codegen/typescript": "^4.0.6", "@graphql-codegen/typescript-operations": "^4.2.0", "@graphql-codegen/typescript-react-apollo": "^4.3.0", "@graphql-codegen/typescript-resolvers": "^4.0.6", "@graphql-inspector/cli": "^4.0.3", "@graphql-tools/graphql-tag-pluck": "^8.3.0", "@jest/globals": "^30.0.5", "@react-native-community/cli": "^15.0.1", "@react-native-community/cli-platform-android": "^15.0.1", "@react-native-community/cli-platform-ios": "^15.0.1", "@react-native-community/slider": "^5.2.0", "@react-native/babel-preset": "0.85.3", "@react-native/eslint-config": "0.76.9", "@react-native/jest-preset": "0.85.3", "@react-native/metro-config": "0.85.3", "@react-native/typescript-config": "0.76.9", "@rnx-kit/align-deps": "^3.2.1", "@testing-library/jest-native": "^5.4.1", "@testing-library/react-hooks": "^8.0.1", "@testing-library/react-native": "^13.3.3", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@tsconfig/react-native": "^3.0.5", "@types/jest": "^29.5.12", "@types/lodash.debounce": "^4.0.9", "@types/lodash.merge": "^4.6.7", "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", "@types/react-native-share": "^3.3.8", "@types/react-native-vector-icons": "^6.4.18", "@types/react-test-renderer": "^19.1.0", "@types/supercluster": "^7.1.3", "@types/uuid": "^9.0.8", "@types/validator": "^13.11.9", "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", "@typescript-eslint/typescript-estree": "^7.7.0", "@wdio/cli": "^8.36.0", "@wdio/devtools-service": "^8.36.0", "@wdio/globals": "^8.36.0", "@wdio/local-runner": "^8.36.0", "@wdio/mocha-framework": "^8.36.0", "@wdio/spec-reporter": "^8.36.0", "babel-jest": "^29.6.3", "babel-loader": "^9.1.2", "babel-plugin-module-resolver": "^5.0.1", "browserstack-local": "^1.5.1", "cross-fetch": "^4.0.0", "csv-parse": "^5.5.5", "detox": "^20.20.2", "dotenv": "^16.4.5", "eslint": "^8.33.0", "eslint-config-prettier": "^8.6.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^28.2.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.5.0", "eslint-plugin-react-native": "^4.0.0", "jest": "^29.2.1", "jest-circus": "^29.4.1", "jest-environment-node": "^29.7.0", "jest-transform-stub": "^2.0.0", "jest-ts-auto-mock": "^2.1.0", "jetifier": "^2.0.0", "jimp": "^0.22.12", "jsqr": "^1.4.0", "metro-config": "^0.81.0", "mocha": "^10.4.0", "npm-run-all": "4.1.5", "patch-package": "8.0.0", "prettier": "^3.2.5", "react-native-asset": "^2.0.1", "react-native-bundle-visualizer": "^3.1.3", "react-native-svg-transformer": "^1.3.0", "react-test-renderer": "19.2.3", "rimraf": "5.0.5", "sharp": "^0.35.0", "solidarity": "^3.0.4", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.1.2", "tsx": "^4.7.2", "ttsc": "^0.3.1", "typescript": "^5.4.5", "webdriverio": "^8.36.0", "yalc": "^1.0.0-pre.53" }, "peerDependencies": { "solidarity": "^2.3.1" }, "resolutions": { "basic-ftp": ">=5.2.2", "cipher-base": "^1.0.6", "types-ramda": "0.29.4", "ejs": "3.1.9", "elliptic": "^6.6.1", "fast-xml-parser": "^5.3.5", "form-data": "^4.0.6", "pbkdf2": "^3.1.3", "sha.js": "^2.4.12", "shell-quote": "^1.10.0", "@react-native/codegen": "0.85.3", "handlebars": ">=4.7.9", "protobufjs": ">=7.5.5" }, "engines": { "node": ">=24" }, "rnx-kit": { "kitType": "app", "alignDeps": { "requirements": [ "react-native@0.76" ], "capabilities": [ "animation", "babel-preset-react-native", "clipboard", "community/cli", "community/cli-android", "community/cli-ios", "core", "core-android", "core-ios", "core/metro-config", "datetime-picker", "gestures", "jest", "metro-config", "modal", "navigation/native", "navigation/stack", "react", "react-dom", "react-test-renderer", "safe-area", "screens", "storage", "svg", "webview" ] } } }