actualbudget / actualbudget/actual

[Bug]: GoCardless token expires before completion on long imports

Đang mở
#3,590 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
bank sync help wanted server
Ngôn ngữ chính
TypeScript
Star
28.7k
Fork
3k
Merge trung bình
2 ngày 11 giờ
Pull request đã merge (30 ngày)
65

Mô tả

### Verified issue does not already exist?

- [X] I have searched and found no existing issue
- [X] I will be providing steps how to reproduce the bug (in most cases this will also mean uploading a demo budget file)

### What happened?

Hello,

When importing accounts with a long history (390 days) and a lot of transactions, the GoCardless JWT token actually expires before the sync completes, but isn't refreshed in all the operations that make API calls to GoCardless, leading to an exception in the logs and the UI crashing (and the account never being imported).

Here's the relevant part of the stacktrace:

```
2024-10-06T21:43:11.762Z info: POST 200 /sync/sync
Error /gocardless/get-accounts InvalidGoCardlessTokenError: Token is invalid or expired
at handleGoCardlessError (file:///app/src/app-gocardless/services/gocardless-service.js:46:13)
at Object.getDetailedAccount (file:///app/src/app-gocardless/services/gocardless-service.js:413:7)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async file:///app/src/app-gocardless/services/gocardless-service.js:152:25
at async Promise.all (index 0)
at async Object.getRequisitionWithAccounts (file:///app/src/app-gocardless/services/gocardless-service.js:150:30)
at async file:///app/src/app-gocardless/app-gocardless.js:68:9 {
```

I imagine this can crash in multiple places, but we can see for example in the [getDetailedAccount](https://github.com/actualbudget/actual-server/blob/master/src/app-gocardless/services/gocardless-service.js#L405) call, it doesn't call [setToken](https://github.com/actualbudget/actual-server/blob/master/src/app-gocardless/services/gocardless-service.js#L79).

I don't see any downsides to calling setToken before each API call (especially if the expiration time is cached so it doesn't need to be decoded every time), so that should fix the issue, unfortunately I don't have the infrastructure setup to test the fix myself.

Thanks.

### Where are you hosting Actual?

Docker

### What browsers are you seeing the problem on?

Any

### Operating System

Any

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.