Skip to content

Commit b9108e5

Browse files
MelvinBotyoussef-lr
andcommitted
Merge remote-tracking branch 'origin/main' into claude-timerCountdownAccessibility
Co-authored-by: Youssef Lourayad <youssef-lr@users.noreply.github.com>
2 parents a225bdb + 5f7e6bc commit b9108e5

22 files changed

Lines changed: 133 additions & 31 deletions

File tree

Mobile-Expensify

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009034103
115-
versionName "9.3.41-3"
114+
versionCode 1009034200
115+
versionName "9.3.42-0"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"

contributingGuides/NAVIGATION.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ Do not use dynamic routes when:
710710
`DYNAMIC_ROUTES` in `src/ROUTES.ts`: each entry has:
711711

712712
- `path`: The URL suffix (e.g. `'verify-account'`).
713-
- `entryScreens`: List of screen names that are allowed to have this suffix appended (access control; see [Entry Screens (Access Control)](#entry-screens-access-control)).
713+
- `entryScreens`: List of screen names that are allowed to have this suffix appended (access control; see [Entry Screens (Access Control)](#entry-screens-access-control)). Use `['*']` to allow all screens.
714714

715715
`createDynamicRoute(suffix)` — [`createDynamicRoute.ts`](src/libs/Navigation/helpers/createDynamicRoute.ts). Accepts a `DynamicRouteSuffix` (from `DYNAMIC_ROUTES`), appends it to the current active route and returns the full route. Use the following when navigating to a dynamic route:
716716

@@ -731,6 +731,24 @@ When parsing a URL, `src/libs/Navigation/helpers/getStateFromPath.ts` resolves t
731731

732732
When adding or extending a dynamic route, list every screen that should be able to open it (e.g. `SCREENS.SETTINGS.WALLET.ROOT` for Verify Account from Wallet).
733733

734+
#### Wildcard access (`'*'`)
735+
736+
Setting `entryScreens` to `['*']` grants access to the dynamic route from any screen. This bypasses per-screen authorization entirely for that route.
737+
738+
```ts
739+
KEYBOARD_SHORTCUTS: {
740+
path: 'keyboard-shortcuts',
741+
entryScreens: ['*'],
742+
},
743+
```
744+
745+
> [!CAUTION]
746+
> **Use `'*'` only when the dynamic route genuinely needs to be reachable from every screen.**
747+
> If only a subset of screens should access the route, list them explicitly.
748+
> Overusing `'*'` weakens the access control that `entryScreens` provides
749+
> and makes it harder to reason about which screens can trigger a given flow.
750+
> When in doubt, prefer an explicit list.
751+
734752
### Current limitations (work in progress)
735753

736754
- **Path parameters:** Suffixes must not include path params (e.g. `a/:reportID`). Query parameters are supported - see [Dynamic routes with query parameters](#dynamic-routes-with-query-parameters).

ios/AppDelegate.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ import UIKit
99
import React
1010
import React_RCTAppDelegate
1111
import ReactAppDependencyProvider
12-
import ExpoModulesCore
1312
import Firebase
14-
import Expo
13+
internal import Expo
1514
import ActivityKit
1615
import AirshipFrameworkProxy
1716

@@ -25,12 +24,11 @@ class AppDelegate: ExpoAppDelegate, UNUserNotificationCenterDelegate {
2524
let appStartTimePreferencesKey = "AppStartTime"
2625
UserDefaults.standard.set(Date().timeIntervalSince1970 * 1000, forKey: appStartTimePreferencesKey)
2726
let delegate = ReactNativeDelegate()
28-
let factory = RCTReactNativeFactory(delegate: delegate)
27+
let factory = ExpoReactNativeFactory(delegate: delegate)
2928
delegate.dependencyProvider = RCTAppDependencyProvider()
3029

3130
reactNativeDelegate = delegate
3231
reactNativeFactory = factory
33-
bindReactNativeFactory(factory)
3432

3533
window = UIWindow(frame: UIScreen.main.bounds)
3634
factory.startReactNative(

ios/NewExpensify/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<key>CFBundlePackageType</key>
2424
<string>APPL</string>
2525
<key>CFBundleShortVersionString</key>
26-
<string>9.3.41</string>
26+
<string>9.3.42</string>
2727
<key>CFBundleSignature</key>
2828
<string>????</string>
2929
<key>CFBundleURLTypes</key>
@@ -44,7 +44,7 @@
4444
</dict>
4545
</array>
4646
<key>CFBundleVersion</key>
47-
<string>9.3.41.3</string>
47+
<string>9.3.42.0</string>
4848
<key>FullStory</key>
4949
<dict>
5050
<key>OrgId</key>

ios/NotificationServiceExtension/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.3.41</string>
14+
<string>9.3.42</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.41.3</string>
16+
<string>9.3.42.0</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

ios/ShareViewController/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.3.41</string>
14+
<string>9.3.42</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.41.3</string>
16+
<string>9.3.42.0</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionAttributes</key>

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "new.expensify",
3-
"version": "9.3.41-3",
3+
"version": "9.3.42-0",
44
"author": "Expensify, Inc.",
55
"homepage": "https://new.expensify.com",
66
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",

src/ROUTES.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const VERIFY_ACCOUNT = 'verify-account';
5555

5656
type DynamicRouteConfig = {
5757
path: string;
58-
entryScreens: Screen[];
58+
entryScreens: ReadonlyArray<Screen | '*'>;
5959
getRoute?: (...args: never[]) => string;
6060
queryParams?: readonly string[];
6161
};

0 commit comments

Comments
 (0)