@firela/billclaw-core 0.1.3

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.
Files changed (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/billclaw.d.ts +76 -0
  4. package/dist/billclaw.d.ts.map +1 -0
  5. package/dist/billclaw.js +205 -0
  6. package/dist/billclaw.js.map +1 -0
  7. package/dist/credentials/index.d.ts +8 -0
  8. package/dist/credentials/index.d.ts.map +1 -0
  9. package/dist/credentials/index.js +8 -0
  10. package/dist/credentials/index.js.map +1 -0
  11. package/dist/credentials/keychain.d.ts +92 -0
  12. package/dist/credentials/keychain.d.ts.map +1 -0
  13. package/dist/credentials/keychain.js +172 -0
  14. package/dist/credentials/keychain.js.map +1 -0
  15. package/dist/credentials/store.d.ts +76 -0
  16. package/dist/credentials/store.d.ts.map +1 -0
  17. package/dist/credentials/store.js +144 -0
  18. package/dist/credentials/store.js.map +1 -0
  19. package/dist/errors/errors.d.ts +92 -0
  20. package/dist/errors/errors.d.ts.map +1 -0
  21. package/dist/errors/errors.js +315 -0
  22. package/dist/errors/errors.js.map +1 -0
  23. package/dist/errors/index.d.ts +7 -0
  24. package/dist/errors/index.d.ts.map +1 -0
  25. package/dist/errors/index.js +7 -0
  26. package/dist/errors/index.js.map +1 -0
  27. package/dist/exporters/beancount.d.ts +42 -0
  28. package/dist/exporters/beancount.d.ts.map +1 -0
  29. package/dist/exporters/beancount.js +141 -0
  30. package/dist/exporters/beancount.js.map +1 -0
  31. package/dist/exporters/index.d.ts +8 -0
  32. package/dist/exporters/index.d.ts.map +1 -0
  33. package/dist/exporters/index.js +8 -0
  34. package/dist/exporters/index.js.map +1 -0
  35. package/dist/exporters/ledger.d.ts +42 -0
  36. package/dist/exporters/ledger.d.ts.map +1 -0
  37. package/dist/exporters/ledger.js +139 -0
  38. package/dist/exporters/ledger.js.map +1 -0
  39. package/dist/index.d.ts +23 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +34 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/models/config.d.ts +552 -0
  44. package/dist/models/config.d.ts.map +1 -0
  45. package/dist/models/config.js +168 -0
  46. package/dist/models/config.js.map +1 -0
  47. package/dist/models/index.d.ts +7 -0
  48. package/dist/models/index.d.ts.map +1 -0
  49. package/dist/models/index.js +8 -0
  50. package/dist/models/index.js.map +1 -0
  51. package/dist/runtime/index.d.ts +7 -0
  52. package/dist/runtime/index.d.ts.map +1 -0
  53. package/dist/runtime/index.js +7 -0
  54. package/dist/runtime/index.js.map +1 -0
  55. package/dist/runtime/types.d.ts +110 -0
  56. package/dist/runtime/types.d.ts.map +1 -0
  57. package/dist/runtime/types.js +85 -0
  58. package/dist/runtime/types.js.map +1 -0
  59. package/dist/security/audit.d.ts +148 -0
  60. package/dist/security/audit.d.ts.map +1 -0
  61. package/dist/security/audit.js +286 -0
  62. package/dist/security/audit.js.map +1 -0
  63. package/dist/security/index.d.ts +7 -0
  64. package/dist/security/index.d.ts.map +1 -0
  65. package/dist/security/index.js +7 -0
  66. package/dist/security/index.js.map +1 -0
  67. package/dist/services/event-emitter.d.ts +171 -0
  68. package/dist/services/event-emitter.d.ts.map +1 -0
  69. package/dist/services/event-emitter.js +287 -0
  70. package/dist/services/event-emitter.js.map +1 -0
  71. package/dist/services/index.d.ts +8 -0
  72. package/dist/services/index.d.ts.map +1 -0
  73. package/dist/services/index.js +8 -0
  74. package/dist/services/index.js.map +1 -0
  75. package/dist/sources/gmail/bill-recognizer.d.ts +71 -0
  76. package/dist/sources/gmail/bill-recognizer.d.ts.map +1 -0
  77. package/dist/sources/gmail/bill-recognizer.js +341 -0
  78. package/dist/sources/gmail/bill-recognizer.js.map +1 -0
  79. package/dist/sources/gmail/email-parser.d.ts +68 -0
  80. package/dist/sources/gmail/email-parser.d.ts.map +1 -0
  81. package/dist/sources/gmail/email-parser.js +238 -0
  82. package/dist/sources/gmail/email-parser.js.map +1 -0
  83. package/dist/sources/gmail/gmail-fetch.d.ts +54 -0
  84. package/dist/sources/gmail/gmail-fetch.d.ts.map +1 -0
  85. package/dist/sources/gmail/gmail-fetch.js +300 -0
  86. package/dist/sources/gmail/gmail-fetch.js.map +1 -0
  87. package/dist/sources/gmail/index.d.ts +7 -0
  88. package/dist/sources/gmail/index.d.ts.map +1 -0
  89. package/dist/sources/gmail/index.js +7 -0
  90. package/dist/sources/gmail/index.js.map +1 -0
  91. package/dist/sources/index.d.ts +8 -0
  92. package/dist/sources/index.d.ts.map +1 -0
  93. package/dist/sources/index.js +8 -0
  94. package/dist/sources/index.js.map +1 -0
  95. package/dist/sources/plaid/index.d.ts +7 -0
  96. package/dist/sources/plaid/index.d.ts.map +1 -0
  97. package/dist/sources/plaid/index.js +7 -0
  98. package/dist/sources/plaid/index.js.map +1 -0
  99. package/dist/sources/plaid/plaid-sync.d.ts +42 -0
  100. package/dist/sources/plaid/plaid-sync.d.ts.map +1 -0
  101. package/dist/sources/plaid/plaid-sync.js +182 -0
  102. package/dist/sources/plaid/plaid-sync.js.map +1 -0
  103. package/dist/storage/cache.d.ts +134 -0
  104. package/dist/storage/cache.d.ts.map +1 -0
  105. package/dist/storage/cache.js +239 -0
  106. package/dist/storage/cache.js.map +1 -0
  107. package/dist/storage/index.d.ts +11 -0
  108. package/dist/storage/index.d.ts.map +1 -0
  109. package/dist/storage/index.js +11 -0
  110. package/dist/storage/index.js.map +1 -0
  111. package/dist/storage/indexes.d.ts +136 -0
  112. package/dist/storage/indexes.d.ts.map +1 -0
  113. package/dist/storage/indexes.js +294 -0
  114. package/dist/storage/indexes.js.map +1 -0
  115. package/dist/storage/locking.d.ts +103 -0
  116. package/dist/storage/locking.d.ts.map +1 -0
  117. package/dist/storage/locking.js +158 -0
  118. package/dist/storage/locking.js.map +1 -0
  119. package/dist/storage/streaming.d.ts +102 -0
  120. package/dist/storage/streaming.d.ts.map +1 -0
  121. package/dist/storage/streaming.js +245 -0
  122. package/dist/storage/streaming.js.map +1 -0
  123. package/dist/storage/transaction-storage.d.ts +101 -0
  124. package/dist/storage/transaction-storage.d.ts.map +1 -0
  125. package/dist/storage/transaction-storage.js +193 -0
  126. package/dist/storage/transaction-storage.js.map +1 -0
  127. package/dist/sync/index.d.ts +7 -0
  128. package/dist/sync/index.d.ts.map +1 -0
  129. package/dist/sync/index.js +7 -0
  130. package/dist/sync/index.js.map +1 -0
  131. package/dist/sync/sync-service.d.ts +42 -0
  132. package/dist/sync/sync-service.d.ts.map +1 -0
  133. package/dist/sync/sync-service.js +112 -0
  134. package/dist/sync/sync-service.js.map +1 -0
  135. package/dist/test-fixtures.d.ts +38 -0
  136. package/dist/test-fixtures.d.ts.map +1 -0
  137. package/dist/test-fixtures.js +137 -0
  138. package/dist/test-fixtures.js.map +1 -0
  139. package/package.json +68 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Gmail data source for BillClaw - Framework-agnostic Gmail integration
3
+ *
4
+ * Core business logic for fetching and processing bill emails from Gmail.
5
+ * OAuth token management is provided by the adapter layer.
6
+ */
7
+ import type { Logger } from "../../errors/errors.js";
8
+ import type { StorageConfig } from "../../models/config.js";
9
+ import { type EmailContent, type GmailConfig } from "./bill-recognizer.js";
10
+ export interface GmailAccount {
11
+ id: string;
12
+ gmailEmailAddress: string;
13
+ }
14
+ export interface GmailFetchResult {
15
+ success: boolean;
16
+ accountId: string;
17
+ emailsProcessed: number;
18
+ billsExtracted: number;
19
+ transactionsAdded: number;
20
+ transactionsUpdated: number;
21
+ errors?: string[];
22
+ }
23
+ /**
24
+ * Gmail fetcher options
25
+ */
26
+ export interface GmailFetcherOptions {
27
+ accessToken: string;
28
+ userId?: string;
29
+ query?: string;
30
+ maxResults?: number;
31
+ }
32
+ /**
33
+ * Fetch emails from Gmail API
34
+ *
35
+ * NOTE: This is a framework-agnostic function that requires OAuth tokens.
36
+ * The adapter layer (OpenClaw or CLI) provides the access token.
37
+ *
38
+ * This implementation uses a simple fetch-based approach. For production use,
39
+ * consider using the official Gmail API client library.
40
+ */
41
+ export declare function fetchGmailEmails(options: GmailFetcherOptions, config: GmailConfig, logger: Logger): Promise<EmailContent[]>;
42
+ /**
43
+ * Fetch bills from Gmail
44
+ *
45
+ * Main entry point for Gmail bill fetching workflow:
46
+ * 1. Fetch emails matching criteria
47
+ * 2. Recognize which emails are bills
48
+ * 3. Parse bill emails into transactions
49
+ * 4. Store transactions
50
+ */
51
+ export declare function fetchGmailBills(account: GmailAccount, _days: number | undefined, gmailConfig: GmailConfig, storageConfig: StorageConfig, logger: Logger, accessToken?: string): Promise<GmailFetchResult>;
52
+ export * from "./bill-recognizer.js";
53
+ export * from "./email-parser.js";
54
+ //# sourceMappingURL=gmail-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-fetch.d.ts","sourceRoot":"","sources":["../../../src/sources/gmail/gmail-fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAG3D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAM7B,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,EAAE,CAAC,CA8DzB;AA6KD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,YAAK,EAClB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CA8G3B;AAGD,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Gmail data source for BillClaw - Framework-agnostic Gmail integration
3
+ *
4
+ * Core business logic for fetching and processing bill emails from Gmail.
5
+ * OAuth token management is provided by the adapter layer.
6
+ */
7
+ import { appendTransactions } from "../../storage/transaction-storage.js";
8
+ import { filterToBills, } from "./bill-recognizer.js";
9
+ import { parseBillToTransaction, } from "./email-parser.js";
10
+ /**
11
+ * Fetch emails from Gmail API
12
+ *
13
+ * NOTE: This is a framework-agnostic function that requires OAuth tokens.
14
+ * The adapter layer (OpenClaw or CLI) provides the access token.
15
+ *
16
+ * This implementation uses a simple fetch-based approach. For production use,
17
+ * consider using the official Gmail API client library.
18
+ */
19
+ export async function fetchGmailEmails(options, config, logger) {
20
+ const { accessToken, userId = "me", query, maxResults = 50 } = options;
21
+ logger.info?.("Fetching emails from Gmail API...");
22
+ // Build Gmail search query
23
+ let searchQuery = query || buildGmailQuery(config);
24
+ try {
25
+ // Construct Gmail API URL
26
+ const apiUrl = new URL(`https://www.googleapis.com/gmail/v1/users/${userId}/messages`);
27
+ apiUrl.searchParams.set("q", searchQuery);
28
+ apiUrl.searchParams.set("maxResults", maxResults.toString());
29
+ // Fetch message list
30
+ const response = await fetch(apiUrl.toString(), {
31
+ headers: {
32
+ Authorization: `Bearer ${accessToken}`,
33
+ Accept: "application/json",
34
+ },
35
+ });
36
+ if (!response.ok) {
37
+ const errorText = await response.text();
38
+ throw new Error(`Gmail API error: ${response.status} ${errorText}`);
39
+ }
40
+ const data = (await response.json());
41
+ const messages = data.messages || [];
42
+ logger.info?.(`Found ${messages.length} messages matching query`);
43
+ if (messages.length === 0) {
44
+ return [];
45
+ }
46
+ // Fetch full message details for each message
47
+ const emails = [];
48
+ for (const message of messages) {
49
+ try {
50
+ const email = await fetchGmailMessage(userId, message.id, accessToken);
51
+ if (email) {
52
+ emails.push(email);
53
+ }
54
+ }
55
+ catch (error) {
56
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
57
+ logger.warn?.(`Failed to fetch message ${message.id}: ${errorMsg}`);
58
+ }
59
+ }
60
+ return emails;
61
+ }
62
+ catch (error) {
63
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
64
+ logger.error?.(`Gmail fetch failed: ${errorMsg}`);
65
+ throw error;
66
+ }
67
+ }
68
+ /**
69
+ * Fetch a single Gmail message with full details
70
+ */
71
+ async function fetchGmailMessage(userId, messageId, accessToken) {
72
+ const apiUrl = new URL(`https://www.googleapis.com/gmail/v1/users/${userId}/messages/${messageId}`);
73
+ apiUrl.searchParams.set("format", "full");
74
+ const response = await fetch(apiUrl.toString(), {
75
+ headers: {
76
+ Authorization: `Bearer ${accessToken}`,
77
+ Accept: "application/json",
78
+ },
79
+ });
80
+ if (!response.ok) {
81
+ return null;
82
+ }
83
+ const message = (await response.json());
84
+ return parseGmailMessage(message);
85
+ }
86
+ /**
87
+ * Parse Gmail API message into EmailContent
88
+ */
89
+ function parseGmailMessage(message) {
90
+ const headers = message.payload.headers || [];
91
+ const getHeader = (name) => {
92
+ const header = headers.find((h) => h.name.toLowerCase() === name.toLowerCase());
93
+ return header?.value || "";
94
+ };
95
+ const subject = getHeader("Subject");
96
+ const from = getHeader("From");
97
+ const to = getHeader("To");
98
+ const date = getHeader("Date");
99
+ // Extract body text
100
+ const body = extractMessageBody(message.payload);
101
+ return {
102
+ id: message.id,
103
+ subject,
104
+ from,
105
+ to,
106
+ date,
107
+ body,
108
+ };
109
+ }
110
+ /**
111
+ * Extract message body from Gmail payload
112
+ * Handles both plain text and HTML, traversing parts if needed
113
+ */
114
+ function extractMessageBody(payload) {
115
+ // If body has data, decode it
116
+ if (payload.body?.data) {
117
+ return base64UrlDecode(payload.body.data);
118
+ }
119
+ // If there are parts, traverse them to find text content
120
+ if (payload.parts) {
121
+ for (const part of payload.parts) {
122
+ // Prefer plain text over HTML
123
+ if (part.mimeType === "text/plain" && part.body?.data) {
124
+ return base64UrlDecode(part.body.data);
125
+ }
126
+ if (part.mimeType === "text/html" && part.body?.data) {
127
+ // Strip HTML tags for plain text
128
+ const html = base64UrlDecode(part.body.data);
129
+ return html
130
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
131
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
132
+ .replace(/<[^>]+>/g, " ")
133
+ .replace(/\s+/g, " ")
134
+ .trim();
135
+ }
136
+ // Recurse into nested parts
137
+ const nestedBody = extractMessageBody(part);
138
+ if (nestedBody) {
139
+ return nestedBody;
140
+ }
141
+ }
142
+ }
143
+ return "";
144
+ }
145
+ /**
146
+ * Decode base64url encoded string
147
+ */
148
+ function base64UrlDecode(encoded) {
149
+ // Replace base64url characters with base64 standard
150
+ const base64 = encoded.replace(/-/g, "+").replace(/_/g, "/");
151
+ // Add padding if needed
152
+ const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, "=");
153
+ // Decode
154
+ try {
155
+ const binary = atob(padded);
156
+ const bytes = new Uint8Array(binary.length);
157
+ for (let i = 0; i < binary.length; i++) {
158
+ bytes[i] = binary.charCodeAt(i);
159
+ }
160
+ return new TextDecoder().decode(bytes);
161
+ }
162
+ catch {
163
+ // Fallback for simple base64 without padding
164
+ return atob(base64);
165
+ }
166
+ }
167
+ /**
168
+ * Build Gmail search query from config
169
+ */
170
+ function buildGmailQuery(config) {
171
+ const parts = [];
172
+ // Add keyword search
173
+ if (config.keywords.length > 0) {
174
+ const keywordQuery = config.keywords.map((k) => `"${k}"`).join(" OR ");
175
+ parts.push(`(${keywordQuery})`);
176
+ }
177
+ // Add sender whitelist
178
+ if (config.senderWhitelist.length > 0) {
179
+ const senderQuery = config.senderWhitelist
180
+ .map((s) => {
181
+ if (s.startsWith("@")) {
182
+ return `from:${s}`;
183
+ }
184
+ return `from:${s}`;
185
+ })
186
+ .join(" OR ");
187
+ parts.push(`(${senderQuery})`);
188
+ }
189
+ // Add time filter (emails from last 30 days)
190
+ parts.push("newer_than:30d");
191
+ return parts.join(" ");
192
+ }
193
+ /**
194
+ * Parse ParsedTransaction to Transaction format for storage
195
+ */
196
+ function parsedToStorageTransaction(parsed) {
197
+ return {
198
+ transactionId: parsed.transactionId,
199
+ plaidTransactionId: parsed.transactionId, // Gmail uses same field
200
+ accountId: parsed.accountId,
201
+ date: parsed.date,
202
+ amount: parsed.amount,
203
+ currency: parsed.currency,
204
+ category: parsed.category,
205
+ merchantName: parsed.merchantName,
206
+ paymentChannel: parsed.paymentChannel,
207
+ pending: parsed.pending,
208
+ createdAt: new Date().toISOString(),
209
+ };
210
+ }
211
+ /**
212
+ * Fetch bills from Gmail
213
+ *
214
+ * Main entry point for Gmail bill fetching workflow:
215
+ * 1. Fetch emails matching criteria
216
+ * 2. Recognize which emails are bills
217
+ * 3. Parse bill emails into transactions
218
+ * 4. Store transactions
219
+ */
220
+ export async function fetchGmailBills(account, _days = 30, gmailConfig, storageConfig, logger, accessToken) {
221
+ if (!accessToken) {
222
+ return {
223
+ success: false,
224
+ accountId: account.id,
225
+ emailsProcessed: 0,
226
+ billsExtracted: 0,
227
+ transactionsAdded: 0,
228
+ transactionsUpdated: 0,
229
+ errors: ["No OAuth access token provided"],
230
+ };
231
+ }
232
+ try {
233
+ logger.info?.(`Fetching Gmail bills for account ${account.id}...`);
234
+ // Step 1: Fetch emails from Gmail
235
+ const emails = await fetchGmailEmails({
236
+ accessToken,
237
+ query: buildGmailQuery(gmailConfig),
238
+ maxResults: 50,
239
+ }, gmailConfig, logger);
240
+ logger.info?.(`Fetched ${emails.length} emails from Gmail`);
241
+ if (emails.length === 0) {
242
+ return {
243
+ success: true,
244
+ accountId: account.id,
245
+ emailsProcessed: 0,
246
+ billsExtracted: 0,
247
+ transactionsAdded: 0,
248
+ transactionsUpdated: 0,
249
+ };
250
+ }
251
+ // Step 2: Recognize bills from emails
252
+ const billEmails = filterToBills(emails, gmailConfig);
253
+ logger.info?.(`Identified ${billEmails.length} bill emails (threshold: ${gmailConfig.confidenceThreshold})`);
254
+ if (billEmails.length === 0) {
255
+ return {
256
+ success: true,
257
+ accountId: account.id,
258
+ emailsProcessed: emails.length,
259
+ billsExtracted: 0,
260
+ transactionsAdded: 0,
261
+ transactionsUpdated: 0,
262
+ };
263
+ }
264
+ // Step 3: Parse bills into transactions
265
+ const transactions = [];
266
+ for (const { email, recognition } of billEmails) {
267
+ const parsed = parseBillToTransaction(account.id, email.id, email.subject, email.body, email.from, email.date, recognition);
268
+ transactions.push(parsedToStorageTransaction(parsed));
269
+ }
270
+ // Step 4: Store transactions
271
+ const now = new Date();
272
+ const storageResult = await appendTransactions(account.id, now.getFullYear(), now.getMonth() + 1, transactions, storageConfig);
273
+ logger.info?.(`Stored ${storageResult.added} new, ${storageResult.updated} updated transactions`);
274
+ return {
275
+ success: true,
276
+ accountId: account.id,
277
+ emailsProcessed: emails.length,
278
+ billsExtracted: billEmails.length,
279
+ transactionsAdded: storageResult.added,
280
+ transactionsUpdated: storageResult.updated,
281
+ };
282
+ }
283
+ catch (error) {
284
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
285
+ logger.error?.(`Gmail fetch failed: ${errorMsg}`);
286
+ return {
287
+ success: false,
288
+ accountId: account.id,
289
+ emailsProcessed: 0,
290
+ billsExtracted: 0,
291
+ transactionsAdded: 0,
292
+ transactionsUpdated: 0,
293
+ errors: [errorMsg],
294
+ };
295
+ }
296
+ }
297
+ // Re-export types and functions from submodules
298
+ export * from "./bill-recognizer.js";
299
+ export * from "./email-parser.js";
300
+ //# sourceMappingURL=gmail-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-fetch.js","sourceRoot":"","sources":["../../../src/sources/gmail/gmail-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Gmail data source for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./gmail-fetch.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sources/gmail/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Gmail data source for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./gmail-fetch.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/gmail/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data sources for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./plaid/index.js";
7
+ export * from "./gmail/index.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Data sources for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./plaid/index.js";
7
+ export * from "./gmail/index.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plaid data source for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./plaid-sync.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sources/plaid/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Plaid data source for BillClaw
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export * from "./plaid-sync.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/plaid/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Plaid data source for BillClaw - Framework-agnostic Plaid integration
3
+ */
4
+ import { PlaidApi } from "plaid";
5
+ import type { StorageConfig, WebhookConfig } from "../../models/config.js";
6
+ import type { Transaction } from "../../storage/transaction-storage.js";
7
+ import type { Logger } from "../../errors/errors.js";
8
+ export interface PlaidConfig {
9
+ clientId: string;
10
+ secret: string;
11
+ environment: "sandbox" | "development" | "production";
12
+ }
13
+ export interface PlaidAccount {
14
+ id: string;
15
+ plaidAccessToken: string;
16
+ }
17
+ export interface PlaidSyncResult {
18
+ success: boolean;
19
+ accountId: string;
20
+ transactionsAdded: number;
21
+ transactionsUpdated: number;
22
+ cursor: string;
23
+ errors?: string[];
24
+ requiresReauth?: boolean;
25
+ }
26
+ /**
27
+ * Create Plaid API client
28
+ */
29
+ export declare function createPlaidClient(config: PlaidConfig): PlaidApi;
30
+ /**
31
+ * Convert Plaid transaction to internal format
32
+ */
33
+ export declare function convertTransaction(plaidTxn: any, accountId: string): Transaction;
34
+ /**
35
+ * Sync transactions from a single Plaid account
36
+ */
37
+ export declare function syncPlaidAccount(account: PlaidAccount, plaidClient: PlaidApi, storageConfig: StorageConfig, logger: Logger, webhooks?: WebhookConfig[]): Promise<PlaidSyncResult>;
38
+ /**
39
+ * Sync multiple Plaid accounts
40
+ */
41
+ export declare function syncPlaidAccounts(accounts: PlaidAccount[], plaidConfig: PlaidConfig, storageConfig: StorageConfig, logger: Logger, webhooks?: WebhookConfig[]): Promise<PlaidSyncResult[]>;
42
+ //# sourceMappingURL=plaid-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plaid-sync.d.ts","sourceRoot":"","sources":["../../../src/sources/plaid/plaid-sync.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAiB,QAAQ,EAAqB,MAAM,OAAO,CAAA;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAUpD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,SAAS,GAAG,aAAa,GAAG,YAAY,CAAA;CACtD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAqB/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,MAAM,GAChB,WAAW,CAcb;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,QAAQ,EACrB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,aAAa,EAAO,GAC7B,OAAO,CAAC,eAAe,CAAC,CAmJ1B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EAAE,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,aAAa,EAAO,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CA0B5B"}