@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.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/billclaw.d.ts +76 -0
- package/dist/billclaw.d.ts.map +1 -0
- package/dist/billclaw.js +205 -0
- package/dist/billclaw.js.map +1 -0
- package/dist/credentials/index.d.ts +8 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +8 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/keychain.d.ts +92 -0
- package/dist/credentials/keychain.d.ts.map +1 -0
- package/dist/credentials/keychain.js +172 -0
- package/dist/credentials/keychain.js.map +1 -0
- package/dist/credentials/store.d.ts +76 -0
- package/dist/credentials/store.d.ts.map +1 -0
- package/dist/credentials/store.js +144 -0
- package/dist/credentials/store.js.map +1 -0
- package/dist/errors/errors.d.ts +92 -0
- package/dist/errors/errors.d.ts.map +1 -0
- package/dist/errors/errors.js +315 -0
- package/dist/errors/errors.js.map +1 -0
- package/dist/errors/index.d.ts +7 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/exporters/beancount.d.ts +42 -0
- package/dist/exporters/beancount.d.ts.map +1 -0
- package/dist/exporters/beancount.js +141 -0
- package/dist/exporters/beancount.js.map +1 -0
- package/dist/exporters/index.d.ts +8 -0
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +8 -0
- package/dist/exporters/index.js.map +1 -0
- package/dist/exporters/ledger.d.ts +42 -0
- package/dist/exporters/ledger.d.ts.map +1 -0
- package/dist/exporters/ledger.js +139 -0
- package/dist/exporters/ledger.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/models/config.d.ts +552 -0
- package/dist/models/config.d.ts.map +1 -0
- package/dist/models/config.js +168 -0
- package/dist/models/config.js.map +1 -0
- package/dist/models/index.d.ts +7 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +8 -0
- package/dist/models/index.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/types.d.ts +110 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +85 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/security/audit.d.ts +148 -0
- package/dist/security/audit.d.ts.map +1 -0
- package/dist/security/audit.js +286 -0
- package/dist/security/audit.js.map +1 -0
- package/dist/security/index.d.ts +7 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +7 -0
- package/dist/security/index.js.map +1 -0
- package/dist/services/event-emitter.d.ts +171 -0
- package/dist/services/event-emitter.d.ts.map +1 -0
- package/dist/services/event-emitter.js +287 -0
- package/dist/services/event-emitter.js.map +1 -0
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/sources/gmail/bill-recognizer.d.ts +71 -0
- package/dist/sources/gmail/bill-recognizer.d.ts.map +1 -0
- package/dist/sources/gmail/bill-recognizer.js +341 -0
- package/dist/sources/gmail/bill-recognizer.js.map +1 -0
- package/dist/sources/gmail/email-parser.d.ts +68 -0
- package/dist/sources/gmail/email-parser.d.ts.map +1 -0
- package/dist/sources/gmail/email-parser.js +238 -0
- package/dist/sources/gmail/email-parser.js.map +1 -0
- package/dist/sources/gmail/gmail-fetch.d.ts +54 -0
- package/dist/sources/gmail/gmail-fetch.d.ts.map +1 -0
- package/dist/sources/gmail/gmail-fetch.js +300 -0
- package/dist/sources/gmail/gmail-fetch.js.map +1 -0
- package/dist/sources/gmail/index.d.ts +7 -0
- package/dist/sources/gmail/index.d.ts.map +1 -0
- package/dist/sources/gmail/index.js +7 -0
- package/dist/sources/gmail/index.js.map +1 -0
- package/dist/sources/index.d.ts +8 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +8 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/plaid/index.d.ts +7 -0
- package/dist/sources/plaid/index.d.ts.map +1 -0
- package/dist/sources/plaid/index.js +7 -0
- package/dist/sources/plaid/index.js.map +1 -0
- package/dist/sources/plaid/plaid-sync.d.ts +42 -0
- package/dist/sources/plaid/plaid-sync.d.ts.map +1 -0
- package/dist/sources/plaid/plaid-sync.js +182 -0
- package/dist/sources/plaid/plaid-sync.js.map +1 -0
- package/dist/storage/cache.d.ts +134 -0
- package/dist/storage/cache.d.ts.map +1 -0
- package/dist/storage/cache.js +239 -0
- package/dist/storage/cache.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/indexes.d.ts +136 -0
- package/dist/storage/indexes.d.ts.map +1 -0
- package/dist/storage/indexes.js +294 -0
- package/dist/storage/indexes.js.map +1 -0
- package/dist/storage/locking.d.ts +103 -0
- package/dist/storage/locking.d.ts.map +1 -0
- package/dist/storage/locking.js +158 -0
- package/dist/storage/locking.js.map +1 -0
- package/dist/storage/streaming.d.ts +102 -0
- package/dist/storage/streaming.d.ts.map +1 -0
- package/dist/storage/streaming.js +245 -0
- package/dist/storage/streaming.js.map +1 -0
- package/dist/storage/transaction-storage.d.ts +101 -0
- package/dist/storage/transaction-storage.d.ts.map +1 -0
- package/dist/storage/transaction-storage.js +193 -0
- package/dist/storage/transaction-storage.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +7 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/sync-service.d.ts +42 -0
- package/dist/sync/sync-service.d.ts.map +1 -0
- package/dist/sync/sync-service.js +112 -0
- package/dist/sync/sync-service.js.map +1 -0
- package/dist/test-fixtures.d.ts +38 -0
- package/dist/test-fixtures.d.ts.map +1 -0
- package/dist/test-fixtures.js +137 -0
- package/dist/test-fixtures.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,168 @@
|
|
|
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 const AccountTypeSchema = z.enum(["plaid", "gocardless", "gmail"]);
|
|
12
|
+
/**
|
|
13
|
+
* Sync frequency options
|
|
14
|
+
*/
|
|
15
|
+
export const SyncFrequencySchema = z.enum([
|
|
16
|
+
"realtime",
|
|
17
|
+
"hourly",
|
|
18
|
+
"daily",
|
|
19
|
+
"weekly",
|
|
20
|
+
"manual",
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* Plaid environment options
|
|
24
|
+
*/
|
|
25
|
+
export const PlaidEnvironmentSchema = z.enum([
|
|
26
|
+
"sandbox",
|
|
27
|
+
"development",
|
|
28
|
+
"production",
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Webhook event types
|
|
32
|
+
*/
|
|
33
|
+
export const WebhookEventTypeSchema = z.enum([
|
|
34
|
+
"transaction.new",
|
|
35
|
+
"transaction.updated",
|
|
36
|
+
"transaction.deleted",
|
|
37
|
+
"sync.started",
|
|
38
|
+
"sync.completed",
|
|
39
|
+
"sync.failed",
|
|
40
|
+
"account.connected",
|
|
41
|
+
"account.disconnected",
|
|
42
|
+
"account.error",
|
|
43
|
+
"webhook.test",
|
|
44
|
+
]);
|
|
45
|
+
/**
|
|
46
|
+
* Per-account configuration
|
|
47
|
+
*/
|
|
48
|
+
export const AccountConfigSchema = z.object({
|
|
49
|
+
id: z.string().min(1),
|
|
50
|
+
type: AccountTypeSchema,
|
|
51
|
+
name: z.string().min(1),
|
|
52
|
+
enabled: z.boolean().default(false),
|
|
53
|
+
syncFrequency: SyncFrequencySchema.default("daily"),
|
|
54
|
+
lastSync: z.string().optional(),
|
|
55
|
+
lastStatus: z.enum(["success", "error", "pending"]).optional(),
|
|
56
|
+
// Plaid-specific
|
|
57
|
+
plaidItemId: z.string().optional(),
|
|
58
|
+
plaidAccessToken: z.string().optional(),
|
|
59
|
+
// GoCardless-specific
|
|
60
|
+
gocardlessRequisitionId: z.string().optional(),
|
|
61
|
+
gocardlessAccessToken: z.string().optional(),
|
|
62
|
+
// Gmail-specific
|
|
63
|
+
gmailEmailAddress: z.string().email().optional(),
|
|
64
|
+
gmailFilters: z.array(z.string()).optional(),
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Webhook configuration
|
|
68
|
+
*/
|
|
69
|
+
export const WebhookConfigSchema = z.object({
|
|
70
|
+
enabled: z.boolean().default(false),
|
|
71
|
+
url: z.string().url().optional(),
|
|
72
|
+
secret: z.string().optional(),
|
|
73
|
+
retryPolicy: z
|
|
74
|
+
.object({
|
|
75
|
+
maxRetries: z.number().int().min(0).default(3),
|
|
76
|
+
initialDelay: z.number().int().min(0).default(1000),
|
|
77
|
+
maxDelay: z.number().int().min(0).default(30000),
|
|
78
|
+
})
|
|
79
|
+
.default({
|
|
80
|
+
maxRetries: 3,
|
|
81
|
+
initialDelay: 1000,
|
|
82
|
+
maxDelay: 30000,
|
|
83
|
+
}),
|
|
84
|
+
events: z
|
|
85
|
+
.array(WebhookEventTypeSchema)
|
|
86
|
+
.default(["transaction.new", "sync.failed", "account.error"]),
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Storage configuration
|
|
90
|
+
*/
|
|
91
|
+
export const StorageConfigSchema = z.object({
|
|
92
|
+
path: z.string().default("~/.billclaw"),
|
|
93
|
+
format: z.enum(["json", "csv", "both"]).default("json"),
|
|
94
|
+
encryption: z
|
|
95
|
+
.object({
|
|
96
|
+
enabled: z.boolean().default(false),
|
|
97
|
+
keyPath: z.string().optional(),
|
|
98
|
+
})
|
|
99
|
+
.default({
|
|
100
|
+
enabled: false,
|
|
101
|
+
}),
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* Plaid configuration
|
|
105
|
+
*/
|
|
106
|
+
export const PlaidConfigSchema = z.object({
|
|
107
|
+
clientId: z.string().optional(),
|
|
108
|
+
secret: z.string().optional(),
|
|
109
|
+
environment: PlaidEnvironmentSchema.default("sandbox"),
|
|
110
|
+
webhookUrl: z.string().url().optional(),
|
|
111
|
+
});
|
|
112
|
+
/**
|
|
113
|
+
* GoCardless configuration
|
|
114
|
+
*/
|
|
115
|
+
export const GoCardlessConfigSchema = z.object({
|
|
116
|
+
accessToken: z.string().optional(),
|
|
117
|
+
environment: z.enum(["sandbox", "live"]).default("sandbox"),
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Gmail configuration
|
|
121
|
+
*/
|
|
122
|
+
export const GmailConfigSchema = z.object({
|
|
123
|
+
clientId: z.string().optional(),
|
|
124
|
+
clientSecret: z.string().optional(),
|
|
125
|
+
historyId: z.string().optional(),
|
|
126
|
+
pubsubTopic: z.string().optional(),
|
|
127
|
+
senderWhitelist: z.array(z.string()).default([]),
|
|
128
|
+
keywords: z
|
|
129
|
+
.array(z.string())
|
|
130
|
+
.default(["invoice", "statement", "bill due", "receipt", "payment due"]),
|
|
131
|
+
// Recognition rules
|
|
132
|
+
confidenceThreshold: z.number().min(0).max(1).default(0.5),
|
|
133
|
+
requireAmount: z.boolean().default(false),
|
|
134
|
+
requireDate: z.boolean().default(false),
|
|
135
|
+
// Custom bill type patterns
|
|
136
|
+
billTypePatterns: z.record(z.array(z.string())).optional(),
|
|
137
|
+
});
|
|
138
|
+
/**
|
|
139
|
+
* Sync configuration
|
|
140
|
+
*/
|
|
141
|
+
export const SyncConfigSchema = z.object({
|
|
142
|
+
defaultFrequency: SyncFrequencySchema.default("daily"),
|
|
143
|
+
retryOnFailure: z.boolean().default(true),
|
|
144
|
+
maxRetries: z.number().int().min(0).default(3),
|
|
145
|
+
});
|
|
146
|
+
/**
|
|
147
|
+
* Main BillClaw configuration schema
|
|
148
|
+
*/
|
|
149
|
+
export const BillclawConfigSchema = z.object({
|
|
150
|
+
accounts: z.array(AccountConfigSchema).default([]),
|
|
151
|
+
webhooks: z.array(WebhookConfigSchema).default([]),
|
|
152
|
+
storage: StorageConfigSchema.default({
|
|
153
|
+
path: "~/.billclaw",
|
|
154
|
+
format: "json",
|
|
155
|
+
encryption: { enabled: false },
|
|
156
|
+
}),
|
|
157
|
+
sync: SyncConfigSchema.default({
|
|
158
|
+
defaultFrequency: "daily",
|
|
159
|
+
retryOnFailure: true,
|
|
160
|
+
maxRetries: 3,
|
|
161
|
+
}),
|
|
162
|
+
plaid: PlaidConfigSchema.default({
|
|
163
|
+
environment: "sandbox",
|
|
164
|
+
}),
|
|
165
|
+
gocardless: GoCardlessConfigSchema.optional(),
|
|
166
|
+
gmail: GmailConfigSchema.optional(),
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAwB;AACxB,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime abstractions for BillClaw
|
|
3
|
+
*
|
|
4
|
+
* These interfaces define the contracts that adapters (OpenClaw, CLI, etc.)
|
|
5
|
+
* must implement to provide framework-specific functionality to the core.
|
|
6
|
+
*/
|
|
7
|
+
import type { Logger } from "../errors/errors.js";
|
|
8
|
+
import type { BillclawConfig, StorageConfig } from "../models/config.js";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration provider - loads and provides configuration
|
|
11
|
+
*/
|
|
12
|
+
export interface ConfigProvider {
|
|
13
|
+
/**
|
|
14
|
+
* Get the full BillClaw configuration
|
|
15
|
+
*/
|
|
16
|
+
getConfig(): Promise<BillclawConfig>;
|
|
17
|
+
/**
|
|
18
|
+
* Get the storage configuration
|
|
19
|
+
*/
|
|
20
|
+
getStorageConfig(): Promise<StorageConfig>;
|
|
21
|
+
/**
|
|
22
|
+
* Update a specific account configuration
|
|
23
|
+
*/
|
|
24
|
+
updateAccount(accountId: string, updates: Partial<any>): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Get account configuration by ID
|
|
27
|
+
*/
|
|
28
|
+
getAccount(accountId: string): Promise<any | null>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Event emitter - emits events for synchronization and monitoring
|
|
32
|
+
*/
|
|
33
|
+
export interface EventEmitter {
|
|
34
|
+
/**
|
|
35
|
+
* Emit an event
|
|
36
|
+
*/
|
|
37
|
+
emit(event: string, data?: unknown): void;
|
|
38
|
+
/**
|
|
39
|
+
* Register an event listener
|
|
40
|
+
*/
|
|
41
|
+
on(event: string, handler: (data?: unknown) => void): void;
|
|
42
|
+
/**
|
|
43
|
+
* Remove an event listener
|
|
44
|
+
*/
|
|
45
|
+
off(event: string, handler: (data?: unknown) => void): void;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Runtime context - provides all framework-specific functionality
|
|
49
|
+
*/
|
|
50
|
+
export interface RuntimeContext {
|
|
51
|
+
/**
|
|
52
|
+
* Logger for output
|
|
53
|
+
*/
|
|
54
|
+
logger: Logger;
|
|
55
|
+
/**
|
|
56
|
+
* Configuration provider
|
|
57
|
+
*/
|
|
58
|
+
config: ConfigProvider;
|
|
59
|
+
/**
|
|
60
|
+
* Event emitter
|
|
61
|
+
*/
|
|
62
|
+
events?: EventEmitter;
|
|
63
|
+
/**
|
|
64
|
+
* Platform-specific utilities
|
|
65
|
+
*/
|
|
66
|
+
platform?: {
|
|
67
|
+
/**
|
|
68
|
+
* Get the home directory
|
|
69
|
+
*/
|
|
70
|
+
getHomeDir(): string;
|
|
71
|
+
/**
|
|
72
|
+
* Get the data directory
|
|
73
|
+
*/
|
|
74
|
+
getDataDir(): string;
|
|
75
|
+
/**
|
|
76
|
+
* Open a URL in the browser
|
|
77
|
+
*/
|
|
78
|
+
openUrl(url: string): Promise<void>;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Default console logger implementation
|
|
83
|
+
*/
|
|
84
|
+
export declare class ConsoleLogger implements Logger {
|
|
85
|
+
info(...args: unknown[]): void;
|
|
86
|
+
error(...args: unknown[]): void;
|
|
87
|
+
warn(...args: unknown[]): void;
|
|
88
|
+
debug(...args: unknown[]): void;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* In-memory event emitter implementation
|
|
92
|
+
*/
|
|
93
|
+
export declare class MemoryEventEmitter implements EventEmitter {
|
|
94
|
+
private listeners;
|
|
95
|
+
emit(event: string, data?: unknown): void;
|
|
96
|
+
on(event: string, handler: (data?: unknown) => void): void;
|
|
97
|
+
off(event: string, handler: (data?: unknown) => void): void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Simple in-memory config provider
|
|
101
|
+
*/
|
|
102
|
+
export declare class MemoryConfigProvider implements ConfigProvider {
|
|
103
|
+
private config;
|
|
104
|
+
constructor(config: BillclawConfig);
|
|
105
|
+
getConfig(): Promise<BillclawConfig>;
|
|
106
|
+
getStorageConfig(): Promise<StorageConfig>;
|
|
107
|
+
updateAccount(accountId: string, updates: Partial<any>): Promise<void>;
|
|
108
|
+
getAccount(accountId: string): Promise<any | null>;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime abstractions for BillClaw
|
|
3
|
+
*
|
|
4
|
+
* These interfaces define the contracts that adapters (OpenClaw, CLI, etc.)
|
|
5
|
+
* must implement to provide framework-specific functionality to the core.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default console logger implementation
|
|
9
|
+
*/
|
|
10
|
+
export class ConsoleLogger {
|
|
11
|
+
info(...args) {
|
|
12
|
+
console.log("[INFO]", ...args);
|
|
13
|
+
}
|
|
14
|
+
error(...args) {
|
|
15
|
+
console.error("[ERROR]", ...args);
|
|
16
|
+
}
|
|
17
|
+
warn(...args) {
|
|
18
|
+
console.warn("[WARN]", ...args);
|
|
19
|
+
}
|
|
20
|
+
debug(...args) {
|
|
21
|
+
if (process.env.DEBUG) {
|
|
22
|
+
console.debug("[DEBUG]", ...args);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* In-memory event emitter implementation
|
|
28
|
+
*/
|
|
29
|
+
export class MemoryEventEmitter {
|
|
30
|
+
listeners = new Map();
|
|
31
|
+
emit(event, data) {
|
|
32
|
+
const handlers = this.listeners.get(event);
|
|
33
|
+
if (handlers) {
|
|
34
|
+
for (const handler of handlers) {
|
|
35
|
+
try {
|
|
36
|
+
handler(data);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error(`Error in event handler for ${event}:`, error);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
on(event, handler) {
|
|
45
|
+
if (!this.listeners.has(event)) {
|
|
46
|
+
this.listeners.set(event, new Set());
|
|
47
|
+
}
|
|
48
|
+
this.listeners.get(event).add(handler);
|
|
49
|
+
}
|
|
50
|
+
off(event, handler) {
|
|
51
|
+
const handlers = this.listeners.get(event);
|
|
52
|
+
if (handlers) {
|
|
53
|
+
handlers.delete(handler);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Simple in-memory config provider
|
|
59
|
+
*/
|
|
60
|
+
export class MemoryConfigProvider {
|
|
61
|
+
config;
|
|
62
|
+
constructor(config) {
|
|
63
|
+
this.config = config;
|
|
64
|
+
}
|
|
65
|
+
async getConfig() {
|
|
66
|
+
return this.config;
|
|
67
|
+
}
|
|
68
|
+
async getStorageConfig() {
|
|
69
|
+
return (this.config.storage || {
|
|
70
|
+
path: "~/.billclaw",
|
|
71
|
+
format: "json",
|
|
72
|
+
encryption: { enabled: false },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async updateAccount(accountId, updates) {
|
|
76
|
+
const account = this.config.accounts.find((a) => a.id === accountId);
|
|
77
|
+
if (account) {
|
|
78
|
+
Object.assign(account, updates);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async getAccount(accountId) {
|
|
82
|
+
return this.config.accounts.find((a) => a.id === accountId) || null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security audit logging for BillClaw
|
|
3
|
+
*
|
|
4
|
+
* Provides audit logging for all credential operations:
|
|
5
|
+
* - Credential access (read/write/delete)
|
|
6
|
+
* - Account linking/unlinking
|
|
7
|
+
* - Sync operations
|
|
8
|
+
* - Configuration changes
|
|
9
|
+
*
|
|
10
|
+
* Audit logs are stored locally and can be exported for compliance.
|
|
11
|
+
*/
|
|
12
|
+
import type { Logger } from "../errors/errors.js";
|
|
13
|
+
/**
|
|
14
|
+
* Audit event types
|
|
15
|
+
*/
|
|
16
|
+
export declare enum AuditEventType {
|
|
17
|
+
CREDENTIAL_CREATED = "credential.created",
|
|
18
|
+
CREDENTIAL_READ = "credential.read",
|
|
19
|
+
CREDENTIAL_WRITE = "credential.write",
|
|
20
|
+
CREDENTIAL_UPDATED = "credential.updated",
|
|
21
|
+
CREDENTIAL_DELETED = "credential.deleted",
|
|
22
|
+
CREDENTIAL_DELETE = "credential.delete",// Alias for backward compatibility
|
|
23
|
+
CREDENTIAL_EXPORTED = "credential.exported",
|
|
24
|
+
ACCOUNT_LINKED = "account.linked",
|
|
25
|
+
ACCOUNT_UNLINKED = "account.unlinked",
|
|
26
|
+
ACCOUNT_SYNCED = "account.synced",
|
|
27
|
+
ACCOUNT_SYNC_FAILED = "account.sync_failed",
|
|
28
|
+
CONFIG_UPDATED = "config.updated",
|
|
29
|
+
CONFIG_READ = "config.read",
|
|
30
|
+
AUTH_SUCCESS = "auth.success",
|
|
31
|
+
AUTH_FAILED = "auth.failed",
|
|
32
|
+
AUTH_REFRESHED = "auth.refreshed",
|
|
33
|
+
DATA_EXPORTED = "data.exported",
|
|
34
|
+
DATA_IMPORTED = "data.imported",
|
|
35
|
+
DATA_DELETED = "data.deleted",
|
|
36
|
+
ACCOUNT_ACCESS = "account.access",
|
|
37
|
+
SYNC_STARTED = "sync.started",
|
|
38
|
+
SYNC_COMPLETED = "sync.completed",
|
|
39
|
+
SYNC_FAILED = "sync.failed",
|
|
40
|
+
CONFIG_CHANGE = "config.change"
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Audit event severity
|
|
44
|
+
*/
|
|
45
|
+
export declare enum AuditSeverity {
|
|
46
|
+
INFO = "info",
|
|
47
|
+
LOW = "low",
|
|
48
|
+
MEDIUM = "medium",
|
|
49
|
+
HIGH = "high",
|
|
50
|
+
WARNING = "warning",
|
|
51
|
+
ERROR = "error",
|
|
52
|
+
CRITICAL = "critical"
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Audit event entry
|
|
56
|
+
*/
|
|
57
|
+
export interface AuditEvent {
|
|
58
|
+
id: string;
|
|
59
|
+
timestamp: string;
|
|
60
|
+
type: AuditEventType;
|
|
61
|
+
severity: AuditSeverity;
|
|
62
|
+
message: string;
|
|
63
|
+
details?: Record<string, unknown>;
|
|
64
|
+
userId?: string;
|
|
65
|
+
ipAddress?: string;
|
|
66
|
+
userAgent?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Audit log configuration
|
|
70
|
+
*/
|
|
71
|
+
export interface AuditConfig {
|
|
72
|
+
dataDir?: string;
|
|
73
|
+
maxEntries?: number;
|
|
74
|
+
retentionDays?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Audit logger class
|
|
78
|
+
*/
|
|
79
|
+
export declare class AuditLogger {
|
|
80
|
+
private config;
|
|
81
|
+
private baseDir;
|
|
82
|
+
private logFilePath;
|
|
83
|
+
private logger?;
|
|
84
|
+
constructor(configOrPath?: AuditConfig | string, logger?: Logger);
|
|
85
|
+
/**
|
|
86
|
+
* Get the audit log file path
|
|
87
|
+
*/
|
|
88
|
+
private getAuditFilePath;
|
|
89
|
+
/**
|
|
90
|
+
* Ensure audit directory exists
|
|
91
|
+
*/
|
|
92
|
+
private ensureAuditDir;
|
|
93
|
+
/**
|
|
94
|
+
* Rotate audit logs if they exceed max entries
|
|
95
|
+
*/
|
|
96
|
+
private rotateIfNeeded;
|
|
97
|
+
/**
|
|
98
|
+
* Log an audit event
|
|
99
|
+
*/
|
|
100
|
+
log(type: AuditEventType, message: string, details?: Record<string, unknown>, severity?: AuditSeverity): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Generate a unique event ID
|
|
103
|
+
*/
|
|
104
|
+
private generateEventId;
|
|
105
|
+
/**
|
|
106
|
+
* Read all audit events
|
|
107
|
+
*/
|
|
108
|
+
readEvents(limit?: number): Promise<AuditEvent[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Query audit events by type
|
|
111
|
+
*/
|
|
112
|
+
queryByType(type: AuditEventType, limit?: number): Promise<AuditEvent[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Query audit events by severity
|
|
115
|
+
*/
|
|
116
|
+
queryBySeverity(severity: AuditSeverity, limit?: number): Promise<AuditEvent[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Clear all audit events
|
|
119
|
+
*/
|
|
120
|
+
clear(): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Get audit log statistics
|
|
123
|
+
*/
|
|
124
|
+
getStats(): Promise<{
|
|
125
|
+
totalEvents: number;
|
|
126
|
+
byType: Record<string, number>;
|
|
127
|
+
bySeverity: Record<string, number>;
|
|
128
|
+
}>;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create an audit logger with the given configuration
|
|
132
|
+
*/
|
|
133
|
+
export declare function createAuditLogger(config?: AuditConfig, logger?: Logger): AuditLogger;
|
|
134
|
+
/**
|
|
135
|
+
* Convenience functions for common audit events
|
|
136
|
+
*/
|
|
137
|
+
export declare class AuditHelpers {
|
|
138
|
+
private audit;
|
|
139
|
+
constructor(audit: AuditLogger);
|
|
140
|
+
logCredentialCreated(credentialType: string, accountId: string): Promise<void>;
|
|
141
|
+
logCredentialRead(credentialType: string, accountId: string): Promise<void>;
|
|
142
|
+
logCredentialDeleted(credentialType: string, accountId: string): Promise<void>;
|
|
143
|
+
logAccountLinked(accountType: string, accountId: string): Promise<void>;
|
|
144
|
+
logAccountUnlinked(accountType: string, accountId: string): Promise<void>;
|
|
145
|
+
logAuthFailed(accountType: string, reason: string): Promise<void>;
|
|
146
|
+
logDataExported(dataType: string, count: number): Promise<void>;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/security/audit.ts"],"names":[],"mappings":"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"}
|