@actual-app/api 25.3.0 → 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 (121) hide show
  1. package/@types/app/bundle.api.d.ts +1 -5
  2. package/@types/loot-core/client/accounts/accountsSlice.d.ts +175 -0
  3. package/@types/loot-core/client/app/appSlice.d.ts +175 -0
  4. package/@types/loot-core/client/budgets/budgetsSlice.d.ts +405 -0
  5. package/@types/loot-core/client/modals/modalsSlice.d.ts +490 -0
  6. package/@types/loot-core/client/notifications/notificationsSlice.d.ts +47 -0
  7. package/@types/loot-core/client/platform.d.ts +1 -0
  8. package/@types/loot-core/client/prefs/prefsSlice.d.ts +178 -0
  9. package/@types/loot-core/client/queries/queriesSlice.d.ts +692 -0
  10. package/@types/loot-core/client/redux.d.ts +18546 -0
  11. package/@types/loot-core/client/store/index.d.ts +133 -0
  12. package/@types/loot-core/client/users/usersSlice.d.ts +105 -0
  13. package/@types/loot-core/mocks/index.d.ts +5 -2
  14. package/@types/loot-core/platform/client/fetch/index.d.ts +1 -10
  15. package/@types/loot-core/platform/client/undo/index.d.ts +19 -31
  16. package/@types/loot-core/platform/exceptions/index.d.ts +2 -5
  17. package/@types/loot-core/platform/server/asyncStorage/index.d.ts +5 -5
  18. package/@types/loot-core/platform/server/connection/index.d.ts +0 -3
  19. package/@types/loot-core/platform/server/fetch/index.d.ts +1 -4
  20. package/@types/loot-core/platform/server/indexeddb/index.d.ts +15 -24
  21. package/@types/loot-core/platform/server/log/index.d.ts +4 -6
  22. package/@types/loot-core/server/accounts/app.d.ts +19 -5
  23. package/@types/loot-core/server/accounts/link.d.ts +6 -1
  24. package/@types/loot-core/server/admin/app.d.ts +54 -1
  25. package/@types/loot-core/server/api-models.d.ts +24 -32
  26. package/@types/loot-core/server/aql/exec.d.ts +1 -1
  27. package/@types/loot-core/server/aql/schema/executors.d.ts +2 -0
  28. package/@types/loot-core/server/aql/schema/index.d.ts +9 -0
  29. package/@types/loot-core/server/auth/app.d.ts +142 -0
  30. package/@types/loot-core/server/budget/actions.d.ts +6 -5
  31. package/@types/loot-core/server/budget/app.d.ts +103 -2
  32. package/@types/loot-core/server/budget/base.d.ts +1 -1
  33. package/@types/loot-core/server/budget/cleanup-template.d.ts +1 -1
  34. package/@types/loot-core/server/budget/goaltemplates.d.ts +1 -1
  35. package/@types/loot-core/server/budget/statements.d.ts +2 -2
  36. package/@types/loot-core/server/budget/template-notes.d.ts +1 -1
  37. package/@types/loot-core/server/budget/types/templates.d.ts +2 -1
  38. package/@types/loot-core/server/budgetfiles/app.d.ts +139 -0
  39. package/@types/loot-core/server/cloud-storage.d.ts +3 -3
  40. package/@types/loot-core/server/dashboard/app.d.ts +35 -1
  41. package/@types/loot-core/server/db/index.d.ts +38 -31
  42. package/@types/loot-core/server/db/sort.d.ts +1 -1
  43. package/@types/loot-core/server/encryption/app.d.ts +40 -0
  44. package/@types/loot-core/server/{encryption-internals.d.ts → encryption/encryption-internals.d.ts} +5 -5
  45. package/@types/loot-core/server/{encryption.d.ts → encryption/index.d.ts} +3 -3
  46. package/@types/loot-core/server/errors.d.ts +4 -0
  47. package/@types/loot-core/server/filters/app.d.ts +10 -1
  48. package/@types/loot-core/server/importers/index.d.ts +1 -2
  49. package/@types/loot-core/server/main-app.d.ts +1 -1
  50. package/@types/loot-core/server/models.d.ts +24 -23
  51. package/@types/loot-core/server/notes/app.d.ts +6 -1
  52. package/@types/loot-core/server/payees/app.d.ts +48 -0
  53. package/@types/loot-core/server/preferences/app.d.ts +1 -10
  54. package/@types/loot-core/server/reports/app.d.ts +9 -1
  55. package/@types/loot-core/server/rules/app.d.ts +50 -1
  56. package/@types/loot-core/server/schedules/app.d.ts +25 -2
  57. package/@types/loot-core/server/schedules/find-schedules.d.ts +1 -1
  58. package/@types/loot-core/server/server-config.d.ts +1 -0
  59. package/@types/loot-core/server/sheet.d.ts +1 -1
  60. package/@types/loot-core/server/spreadsheet/app.d.ts +38 -0
  61. package/@types/loot-core/server/spreadsheet/graph-data-structure.d.ts +4 -4
  62. package/@types/loot-core/server/spreadsheet/spreadsheet.d.ts +12 -4
  63. package/@types/loot-core/server/sync/app.d.ts +38 -0
  64. package/@types/loot-core/server/sync/make-test-message.d.ts +1 -1
  65. package/@types/loot-core/server/tools/app.d.ts +13 -1
  66. package/@types/loot-core/server/transactions/app.d.ts +1 -1
  67. package/@types/loot-core/server/transactions/import/parse-file.d.ts +1 -0
  68. package/@types/loot-core/server/transactions/transaction-rules.d.ts +5 -4
  69. package/@types/loot-core/server/undo.d.ts +1 -1
  70. package/@types/loot-core/shared/async.d.ts +4 -3
  71. package/@types/loot-core/shared/errors.d.ts +4 -4
  72. package/@types/loot-core/shared/locale.d.ts +1 -0
  73. package/@types/loot-core/shared/months.d.ts +2 -2
  74. package/@types/loot-core/shared/schedules.d.ts +5 -3
  75. package/@types/loot-core/shared/util.d.ts +4 -1
  76. package/@types/loot-core/types/handlers.d.ts +22 -10
  77. package/@types/loot-core/types/models/account.d.ts +2 -1
  78. package/@types/loot-core/types/models/bank-sync.d.ts +1 -1
  79. package/@types/loot-core/types/models/category-group.d.ts +2 -6
  80. package/@types/loot-core/types/models/category.d.ts +1 -1
  81. package/@types/loot-core/types/models/index.d.ts +5 -1
  82. package/@types/loot-core/types/models/openid.d.ts +2 -1
  83. package/@types/loot-core/types/models/payee.d.ts +2 -2
  84. package/@types/loot-core/types/models/pluggyai.d.ts +18 -0
  85. package/@types/loot-core/types/models/user-access.d.ts +10 -0
  86. package/@types/loot-core/types/models/user.d.ts +17 -18
  87. package/@types/loot-core/types/prefs.d.ts +9 -1
  88. package/@types/loot-core/types/server-events.d.ts +1 -1
  89. package/@types/loot-core/types/server-handlers.d.ts +2 -276
  90. package/@types/loot-core/types/util.d.ts +7 -0
  91. package/dist/app/bundle.api.js +17509 -67076
  92. package/dist/index.js +17 -7
  93. package/dist/jest.config.js +0 -2
  94. package/dist/methods.js +17 -7
  95. package/dist/migrations/1740506588539_add_last_reconciled_at.sql +5 -0
  96. package/dist/package.json +8 -8
  97. package/dist/validateNodeVersion.js +17 -7
  98. package/package.json +8 -8
  99. package/@types/loot-core/client/constants.d.ts +0 -21
  100. package/@types/loot-core/client/state-types/budgets.d.ts +0 -36
  101. package/@types/loot-core/client/state-types/index.d.ts +0 -27
  102. package/@types/loot-core/client/state-types/modals.d.ts +0 -392
  103. package/@types/loot-core/client/state-types/notifications.d.ts +0 -57
  104. package/@types/loot-core/client/state-types/prefs.d.ts +0 -40
  105. package/@types/loot-core/client/state-types/user.d.ts +0 -13
  106. package/@types/loot-core/server/admin/types/handlers.d.ts +0 -43
  107. package/@types/loot-core/server/budget/types/handlers.d.ts +0 -91
  108. package/@types/loot-core/server/dashboard/types/handlers.d.ts +0 -24
  109. package/@types/loot-core/server/encryption-internals.web.d.ts +0 -23
  110. package/@types/loot-core/server/encryption.test.d.ts +0 -1
  111. package/@types/loot-core/server/filters/types/handlers.d.ts +0 -7
  112. package/@types/loot-core/server/notes/types/handlers.d.ts +0 -3
  113. package/@types/loot-core/server/reports/types/handlers.d.ts +0 -6
  114. package/@types/loot-core/server/rules/types/handlers.d.ts +0 -40
  115. package/@types/loot-core/server/schedules/types/handlers.d.ts +0 -31
  116. package/@types/loot-core/server/tools/types/handlers.d.ts +0 -11
  117. package/@types/loot-core/types/models/userAccess.d.ts +0 -9
  118. package/@types/methods.test.d.ts +0 -1
  119. package/dist/methods.test.js +0 -541
  120. /package/@types/loot-core/server/{backups.test.d.ts → api.test.d.ts} +0 -0
  121. /package/@types/loot-core/server/{backups.d.ts → budgetfiles/backups.d.ts} +0 -0
@@ -1,194 +1,16 @@
1
- import { Backup } from '../server/backups';
2
- import { RemoteFile } from '../server/cloud-storage';
3
- import { Node as SpreadsheetNode } from '../server/spreadsheet/spreadsheet';
4
- import { Message } from '../server/sync';
5
-
6
- import { Budget } from './budget';
7
- import {
8
- CategoryEntity,
9
- CategoryGroupEntity,
10
- RuleEntity,
11
- PayeeEntity,
12
- } from './models';
13
- import { OpenIdConfig } from './models/openid';
14
- // eslint-disable-next-line import/no-unresolved
15
- import { Query } from './query';
16
- import { EmptyObject } from './util';
1
+ import { QueryState } from '../shared/query';
17
2
 
18
3
  export interface ServerHandlers {
19
4
  undo: () => Promise<void>;
20
5
  redo: () => Promise<void>;
21
6
 
22
- 'get-categories': () => Promise<{
23
- grouped: Array<CategoryGroupEntity>;
24
- list: Array<CategoryEntity>;
25
- }>;
26
-
27
- 'get-earliest-transaction': () => Promise<{ date: string }>;
28
-
29
- 'get-budget-bounds': () => Promise<{ start: string; end: string }>;
30
-
31
- 'envelope-budget-month': (arg: { month }) => Promise<
32
- {
33
- value: string | number | boolean;
34
- name: string;
35
- }[]
36
- >;
37
-
38
- 'tracking-budget-month': (arg: { month }) => Promise<
39
- {
40
- value: string | number | boolean;
41
- name: string;
42
- }[]
43
- >;
44
-
45
- 'category-create': (arg: {
46
- name;
47
- groupId;
48
- isIncome?;
49
- hidden?: boolean;
50
- }) => Promise<string>;
51
-
52
- 'category-update': (category) => Promise<unknown>;
53
-
54
- 'category-move': (arg: { id; groupId; targetId }) => Promise<unknown>;
55
-
56
- 'category-delete': (arg: { id; transferId? }) => Promise<{ error?: string }>;
57
-
58
- 'category-group-create': (arg: {
59
- name;
60
- isIncome?: boolean;
61
- hidden?: boolean;
62
- }) => Promise<string>;
63
-
64
- 'category-group-update': (group) => Promise<unknown>;
65
-
66
- 'category-group-move': (arg: { id; targetId }) => Promise<unknown>;
67
-
68
- 'category-group-delete': (arg: { id; transferId }) => Promise<unknown>;
69
-
70
- 'must-category-transfer': (arg: { id }) => Promise<unknown>;
71
-
72
- 'payee-create': (arg: { name }) => Promise<string>;
73
-
74
- 'common-payees-get': () => Promise<PayeeEntity[]>;
75
-
76
- 'payees-get': () => Promise<PayeeEntity[]>;
77
-
78
- 'payees-get-rule-counts': () => Promise<Record<PayeeEntity['id'], number>>;
79
-
80
- 'payees-merge': (arg: { targetId; mergeIds }) => Promise<void>;
81
-
82
- 'payees-batch-change': (arg: {
83
- added?;
84
- deleted?;
85
- updated?;
86
- }) => Promise<unknown>;
87
-
88
- 'payees-check-orphaned': (arg: { ids }) => Promise<unknown>;
89
- 'payees-get-orphaned': () => Promise<PayeeEntity[]>;
90
-
91
- 'payees-get-rules': (arg: { id: string }) => Promise<RuleEntity[]>;
92
-
93
7
  'make-filters-from-conditions': (arg: {
94
8
  conditions: unknown;
95
9
  applySpecialCases?: boolean;
96
10
  }) => Promise<{ filters: unknown[] }>;
97
11
 
98
- getCell: (arg: { sheetName; name }) => Promise<{
99
- name: SpreadsheetNode['name'];
100
- value: SpreadsheetNode['value'];
101
- }>;
102
-
103
- getCells: (arg: {
104
- names;
105
- }) => Promise<
106
- Array<{ name: SpreadsheetNode['name']; value?: SpreadsheetNode['value'] }>
107
- >;
108
-
109
- getCellNamesInSheet: (arg: {
110
- sheetName;
111
- }) => Promise<Array<SpreadsheetNode['name']>>;
112
-
113
- debugCell: (arg: { sheetName; name }) => Promise<unknown>;
114
-
115
- 'create-query': (arg: { sheetName; name; query }) => Promise<'ok'>;
116
-
117
12
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
- query: (query: Query) => Promise<{ data: any; dependencies: string[] }>;
119
-
120
- 'sync-reset': () => Promise<{ error?: { reason: string; meta?: unknown } }>;
121
-
122
- 'sync-repair': () => Promise<unknown>;
123
-
124
- 'key-make': (arg: {
125
- password;
126
- }) => Promise<{ error?: { reason: string; meta?: unknown } }>;
127
-
128
- 'key-test': (arg: {
129
- fileId;
130
- password;
131
- }) => Promise<{ error?: { reason: string } }>;
132
-
133
- 'get-did-bootstrap': () => Promise<boolean>;
134
-
135
- 'subscribe-needs-bootstrap': (args: { url }) => Promise<
136
- | { error: string }
137
- | {
138
- bootstrapped: boolean;
139
- hasServer: false;
140
- }
141
- | {
142
- bootstrapped: boolean;
143
- hasServer: true;
144
- availableLoginMethods: {
145
- method: string;
146
- displayName: string;
147
- active: boolean;
148
- }[];
149
- multiuser: boolean;
150
- }
151
- >;
152
-
153
- 'subscribe-get-login-methods': () => Promise<{
154
- methods?: { method: string; displayName: string; active: boolean }[];
155
- error?: string;
156
- }>;
157
-
158
- 'subscribe-bootstrap': (arg: {
159
- password?: string;
160
- openId?: OpenIdConfig;
161
- }) => Promise<{ error?: string }>;
162
-
163
- 'subscribe-get-user': () => Promise<{
164
- offline: boolean;
165
- userName?: string;
166
- userId?: string;
167
- displayName?: string;
168
- permission?: string;
169
- loginMethod?: string;
170
- tokenExpired?: boolean;
171
- } | null>;
172
-
173
- 'subscribe-change-password': (arg: {
174
- password;
175
- }) => Promise<{ error?: string }>;
176
-
177
- 'subscribe-sign-in': (
178
- arg:
179
- | {
180
- password;
181
- loginMethod?: string;
182
- }
183
- | {
184
- return_url;
185
- loginMethod?: 'openid';
186
- },
187
- ) => Promise<{ error?: string; redirect_url?: string }>;
188
-
189
- 'subscribe-sign-out': () => Promise<'ok'>;
190
-
191
- 'subscribe-set-token': (arg: { token: string }) => Promise<void>;
13
+ query: (query: QueryState) => Promise<{ data: any; dependencies: string[] }>;
192
14
 
193
15
  'get-server-version': () => Promise<{ error?: string } | { version: string }>;
194
16
 
@@ -199,101 +21,5 @@ export interface ServerHandlers {
199
21
  validate?: boolean;
200
22
  }) => Promise<{ error?: string }>;
201
23
 
202
- sync: () => Promise<
203
- | { error: { message: string; reason: string; meta: unknown } }
204
- | { messages: Message[] }
205
- >;
206
-
207
- 'validate-budget-name': (arg: {
208
- name: string;
209
- }) => Promise<{ valid: boolean; message?: string }>;
210
-
211
- 'unique-budget-name': (arg: { name: string }) => Promise<string>;
212
-
213
- 'get-budgets': () => Promise<Budget[]>;
214
-
215
- 'get-remote-files': () => Promise<RemoteFile[]>;
216
-
217
- 'get-user-file-info': (fileId: string) => Promise<RemoteFile | null>;
218
-
219
- 'reset-budget-cache': () => Promise<unknown>;
220
-
221
- 'upload-budget': (arg: { id }) => Promise<{ error?: string }>;
222
-
223
- 'download-budget': (arg: { fileId; replace? }) => Promise<{ error; id }>;
224
-
225
- 'sync-budget': () => Promise<{
226
- error?: { message: string; reason: string; meta: unknown };
227
- }>;
228
-
229
- 'load-budget': (arg: { id: string }) => Promise<{ error }>;
230
-
231
- 'create-demo-budget': () => Promise<unknown>;
232
-
233
- 'close-budget': () => Promise<'ok'>;
234
-
235
- 'delete-budget': (arg: {
236
- id?: string | undefined;
237
- cloudFileId?: string | undefined;
238
- }) => Promise<'ok' | 'fail'>;
239
-
240
- /**
241
- * Duplicates a budget file.
242
- * @param {Object} arg - The arguments for duplicating a budget.
243
- * @param {string} [arg.id] - The ID of the local budget to duplicate.
244
- * @param {string} [arg.cloudId] - The ID of the cloud-synced budget to duplicate.
245
- * @param {string} arg.newName - The name for the duplicated budget.
246
- * @param {boolean} [arg.cloudSync] - Whether to sync the duplicated budget to the cloud.
247
- * @returns {Promise<string>} The ID of the newly created budget.
248
- */
249
- 'duplicate-budget': (arg: {
250
- id?: string | undefined;
251
- cloudId?: string | undefined;
252
- newName: string;
253
- cloudSync?: boolean;
254
- open: 'none' | 'original' | 'copy';
255
- }) => Promise<string>;
256
-
257
- 'create-budget': (arg: {
258
- budgetName?;
259
- avoidUpload?;
260
- testMode?: boolean;
261
- testBudgetId?;
262
- }) => Promise<unknown>;
263
-
264
- 'import-budget': (arg: {
265
- filepath: string;
266
- type: 'ynab4' | 'ynab5' | 'actual';
267
- }) => Promise<{ error?: string }>;
268
-
269
- 'export-budget': () => Promise<{ data: Buffer } | { error: string }>;
270
-
271
- 'upload-file-web': (arg: {
272
- filename: string;
273
- contents: ArrayBuffer;
274
- }) => Promise<EmptyObject | null>;
275
-
276
- 'backups-get': (arg: { id: string }) => Promise<Backup[]>;
277
-
278
- 'backup-load': (arg: { id: string; backupId: string }) => Promise<void>;
279
-
280
- 'backup-make': (arg: { id: string }) => Promise<void>;
281
-
282
- 'get-last-opened-backup': () => Promise<string | null>;
283
-
284
24
  'app-focused': () => Promise<void>;
285
-
286
- 'enable-openid': (arg: {
287
- openId?: OpenIdConfig;
288
- }) => Promise<{ error?: string }>;
289
-
290
- 'enable-password': (arg: { password: string }) => Promise<{ error?: string }>;
291
-
292
- 'get-openid-config': () => Promise<
293
- | {
294
- openId: OpenIdConfig;
295
- }
296
- | { error: string }
297
- | null
298
- >;
299
25
  }
@@ -14,3 +14,10 @@ export type WithRequired<T, K extends keyof T> = T & Required<Pick<T, K>>;
14
14
  // see https://github.com/i18next/react-i18next/issues/1483
15
15
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
16
  export type TransObjectLiteral = any;
17
+
18
+ export type AtLeastOne<T extends Record<string, unknown>> =
19
+ keyof T extends infer K
20
+ ? K extends string
21
+ ? Pick<T, K & keyof T> & Partial<T>
22
+ : never
23
+ : never;