Skip to content

Commit e099683

Browse files
committed
fix pagination
1 parent bb7e0ce commit e099683

File tree

1 file changed

+34
-35
lines changed

1 file changed

+34
-35
lines changed

src/integrations/plaid/plaidIntegration.ts

Lines changed: 34 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import path from 'path'
22
import { parseISO, format, subMonths } from 'date-fns'
3-
import {
3+
import plaid, {
4+
AccountBase,
45
Configuration,
56
CountryCode,
67
ItemPublicTokenExchangeResponse,
78
LinkTokenCreateRequest,
89
PlaidApi,
910
PlaidEnvironments,
1011
Products,
11-
TransactionsGetRequest,
12-
TransactionsGetRequestOptions,
13-
TransactionsGetResponse
12+
TransactionsGetRequest
1413
} from 'plaid'
1514
import { Config, updateConfig } from '../../common/config'
1615
import { PlaidConfig, PlaidEnvironmentType } from '../../types/integrations/plaid'
@@ -176,40 +175,40 @@ export class PlaidIntegration {
176175
accountConfig: AccountConfig,
177176
startDate: Date,
178177
endDate: Date
179-
): Promise<TransactionsGetResponse> => {
178+
): Promise<{ accounts: AccountBase[]; transactions: plaid.Transaction[] }> => {
180179
return new Promise(async (resolve, reject) => {
181180
accountConfig = accountConfig as PlaidAccountConfig
181+
182+
const dateFormat = 'yyyy-MM-dd'
183+
const start = format(startDate, dateFormat)
184+
const end = format(endDate, dateFormat)
185+
186+
const request: TransactionsGetRequest = {
187+
access_token: accountConfig.token,
188+
start_date: start,
189+
end_date: end
190+
}
191+
182192
try {
183-
const dateFormat = 'yyyy-MM-dd'
184-
const start = format(startDate, dateFormat)
185-
const end = format(endDate, dateFormat)
186-
187-
let transactionsGetRequest: TransactionsGetRequest = {
188-
access_token: accountConfig.token,
189-
start_date: start,
190-
end_date: end
191-
}
192-
let transactionsGetRequestOptions: TransactionsGetRequestOptions = {
193-
account_ids: [accountConfig.id],
194-
count: 500,
195-
offset: 0
196-
}
197-
let accounts: TransactionsGetResponse = null
198-
199-
await this.client.transactionsGet(transactionsGetRequest, transactionsGetRequestOptions).then(res => {
200-
accounts = res.data
201-
})
202-
203-
while (accounts.transactions.length < accounts.total_transactions) {
204-
transactionsGetRequestOptions.offset += transactionsGetRequestOptions.count
205-
const next_page = await this.client.transactionsGet(
206-
transactionsGetRequest,
207-
transactionsGetRequestOptions
208-
)
209-
accounts.transactions = accounts.transactions.concat(next_page.data.transactions)
210-
}
193+
const response = await this.client.transactionsGet(request)
194+
195+
let transactions = response.data.transactions
196+
const total_transactions = response.data.total_transactions
197+
// Manipulate the offset parameter to paginate
198+
// transactions and retrieve all available data
199+
200+
while (transactions.length < total_transactions) {
201+
const paginatedRequest: TransactionsGetRequest = {
202+
...request,
203+
options: {
204+
offset: transactions.length
205+
}
206+
}
211207

212-
return resolve(accounts)
208+
const paginatedResponse = await this.client.transactionsGet(paginatedRequest)
209+
transactions = transactions.concat(paginatedResponse.data.transactions)
210+
}
211+
return resolve({ accounts: response.data.accounts, transactions: transactions })
213212
} catch (e) {
214213
return reject(e)
215214
}
@@ -269,7 +268,7 @@ export class PlaidIntegration {
269268
}))
270269

271270
logInfo(
272-
`Fetched ${data.accounts.length} sub-accounts and ${data.total_transactions} transactions.`,
271+
`Fetched ${data.accounts.length} sub-accounts and ${data.transactions.length} transactions.`,
273272
accounts
274273
)
275274
return accounts

0 commit comments

Comments
 (0)