@firela/billclaw-core 0.2.0 → 0.4.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/billclaw.d.ts.map +1 -1
- package/dist/billclaw.js +38 -6
- package/dist/billclaw.js.map +1 -1
- package/dist/errors/errors.d.ts +110 -11
- package/dist/errors/errors.d.ts.map +1 -1
- package/dist/errors/errors.js +421 -122
- package/dist/errors/errors.js.map +1 -1
- package/dist/sources/gmail/gmail-fetch.d.ts +2 -2
- package/dist/sources/gmail/gmail-fetch.d.ts.map +1 -1
- package/dist/sources/gmail/gmail-fetch.js +34 -4
- package/dist/sources/gmail/gmail-fetch.js.map +1 -1
- package/dist/sources/plaid/plaid-sync.d.ts +2 -2
- package/dist/sources/plaid/plaid-sync.d.ts.map +1 -1
- package/dist/sources/plaid/plaid-sync.js +78 -18
- package/dist/sources/plaid/plaid-sync.js.map +1 -1
- package/dist/sync/sync-service.d.ts +2 -2
- package/dist/sync/sync-service.d.ts.map +1 -1
- package/dist/sync/sync-service.js +6 -1
- package/dist/sync/sync-service.js.map +1 -1
- package/package.json +1 -1
package/dist/billclaw.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billclaw.d.ts","sourceRoot":"","sources":["../src/billclaw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"billclaw.d.ts","sourceRoot":"","sources":["../src/billclaw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAa,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAuBxD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,aAAa,GAAE,MAAY,GAC1B,OAAO,CAWT;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;gBAE5B,OAAO,EAAE,cAAc;IAInC;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,cAAc,CAE3B;IAID;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKnC;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC;IAKzB;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAO5D;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAiEzD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAO9C;;OAEG;IACG,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgClE;;OAEG;YACW,gBAAgB;IAe9B;;OAEG;IACG,SAAS,CACb,UAAU,CAAC,EAAE,MAAM,EAAE,EACrB,IAAI,GAAE,MAAW,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgH9B;;OAEG;YACW,gBAAgB;IAe9B;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GACrB,OAAO,CAAC,MAAM,CAAC;IAWlB;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GACrB,OAAO,CAAC,MAAM,CAAC;CAInB"}
|
package/dist/billclaw.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* This class provides the primary API for interacting with BillClaw.
|
|
5
5
|
* It is framework-agnostic and can be used by any adapter (CLI, OpenClaw, etc.).
|
|
6
6
|
*/
|
|
7
|
+
import { createUserError, ERROR_CODES, ErrorCategory } from "./errors/errors.js";
|
|
7
8
|
// Storage
|
|
8
9
|
import { readTransactions, readSyncStates, initializeStorage, } from "./storage/transaction-storage.js";
|
|
9
10
|
// Sync
|
|
@@ -88,12 +89,21 @@ export class Billclaw {
|
|
|
88
89
|
const config = await this.context.config.getConfig();
|
|
89
90
|
const account = config.accounts.find((a) => a.id === accountId);
|
|
90
91
|
if (!account) {
|
|
92
|
+
const notFoundError = createUserError(ERROR_CODES.CONFIG_INVALID, ErrorCategory.CONFIG, "error", false, {
|
|
93
|
+
title: "Account Not Found",
|
|
94
|
+
message: `Account with ID "${accountId}" was not found in the configuration.`,
|
|
95
|
+
suggestions: [
|
|
96
|
+
"Verify the account ID is correct",
|
|
97
|
+
"Check that the account exists in your configuration",
|
|
98
|
+
"Run setup to add the account if needed",
|
|
99
|
+
],
|
|
100
|
+
}, [], { accountId });
|
|
91
101
|
return {
|
|
92
102
|
accountId,
|
|
93
103
|
success: false,
|
|
94
104
|
transactionsAdded: 0,
|
|
95
105
|
transactionsUpdated: 0,
|
|
96
|
-
errors: [
|
|
106
|
+
errors: [notFoundError],
|
|
97
107
|
};
|
|
98
108
|
}
|
|
99
109
|
switch (account.type) {
|
|
@@ -102,12 +112,20 @@ export class Billclaw {
|
|
|
102
112
|
case "gmail":
|
|
103
113
|
return await this.syncGmailAccount(account);
|
|
104
114
|
default:
|
|
115
|
+
const unsupportedTypeError = createUserError(ERROR_CODES.CONFIG_INVALID, ErrorCategory.CONFIG, "error", false, {
|
|
116
|
+
title: "Unsupported Account Type",
|
|
117
|
+
message: `Account type "${account.type}" is not supported.`,
|
|
118
|
+
suggestions: [
|
|
119
|
+
"Supported account types are: plaid, gmail",
|
|
120
|
+
"Update your configuration to use a supported account type",
|
|
121
|
+
],
|
|
122
|
+
}, [], { accountId });
|
|
105
123
|
return {
|
|
106
124
|
accountId,
|
|
107
125
|
success: false,
|
|
108
126
|
transactionsAdded: 0,
|
|
109
127
|
transactionsUpdated: 0,
|
|
110
|
-
errors: [
|
|
128
|
+
errors: [unsupportedTypeError],
|
|
111
129
|
};
|
|
112
130
|
}
|
|
113
131
|
}
|
|
@@ -190,6 +208,14 @@ export class Billclaw {
|
|
|
190
208
|
const tokenExpiry = accountConfig?.gmailTokenExpiry;
|
|
191
209
|
if (!accessToken) {
|
|
192
210
|
this.logger.warn?.(`No access token found for Gmail account ${account.id}. Please run OAuth setup first.`);
|
|
211
|
+
const noTokenError = createUserError(ERROR_CODES.GMAIL_AUTH_FAILED, ErrorCategory.GMAIL_AUTH, "error", true, {
|
|
212
|
+
title: "No OAuth Access Token Found",
|
|
213
|
+
message: `No OAuth access token was found for Gmail account ${account.id}.`,
|
|
214
|
+
suggestions: [
|
|
215
|
+
"Run OAuth setup first to authenticate with Gmail",
|
|
216
|
+
"Ensure the account is properly configured",
|
|
217
|
+
],
|
|
218
|
+
}, [{ type: "oauth_reauth", tool: "gmail_oauth", params: { accountId: account.id } }], { accountId: account.id });
|
|
193
219
|
results.push({
|
|
194
220
|
accountId: account.id,
|
|
195
221
|
success: false,
|
|
@@ -197,13 +223,21 @@ export class Billclaw {
|
|
|
197
223
|
billsExtracted: 0,
|
|
198
224
|
transactionsAdded: 0,
|
|
199
225
|
transactionsUpdated: 0,
|
|
200
|
-
errors: [
|
|
226
|
+
errors: [noTokenError],
|
|
201
227
|
});
|
|
202
228
|
continue;
|
|
203
229
|
}
|
|
204
230
|
// Check if token is expired (with 5 minute buffer)
|
|
205
231
|
if (isTokenExpired(tokenExpiry, 300)) {
|
|
206
232
|
this.logger.warn?.(`Access token expired for Gmail account ${account.id}. Please refresh the token.`);
|
|
233
|
+
const tokenExpiredError = createUserError(ERROR_CODES.GMAIL_AUTH_FAILED, ErrorCategory.GMAIL_AUTH, "error", true, {
|
|
234
|
+
title: "Gmail Access Token Expired",
|
|
235
|
+
message: `The access token for Gmail account ${account.id} has expired.`,
|
|
236
|
+
suggestions: [
|
|
237
|
+
"Refresh the token using OAuth refresh flow",
|
|
238
|
+
"Run setup again to re-authenticate with Gmail",
|
|
239
|
+
],
|
|
240
|
+
}, [{ type: "oauth_reauth", tool: "gmail_oauth", params: { accountId: account.id } }], { accountId: account.id });
|
|
207
241
|
results.push({
|
|
208
242
|
accountId: account.id,
|
|
209
243
|
success: false,
|
|
@@ -211,9 +245,7 @@ export class Billclaw {
|
|
|
211
245
|
billsExtracted: 0,
|
|
212
246
|
transactionsAdded: 0,
|
|
213
247
|
transactionsUpdated: 0,
|
|
214
|
-
errors: [
|
|
215
|
-
"Access token expired. Please refresh the token using OAuth refresh flow.",
|
|
216
|
-
],
|
|
248
|
+
errors: [tokenExpiredError],
|
|
217
249
|
});
|
|
218
250
|
continue;
|
|
219
251
|
}
|
package/dist/billclaw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billclaw.js","sourceRoot":"","sources":["../src/billclaw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"billclaw.js","sourceRoot":"","sources":["../src/billclaw.ts"],"names":[],"mappings":"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"}
|
package/dist/errors/errors.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Error handling utilities for BillClaw
|
|
3
3
|
*
|
|
4
|
-
* Provides
|
|
5
|
-
*
|
|
4
|
+
* Provides dual-mode error handling:
|
|
5
|
+
* - Machine-readable: For AI agents (error codes, severity, executable actions)
|
|
6
|
+
* - Human-readable: For display (title, message, suggestions)
|
|
6
7
|
*
|
|
7
8
|
* Framework-agnostic: Logger is provided via runtime abstraction.
|
|
8
9
|
*/
|
|
@@ -23,16 +24,102 @@ export declare enum ErrorCategory {
|
|
|
23
24
|
UNKNOWN = "unknown"
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
+
* Error codes for programmatic error handling
|
|
28
|
+
* Used by AI agents for switch/case logic and decision making
|
|
27
29
|
*/
|
|
28
|
-
export
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
export declare const ERROR_CODES: {
|
|
31
|
+
readonly LOCK_ACQUISITION_FAILED: "LOCK_ACQUISITION_FAILED";
|
|
32
|
+
readonly LOCK_TIMEOUT: "LOCK_TIMEOUT";
|
|
33
|
+
readonly LOCK_STALE: "LOCK_STALE";
|
|
34
|
+
readonly CREDENTIALS_NOT_FOUND: "CREDENTIALS_NOT_FOUND";
|
|
35
|
+
readonly CREDENTIALS_STORAGE_FAILED: "CREDENTIALS_STORAGE_FAILED";
|
|
36
|
+
readonly CREDENTIALS_KEYCHAIN_FAILED: "CREDENTIALS_KEYCHAIN_FAILED";
|
|
37
|
+
readonly NETWORK_CONNECTION_REFUSED: "NETWORK_CONNECTION_REFUSED";
|
|
38
|
+
readonly NETWORK_TIMEOUT: "NETWORK_TIMEOUT";
|
|
39
|
+
readonly NETWORK_DNS_FAILED: "NETWORK_DNS_FAILED";
|
|
40
|
+
readonly NETWORK_GENERIC: "NETWORK_GENERIC";
|
|
41
|
+
readonly PLAID_ITEM_LOGIN_REQUIRED: "PLAID_ITEM_LOGIN_REQUIRED";
|
|
42
|
+
readonly PLAID_INVALID_ACCESS_TOKEN: "PLAID_INVALID_ACCESS_TOKEN";
|
|
43
|
+
readonly PLAID_PRODUCT_NOT_READY: "PLAID_PRODUCT_NOT_READY";
|
|
44
|
+
readonly PLAID_RATE_LIMIT_EXCEEDED: "PLAID_RATE_LIMIT_EXCEEDED";
|
|
45
|
+
readonly PLAID_INSTITUTION_DOWN: "PLAID_INSTITUTION_DOWN";
|
|
46
|
+
readonly PLAID_INVALID_CREDENTIALS: "PLAID_INVALID_CREDENTIALS";
|
|
47
|
+
readonly PLAID_API_ERROR: "PLAID_API_ERROR";
|
|
48
|
+
readonly GMAIL_AUTH_FAILED: "GMAIL_AUTH_FAILED";
|
|
49
|
+
readonly GMAIL_ACCESS_DENIED: "GMAIL_ACCESS_DENIED";
|
|
50
|
+
readonly GMAIL_API_NOT_FOUND: "GMAIL_API_NOT_FOUND";
|
|
51
|
+
readonly GMAIL_RATE_LIMIT_EXCEEDED: "GMAIL_RATE_LIMIT_EXCEEDED";
|
|
52
|
+
readonly GMAIL_API_ERROR: "GMAIL_API_ERROR";
|
|
53
|
+
readonly STORAGE_DISK_FULL: "STORAGE_DISK_FULL";
|
|
54
|
+
readonly STORAGE_WRITE_FAILED: "STORAGE_WRITE_FAILED";
|
|
55
|
+
readonly STORAGE_READ_FAILED: "STORAGE_READ_FAILED";
|
|
56
|
+
readonly FS_PERMISSION_DENIED: "FS_PERMISSION_DENIED";
|
|
57
|
+
readonly FS_NOT_FOUND: "FS_NOT_FOUND";
|
|
58
|
+
readonly FS_GENERIC: "FS_GENERIC";
|
|
59
|
+
readonly CONFIG_INVALID: "CONFIG_INVALID";
|
|
60
|
+
readonly CONFIG_MISSING: "CONFIG_MISSING";
|
|
61
|
+
readonly CONFIG_PARSE_FAILED: "CONFIG_PARSE_FAILED";
|
|
62
|
+
readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
|
|
63
|
+
};
|
|
64
|
+
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
65
|
+
/**
|
|
66
|
+
* Severity levels for error prioritization
|
|
67
|
+
*/
|
|
68
|
+
export type ErrorSeverity = "fatal" | "error" | "warning" | "info";
|
|
69
|
+
/**
|
|
70
|
+
* AI-executable action types
|
|
71
|
+
* These represent actions an AI agent can take to recover from errors
|
|
72
|
+
*/
|
|
73
|
+
export type ActionType = "retry" | "oauth_reauth" | "config_change" | "abort" | "wait" | "manual_intervention" | "ignore";
|
|
74
|
+
/**
|
|
75
|
+
* AI-executable action for error recovery
|
|
76
|
+
*/
|
|
77
|
+
export interface ErrorAction {
|
|
78
|
+
type: ActionType;
|
|
79
|
+
tool?: string;
|
|
80
|
+
params?: Record<string, unknown>;
|
|
81
|
+
delayMs?: number;
|
|
82
|
+
description?: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Structured entity references for error context
|
|
86
|
+
* Helps AI agents identify which entities are affected by the error
|
|
87
|
+
*/
|
|
88
|
+
export interface ErrorEntities {
|
|
89
|
+
accountId?: string;
|
|
90
|
+
institutionId?: string;
|
|
91
|
+
itemId?: string;
|
|
92
|
+
filePath?: string;
|
|
93
|
+
configKey?: string;
|
|
94
|
+
[key: string]: string | undefined;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Human-readable error information
|
|
98
|
+
* Used for display to users
|
|
99
|
+
*/
|
|
100
|
+
export interface HumanReadableError {
|
|
31
101
|
title: string;
|
|
32
102
|
message: string;
|
|
33
103
|
suggestions: string[];
|
|
34
104
|
docsLink?: string;
|
|
35
|
-
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* User-friendly error with dual-mode support
|
|
108
|
+
*
|
|
109
|
+
* - Machine-readable fields: errorCode, severity, recoverable, nextActions, entities
|
|
110
|
+
* - Human-readable fields: humanReadable (title, message, suggestions, docsLink)
|
|
111
|
+
*/
|
|
112
|
+
export interface UserError {
|
|
113
|
+
type: "UserError";
|
|
114
|
+
errorCode: ErrorCode;
|
|
115
|
+
category: ErrorCategory;
|
|
116
|
+
severity: ErrorSeverity;
|
|
117
|
+
recoverable: boolean;
|
|
118
|
+
nextActions?: ErrorAction[];
|
|
119
|
+
entities?: ErrorEntities;
|
|
120
|
+
humanReadable: HumanReadableError;
|
|
121
|
+
originalError?: Error;
|
|
122
|
+
timestamp?: string;
|
|
36
123
|
}
|
|
37
124
|
/**
|
|
38
125
|
* Logger interface for framework-agnostic logging
|
|
@@ -44,11 +131,21 @@ export interface Logger {
|
|
|
44
131
|
debug(...args: unknown[]): void;
|
|
45
132
|
}
|
|
46
133
|
/**
|
|
47
|
-
* Create a user-friendly error
|
|
134
|
+
* Create a user-friendly error with dual-mode support
|
|
135
|
+
*
|
|
136
|
+
* @param errorCode - Machine-readable error code
|
|
137
|
+
* @param category - Error category
|
|
138
|
+
* @param severity - Error severity level
|
|
139
|
+
* @param recoverable - Whether the error is recoverable
|
|
140
|
+
* @param humanReadable - Human-readable error information
|
|
141
|
+
* @param nextActions - AI-executable recovery actions
|
|
142
|
+
* @param entities - Structured entity references
|
|
143
|
+
* @param originalError - Original error for debugging
|
|
48
144
|
*/
|
|
49
|
-
export declare function createUserError(category: ErrorCategory,
|
|
145
|
+
export declare function createUserError(errorCode: ErrorCode, category: ErrorCategory, severity: ErrorSeverity, recoverable: boolean, humanReadable: HumanReadableError, nextActions?: ErrorAction[], entities?: ErrorEntities, originalError?: Error): UserError;
|
|
50
146
|
/**
|
|
51
147
|
* Format error for display to user
|
|
148
|
+
* Uses the humanReadable field for user-friendly output
|
|
52
149
|
*/
|
|
53
150
|
export declare function formatError(error: UserError): string;
|
|
54
151
|
/**
|
|
@@ -60,7 +157,9 @@ export declare function parsePlaidError(error: {
|
|
|
60
157
|
error_type?: string;
|
|
61
158
|
display_message?: string;
|
|
62
159
|
request_id?: string;
|
|
63
|
-
|
|
160
|
+
item_id?: string;
|
|
161
|
+
institution_id?: string;
|
|
162
|
+
}, accountId?: string): UserError;
|
|
64
163
|
/**
|
|
65
164
|
* Parse Gmail API errors and create user-friendly errors
|
|
66
165
|
*/
|
|
@@ -68,7 +167,7 @@ export declare function parseGmailError(error: {
|
|
|
68
167
|
code?: number;
|
|
69
168
|
message?: string;
|
|
70
169
|
status?: number;
|
|
71
|
-
}): UserError;
|
|
170
|
+
}, accountId?: string): UserError;
|
|
72
171
|
/**
|
|
73
172
|
* Parse network errors
|
|
74
173
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"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"}
|