@lunchflow/actual-flow 0.0.3 ā 0.0.4
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.
- package/README.md +14 -133
- package/dist/actual-budget-client.d.ts.map +1 -1
- package/dist/actual-budget-client.js +20 -1
- package/dist/actual-budget-client.js.map +1 -1
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +43 -6
- package/dist/importer.js.map +1 -1
- package/dist/transaction-mapper.d.ts.map +1 -1
- package/dist/transaction-mapper.js +1 -0
- package/dist/transaction-mapper.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/actual-budget-client.ts +24 -1
- package/src/importer.ts +48 -7
- package/src/transaction-mapper.ts +1 -0
- package/src/types.ts +1 -0
- package/pnpm-workspace.yaml +0 -2
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
A TypeScript tool that imports transactions from Lunch Flow to Actual Budget with an intuitive terminal UI for configuration and account mapping.
|
|
4
4
|
|
|
5
|
+
## Demo
|
|
6
|
+
|
|
7
|
+
[](https://asciinema.org/a/gGd65kHnllxQNIk7umbonU324)
|
|
8
|
+
|
|
5
9
|
## Features
|
|
6
10
|
|
|
7
11
|
- š **Easy Setup**: Simple configuration process for both Lunch Flow and Actual Budget connections
|
|
@@ -14,35 +18,16 @@ A TypeScript tool that imports transactions from Lunch Flow to Actual Budget wit
|
|
|
14
18
|
|
|
15
19
|
## Installation
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Node.js 16+
|
|
20
|
-
- TypeScript
|
|
21
|
-
- Lunch Flow API access
|
|
22
|
-
- Actual Budget instance
|
|
23
|
-
|
|
24
|
-
### Quick Install
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
# Clone or download this repository
|
|
28
|
-
git clone <repository-url>
|
|
29
|
-
cd lunch-flow-actual-importer
|
|
21
|
+
A simple command to install!
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# Build the project
|
|
35
|
-
pnpm run build
|
|
36
|
-
|
|
37
|
-
# Run the importer
|
|
38
|
-
pnpm start
|
|
23
|
+
```
|
|
24
|
+
npx @lunchflow/actual-flow
|
|
39
25
|
```
|
|
40
26
|
|
|
41
|
-
|
|
27
|
+
or using pnpm
|
|
42
28
|
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
pnpm run dev
|
|
29
|
+
```
|
|
30
|
+
pnpm dlx @lunchflow/actual-flow
|
|
46
31
|
```
|
|
47
32
|
|
|
48
33
|
## Configuration
|
|
@@ -82,114 +67,10 @@ When configuring account mappings, you'll see:
|
|
|
82
67
|
|
|
83
68
|
### Transaction Import
|
|
84
69
|
|
|
85
|
-
1.
|
|
86
|
-
2.
|
|
87
|
-
3.
|
|
88
|
-
4.
|
|
89
|
-
5. Automatic deduplication prevents importing existing transactions
|
|
90
|
-
|
|
91
|
-
## API Requirements
|
|
92
|
-
|
|
93
|
-
### Lunch Flow API
|
|
94
|
-
|
|
95
|
-
The tool expects the following Lunch Flow API endpoints:
|
|
96
|
-
|
|
97
|
-
- `GET /accounts` - List accounts
|
|
98
|
-
- `GET /transactions` - List transactions with optional filters
|
|
99
|
-
|
|
100
|
-
Expected response format:
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"accounts": [
|
|
104
|
-
{
|
|
105
|
-
"id": "account_id",
|
|
106
|
-
"name": "Account Name",
|
|
107
|
-
"type": "checking",
|
|
108
|
-
"balance": 1000.00,
|
|
109
|
-
"currency": "USD"
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Actual Budget API
|
|
116
|
-
|
|
117
|
-
Uses the official `@actual-app/api` package for Actual Budget integration. The API works by:
|
|
118
|
-
|
|
119
|
-
1. **Connecting to your Actual Budget server** - Downloads budget data to local cache
|
|
120
|
-
2. **Using proper amount conversion** - Converts between decimal amounts (123.45) and integer format (12345) that Actual uses internally
|
|
121
|
-
3. **Batch transaction import** - Uses `addTransactions` for efficient bulk imports
|
|
122
|
-
4. **Local data caching** - Stores budget data in `./actual-data/` directory for faster access
|
|
123
|
-
|
|
124
|
-
For more details, see the [Actual Budget API documentation](https://actualbudget.org/docs/api/).
|
|
125
|
-
|
|
126
|
-
## Development
|
|
127
|
-
|
|
128
|
-
### Project Structure
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
src/
|
|
132
|
-
āāā index.ts # Main entry point
|
|
133
|
-
āāā importer.ts # Main importer class
|
|
134
|
-
āāā lunch-flow-client.ts # Lunch Flow API client
|
|
135
|
-
āāā actual-budget-client.ts # Actual Budget API client
|
|
136
|
-
āāā transaction-mapper.ts # Transaction mapping logic
|
|
137
|
-
āāā config-manager.ts # Configuration management
|
|
138
|
-
āāā ui.ts # Terminal UI components
|
|
139
|
-
āāā types.ts # TypeScript type definitions
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Building
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
# Development mode
|
|
146
|
-
pnpm run dev
|
|
147
|
-
|
|
148
|
-
# Build for production
|
|
149
|
-
pnpm run build
|
|
150
|
-
|
|
151
|
-
# Run built version
|
|
152
|
-
pnpm start
|
|
153
|
-
|
|
154
|
-
# Clean build artifacts
|
|
155
|
-
pnpm run clean
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## Troubleshooting
|
|
159
|
-
|
|
160
|
-
### Common Issues
|
|
161
|
-
|
|
162
|
-
1. **Connection Failed**: Verify your API credentials and network connectivity
|
|
163
|
-
2. **No Accounts Found**: Ensure your Lunch Flow account has accounts and your Actual Budget budget is properly set up
|
|
164
|
-
3. **Import Failed**: Check that account mappings are configured and transactions are within the selected date range
|
|
165
|
-
|
|
166
|
-
### Debug Mode
|
|
167
|
-
|
|
168
|
-
Run with debug logging:
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
DEBUG=* pnpm start
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Contributing
|
|
175
|
-
|
|
176
|
-
1. Fork the repository
|
|
177
|
-
2. Create a feature branch
|
|
178
|
-
3. Make your changes
|
|
179
|
-
4. Add tests if applicable
|
|
180
|
-
5. Submit a pull request
|
|
181
|
-
|
|
182
|
-
## License
|
|
183
|
-
|
|
184
|
-
MIT License - see LICENSE file for details.
|
|
185
|
-
|
|
186
|
-
## Support
|
|
187
|
-
|
|
188
|
-
For issues and questions:
|
|
189
|
-
|
|
190
|
-
1. Check the troubleshooting section
|
|
191
|
-
2. Review the GitHub issues
|
|
192
|
-
3. Create a new issue with detailed information
|
|
70
|
+
1. Review a preview of transactions to be imported
|
|
71
|
+
2. Confirm the import
|
|
72
|
+
3. Monitor progress with real-time feedback
|
|
73
|
+
4. Automatic deduplication prevents importing existing transactions
|
|
193
74
|
|
|
194
75
|
---
|
|
195
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actual-budget-client.d.ts","sourceRoot":"","sources":["../src/actual-budget-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIvE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAOhE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoC3B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB7C,kBAAkB,CAAC,YAAY,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"actual-budget-client.d.ts","sourceRoot":"","sources":["../src/actual-budget-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIvE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAS;gBAEZ,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAOhE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoC3B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlC,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB7C,kBAAkB,CAAC,YAAY,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC1E,oBAAoB,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAwB/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQhC"}
|
|
@@ -117,7 +117,26 @@ class ActualBudgetClient {
|
|
|
117
117
|
await this.connect();
|
|
118
118
|
}
|
|
119
119
|
try {
|
|
120
|
-
|
|
120
|
+
// Group transactions by account
|
|
121
|
+
const transactionsByAccount = new Map();
|
|
122
|
+
for (const transaction of transactions) {
|
|
123
|
+
if (!transactionsByAccount.has(transaction.account)) {
|
|
124
|
+
transactionsByAccount.set(transaction.account, []);
|
|
125
|
+
}
|
|
126
|
+
transactionsByAccount.get(transaction.account).push(transaction);
|
|
127
|
+
}
|
|
128
|
+
// Import transactions for each account
|
|
129
|
+
const importPromises = Array.from(transactionsByAccount.entries()).map(async ([accountId, accountTransactions]) => {
|
|
130
|
+
try {
|
|
131
|
+
await actualAPI.importTransactions(accountId, accountTransactions);
|
|
132
|
+
console.log(`Imported ${accountTransactions.length} transactions to account ${accountId}`);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error(`Failed to import transactions to account ${accountId}:`, error.message);
|
|
136
|
+
throw new Error(`Failed to import transactions to account ${accountId}: ${error.message}`);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
await Promise.all(importPromises);
|
|
121
140
|
}
|
|
122
141
|
catch (error) {
|
|
123
142
|
console.error('Failed to import transactions to Actual Budget:', error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actual-budget-client.js","sourceRoot":"","sources":["../src/actual-budget-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA6C;AAE7C,4CAAoB;AAGpB,MAAa,kBAAkB;IAO7B,YAAY,SAAiB,EAAE,YAAoB,EAAE,QAAiB;QAH9D,cAAS,GAAY,KAAK,CAAC;QAIjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,CAAC,wBAAwB;IAC1D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,+BAA+B;YAC/B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,SAAS,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YAEH,qCAAqC;YACrC,MAAM,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAElD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,YAAY,iCAAiC,CAAC,CAAC;gBAC1F,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClD,OAAO,CAAC,KAAK,CAAC,6CAA6C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC7E,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,YAAY,4BAA4B,CAAC,CAAC;gBACrF,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;YAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAW;gBACzB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC9D,QAAQ,EAAE,KAAK,EAAE,iCAAiC;aACnD,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,YAAuC;QAC9D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"actual-budget-client.js","sourceRoot":"","sources":["../src/actual-budget-client.ts"],"names":[],"mappings":"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"}
|
package/dist/importer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"importer.d.ts","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,gBAAgB,EAAwB,MAAM,SAAS,CAAC;AAIzF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,MAAM,CAAuB;;IAY/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAYnB,kBAAkB;IAehC,OAAO,CAAC,aAAa;IAcf,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAoB5C,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkGnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCrC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBvC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
|
package/dist/importer.js
CHANGED
|
@@ -109,16 +109,52 @@ class LunchFlowImporter {
|
|
|
109
109
|
this.ui.showError('Cannot import: connections failed');
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
|
-
const spinner = this.ui.showSpinner('Fetching transactions...');
|
|
112
|
+
const spinner = this.ui.showSpinner('Fetching transactions from all mapped accounts...');
|
|
113
113
|
try {
|
|
114
|
-
|
|
114
|
+
// Fetch transactions from all mapped accounts
|
|
115
|
+
const allLfTransactions = [];
|
|
116
|
+
const accountResults = [];
|
|
117
|
+
for (const mapping of this.config.accountMappings) {
|
|
118
|
+
try {
|
|
119
|
+
const accountTransactions = await this.lfClient.getTransactions(mapping.lunchFlowAccountId);
|
|
120
|
+
allLfTransactions.push(...accountTransactions);
|
|
121
|
+
accountResults.push({
|
|
122
|
+
account: `${mapping.lunchFlowAccountName} ā ${mapping.actualBudgetAccountName}`,
|
|
123
|
+
count: accountTransactions.length,
|
|
124
|
+
success: true
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.warn(`Failed to fetch transactions for Lunch Flow account ${mapping.lunchFlowAccountId} (${mapping.lunchFlowAccountName}):`, error);
|
|
129
|
+
accountResults.push({
|
|
130
|
+
account: `${mapping.lunchFlowAccountName} ā ${mapping.actualBudgetAccountName}`,
|
|
131
|
+
count: 0,
|
|
132
|
+
success: false
|
|
133
|
+
});
|
|
134
|
+
// Continue with other accounts even if one fails
|
|
135
|
+
}
|
|
136
|
+
}
|
|
115
137
|
spinner.stop();
|
|
116
|
-
|
|
117
|
-
|
|
138
|
+
// Show account processing summary
|
|
139
|
+
console.log('\nš Account Processing Summary:');
|
|
140
|
+
const table = new cli_table3_1.default({
|
|
141
|
+
head: ['Account Mapping', 'Transactions Found', 'Status'],
|
|
142
|
+
colWidths: [50, 20, 15]
|
|
143
|
+
});
|
|
144
|
+
accountResults.forEach(result => {
|
|
145
|
+
table.push([
|
|
146
|
+
result.account,
|
|
147
|
+
result.count.toString(),
|
|
148
|
+
result.success ? 'ā
Success' : 'ā Failed'
|
|
149
|
+
]);
|
|
150
|
+
});
|
|
151
|
+
console.log(table.toString());
|
|
152
|
+
if (allLfTransactions.length === 0) {
|
|
153
|
+
this.ui.showInfo('No transactions found for any of the mapped accounts');
|
|
118
154
|
return;
|
|
119
155
|
}
|
|
120
156
|
const mapper = new transaction_mapper_1.TransactionMapper(this.config.accountMappings);
|
|
121
|
-
const abTransactions = mapper.mapTransactions(
|
|
157
|
+
const abTransactions = mapper.mapTransactions(allLfTransactions);
|
|
122
158
|
if (abTransactions.length === 0) {
|
|
123
159
|
this.ui.showError('No transactions could be mapped to Actual Budget accounts');
|
|
124
160
|
return;
|
|
@@ -136,7 +172,8 @@ class LunchFlowImporter {
|
|
|
136
172
|
const importSpinner = this.ui.showSpinner(`Importing ${abTransactions.length} transactions...`);
|
|
137
173
|
await this.abClient.importTransactions(abTransactions);
|
|
138
174
|
importSpinner.stop();
|
|
139
|
-
|
|
175
|
+
const accountCount = new Set(abTransactions.map(t => t.account)).size;
|
|
176
|
+
this.ui.showSuccess(`Successfully imported ${abTransactions.length} transactions across ${accountCount} account(s)`);
|
|
140
177
|
}
|
|
141
178
|
catch (error) {
|
|
142
179
|
spinner.stop();
|
package/dist/importer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"importer.js","sourceRoot":"","sources":["../src/importer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-mapper.d.ts","sourceRoot":"","sources":["../src/transaction-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAExF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAmB;gBAE9B,eAAe,EAAE,cAAc,EAAE;IAI7C,cAAc,CAAC,aAAa,EAAE,oBAAoB,GAAG,uBAAuB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"transaction-mapper.d.ts","sourceRoot":"","sources":["../src/transaction-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAExF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAmB;gBAE9B,eAAe,EAAE,cAAc,EAAE;IAI7C,cAAc,CAAC,aAAa,EAAE,oBAAoB,GAAG,uBAAuB,GAAG,IAAI;IAuBnF,eAAe,CAAC,cAAc,EAAE,oBAAoB,EAAE,GAAG,uBAAuB,EAAE;CAKnF"}
|
|
@@ -15,6 +15,7 @@ class TransactionMapper {
|
|
|
15
15
|
date: lfTransaction.date,
|
|
16
16
|
// Forcing to fixed point integer to avoid floating point precision issues
|
|
17
17
|
amount: parseInt((lfTransaction.amount * 100).toFixed(0)),
|
|
18
|
+
payee_name: lfTransaction.merchant,
|
|
18
19
|
imported_payee: lfTransaction.merchant,
|
|
19
20
|
account: mapping.actualBudgetAccountId,
|
|
20
21
|
cleared: true, // Lunch Flow transactions are always cleared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-mapper.js","sourceRoot":"","sources":["../src/transaction-mapper.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAG5B,YAAY,eAAiC;QAC3C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,aAAmC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,aAAa,CAAC,SAAS,CACtD,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,0EAA0E;YAC1E,MAAM,EAAE,QAAQ,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACzD,cAAc,EAAE,aAAa,CAAC,QAAQ;YACtC,OAAO,EAAE,OAAO,CAAC,qBAAqB;YACtC,OAAO,EAAE,IAAI,EAAE,6CAA6C;YAC5D,KAAK,EAAE,aAAa,CAAC,WAAW;YAChC,WAAW,EAAE,MAAM,aAAa,CAAC,EAAE,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,cAAsC;QACpD,OAAO,cAAc;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"transaction-mapper.js","sourceRoot":"","sources":["../src/transaction-mapper.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAG5B,YAAY,eAAiC;QAC3C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,aAAmC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,aAAa,CAAC,SAAS,CACtD,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,0EAA0E;YAC1E,MAAM,EAAE,QAAQ,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACzD,UAAU,EAAE,aAAa,CAAC,QAAQ;YAClC,cAAc,EAAE,aAAa,CAAC,QAAQ;YACtC,OAAO,EAAE,OAAO,CAAC,qBAAqB;YACtC,OAAO,EAAE,IAAI,EAAE,6CAA6C;YAC5D,KAAK,EAAE,aAAa,CAAC,WAAW;YAChC,WAAW,EAAE,MAAM,aAAa,CAAC,EAAE,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,eAAe,CAAC,cAAsC;QACpD,OAAO,cAAc;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAnCD,8CAmCC"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACxC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,kBAAkB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACxC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,kBAAkB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,YAAY,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -89,7 +89,30 @@ export class ActualBudgetClient {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
try {
|
|
92
|
-
|
|
92
|
+
// Group transactions by account
|
|
93
|
+
const transactionsByAccount = new Map<string, ActualBudgetTransaction[]>();
|
|
94
|
+
|
|
95
|
+
for (const transaction of transactions) {
|
|
96
|
+
if (!transactionsByAccount.has(transaction.account)) {
|
|
97
|
+
transactionsByAccount.set(transaction.account, []);
|
|
98
|
+
}
|
|
99
|
+
transactionsByAccount.get(transaction.account)!.push(transaction);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Import transactions for each account
|
|
103
|
+
const importPromises = Array.from(transactionsByAccount.entries()).map(
|
|
104
|
+
async ([accountId, accountTransactions]) => {
|
|
105
|
+
try {
|
|
106
|
+
await actualAPI.importTransactions(accountId, accountTransactions);
|
|
107
|
+
console.log(`Imported ${accountTransactions.length} transactions to account ${accountId}`);
|
|
108
|
+
} catch (error: any) {
|
|
109
|
+
console.error(`Failed to import transactions to account ${accountId}:`, error.message);
|
|
110
|
+
throw new Error(`Failed to import transactions to account ${accountId}: ${error.message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
await Promise.all(importPromises);
|
|
93
116
|
} catch (error: any) {
|
|
94
117
|
console.error('Failed to import transactions to Actual Budget:', error.message);
|
|
95
118
|
throw new Error(`Failed to import transactions: ${error.message}`);
|
package/src/importer.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { ActualBudgetClient } from './actual-budget-client';
|
|
|
3
3
|
import { TransactionMapper } from './transaction-mapper';
|
|
4
4
|
import { ConfigManager } from './config-manager';
|
|
5
5
|
import { TerminalUI } from './ui';
|
|
6
|
-
import { Config, AccountMapping, ConnectionStatus } from './types';
|
|
6
|
+
import { Config, AccountMapping, ConnectionStatus, LunchFlowTransaction } from './types';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import Table from 'cli-table3';
|
|
9
9
|
|
|
@@ -136,19 +136,59 @@ export class LunchFlowImporter {
|
|
|
136
136
|
return;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
const spinner = this.ui.showSpinner('Fetching transactions...');
|
|
139
|
+
const spinner = this.ui.showSpinner('Fetching transactions from all mapped accounts...');
|
|
140
140
|
|
|
141
141
|
try {
|
|
142
|
-
|
|
142
|
+
// Fetch transactions from all mapped accounts
|
|
143
|
+
const allLfTransactions: LunchFlowTransaction[] = [];
|
|
144
|
+
const accountResults: { account: string; count: number; success: boolean }[] = [];
|
|
145
|
+
|
|
146
|
+
for (const mapping of this.config.accountMappings) {
|
|
147
|
+
try {
|
|
148
|
+
const accountTransactions = await this.lfClient.getTransactions(mapping.lunchFlowAccountId);
|
|
149
|
+
allLfTransactions.push(...accountTransactions);
|
|
150
|
+
accountResults.push({
|
|
151
|
+
account: `${mapping.lunchFlowAccountName} ā ${mapping.actualBudgetAccountName}`,
|
|
152
|
+
count: accountTransactions.length,
|
|
153
|
+
success: true
|
|
154
|
+
});
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.warn(`Failed to fetch transactions for Lunch Flow account ${mapping.lunchFlowAccountId} (${mapping.lunchFlowAccountName}):`, error);
|
|
157
|
+
accountResults.push({
|
|
158
|
+
account: `${mapping.lunchFlowAccountName} ā ${mapping.actualBudgetAccountName}`,
|
|
159
|
+
count: 0,
|
|
160
|
+
success: false
|
|
161
|
+
});
|
|
162
|
+
// Continue with other accounts even if one fails
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
143
166
|
spinner.stop();
|
|
144
167
|
|
|
145
|
-
|
|
146
|
-
|
|
168
|
+
// Show account processing summary
|
|
169
|
+
console.log('\nš Account Processing Summary:');
|
|
170
|
+
const table = new Table({
|
|
171
|
+
head: ['Account Mapping', 'Transactions Found', 'Status'],
|
|
172
|
+
colWidths: [50, 20, 15]
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
accountResults.forEach(result => {
|
|
176
|
+
table.push([
|
|
177
|
+
result.account,
|
|
178
|
+
result.count.toString(),
|
|
179
|
+
result.success ? 'ā
Success' : 'ā Failed'
|
|
180
|
+
]);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
console.log(table.toString());
|
|
184
|
+
|
|
185
|
+
if (allLfTransactions.length === 0) {
|
|
186
|
+
this.ui.showInfo('No transactions found for any of the mapped accounts');
|
|
147
187
|
return;
|
|
148
188
|
}
|
|
149
189
|
|
|
150
190
|
const mapper = new TransactionMapper(this.config.accountMappings);
|
|
151
|
-
const abTransactions = mapper.mapTransactions(
|
|
191
|
+
const abTransactions = mapper.mapTransactions(allLfTransactions);
|
|
152
192
|
|
|
153
193
|
if (abTransactions.length === 0) {
|
|
154
194
|
this.ui.showError('No transactions could be mapped to Actual Budget accounts');
|
|
@@ -172,7 +212,8 @@ export class LunchFlowImporter {
|
|
|
172
212
|
await this.abClient.importTransactions(abTransactions);
|
|
173
213
|
importSpinner.stop();
|
|
174
214
|
|
|
175
|
-
|
|
215
|
+
const accountCount = new Set(abTransactions.map(t => t.account)).size;
|
|
216
|
+
this.ui.showSuccess(`Successfully imported ${abTransactions.length} transactions across ${accountCount} account(s)`);
|
|
176
217
|
} catch (error) {
|
|
177
218
|
spinner.stop();
|
|
178
219
|
this.ui.showError('Failed to import transactions');
|
|
@@ -21,6 +21,7 @@ export class TransactionMapper {
|
|
|
21
21
|
date: lfTransaction.date,
|
|
22
22
|
// Forcing to fixed point integer to avoid floating point precision issues
|
|
23
23
|
amount: parseInt((lfTransaction.amount * 100).toFixed(0)),
|
|
24
|
+
payee_name: lfTransaction.merchant,
|
|
24
25
|
imported_payee: lfTransaction.merchant,
|
|
25
26
|
account: mapping.actualBudgetAccountId,
|
|
26
27
|
cleared: true, // Lunch Flow transactions are always cleared
|
package/src/types.ts
CHANGED
package/pnpm-workspace.yaml
DELETED