proton-mail-bridge-client 2.16.2 → 2.17.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/README.md +149 -12
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +178 -1
- package/dist/cli.js.map +1 -1
- package/dist/config-env.d.ts +2 -1
- package/dist/config-env.d.ts.map +1 -1
- package/dist/config-env.js +24 -0
- package/dist/config-env.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +180 -11
- package/dist/index.js.map +1 -1
- package/dist/services/account-manager.d.ts +7 -0
- package/dist/services/account-manager.d.ts.map +1 -1
- package/dist/services/account-manager.js +59 -0
- package/dist/services/account-manager.js.map +1 -1
- package/dist/services/audit-service.d.ts +20 -0
- package/dist/services/audit-service.d.ts.map +1 -1
- package/dist/services/audit-service.js +266 -9
- package/dist/services/audit-service.js.map +1 -1
- package/dist/services/autoresponder-service.d.ts +35 -6
- package/dist/services/autoresponder-service.d.ts.map +1 -1
- package/dist/services/autoresponder-service.js +223 -108
- package/dist/services/autoresponder-service.js.map +1 -1
- package/dist/services/brief-service.d.ts +7 -1
- package/dist/services/brief-service.d.ts.map +1 -1
- package/dist/services/brief-service.js +19 -5
- package/dist/services/brief-service.js.map +1 -1
- package/dist/services/category-service.d.ts +91 -0
- package/dist/services/category-service.d.ts.map +1 -0
- package/dist/services/category-service.js +320 -0
- package/dist/services/category-service.js.map +1 -0
- package/dist/services/commitment-service.d.ts.map +1 -1
- package/dist/services/commitment-service.js +9 -3
- package/dist/services/commitment-service.js.map +1 -1
- package/dist/services/contact-service.d.ts +60 -0
- package/dist/services/contact-service.d.ts.map +1 -0
- package/dist/services/contact-service.js +248 -0
- package/dist/services/contact-service.js.map +1 -0
- package/dist/services/delivery-queue-service.d.ts +4 -0
- package/dist/services/delivery-queue-service.d.ts.map +1 -1
- package/dist/services/delivery-queue-service.js +12 -2
- package/dist/services/delivery-queue-service.js.map +1 -1
- package/dist/services/draft-store-service.d.ts.map +1 -1
- package/dist/services/draft-store-service.js +3 -2
- package/dist/services/draft-store-service.js.map +1 -1
- package/dist/services/embedding-service.d.ts +68 -0
- package/dist/services/embedding-service.d.ts.map +1 -0
- package/dist/services/embedding-service.js +465 -0
- package/dist/services/embedding-service.js.map +1 -0
- package/dist/services/event-log-service.d.ts +67 -0
- package/dist/services/event-log-service.d.ts.map +1 -0
- package/dist/services/event-log-service.js +280 -0
- package/dist/services/event-log-service.js.map +1 -0
- package/dist/services/grant-service.d.ts +84 -0
- package/dist/services/grant-service.d.ts.map +1 -0
- package/dist/services/grant-service.js +214 -0
- package/dist/services/grant-service.js.map +1 -0
- package/dist/services/local-index-service.d.ts +18 -1
- package/dist/services/local-index-service.d.ts.map +1 -1
- package/dist/services/local-index-service.js +54 -4
- package/dist/services/local-index-service.js.map +1 -1
- package/dist/services/reply-reminder-service.d.ts +4 -0
- package/dist/services/reply-reminder-service.d.ts.map +1 -1
- package/dist/services/reply-reminder-service.js +22 -2
- package/dist/services/reply-reminder-service.js.map +1 -1
- package/dist/services/rules-service.d.ts +9 -1
- package/dist/services/rules-service.d.ts.map +1 -1
- package/dist/services/rules-service.js +8 -3
- package/dist/services/rules-service.js.map +1 -1
- package/dist/services/sieve-export.d.ts +19 -0
- package/dist/services/sieve-export.d.ts.map +1 -0
- package/dist/services/sieve-export.js +192 -0
- package/dist/services/sieve-export.js.map +1 -0
- package/dist/services/simple-imap-service.d.ts +13 -0
- package/dist/services/simple-imap-service.d.ts.map +1 -1
- package/dist/services/simple-imap-service.js +142 -18
- package/dist/services/simple-imap-service.js.map +1 -1
- package/dist/services/smtp-service.d.ts +1 -0
- package/dist/services/smtp-service.d.ts.map +1 -1
- package/dist/services/smtp-service.js +20 -0
- package/dist/services/smtp-service.js.map +1 -1
- package/dist/services/snooze-service.d.ts +4 -0
- package/dist/services/snooze-service.d.ts.map +1 -1
- package/dist/services/snooze-service.js +12 -3
- package/dist/services/snooze-service.js.map +1 -1
- package/dist/services/template-service.d.ts.map +1 -1
- package/dist/services/template-service.js +3 -2
- package/dist/services/template-service.js.map +1 -1
- package/dist/services/triage-plan-service.d.ts +10 -2
- package/dist/services/triage-plan-service.d.ts.map +1 -1
- package/dist/services/triage-plan-service.js +23 -3
- package/dist/services/triage-plan-service.js.map +1 -1
- package/dist/tools/attachments.js +1 -1
- package/dist/tools/attachments.js.map +1 -1
- package/dist/tools/brief.d.ts.map +1 -1
- package/dist/tools/brief.js +14 -4
- package/dist/tools/brief.js.map +1 -1
- package/dist/tools/categories.d.ts +4 -0
- package/dist/tools/categories.d.ts.map +1 -0
- package/dist/tools/categories.js +269 -0
- package/dist/tools/categories.js.map +1 -0
- package/dist/tools/commitments.d.ts.map +1 -1
- package/dist/tools/commitments.js +6 -2
- package/dist/tools/commitments.js.map +1 -1
- package/dist/tools/contacts.d.ts +6 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +295 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/context.d.ts +4 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +3 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/definitions.d.ts +333 -5
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +169 -5
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/delegation.d.ts +44 -0
- package/dist/tools/delegation.d.ts.map +1 -0
- package/dist/tools/delegation.js +180 -0
- package/dist/tools/delegation.js.map +1 -0
- package/dist/tools/diagnostics.d.ts.map +1 -1
- package/dist/tools/diagnostics.js +6 -0
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/drafts-support.d.ts +2 -1
- package/dist/tools/drafts-support.d.ts.map +1 -1
- package/dist/tools/drafts-support.js +14 -6
- package/dist/tools/drafts-support.js.map +1 -1
- package/dist/tools/drafts.d.ts.map +1 -1
- package/dist/tools/drafts.js +22 -1
- package/dist/tools/drafts.js.map +1 -1
- package/dist/tools/events.d.ts +47 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +240 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +125 -4
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/resources.d.ts +4 -0
- package/dist/tools/resources.d.ts.map +1 -1
- package/dist/tools/resources.js +9 -0
- package/dist/tools/resources.js.map +1 -1
- package/dist/tools/rules-runner.d.ts.map +1 -1
- package/dist/tools/rules-runner.js +1 -0
- package/dist/tools/rules-runner.js.map +1 -1
- package/dist/tools/rules.d.ts +9 -0
- package/dist/tools/rules.d.ts.map +1 -1
- package/dist/tools/rules.js +50 -19
- package/dist/tools/rules.js.map +1 -1
- package/dist/tools/sending.d.ts.map +1 -1
- package/dist/tools/sending.js +4 -0
- package/dist/tools/sending.js.map +1 -1
- package/dist/tools/style.d.ts +2 -0
- package/dist/tools/style.d.ts.map +1 -1
- package/dist/tools/style.js +3 -3
- package/dist/tools/style.js.map +1 -1
- package/dist/tools/templates-and-reminders.d.ts +3 -0
- package/dist/tools/templates-and-reminders.d.ts.map +1 -1
- package/dist/tools/templates-and-reminders.js +31 -17
- package/dist/tools/templates-and-reminders.js.map +1 -1
- package/dist/tools/triage.d.ts.map +1 -1
- package/dist/tools/triage.js +33 -11
- package/dist/tools/triage.js.map +1 -1
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/account-identity.d.ts.map +1 -1
- package/dist/utils/account-identity.js +3 -2
- package/dist/utils/account-identity.js.map +1 -1
- package/dist/utils/approval.d.ts +133 -0
- package/dist/utils/approval.d.ts.map +1 -0
- package/dist/utils/approval.js +507 -0
- package/dist/utils/approval.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +1 -1
- package/dist/utils/atomic-write.d.ts.map +1 -1
- package/dist/utils/atomic-write.js +10 -3
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/commitment-phrases.d.ts.map +1 -1
- package/dist/utils/commitment-phrases.js +31 -18
- package/dist/utils/commitment-phrases.js.map +1 -1
- package/dist/utils/contact-text.d.ts +8 -0
- package/dist/utils/contact-text.d.ts.map +1 -0
- package/dist/utils/contact-text.js +24 -0
- package/dist/utils/contact-text.js.map +1 -0
- package/dist/utils/delegation.d.ts +17 -0
- package/dist/utils/delegation.d.ts.map +1 -0
- package/dist/utils/delegation.js +72 -0
- package/dist/utils/delegation.js.map +1 -0
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +5 -4
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/mail-security.d.ts +9 -1
- package/dist/utils/mail-security.d.ts.map +1 -1
- package/dist/utils/mail-security.js +444 -62
- package/dist/utils/mail-security.js.map +1 -1
- package/dist/utils/ocr.d.ts +24 -0
- package/dist/utils/ocr.d.ts.map +1 -0
- package/dist/utils/ocr.js +109 -0
- package/dist/utils/ocr.js.map +1 -0
- package/dist/utils/office-text-worker.d.ts +2 -0
- package/dist/utils/office-text-worker.d.ts.map +1 -0
- package/dist/utils/office-text-worker.js +17 -0
- package/dist/utils/office-text-worker.js.map +1 -0
- package/dist/utils/office-text.d.ts +32 -0
- package/dist/utils/office-text.d.ts.map +1 -0
- package/dist/utils/office-text.js +540 -0
- package/dist/utils/office-text.js.map +1 -0
- package/dist/utils/pdf-text-worker.js +2 -2
- package/dist/utils/pdf-text-worker.js.map +1 -1
- package/dist/utils/pdf-text.d.ts +10 -0
- package/dist/utils/pdf-text.d.ts.map +1 -1
- package/dist/utils/pdf-text.js +49 -9
- package/dist/utils/pdf-text.js.map +1 -1
- package/dist/utils/png.d.ts +2 -0
- package/dist/utils/png.d.ts.map +1 -0
- package/dist/utils/png.js +26 -0
- package/dist/utils/png.js.map +1 -0
- package/dist/utils/regular-file.d.ts +9 -0
- package/dist/utils/regular-file.d.ts.map +1 -0
- package/dist/utils/regular-file.js +34 -0
- package/dist/utils/regular-file.js.map +1 -0
- package/dist/utils/runtime-policy.d.ts.map +1 -1
- package/dist/utils/runtime-policy.js +2 -0
- package/dist/utils/runtime-policy.js.map +1 -1
- package/dist/utils/safe-write.d.ts +8 -0
- package/dist/utils/safe-write.d.ts.map +1 -0
- package/dist/utils/safe-write.js +46 -0
- package/dist/utils/safe-write.js.map +1 -0
- package/dist/utils/server-state-paths.d.ts +12 -0
- package/dist/utils/server-state-paths.d.ts.map +1 -0
- package/dist/utils/server-state-paths.js +69 -0
- package/dist/utils/server-state-paths.js.map +1 -0
- package/dist/utils/style-profile.d.ts +18 -0
- package/dist/utils/style-profile.d.ts.map +1 -1
- package/dist/utils/style-profile.js +63 -14
- package/dist/utils/style-profile.js.map +1 -1
- package/dist/utils/vcard.d.ts +27 -0
- package/dist/utils/vcard.d.ts.map +1 -0
- package/dist/utils/vcard.js +141 -0
- package/dist/utils/vcard.js.map +1 -0
- package/dist/utils/zip-reader.d.ts +16 -0
- package/dist/utils/zip-reader.d.ts.map +1 -0
- package/dist/utils/zip-reader.js +108 -0
- package/dist/utils/zip-reader.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
1
2
|
import { logger as defaultLogger } from "../utils/logger.js";
|
|
2
3
|
import { SimpleIMAPService } from "./simple-imap-service.js";
|
|
3
4
|
import { SMTPService } from "./smtp-service.js";
|
|
@@ -12,9 +13,45 @@ import { BackgroundSyncService } from "./background-sync-service.js";
|
|
|
12
13
|
import { AutoresponderService } from "./autoresponder-service.js";
|
|
13
14
|
import { RulesService } from "./rules-service.js";
|
|
14
15
|
import { TriagePlanService } from "./triage-plan-service.js";
|
|
16
|
+
import { CategoryService } from "./category-service.js";
|
|
15
17
|
import { CommitmentService } from "./commitment-service.js";
|
|
18
|
+
import { ContactService } from "./contact-service.js";
|
|
19
|
+
import { EventLogService } from "./event-log-service.js";
|
|
16
20
|
import { runRulesOnNewMail } from "../tools/rules-runner.js";
|
|
21
|
+
import { readCached as readStyleProfile } from "../tools/style.js";
|
|
17
22
|
import { ensureMailboxWriteAllowed, ensureSendAllowed } from "../utils/runtime-policy.js";
|
|
23
|
+
const NEW_MAIL_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
24
|
+
const NEW_MAIL_MAX_EVENTS = 25;
|
|
25
|
+
// The unread inbox mail a sync brought in, as events. A sync also returns old mail (the first sync, a full one), so
|
|
26
|
+
// only recent mail from someone else counts, at most NEW_MAIL_MAX_EVENTS per sync (the newest), and a message is
|
|
27
|
+
// announced once (its key). What is left out is said in one event.
|
|
28
|
+
function announceNewMail(eventLog, emails, ownAddresses) {
|
|
29
|
+
const own = new Set(ownAddresses.map((address) => address.toLowerCase()));
|
|
30
|
+
const cutoff = Date.now() - NEW_MAIL_MAX_AGE_MS;
|
|
31
|
+
const dateOf = (email) => Date.parse(email.internalDate ?? email.date ?? "");
|
|
32
|
+
const fresh = emails
|
|
33
|
+
.filter((email) => !email.isRead && email.folder.toUpperCase() === "INBOX" && !own.has((email.from[0]?.address ?? "").toLowerCase()) && !(dateOf(email) < cutoff))
|
|
34
|
+
.sort((left, right) => (dateOf(left) || 0) - (dateOf(right) || 0));
|
|
35
|
+
const skipped = fresh.slice(0, Math.max(0, fresh.length - NEW_MAIL_MAX_EVENTS));
|
|
36
|
+
if (skipped.length > 0)
|
|
37
|
+
eventLog.emit({ type: "mail.new_overflow", detail: `${skipped.length} more new messages not listed`, key: `mail.new_overflow:${skipped.at(-1)?.id}` });
|
|
38
|
+
for (const email of fresh.slice(skipped.length)) {
|
|
39
|
+
eventLog.emit({ type: "mail.new", emailId: email.id, from: email.from[0]?.address, subject: email.subject, key: `mail.new:${email.id}` });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Reminders whose date has passed and that nobody has answered: each is announced once (marked under the store's lock).
|
|
43
|
+
async function announceDueReminders(bundle, allAddresses) {
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
const due = (await bundle.replyReminderService.list()).filter((record) => !record.dueNotifiedAt && new Date(record.remindAt).getTime() <= now);
|
|
46
|
+
const open = [];
|
|
47
|
+
for (const record of due) {
|
|
48
|
+
if ((await bundle.localIndexService.getRepliesSince(record.messageId, record.createdAt, allAddresses, record.to)).length === 0)
|
|
49
|
+
open.push(record.id);
|
|
50
|
+
}
|
|
51
|
+
for (const record of await bundle.replyReminderService.takeDue(open)) {
|
|
52
|
+
bundle.eventLog.emit({ type: "reply_reminder.due", refId: record.id, emailId: record.emailId, subject: record.subject });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
18
55
|
function buildAccountBundle(account, baseConfig, log) {
|
|
19
56
|
// Same runtime/debug/sync policy as the primary account (there is only one
|
|
20
57
|
// PROTONMAIL_* runtime configuration for this server process) — only the
|
|
@@ -40,7 +77,12 @@ function buildAccountBundle(account, baseConfig, log) {
|
|
|
40
77
|
const autoresponderService = new AutoresponderService(config, log);
|
|
41
78
|
const rulesService = new RulesService(config, log);
|
|
42
79
|
const triagePlanService = new TriagePlanService(config);
|
|
80
|
+
const categoryService = new CategoryService(config);
|
|
43
81
|
const commitmentService = new CommitmentService(config);
|
|
82
|
+
const contactService = new ContactService(config, log);
|
|
83
|
+
const eventLog = new EventLogService(config, log);
|
|
84
|
+
deliveryQueueService.setEventSink((event) => eventLog.emit(event));
|
|
85
|
+
snoozeService.setEventSink((event) => eventLog.emit(event));
|
|
44
86
|
// The note this address adds to what it sends while its automatic reply is active.
|
|
45
87
|
smtpService.setOutgoingNoteProvider(() => autoresponderService.outgoingNoteNow());
|
|
46
88
|
// The addresses that count as this account's own, and what the autoresponder may do and ask on its behalf.
|
|
@@ -102,14 +144,25 @@ function buildAccountBundle(account, baseConfig, log) {
|
|
|
102
144
|
},
|
|
103
145
|
isKnownContact: async (address) => (await localIndexService.search({ from: account.address, to: address, limit: 1 })).emails.length > 0,
|
|
104
146
|
hasAnsweredSince: async (address, sinceIso) => (await localIndexService.search({ from: account.address, to: address, dateFrom: sinceIso, limit: 1 })).emails.length > 0,
|
|
147
|
+
contactTags: (address) => contactService.tagsFor(address),
|
|
148
|
+
styleProfile: () => readStyleProfile(join(config.dataDir, "style-profile.json")),
|
|
105
149
|
};
|
|
106
150
|
};
|
|
151
|
+
backgroundSyncService.addNewMailHandler(async (emails) => announceNewMail(eventLog, emails, ownAddresses));
|
|
107
152
|
// Replies and drafts are made after a sync has indexed new mail.
|
|
108
153
|
backgroundSyncService.addNewMailHandler(async (emails) => {
|
|
109
154
|
const deps = autoresponderDeps();
|
|
110
155
|
if (!deps.canSend && !deps.canDraft)
|
|
111
156
|
return;
|
|
112
157
|
const outcome = await autoresponderService.process(emails, ownAddresses, deps);
|
|
158
|
+
const byId = new Map(emails.map((email) => [email.id, email]));
|
|
159
|
+
const about = (id) => ({ emailId: id, from: byId.get(id)?.from[0]?.address, subject: byId.get(id)?.subject });
|
|
160
|
+
for (const id of outcome.replied)
|
|
161
|
+
eventLog.emit({ type: "autoresponder.replied", ...about(id) });
|
|
162
|
+
for (const id of outcome.drafted)
|
|
163
|
+
eventLog.emit({ type: "autoresponder.drafted", ...about(id) });
|
|
164
|
+
for (const failure of outcome.failed)
|
|
165
|
+
eventLog.emit({ type: "autoresponder.failed", ...about(failure.id), detail: failure.error });
|
|
113
166
|
if (outcome.replied.length > 0 || outcome.drafted.length > 0) {
|
|
114
167
|
log.info("Autoresponder acted", "AutoresponderService", { account: account.slug, replies: outcome.replied.length, drafts: outcome.drafted.length });
|
|
115
168
|
}
|
|
@@ -130,7 +183,10 @@ function buildAccountBundle(account, baseConfig, log) {
|
|
|
130
183
|
autoresponderService,
|
|
131
184
|
rulesService,
|
|
132
185
|
triagePlanService,
|
|
186
|
+
categoryService,
|
|
133
187
|
commitmentService,
|
|
188
|
+
contactService,
|
|
189
|
+
eventLog,
|
|
134
190
|
autoresponderDeps,
|
|
135
191
|
ownAddresses,
|
|
136
192
|
};
|
|
@@ -164,8 +220,11 @@ export class AccountManager {
|
|
|
164
220
|
}
|
|
165
221
|
// A scheduled send's source draft may live in a different account's store than the
|
|
166
222
|
// queue that sends it (see DeliveryQueueRecord.sourceDraftStoreSlug).
|
|
223
|
+
const allAddresses = config.accounts.map((entry) => entry.address);
|
|
167
224
|
for (const bundle of this.bySlug.values()) {
|
|
168
225
|
bundle.deliveryQueueService.setDraftStoreResolver((slug) => this.bySlug.get(slug)?.draftStore);
|
|
226
|
+
// Checked after each sync, like the new mail; a failure here never fails the sync.
|
|
227
|
+
bundle.backgroundSyncService.addNewMailHandler(() => announceDueReminders(bundle, allAddresses));
|
|
169
228
|
}
|
|
170
229
|
}
|
|
171
230
|
primary() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/services/account-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account-manager.js","sourceRoot":"","sources":["../../src/services/account-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
import type { AuditEntry, ProtonMailConfig } from "../types/index.js";
|
|
2
|
+
export type AuditBreakReason = "edited" | "deleted" | "reordered" | "head-unreadable";
|
|
3
|
+
export interface AuditVerification {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
checked: number;
|
|
6
|
+
legacyEntries: number;
|
|
7
|
+
headSeq: number | null;
|
|
8
|
+
headHash: string | null;
|
|
9
|
+
rotatedBeforeSeq?: number;
|
|
10
|
+
brokenSeq?: number;
|
|
11
|
+
reason?: AuditBreakReason;
|
|
12
|
+
detail?: string;
|
|
13
|
+
}
|
|
2
14
|
export declare class AuditService {
|
|
3
15
|
private readonly config;
|
|
4
16
|
private readonly auditPath;
|
|
5
17
|
private readonly archivePath;
|
|
6
18
|
private readonly archivePath2;
|
|
19
|
+
private readonly headPath;
|
|
7
20
|
private _rotateLock;
|
|
8
21
|
private permissionsChecked;
|
|
9
22
|
private identityChecked;
|
|
23
|
+
private headWarned;
|
|
24
|
+
private cachedHead?;
|
|
10
25
|
constructor(config: ProtonMailConfig);
|
|
11
26
|
getPath(): string;
|
|
12
27
|
private ensureIdentity;
|
|
13
28
|
record(entry: AuditEntry): Promise<void>;
|
|
14
29
|
list(limit?: number): Promise<AuditEntry[]>;
|
|
30
|
+
verify(): Promise<AuditVerification>;
|
|
31
|
+
private readRecordedHead;
|
|
32
|
+
private endsWithNewline;
|
|
33
|
+
private readHead;
|
|
15
34
|
private rotateIfNeeded;
|
|
16
35
|
private withRotateLock;
|
|
17
36
|
private scrubError;
|
|
37
|
+
private readLines;
|
|
18
38
|
private readEntries;
|
|
19
39
|
}
|
|
20
40
|
//# sourceMappingURL=audit-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-service.d.ts","sourceRoot":"","sources":["../../src/services/audit-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-service.d.ts","sourceRoot":"","sources":["../../src/services/audit-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAYtE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEtF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAExB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiDD,qBAAa,YAAY;IAaX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,UAAU,CAAC,CAAiD;IAEpE,YAA6B,MAAM,EAAE,gBAAgB,EAKpD;IAED,OAAO,IAAI,MAAM,CAEhB;YAQa,cAAc;IAOtB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D7C;IAEK,IAAI,CAAC,KAAK,SAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAS7C;IAEK,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAiGzC;YAGa,gBAAgB;YAkBhB,eAAe;YAkBf,QAAQ;YAoBR,cAAc;YAyBd,cAAc;IAY5B,OAAO,CAAC,UAAU;YAQJ,SAAS;YAWT,WAAW;CAwB1B"}
|
|
@@ -1,21 +1,75 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { appendFile, chmod, mkdir, open, rename, stat } from "node:fs/promises";
|
|
2
3
|
import { dirname, join } from "node:path";
|
|
3
4
|
import { ensureAccountIdentityMatches } from "../utils/account-identity.js";
|
|
5
|
+
import { writeFileAtomic } from "../utils/atomic-write.js";
|
|
6
|
+
import { readRegularFile } from "../utils/regular-file.js";
|
|
7
|
+
import { withFileLock } from "../utils/file-lock.js";
|
|
8
|
+
import { logger } from "../utils/logger.js";
|
|
4
9
|
const MAX_AUDIT_BYTES = 5 * 1024 * 1024;
|
|
5
10
|
const MAX_AUDIT_LINES = 10000;
|
|
11
|
+
const MAX_HEAD_BYTES = 64 * 1024;
|
|
12
|
+
const GENESIS_HASH = "0".repeat(64);
|
|
13
|
+
// Key order is not stable across writers, so the hash covers keys sorted at every level. The value goes through a
|
|
14
|
+
// JSON round trip first so it hashes exactly what is read back from disk (undefined dropped, Dates as strings).
|
|
15
|
+
function canonicalJson(value) {
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
18
|
+
}
|
|
19
|
+
if (value && typeof value === "object") {
|
|
20
|
+
const object = value;
|
|
21
|
+
return `{${Object.keys(object).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(object[key])}`).join(",")}}`;
|
|
22
|
+
}
|
|
23
|
+
return JSON.stringify(value);
|
|
24
|
+
}
|
|
25
|
+
function hashEntry(entry) {
|
|
26
|
+
const { hash: _hash, ...body } = entry;
|
|
27
|
+
return createHash("sha256").update(`${entry.prevHash ?? ""}${canonicalJson(JSON.parse(JSON.stringify(body)))}`).digest("hex");
|
|
28
|
+
}
|
|
29
|
+
function isChained(entry) {
|
|
30
|
+
return typeof entry.hash === "string" && typeof entry.seq === "number";
|
|
31
|
+
}
|
|
32
|
+
function parseLine(line) {
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(line);
|
|
35
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : undefined;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// A line cut short by a crash mid-append: it starts like an entry but is not valid JSON.
|
|
42
|
+
function isIncompleteEntry(line) {
|
|
43
|
+
try {
|
|
44
|
+
JSON.parse(line);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return line.trimStart().startsWith("{");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function isEnoent(error) {
|
|
52
|
+
return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
|
|
53
|
+
}
|
|
6
54
|
export class AuditService {
|
|
7
55
|
config;
|
|
8
56
|
auditPath;
|
|
9
57
|
archivePath;
|
|
10
58
|
archivePath2;
|
|
59
|
+
headPath;
|
|
11
60
|
_rotateLock = Promise.resolve();
|
|
12
61
|
permissionsChecked = false;
|
|
13
62
|
identityChecked = false;
|
|
63
|
+
headWarned = false;
|
|
64
|
+
// The head this process last wrote, valid while audit.log is still the same file at the same size: then no
|
|
65
|
+
// other process appended in between and the file need not be re-read.
|
|
66
|
+
cachedHead;
|
|
14
67
|
constructor(config) {
|
|
15
68
|
this.config = config;
|
|
16
69
|
this.auditPath = join(this.config.dataDir, "audit.log");
|
|
17
70
|
this.archivePath = `${this.auditPath}.1`;
|
|
18
71
|
this.archivePath2 = `${this.auditPath}.2`;
|
|
72
|
+
this.headPath = join(this.config.dataDir, "audit.head");
|
|
19
73
|
}
|
|
20
74
|
getPath() {
|
|
21
75
|
return this.auditPath;
|
|
@@ -24,8 +78,8 @@ export class AuditService {
|
|
|
24
78
|
// touch this dataDir's audit.log (or its rotated archives) if it belongs
|
|
25
79
|
// to a different account. AuditService is append-only-log-backed rather
|
|
26
80
|
// than JSON-blob-backed like the other stores, so there's no single
|
|
27
|
-
// loadUnlocked() choke point to hang this on — record() and
|
|
28
|
-
// its
|
|
81
|
+
// loadUnlocked() choke point to hang this on — record(), list() and verify()
|
|
82
|
+
// are its entry points that actually touch disk, so all of them call this.
|
|
29
83
|
async ensureIdentity() {
|
|
30
84
|
if (!this.identityChecked) {
|
|
31
85
|
await ensureAccountIdentityMatches(this.config.dataDir, this.config.smtp.username);
|
|
@@ -48,17 +102,48 @@ export class AuditService {
|
|
|
48
102
|
await chmod(this.archivePath, 0o600).catch(() => { });
|
|
49
103
|
await chmod(this.archivePath2, 0o600).catch(() => { });
|
|
50
104
|
}
|
|
105
|
+
const { seq: _seq, prevHash: _prevHash, hash: _hash, chainStart: _chainStart, ...fields } = entry;
|
|
51
106
|
const persistedEntry = {
|
|
52
|
-
...
|
|
107
|
+
...fields,
|
|
53
108
|
durationMs: entry.durationMs ?? 0,
|
|
54
109
|
error: entry.error ? this.scrubError(entry.error) : entry.error,
|
|
55
110
|
};
|
|
56
|
-
|
|
111
|
+
// The file lock keeps a second server process on the same dataDir from reading the same head and
|
|
112
|
+
// forking the chain; the in-process chain only saves this process from polling its own lock file.
|
|
113
|
+
await this.withRotateLock(() => withFileLock(this.auditPath, async () => {
|
|
57
114
|
await this.rotateIfNeeded();
|
|
58
|
-
|
|
115
|
+
const fileHead = await this.readHead();
|
|
116
|
+
// If audit.log lost its newest entries (or all of them), carry on from the head audit.head recorded, so
|
|
117
|
+
// the gap stays visible to verify instead of a fresh chain hiding it.
|
|
118
|
+
const recorded = await this.readRecordedHead();
|
|
119
|
+
const head = recorded && recorded !== "invalid" && recorded !== "unreadable" && (!fileHead || recorded.seq > fileHead.seq) ? recorded : fileHead;
|
|
120
|
+
const needsNewline = !(await this.endsWithNewline());
|
|
121
|
+
const chained = head
|
|
122
|
+
? { ...persistedEntry, seq: head.seq + 1, prevHash: head.hash }
|
|
123
|
+
: { ...persistedEntry, seq: 1, prevHash: GENESIS_HASH, chainStart: true };
|
|
124
|
+
chained.hash = hashEntry(chained);
|
|
125
|
+
// The chain detects an edit, deletion or reordering, but anyone who can write the file can also
|
|
126
|
+
// recompute every hash after the point they changed; only a head hash kept elsewhere catches that.
|
|
59
127
|
// mode: 0o600 — the audit trail can contain full request/error detail, so it must not land world-readable at the default umask.
|
|
60
|
-
|
|
61
|
-
|
|
128
|
+
// A crash can leave a half-written last line; the new entry must not be glued onto it and lost.
|
|
129
|
+
await appendFile(this.auditPath, `${needsNewline ? "\n" : ""}${JSON.stringify(chained)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
130
|
+
const info = await stat(this.auditPath);
|
|
131
|
+
const newHead = { seq: chained.seq, hash: chained.hash };
|
|
132
|
+
this.cachedHead = { ino: info.ino, size: info.size, head: newHead };
|
|
133
|
+
// Written after the append: a crash between the two leaves audit.head one entry behind, which verify accepts.
|
|
134
|
+
// Like the log itself this only raises the bar: someone who can write both files can forge both. The real
|
|
135
|
+
// defense is a head hash (verify_audit_log returns it) saved somewhere they cannot reach.
|
|
136
|
+
try {
|
|
137
|
+
await writeFileAtomic(this.headPath, `${JSON.stringify(newHead)}\n`);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
// The entry is already in the log; an audit.head that cannot be replaced must not stop auditing. verify reports it.
|
|
141
|
+
if (!this.headWarned) {
|
|
142
|
+
this.headWarned = true;
|
|
143
|
+
logger.warn("Could not update audit.head; entries are still appended to the audit log", "AuditService", error);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
62
147
|
}
|
|
63
148
|
async list(limit = 100) {
|
|
64
149
|
await this.ensureIdentity();
|
|
@@ -70,6 +155,167 @@ export class AuditService {
|
|
|
70
155
|
];
|
|
71
156
|
return entries.slice(-cap);
|
|
72
157
|
}
|
|
158
|
+
async verify() {
|
|
159
|
+
await this.ensureIdentity();
|
|
160
|
+
// Under the lock so a half-written line or a rotation in progress is never mistaken for tampering.
|
|
161
|
+
const [files, recorded] = await withFileLock(this.auditPath, async () => [
|
|
162
|
+
[await this.readLines(this.archivePath2), await this.readLines(this.archivePath), await this.readLines(this.auditPath)],
|
|
163
|
+
await this.readRecordedHead(),
|
|
164
|
+
]);
|
|
165
|
+
const hasArchive2 = files[0].length > 0;
|
|
166
|
+
const lines = files.flat();
|
|
167
|
+
let legacyEntries = 0;
|
|
168
|
+
let checked = 0;
|
|
169
|
+
let prev;
|
|
170
|
+
let rotatedBeforeSeq;
|
|
171
|
+
let torn = 0;
|
|
172
|
+
let hashAtRecordedSeq;
|
|
173
|
+
const broken = (seq, reason, detail) => ({
|
|
174
|
+
ok: false, checked, legacyEntries, headSeq: null, headHash: null, brokenSeq: seq, reason, detail,
|
|
175
|
+
});
|
|
176
|
+
for (let index = 0; index < lines.length; index++) {
|
|
177
|
+
const line = lines[index];
|
|
178
|
+
const entry = parseLine(line);
|
|
179
|
+
if (!entry && isIncompleteEntry(line)) {
|
|
180
|
+
torn++;
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (!entry || !isChained(entry)) {
|
|
184
|
+
if (!prev) {
|
|
185
|
+
legacyEntries++;
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
return broken(prev.seq + 1, "edited", `a line after seq ${prev.seq} is ${entry ? "missing its hash" : "not valid JSON"}`);
|
|
189
|
+
}
|
|
190
|
+
const seq = entry.seq;
|
|
191
|
+
if (hashEntry(entry) !== entry.hash) {
|
|
192
|
+
return broken(seq, "edited", `the content of seq ${seq} does not match its hash`);
|
|
193
|
+
}
|
|
194
|
+
if (!prev) {
|
|
195
|
+
if (entry.chainStart) {
|
|
196
|
+
if (seq !== 1 || entry.prevHash !== GENESIS_HASH) {
|
|
197
|
+
return broken(seq, "edited", `seq ${seq} is marked as the chain start but does not begin a chain`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else if (hasArchive2 && index === 0) {
|
|
201
|
+
// Rotation drops whole files, so after an eviction the oldest archive starts exactly at a chained
|
|
202
|
+
// entry. Anywhere else, entries before the first one kept were removed.
|
|
203
|
+
rotatedBeforeSeq = seq;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
return broken(seq - 1, "deleted", `entries before seq ${seq} are missing and were not rotated away`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (seq !== prev.seq + 1) {
|
|
210
|
+
const expected = prev.seq + 1;
|
|
211
|
+
if (seq < expected) {
|
|
212
|
+
return broken(expected, "reordered", `seq ${seq} appears after seq ${prev.seq}`);
|
|
213
|
+
}
|
|
214
|
+
const later = lines.slice(index + 1).some((other) => parseLine(other)?.seq === expected);
|
|
215
|
+
return later
|
|
216
|
+
? broken(expected, "reordered", `seq ${expected} appears out of order, after seq ${prev.seq} comes seq ${seq}`)
|
|
217
|
+
: broken(expected, "deleted", `seq ${expected}${seq - expected > 1 ? `..${seq - 1}` : ""} is missing`);
|
|
218
|
+
}
|
|
219
|
+
else if (entry.prevHash !== prev.hash) {
|
|
220
|
+
return broken(seq, "edited", `seq ${seq} does not link to seq ${prev.seq}; one of them was rewritten`);
|
|
221
|
+
}
|
|
222
|
+
prev = entry;
|
|
223
|
+
checked++;
|
|
224
|
+
if (recorded && recorded !== "invalid" && recorded !== "unreadable" && seq === recorded.seq)
|
|
225
|
+
hashAtRecordedSeq = entry.hash;
|
|
226
|
+
}
|
|
227
|
+
// audit.head is only a claim once it exists; without it nothing is checked against the head.
|
|
228
|
+
if (recorded === "unreadable") {
|
|
229
|
+
return broken(prev?.seq ?? 0, "head-unreadable", "audit.head cannot be read (permissions, or something that is not a file in its place), so the chain head cannot be confirmed");
|
|
230
|
+
}
|
|
231
|
+
if (recorded === "invalid") {
|
|
232
|
+
return broken(prev?.seq ?? 0, "edited", "audit.head exists but cannot be read, so the chain head cannot be confirmed");
|
|
233
|
+
}
|
|
234
|
+
if (recorded) {
|
|
235
|
+
if (!prev) {
|
|
236
|
+
return legacyEntries > 0
|
|
237
|
+
? broken(recorded.seq, "edited", `audit.log has no chained entries, but audit.head records the chain up to seq ${recorded.seq}; the chain fields were removed`)
|
|
238
|
+
: broken(recorded.seq, "deleted", `audit.log is missing or empty, but audit.head records the chain up to seq ${recorded.seq}`);
|
|
239
|
+
}
|
|
240
|
+
if (prev.seq < recorded.seq) {
|
|
241
|
+
return broken(prev.seq + 1, "deleted", `audit.log ends at seq ${prev.seq}, but audit.head records seq ${recorded.seq}; the newest entries were removed`);
|
|
242
|
+
}
|
|
243
|
+
if (prev.seq === recorded.seq ? prev.hash !== recorded.hash : hashAtRecordedSeq !== undefined && hashAtRecordedSeq !== recorded.hash) {
|
|
244
|
+
return broken(recorded.seq, "edited", `seq ${recorded.seq} does not match the hash audit.head recorded for it`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
ok: true,
|
|
249
|
+
checked,
|
|
250
|
+
legacyEntries,
|
|
251
|
+
headSeq: prev?.seq ?? null,
|
|
252
|
+
headHash: prev?.hash ?? null,
|
|
253
|
+
...(rotatedBeforeSeq !== undefined ? { rotatedBeforeSeq } : {}),
|
|
254
|
+
...(torn > 0 ? { detail: `${torn} incomplete line${torn === 1 ? "" : "s"} (a write cut short, e.g. by a crash) skipped; the entries around ${torn === 1 ? "it are" : "them are"} intact` } : {}),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// The head audit.head holds, undefined when there is none yet (nothing is claimed then), "invalid" when its content is damaged, "unreadable" when the file cannot be read at all.
|
|
258
|
+
async readRecordedHead() {
|
|
259
|
+
let raw;
|
|
260
|
+
try {
|
|
261
|
+
raw = await readRegularFile(this.headPath, { maxBytes: MAX_HEAD_BYTES });
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
if (isEnoent(error))
|
|
265
|
+
return undefined;
|
|
266
|
+
// No permission, a directory in its place, an I/O error: the head exists but says nothing, like a damaged one.
|
|
267
|
+
return "unreadable";
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
const parsed = JSON.parse(raw);
|
|
271
|
+
return parsed && Number.isInteger(parsed.seq) && parsed.seq > 0 && typeof parsed.hash === "string" ? { seq: parsed.seq, hash: parsed.hash } : "invalid";
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return "invalid";
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Whether the next append starts on a fresh line. A file this process just wrote is known to end in one.
|
|
278
|
+
async endsWithNewline() {
|
|
279
|
+
const info = await stat(this.auditPath).catch((error) => {
|
|
280
|
+
if (isEnoent(error))
|
|
281
|
+
return undefined;
|
|
282
|
+
throw error;
|
|
283
|
+
});
|
|
284
|
+
if (!info || info.size === 0)
|
|
285
|
+
return true;
|
|
286
|
+
if (this.cachedHead && this.cachedHead.ino === info.ino && this.cachedHead.size === info.size)
|
|
287
|
+
return true;
|
|
288
|
+
const handle = await open(this.auditPath, "r");
|
|
289
|
+
try {
|
|
290
|
+
const last = Buffer.alloc(1);
|
|
291
|
+
await handle.read(last, 0, 1, info.size - 1);
|
|
292
|
+
return last[0] === 0x0a;
|
|
293
|
+
}
|
|
294
|
+
finally {
|
|
295
|
+
await handle.close();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Newest chained entry across audit.log and its archives (an archive holds the head right after a rotation).
|
|
299
|
+
async readHead() {
|
|
300
|
+
const info = await stat(this.auditPath).catch((error) => {
|
|
301
|
+
if (isEnoent(error))
|
|
302
|
+
return undefined;
|
|
303
|
+
throw error;
|
|
304
|
+
});
|
|
305
|
+
if (info && this.cachedHead && this.cachedHead.ino === info.ino && this.cachedHead.size === info.size) {
|
|
306
|
+
return this.cachedHead.head;
|
|
307
|
+
}
|
|
308
|
+
for (const path of [this.auditPath, this.archivePath, this.archivePath2]) {
|
|
309
|
+
const lines = await this.readLines(path);
|
|
310
|
+
for (let index = lines.length - 1; index >= 0; index--) {
|
|
311
|
+
const entry = parseLine(lines[index]);
|
|
312
|
+
if (entry && isChained(entry)) {
|
|
313
|
+
return { seq: entry.seq, hash: entry.hash };
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
73
319
|
async rotateIfNeeded() {
|
|
74
320
|
try {
|
|
75
321
|
const info = await stat(this.auditPath);
|
|
@@ -110,9 +356,20 @@ export class AuditService {
|
|
|
110
356
|
.replace(/\b(LOGIN\s+\S+\s+)("[^"]*"|\S+)/gi, "$1REDACTED")
|
|
111
357
|
.replace(/(\b[a-z][a-z0-9+.-]*:\/\/[^:/@\s]+):[^@\s]+@/gi, "$1:REDACTED@");
|
|
112
358
|
}
|
|
359
|
+
async readLines(path) {
|
|
360
|
+
try {
|
|
361
|
+
return (await readRegularFile(path)).split(/\r?\n/).filter(Boolean);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (isEnoent(error)) {
|
|
365
|
+
return [];
|
|
366
|
+
}
|
|
367
|
+
throw error;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
113
370
|
async readEntries(path, maxLines = MAX_AUDIT_LINES) {
|
|
114
371
|
try {
|
|
115
|
-
const raw = await
|
|
372
|
+
const raw = await readRegularFile(path);
|
|
116
373
|
const allLines = raw.split(/\r?\n/).filter(Boolean);
|
|
117
374
|
const lines = allLines.slice(-maxLines);
|
|
118
375
|
return lines.flatMap((line) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-service.js","sourceRoot":"","sources":["../../src/services/audit-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audit-service.js","sourceRoot":"","sources":["../../src/services/audit-service.ts"],"names":[],"mappings":"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"}
|