{ "name": "new.expensify", "version": "9.5.36-0", "author": "Expensify, Inc.", "homepage": "https://new.expensify.com", "description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.", "license": "MIT", "private": true, "workspaces": [ "server/victory-chart-renderer" ], "scripts": { "i-standalone": "STANDALONE_NEW_DOT=true npm i", "install-standalone": "STANDALONE_NEW_DOT=true npm install", "configure-mapbox": "./scripts/setup-mapbox-sdk-walkthrough.sh", "setupNewDotWebForEmulators": "./scripts/setup-newdot-web-emulators.sh", "startAndroidEmulator": "./scripts/start-android.sh", "postinstall": "./scripts/postInstall.sh", "clean": "./scripts/clean.sh", "clean-standalone": "STANDALONE_NEW_DOT=true ./scripts/clean.sh", "android": "./scripts/set-pusher-suffix.sh && ./scripts/run-build.sh --android", "android-standalone": "./scripts/set-pusher-suffix.sh && STANDALONE_NEW_DOT=true ./scripts/run-build.sh --android", "ios": "./scripts/set-pusher-suffix.sh && ./scripts/run-build.sh --ios", "ios-standalone": "./scripts/set-pusher-suffix.sh && STANDALONE_NEW_DOT=true ./scripts/run-build.sh --ios", "pod-install": "./scripts/pod-install.sh", "pod-install-standalone": "STANDALONE_NEW_DOT=true ./scripts/pod-install.sh", "ipad": "concurrently \"./scripts/run-build.sh --ipad\"", "ipad-standalone": "concurrently \"STANDALONE_NEW_DOT=true ./scripts/run-build.sh --ipad\"", "ipad-sm": "concurrently \"./scripts/run-build.sh --ipad-sm\"", "ipad-sm-standalone": "concurrently \"STANDALONE_NEW_DOT=true ./scripts/run-build.sh --ipad-sm\"", "start": "npx rock start", "web": "./scripts/set-pusher-suffix.sh && bun scripts/startWeb.ts", "web-proxy": "bun web/proxy.ts", "web-server": "node ./node_modules/.bin/rsbuild dev --open --config config/rsbuild/rsbuild.config.ts", "build": "ENV=production bun ./node_modules/.bin/rsbuild build --config config/rsbuild/rsbuild.config.ts && bun ./scripts/combine-web-sourcemaps.ts", "build-staging": "ENV=staging bun ./node_modules/.bin/rsbuild build --config config/rsbuild/rsbuild.config.ts && bun ./scripts/combine-web-sourcemaps.ts", "build-adhoc": "ENV=adhoc bun ./node_modules/.bin/rsbuild build --config config/rsbuild/rsbuild.config.ts && bun ./scripts/combine-web-sourcemaps.ts", "benchmark-app-startup": "bun scripts/benchmarkAppStartup.ts", "bootstrap-device": "bun scripts/bootstrapForDevice.ts", "createDocsRoutes": "bun .github/scripts/createDocsRoutes.ts", "generateAllowedUrls": "bun .github/scripts/generateAllowedUrls.ts", "detectRedirectCycle": "bun .github/scripts/detectRedirectCycle.ts", "ios-build": "bundle exec fastlane ios build_unsigned", "ios-hybrid-build": "bundle exec fastlane ios build_unsigned_hybrid", "android-build": "bundle exec fastlane android build_local", "android-hybrid-build": "bundle exec fastlane android build_local_hybrid", "test": "TZ=utc NODE_OPTIONS=\"--experimental-vm-modules --max_old_space_size=8192\" jest", "test:verbose": "TZ=utc NODE_OPTIONS=\"--experimental-vm-modules --max_old_space_size=4096\" JEST_VERBOSE=true jest", "test:debug": "TZ=utc NODE_OPTIONS='--inspect-brk --experimental-vm-modules' jest --runInBand", "perf-test": "NODE_OPTIONS=--experimental-vm-modules npx reassure", "perf-local": "NODE_OPTIONS=--experimental-vm-modules npx reassure --testMatch '/tests/perf-local/**/*.perf-local.ts'", "typecheck": "bun scripts/typecheck.ts", "lint": "bun scripts/lint/index.ts", "lint-changed": "./scripts/lintChanged.sh", "lint-watch": "onchange '**/*.{js,jsx,ts,tsx,mjs,cjs}' -- bun scripts/lint/index.ts {{changed}}", "lint-report": "bun scripts/lint-report.ts", "knip": "KNIP=true knip --include dependencies --exclude unlisted --no-exit-code --reporter compact", "knip:full": "KNIP=true knip --reporter compact", "knip:json": "KNIP=true knip --reporter json --no-exit-code", "knip-changed": "./scripts/knip-changed.sh", "shellcheck": "./scripts/shellCheck.sh", "spell": "cspell --color **/*", "spell-changed": "./scripts/spellChanged.sh", "fmt": "oxfmt --write .", "fmt-watch": "onchange \"**/*.{js,mjs,ts,tsx,yml,yaml}\" -- oxfmt --write {{changed}}", "print-version": "echo $npm_package_version", "storybook": "storybook dev -p 6006", "storybook-build": "ENV=production storybook build -o dist/docs", "storybook-build-staging": "ENV=staging storybook build -o dist/docs", "gh-actions-build": "bun .github/scripts/buildActions.ts", "analyze-packages": "ANALYZE_BUNDLE=true ENV=production bun ./node_modules/.bin/rsbuild build --config config/rsbuild/rsbuild.config.ts", "symbolicate:android": "npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map", "symbolicate:ios": "npx metro-symbolicate main.jsbundle.map", "combine-web-sourcemaps": "bun scripts/combine-web-sourcemaps.ts", "gh-actions-unused-styles": "bun scripts/findUnusedStyles.ts", "setup-https": "mkcert -install && mkcert -cert-file config/rsbuild/certificate.pem -key-file config/rsbuild/key.pem dev.new.expensify.com localhost 127.0.0.1", "react-compiler-compliance-check": "bun scripts/react-compiler-compliance-check.ts", "generate-search-parser": "peggy --format es -o src/libs/SearchParser/searchParser.js src/libs/SearchParser/searchParser.peggy src/libs/SearchParser/baseRules.peggy", "generate-autocomplete-parser": "peggy --format es -o src/libs/SearchParser/autocompleteParser.js src/libs/SearchParser/autocompleteParser.peggy src/libs/SearchParser/baseRules.peggy && ./scripts/parser-workletization.sh src/libs/SearchParser/autocompleteParser.js", "web:dist": "concurrently \"npm:web-proxy\" \"http-server ./dist --cors --port 8080 -P http://localhost:9000\"", "octokit": "bun scripts/octokit.ts && cd scripts && bun repl", "compress-svg": "bun scripts/compressSvg-cli.ts --dir assets/images && bun scripts/compressSvg-cli.ts --dir docs/assets/images", "server:vcr:dev": "npm run dev -w @expensify/victory-chart-renderer --", "server:vcr:test": "npm run test -w @expensify/victory-chart-renderer --", "test:bun": "TZ=utc bun test --parallel --preload ./scripts/stubReactNative.js --preload ./tests/tooling/setup.ts ./server ./tests/tooling ./.claude/skills", "eval:proposal-police": "bun test --path-ignore-patterns='**/__never__/**' ./evals/proposalPolice/", "server:vcr:build:linux": "npm run build:linux -w @expensify/victory-chart-renderer --", "server:vcr:build:linux-arm": "npm run build:linux-arm -w @expensify/victory-chart-renderer --", "server:vcr:build:macos": "npm run build:macos -w @expensify/victory-chart-renderer --" }, "dependencies": { "@babel/runtime": "^7.25.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@expensify/nitro-utils": "file:./modules/ExpensifyNitroUtils", "@expensify/react-native-background-task": "file:./modules/background-task", "@expensify/react-native-hybrid-app": "file:./modules/hybrid-app", "@expensify/react-native-live-markdown": "0.1.371", "@expensify/react-native-wallet": "0.1.41", "@formatjs/intl-listformat": "^7.5.7", "@formatjs/intl-locale": "^4.0.0", "@formatjs/intl-numberformat": "^8.10.3", "@formatjs/intl-pluralrules": "^5.2.14", "@fullstory/browser": "^2.0.6", "@fullstory/react-native": "^1.10.2", "@gorhom/portal": "^1.0.14", "@invertase/react-native-apple-authentication": "^2.5.0", "@legendapp/list": "^3.7.2", "@lottiefiles/dotlottie-react": "0.13.5", "@onfido/react-native-sdk": "15.1.0", "@pusher/pusher-websocket-react-native": "^1.3.1", "@react-native-camera-roll/camera-roll": "7.4.0", "@react-native-clipboard/clipboard": "^1.16.3", "@react-native-community/netinfo": "11.4.1", "@react-native-documents/picker": "^10.1.3", "@react-native-firebase/analytics": "^22.2.1", "@react-native-firebase/app": "^22.2.1", "@react-native-google-signin/google-signin": "^10.0.1", "@react-native-picker/picker": "2.11.3", "@react-navigation/bottom-tabs": "7.19.2", "@react-navigation/core": "7.22.1", "@react-navigation/material-top-tabs": "7.7.2", "@react-navigation/native": "7.4.1", "@react-navigation/native-stack": "7.19.2", "@react-navigation/stack": "7.11.2", "@react-ng/bounds-observer": "^0.2.1", "@rnmapbox/maps": "10.3.10", "@sbaiahmed1/react-native-biometrics": "0.15.0", "@sentry/core": "10.76.2", "@sentry/react-native": "8.32.0", "@shopify/flash-list": "2.3.2", "@shopify/react-native-skia": "^2.11.2", "@ua/react-native-airship": "26.7.0", "array.prototype.tosorted": "^1.1.4", "awesome-phonenumber": "6.11.0", "canvas-size": "^1.2.6", "canvaskit-wasm": "0.41.0", "d3-scale": "^4.0.2", "date-fns": "^4.1.0", "date-fns-tz": "^3.2.0", "dom-serializer": "^0.2.2", "domhandler": "^5.0.3", "expensify-common": "2.0.224", "expo": "57.0.8", "expo-asset": "57.0.7", "expo-audio": "57.0.3", "expo-font": "57.0.1", "expo-image": "57.0.1", "expo-image-manipulator": "57.0.6", "expo-location": "57.0.6", "expo-modules-core": "57.0.15", "expo-store-review": "57.0.1", "expo-task-manager": "57.0.6", "expo-video": "57.0.2", "expo-web-browser": "57.0.2", "fast-equals": "^5.2.2", "focus-trap-react": "^11.0.3", "group-ib-fp": "file:modules/group-ib-fp", "heic-to": "^1.1.14", "howler": "^2.2.4", "html-entities": "2.5.3", "htmlparser2": "10.0.0", "idb-keyval": "^6.2.1", "json5": "2.2.2", "lodash-es": "4.18.1", "lottie-react-native": "7.3.8", "mapbox-gl": "^3.24.0", "metro-transform-plugins": "0.84.5", "mime-db": "1.52.0", "modern-screenshot": "4.7.0", "onfido-sdk-ui": "14.53.1", "pako": "^2.1.0", "process": "^0.11.10", "pusher-js": "8.3.0", "react": "19.2.3", "react-collapse": "^5.1.0", "react-content-loader": "^7.0.0", "react-dom": "19.2.3", "react-error-boundary": "^4.0.11", "react-fast-pdf": "^1.0.34", "react-is": "^18.3.1", "react-map-gl": "^8.1.1", "react-native": "0.86.0", "react-native-advanced-input-mask": "1.4.6", "react-native-app-logs": "0.3.1", "react-native-blob-util": "0.24.12", "react-native-collapsible": "^1.6.2", "react-native-config": "1.5.3", "react-native-device-info": "10.3.1", "react-native-draggable-flatlist": "^4.0.3", "react-native-fs": "^2.20.0", "react-native-gesture-handler": "3.3.0", "react-native-google-places-autocomplete": "2.6.4", "react-native-haptic-feedback": "^2.3.3", "react-native-image-picker": "^7.1.2", "react-native-image-size": "git+https://github.com/Expensify/react-native-image-size#8a1c3b7359977462cdd4e63b09ea45afbd3d77c7", "react-native-key-command": "1.0.14", "react-native-keyboard-controller": "1.22.4", "react-native-localize": "^3.5.4", "react-native-nitro-fetch": "1.6.2", "react-native-nitro-image": "0.15.2", "react-native-nitro-modules": "0.37.1", "react-native-nitro-sqlite": "10.2.0", "react-native-onyx": "3.0.122", "react-native-pager-view": "9.0.4", "react-native-pdf": "7.0.2", "react-native-permissions": "^5.4.0", "react-native-picker-select": "github:Expensify/react-native-picker-select#69d750a89aaba48392fb8b6f92a3d79f53b99c41", "react-native-plaid-link-sdk": "12.5.3", "react-native-qrcode-svg": "6.3.21", "react-native-quick-base64": "^3.0.1", "react-native-quick-crypto": "^1.1.6", "react-native-reanimated": "4.7.0", "react-native-render-html": "6.3.1", "react-native-safe-area-context": "5.9.1", "react-native-screens": "4.28.0", "react-native-share": "11.0.2", "react-native-svg": "15.15.5", "react-native-tab-view": "^4.3.0", "react-native-url-polyfill": "^2.0.0", "react-native-view-shot": "5.1.0", "react-native-vision-camera": "5.2.3", "react-native-web": "0.21.4", "react-native-webview": "16.0.0", "react-native-worklets": "0.13.0", "react-plaid-link": "3.3.2", "react-web-config": "^1.0.0", "react-webcam": "^7.1.1", "scheduler": "0.27.0", "victory-native": "^42.0.1", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" }, "devDependencies": { "@aaroon/workbox-rspack-plugin": "^1.0.1", "@actions/core": "3.0.1", "@actions/github": "9.1.1", "@appduct/react-native": "^0.16.0", "@appduct/web": "^0.16.0", "@babel/core": "^7.25.2", "@babel/parser": "^7.22.16", "@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/plugin-transform-dynamic-import": "^7.29.7", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.29.7", "@callstack/reassure-compare": "^1.0.0-rc.4", "@callstack/repack": "5.4.1", "@callstack/repack-plugin-expo-modules": "5.4.1", "@callstack/repack-plugin-reanimated": "5.4.1", "@dword-design/eslint-plugin-import-alias": "^5.0.0", "@fullstory/babel-plugin-annotate-react": "^2.4.0", "@fullstory/babel-plugin-react-native": "^1.7.1", "@googleapis/androidpublisher": "^37.0.0", "@jest/globals": "^29.7.0", "@jridgewell/remapping": "^2.3.5", "@ngneat/falso": "^7.1.1", "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-throttling": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/webhooks-types": "^7.6.1", "@react-native-community/cli": "20.1.0", "@react-native-community/cli-platform-android": "20.1.0", "@react-native-community/cli-platform-ios": "20.1.0", "@react-native/babel-preset": "0.86.0", "@react-navigation/devtools": "7.1.15", "@rock-js/platform-android": "0.13.4", "@rock-js/platform-ios": "0.13.4", "@rock-js/plugin-repack": "0.13.4", "@rock-js/provider-s3": "0.13.4", "@rsbuild/core": "^2.1.4", "@rsbuild/plugin-svgr": "^2.0.5", "@rsdoctor/rspack-plugin": "^1.5.17", "@rspack/core": "^2.1.2", "@rspack/plugin-react-refresh": "^2.0.2", "@sentry/browser-utils": "10.76.2", "@sentry/cli": "3.3.0", "@sentry/webpack-plugin": "5.2.0", "@storybook/addon-a11y": "10.6.2", "@storybook/addon-docs": "10.6.2", "@storybook/cli": "10.6.2", "@storybook/react": "10.6.2", "@swc/helpers": "~0.5.15", "@testing-library/dom": "10.4.2", "@testing-library/react-native": "13.2.0", "@types/base-64": "^1.0.2", "@types/bun": "^1.4.3", "@types/canvas-size": "^1.2.2", "@types/concurrently": "^7.0.3", "@types/d3-scale": "^4.0.9", "@types/geojson": "^7946.0.16", "@types/howler": "^2.2.12", "@types/jest": "^29.5.14", "@types/js-yaml": "^4.0.5", "@types/lodash-es": "4.17.12", "@types/mapbox-gl": "^2.7.13", "@types/mime-db": "^1.43.5", "@types/node": "^26.6.5", "@types/pako": "^2.0.3", "@types/pusher-js": "^5.1.0", "@types/react": "19.2.3", "@types/react-collapse": "^5.0.1", "@types/react-dom": "19.2.3", "@types/react-is": "^18.3.0", "@types/react-native-web": "0.19.2", "@types/react-test-renderer": "^19.1.0", "@types/semver": "^7.5.4", "@types/setimmediate": "^1.0.2", "@typescript/typescript6": "^6.0.2", "@vitest/mocker": "4.0.16", "@welldone-software/why-did-you-render": "7.0.1", "babel-jest": "29.7.0", "babel-plugin-istanbul": "^6.1.1", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-transform-remove-console": "^6.9.4", "babel-preset-expo": "^57.0.3", "bun": "^1.4.4", "concurrently": "^9.2.4", "cspell": "9.4.0", "csv-parse": "^5.5.5", "csv-writer": "^1.6.0", "diff-so-fancy": "^1.3.0", "dotenv": "^16.0.3", "esbuild": "^0.28.1", "eslint": "^9.36.0", "eslint-config-expensify": "4.0.20", "eslint-plugin-jsdoc": "^60.7.0", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-react-native-a11y": "^3.3.0", "eslint-plugin-storybook": "10.6.2", "eslint-plugin-testing-library": "^7.11.0", "eslint-plugin-you-dont-need-lodash-underscore": "^6.14.0", "glob": "^10.4.5", "hermes-parser": "0.36.1", "http-server": "^14.1.1", "jest": "29.7.0", "jest-circus": "29.7.0", "jest-cli": "29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-expo": "57.0.2", "jest-transformer-svg": "^2.0.1", "knip": "^6.34.0", "lefthook": "2.1.9", "memfs": "^4.6.0", "metro-symbolicate": "0.84.5", "nitrogen": "0.37.1", "onchange": "^7.1.0", "openai": "^7.0.0", "oxc-transform-react": "0.156.0", "oxfmt": "^0.55.0", "oxlint": "1.92.0", "oxlint-tsgolint": "7.0.2005", "patch-package": "^8.1.0-canary.1", "peggy": "^4.0.3", "portfinder": "^1.0.34", "react-native-clean-project": "^4.0.0-alpha4.0", "react-refresh": "^0.14.2", "react-test-renderer": "19.2.3", "reassure": "^1.0.0", "rock": "0.13.4", "semver": "7.5.2", "setimmediate": "^1.0.5", "shellcheck": "^1.1.0", "source-map": "^0.7.4", "storybook": "10.6.2", "storybook-react-rsbuild": "^3.3.4", "svgo": "^4.1.0", "type-fest": "4.35.0", "typescript": "^7.0.2", "typescript-eslint": "8.58.1", "wait-port": "^0.2.9", "workbox-core": "7.4.0", "workbox-expiration": "7.4.0", "workbox-precaching": "7.4.0", "workbox-routing": "7.4.0", "workbox-strategies": "7.4.0" }, "overrides": { "typescript": "$typescript", "awesome-phonenumber": "$awesome-phonenumber", "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1", "@typescript-eslint/typescript-estree": "8.61.0", "@typescript-eslint/type-utils": "8.58.1", "@typescript-eslint/utils": "8.61.0", "@typescript-eslint/project-service": "8.61.0", "@typescript-eslint/tsconfig-utils": "8.61.0", "mapbox-gl": "^3.24.0", "braces": "3.0.3", "yargs": "17.7.2", "yargs-parser": "21.1.1", "ws": "8.21.3", "micromatch": "4.0.8", "json5": "2.2.2", "loader-utils": "2.0.4", "follow-redirects": "1.15.6", "fast-xml-parser": "5.11.1", "express": "4.20.0", "elliptic": "6.5.7", "fast-json-patch": "3.1.1", "image-size": "2.0.4", "hermes-compiler": "250829098.0.14", "webpack": "^5.108.4", "esbuild": "^0.28.1", "@blakeembrey/template": "1.2.0", "body-parser": "1.20.3", "path-to-regexp": "0.1.10", "send": "0.19.0", "regexpu-core": "6.4.0", "serialize-javascript": "7.1.2", "adm-zip": "0.6.1", "tinypool": "2.1.2", "react": "19.2.3", "react-dom": "19.2.3", "eslint-config-expensify": { "typescript-eslint": "8.58.1", "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1" }, "eslint-plugin-react-native-a11y": { "eslint": "^9.36.0" }, "node-abi": "^3.78.0", "pdfjs-dist": "5.5.207", "lightningcss": "1.30.1", "zod": "4.6.7", "@fullstory/react-native": { "expo": "57.0.8" }, "@react-native-firebase/app": { "expo": "57.0.8" }, "@react-native-google-signin/google-signin": { "expo": "57.0.8" }, "@rnmapbox/maps": { "expo": "57.0.8" }, "@sentry/react-native": { "expo": "57.0.8" }, "expo-modules-core": { "react-native-worklets": "0.13.0" } }, "expo": { "autolinking": { "exclude": [ "expo-file-system", "@react-native-google-signin/google-signin", "expo-keep-awake" ], "android": { "buildFromSource": [ "expo-location", "expo-task-manager", "unimodules-app-loader" ] } } }, "nitroSQLite": { "threadSafe": true, "performanceMode": true }, "engines": { "bun": "1.4.4", "node": "26.12.1", "npm": "11.20.0" } }