Skip to content

Commit b6adf06

Browse files
committed
Merge remote-tracking branch 'exfy/main' into perf/split-report-metadata
2 parents e6a1d51 + 4cfb6a6 commit b6adf06

165 files changed

Lines changed: 1873 additions & 941 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Is Contributor+
2+
description: Check whether a GitHub user is a member of the Expensify/contributor-plus team. Sets IS_CPLUS=true when the user is a member, IS_CPLUS=false otherwise.
3+
4+
inputs:
5+
USERNAME:
6+
description: The GitHub login of the user to check.
7+
required: true
8+
OS_BOTIFY_TOKEN:
9+
description: OSBotify token. Needed to read team memberships (the default GITHUB_TOKEN lacks the read:org scope).
10+
required: true
11+
12+
outputs:
13+
IS_CPLUS:
14+
description: "'true' if the user is a member of Expensify/contributor-plus, 'false' otherwise."
15+
value: ${{ steps.check.outputs.IS_CPLUS }}
16+
17+
runs:
18+
using: composite
19+
steps:
20+
- name: Check Contributor+ membership
21+
id: check
22+
shell: bash
23+
env:
24+
GH_TOKEN: ${{ inputs.OS_BOTIFY_TOKEN }}
25+
USERNAME: ${{ inputs.USERNAME }}
26+
run: |
27+
if gh api "/orgs/Expensify/teams/contributor-plus/memberships/$USERNAME" --silent; then
28+
echo "::notice::✅ $USERNAME is a Contributor+ member"
29+
echo "IS_CPLUS=true" >> "$GITHUB_OUTPUT"
30+
else
31+
echo "::notice::$USERNAME is not a Contributor+ member"
32+
echo "IS_CPLUS=false" >> "$GITHUB_OUTPUT"
33+
fi

.github/workflows/claude-review.yml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,50 @@ permissions:
77
on:
88
pull_request_target:
99
types: [opened, ready_for_review]
10+
pull_request_review:
11+
types: [submitted]
1012

1113
concurrency:
1214
group: claude-review-${{ github.event.pull_request.html_url }}
1315
cancel-in-progress: true
1416

1517
jobs:
1618
validate:
19+
if: github.event_name == 'pull_request_target'
1720
uses: ./.github/workflows/contributorValidationGate.yml
1821
with:
1922
PR_NUMBER: ${{ github.event.pull_request.number }}
2023
PR_AUTHOR: ${{ github.event.pull_request.user.login }}
2124
AUTHOR_ASSOCIATION: ${{ github.event.pull_request.author_association }}
2225

26+
checkCPlusApproval:
27+
if: github.event_name == 'pull_request_review' && github.event.review.state == 'approved'
28+
runs-on: blacksmith-2vcpu-ubuntu-2404
29+
outputs:
30+
IS_CPLUS: ${{ steps.check.outputs.IS_CPLUS }}
31+
steps:
32+
- name: Checkout repository
33+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
34+
with:
35+
fetch-depth: 1
36+
37+
- name: Check Contributor+ membership
38+
id: check
39+
uses: ./.github/actions/composite/isContributorPlus
40+
with:
41+
USERNAME: ${{ github.event.review.user.login }}
42+
OS_BOTIFY_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
43+
2344
review:
24-
needs: [validate]
45+
needs: [validate, checkCPlusApproval]
2546
if: |
26-
needs.validate.outputs.IS_AUTHORIZED == 'true'
47+
!cancelled()
2748
&& github.event.pull_request.draft != true
2849
&& !contains(github.event.pull_request.title, 'Revert')
50+
&& (
51+
(github.event_name == 'pull_request_target' && needs.validate.outputs.IS_AUTHORIZED == 'true')
52+
|| (github.event_name == 'pull_request_review' && needs.checkCPlusApproval.outputs.IS_CPLUS == 'true')
53+
)
2954
runs-on: blacksmith-2vcpu-ubuntu-2404
3055
env:
3156
PR_NUMBER: ${{ github.event.pull_request.number }}

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 1009036104
115-
versionName "9.3.61-4"
114+
versionCode 1009036201
115+
versionName "9.3.62-1"
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"
Lines changed: 1 addition & 0 deletions
Loading

docs/Hidden/UK-and-EU-Expensify-Card.md

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ REMOVE noindex: true AND sitemap: false FROM YAML HEADER BEFORE PUBLISHING!
1313

1414
# Set up the Expensify Card in the UK and EU
1515

16-
The Expensify Card is available for companies in the United Kingdom and select European countries. This guide walks you through eligibility and how to set up and start using the card in GBP or EUR.
16+
The Expensify Card is available for companies in the United Kingdom and select European countries. This guide walks you through eligibility and how to set up and start using the card in GBP or EUR.
1717

1818
Workspace Admins can issue virtual Expensify Cards to members and manage spending in GBP or EUR. Physical cards will be available soon.
1919

@@ -33,34 +33,27 @@ If your company hasn’t yet connected a GBP or EUR business bank account, [foll
3333

3434
The Expensify Card can be used **anywhere Visa is accepted**.
3535

36-
However, only companies registered in the following 20 UK and EU countries can enable the Expensify Card for their Workspace:
37-
38-
- Belgium
39-
- Denmark
40-
- Estonia
41-
- Finland
42-
- Gibraltar
43-
- Greece
44-
- Ireland
45-
- Latvia
46-
- Liechtenstein
47-
- Lithuania
48-
- Luxembourg
49-
- Malta
50-
- Netherlands
51-
- Poland
52-
- Romania
53-
- Slovakia
54-
- Slovenia
55-
- Spain
56-
- Sweden
36+
Companies registered in the following countries can enable the Expensify Card for their Workspaces:
37+
38+
- Belgium
39+
- Denmark
40+
- Finland
41+
- Gibraltar
42+
- Ireland
43+
- Latvia
44+
- Lithuania
45+
- Luxembourg
46+
- Netherlands
47+
- Poland
48+
- Spain
49+
- Sweden
5750
- United Kingdom
5851

5952
## What are the pre-requisites to set up the Expensify Card in the UK and EU
6053

61-
To set up the Expensify Card in the UK and EU, you must:
54+
To set up the Expensify Card in the UK and EU, you must:
6255

63-
1. Have a GBP or EUR bank account connected. To connect one, [Enable Global Reimbursement](https://help.expensify.com/articles/new-expensify/wallet-and-payments/Enable-Global-Reimbursement).
56+
1. Have a GBP or EUR bank account connected. To connect one, [Enable Global Reimbursement](https://help.expensify.com/articles/new-expensify/wallet-and-payments/Enable-Global-Reimbursement).
6457
2. Complete the **[Know Your Customer (KYC)](https://launch-workflow.trulioo.com/68223577c5dae52a6ec9347f)** and **[Know Your Business (KYB)](https://launch-workflow.trulioo.com/681a7cc4e65d2e48f19de9c3)** forms.
6558
3. Share the last 90 days of statements from your connected GBP or EUR bank account with Concierge so they can assess your eligible limit
6659

@@ -70,9 +63,9 @@ To set up the Expensify Card in the UK and EU, you must:
7063

7164
1. From navigation tabs (on the left on Web, on the bottom on Mobile), choose **Workspaces > [Workspace Name] > More features**.
7265
2. In the **Spend** section, enable **Expensify Card**.
73-
3. So that we can assess your request, reach out to Concierge and provide the last 90 days of statements from the connected UK or EU bank account
66+
3. So that we can assess your request, reach out to Concierge and provide the last 90 days of statements from the connected UK or EU bank account
7467

75-
Once enabled, **Expensify Card** will appear in the navigation tabs.
68+
Once enabled, **Expensify Card** will appear in the navigation tabs.
7669

7770
---
7871

@@ -88,7 +81,7 @@ Once enabled, **Expensify Card** will appear in the navigation tabs.
8881

8982
1. From navigation tabs (on the left on Web, on the bottom on Mobile), choose **Workspaces > [Workspace Name] > Expensify Card**
9083
2. Click **Issue new card**.
91-
3. Select the employee the card should be issued to.
84+
3. Select the employee the card should be issued to.
9285
4. Choose **Virtual**.
9386
5. Pick a limit type:
9487
- **Smart limit** – Spend up to a threshold before needing approval
@@ -110,7 +103,7 @@ We use the [Visa FX calculator](https://www.visa.co.uk/support/consumer/travel-s
110103

111104
## Does the Expensify Card support Visa Secure for online transactions?
112105

113-
Yes, the Expensify Card protects online transactions with Visa Secure. Please review the [Visa Secure FAQs]({{site.url}}/assets/Files/Visa-secure-faq-expensify.pdf) for more information.
106+
Yes, the Expensify Card protects online transactions with Visa Secure. Please review the [Visa Secure FAQs]({{site.url}}/assets/Files/Visa-secure-faq-expensify.pdf) for more information.
114107

115108
## How do I get help with the Expensify Card in the UK and EU?
116109

docs/articles/expensify-classic/settings/Avoiding-common-scams.md

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22
title: Avoiding common scams
33
description: Learn how to recognize and avoid common phishing scams that pretend to be from Expensify, including fake phone calls and emails asking for your Magic Code.
44
keywords: [Expensify scam, phishing, Magic Code, security, login code, avoid fraud, suspicious email, fake call, fraud prevention]
5+
internalScope: Audience is all Expensify members. Covers identifying and responding to scams involving Magic Codes. Does not cover account recovery or dispute workflows.
56
---
6-
<div id="expensify-classic" markdown="1">
77

8-
# How to avoid scams pretending to be from Expensify
8+
# Avoiding common scams
99

1010
Some scammers try to impersonate Expensify by sending fake emails or calling you directly, often asking for your **Magic Code** (your login code). These scams are designed to trick you into giving up access to your Expensify account.
1111

12-
This guide explains what these scams look like, how to spot them, and what to do if you think you've been targeted.
12+
This article explains how these scams work, how to recognize them, and what actions to take.
13+
14+
**Note:** Expensify will never call you asking for login codes, passwords, or payment information. If you receive such a call, it's a scam.
1315

1416
---
1517

@@ -21,21 +23,17 @@ The **Magic Code** is a one-time login code Expensify emails or texts to you whe
2123

2224
---
2325

24-
## Common scams to watch out for
25-
26-
Here are the most common types of scams we've seen targeting Expensify members:
27-
28-
### 1. Phone call scams requesting your Magic Code
26+
## How to recognize phone call scams pretending to be Expensify
2927

3028
- The scammer claims to be from Expensify and needs your Magic Code to verify your account.
3129
- They may spoof a legitimate phone number to make it seem more convincing.
3230
- Some scammers may create a sense of urgency (e.g., “We detected suspicious activity on your account.”)
3331

34-
**If someone calls you asking for your Magic Code, hang up immediately.**
32+
**If you receive this type of call, hang up.**
3533

3634
---
3735

38-
### 2. Phishing emails and texts requesting you use their link to login to Expensify
36+
## How to recognize phishing emails or texts pretending to be Expensify
3937

4038
- Emails and text messages often look like they’re from Expensify or Visa, but the sender address is likely not from an expensify.com email address.
4139
- These emails and text messages may have links that lead to a fake login page, prompt you to reset your password, or ask you to reply with your Magic Code.
@@ -45,32 +43,46 @@ Here are the most common types of scams we've seen targeting Expensify members:
4543

4644
---
4745

48-
## How to stay safe
49-
50-
Here’s how you can protect your Expensify account:
46+
## How to protect your Expensify account
5147

5248
- **Never share your Magic Code** — not over the phone, not by email, not via text.
5349
- **Don’t click suspicious links** — always verify the sender’s email address.
54-
- **Use 2FA** (two-factor authentication) to add an extra layer of security.
55-
- **If in doubt, message Concierge** directly from within the Expensify app.
50+
- **Use two-factor authentication (2FA)** - this adds an extra layer of security to your account.
51+
- **If in doubt, message Concierge** - reach out directly from within the Expensify app.
52+
53+
[Learn how to enable two-factor authentication](/articles/expensify-classic/settings/Two-Factor-Authentication).
54+
55+
---
56+
57+
## What to do if you receive a Magic Code you didn't request
58+
59+
If you receive a Magic Code email but didn’t try to log in, this does not necessarily mean your account has been compromised. It can happen for a variety of reasons, such as someone mistyping an email address.
60+
61+
Here's what to do:
62+
63+
1. **Do not share the code with anyone** — simply ignore or delete the email.
64+
2. **Do not click any links** in the email.
65+
3. **Consider enabling [two-factor authentication](/articles/expensify-classic/settings/Two-Factor-Authentication)** for extra account security.
66+
67+
**Note:** You do not need to lock your account just because you received an unexpected Magic Code. Only lock your account if you believe someone has gained access to your email account or if you shared your Magic Code with someone.
5668

5769
---
5870

5971
## What to do if you shared your Magic Code
6072

6173
If you accidentally gave someone your Magic Code, act fast:
6274

63-
1. **[Lock your Expensify account](https://help.expensify.com/articles/expensify-classic/settings/Report-Suspicious-Activity)** immediately to block unauthorized access.
75+
1. **[Lock your Expensify account](/articles/expensify-classic/settings/Report-Suspicious-Activity)** immediately to block unauthorized access.
6476
2. **Contact Concierge** from a safe device and explain the situation.
65-
3. **[Enable two-factor authentication](https://help.expensify.com/articles/expensify-classic/settings/Two-Factor-Authentication)** to protect your account going forward.
77+
3. **[Enable two-factor authentication](/articles/expensify-classic/settings/Two-Factor-Authentication)** to protect your account going forward.
6678

6779
---
6880

6981
## How to report phishing and lock your account
7082

7183
If you believe your account has been targeted or compromised:
7284

73-
1. **[Lock your Expensify account](https://help.expensify.com/articles/expensify-classic/settings/Report-Suspicious-Activity)** immediately to block unauthorized access.
85+
1. **[Lock your Expensify account](/articles/expensify-classic/settings/Report-Suspicious-Activity)** immediately to block unauthorized access.
7486
2. **Message Concierge immediately** via [email](mailto:concierge@expensify.com), or from within the Expensify app (web or mobile).
7587
3. Let us know if you’ve received a suspicious message or phone call.
7688
4. Our team will work to secure your account.
@@ -90,9 +102,12 @@ Expensify uses Magic Codes instead of passwords to simplify login while keeping
90102

91103
Legitimate Expensify emails always come from an address ending in **@expensify.com** or **@team.expensify.com**. If you’re unsure, don’t click any links — just log into the Expensify app directly and message Concierge.
92104

105+
## I received a Magic Code I didn't request. Is my account compromised?
106+
107+
No. Receiving an unrequested Magic Code does not mean your account is compromised. It most likely means someone entered your email address by mistake when trying to log in. As long as you don't share the code with anyone, your account is safe. You can simply ignore or delete the email. If you want extra protection, enable [two-factor authentication](/articles/expensify-classic/settings/Two-Factor-Authentication).
108+
93109
## Can Expensify call me?
94110

95111
Expensify will **never** call you asking for login codes, passwords, or payment information. If you receive such a call, it's a scam.
96112

97-
</div>
98113

docs/articles/new-expensify/expensify-card/View-and-Reconcile-Expensify-Card-Expenses.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Workspace Admins can reconcile Expensify Card expenses when the Expensify Card i
1919

2020
## How to View Expensify Card Withdrawals
2121

22-
1. Click the navigation tabs (on the left on web, on the bottom on mobile) and go to **Reports**.
22+
1. Click the navigation tabs (on the left on web, on the bottom on mobile) and go to **Spend**.
2323
2. In the **Reconciliation** section, select **Expensify Card**.
2424
3. Choose the **Withdrawn** filter to select a date range (for example, **Last month**).
2525
4. Review the list of withdrawals. Each row represents a single settlement withdrawal from your bank account.

docs/articles/new-expensify/getting-started/Expensify-Home-Overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Use this section to quickly check how much you can spend before making a purchas
123123

124124
## What is Home for?
125125

126-
Home helps you get oriented when you sign in. It shows whether anything needs attention, highlights what’s new, and points you to the right place—like Inbox or Reports—if you need to take action.
126+
Home helps you get oriented when you sign in. It shows whether anything needs attention, highlights what’s new, and points you to the right place—like Inbox or Spend—if you need to take action.
127127

128128
## Is Home the same as Inbox?
129129

docs/articles/new-expensify/getting-started/Free-Features-in-Expensify.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ Anyone with an Expensify account can use the free features — no workspace requ
2020

2121
## Where to find free features in Expensify
2222

23-
- **Web:** Use the navigation tabs on the left to access **Inbox**, **Reports**, or **Account**.
24-
- **Mobile:** Use the navigation tabs on the bottom to access **Inbox**, **Reports**, or **Account**.
23+
- **Web:** Use the navigation tabs on the left to access **Inbox**, **Spend**, or **Account**.
24+
- **Mobile:** Use the navigation tabs on the bottom to access **Inbox**, **Spend**, or **Account**.
2525

2626
---
2727

@@ -94,7 +94,7 @@ For purchases without receipts, enter expenses by hand.
9494
Export your data for taxes, budgeting, or sharing with an accountant.
9595

9696
### Web
97-
1. Click **Reports** > **Expenses**.
97+
1. Click **Spend** > **Expenses**.
9898
2. Tick the boxes of the expenses you want to export.
9999
3. Click **Selected** at the top.
100100
4. Choose **Export** from the dropdown menu.

0 commit comments

Comments
 (0)