fints-lib-cli 0.4.0 → 0.5.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.
- package/README.md +116 -0
- package/dist/config.js +2 -35
- package/dist/config.js.map +1 -1
- package/dist/index.js +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -215,6 +215,122 @@ fints-lib submit-direct-debit --url https://example.com/fints --name username --
|
|
|
215
215
|
--mandate-date 2022-01-10 --collection-date 2022-01-15 --remittance "Invoice 0815"
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
+
## Practical CLI Examples
|
|
219
|
+
|
|
220
|
+
### Using Environment Variables
|
|
221
|
+
|
|
222
|
+
To avoid typing credentials repeatedly, create a shell script or use environment variables:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
#!/bin/bash
|
|
226
|
+
# save as fints-env.sh
|
|
227
|
+
|
|
228
|
+
export FINTS_URL="https://banking.example.com/fints"
|
|
229
|
+
export FINTS_USER="myusername"
|
|
230
|
+
export FINTS_PIN="mypin"
|
|
231
|
+
export FINTS_BLZ="12345678"
|
|
232
|
+
|
|
233
|
+
# Then use in commands:
|
|
234
|
+
# source fints-env.sh
|
|
235
|
+
# fints-lib list-accounts --url $FINTS_URL -n $FINTS_USER -p $FINTS_PIN -b $FINTS_BLZ
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Quick Account Overview
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# Get account list in JSON format for processing
|
|
242
|
+
fints-lib list-accounts \
|
|
243
|
+
--url https://banking.example.com/fints \
|
|
244
|
+
-n username -p 12345 -b 12345678 \
|
|
245
|
+
--json | jq '.'
|
|
246
|
+
|
|
247
|
+
# Check balance for a specific account
|
|
248
|
+
fints-lib get-balance \
|
|
249
|
+
--url https://banking.example.com/fints \
|
|
250
|
+
-n username -p 12345 -b 12345678 \
|
|
251
|
+
-i DE89370400440532013000 \
|
|
252
|
+
--json | jq '.value'
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Export Transactions to File
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Fetch and save transactions as JSON
|
|
259
|
+
fints-lib fetch-transactions \
|
|
260
|
+
--url https://banking.example.com/fints \
|
|
261
|
+
-n username -p 12345 -b 12345678 \
|
|
262
|
+
-i DE89370400440532013000 \
|
|
263
|
+
-s 2024-01-01 -e 2024-12-31 \
|
|
264
|
+
--json > transactions-2024.json
|
|
265
|
+
|
|
266
|
+
# Or save verbose output to text file
|
|
267
|
+
fints-lib fetch-transactions \
|
|
268
|
+
--url https://banking.example.com/fints \
|
|
269
|
+
-n username -p 12345 -b 12345678 \
|
|
270
|
+
-i DE89370400440532013000 \
|
|
271
|
+
-s 2024-01-01 -e 2024-12-31 \
|
|
272
|
+
--verbose > transactions-2024.txt
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Monthly Statement Automation
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
#!/bin/bash
|
|
279
|
+
# monthly-statement.sh - Fetch last month's transactions
|
|
280
|
+
|
|
281
|
+
# Calculate date range for last month
|
|
282
|
+
# For Linux (GNU date):
|
|
283
|
+
START_DATE=$(date -d "last month" +%Y-%m-01)
|
|
284
|
+
END_DATE=$(date -d "-1 day $(date +%Y-%m-01)" +%Y-%m-%d)
|
|
285
|
+
|
|
286
|
+
# For macOS (BSD date), install GNU coreutils and use 'gdate':
|
|
287
|
+
# brew install coreutils
|
|
288
|
+
# START_DATE=$(gdate -d "last month" +%Y-%m-01)
|
|
289
|
+
# END_DATE=$(gdate -d "-1 day $(gdate +%Y-%m-01)" +%Y-%m-%d)
|
|
290
|
+
|
|
291
|
+
# Fetch transactions
|
|
292
|
+
fints-lib fetch-transactions \
|
|
293
|
+
--url "$FINTS_URL" \
|
|
294
|
+
-n "$FINTS_USER" \
|
|
295
|
+
-p "$FINTS_PIN" \
|
|
296
|
+
-b "$FINTS_BLZ" \
|
|
297
|
+
-i "$ACCOUNT_IBAN" \
|
|
298
|
+
-s "$START_DATE" \
|
|
299
|
+
-e "$END_DATE" \
|
|
300
|
+
--json > "statement-$(date +%Y-%m).json"
|
|
301
|
+
|
|
302
|
+
echo "Statement saved for period: $START_DATE to $END_DATE"
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Check Multiple Accounts
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
#!/bin/bash
|
|
309
|
+
# check-all-accounts.sh
|
|
310
|
+
|
|
311
|
+
ACCOUNTS=("DE89370400440532013000" "DE89370400440532013001")
|
|
312
|
+
|
|
313
|
+
for IBAN in "${ACCOUNTS[@]}"; do
|
|
314
|
+
echo "Checking account: $IBAN"
|
|
315
|
+
fints-lib get-balance \
|
|
316
|
+
--url "$FINTS_URL" \
|
|
317
|
+
-n "$FINTS_USER" \
|
|
318
|
+
-p "$FINTS_PIN" \
|
|
319
|
+
-b "$FINTS_BLZ" \
|
|
320
|
+
-i "$IBAN" \
|
|
321
|
+
--json | jq -r '" Balance: \(.value.value) \(.value.currency)"'
|
|
322
|
+
echo ""
|
|
323
|
+
done
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Tips
|
|
327
|
+
|
|
328
|
+
- Use `--json` flag for machine-readable output that can be processed with tools like `jq`
|
|
329
|
+
- Use `--verbose` flag to see detailed information during development
|
|
330
|
+
- Use `--debug` flag to troubleshoot connection issues
|
|
331
|
+
- Store credentials in environment variables or a secure credential manager
|
|
332
|
+
- Use the [FinTS Institute Database](https://github.com/jhermsmeier/fints-institute-db) to find your bank's URL
|
|
333
|
+
|
|
218
334
|
## Resources
|
|
219
335
|
|
|
220
336
|
- [Database of banks with their URLs](https://github.com/jhermsmeier/fints-institute-db)
|
package/dist/config.js
CHANGED
|
@@ -1,43 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
10
|
};
|
|
@@ -45,10 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
12
|
exports.BaseConfig = void 0;
|
|
46
13
|
const clime_1 = require("clime");
|
|
47
14
|
const fints_lib_1 = require("fints-lib");
|
|
48
|
-
const
|
|
15
|
+
const yaml_1 = require("yaml");
|
|
49
16
|
class BaseConfig extends clime_1.Options {
|
|
50
17
|
get serializer() {
|
|
51
|
-
return this.json ? JSON.stringify : (obj) =>
|
|
18
|
+
return this.json ? JSON.stringify : (obj) => (0, yaml_1.stringify)(obj, { indent: 4 });
|
|
52
19
|
}
|
|
53
20
|
}
|
|
54
21
|
exports.BaseConfig = BaseConfig;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAwC;AACxC,yCAA6D;AAC7D,+BAAiC;AAEjC,MAAa,UAAW,SAAQ,eAAO;IA8BnC,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAA,gBAAS,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;CACJ;AAjCD,gCAiCC;AA1BU;IANN,IAAA,cAAM,EAAC;QACJ,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,wBAAY;KACxB,CAAC;;6CACuB;AAGlB;IADN,IAAA,cAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;;uCACjD;AAGZ;IADN,IAAA,cAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;;wCAChE;AAGb;IADN,IAAA,cAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;;uCAC5D;AAGZ;IADN,IAAA,cAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;;uCAClE;AAGZ;IADN,IAAA,cAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;;yCACd;AAGf;IADN,IAAA,cAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;;2CACZ;AAGjB;IADN,IAAA,cAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;;wCACf"}
|
package/dist/index.js
CHANGED
|
File without changes
|