@actual-app/sync-server 25.4.0-alpha.0

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.
Files changed (137) hide show
  1. package/.dockerignore +12 -0
  2. package/README.md +19 -0
  3. package/app.js +11 -0
  4. package/babel.config.json +3 -0
  5. package/bin/@actual-app/sync-server +55 -0
  6. package/docker/alpine.Dockerfile +62 -0
  7. package/docker/ubuntu.Dockerfile +63 -0
  8. package/docker-compose.yml +29 -0
  9. package/jest.config.json +19 -0
  10. package/jest.global-setup.js +101 -0
  11. package/jest.global-teardown.js +6 -0
  12. package/migrations/1694360000000-create-folders.js +25 -0
  13. package/migrations/1694360479680-create-account-db.js +30 -0
  14. package/migrations/1694362247011-create-secret-table.js +16 -0
  15. package/migrations/1702667624000-rename-nordigen-secrets.js +19 -0
  16. package/migrations/1718889148000-openid.js +41 -0
  17. package/migrations/1719409568000-multiuser.js +116 -0
  18. package/package.json +64 -0
  19. package/src/account-db.js +239 -0
  20. package/src/accounts/openid.js +361 -0
  21. package/src/accounts/password.js +149 -0
  22. package/src/app-account.js +155 -0
  23. package/src/app-admin.js +410 -0
  24. package/src/app-admin.test.js +381 -0
  25. package/src/app-gocardless/README.md +198 -0
  26. package/src/app-gocardless/app-gocardless.js +274 -0
  27. package/src/app-gocardless/bank-factory.js +91 -0
  28. package/src/app-gocardless/banks/abanca_caglesmm.js +22 -0
  29. package/src/app-gocardless/banks/abnamro_abnanl2a.js +57 -0
  30. package/src/app-gocardless/banks/american_express_aesudef1.js +40 -0
  31. package/src/app-gocardless/banks/bancsabadell_bsabesbbb.js +31 -0
  32. package/src/app-gocardless/banks/bank.interface.ts +51 -0
  33. package/src/app-gocardless/banks/bank_of_ireland_b365_bofiie2d.js +39 -0
  34. package/src/app-gocardless/banks/bankinter_bkbkesmm.js +24 -0
  35. package/src/app-gocardless/banks/belfius_gkccbebb.js +17 -0
  36. package/src/app-gocardless/banks/berliner_sparkasse_beladebexxx.js +61 -0
  37. package/src/app-gocardless/banks/bnp_be_gebabebb.js +73 -0
  38. package/src/app-gocardless/banks/cbc_cregbebb.js +34 -0
  39. package/src/app-gocardless/banks/commerzbank_cobadeff.js +51 -0
  40. package/src/app-gocardless/banks/danskebank_dabno22.js +39 -0
  41. package/src/app-gocardless/banks/direkt_heladef1822.js +18 -0
  42. package/src/app-gocardless/banks/easybank_bawaatww.js +50 -0
  43. package/src/app-gocardless/banks/entercard_swednokk.js +40 -0
  44. package/src/app-gocardless/banks/fortuneo_ftnofrp1xxx.js +46 -0
  45. package/src/app-gocardless/banks/hype_hyeeit22.js +74 -0
  46. package/src/app-gocardless/banks/ing_ingbrobu.js +70 -0
  47. package/src/app-gocardless/banks/ing_ingddeff.js +47 -0
  48. package/src/app-gocardless/banks/ing_pl_ingbplpw.js +46 -0
  49. package/src/app-gocardless/banks/integration-bank.js +115 -0
  50. package/src/app-gocardless/banks/isybank_itbbitmm.js +18 -0
  51. package/src/app-gocardless/banks/kbc_kredbebb.js +33 -0
  52. package/src/app-gocardless/banks/lhv-lhvbee22.js +36 -0
  53. package/src/app-gocardless/banks/mbank_retail_brexplpw.js +56 -0
  54. package/src/app-gocardless/banks/nationwide_naiagb21.js +46 -0
  55. package/src/app-gocardless/banks/nbg_ethngraaxxx.js +51 -0
  56. package/src/app-gocardless/banks/norwegian_xx_norwnok1.js +74 -0
  57. package/src/app-gocardless/banks/revolut_revolt21.js +37 -0
  58. package/src/app-gocardless/banks/sandboxfinance_sfin0000.js +28 -0
  59. package/src/app-gocardless/banks/seb_kort_bank_ab.js +58 -0
  60. package/src/app-gocardless/banks/seb_privat.js +29 -0
  61. package/src/app-gocardless/banks/sparnord_spnodk22.js +24 -0
  62. package/src/app-gocardless/banks/spk_karlsruhe_karsde66.js +61 -0
  63. package/src/app-gocardless/banks/spk_marburg_biedenkopf_heladef1mar.js +30 -0
  64. package/src/app-gocardless/banks/spk_worms_alzey_ried_malade51wor.js +19 -0
  65. package/src/app-gocardless/banks/ssk_dusseldorf_dussdeddxxx.js +50 -0
  66. package/src/app-gocardless/banks/swedbank_habalv22.js +47 -0
  67. package/src/app-gocardless/banks/tests/abanca_caglesmm.spec.js +21 -0
  68. package/src/app-gocardless/banks/tests/abnamro_abnanl2a.spec.js +61 -0
  69. package/src/app-gocardless/banks/tests/bancsabadell_bsabesbbb.spec.js +53 -0
  70. package/src/app-gocardless/banks/tests/belfius_gkccbebb.spec.js +22 -0
  71. package/src/app-gocardless/banks/tests/cbc_cregbebb.spec.js +34 -0
  72. package/src/app-gocardless/banks/tests/commerzbank_cobadeff.spec.js +110 -0
  73. package/src/app-gocardless/banks/tests/easybank_bawaatww.spec.js +54 -0
  74. package/src/app-gocardless/banks/tests/fortuneo_ftnofrp1xxx.spec.js +206 -0
  75. package/src/app-gocardless/banks/tests/ing_ingddeff.spec.js +302 -0
  76. package/src/app-gocardless/banks/tests/ing_pl_ingbplpw.spec.js +202 -0
  77. package/src/app-gocardless/banks/tests/integration_bank.spec.js +158 -0
  78. package/src/app-gocardless/banks/tests/kbc_kredbebb.spec.js +38 -0
  79. package/src/app-gocardless/banks/tests/lhv-lhvbee22.spec.js +68 -0
  80. package/src/app-gocardless/banks/tests/mbank_retail_brexplpw.spec.js +171 -0
  81. package/src/app-gocardless/banks/tests/nationwide_naiagb21.spec.js +105 -0
  82. package/src/app-gocardless/banks/tests/nbg_ethngraaxxx.spec.js +48 -0
  83. package/src/app-gocardless/banks/tests/revolut_revolt21.spec.js +42 -0
  84. package/src/app-gocardless/banks/tests/sandboxfinance_sfin0000.spec.js +133 -0
  85. package/src/app-gocardless/banks/tests/spk_marburg_biedenkopf_heladef1mar.spec.js +256 -0
  86. package/src/app-gocardless/banks/tests/ssk_dusseldorf_dussdeddxxx.spec.js +102 -0
  87. package/src/app-gocardless/banks/tests/swedbank_habalv22.spec.js +57 -0
  88. package/src/app-gocardless/banks/tests/virgin_nrnbgb22.spec.js +54 -0
  89. package/src/app-gocardless/banks/util/extract-payeeName-from-remittanceInfo.js +36 -0
  90. package/src/app-gocardless/banks/virgin_nrnbgb22.js +39 -0
  91. package/src/app-gocardless/errors.js +84 -0
  92. package/src/app-gocardless/gocardless-node.types.ts +497 -0
  93. package/src/app-gocardless/gocardless.types.ts +93 -0
  94. package/src/app-gocardless/link.html +18 -0
  95. package/src/app-gocardless/services/gocardless-service.js +620 -0
  96. package/src/app-gocardless/services/tests/fixtures.js +181 -0
  97. package/src/app-gocardless/services/tests/gocardless-service.spec.js +537 -0
  98. package/src/app-gocardless/tests/bank-factory.spec.js +20 -0
  99. package/src/app-gocardless/tests/utils.spec.js +162 -0
  100. package/src/app-gocardless/util/handle-error.js +16 -0
  101. package/src/app-gocardless/utils.js +45 -0
  102. package/src/app-openid.js +108 -0
  103. package/src/app-pluggyai/app-pluggyai.js +215 -0
  104. package/src/app-pluggyai/pluggyai-service.js +120 -0
  105. package/src/app-secrets.js +61 -0
  106. package/src/app-simplefin/app-simplefin.js +418 -0
  107. package/src/app-sync/errors.js +13 -0
  108. package/src/app-sync/services/files-service.js +243 -0
  109. package/src/app-sync/tests/services/files-service.test.js +250 -0
  110. package/src/app-sync/validation.js +77 -0
  111. package/src/app-sync.js +391 -0
  112. package/src/app-sync.test.js +877 -0
  113. package/src/app.js +145 -0
  114. package/src/config-types.ts +44 -0
  115. package/src/db.js +58 -0
  116. package/src/load-config.js +307 -0
  117. package/src/migrations.js +36 -0
  118. package/src/run-migrations.js +8 -0
  119. package/src/scripts/disable-openid.js +44 -0
  120. package/src/scripts/enable-openid.js +53 -0
  121. package/src/scripts/health-check.js +23 -0
  122. package/src/scripts/reset-password.js +51 -0
  123. package/src/secrets.test.js +83 -0
  124. package/src/services/secrets-service.js +94 -0
  125. package/src/services/user-service.js +272 -0
  126. package/src/sql/messages.sql +9 -0
  127. package/src/sync-simple.js +95 -0
  128. package/src/util/hash.js +5 -0
  129. package/src/util/middlewares.js +62 -0
  130. package/src/util/paths.js +13 -0
  131. package/src/util/payee-name.js +45 -0
  132. package/src/util/prompt.js +88 -0
  133. package/src/util/title/index.js +59 -0
  134. package/src/util/title/lower-case.js +93 -0
  135. package/src/util/title/specials.js +21 -0
  136. package/src/util/validate-user.js +68 -0
  137. package/tsconfig.json +21 -0
@@ -0,0 +1,181 @@
1
+ /** @type {{balances: import('../../gocardless-node.types.js').Balance[]}} */
2
+ export const mockedBalances = {
3
+ balances: [
4
+ {
5
+ balanceAmount: {
6
+ amount: '657.49',
7
+ currency: 'string',
8
+ },
9
+ balanceType: 'interimAvailable',
10
+ referenceDate: '2021-11-22',
11
+ },
12
+ {
13
+ balanceAmount: {
14
+ amount: '185.67',
15
+ currency: 'string',
16
+ },
17
+ balanceType: 'interimAvailable',
18
+ referenceDate: '2021-11-19',
19
+ },
20
+ ],
21
+ };
22
+
23
+ /** @type {{transactions: import('../../gocardless-node.types.js').Transactions}} */
24
+ export const mockTransactions = {
25
+ transactions: {
26
+ booked: [
27
+ {
28
+ transactionId: 'string',
29
+ debtorName: 'string',
30
+ debtorAccount: {
31
+ iban: 'string',
32
+ },
33
+ transactionAmount: {
34
+ currency: 'EUR',
35
+ amount: '328.18',
36
+ },
37
+ bankTransactionCode: 'string',
38
+ bookingDate: '2000-01-01',
39
+ valueDate: '2000-01-01',
40
+ },
41
+ {
42
+ transactionId: 'string',
43
+ transactionAmount: {
44
+ currency: 'EUR',
45
+ amount: '947.26',
46
+ },
47
+ bankTransactionCode: 'string',
48
+ bookingDate: '2000-01-01',
49
+ valueDate: '2000-01-01',
50
+ },
51
+ ],
52
+ pending: [
53
+ {
54
+ transactionAmount: {
55
+ currency: 'EUR',
56
+ amount: '947.26',
57
+ },
58
+ valueDate: '2000-01-01',
59
+ },
60
+ ],
61
+ },
62
+ };
63
+
64
+ export const mockUnknownError = {
65
+ summary: "Couldn't update account balances",
66
+ detail: 'Request to Institution returned an error',
67
+ type: 'UnknownRequestError',
68
+ status_code: 500,
69
+ };
70
+
71
+ /** @type {{account: import('../../gocardless-node.types.js').GoCardlessAccountDetails}} */
72
+ export const mockAccountDetails = {
73
+ account: {
74
+ resourceId: 'PL00000000000000000987654321',
75
+ iban: 'PL00000000000000000987654321',
76
+ currency: 'PLN',
77
+ ownerName: 'JOHN EXAMPLE',
78
+ product: 'Savings Account for Individuals (Retail)',
79
+ bic: 'INGBPLPW',
80
+ ownerAddressUnstructured: ['EXAMPLE STREET 100/001', '00-000 EXAMPLE CITY'],
81
+ },
82
+ };
83
+
84
+ /** @type {import('../../gocardless-node.types.js').GoCardlessAccountMetadata} */
85
+ export const mockAccountMetaData = {
86
+ id: 'f0e49aa6-f6db-48fc-94ca-4a62372fadf4',
87
+ created: '2022-07-24T20:45:47.847062Z',
88
+ last_accessed: '2023-01-25T22:12:27.814618Z',
89
+ iban: 'PL00000000000000000987654321',
90
+ institution_id: 'SANDBOXFINANCE_SFIN0000',
91
+ status: 'READY',
92
+ owner_name: 'JOHN EXAMPLE',
93
+ };
94
+
95
+ /** @type {import('../../gocardless.types.js').DetailedAccount} */
96
+ export const mockDetailedAccount = {
97
+ ...mockAccountDetails.account,
98
+ ...mockAccountMetaData,
99
+ };
100
+
101
+ /** @type {import('../../gocardless-node.types.js').Institution} */
102
+ export const mockInstitution = {
103
+ id: 'N26_NTSBDEB1',
104
+ name: 'N26 Bank',
105
+ bic: 'NTSBDEB1',
106
+ transaction_total_days: '90',
107
+ max_access_valid_for_days: '90',
108
+ countries: ['GB', 'NO', 'SE'],
109
+ logo: 'https://cdn.nordigen.com/ais/N26_SANDBOX_NTSBDEB1.png',
110
+ };
111
+
112
+ /** @type {import('../../gocardless-node.types.js').Requisition} */
113
+ export const mockRequisition = {
114
+ id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
115
+ created: '2023-01-31T18:15:50.172Z',
116
+ redirect: 'string',
117
+ status: 'LN',
118
+ institution_id: 'string',
119
+ agreement: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
120
+ reference: 'string',
121
+ accounts: ['f0e49aa6-f6db-48fc-94ca-4a62372fadf4'],
122
+ user_language: 'string',
123
+ link: 'https://ob.nordigen.com/psd2/start/3fa85f64-5717-4562-b3fc-2c963f66afa6/{$INSTITUTION_ID}',
124
+ ssn: 'string',
125
+ account_selection: false,
126
+ redirect_immediate: false,
127
+ };
128
+
129
+ export const mockDeleteRequisition = {
130
+ summary: 'Requisition deleted',
131
+ detail:
132
+ "Requisition '$REQUISITION_ID' deleted with all its End User Agreements",
133
+ };
134
+
135
+ export const mockCreateRequisition = {
136
+ id: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
137
+ created: '2023-02-01T15:53:29.481Z',
138
+ redirect: 'string',
139
+ status: 'CR',
140
+ institution_id: 'string',
141
+ agreement: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
142
+ reference: 'string',
143
+ accounts: [],
144
+ user_language: 'string',
145
+ link: 'https://ob.nordigen.com/psd2/start/3fa85f64-5717-4562-b3fc-2c963f66afa6/{$INSTITUTION_ID}',
146
+ ssn: 'string',
147
+ account_selection: false,
148
+ redirect_immediate: false,
149
+ };
150
+
151
+ /** @type {import('../../gocardless.types.js').DetailedAccount} */
152
+ export const mockDetailedAccountExample1 = {
153
+ ...mockDetailedAccount,
154
+ name: 'account-example-one',
155
+ };
156
+
157
+ /** @type {import('../../gocardless.types.js').DetailedAccount} */
158
+ export const mockDetailedAccountExample2 = {
159
+ ...mockDetailedAccount,
160
+ name: 'account-example-two',
161
+ };
162
+
163
+ /** @type {import('../../gocardless.types.js').DetailedAccountWithInstitution[]} */
164
+ export const mockExtendAccountsAboutInstitutions = [
165
+ {
166
+ ...mockDetailedAccountExample1,
167
+ institution: mockInstitution,
168
+ },
169
+ {
170
+ ...mockDetailedAccountExample2,
171
+ institution: mockInstitution,
172
+ },
173
+ ];
174
+
175
+ export const mockRequisitionWithExampleAccounts = {
176
+ ...mockRequisition,
177
+
178
+ accounts: [mockDetailedAccountExample1.id, mockDetailedAccountExample2.id],
179
+ };
180
+
181
+ export const mockTransactionAmount = { amount: '100', currency: 'EUR' };