ynabro 1.0.0 → 2.0.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/package.json +4 -15
- package/dist/state/transactionState.d.ts +0 -20
- package/dist/state/transactionState.d.ts.map +0 -1
- package/dist/state/transactionState.js +0 -58
- package/dist/state/transactionState.js.map +0 -1
- package/dist/tools/addFrequentMismatch.d.ts +0 -7
- package/dist/tools/addFrequentMismatch.d.ts.map +0 -1
- package/dist/tools/addFrequentMismatch.js +0 -9
- package/dist/tools/addFrequentMismatch.js.map +0 -1
- package/dist/tools/getFrequentMismatches.d.ts +0 -10
- package/dist/tools/getFrequentMismatches.d.ts.map +0 -1
- package/dist/tools/getFrequentMismatches.js +0 -9
- package/dist/tools/getFrequentMismatches.js.map +0 -1
- package/dist/tools/getTransactionModuleState.d.ts +0 -5
- package/dist/tools/getTransactionModuleState.d.ts.map +0 -1
- package/dist/tools/getTransactionModuleState.js +0 -8
- package/dist/tools/getTransactionModuleState.js.map +0 -1
- package/dist/tools/recordSuccessfulReview.d.ts +0 -7
- package/dist/tools/recordSuccessfulReview.d.ts.map +0 -1
- package/dist/tools/recordSuccessfulReview.js +0 -9
- package/dist/tools/recordSuccessfulReview.js.map +0 -1
- package/dist/tools/setAutoApproveEnabled.d.ts +0 -8
- package/dist/tools/setAutoApproveEnabled.d.ts.map +0 -1
- package/dist/tools/setAutoApproveEnabled.js +0 -9
- package/dist/tools/setAutoApproveEnabled.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ynabro",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "A clean, agent-friendly YNAB client library for LLMs and coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -15,18 +15,10 @@
|
|
|
15
15
|
"dist",
|
|
16
16
|
"assets"
|
|
17
17
|
],
|
|
18
|
-
"workspaces": [
|
|
19
|
-
"packages/*"
|
|
20
|
-
],
|
|
21
18
|
"scripts": {
|
|
22
19
|
"build": "tsc -p tsconfig.build.json",
|
|
23
20
|
"test": "vitest run",
|
|
24
|
-
"
|
|
25
|
-
"lint": "biome check .",
|
|
26
|
-
"lint:fix": "biome check --write .",
|
|
27
|
-
"format": "biome format --write .",
|
|
28
|
-
"typecheck": "tsc --noEmit",
|
|
29
|
-
"check": "npm run lint && npm run typecheck && npm run test"
|
|
21
|
+
"typecheck": "tsc --noEmit"
|
|
30
22
|
},
|
|
31
23
|
"keywords": [
|
|
32
24
|
"ynab",
|
|
@@ -38,17 +30,14 @@
|
|
|
38
30
|
"license": "MIT",
|
|
39
31
|
"repository": {
|
|
40
32
|
"type": "git",
|
|
41
|
-
"url": "https://github.com/jmcombs/ynabro"
|
|
33
|
+
"url": "https://github.com/jmcombs/ynabro",
|
|
34
|
+
"directory": "packages/ynabro"
|
|
42
35
|
},
|
|
43
36
|
"homepage": "https://github.com/jmcombs/ynabro#readme",
|
|
44
37
|
"engines": {
|
|
45
38
|
"node": ">=22.0.0"
|
|
46
39
|
},
|
|
47
40
|
"devDependencies": {
|
|
48
|
-
"@biomejs/biome": "^2.4.15",
|
|
49
|
-
"@types/node": "^25.8.0",
|
|
50
|
-
"typescript": "^6.0.3",
|
|
51
|
-
"vitest": "^4.1.6",
|
|
52
41
|
"ynab": "^4.1.0"
|
|
53
42
|
}
|
|
54
43
|
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface TransactionModuleState {
|
|
2
|
-
last_knowledge_of_server: number | null;
|
|
3
|
-
auto_approve_enabled: boolean;
|
|
4
|
-
successful_reviews: number;
|
|
5
|
-
notes: string[];
|
|
6
|
-
patterns: {
|
|
7
|
-
frequent_mismatches: Array<{
|
|
8
|
-
local_payee: string;
|
|
9
|
-
matched_payee: string;
|
|
10
|
-
count: number;
|
|
11
|
-
last_seen: string;
|
|
12
|
-
}>;
|
|
13
|
-
amount_tolerance_cents: number;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export declare function getTransactionModuleState(): TransactionModuleState;
|
|
17
|
-
export declare function updateTransactionModuleState(updates: Partial<TransactionModuleState>): void;
|
|
18
|
-
export declare function addFrequentMismatch(localPayee: string, matchedPayee: string): void;
|
|
19
|
-
export declare function recordSuccessfulReview(): void;
|
|
20
|
-
//# sourceMappingURL=transactionState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionState.d.ts","sourceRoot":"","sources":["../../src/state/transactionState.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE;QACR,mBAAmB,EAAE,KAAK,CAAC;YACzB,WAAW,EAAE,MAAM,CAAC;YACpB,aAAa,EAAE,MAAM,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;QACH,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAmBD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAQlE;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,CAAC,sBAAsB,CAAC,QAMzC;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAoB3E;AAED,wBAAgB,sBAAsB,SAIrC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const STATE_DIR = ".ynabro";
|
|
4
|
-
const STATE_FILE = path.join(STATE_DIR, "transactions-state.json");
|
|
5
|
-
const DEFAULT_STATE = {
|
|
6
|
-
last_knowledge_of_server: null,
|
|
7
|
-
auto_approve_enabled: false,
|
|
8
|
-
successful_reviews: 0,
|
|
9
|
-
notes: [],
|
|
10
|
-
patterns: {
|
|
11
|
-
frequent_mismatches: [],
|
|
12
|
-
amount_tolerance_cents: 50,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
function ensureStateDir() {
|
|
16
|
-
if (!fs.existsSync(STATE_DIR)) {
|
|
17
|
-
fs.mkdirSync(STATE_DIR, { recursive: true });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export function getTransactionModuleState() {
|
|
21
|
-
ensureStateDir();
|
|
22
|
-
if (!fs.existsSync(STATE_FILE)) {
|
|
23
|
-
fs.writeFileSync(STATE_FILE, JSON.stringify(DEFAULT_STATE, null, 2));
|
|
24
|
-
return { ...DEFAULT_STATE };
|
|
25
|
-
}
|
|
26
|
-
const raw = fs.readFileSync(STATE_FILE, "utf-8");
|
|
27
|
-
return JSON.parse(raw);
|
|
28
|
-
}
|
|
29
|
-
export function updateTransactionModuleState(updates) {
|
|
30
|
-
const current = getTransactionModuleState();
|
|
31
|
-
const newState = { ...current, ...updates };
|
|
32
|
-
ensureStateDir();
|
|
33
|
-
fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));
|
|
34
|
-
}
|
|
35
|
-
export function addFrequentMismatch(localPayee, matchedPayee) {
|
|
36
|
-
const state = getTransactionModuleState();
|
|
37
|
-
const existing = state.patterns.frequent_mismatches.find((m) => m.local_payee.toLowerCase() === localPayee.toLowerCase());
|
|
38
|
-
if (existing) {
|
|
39
|
-
existing.count += 1;
|
|
40
|
-
existing.last_seen = new Date().toISOString().split("T")[0];
|
|
41
|
-
existing.matched_payee = matchedPayee; // update in case it changed
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
state.patterns.frequent_mismatches.push({
|
|
45
|
-
local_payee: localPayee,
|
|
46
|
-
matched_payee: matchedPayee,
|
|
47
|
-
count: 1,
|
|
48
|
-
last_seen: new Date().toISOString().split("T")[0],
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
updateTransactionModuleState(state);
|
|
52
|
-
}
|
|
53
|
-
export function recordSuccessfulReview() {
|
|
54
|
-
const state = getTransactionModuleState();
|
|
55
|
-
state.successful_reviews += 1;
|
|
56
|
-
updateTransactionModuleState(state);
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=transactionState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionState.js","sourceRoot":"","sources":["../../src/state/transactionState.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addFrequentMismatch.d.ts","sourceRoot":"","sources":["../../src/tools/addFrequentMismatch.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM;;GAIrB"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { addFrequentMismatch as add } from "../state/transactionState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Records a repeated mismatch between a local payee and a matched payee.
|
|
4
|
-
*/
|
|
5
|
-
export async function addFrequentMismatch(localPayee, matchedPayee) {
|
|
6
|
-
add(localPayee, matchedPayee);
|
|
7
|
-
return { success: true };
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=addFrequentMismatch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addFrequentMismatch.js","sourceRoot":"","sources":["../../src/tools/addFrequentMismatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB,EAClB,YAAoB;IAEpB,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFrequentMismatches.d.ts","sourceRoot":"","sources":["../../src/tools/getFrequentMismatches.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,qBAAqB;;;;;KAG1C"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { getTransactionModuleState } from "../state/transactionState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Returns known frequent mismatches.
|
|
4
|
-
*/
|
|
5
|
-
export async function getFrequentMismatches() {
|
|
6
|
-
const state = getTransactionModuleState();
|
|
7
|
-
return state.patterns.frequent_mismatches;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=getFrequentMismatches.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFrequentMismatches.js","sourceRoot":"","sources":["../../src/tools/getFrequentMismatches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,KAAK,GAAG,yBAAyB,EAAE,CAAC;IAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionModuleState.d.ts","sourceRoot":"","sources":["../../src/tools/getTransactionModuleState.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,yBAAyB,2EAE9C"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { getTransactionModuleState as getState } from "../state/transactionState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Returns the current state of the transactions module.
|
|
4
|
-
*/
|
|
5
|
-
export async function getTransactionModuleState() {
|
|
6
|
-
return getState();
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=getTransactionModuleState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionModuleState.js","sourceRoot":"","sources":["../../src/tools/getTransactionModuleState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,IAAI,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recordSuccessfulReview.d.ts","sourceRoot":"","sources":["../../src/tools/recordSuccessfulReview.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,sBAAsB;;GAG3C"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { recordSuccessfulReview as record } from "../state/transactionState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Records a successful manual review (used to track when to suggest auto-approval).
|
|
4
|
-
*/
|
|
5
|
-
export async function recordSuccessfulReview() {
|
|
6
|
-
record();
|
|
7
|
-
return { success: true };
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=recordSuccessfulReview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recordSuccessfulReview.js","sourceRoot":"","sources":["../../src/tools/recordSuccessfulReview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEhF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setAutoApproveEnabled.d.ts","sourceRoot":"","sources":["../../src/tools/setAutoApproveEnabled.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,OAAO;;;GAG3D"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { updateTransactionModuleState } from "../state/transactionState.js";
|
|
2
|
-
/**
|
|
3
|
-
* Enables or disables automatic approval of confident matches.
|
|
4
|
-
*/
|
|
5
|
-
export async function setAutoApproveEnabled(enabled) {
|
|
6
|
-
updateTransactionModuleState({ auto_approve_enabled: enabled });
|
|
7
|
-
return { success: true, auto_approve_enabled: enabled };
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=setAutoApproveEnabled.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setAutoApproveEnabled.js","sourceRoot":"","sources":["../../src/tools/setAutoApproveEnabled.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAgB;IAC1D,4BAA4B,CAAC,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC;AAC1D,CAAC"}
|