@actual-app/api 5.1.2 → 6.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/dist/app/bundle.api.d.ts +3 -0
- package/dist/app/bundle.api.js +74496 -0
- package/dist/app/query.d.ts +19 -0
- package/dist/app/query.js +102 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +110 -0
- package/dist/injected.d.ts +2 -0
- package/dist/injected.js +8 -0
- package/dist/methods.d.ts +35 -0
- package/dist/methods.js +258 -0
- package/dist/migrations/1632571489012_remove_cache.d.ts +1 -0
- package/dist/migrations/1632571489012_remove_cache.js +129 -0
- package/dist/test.d.ts +1 -0
- package/dist/test.js +79 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +11 -0
- package/migrations/1681115033845_add_schedule_name.sql +5 -0
- package/migrations/1682974838138_remove_payee_rules.sql +5 -0
- package/package.json +11 -9
- package/app/bundle.api.js +0 -68617
- package/app/bundle.api.js.map +0 -1
- package/app/query.js +0 -104
- package/index.js +0 -34
- package/injected.js +0 -5
- package/methods.js +0 -212
- package/utils.js +0 -9
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
39
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
40
|
+
if (!m) return o;
|
|
41
|
+
var i = m.call(o), r, ar = [], e;
|
|
42
|
+
try {
|
|
43
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
44
|
+
}
|
|
45
|
+
catch (error) { e = { error: error }; }
|
|
46
|
+
finally {
|
|
47
|
+
try {
|
|
48
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
49
|
+
}
|
|
50
|
+
finally { if (e) throw e.error; }
|
|
51
|
+
}
|
|
52
|
+
return ar;
|
|
53
|
+
};
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
function runMigration(db, uuid) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
57
|
+
function getValue(node) {
|
|
58
|
+
return node.expr != null ? node.expr : node.cachedValue;
|
|
59
|
+
}
|
|
60
|
+
var budget, buffers, notes, parseNote;
|
|
61
|
+
return __generator(this, function (_a) {
|
|
62
|
+
db.execQuery("\nCREATE TABLE zero_budget_months\n (id TEXT PRIMARY KEY,\n buffered INTEGER DEFAULT 0);\n\nCREATE TABLE zero_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE reflect_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE notes\n (id TEXT PRIMARY KEY,\n note TEXT);\n\nCREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);\nCREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);\n");
|
|
63
|
+
budget = db.runQuery("SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'", [], true);
|
|
64
|
+
db.transaction(function () {
|
|
65
|
+
budget.forEach(function (monthBudget) {
|
|
66
|
+
var match = monthBudget.name.match(/^(budget-report|budget)(\d+)!budget-(.+)$/);
|
|
67
|
+
if (match == null) {
|
|
68
|
+
console.log('Warning: invalid budget month name', monthBudget.name);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
var type = match[1];
|
|
72
|
+
var month = match[2].slice(0, 4) + '-' + match[2].slice(4);
|
|
73
|
+
var dbmonth = parseInt(match[2]);
|
|
74
|
+
var cat = match[3];
|
|
75
|
+
var amount = parseInt(getValue(monthBudget));
|
|
76
|
+
if (isNaN(amount)) {
|
|
77
|
+
amount = 0;
|
|
78
|
+
}
|
|
79
|
+
var sheetName = monthBudget.name.split('!')[0];
|
|
80
|
+
var carryover = db.runQuery('SELECT * FROM spreadsheet_cells WHERE name = ?', ["".concat(sheetName, "!carryover-").concat(cat)], true);
|
|
81
|
+
var table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';
|
|
82
|
+
db.runQuery("INSERT INTO ".concat(table, " (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)"), [
|
|
83
|
+
"".concat(month, "-").concat(cat),
|
|
84
|
+
dbmonth,
|
|
85
|
+
cat,
|
|
86
|
+
amount,
|
|
87
|
+
carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0,
|
|
88
|
+
]);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
buffers = db.runQuery("SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'", [], true);
|
|
92
|
+
db.transaction(function () {
|
|
93
|
+
buffers.forEach(function (buffer) {
|
|
94
|
+
var match = buffer.name.match(/^budget(\d+)!buffered$/);
|
|
95
|
+
if (match) {
|
|
96
|
+
var month = match[1].slice(0, 4) + '-' + match[1].slice(4);
|
|
97
|
+
var amount = parseInt(getValue(buffer));
|
|
98
|
+
if (isNaN(amount)) {
|
|
99
|
+
amount = 0;
|
|
100
|
+
}
|
|
101
|
+
db.runQuery("INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)", [month, amount]);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
notes = db.runQuery("SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'", [], true);
|
|
106
|
+
parseNote = function (str) {
|
|
107
|
+
try {
|
|
108
|
+
var value = JSON.parse(str);
|
|
109
|
+
return value && value !== '' ? value : null;
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
db.transaction(function () {
|
|
116
|
+
notes.forEach(function (note) {
|
|
117
|
+
var parsed = parseNote(getValue(note));
|
|
118
|
+
if (parsed) {
|
|
119
|
+
var _a = __read(note.name.split('!'), 2), id = _a[1];
|
|
120
|
+
db.runQuery("INSERT INTO notes (id, note) VALUES (?, ?)", [id, parsed]);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
db.execQuery("\n DROP TABLE spreadsheet_cells;\n ANALYZE;\n VACUUM;\n ");
|
|
125
|
+
return [2 /*return*/];
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
exports.default = runMigration;
|
package/dist/test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/test.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
var api = __importStar(require("./index"));
|
|
63
|
+
function run() {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var app;
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
switch (_a.label) {
|
|
68
|
+
case 0: return [4 /*yield*/, api.init({ config: { dataDir: '/tmp' } })];
|
|
69
|
+
case 1:
|
|
70
|
+
app = _a.sent();
|
|
71
|
+
return [4 /*yield*/, app.send('create-budget', { testMode: true })];
|
|
72
|
+
case 2:
|
|
73
|
+
_a.sent();
|
|
74
|
+
return [2 /*return*/];
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
run();
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.integerToAmount = exports.amountToInteger = void 0;
|
|
4
|
+
function amountToInteger(n) {
|
|
5
|
+
return Math.round(n * 100);
|
|
6
|
+
}
|
|
7
|
+
exports.amountToInteger = amountToInteger;
|
|
8
|
+
function integerToAmount(n) {
|
|
9
|
+
return parseFloat((n / 100).toFixed(2));
|
|
10
|
+
}
|
|
11
|
+
exports.integerToAmount = integerToAmount;
|
package/package.json
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actual-app/api",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "An API for Actual",
|
|
6
|
-
"main": "index.js",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
7
8
|
"files": [
|
|
8
|
-
"
|
|
9
|
+
"dist",
|
|
9
10
|
"default-db.sqlite",
|
|
10
|
-
"
|
|
11
|
-
"injected.js",
|
|
12
|
-
"methods.js",
|
|
13
|
-
"migrations",
|
|
14
|
-
"utils.js"
|
|
11
|
+
"migrations"
|
|
15
12
|
],
|
|
16
13
|
"scripts": {
|
|
17
14
|
"lint": "eslint .",
|
|
18
|
-
"build": "yarn workspace loot-core build:api"
|
|
15
|
+
"build:app": "yarn workspace loot-core build:api",
|
|
16
|
+
"build:node": "tsc --p tsconfig.dist.json",
|
|
17
|
+
"build": "yarn run build:app && yarn run build:node"
|
|
19
18
|
},
|
|
20
19
|
"dependencies": {
|
|
21
20
|
"better-sqlite3": "^8.2.0",
|
|
22
21
|
"node-fetch": "^2.6.9",
|
|
23
22
|
"uuid": "3.3.2"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"typescript": "^5.0.2"
|
|
24
26
|
}
|
|
25
27
|
}
|