@actual-app/api 25.2.1 → 25.3.1

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 (57) hide show
  1. package/@types/index.d.ts +0 -1
  2. package/@types/loot-core/client/state-types/modals.d.ts +8 -2
  3. package/@types/loot-core/client/state-types/notifications.d.ts +14 -12
  4. package/@types/loot-core/mocks/index.d.ts +1 -4
  5. package/@types/loot-core/platform/client/fetch/index.d.ts +15 -9
  6. package/@types/loot-core/platform/server/asyncStorage/index.d.ts +20 -6
  7. package/@types/loot-core/server/accounts/app.d.ts +149 -0
  8. package/@types/loot-core/server/accounts/payees.d.ts +3 -3
  9. package/@types/loot-core/server/accounts/sync.d.ts +19 -13
  10. package/@types/loot-core/server/aql/exec.d.ts +1 -1
  11. package/@types/loot-core/server/aql/schema/index.d.ts +6 -0
  12. package/@types/loot-core/server/budget/categoryTemplate.d.ts +3 -1
  13. package/@types/loot-core/server/budget/statements.d.ts +2 -2
  14. package/@types/loot-core/server/budget/types/templates.d.ts +2 -1
  15. package/@types/loot-core/server/db/index.d.ts +30 -24
  16. package/@types/loot-core/server/db/types/index.d.ts +259 -0
  17. package/@types/loot-core/server/errors.d.ts +11 -4
  18. package/@types/loot-core/server/importers/ynab5-types.d.ts +2 -0
  19. package/@types/loot-core/server/main-app.d.ts +1 -1
  20. package/@types/loot-core/server/main.d.ts +1 -0
  21. package/@types/loot-core/server/post.d.ts +1 -1
  22. package/@types/loot-core/server/preferences/app.d.ts +29 -2
  23. package/@types/loot-core/server/rules/types/handlers.d.ts +1 -1
  24. package/@types/loot-core/server/schedules/app.d.ts +1 -1
  25. package/@types/loot-core/server/transactions/app.d.ts +58 -0
  26. package/@types/loot-core/server/{accounts → transactions/import}/parse-file.d.ts +1 -1
  27. package/@types/loot-core/server/{accounts → transactions}/transaction-rules.d.ts +4 -3
  28. package/@types/loot-core/server/util/custom-sync-mapping.d.ts +4 -0
  29. package/@types/loot-core/shared/transactions.d.ts +4 -0
  30. package/@types/loot-core/shared/util.d.ts +3 -4
  31. package/@types/loot-core/types/api-handlers.d.ts +2 -1
  32. package/@types/loot-core/types/handlers.d.ts +6 -2
  33. package/@types/loot-core/types/models/account.d.ts +3 -0
  34. package/@types/loot-core/types/models/bank-sync.d.ts +2 -0
  35. package/@types/loot-core/types/models/bank.d.ts +6 -0
  36. package/@types/loot-core/types/models/gocardless.d.ts +8 -0
  37. package/@types/loot-core/types/models/simplefin.d.ts +8 -0
  38. package/@types/loot-core/types/models/transaction.d.ts +1 -0
  39. package/@types/loot-core/types/prefs.d.ts +26 -0
  40. package/@types/loot-core/types/server-handlers.d.ts +19 -169
  41. package/@types/methods.d.ts +12 -12
  42. package/dist/app/bundle.api.js +20819 -19585
  43. package/dist/index.js +1 -3
  44. package/dist/migrations/1739139550000_bank_sync_page.sql +7 -0
  45. package/dist/package.json +1 -1
  46. package/package.json +1 -1
  47. package/@types/loot-core/server/db/types.d.ts +0 -9
  48. package/@types/loot-core/server/preferences/types/handlers.d.ts +0 -10
  49. /package/@types/loot-core/server/{accounts/rules.d.ts → rules/index.d.ts} +0 -0
  50. /package/@types/loot-core/server/{accounts → transactions/export}/export-to-csv.d.ts +0 -0
  51. /package/@types/loot-core/server/{accounts → transactions/import}/ofx2json.d.ts +0 -0
  52. /package/@types/loot-core/server/{accounts → transactions/import}/qif2json.d.ts +0 -0
  53. /package/@types/loot-core/server/{accounts → transactions/import}/xmlcamt2json.d.ts +0 -0
  54. /package/@types/loot-core/server/{accounts/transactions.d.ts → transactions/index.d.ts} +0 -0
  55. /package/@types/loot-core/server/{accounts → transactions}/transfer.d.ts +0 -0
  56. /package/dist/migrations/{1736640000000__custom_report_sorting.sql → 1736640000000_custom_report_sorting.sql} +0 -0
  57. /package/dist/migrations/{1738491452000__sorting_rename.sql → 1738491452000_sorting_rename.sql} +0 -0
@@ -73,3 +73,11 @@ export type GoCardlessTransaction = {
73
73
  valueDate?: string;
74
74
  valueDateTime?: string;
75
75
  };
76
+
77
+ export type SyncServerGoCardlessAccount = {
78
+ institution: string;
79
+ account_id: string;
80
+ mask: string;
81
+ name: string;
82
+ official_name: string;
83
+ };
@@ -17,3 +17,11 @@ export type SimpleFinAccount = {
17
17
  export interface SimpleFinBatchSyncResponse {
18
18
  [accountId: AccountEntity['account_id']]: BankSyncResponse;
19
19
  }
20
+
21
+ export type SyncServerSimpleFinAccount = {
22
+ account_id: string;
23
+ institution?: string;
24
+ orgDomain?: string;
25
+ orgId?: string;
26
+ name: string;
27
+ };
@@ -32,4 +32,5 @@ export interface TransactionEntity {
32
32
  version: 1;
33
33
  difference: number;
34
34
  } | null;
35
+ raw_synced_data?: string | undefined;
35
36
  }
@@ -1,5 +1,6 @@
1
1
  export type FeatureFlag =
2
2
  | 'goalTemplatesEnabled'
3
+ | 'goalTemplatesUIEnabled'
3
4
  | 'actionTemplating'
4
5
  | 'contextMenus'
5
6
  | 'openidAuth';
@@ -28,6 +29,9 @@ export type SyncedPrefs = Partial<
28
29
  | `csv-in-out-mode-${string}`
29
30
  | `csv-out-value-${string}`
30
31
  | `csv-has-header-${string}`
32
+ | `custom-sync-mappings-${string}`
33
+ | `sync-import-pending-${string}`
34
+ | `sync-import-notes-${string}`
31
35
  | `ofx-fallback-missing-payee-${string}`
32
36
  | `flip-amount-${string}-${'csv' | 'qif'}`
33
37
  | `flags.${FeatureFlag}`
@@ -73,6 +77,8 @@ export type LocalPrefs = Partial<{
73
77
 
74
78
  export type Theme = 'light' | 'dark' | 'auto' | 'midnight' | 'development';
75
79
  export type DarkTheme = 'dark' | 'midnight';
80
+
81
+ // GlobalPrefs are the parsed global-store.json values
76
82
  export type GlobalPrefs = Partial<{
77
83
  floatingSidebar: boolean;
78
84
  maxMonths: number;
@@ -84,4 +90,24 @@ export type GlobalPrefs = Partial<{
84
90
  serverSelfSignedCert: string; // Electron only
85
91
  }>;
86
92
 
93
+ // GlobalPrefsJson represents what's saved in the global-store.json file
94
+ export type GlobalPrefsJson = Partial<{
95
+ 'user-id'?: string;
96
+ 'user-key'?: string;
97
+ 'encrypt-keys'?: string;
98
+ lastBudget?: string;
99
+ readOnly?: string;
100
+ 'server-url'?: string;
101
+ 'did-bootstrap'?: boolean;
102
+ 'user-token'?: string;
103
+ 'floating-sidebar'?: string; // "true" or "false"
104
+ 'max-months'?: string; // e.g. "2" or "3"
105
+ 'document-dir'?: GlobalPrefs['documentDir'];
106
+ 'encrypt-key'?: string;
107
+ language?: GlobalPrefs['language'];
108
+ theme?: GlobalPrefs['theme'];
109
+ 'preferred-dark-theme'?: GlobalPrefs['preferredDarkTheme'];
110
+ 'server-self-signed-cert'?: GlobalPrefs['serverSelfSignedCert'];
111
+ }>;
112
+
87
113
  export type AuthMethods = 'password' | 'openid';
@@ -1,59 +1,24 @@
1
- import { ImportTransactionsOpts } from '@actual-app/api';
2
-
3
- import { ParseFileResult } from '../server/accounts/parse-file';
4
- import { batchUpdateTransactions } from '../server/accounts/transactions';
5
1
  import { Backup } from '../server/backups';
6
2
  import { RemoteFile } from '../server/cloud-storage';
7
3
  import { Node as SpreadsheetNode } from '../server/spreadsheet/spreadsheet';
8
4
  import { Message } from '../server/sync';
9
- import { QueryState } from '../shared/query';
10
5
 
11
6
  import { Budget } from './budget';
12
7
  import {
13
- AccountEntity,
14
8
  CategoryEntity,
15
9
  CategoryGroupEntity,
16
- GoCardlessToken,
17
- GoCardlessInstitution,
18
- SimpleFinAccount,
19
10
  RuleEntity,
20
11
  PayeeEntity,
21
12
  } from './models';
22
13
  import { OpenIdConfig } from './models/openid';
23
- import { GlobalPrefs, MetadataPrefs } from './prefs';
24
14
  // eslint-disable-next-line import/no-unresolved
25
15
  import { Query } from './query';
26
16
  import { EmptyObject } from './util';
27
17
 
28
18
  export interface ServerHandlers {
29
- 'transaction-update': (transaction: { id: string }) => Promise<EmptyObject>;
30
-
31
19
  undo: () => Promise<void>;
32
-
33
20
  redo: () => Promise<void>;
34
21
 
35
- 'transactions-batch-update': (
36
- ...arg: Parameters<typeof batchUpdateTransactions>
37
- ) => ReturnType<typeof batchUpdateTransactions>;
38
-
39
- 'transaction-add': (transaction) => Promise<EmptyObject>;
40
-
41
- 'transaction-delete': (transaction) => Promise<EmptyObject>;
42
-
43
- 'transactions-parse-file': (arg: {
44
- filepath: string;
45
- options;
46
- }) => Promise<ParseFileResult>;
47
-
48
- 'transactions-export': (arg: {
49
- transactions;
50
- accounts?;
51
- categoryGroups;
52
- payees;
53
- }) => Promise<unknown>;
54
-
55
- 'transactions-export-query': (arg: { query: QueryState }) => Promise<string>;
56
-
57
22
  'get-categories': () => Promise<{
58
23
  grouped: Array<CategoryGroupEntity>;
59
24
  list: Array<CategoryEntity>;
@@ -93,6 +58,7 @@ export interface ServerHandlers {
93
58
  'category-group-create': (arg: {
94
59
  name;
95
60
  isIncome?: boolean;
61
+ hidden?: boolean;
96
62
  }) => Promise<string>;
97
63
 
98
64
  'category-group-update': (group) => Promise<unknown>;
@@ -126,146 +92,30 @@ export interface ServerHandlers {
126
92
 
127
93
  'make-filters-from-conditions': (arg: {
128
94
  conditions: unknown;
95
+ applySpecialCases?: boolean;
129
96
  }) => Promise<{ filters: unknown[] }>;
130
97
 
131
- getCell: (arg: {
132
- sheetName;
133
- name;
134
- }) => Promise<SpreadsheetNode | { value?: SpreadsheetNode['value'] }>;
135
-
136
- getCells: (arg: { names }) => Promise<unknown>;
137
-
138
- getCellNamesInSheet: (arg: { sheetName }) => Promise<unknown>;
139
-
140
- debugCell: (arg: { sheetName; name }) => Promise<unknown>;
141
-
142
- 'create-query': (arg: { sheetName; name; query }) => Promise<unknown>;
143
-
144
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
145
- query: (query: Query) => Promise<{ data: any; dependencies: string[] }>;
146
-
147
- 'account-update': (arg: { id; name }) => Promise<unknown>;
148
-
149
- 'accounts-get': () => Promise<AccountEntity[]>;
150
-
151
- 'account-properties': (arg: {
152
- id;
153
- }) => Promise<{ balance: number; numTransactions: number }>;
154
-
155
- 'gocardless-accounts-link': (arg: {
156
- requisitionId;
157
- account;
158
- upgradingId;
159
- offBudget;
160
- }) => Promise<'ok'>;
161
-
162
- 'simplefin-accounts-link': (arg: {
163
- externalAccount;
164
- upgradingId;
165
- offBudget;
166
- }) => Promise<'ok'>;
167
-
168
- 'account-create': (arg: {
169
- name: string;
170
- balance?: number;
171
- offBudget?: boolean;
172
- closed?: 0 | 1;
173
- }) => Promise<string>;
174
-
175
- 'account-close': (arg: {
176
- id;
177
- transferAccountId?;
178
- categoryId?;
179
- forced?;
180
- }) => Promise<unknown>;
181
-
182
- 'account-reopen': (arg: { id }) => Promise<unknown>;
183
-
184
- 'account-move': (arg: { id; targetId }) => Promise<unknown>;
185
-
186
- 'secret-set': (arg: {
187
- name: string;
188
- value: string | null;
189
- }) => Promise<{ error?: string; reason?: string }>;
190
- 'secret-check': (arg: string) => Promise<string | { error?: string }>;
191
-
192
- 'gocardless-poll-web-token': (arg: {
193
- upgradingAccountId?: string;
194
- requisitionId: string;
195
- }) => Promise<
196
- { error: 'unknown' } | { error: 'timeout' } | { data: GoCardlessToken }
197
- >;
198
-
199
- 'gocardless-status': () => Promise<{ configured: boolean }>;
200
-
201
- 'simplefin-status': () => Promise<{ configured: boolean }>;
202
-
203
- 'simplefin-accounts': () => Promise<{
204
- accounts?: SimpleFinAccount[];
205
- error_code?: string;
206
- reason?: string;
98
+ getCell: (arg: { sheetName; name }) => Promise<{
99
+ name: SpreadsheetNode['name'];
100
+ value: SpreadsheetNode['value'];
207
101
  }>;
208
102
 
209
- 'simplefin-batch-sync': ({ ids }: { ids: string[] }) => Promise<
210
- {
211
- accountId: string;
212
- res: {
213
- errors;
214
- newTransactions;
215
- matchedTransactions;
216
- updatedAccounts;
217
- };
218
- }[]
219
- >;
220
-
221
- 'gocardless-get-banks': (country: string) => Promise<{
222
- data: GoCardlessInstitution[];
223
- error?: { reason: string };
224
- }>;
225
-
226
- 'gocardless-poll-web-token-stop': () => Promise<'ok'>;
227
-
228
- 'gocardless-create-web-token': (arg: {
229
- upgradingAccountId?: string;
230
- institutionId: string;
231
- accessValidForDays: number;
103
+ getCells: (arg: {
104
+ names;
232
105
  }) => Promise<
233
- | {
234
- requisitionId: string;
235
- link: string;
236
- }
237
- | { error: 'unauthorized' }
238
- | { error: 'failed' }
106
+ Array<{ name: SpreadsheetNode['name']; value?: SpreadsheetNode['value'] }>
239
107
  >;
240
108
 
241
- 'accounts-bank-sync': (arg: { ids?: AccountEntity['id'][] }) => Promise<{
242
- errors;
243
- newTransactions;
244
- matchedTransactions;
245
- updatedAccounts;
246
- }>;
247
-
248
- 'transactions-import': (arg: {
249
- accountId;
250
- transactions;
251
- isPreview;
252
- opts?: ImportTransactionsOpts;
253
- }) => Promise<{
254
- errors?: { message: string }[];
255
- added;
256
- updated;
257
- updatedPreview;
258
- }>;
259
-
260
- 'account-unlink': (arg: { id }) => Promise<'ok'>;
261
-
262
- 'save-global-prefs': (prefs) => Promise<'ok'>;
109
+ getCellNamesInSheet: (arg: {
110
+ sheetName;
111
+ }) => Promise<Array<SpreadsheetNode['name']>>;
263
112
 
264
- 'load-global-prefs': () => Promise<GlobalPrefs>;
113
+ debugCell: (arg: { sheetName; name }) => Promise<unknown>;
265
114
 
266
- 'save-prefs': (prefsToSet) => Promise<'ok'>;
115
+ 'create-query': (arg: { sheetName; name; query }) => Promise<'ok'>;
267
116
 
268
- 'load-prefs': () => Promise<MetadataPrefs | null>;
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ query: (query: Query) => Promise<{ data: any; dependencies: string[] }>;
269
119
 
270
120
  'sync-reset': () => Promise<{ error?: { reason: string; meta?: unknown } }>;
271
121
 
@@ -383,8 +233,8 @@ export interface ServerHandlers {
383
233
  'close-budget': () => Promise<'ok'>;
384
234
 
385
235
  'delete-budget': (arg: {
386
- id?: string;
387
- cloudFileId?: string;
236
+ id?: string | undefined;
237
+ cloudFileId?: string | undefined;
388
238
  }) => Promise<'ok' | 'fail'>;
389
239
 
390
240
  /**
@@ -397,8 +247,8 @@ export interface ServerHandlers {
397
247
  * @returns {Promise<string>} The ID of the newly created budget.
398
248
  */
399
249
  'duplicate-budget': (arg: {
400
- id?: string;
401
- cloudId?: string;
250
+ id?: string | undefined;
251
+ cloudId?: string | undefined;
402
252
  newName: string;
403
253
  cloudSync?: boolean;
404
254
  open: 'none' | 'original' | 'copy';
@@ -4,7 +4,7 @@ export declare function loadBudget(budgetId: any): Promise<void>;
4
4
  export declare function downloadBudget(syncId: any, { password }?: {
5
5
  password?: any;
6
6
  }): Promise<void>;
7
- export declare function getBudgets(): Promise<import("./loot-core/server/api-models").APIFileEntity[]>;
7
+ export declare function getBudgets(): Promise<import("./@types/loot-core/server/api-models").APIFileEntity[]>;
8
8
  export declare function sync(): Promise<void>;
9
9
  export declare function runBankSync(args?: {
10
10
  accountId: string;
@@ -41,8 +41,8 @@ export declare function importTransactions(accountId: any, transactions: any, op
41
41
  added: any;
42
42
  updated: any;
43
43
  }>;
44
- export declare function getTransactions(accountId: any, startDate: any, endDate: any): Promise<import("./loot-core/types/models").TransactionEntity[]>;
45
- export declare function updateTransaction(id: any, fields: any): Promise<import("./loot-core/types/models").TransactionEntity[] | ({
44
+ export declare function getTransactions(accountId: any, startDate: any, endDate: any): Promise<import("./@types/loot-core/types/models").TransactionEntity[]>;
45
+ export declare function updateTransaction(id: any, fields: any): Promise<import("./@types/loot-core/types/models").TransactionEntity[] | ({
46
46
  id: any;
47
47
  transfer_id: any;
48
48
  } | {
@@ -50,33 +50,33 @@ export declare function updateTransaction(id: any, fields: any): Promise<import(
50
50
  category: any;
51
51
  })[]>;
52
52
  export declare function deleteTransaction(id: any): Promise<any>;
53
- export declare function getAccounts(): Promise<import("./loot-core/server/api-models").APIAccountEntity[]>;
53
+ export declare function getAccounts(): Promise<import("./@types/loot-core/server/api-models").APIAccountEntity[]>;
54
54
  export declare function createAccount(account: any, initialBalance?: any): Promise<string>;
55
55
  export declare function updateAccount(id: any, fields: any): Promise<void>;
56
56
  export declare function closeAccount(id: any, transferAccountId?: any, transferCategoryId?: any): Promise<unknown>;
57
57
  export declare function reopenAccount(id: any): Promise<unknown>;
58
58
  export declare function deleteAccount(id: any): Promise<unknown>;
59
59
  export declare function getAccountBalance(id: any, cutoff?: any): Promise<number>;
60
- export declare function getCategoryGroups(): Promise<import("./loot-core/server/api-models").APICategoryGroupEntity[]>;
60
+ export declare function getCategoryGroups(): Promise<import("./@types/loot-core/server/api-models").APICategoryGroupEntity[]>;
61
61
  export declare function createCategoryGroup(group: any): Promise<string>;
62
62
  export declare function updateCategoryGroup(id: any, fields: any): Promise<unknown>;
63
63
  export declare function deleteCategoryGroup(id: any, transferCategoryId?: any): Promise<unknown>;
64
- export declare function getCategories(): Promise<(import("./loot-core/server/api-models").APICategoryGroupEntity | import("./loot-core/server/api-models").APICategoryEntity)[]>;
64
+ export declare function getCategories(): Promise<(import("./@types/loot-core/server/api-models").APICategoryGroupEntity | import("./@types/loot-core/server/api-models").APICategoryEntity)[]>;
65
65
  export declare function createCategory(category: any): Promise<string>;
66
66
  export declare function updateCategory(id: any, fields: any): Promise<unknown>;
67
67
  export declare function deleteCategory(id: any, transferCategoryId?: any): Promise<{
68
68
  error?: string;
69
69
  }>;
70
- export declare function getCommonPayees(): Promise<import("./loot-core/server/api-models").APIPayeeEntity[]>;
71
- export declare function getPayees(): Promise<import("./loot-core/server/api-models").APIPayeeEntity[]>;
70
+ export declare function getCommonPayees(): Promise<import("./@types/loot-core/server/api-models").APIPayeeEntity[]>;
71
+ export declare function getPayees(): Promise<import("./@types/loot-core/server/api-models").APIPayeeEntity[]>;
72
72
  export declare function createPayee(payee: any): Promise<string>;
73
73
  export declare function updatePayee(id: any, fields: any): Promise<unknown>;
74
74
  export declare function deletePayee(id: any): Promise<unknown>;
75
75
  export declare function mergePayees(targetId: any, mergeIds: any): Promise<void>;
76
- export declare function getRules(): Promise<import("./loot-core/types/models").RuleEntity[]>;
77
- export declare function getPayeeRules(id: any): Promise<import("./loot-core/types/models").RuleEntity[]>;
78
- export declare function createRule(rule: any): Promise<import("./loot-core/types/models").RuleEntity>;
79
- export declare function updateRule(rule: any): Promise<import("./loot-core/types/models").RuleEntity>;
76
+ export declare function getRules(): Promise<import("./@types/loot-core/types/models").RuleEntity[]>;
77
+ export declare function getPayeeRules(id: any): Promise<import("./@types/loot-core/types/models").RuleEntity[]>;
78
+ export declare function createRule(rule: any): Promise<import("./@types/loot-core/types/models").RuleEntity>;
79
+ export declare function updateRule(rule: any): Promise<import("./@types/loot-core/types/models").RuleEntity>;
80
80
  export declare function deleteRule(id: string): Promise<boolean>;
81
81
  export declare function holdBudgetForNextMonth(month: any, amount: any): Promise<boolean>;
82
82
  export declare function resetBudgetHold(month: any): Promise<void>;