@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,552 @@
1
+ /**
2
+ * Zod schemas for BillClaw configuration
3
+ *
4
+ * This file contains Zod schemas for type-safe configuration validation.
5
+ * These schemas are framework-agnostic and work across all adapters.
6
+ */
7
+ import { z } from "zod";
8
+ /**
9
+ * Account types supported by BillClaw
10
+ */
11
+ export declare const AccountTypeSchema: z.ZodEnum<["plaid", "gocardless", "gmail"]>;
12
+ export type AccountType = z.infer<typeof AccountTypeSchema>;
13
+ /**
14
+ * Sync frequency options
15
+ */
16
+ export declare const SyncFrequencySchema: z.ZodEnum<["realtime", "hourly", "daily", "weekly", "manual"]>;
17
+ export type SyncFrequency = z.infer<typeof SyncFrequencySchema>;
18
+ /**
19
+ * Plaid environment options
20
+ */
21
+ export declare const PlaidEnvironmentSchema: z.ZodEnum<["sandbox", "development", "production"]>;
22
+ export type PlaidEnvironment = z.infer<typeof PlaidEnvironmentSchema>;
23
+ /**
24
+ * Webhook event types
25
+ */
26
+ export declare const WebhookEventTypeSchema: z.ZodEnum<["transaction.new", "transaction.updated", "transaction.deleted", "sync.started", "sync.completed", "sync.failed", "account.connected", "account.disconnected", "account.error", "webhook.test"]>;
27
+ export type WebhookEventType = z.infer<typeof WebhookEventTypeSchema>;
28
+ /**
29
+ * Per-account configuration
30
+ */
31
+ export declare const AccountConfigSchema: z.ZodObject<{
32
+ id: z.ZodString;
33
+ type: z.ZodEnum<["plaid", "gocardless", "gmail"]>;
34
+ name: z.ZodString;
35
+ enabled: z.ZodDefault<z.ZodBoolean>;
36
+ syncFrequency: z.ZodDefault<z.ZodEnum<["realtime", "hourly", "daily", "weekly", "manual"]>>;
37
+ lastSync: z.ZodOptional<z.ZodString>;
38
+ lastStatus: z.ZodOptional<z.ZodEnum<["success", "error", "pending"]>>;
39
+ plaidItemId: z.ZodOptional<z.ZodString>;
40
+ plaidAccessToken: z.ZodOptional<z.ZodString>;
41
+ gocardlessRequisitionId: z.ZodOptional<z.ZodString>;
42
+ gocardlessAccessToken: z.ZodOptional<z.ZodString>;
43
+ gmailEmailAddress: z.ZodOptional<z.ZodString>;
44
+ gmailFilters: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
45
+ }, "strip", z.ZodTypeAny, {
46
+ type: "plaid" | "gocardless" | "gmail";
47
+ id: string;
48
+ name: string;
49
+ enabled: boolean;
50
+ syncFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
51
+ lastSync?: string | undefined;
52
+ lastStatus?: "success" | "error" | "pending" | undefined;
53
+ plaidItemId?: string | undefined;
54
+ plaidAccessToken?: string | undefined;
55
+ gocardlessRequisitionId?: string | undefined;
56
+ gocardlessAccessToken?: string | undefined;
57
+ gmailEmailAddress?: string | undefined;
58
+ gmailFilters?: string[] | undefined;
59
+ }, {
60
+ type: "plaid" | "gocardless" | "gmail";
61
+ id: string;
62
+ name: string;
63
+ enabled?: boolean | undefined;
64
+ syncFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
65
+ lastSync?: string | undefined;
66
+ lastStatus?: "success" | "error" | "pending" | undefined;
67
+ plaidItemId?: string | undefined;
68
+ plaidAccessToken?: string | undefined;
69
+ gocardlessRequisitionId?: string | undefined;
70
+ gocardlessAccessToken?: string | undefined;
71
+ gmailEmailAddress?: string | undefined;
72
+ gmailFilters?: string[] | undefined;
73
+ }>;
74
+ export type AccountConfig = z.infer<typeof AccountConfigSchema>;
75
+ /**
76
+ * Webhook configuration
77
+ */
78
+ export declare const WebhookConfigSchema: z.ZodObject<{
79
+ enabled: z.ZodDefault<z.ZodBoolean>;
80
+ url: z.ZodOptional<z.ZodString>;
81
+ secret: z.ZodOptional<z.ZodString>;
82
+ retryPolicy: z.ZodDefault<z.ZodObject<{
83
+ maxRetries: z.ZodDefault<z.ZodNumber>;
84
+ initialDelay: z.ZodDefault<z.ZodNumber>;
85
+ maxDelay: z.ZodDefault<z.ZodNumber>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ maxRetries: number;
88
+ initialDelay: number;
89
+ maxDelay: number;
90
+ }, {
91
+ maxRetries?: number | undefined;
92
+ initialDelay?: number | undefined;
93
+ maxDelay?: number | undefined;
94
+ }>>;
95
+ events: z.ZodDefault<z.ZodArray<z.ZodEnum<["transaction.new", "transaction.updated", "transaction.deleted", "sync.started", "sync.completed", "sync.failed", "account.connected", "account.disconnected", "account.error", "webhook.test"]>, "many">>;
96
+ }, "strip", z.ZodTypeAny, {
97
+ enabled: boolean;
98
+ retryPolicy: {
99
+ maxRetries: number;
100
+ initialDelay: number;
101
+ maxDelay: number;
102
+ };
103
+ events: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[];
104
+ url?: string | undefined;
105
+ secret?: string | undefined;
106
+ }, {
107
+ enabled?: boolean | undefined;
108
+ url?: string | undefined;
109
+ secret?: string | undefined;
110
+ retryPolicy?: {
111
+ maxRetries?: number | undefined;
112
+ initialDelay?: number | undefined;
113
+ maxDelay?: number | undefined;
114
+ } | undefined;
115
+ events?: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[] | undefined;
116
+ }>;
117
+ export type WebhookConfig = z.infer<typeof WebhookConfigSchema>;
118
+ /**
119
+ * Storage configuration
120
+ */
121
+ export declare const StorageConfigSchema: z.ZodObject<{
122
+ path: z.ZodDefault<z.ZodString>;
123
+ format: z.ZodDefault<z.ZodEnum<["json", "csv", "both"]>>;
124
+ encryption: z.ZodDefault<z.ZodObject<{
125
+ enabled: z.ZodDefault<z.ZodBoolean>;
126
+ keyPath: z.ZodOptional<z.ZodString>;
127
+ }, "strip", z.ZodTypeAny, {
128
+ enabled: boolean;
129
+ keyPath?: string | undefined;
130
+ }, {
131
+ enabled?: boolean | undefined;
132
+ keyPath?: string | undefined;
133
+ }>>;
134
+ }, "strip", z.ZodTypeAny, {
135
+ path: string;
136
+ format: "json" | "csv" | "both";
137
+ encryption: {
138
+ enabled: boolean;
139
+ keyPath?: string | undefined;
140
+ };
141
+ }, {
142
+ path?: string | undefined;
143
+ format?: "json" | "csv" | "both" | undefined;
144
+ encryption?: {
145
+ enabled?: boolean | undefined;
146
+ keyPath?: string | undefined;
147
+ } | undefined;
148
+ }>;
149
+ export type StorageConfig = z.infer<typeof StorageConfigSchema>;
150
+ /**
151
+ * Plaid configuration
152
+ */
153
+ export declare const PlaidConfigSchema: z.ZodObject<{
154
+ clientId: z.ZodOptional<z.ZodString>;
155
+ secret: z.ZodOptional<z.ZodString>;
156
+ environment: z.ZodDefault<z.ZodEnum<["sandbox", "development", "production"]>>;
157
+ webhookUrl: z.ZodOptional<z.ZodString>;
158
+ }, "strip", z.ZodTypeAny, {
159
+ environment: "sandbox" | "development" | "production";
160
+ secret?: string | undefined;
161
+ clientId?: string | undefined;
162
+ webhookUrl?: string | undefined;
163
+ }, {
164
+ secret?: string | undefined;
165
+ clientId?: string | undefined;
166
+ environment?: "sandbox" | "development" | "production" | undefined;
167
+ webhookUrl?: string | undefined;
168
+ }>;
169
+ export type PlaidConfig = z.infer<typeof PlaidConfigSchema>;
170
+ /**
171
+ * GoCardless configuration
172
+ */
173
+ export declare const GoCardlessConfigSchema: z.ZodObject<{
174
+ accessToken: z.ZodOptional<z.ZodString>;
175
+ environment: z.ZodDefault<z.ZodEnum<["sandbox", "live"]>>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ environment: "sandbox" | "live";
178
+ accessToken?: string | undefined;
179
+ }, {
180
+ environment?: "sandbox" | "live" | undefined;
181
+ accessToken?: string | undefined;
182
+ }>;
183
+ export type GoCardlessConfig = z.infer<typeof GoCardlessConfigSchema>;
184
+ /**
185
+ * Gmail configuration
186
+ */
187
+ export declare const GmailConfigSchema: z.ZodObject<{
188
+ clientId: z.ZodOptional<z.ZodString>;
189
+ clientSecret: z.ZodOptional<z.ZodString>;
190
+ historyId: z.ZodOptional<z.ZodString>;
191
+ pubsubTopic: z.ZodOptional<z.ZodString>;
192
+ senderWhitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
193
+ keywords: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
194
+ confidenceThreshold: z.ZodDefault<z.ZodNumber>;
195
+ requireAmount: z.ZodDefault<z.ZodBoolean>;
196
+ requireDate: z.ZodDefault<z.ZodBoolean>;
197
+ billTypePatterns: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
198
+ }, "strip", z.ZodTypeAny, {
199
+ senderWhitelist: string[];
200
+ keywords: string[];
201
+ confidenceThreshold: number;
202
+ requireAmount: boolean;
203
+ requireDate: boolean;
204
+ clientId?: string | undefined;
205
+ clientSecret?: string | undefined;
206
+ historyId?: string | undefined;
207
+ pubsubTopic?: string | undefined;
208
+ billTypePatterns?: Record<string, string[]> | undefined;
209
+ }, {
210
+ clientId?: string | undefined;
211
+ clientSecret?: string | undefined;
212
+ historyId?: string | undefined;
213
+ pubsubTopic?: string | undefined;
214
+ senderWhitelist?: string[] | undefined;
215
+ keywords?: string[] | undefined;
216
+ confidenceThreshold?: number | undefined;
217
+ requireAmount?: boolean | undefined;
218
+ requireDate?: boolean | undefined;
219
+ billTypePatterns?: Record<string, string[]> | undefined;
220
+ }>;
221
+ export type GmailConfig = z.infer<typeof GmailConfigSchema>;
222
+ /**
223
+ * Sync configuration
224
+ */
225
+ export declare const SyncConfigSchema: z.ZodObject<{
226
+ defaultFrequency: z.ZodDefault<z.ZodEnum<["realtime", "hourly", "daily", "weekly", "manual"]>>;
227
+ retryOnFailure: z.ZodDefault<z.ZodBoolean>;
228
+ maxRetries: z.ZodDefault<z.ZodNumber>;
229
+ }, "strip", z.ZodTypeAny, {
230
+ maxRetries: number;
231
+ defaultFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
232
+ retryOnFailure: boolean;
233
+ }, {
234
+ maxRetries?: number | undefined;
235
+ defaultFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
236
+ retryOnFailure?: boolean | undefined;
237
+ }>;
238
+ export type SyncConfig = z.infer<typeof SyncConfigSchema>;
239
+ /**
240
+ * Main BillClaw configuration schema
241
+ */
242
+ export declare const BillclawConfigSchema: z.ZodObject<{
243
+ accounts: z.ZodDefault<z.ZodArray<z.ZodObject<{
244
+ id: z.ZodString;
245
+ type: z.ZodEnum<["plaid", "gocardless", "gmail"]>;
246
+ name: z.ZodString;
247
+ enabled: z.ZodDefault<z.ZodBoolean>;
248
+ syncFrequency: z.ZodDefault<z.ZodEnum<["realtime", "hourly", "daily", "weekly", "manual"]>>;
249
+ lastSync: z.ZodOptional<z.ZodString>;
250
+ lastStatus: z.ZodOptional<z.ZodEnum<["success", "error", "pending"]>>;
251
+ plaidItemId: z.ZodOptional<z.ZodString>;
252
+ plaidAccessToken: z.ZodOptional<z.ZodString>;
253
+ gocardlessRequisitionId: z.ZodOptional<z.ZodString>;
254
+ gocardlessAccessToken: z.ZodOptional<z.ZodString>;
255
+ gmailEmailAddress: z.ZodOptional<z.ZodString>;
256
+ gmailFilters: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
257
+ }, "strip", z.ZodTypeAny, {
258
+ type: "plaid" | "gocardless" | "gmail";
259
+ id: string;
260
+ name: string;
261
+ enabled: boolean;
262
+ syncFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
263
+ lastSync?: string | undefined;
264
+ lastStatus?: "success" | "error" | "pending" | undefined;
265
+ plaidItemId?: string | undefined;
266
+ plaidAccessToken?: string | undefined;
267
+ gocardlessRequisitionId?: string | undefined;
268
+ gocardlessAccessToken?: string | undefined;
269
+ gmailEmailAddress?: string | undefined;
270
+ gmailFilters?: string[] | undefined;
271
+ }, {
272
+ type: "plaid" | "gocardless" | "gmail";
273
+ id: string;
274
+ name: string;
275
+ enabled?: boolean | undefined;
276
+ syncFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
277
+ lastSync?: string | undefined;
278
+ lastStatus?: "success" | "error" | "pending" | undefined;
279
+ plaidItemId?: string | undefined;
280
+ plaidAccessToken?: string | undefined;
281
+ gocardlessRequisitionId?: string | undefined;
282
+ gocardlessAccessToken?: string | undefined;
283
+ gmailEmailAddress?: string | undefined;
284
+ gmailFilters?: string[] | undefined;
285
+ }>, "many">>;
286
+ webhooks: z.ZodDefault<z.ZodArray<z.ZodObject<{
287
+ enabled: z.ZodDefault<z.ZodBoolean>;
288
+ url: z.ZodOptional<z.ZodString>;
289
+ secret: z.ZodOptional<z.ZodString>;
290
+ retryPolicy: z.ZodDefault<z.ZodObject<{
291
+ maxRetries: z.ZodDefault<z.ZodNumber>;
292
+ initialDelay: z.ZodDefault<z.ZodNumber>;
293
+ maxDelay: z.ZodDefault<z.ZodNumber>;
294
+ }, "strip", z.ZodTypeAny, {
295
+ maxRetries: number;
296
+ initialDelay: number;
297
+ maxDelay: number;
298
+ }, {
299
+ maxRetries?: number | undefined;
300
+ initialDelay?: number | undefined;
301
+ maxDelay?: number | undefined;
302
+ }>>;
303
+ events: z.ZodDefault<z.ZodArray<z.ZodEnum<["transaction.new", "transaction.updated", "transaction.deleted", "sync.started", "sync.completed", "sync.failed", "account.connected", "account.disconnected", "account.error", "webhook.test"]>, "many">>;
304
+ }, "strip", z.ZodTypeAny, {
305
+ enabled: boolean;
306
+ retryPolicy: {
307
+ maxRetries: number;
308
+ initialDelay: number;
309
+ maxDelay: number;
310
+ };
311
+ events: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[];
312
+ url?: string | undefined;
313
+ secret?: string | undefined;
314
+ }, {
315
+ enabled?: boolean | undefined;
316
+ url?: string | undefined;
317
+ secret?: string | undefined;
318
+ retryPolicy?: {
319
+ maxRetries?: number | undefined;
320
+ initialDelay?: number | undefined;
321
+ maxDelay?: number | undefined;
322
+ } | undefined;
323
+ events?: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[] | undefined;
324
+ }>, "many">>;
325
+ storage: z.ZodDefault<z.ZodObject<{
326
+ path: z.ZodDefault<z.ZodString>;
327
+ format: z.ZodDefault<z.ZodEnum<["json", "csv", "both"]>>;
328
+ encryption: z.ZodDefault<z.ZodObject<{
329
+ enabled: z.ZodDefault<z.ZodBoolean>;
330
+ keyPath: z.ZodOptional<z.ZodString>;
331
+ }, "strip", z.ZodTypeAny, {
332
+ enabled: boolean;
333
+ keyPath?: string | undefined;
334
+ }, {
335
+ enabled?: boolean | undefined;
336
+ keyPath?: string | undefined;
337
+ }>>;
338
+ }, "strip", z.ZodTypeAny, {
339
+ path: string;
340
+ format: "json" | "csv" | "both";
341
+ encryption: {
342
+ enabled: boolean;
343
+ keyPath?: string | undefined;
344
+ };
345
+ }, {
346
+ path?: string | undefined;
347
+ format?: "json" | "csv" | "both" | undefined;
348
+ encryption?: {
349
+ enabled?: boolean | undefined;
350
+ keyPath?: string | undefined;
351
+ } | undefined;
352
+ }>>;
353
+ sync: z.ZodDefault<z.ZodObject<{
354
+ defaultFrequency: z.ZodDefault<z.ZodEnum<["realtime", "hourly", "daily", "weekly", "manual"]>>;
355
+ retryOnFailure: z.ZodDefault<z.ZodBoolean>;
356
+ maxRetries: z.ZodDefault<z.ZodNumber>;
357
+ }, "strip", z.ZodTypeAny, {
358
+ maxRetries: number;
359
+ defaultFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
360
+ retryOnFailure: boolean;
361
+ }, {
362
+ maxRetries?: number | undefined;
363
+ defaultFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
364
+ retryOnFailure?: boolean | undefined;
365
+ }>>;
366
+ plaid: z.ZodDefault<z.ZodObject<{
367
+ clientId: z.ZodOptional<z.ZodString>;
368
+ secret: z.ZodOptional<z.ZodString>;
369
+ environment: z.ZodDefault<z.ZodEnum<["sandbox", "development", "production"]>>;
370
+ webhookUrl: z.ZodOptional<z.ZodString>;
371
+ }, "strip", z.ZodTypeAny, {
372
+ environment: "sandbox" | "development" | "production";
373
+ secret?: string | undefined;
374
+ clientId?: string | undefined;
375
+ webhookUrl?: string | undefined;
376
+ }, {
377
+ secret?: string | undefined;
378
+ clientId?: string | undefined;
379
+ environment?: "sandbox" | "development" | "production" | undefined;
380
+ webhookUrl?: string | undefined;
381
+ }>>;
382
+ gocardless: z.ZodOptional<z.ZodObject<{
383
+ accessToken: z.ZodOptional<z.ZodString>;
384
+ environment: z.ZodDefault<z.ZodEnum<["sandbox", "live"]>>;
385
+ }, "strip", z.ZodTypeAny, {
386
+ environment: "sandbox" | "live";
387
+ accessToken?: string | undefined;
388
+ }, {
389
+ environment?: "sandbox" | "live" | undefined;
390
+ accessToken?: string | undefined;
391
+ }>>;
392
+ gmail: z.ZodOptional<z.ZodObject<{
393
+ clientId: z.ZodOptional<z.ZodString>;
394
+ clientSecret: z.ZodOptional<z.ZodString>;
395
+ historyId: z.ZodOptional<z.ZodString>;
396
+ pubsubTopic: z.ZodOptional<z.ZodString>;
397
+ senderWhitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
398
+ keywords: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
399
+ confidenceThreshold: z.ZodDefault<z.ZodNumber>;
400
+ requireAmount: z.ZodDefault<z.ZodBoolean>;
401
+ requireDate: z.ZodDefault<z.ZodBoolean>;
402
+ billTypePatterns: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
403
+ }, "strip", z.ZodTypeAny, {
404
+ senderWhitelist: string[];
405
+ keywords: string[];
406
+ confidenceThreshold: number;
407
+ requireAmount: boolean;
408
+ requireDate: boolean;
409
+ clientId?: string | undefined;
410
+ clientSecret?: string | undefined;
411
+ historyId?: string | undefined;
412
+ pubsubTopic?: string | undefined;
413
+ billTypePatterns?: Record<string, string[]> | undefined;
414
+ }, {
415
+ clientId?: string | undefined;
416
+ clientSecret?: string | undefined;
417
+ historyId?: string | undefined;
418
+ pubsubTopic?: string | undefined;
419
+ senderWhitelist?: string[] | undefined;
420
+ keywords?: string[] | undefined;
421
+ confidenceThreshold?: number | undefined;
422
+ requireAmount?: boolean | undefined;
423
+ requireDate?: boolean | undefined;
424
+ billTypePatterns?: Record<string, string[]> | undefined;
425
+ }>>;
426
+ }, "strip", z.ZodTypeAny, {
427
+ plaid: {
428
+ environment: "sandbox" | "development" | "production";
429
+ secret?: string | undefined;
430
+ clientId?: string | undefined;
431
+ webhookUrl?: string | undefined;
432
+ };
433
+ accounts: {
434
+ type: "plaid" | "gocardless" | "gmail";
435
+ id: string;
436
+ name: string;
437
+ enabled: boolean;
438
+ syncFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
439
+ lastSync?: string | undefined;
440
+ lastStatus?: "success" | "error" | "pending" | undefined;
441
+ plaidItemId?: string | undefined;
442
+ plaidAccessToken?: string | undefined;
443
+ gocardlessRequisitionId?: string | undefined;
444
+ gocardlessAccessToken?: string | undefined;
445
+ gmailEmailAddress?: string | undefined;
446
+ gmailFilters?: string[] | undefined;
447
+ }[];
448
+ webhooks: {
449
+ enabled: boolean;
450
+ retryPolicy: {
451
+ maxRetries: number;
452
+ initialDelay: number;
453
+ maxDelay: number;
454
+ };
455
+ events: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[];
456
+ url?: string | undefined;
457
+ secret?: string | undefined;
458
+ }[];
459
+ storage: {
460
+ path: string;
461
+ format: "json" | "csv" | "both";
462
+ encryption: {
463
+ enabled: boolean;
464
+ keyPath?: string | undefined;
465
+ };
466
+ };
467
+ sync: {
468
+ maxRetries: number;
469
+ defaultFrequency: "realtime" | "hourly" | "daily" | "weekly" | "manual";
470
+ retryOnFailure: boolean;
471
+ };
472
+ gocardless?: {
473
+ environment: "sandbox" | "live";
474
+ accessToken?: string | undefined;
475
+ } | undefined;
476
+ gmail?: {
477
+ senderWhitelist: string[];
478
+ keywords: string[];
479
+ confidenceThreshold: number;
480
+ requireAmount: boolean;
481
+ requireDate: boolean;
482
+ clientId?: string | undefined;
483
+ clientSecret?: string | undefined;
484
+ historyId?: string | undefined;
485
+ pubsubTopic?: string | undefined;
486
+ billTypePatterns?: Record<string, string[]> | undefined;
487
+ } | undefined;
488
+ }, {
489
+ plaid?: {
490
+ secret?: string | undefined;
491
+ clientId?: string | undefined;
492
+ environment?: "sandbox" | "development" | "production" | undefined;
493
+ webhookUrl?: string | undefined;
494
+ } | undefined;
495
+ gocardless?: {
496
+ environment?: "sandbox" | "live" | undefined;
497
+ accessToken?: string | undefined;
498
+ } | undefined;
499
+ gmail?: {
500
+ clientId?: string | undefined;
501
+ clientSecret?: string | undefined;
502
+ historyId?: string | undefined;
503
+ pubsubTopic?: string | undefined;
504
+ senderWhitelist?: string[] | undefined;
505
+ keywords?: string[] | undefined;
506
+ confidenceThreshold?: number | undefined;
507
+ requireAmount?: boolean | undefined;
508
+ requireDate?: boolean | undefined;
509
+ billTypePatterns?: Record<string, string[]> | undefined;
510
+ } | undefined;
511
+ accounts?: {
512
+ type: "plaid" | "gocardless" | "gmail";
513
+ id: string;
514
+ name: string;
515
+ enabled?: boolean | undefined;
516
+ syncFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
517
+ lastSync?: string | undefined;
518
+ lastStatus?: "success" | "error" | "pending" | undefined;
519
+ plaidItemId?: string | undefined;
520
+ plaidAccessToken?: string | undefined;
521
+ gocardlessRequisitionId?: string | undefined;
522
+ gocardlessAccessToken?: string | undefined;
523
+ gmailEmailAddress?: string | undefined;
524
+ gmailFilters?: string[] | undefined;
525
+ }[] | undefined;
526
+ webhooks?: {
527
+ enabled?: boolean | undefined;
528
+ url?: string | undefined;
529
+ secret?: string | undefined;
530
+ retryPolicy?: {
531
+ maxRetries?: number | undefined;
532
+ initialDelay?: number | undefined;
533
+ maxDelay?: number | undefined;
534
+ } | undefined;
535
+ events?: ("transaction.new" | "transaction.updated" | "transaction.deleted" | "sync.started" | "sync.completed" | "sync.failed" | "account.connected" | "account.disconnected" | "account.error" | "webhook.test")[] | undefined;
536
+ }[] | undefined;
537
+ storage?: {
538
+ path?: string | undefined;
539
+ format?: "json" | "csv" | "both" | undefined;
540
+ encryption?: {
541
+ enabled?: boolean | undefined;
542
+ keyPath?: string | undefined;
543
+ } | undefined;
544
+ } | undefined;
545
+ sync?: {
546
+ maxRetries?: number | undefined;
547
+ defaultFrequency?: "realtime" | "hourly" | "daily" | "weekly" | "manual" | undefined;
548
+ retryOnFailure?: boolean | undefined;
549
+ } | undefined;
550
+ }>;
551
+ export type BillclawConfig = z.infer<typeof BillclawConfigSchema>;
552
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;GAEG;AACH,eAAO,MAAM,iBAAiB,6CAA2C,CAAA;AACzE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,mBAAmB,gEAM9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,sBAAsB,qDAIjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,sBAAsB,6MAWjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA"}