@actual-app/sync-server 25.11.0-nightly.20251021 → 25.11.0-nightly.20251023

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,3 +18,164 @@ export const banks = await loadBanks();
18
18
  export function BankFactory(institutionId) {
19
19
  return (banks.find(b => b.institutionIds.includes(institutionId)) || IntegrationBank);
20
20
  }
21
+ // this list contains banks that are known by GoCardless to only provide
22
+ // continuous access if the EUA has max_historical_days <= 90
23
+ // please do not add to this list unless the institution ID appears in
24
+ // https://bankaccountdata.zendesk.com/hc/en-gb/articles/11529718632476-Extended-history-and-continuous-access-edge-cases
25
+ const SPECIAL_CONTINUOUS_ACCESS_BANKS = [
26
+ 'BRED_BREDFRPPXXX',
27
+ 'INDUSTRA_MULTLV2X',
28
+ 'MEDICINOSBANK_MDBALT22XXX',
29
+ 'CESKA_SPORITELNA_GIBACZPX',
30
+ 'LHV_LHVBEE22',
31
+ 'LUMINOR_*',
32
+ 'SWEDBANK_*',
33
+ 'SEB_*',
34
+ 'LABORALKUTXA_CLPEES2M*',
35
+ 'BANKINTER_BKBKESMM*',
36
+ 'CAIXABANK_CAIXESBB',
37
+ 'SANTANDER_DE_SCFBDE33',
38
+ 'BBVA_BBVAESMM',
39
+ 'COOP_EKRDEE22*',
40
+ 'BANCA_AIDEXA_AIDXITMM',
41
+ 'BANCA_PATRIMONI_SENVITT1',
42
+ 'BANCA_SELLA_SELBIT2B',
43
+ 'CARTALIS_CIMTITR1',
44
+ 'DOTS_HYEEIT22',
45
+ 'HYPE_BUSINESS_HYEEIT22',
46
+ 'HYPE_HYEEIT2',
47
+ 'ILLIMITY_ITTPIT2M',
48
+ 'SMARTIKA_SELBIT22',
49
+ 'TIM_HYEEIT22',
50
+ 'TOT_SELBIT2B',
51
+ 'OPYN_BITAITRRB2B',
52
+ 'PAYTIPPER_PAYTITM1',
53
+ 'SELLA_PERSONAL_CREDIT_SELBIT22',
54
+ 'SIAULIU_BANKAS_CBSBLT26XXX',
55
+ 'INTESA_SANPAOLO_CORPORATE_BCITITMMXXX',
56
+ 'AGRICOLE_HBW_CRPPIT2P',
57
+ 'AGRICOLE_NET2_CRPPIT2P',
58
+ 'AGRICOLE_SBW_CRPPIT2P',
59
+ 'ALTO_ADIGE_BANCA_SUDTIROL_BANK_ALOAIT21',
60
+ 'BANCATER_CREDITO_COOPERATIVO_FVG_CCRTIT2TTER',
61
+ 'BANCA_ADRIA_COLLI_EUGANEI_CCRTIT2T97A',
62
+ 'BANCA_AKROS_AKROITMM',
63
+ 'BANCA_ALETTI_ALETITMM',
64
+ 'BANCA_ALTO_VICENTINO_CREDITO_COOPERATIVO_DI_SCHIO_PEDEMONTE_E_ROANA_CCRTIT2TF01',
65
+ 'BANCA_CENTRO_EMILIA_CCRTIT2TBCE',
66
+ 'BANCA_CENTRO_LAZIO_CCRTIT2TBCL',
67
+ 'BANCA_CESARE_BCEPITMM',
68
+ 'BANCA_DEL_TERRITORIO_LOMBARDO_CCRTIT2TBTL',
69
+ 'BANCA_DI_BOLOGNA_BDBOIT21',
70
+ 'BANCA_DI_CARAGLIO_DEL_CUNEESE_E_DELLA_RIVIERA_DEI_FIORI_CCRTIT2TCAR',
71
+ 'BANCA_DI_MACERATA_PRACIT31',
72
+ 'BANCA_DI_RISPARMIO_DI_SAVIGLIANO_SARCIT2SXXX',
73
+ 'BANCA_EUROMOBILIARE_EUBAITM1',
74
+ 'BANCA_FIDEURAM_FIBKITMM',
75
+ 'BANCA_GALILEO_GAEOITM1',
76
+ 'BANCA_LAZIO_NORD_CREDITO_COOPERATIVO_SOC_COOP_PER_AZIONI_CCRTIT2TVIT',
77
+ 'BANCA_MALATESTIANA_CCRTIT2TMAL',
78
+ 'BANCA_MONTE_CORPORATE_PASCITMM',
79
+ 'BANCA_MONTE_RETAIL_PASCITMM',
80
+ 'BANCA_NAZIONALE_DEL_LAVORO_BNLIITRRXXX',
81
+ 'BANCA_NAZIONALE_DEL_LAVORO_CORPORATE_BNLIITRRXXX',
82
+ 'BANCA_PASSADORE_PASBITGGXXX',
83
+ 'BANCA_POPOLARE_DELLE_PROVINCIE_MOLISANE_PPMSIT31',
84
+ 'BANCA_POPOLARE_DEL_CASSINATE_PER_AZIONI_POCAIT3C',
85
+ 'BANCA_POPOLARE_DI_CORTONA_PER_AZIONI_POCSIT31019',
86
+ 'BANCA_POPOLARE_DI_LAJATICO_BLJAIT3LXXX',
87
+ 'BANCA_POPOLARE_DI_SONDRIO_POSOIT22XXX',
88
+ 'BANCA_POPOLARE_VESUVIANA_POVEIT33',
89
+ 'BANCA_PROMOS_PROSITNN',
90
+ 'BANCA_SANTA_GIULIA_SGIUIT21',
91
+ 'BANCA_SICANA_DI_SOMMATINO_SERRADIFALCO_E_SAMBUCA_DI_SICILIA_CCRTIT2TNIS',
92
+ 'BANCO_BPM_CORP_BAPPIT22',
93
+ 'BANCO_BPM_WEBANK_BAPPIT22',
94
+ 'BANCO_BPM_WEB_BAPPIT22',
95
+ 'BANCO_MARCHIGIANO_CREDITO_COOPERATIVO_CCRTIT2TCIV',
96
+ 'BCC_CASSA_RURALE_DI_VAL_DI_FIEMME_CCRTIT2T50A',
97
+ 'BCC_DEI_CASTELLI_E_DEGLI_IBLEI_CCRTIT2TIBL',
98
+ 'BCC_DEI_CASTELLI_ROMANI_CCRTIT2TCRT',
99
+ 'BCC_DELLALTA_MURGIA_CCRTIT2TMUR',
100
+ 'BCC_DELLALTO_TIRRENO_DELLA_CALABRIA_VERBICARO_CCRTIT2TATC',
101
+ 'BCC_DELLA_ROMAGNA_OCCIDENTALE_CCRTIT2TROC',
102
+ 'BCC_DELLE_PREALPI_CCRTIT2TPRE',
103
+ 'BCC_DEL_CIRCEO_E_PRIVERNATE_CCRTIT2TCIR',
104
+ 'BCC_DEL_FRIULI_CENTRALE_ICRAITRRU50',
105
+ 'BCC_DI_ALBEROBELLO_E_SAMMICHELE_DI_BARI_CCRTIT2TALB',
106
+ 'BCC_DI_ANAGNI_CCRTIT2TN00',
107
+ 'BCC_DI_AQUARA_CCRTIT2TAQU',
108
+ 'BCC_DI_BARLASSINA_MILANO_ICRAITRRAE0',
109
+ 'BCC_DI_BRESCIA_CREDITO_COOPERATIVO_DI_BRESCIA_CCRTIT2TH00',
110
+ 'BCC_DI_CASALGRASSO_E_SANTALBANO_STURA_CCRTIT2TCSS',
111
+ 'BCC_DI_CASSANO_DELLE_MURGE_E_TOLVE_CCRTIT2TCSM',
112
+ 'BCC_DI_CASTAGNETO_CARDUCCI_PER_AZIONI_BCCDIT3C',
113
+ 'BCC_DI_CHERASCO_CCRTIT2TCHE',
114
+ 'BCC_DI_CONVERSANO_CCRTIT2TT00',
115
+ 'BCC_DI_FLUMERI_ICRAITRRFD0',
116
+ 'BCC_DI_LOCOROTONDO_CASSA_RURALE_ED_ARTIGIANA_CCRTIT2TLND',
117
+ 'BCC_DI_PIANFEI_E_ROCCA_DE_BALDI_ICRAITRRKX0',
118
+ 'BCC_DI_SAN_GIOVANNI_ROTONDO_CCRTIT2TSGR',
119
+ 'BCC_DI_SAN_MARZANO_DI_SAN_GIUSEPPE_TARANTO_CCRTIT2TSMZ',
120
+ 'BCC_DI_SARSINA_CCRTIT2TSAR',
121
+ 'BCC_DI_SPELLO_E_BETTONA_CCRTIT2TSBE',
122
+ 'BCC_FELSINEA_CCRTIT2TFEL',
123
+ 'BCC_LAUDENSE_LODI_MILANO_CCRTIT2TLAU',
124
+ 'BCC_LA_RISCOSSA_DI_REGALBUTO_CCRTIT2TO00',
125
+ 'BCC_MONTE_PRUNO_DI_ROSCIGNO_E_DI_LAURINO_CCRTIT2TMPR',
126
+ 'BCC_SANGRO_TAETINA_DI_ATESSA_CASTIGLIONE_GIULIANO_CCRTIT2TTEA',
127
+ 'BCC_VALDOSTANA_CCRTIT2TVAL',
128
+ 'BENE_BANCA_CREDITO_COOPERATIVO_DI_BENE_VAGIENNA_CUNEO_CCRTIT2TBENBPER_CORP_BPMOIT22',
129
+ 'BPER_RETAIL_BPMOIT22',
130
+ 'CASSA_CENTRALE_BANCA_CCRTIT2T',
131
+ 'CASSA_PADANA_BCC_CCRTIT2TPAD',
132
+ 'CASSA_RAIFFEISEN_DI_SAN_MARTINO_IN_PASSIRIA_ICRAITRR6A0',
133
+ 'CASSA_RURALE_ALTA_VALLAGARINA_DI_BESENELLO_CALLIANO_NOMI_VOLANO_BANCA_DI_CEDITO_COOPERATIVO_CCRTIT2T77A',
134
+ 'CASSA_RURALE_ALTA_VALSUGANA_BCC_CCRTIT2T47A',
135
+ 'CASSA_RURALE_ALTO_GARDA_BCC_CCRTIT2T04A',
136
+ 'CASSA_RURALE_DELLA_BASSA_VALSUGANA_BCC_CCRTIT2T27A',
137
+ 'CASSA_RURALE_DI_LEDRO_BCC_CCRTIT2T06A',
138
+ 'CASSA_RURALE_DI_TRENTO_BCC_CCRTIT2T76A',
139
+ 'CASSA_RURALE_DOLOMITI_DI_FASSA_PRIMIERO_E_BELLUNO_BCC_CCRTIT2T38A',
140
+ 'CASSA_RURALE_ED_ARTIGIANA_DI_BOVES_BCC_ICRAITRRB10',
141
+ 'CASSA_RURALE_ED_ARTIGIANA_DI_CORTINA_DAMPEZZO_E_DELLE_DOLOMITI_CCRTIT2T95A',
142
+ 'CASSA_RURALE_GIUDICARIE_VALSABBIA_PAGANELLA_BCC_CCRTIT2T20A',
143
+ 'CASSA_RURALE_NOVELLA_E_ALTA_ANAUNIA_BCC_CCRTIT2T54A',
144
+ 'CASSA_RURALE_RENON_CCRTIT2TRIT',
145
+ 'CASSA_RURALE_ROTALIANA_E_GIOVO_BCC_CCRTIT2T37A',
146
+ 'CASSA_RURALE_VALLAGARINA_BCC_CCRTIT2T01A',
147
+ 'CASSA_RURALE_VAL_DI_NON_BCC_CCRTIT2T73A',
148
+ 'CASSA_RURALE_VAL_DI_SOLE_BCC_CCRTIT2T43A',
149
+ 'CENTROVENETO_BASSANO_BANCA_ICRAITRRGE0',
150
+ 'CHEBANCA_CORP_MICSITM1',
151
+ 'CREDEM_CORP_BACRIT22',
152
+ 'CREDEM_RETAIL_BACRIT22',
153
+ 'CREDITO_COOPERATIVO_CASSA_RURALE_ED_ARTIGIANA_DEL_FRIULI_VENEZIA_GIULIA_CCRTI2T96A',
154
+ 'CREDITO_COOPERATIVO_CENTRO_CALABRIA_CCRTIT2TCA',
155
+ 'CREDITO_ETNEO_BCC_CCRTIT2TETN',
156
+ 'CREDITO_LOMBARDO_VENETO_CRLVIT21',
157
+ 'FINDOMESTIC_FIDMIT31',
158
+ 'FRIULOVEST_BANCA_CCRTIT2TFOB',
159
+ 'GUBER_BANCA_GUBEIT21',
160
+ 'HELLO_BANK_BNLIITRRXXX',
161
+ 'HYPO_TIROL_BANK_HYPTIT2B',
162
+ 'INTESA_SANPAOLO_BCITITMMXXX',
163
+ 'INTESA_SANPAOLO_CORPORATE_BCITITMMXXX',
164
+ 'INTESA_SANPAOLO_PRIVATE_BCITITMMXXX',
165
+ 'ISYBANK_ITBBITMM',
166
+ 'MEDIOCREDITO_TRENTINO_ALTO_ADIGE_CCRTIT2TM00',
167
+ 'POSTE_ITALIANE_BANCO_POSTA_BPPIITRRXXX',
168
+ 'POSTE_ITALIANE_BANCO_POSTA_CORPORATE_BPPIITRRXXX',
169
+ 'POSTE_PAY_BPPIITRRXXX',
170
+ 'PRADER_BANK_PRRDIT21XXX',
171
+ 'ROMAGNABANCA_CCRTIT2TRMB',
172
+ 'ROVIGO_BANCA_ICRAITRRCK0',
173
+ 'SARDEGNA_CORP_SARDIT31',
174
+ 'SARDEGNA_RETAIL_SARDIT31',
175
+ 'SOLUTION_BANK_CRDRIT2FXXX',
176
+ 'WIDIBA_WIDIITMM',
177
+ 'ZADRUZNA_KRASKA_BANKA_TRST_GORICA_ZADRUGA_CCRTIT2TV00',
178
+ ].map(i => i.replace('*', ''));
179
+ export function isSpecialContinuousAccessBank(institutionId) {
180
+ return SPECIAL_CONTINUOUS_ACCESS_BANKS.some(i => institutionId.startsWith(i));
181
+ }
@@ -2,7 +2,7 @@ import jwt from 'jws';
2
2
  import * as nordigenNode from 'nordigen-node';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
4
  import { SecretName, secretsService } from '../../services/secrets-service.js';
5
- import { BankFactory } from '../bank-factory.js';
5
+ import { BankFactory, isSpecialContinuousAccessBank } from '../bank-factory.js';
6
6
  import { AccessDeniedError, AccountNotLinkedToRequisition, GenericGoCardlessError, InvalidInputDataError, InvalidGoCardlessTokenError, NotFoundError, RateLimitError, ResourceSuspended, RequisitionNotLinked, ServiceError, UnknownError, } from '../errors.js';
7
7
  const GoCardlessClient = nordigenNode.default;
8
8
  const clients = new Map();
@@ -239,7 +239,9 @@ export const goCardlessService = {
239
239
  institutionId,
240
240
  referenceId: uuidv4(),
241
241
  accessValidForDays: institution.max_access_valid_for_days,
242
- maxHistoricalDays: institution.transaction_total_days,
242
+ maxHistoricalDays: isSpecialContinuousAccessBank(institutionId)
243
+ ? 90
244
+ : institution.transaction_total_days,
243
245
  userLanguage: 'en',
244
246
  ssn: null,
245
247
  redirectImmediate: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actual-app/sync-server",
3
- "version": "25.11.0-nightly.20251021",
3
+ "version": "25.11.0-nightly.20251023",
4
4
  "license": "MIT",
5
5
  "description": "actual syncing server",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "start-monitor": "nodemon --exec 'tsc && node build/app' --ignore './build/**/*' --ext 'ts,js' build/app",
18
18
  "build": "tsc && yarn copy-static-assets",
19
19
  "copy-static-assets": "rm -rf build/src/sql && cp -r src/sql build/src/sql",
20
- "test": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules --trace-warnings' vitest",
20
+ "test": "NODE_ENV=test NODE_OPTIONS='--experimental-vm-modules --trace-warnings' vitest --run",
21
21
  "db:migrate": "yarn build && cross-env NODE_ENV=development node build/src/scripts/run-migrations.js up",
22
22
  "db:downgrade": "yarn build && cross-env NODE_ENV=development node build/src/scripts/run-migrations.js down",
23
23
  "db:test-migrate": "yarn build && cross-env NODE_ENV=test node build/src/scripts/run-migrations.js up",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@actual-app/crdt": "2.1.0",
31
- "@actual-app/web": "25.11.0-nightly.20251021",
31
+ "@actual-app/web": "25.11.0-nightly.20251023",
32
32
  "bcrypt": "^6.0.0",
33
33
  "better-sqlite3": "^12.4.1",
34
34
  "convict": "^6.2.4",