@actual-app/api 6.7.1 → 6.8.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 (175) hide show
  1. package/@types/app/bundle.api.d.ts +6 -0
  2. package/@types/app/query.d.ts +19 -0
  3. package/@types/index.d.ts +7 -0
  4. package/@types/injected.d.ts +2 -0
  5. package/@types/jest.config.d.ts +9 -0
  6. package/@types/loot-core/client/actions/types.d.ts +6 -0
  7. package/@types/loot-core/client/constants.d.ts +29 -0
  8. package/@types/loot-core/client/platform.d.ts +4 -0
  9. package/@types/loot-core/client/state-types/account.d.ts +27 -0
  10. package/@types/loot-core/client/state-types/app.d.ts +37 -0
  11. package/@types/loot-core/client/state-types/budgets.d.ts +36 -0
  12. package/@types/loot-core/client/state-types/index.d.ts +41 -0
  13. package/@types/loot-core/client/state-types/modals.d.ts +292 -0
  14. package/@types/loot-core/client/state-types/notifications.d.ts +38 -0
  15. package/@types/loot-core/client/state-types/prefs.d.ts +28 -0
  16. package/@types/loot-core/client/state-types/queries.d.ts +69 -0
  17. package/@types/loot-core/client/state-types/user.d.ts +13 -0
  18. package/@types/loot-core/mocks/budget.d.ts +2 -0
  19. package/@types/loot-core/mocks/index.d.ts +26 -0
  20. package/@types/loot-core/mocks/random.d.ts +1 -0
  21. package/@types/loot-core/mocks/util.d.ts +7 -0
  22. package/@types/loot-core/platform/client/fetch/index.d.ts +48 -0
  23. package/@types/loot-core/platform/client/undo/index.d.ts +29 -0
  24. package/@types/loot-core/platform/exceptions/index.d.ts +5 -0
  25. package/@types/loot-core/platform/server/asyncStorage/index.d.ts +20 -0
  26. package/@types/loot-core/platform/server/connection/index.d.ts +23 -0
  27. package/@types/loot-core/platform/server/fetch/index.d.ts +4 -0
  28. package/@types/loot-core/platform/server/fs/index.d.ts +71 -0
  29. package/@types/loot-core/platform/server/fs/path-join.d.ts +2 -0
  30. package/@types/loot-core/platform/server/indexeddb/index.d.ts +24 -0
  31. package/@types/loot-core/platform/server/log/index.d.ts +9 -0
  32. package/@types/loot-core/platform/server/sqlite/index.d.ts +35 -0
  33. package/@types/loot-core/server/accounts/export-to-csv.d.ts +2 -0
  34. package/@types/loot-core/server/accounts/link.d.ts +1 -0
  35. package/@types/loot-core/server/accounts/ofx2json.d.ts +14 -0
  36. package/@types/loot-core/server/accounts/parse-file.d.ts +15 -0
  37. package/@types/loot-core/server/accounts/payees.d.ts +5 -0
  38. package/@types/loot-core/server/accounts/qif2json.d.ts +26 -0
  39. package/@types/loot-core/server/accounts/rules.d.ts +90 -0
  40. package/@types/loot-core/server/accounts/sync.d.ts +13 -0
  41. package/@types/loot-core/server/accounts/title/index.d.ts +3 -0
  42. package/@types/loot-core/server/accounts/title/lower-case.d.ts +1 -0
  43. package/@types/loot-core/server/accounts/title/specials.d.ts +1 -0
  44. package/@types/loot-core/server/accounts/transaction-rules.d.ts +47 -0
  45. package/@types/loot-core/server/accounts/transactions.d.ts +33 -0
  46. package/@types/loot-core/server/accounts/transfer.d.ts +37 -0
  47. package/@types/loot-core/server/accounts/xmlcamt2json.d.ts +10 -0
  48. package/@types/loot-core/server/api-models.d.ts +66 -0
  49. package/@types/loot-core/server/api.d.ts +3 -0
  50. package/@types/loot-core/server/app.d.ts +14 -0
  51. package/@types/loot-core/server/aql/compiler.d.ts +56 -0
  52. package/@types/loot-core/server/aql/exec.d.ts +9 -0
  53. package/@types/loot-core/server/aql/index.d.ts +5 -0
  54. package/@types/loot-core/server/aql/schema/executors.d.ts +6 -0
  55. package/@types/loot-core/server/aql/schema/index.d.ts +340 -0
  56. package/@types/loot-core/server/aql/schema/run-query.d.ts +6 -0
  57. package/@types/loot-core/server/aql/schema-helpers.d.ts +8 -0
  58. package/@types/loot-core/server/aql/views.d.ts +1 -0
  59. package/@types/loot-core/server/backups.d.ts +16 -0
  60. package/@types/loot-core/server/backups.test.d.ts +1 -0
  61. package/@types/loot-core/server/budget/actions.d.ts +63 -0
  62. package/@types/loot-core/server/budget/app.d.ts +12 -0
  63. package/@types/loot-core/server/budget/base.d.ts +17 -0
  64. package/@types/loot-core/server/budget/cleanup-template.d.ts +4 -0
  65. package/@types/loot-core/server/budget/goals/goalsAverage.d.ts +4 -0
  66. package/@types/loot-core/server/budget/goals/goalsBy.d.ts +5 -0
  67. package/@types/loot-core/server/budget/goals/goalsPercentage.d.ts +4 -0
  68. package/@types/loot-core/server/budget/goals/goalsRemainder.d.ts +8 -0
  69. package/@types/loot-core/server/budget/goals/goalsSchedule.d.ts +6 -0
  70. package/@types/loot-core/server/budget/goals/goalsSimple.d.ts +7 -0
  71. package/@types/loot-core/server/budget/goals/goalsSpend.d.ts +4 -0
  72. package/@types/loot-core/server/budget/goals/goalsWeek.d.ts +7 -0
  73. package/@types/loot-core/server/budget/goaltemplates.d.ts +12 -0
  74. package/@types/loot-core/server/budget/report.d.ts +2 -0
  75. package/@types/loot-core/server/budget/rollover.d.ts +4 -0
  76. package/@types/loot-core/server/budget/types/handlers.d.ts +77 -0
  77. package/@types/loot-core/server/budget/util.d.ts +4 -0
  78. package/@types/loot-core/server/cloud-storage.d.ts +33 -0
  79. package/@types/loot-core/server/db/index.d.ts +60 -0
  80. package/@types/loot-core/server/db/mappings.d.ts +3 -0
  81. package/@types/loot-core/server/db/sort.d.ts +11 -0
  82. package/@types/loot-core/server/db/util.d.ts +2 -0
  83. package/@types/loot-core/server/encryption-internals.d.ts +24 -0
  84. package/@types/loot-core/server/encryption-internals.web.d.ts +24 -0
  85. package/@types/loot-core/server/encryption.d.ts +41 -0
  86. package/@types/loot-core/server/encryption.test.d.ts +1 -0
  87. package/@types/loot-core/server/errors.d.ts +73 -0
  88. package/@types/loot-core/server/filters/app.d.ts +12 -0
  89. package/@types/loot-core/server/filters/types/handlers.d.ts +7 -0
  90. package/@types/loot-core/server/importers/actual.d.ts +4 -0
  91. package/@types/loot-core/server/importers/index.d.ts +6 -0
  92. package/@types/loot-core/server/importers/ynab4-types.d.ts +167 -0
  93. package/@types/loot-core/server/importers/ynab4.d.ts +5 -0
  94. package/@types/loot-core/server/importers/ynab5-types.d.ts +79 -0
  95. package/@types/loot-core/server/importers/ynab5.d.ts +5 -0
  96. package/@types/loot-core/server/main-app.d.ts +12 -0
  97. package/@types/loot-core/server/main.d.ts +28 -0
  98. package/@types/loot-core/server/main.test.d.ts +1 -0
  99. package/@types/loot-core/server/migrate/migrations.d.ts +9 -0
  100. package/@types/loot-core/server/models.d.ts +38 -0
  101. package/@types/loot-core/server/mutators.d.ts +17 -0
  102. package/@types/loot-core/server/notes/app.d.ts +12 -0
  103. package/@types/loot-core/server/notes/types/handlers.d.ts +3 -0
  104. package/@types/loot-core/server/platform.d.ts +3 -0
  105. package/@types/loot-core/server/platform.web.d.ts +3 -0
  106. package/@types/loot-core/server/polyfills.d.ts +0 -0
  107. package/@types/loot-core/server/post.d.ts +3 -0
  108. package/@types/loot-core/server/prefs.d.ts +10 -0
  109. package/@types/loot-core/server/reports/app.d.ts +12 -0
  110. package/@types/loot-core/server/reports/types/handlers.d.ts +6 -0
  111. package/@types/loot-core/server/rules/app.d.ts +12 -0
  112. package/@types/loot-core/server/rules/types/handlers.d.ts +42 -0
  113. package/@types/loot-core/server/schedules/app.d.ts +35 -0
  114. package/@types/loot-core/server/schedules/find-schedules.d.ts +1 -0
  115. package/@types/loot-core/server/schedules/types/handlers.d.ts +31 -0
  116. package/@types/loot-core/server/server-config.d.ts +10 -0
  117. package/@types/loot-core/server/sheet.d.ts +11 -0
  118. package/@types/loot-core/server/sheet.test.d.ts +1 -0
  119. package/@types/loot-core/server/spreadsheet/globals.d.ts +1 -0
  120. package/@types/loot-core/server/spreadsheet/graph-data-structure.d.ts +15 -0
  121. package/@types/loot-core/server/spreadsheet/spreadsheet.d.ts +79 -0
  122. package/@types/loot-core/server/spreadsheet/util.d.ts +5 -0
  123. package/@types/loot-core/server/sync/encoder.d.ts +9 -0
  124. package/@types/loot-core/server/sync/index.d.ts +47 -0
  125. package/@types/loot-core/server/sync/make-test-message.d.ts +10 -0
  126. package/@types/loot-core/server/sync/migrate.d.ts +2 -0
  127. package/@types/loot-core/server/sync/repair.d.ts +6 -0
  128. package/@types/loot-core/server/sync/reset.d.ts +6 -0
  129. package/@types/loot-core/server/sync/utils.d.ts +3 -0
  130. package/@types/loot-core/server/tools/app.d.ts +12 -0
  131. package/@types/loot-core/server/tools/types/handlers.d.ts +7 -0
  132. package/@types/loot-core/server/undo.d.ts +14 -0
  133. package/@types/loot-core/server/update.d.ts +1 -0
  134. package/@types/loot-core/server/util/budget-name.d.ts +2 -0
  135. package/@types/loot-core/server/util/rschedule.d.ts +5 -0
  136. package/@types/loot-core/shared/async.d.ts +3 -0
  137. package/@types/loot-core/shared/environment.d.ts +4 -0
  138. package/@types/loot-core/shared/errors.d.ts +22 -0
  139. package/@types/loot-core/shared/months.d.ts +62 -0
  140. package/@types/loot-core/shared/query.d.ts +31 -0
  141. package/@types/loot-core/shared/rules.d.ts +62 -0
  142. package/@types/loot-core/shared/schedules.d.ts +43 -0
  143. package/@types/loot-core/shared/transactions.d.ts +91 -0
  144. package/@types/loot-core/shared/util.d.ts +67 -0
  145. package/@types/loot-core/types/api-handlers.d.ts +158 -0
  146. package/@types/loot-core/types/budget.d.ts +7 -0
  147. package/@types/loot-core/types/file.d.ts +38 -0
  148. package/@types/loot-core/types/handlers.d.ts +23 -0
  149. package/@types/loot-core/types/models/account.d.ts +21 -0
  150. package/@types/loot-core/types/models/category-group.d.ts +11 -0
  151. package/@types/loot-core/types/models/category.d.ts +9 -0
  152. package/@types/loot-core/types/models/gocardless.d.ts +14 -0
  153. package/@types/loot-core/types/models/index.d.ts +12 -0
  154. package/@types/loot-core/types/models/note.d.ts +4 -0
  155. package/@types/loot-core/types/models/payee.d.ts +10 -0
  156. package/@types/loot-core/types/models/reports.d.ts +123 -0
  157. package/@types/loot-core/types/models/rule.d.ts +71 -0
  158. package/@types/loot-core/types/models/schedule.d.ts +58 -0
  159. package/@types/loot-core/types/models/simplefin.d.ts +10 -0
  160. package/@types/loot-core/types/models/transaction-filter.d.ts +7 -0
  161. package/@types/loot-core/types/models/transaction.d.ts +40 -0
  162. package/@types/loot-core/types/prefs.d.ts +69 -0
  163. package/@types/loot-core/types/server-events.d.ts +21 -0
  164. package/@types/loot-core/types/server-handlers.d.ts +344 -0
  165. package/@types/loot-core/types/util.d.ts +5 -0
  166. package/@types/methods.d.ts +85 -0
  167. package/@types/methods.test.d.ts +1 -0
  168. package/@types/migrations/1632571489012_remove_cache.d.ts +1 -0
  169. package/@types/utils.d.ts +2 -0
  170. package/@types/validateNodeVersion.d.ts +1 -0
  171. package/dist/app/bundle.api.js +430 -5643
  172. package/dist/methods.js +25 -1
  173. package/dist/methods.test.js +205 -5
  174. package/dist/package.json +7 -5
  175. package/package.json +7 -5
@@ -0,0 +1,7 @@
1
+ export interface ToolsHandlers {
2
+ 'tools/fix-split-transactions': () => Promise<{
3
+ numBlankPayees: number;
4
+ numCleared: number;
5
+ numDeleted: number;
6
+ }>;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { type HandlerFunctions } from '../types/handlers';
2
+ import { Message } from './sync';
3
+ export type UndoState = {
4
+ messages: Message[];
5
+ meta?: unknown;
6
+ tables: string[];
7
+ undoTag: string;
8
+ };
9
+ export declare function appendMessages(messages: any, oldData: any): void;
10
+ export declare function clearUndo(): void;
11
+ export declare function withUndo<T>(func: () => Promise<T>, meta?: unknown): Promise<T>;
12
+ export declare function undoable<T extends HandlerFunctions>(func: T): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
13
+ export declare function undo(): Promise<void>;
14
+ export declare function redo(): Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function updateVersion(): Promise<void>;
@@ -0,0 +1,2 @@
1
+ export declare function uniqueFileName(existingFiles: any): Promise<string>;
2
+ export declare function idFromFileName(name: any): Promise<string>;
@@ -0,0 +1,5 @@
1
+ import '@rschedule/standard-date-adapter/setup';
2
+ import '@rschedule/json-tools/Schedule';
3
+ export * from '@rschedule/standard-date-adapter';
4
+ export * from '@rschedule/core';
5
+ export * from '@rschedule/core/generators';
@@ -0,0 +1,3 @@
1
+ import { type HandlerFunctions } from '../types/handlers';
2
+ export declare function sequential<T extends HandlerFunctions>(fn: T): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
3
+ export declare function once<T extends HandlerFunctions>(fn: T): (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>> | null;
@@ -0,0 +1,4 @@
1
+ export declare function isPreviewEnvironment(): boolean;
2
+ export declare function isDevelopmentEnvironment(): boolean;
3
+ export declare function isNonProductionEnvironment(): boolean;
4
+ export declare function isElectron(): boolean;
@@ -0,0 +1,22 @@
1
+ export declare function getUploadError({ reason, meta, }: {
2
+ reason: string;
3
+ meta?: unknown;
4
+ }): string;
5
+ export declare function getDownloadError({ reason, meta, fileName }: {
6
+ reason: any;
7
+ meta: any;
8
+ fileName: any;
9
+ }): string;
10
+ export declare function getCreateKeyError(error: any): string;
11
+ export declare function getTestKeyError({ reason }: {
12
+ reason: any;
13
+ }): string;
14
+ export declare function getSyncError(error: any, id: any): string;
15
+ export declare function getBankSyncError(error: {
16
+ message?: string;
17
+ }): string;
18
+ export declare class LazyLoadFailedError extends Error {
19
+ type: string;
20
+ meta: {};
21
+ constructor(name: string);
22
+ }
@@ -0,0 +1,62 @@
1
+ import { type LocalPrefs } from '../types/prefs';
2
+ type DateLike = string | Date;
3
+ export declare function _parse(value: DateLike): Date;
4
+ export declare const parseDate: typeof _parse;
5
+ export declare function yearFromDate(date: DateLike): string;
6
+ export declare function monthFromDate(date: DateLike): string;
7
+ export declare function weekFromDate(date: DateLike, firstDayOfWeekIdx: LocalPrefs['firstDayOfWeekIdx']): string;
8
+ export declare function dayFromDate(date: DateLike): string;
9
+ export declare function currentMonth(): string;
10
+ export declare function currentWeek(firstDayOfWeekIdx?: LocalPrefs['firstDayOfWeekIdx']): string;
11
+ export declare function currentYear(): string;
12
+ export declare function currentDate(): Date;
13
+ export declare function currentDay(): string;
14
+ export declare function nextMonth(month: DateLike): string;
15
+ export declare function prevYear(month: DateLike): string;
16
+ export declare function prevMonth(month: DateLike): string;
17
+ export declare function addYears(year: DateLike, n: number): string;
18
+ export declare function addMonths(month: DateLike, n: number): string;
19
+ export declare function addWeeks(date: DateLike, n: number): string;
20
+ export declare function differenceInCalendarMonths(month1: DateLike, month2: DateLike): number;
21
+ export declare function differenceInCalendarDays(month1: DateLike, month2: DateLike): number;
22
+ export declare function subMonths(month: string | Date, n: number): string;
23
+ export declare function subWeeks(date: DateLike, n: number): string;
24
+ export declare function subYears(year: string | Date, n: number): string;
25
+ export declare function addDays(day: DateLike, n: number): string;
26
+ export declare function subDays(day: DateLike, n: number): string;
27
+ export declare function isBefore(month1: DateLike, month2: DateLike): boolean;
28
+ export declare function isAfter(month1: DateLike, month2: DateLike): boolean;
29
+ export declare function bounds(month: DateLike): {
30
+ start: number;
31
+ end: number;
32
+ };
33
+ export declare function _yearRange(start: DateLike, end: DateLike, inclusive?: boolean): string[];
34
+ export declare function yearRangeInclusive(start: DateLike, end: DateLike): string[];
35
+ export declare function _weekRange(start: DateLike, end: DateLike, inclusive?: boolean, firstDayOfWeekIdx?: LocalPrefs['firstDayOfWeekIdx']): string[];
36
+ export declare function weekRangeInclusive(start: DateLike, end: DateLike, firstDayOfWeekIdx?: LocalPrefs['firstDayOfWeekIdx']): string[];
37
+ export declare function _range(start: DateLike, end: DateLike, inclusive?: boolean): string[];
38
+ export declare function range(start: DateLike, end: DateLike): string[];
39
+ export declare function rangeInclusive(start: DateLike, end: DateLike): string[];
40
+ export declare function _dayRange(start: DateLike, end: DateLike, inclusive?: boolean): string[];
41
+ export declare function dayRange(start: DateLike, end: DateLike): string[];
42
+ export declare function dayRangeInclusive(start: DateLike, end: DateLike): string[];
43
+ export declare function getMonthFromIndex(year: string, monthIndex: number): string;
44
+ export declare function getMonthIndex(month: string): number;
45
+ export declare function getYear(month: string): string;
46
+ export declare function getMonth(day: string): string;
47
+ export declare function getDay(day: string): number;
48
+ export declare function getMonthEnd(day: string): string;
49
+ export declare function getWeekEnd(date: DateLike, firstDayOfWeekIdx?: LocalPrefs['firstDayOfWeekIdx']): string;
50
+ export declare function getYearStart(month: string): string;
51
+ export declare function getYearEnd(month: string): string;
52
+ export declare function sheetForMonth(month: string): string;
53
+ export declare function nameForMonth(month: DateLike): string;
54
+ export declare function format(month: DateLike, str: string): string;
55
+ export declare const getDateFormatRegex: import("memoize-one").MemoizedFn<(format: string) => RegExp>;
56
+ export declare const getDayMonthFormat: import("memoize-one").MemoizedFn<(format: string) => string>;
57
+ export declare const getDayMonthRegex: import("memoize-one").MemoizedFn<(format: string) => RegExp>;
58
+ export declare const getMonthYearFormat: import("memoize-one").MemoizedFn<(format: string) => string>;
59
+ export declare const getMonthYearRegex: import("memoize-one").MemoizedFn<(format: string) => RegExp>;
60
+ export declare const getShortYearFormat: import("memoize-one").MemoizedFn<(format: string) => string>;
61
+ export declare const getShortYearRegex: import("memoize-one").MemoizedFn<(format: string) => RegExp>;
62
+ export {};
@@ -0,0 +1,31 @@
1
+ export type QueryState = {
2
+ filterExpressions: Array<string>;
3
+ selectExpressions: Array<unknown>;
4
+ groupExpressions: Array<unknown>;
5
+ orderExpressions: Array<unknown>;
6
+ calculation: boolean;
7
+ rawMode: boolean;
8
+ withDead: boolean;
9
+ validateRefs: boolean;
10
+ limit: number | null;
11
+ offset: number | null;
12
+ };
13
+ export declare class Query {
14
+ state: QueryState;
15
+ constructor(state: any);
16
+ filter(expr: any): Query;
17
+ unfilter(exprs: any): Query;
18
+ select(exprs?: Array<unknown> | unknown): Query;
19
+ calculate(expr: any): Query;
20
+ groupBy(exprs: any): Query;
21
+ orderBy(exprs: any): Query;
22
+ limit(num: any): Query;
23
+ offset(num: any): Query;
24
+ raw(): Query;
25
+ withDead(): Query;
26
+ withoutValidatedRefs(): Query;
27
+ options(opts: any): Query;
28
+ serialize(): QueryState;
29
+ }
30
+ export declare function getPrimaryOrderBy(query: any, defaultOrderBy: any): any;
31
+ export declare function q(table: any): Query;
@@ -0,0 +1,62 @@
1
+ export declare const TYPE_INFO: {
2
+ date: {
3
+ ops: string[];
4
+ nullable: boolean;
5
+ };
6
+ id: {
7
+ ops: string[];
8
+ nullable: boolean;
9
+ };
10
+ saved: {
11
+ ops: any[];
12
+ nullable: boolean;
13
+ };
14
+ string: {
15
+ ops: string[];
16
+ nullable: boolean;
17
+ };
18
+ number: {
19
+ ops: string[];
20
+ nullable: boolean;
21
+ };
22
+ boolean: {
23
+ ops: string[];
24
+ nullable: boolean;
25
+ };
26
+ };
27
+ export declare const FIELD_TYPES: Map<string, string>;
28
+ export declare const ALLOCATION_METHODS: {
29
+ 'fixed-amount': string;
30
+ 'fixed-percent': string;
31
+ remainder: string;
32
+ };
33
+ export declare function mapField(field: any, opts?: any): any;
34
+ export declare function friendlyOp(op: any, type?: any): "" | "is" | "contains" | "one of" | "not one of" | "is not" | "is approx" | "is between" | "does not contain" | "is after" | "is greater than" | "is after or equals" | "is greater than or equals" | "is before" | "is less than" | "is before or equals" | "is less than or equals" | "is true" | "is false" | "set" | "allocate" | "link schedule" | "and" | "or";
35
+ export declare function deserializeField(field: any): {
36
+ field: string;
37
+ options: {
38
+ inflow: boolean;
39
+ outflow?: undefined;
40
+ };
41
+ } | {
42
+ field: string;
43
+ options: {
44
+ outflow: boolean;
45
+ inflow?: undefined;
46
+ };
47
+ } | {
48
+ field: any;
49
+ options?: undefined;
50
+ };
51
+ export declare function getFieldError(type: any): "Invalid date format" | "Value cannot be empty" | "Value must be a number" | "Please choose a valid field for this type of rule" | "Internal error, sorry! Please get in touch https://actualbudget.org/contact/ for support";
52
+ export declare function sortNumbers(num1: any, num2: any): any[];
53
+ export declare function parse(item: any): any;
54
+ export declare function unparse({ error, inputKey, ...item }: {
55
+ [x: string]: any;
56
+ error: any;
57
+ inputKey: any;
58
+ }): {
59
+ [x: string]: any;
60
+ };
61
+ export declare function makeValue(value: any, cond: any): any;
62
+ export declare function getApproxNumberThreshold(number: any): number;
@@ -0,0 +1,43 @@
1
+ import type { IRuleOptions } from '@rschedule/core';
2
+ export declare function getStatus(nextDate: string, completed: boolean, hasTrans: boolean): "completed" | "paid" | "due" | "upcoming" | "missed" | "scheduled";
3
+ export declare function getHasTransactionsQuery(schedules: any): import("./query").Query;
4
+ export declare function getRecurringDescription(config: any, dateFormat: any): string;
5
+ export declare function recurConfigToRSchedule(config: any): IRuleOptions[] | ({
6
+ byDayOfMonth: any;
7
+ start: import("@rschedule/core").DateInput;
8
+ end?: import("@rschedule/core").DateInput;
9
+ duration?: number;
10
+ count?: number;
11
+ frequency: import("@rschedule/core").RuleOption.Frequency;
12
+ interval?: number;
13
+ weekStart?: import("@rschedule/core").DateAdapter.Weekday;
14
+ byDayOfWeek?: import("@rschedule/core").RuleOption.ByDayOfWeek[];
15
+ byHourOfDay?: import("@rschedule/core").DateAdapter.Hour[];
16
+ byMillisecondOfSecond?: number[];
17
+ byMinuteOfHour?: import("@rschedule/core").DateAdapter.Minute[];
18
+ byMonthOfYear?: import("@rschedule/core").DateAdapter.Month[];
19
+ bySecondOfMinute?: import("@rschedule/core").DateAdapter.Minute[];
20
+ } | {
21
+ byDayOfWeek: any;
22
+ start: import("@rschedule/core").DateInput;
23
+ end?: import("@rschedule/core").DateInput;
24
+ duration?: number;
25
+ count?: number;
26
+ frequency: import("@rschedule/core").RuleOption.Frequency;
27
+ interval?: number;
28
+ weekStart?: import("@rschedule/core").DateAdapter.Weekday;
29
+ byDayOfMonth?: import("@rschedule/core").RuleOption.ByDayOfMonth[];
30
+ byHourOfDay?: import("@rschedule/core").DateAdapter.Hour[];
31
+ byMillisecondOfSecond?: number[];
32
+ byMinuteOfHour?: import("@rschedule/core").DateAdapter.Minute[];
33
+ byMonthOfYear?: import("@rschedule/core").DateAdapter.Month[];
34
+ bySecondOfMinute?: import("@rschedule/core").DateAdapter.Minute[];
35
+ })[];
36
+ export declare function extractScheduleConds(conditions: any): {
37
+ payee: any;
38
+ account: any;
39
+ amount: any;
40
+ date: any;
41
+ };
42
+ export declare function getScheduledAmount(amount: any): any;
43
+ export declare function describeSchedule(schedule: any, payee: any): string;
@@ -0,0 +1,91 @@
1
+ import { type TransactionEntity, type NewTransactionEntity } from '../types/models';
2
+ import { applyChanges } from './util';
3
+ interface TransactionEntityWithError extends TransactionEntity {
4
+ error: ReturnType<typeof SplitTransactionError> | null;
5
+ _deleted?: boolean;
6
+ }
7
+ export declare function isTemporaryId(id: string): boolean;
8
+ export declare function isPreviewId(id: string): boolean;
9
+ declare function SplitTransactionError(total: number, parent: TransactionEntity): {
10
+ type: string;
11
+ version: number;
12
+ difference: number;
13
+ };
14
+ type GenericTransactionEntity = NewTransactionEntity | TransactionEntity | TransactionEntityWithError;
15
+ export declare function makeChild<T extends GenericTransactionEntity>(parent: T, data: object): T;
16
+ export declare function recalculateSplit(trans: TransactionEntity): TransactionEntityWithError;
17
+ export declare function ungroupTransactions(transactions: TransactionEntity[]): TransactionEntity[];
18
+ export declare function groupTransaction(split: TransactionEntity[]): TransactionEntity;
19
+ export declare function ungroupTransaction(split: TransactionEntity | null): TransactionEntity[];
20
+ export declare function applyTransactionDiff(groupedTrans: Parameters<typeof ungroupTransaction>[0], diff: Parameters<typeof applyChanges>[0]): TransactionEntity;
21
+ export declare function addSplitTransaction(transactions: TransactionEntity[], id: string): {
22
+ data: any[];
23
+ diff: {
24
+ deleted: any[];
25
+ updated: any[];
26
+ };
27
+ newTransaction?: undefined;
28
+ } | {
29
+ data: TransactionEntity[];
30
+ newTransaction: TransactionEntityWithError | TransactionEntity;
31
+ diff: any;
32
+ };
33
+ export declare function updateTransaction(transactions: TransactionEntity[], transaction: TransactionEntity): {
34
+ data: any[];
35
+ diff: {
36
+ deleted: any[];
37
+ updated: any[];
38
+ };
39
+ newTransaction?: undefined;
40
+ } | {
41
+ data: TransactionEntity[];
42
+ newTransaction: TransactionEntityWithError | TransactionEntity;
43
+ diff: any;
44
+ };
45
+ export declare function deleteTransaction(transactions: TransactionEntity[], id: string): {
46
+ data: any[];
47
+ diff: {
48
+ deleted: any[];
49
+ updated: any[];
50
+ };
51
+ newTransaction?: undefined;
52
+ } | {
53
+ data: TransactionEntity[];
54
+ newTransaction: TransactionEntityWithError | TransactionEntity;
55
+ diff: any;
56
+ };
57
+ export declare function splitTransaction(transactions: TransactionEntity[], id: string): {
58
+ data: any[];
59
+ diff: {
60
+ deleted: any[];
61
+ updated: any[];
62
+ };
63
+ newTransaction?: undefined;
64
+ } | {
65
+ data: TransactionEntity[];
66
+ newTransaction: TransactionEntityWithError | TransactionEntity;
67
+ diff: any;
68
+ };
69
+ export declare function realizeTempTransactions(transactions: TransactionEntity[]): {
70
+ id: string;
71
+ account: import("../types/models").AccountEntity;
72
+ category?: import("../types/models").CategoryEntity;
73
+ payee?: import("../types/models").PayeeEntity;
74
+ schedule?: import("../types/models").ScheduleEntity;
75
+ subtransactions?: TransactionEntity[];
76
+ sort_order?: number;
77
+ tombstone?: boolean;
78
+ imported_payee?: string;
79
+ date: string;
80
+ notes?: string;
81
+ amount: number;
82
+ cleared?: boolean;
83
+ reconciled?: boolean;
84
+ is_parent?: boolean;
85
+ is_child?: boolean;
86
+ parent_id?: string;
87
+ imported_id?: string;
88
+ starting_balance_flag?: boolean;
89
+ transfer_id?: string;
90
+ }[];
91
+ export {};
@@ -0,0 +1,67 @@
1
+ export declare function last<T>(arr: Array<T>): T;
2
+ export declare function getChangedValues<T extends {
3
+ id?: string;
4
+ }>(obj1: T, obj2: T): Partial<T>;
5
+ export declare function hasFieldsChanged<T extends object>(obj1: T, obj2: T, fields: Array<keyof T>): boolean;
6
+ export declare function applyChanges<T extends {
7
+ id: string;
8
+ }>(changes: {
9
+ added?: T[];
10
+ updated?: T[];
11
+ deleted?: T[];
12
+ }, items: T[]): T[];
13
+ export declare function partitionByField<T, K extends keyof T>(data: T[], field: K): Map<any, any>;
14
+ export declare function groupBy<T, K extends keyof T>(data: T[], field: K): Map<T[K], T[]>;
15
+ export declare function diffItems<T extends {
16
+ id: string;
17
+ }>(items: T[], newItems: T[]): {
18
+ added: T[];
19
+ updated: Partial<T>[];
20
+ deleted: {
21
+ id: string;
22
+ }[];
23
+ };
24
+ export declare function groupById<T extends {
25
+ id: string;
26
+ }>(data: T[]): {
27
+ [key: string]: T;
28
+ };
29
+ export declare function setIn(map: Map<string, unknown>, keys: string[], item: unknown): void;
30
+ export declare function getIn(map: any, keys: any): any;
31
+ export declare function fastSetMerge<T>(set1: Set<T>, set2: Set<T>): Set<T>;
32
+ export declare function titleFirst(str: string): string;
33
+ export declare function appendDecimals(amountText: string, hideDecimals?: boolean): string;
34
+ type NumberFormats = 'comma-dot' | 'dot-comma' | 'space-comma' | 'space-dot' | 'comma-dot-in';
35
+ export declare const numberFormats: Array<{
36
+ value: NumberFormats;
37
+ label: string;
38
+ labelNoFraction: string;
39
+ }>;
40
+ declare let numberFormatConfig: {
41
+ format: NumberFormats;
42
+ hideFraction: boolean;
43
+ };
44
+ export declare function setNumberFormat(config: typeof numberFormatConfig): void;
45
+ export declare function getNumberFormat({ format, hideFraction, }?: {
46
+ format?: NumberFormats;
47
+ hideFraction: boolean;
48
+ }): {
49
+ value: NumberFormats;
50
+ separator: any;
51
+ formatter: Intl.NumberFormat;
52
+ regex: any;
53
+ separatorRegex: any;
54
+ };
55
+ export declare function safeNumber(value: number): number;
56
+ export declare function toRelaxedNumber(value: string): number;
57
+ export declare function integerToCurrency(n: number, formatter?: Intl.NumberFormat): string;
58
+ export declare function amountToCurrency(n: any): string;
59
+ export declare function amountToCurrencyNoDecimal(n: any): string;
60
+ export declare function currencyToAmount(str: string): any;
61
+ export declare function currencyToInteger(str: string): number;
62
+ export declare function stringToInteger(str: string): number;
63
+ export declare function amountToInteger(n: number): number;
64
+ export declare function integerToAmount(n: any): number;
65
+ export declare function looselyParseAmount(amount: string): number;
66
+ export declare function sortByKey<T>(arr: T[], key: keyof T): T[];
67
+ export {};
@@ -0,0 +1,158 @@
1
+ import { type batchUpdateTransactions } from '../server/accounts/transactions';
2
+ import type {
3
+ APIAccountEntity,
4
+ APICategoryEntity,
5
+ APICategoryGroupEntity,
6
+ APIPayeeEntity,
7
+ } from '../server/api-models';
8
+
9
+ import type { NewRuleEntity, RuleEntity, TransactionEntity } from './models';
10
+ import { type ServerHandlers } from './server-handlers';
11
+
12
+ export interface ApiHandlers {
13
+ 'api/batch-budget-start': () => Promise<unknown>;
14
+
15
+ 'api/batch-budget-end': () => Promise<unknown>;
16
+
17
+ 'api/load-budget': (
18
+ ...args: Parameters<ServerHandlers['load-budget']>
19
+ ) => Promise<void>;
20
+
21
+ 'api/download-budget': (arg: {
22
+ syncId: string;
23
+ password?: string;
24
+ }) => Promise<void>;
25
+
26
+ 'api/start-import': (arg: { budgetName: string }) => Promise<void>;
27
+
28
+ 'api/finish-import': () => Promise<void>;
29
+
30
+ 'api/abort-import': () => Promise<void>;
31
+
32
+ 'api/query': (arg: { query }) => Promise<unknown>;
33
+
34
+ 'api/budget-months': () => Promise<string[]>;
35
+
36
+ 'api/budget-month': (arg: { month }) => Promise<{
37
+ month: string;
38
+ incomeAvailable: number;
39
+ lastMonthOverspent: number;
40
+ forNextMonth: number;
41
+ totalBudgeted: number;
42
+ toBudget: number;
43
+
44
+ fromLastMonth: number;
45
+ totalIncome: number;
46
+ totalSpent: number;
47
+ totalBalance: number;
48
+ categoryGroups: Record<string, unknown>[];
49
+ }>;
50
+
51
+ 'api/budget-set-amount': (arg: {
52
+ month: string;
53
+ categoryId: string;
54
+ amount: number;
55
+ }) => Promise<void>;
56
+
57
+ 'api/budget-set-carryover': (arg: {
58
+ month: string;
59
+ categoryId: string;
60
+ flag: boolean;
61
+ }) => Promise<void>;
62
+
63
+ 'api/transactions-export': (arg: {
64
+ transactions;
65
+ categoryGroups;
66
+ payees;
67
+ }) => Promise<unknown>;
68
+
69
+ 'api/transactions-import': (arg: { accountId; transactions }) => Promise<{
70
+ errors?: { message: string }[];
71
+ added;
72
+ updated;
73
+ }>;
74
+
75
+ 'api/transactions-add': (arg: {
76
+ accountId;
77
+ transactions;
78
+ runTransfers?: boolean;
79
+ learnCategories?: boolean;
80
+ }) => Promise<'ok'>;
81
+
82
+ 'api/transactions-get': (arg: {
83
+ accountId?: string;
84
+ startDate?: string;
85
+ endDate?: string;
86
+ }) => Promise<TransactionEntity[]>;
87
+
88
+ 'api/transaction-update': (arg: {
89
+ id;
90
+ fields;
91
+ }) => Promise<Awaited<ReturnType<typeof batchUpdateTransactions>>['updated']>;
92
+
93
+ 'api/transaction-delete': (arg: {
94
+ id;
95
+ }) => Promise<Awaited<ReturnType<typeof batchUpdateTransactions>>['updated']>;
96
+
97
+ 'api/sync': () => Promise<void>;
98
+
99
+ 'api/bank-sync': (arg?: { accountId: string }) => Promise<void>;
100
+
101
+ 'api/accounts-get': () => Promise<APIAccountEntity[]>;
102
+
103
+ 'api/account-create': (arg: { account; initialBalance? }) => Promise<string>;
104
+
105
+ 'api/account-update': (arg: { id; fields }) => Promise<void>;
106
+
107
+ 'api/account-close': (arg: {
108
+ id;
109
+ transferAccountId;
110
+ transferCategoryId;
111
+ }) => Promise<unknown>;
112
+
113
+ 'api/account-reopen': (arg: { id }) => Promise<unknown>;
114
+
115
+ 'api/account-delete': (arg: { id }) => Promise<unknown>;
116
+
117
+ 'api/categories-get': (arg: {
118
+ grouped;
119
+ }) => Promise<Array<APICategoryGroupEntity | APICategoryEntity>>;
120
+
121
+ 'api/category-groups-get': () => Promise<APICategoryGroupEntity[]>;
122
+
123
+ 'api/category-group-create': (arg: { group }) => Promise<string>;
124
+
125
+ 'api/category-group-update': (arg: { id; fields }) => Promise<unknown>;
126
+
127
+ 'api/category-group-delete': (arg: {
128
+ id;
129
+ transferCategoryId;
130
+ }) => Promise<unknown>;
131
+
132
+ 'api/category-create': (arg: { category }) => Promise<string>;
133
+
134
+ 'api/category-update': (arg: { id; fields }) => Promise<unknown>;
135
+
136
+ 'api/category-delete': (arg: {
137
+ id;
138
+ transferCategoryId?;
139
+ }) => Promise<{ error?: string }>;
140
+
141
+ 'api/payees-get': () => Promise<APIPayeeEntity[]>;
142
+
143
+ 'api/payee-create': (arg: { payee }) => Promise<string>;
144
+
145
+ 'api/payee-update': (arg: { id; fields }) => Promise<unknown>;
146
+
147
+ 'api/payee-delete': (arg: { id }) => Promise<unknown>;
148
+
149
+ 'api/rules-get': () => Promise<RuleEntity[]>;
150
+
151
+ 'api/payee-rules-get': (arg: { id: string }) => Promise<RuleEntity[]>;
152
+
153
+ 'api/rule-create': (arg: { rule: NewRuleEntity }) => Promise<RuleEntity>;
154
+
155
+ 'api/rule-update': (arg: { rule: RuleEntity }) => Promise<RuleEntity>;
156
+
157
+ 'api/rule-delete': (arg: { id: string }) => Promise<boolean>;
158
+ }
@@ -0,0 +1,7 @@
1
+ export type Budget = {
2
+ id: string;
3
+ cloudFileId?: string;
4
+ encryptKeyId?: string;
5
+ groupId?: string;
6
+ name: string;
7
+ };
@@ -0,0 +1,38 @@
1
+ import { Budget } from './budget';
2
+
3
+ export type FileState =
4
+ | 'local'
5
+ | 'remote'
6
+ | 'synced'
7
+ | 'detached'
8
+ | 'broken'
9
+ | 'unknown';
10
+
11
+ export type LocalFile = Omit<Budget, 'cloudFileId' | 'groupId'> & {
12
+ state: 'local';
13
+ };
14
+
15
+ export type SyncableLocalFile = Budget & {
16
+ cloudFileId: string;
17
+ groupId: string;
18
+ state: 'broken' | 'unknown';
19
+ };
20
+
21
+ export type SyncedLocalFile = Budget & {
22
+ cloudFileId: string;
23
+ groupId: string;
24
+ encryptKeyId?: string;
25
+ hasKey: boolean;
26
+ state: 'synced' | 'detached';
27
+ };
28
+
29
+ export type RemoteFile = {
30
+ cloudFileId: string;
31
+ groupId: string;
32
+ name: string;
33
+ encryptKeyId?: string;
34
+ hasKey: boolean;
35
+ state: 'remote';
36
+ };
37
+
38
+ export type File = LocalFile | SyncableLocalFile | SyncedLocalFile | RemoteFile;
@@ -0,0 +1,23 @@
1
+ import type { BudgetHandlers } from '../server/budget/types/handlers';
2
+ import type { FiltersHandlers } from '../server/filters/types/handlers';
3
+ import type { NotesHandlers } from '../server/notes/types/handlers';
4
+ import type { ReportsHandlers } from '../server/reports/types/handlers';
5
+ import type { RulesHandlers } from '../server/rules/types/handlers';
6
+ import type { SchedulesHandlers } from '../server/schedules/types/handlers';
7
+ import type { ToolsHandlers } from '../server/tools/types/handlers';
8
+
9
+ import type { ApiHandlers } from './api-handlers';
10
+ import type { ServerHandlers } from './server-handlers';
11
+
12
+ export interface Handlers
13
+ extends ServerHandlers,
14
+ ApiHandlers,
15
+ BudgetHandlers,
16
+ FiltersHandlers,
17
+ NotesHandlers,
18
+ ReportsHandlers,
19
+ RulesHandlers,
20
+ SchedulesHandlers,
21
+ ToolsHandlers {}
22
+
23
+ export type HandlerFunctions = Handlers[keyof Handlers];