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
package/dist/utils/pdf-text.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Worker } from "node:worker_threads";
|
|
2
|
-
import { getDocumentProxy } from "unpdf";
|
|
2
|
+
import { extractImages, getDocumentProxy } from "unpdf";
|
|
3
|
+
import { encodePng } from "./png.js";
|
|
3
4
|
// PDF text extraction for get_attachment_text. unpdf ships a serverless build of
|
|
4
5
|
// pdf.js: pure JavaScript, no native module. The parse runs in a worker_thread of
|
|
5
6
|
// this process (pdf-text-worker.js), so a heavy file cannot stall the server's event
|
|
@@ -8,6 +9,17 @@ import { getDocumentProxy } from "unpdf";
|
|
|
8
9
|
export const DEFAULT_PDF_MAX_MB = 10;
|
|
9
10
|
export const DEFAULT_PDF_MAX_PAGES = 50;
|
|
10
11
|
export const PDF_EXTRACTION_TIMEOUT_MS = 30_000;
|
|
12
|
+
// A page image larger than this is not decoded for OCR.
|
|
13
|
+
const MAX_OCR_IMAGE_PIXELS = 20_000_000;
|
|
14
|
+
/** The page-by-page text with its markers, and a note when pages past maxPages were left out. */
|
|
15
|
+
export function formatPdfPages(pageTexts, totalPages, maxPages) {
|
|
16
|
+
const pages = pageTexts.map((pageText, index) => `--- Page ${index + 1} of ${totalPages} ---\n${pageText.trim()}`);
|
|
17
|
+
const omittedPages = totalPages - pageTexts.length;
|
|
18
|
+
if (omittedPages > 0) {
|
|
19
|
+
pages.push(`--- Truncated: read ${pageTexts.length} of ${totalPages} pages; ${omittedPages} page${omittedPages === 1 ? "" : "s"} not included (limit PROTONMAIL_PDF_MAX_PAGES=${maxPages}) ---`);
|
|
20
|
+
}
|
|
21
|
+
return pages.join("\n\n");
|
|
22
|
+
}
|
|
11
23
|
/** A PDF that cannot be read as text, with a message meant for the user, not a stack trace. */
|
|
12
24
|
export class PdfTextError extends Error {
|
|
13
25
|
reason;
|
|
@@ -29,7 +41,7 @@ export async function extractPdfText(content, options = {}) {
|
|
|
29
41
|
return new Promise((resolve, reject) => {
|
|
30
42
|
// The worker gets a copy: the caller keeps its buffer.
|
|
31
43
|
const worker = new Worker(new URL("./pdf-text-worker.js", import.meta.url), {
|
|
32
|
-
workerData: { content: new Uint8Array(content), maxPages: options.maxPages ?? DEFAULT_PDF_MAX_PAGES, timeoutMs },
|
|
44
|
+
workerData: { content: new Uint8Array(content), maxPages: options.maxPages ?? DEFAULT_PDF_MAX_PAGES, timeoutMs, ocrPages: options.ocrPages ?? 0 },
|
|
33
45
|
});
|
|
34
46
|
let settled = false;
|
|
35
47
|
const finish = (action) => {
|
|
@@ -51,6 +63,7 @@ export async function extractPdfText(content, options = {}) {
|
|
|
51
63
|
export async function extractPdfTextDirect(content, options = {}) {
|
|
52
64
|
const maxPages = options.maxPages ?? DEFAULT_PDF_MAX_PAGES;
|
|
53
65
|
const timeoutMs = options.timeoutMs ?? PDF_EXTRACTION_TIMEOUT_MS;
|
|
66
|
+
const ocrPages = options.ocrPages ?? 0;
|
|
54
67
|
let timer;
|
|
55
68
|
let timedOut = false;
|
|
56
69
|
let destroy;
|
|
@@ -65,6 +78,7 @@ export async function extractPdfTextDirect(content, options = {}) {
|
|
|
65
78
|
isOffscreenCanvasSupported: false,
|
|
66
79
|
enableXfa: false,
|
|
67
80
|
verbosity: 0,
|
|
81
|
+
...(ocrPages > 0 ? { maxImageSize: MAX_OCR_IMAGE_PIXELS } : {}),
|
|
68
82
|
});
|
|
69
83
|
}
|
|
70
84
|
catch (error) {
|
|
@@ -74,7 +88,8 @@ export async function extractPdfTextDirect(content, options = {}) {
|
|
|
74
88
|
try {
|
|
75
89
|
const totalPages = pdf.numPages;
|
|
76
90
|
const extractedPages = Math.min(totalPages, maxPages);
|
|
77
|
-
const
|
|
91
|
+
const pageTexts = [];
|
|
92
|
+
const pageImages = [];
|
|
78
93
|
let anyText = false;
|
|
79
94
|
for (let pageNumber = 1; pageNumber <= extractedPages; pageNumber += 1) {
|
|
80
95
|
if (timedOut)
|
|
@@ -85,16 +100,25 @@ export async function extractPdfTextDirect(content, options = {}) {
|
|
|
85
100
|
page.cleanup();
|
|
86
101
|
if (pageText.trim())
|
|
87
102
|
anyText = true;
|
|
88
|
-
|
|
103
|
+
else if (pageImages.length < ocrPages) {
|
|
104
|
+
const png = await largestPageImage(pdf, pageNumber);
|
|
105
|
+
if (png)
|
|
106
|
+
pageImages.push({ page: pageNumber, png });
|
|
107
|
+
}
|
|
108
|
+
pageTexts.push(pageText);
|
|
89
109
|
}
|
|
90
|
-
if (!anyText) {
|
|
110
|
+
if (!anyText && pageImages.length === 0) {
|
|
91
111
|
throw new PdfTextError("no-text-layer", "The PDF has no text layer (it is probably a scan or contains only images), so there is no text to extract.");
|
|
92
112
|
}
|
|
93
113
|
const omittedPages = totalPages - extractedPages;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
114
|
+
return {
|
|
115
|
+
text: formatPdfPages(pageTexts, totalPages, maxPages),
|
|
116
|
+
totalPages,
|
|
117
|
+
extractedPages,
|
|
118
|
+
omittedPages,
|
|
119
|
+
truncated: omittedPages > 0,
|
|
120
|
+
...(ocrPages > 0 ? { pageTexts, pageImages } : {}),
|
|
121
|
+
};
|
|
98
122
|
}
|
|
99
123
|
catch (error) {
|
|
100
124
|
throw toPdfTextError(error);
|
|
@@ -121,6 +145,22 @@ export async function extractPdfTextDirect(content, options = {}) {
|
|
|
121
145
|
work.catch(() => { });
|
|
122
146
|
}
|
|
123
147
|
}
|
|
148
|
+
// A scanned page is normally one image covering the page; the largest one is what OCR should read.
|
|
149
|
+
async function largestPageImage(pdf, pageNumber) {
|
|
150
|
+
let images;
|
|
151
|
+
try {
|
|
152
|
+
images = await extractImages(pdf, pageNumber);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
const largest = images
|
|
158
|
+
.filter((image) => image.width * image.height <= MAX_OCR_IMAGE_PIXELS)
|
|
159
|
+
.sort((a, b) => b.width * b.height - a.width * a.height)[0];
|
|
160
|
+
if (!largest)
|
|
161
|
+
return undefined;
|
|
162
|
+
return new Uint8Array(encodePng(largest.width, largest.height, largest.channels, largest.data));
|
|
163
|
+
}
|
|
124
164
|
function textContentToString(items) {
|
|
125
165
|
let out = "";
|
|
126
166
|
for (const raw of items) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-text.js","sourceRoot":"","sources":["../../src/utils/pdf-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf-text.js","sourceRoot":"","sources":["../../src/utils/pdf-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,iFAAiF;AACjF,kFAAkF;AAClF,qFAAqF;AACrF,0IAA0I;AAC1I,2DAA2D;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,wDAAwD;AACxD,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAqBxC,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,SAAmB,EAAE,UAAkB,EAAE,QAAgB;IACtF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,KAAK,GAAG,CAAC,OAAO,UAAU,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnH,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC;IACnD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CACR,uBAAuB,SAAS,CAAC,MAAM,OAAO,UAAU,WAAW,YAAY,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iDAAiD,QAAQ,OAAO,CACrL,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,+FAA+F;AAC/F,MAAM,OAAO,YAAa,SAAQ,KAAK;IAE1B,MAAM;IADjB,YACW,MAA6D,EACtE,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHN,MAAM;QAIf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,WAAoB,EAAE,QAAiB;IACnF,IAAI,WAAW,KAAK,iBAAiB,IAAI,WAAW,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC1F,8FAA8F;IAC9F,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,YAAY,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,KAAK,0BAA0B,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,OAAO,GAAmB,EAAE;IAChF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAyB,CAAC;IACjE,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpD,uDAAuD;QACvD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,sBAAsB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1E,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,qBAAqB,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE;SAClJ,CAAC,CAAC;QACH,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAE,EAAE;YACpC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC;QACX,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,oCAAoC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,EACpJ,SAAS,GAAG,IAAI,CACjB,CAAC;QACF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAA6G,EAAE,EAAE,CACvI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACjH,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,kDAAkD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/I,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAA4B,EAAE,OAAO,GAAmB,EAAE;IACnG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,yBAAyB,CAAC;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IACvC,IAAI,KAAiC,CAAC;IACtC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAA0C,CAAC;IAE/C,MAAM,IAAI,GAAG,CAAC,KAAK,IAA4B,EAAE;QAC/C,IAAI,GAAiD,CAAC;QACtD,IAAI,CAAC;YACH,+DAA+D;YAC/D,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE;gBACpD,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,KAAK;gBACrB,0BAA0B,EAAE,KAAK;gBACjC,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,CAAC;gBACZ,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC;YAChC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,MAAM,UAAU,GAA6C,EAAE,CAAC;YAChE,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,IAAI,cAAc,EAAE,UAAU,IAAI,CAAC,EAAE,CAAC;gBACvE,IAAI,QAAQ;oBAAE,MAAM;gBACpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,QAAQ,CAAC,IAAI,EAAE;oBAAE,OAAO,GAAG,IAAI,CAAC;qBAC/B,IAAI,UAAU,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;oBACtC,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;oBACpD,IAAI,GAAG;wBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,4GAA4G,CAC7G,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;YACjD,OAAO;gBACL,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;gBACrD,UAAU;gBACV,cAAc;gBACd,YAAY;gBACZ,SAAS,EAAE,YAAY,GAAG,CAAC;gBAC3B,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;gBAAS,CAAC;YACT,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,oCAAoC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACnI,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,iEAAiE;QACjE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,gBAAgB,CAAC,GAAiD,EAAE,UAAkB;IACnG,IAAI,MAAiD,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,oBAAoB,CAAC;SACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,CAAC;AAID,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAe,CAAC;QAC7B,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC3C,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,IAAI,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,YAAY,YAAY;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,IAAI,GAAI,KAAuC,EAAE,IAAI,IAAI,EAAE,CAAC;IAClE,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,OAAO,IAAI,YAAY,CAAC,WAAW,EAAE,4DAA4D,CAAC,CAAC;IACrG,CAAC;IACD,mFAAmF;IACnF,8EAA8E;IAC9E,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,OAAO,IAAI,YAAY,CAAC,SAAS,EAAE,0EAA0E,MAAM,GAAG,CAAC,CAAC;AAC1H,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":"AAeA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAa1H"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { crc32, deflateSync } from "node:zlib";
|
|
2
|
+
// Encodes raw 8-bit pixels (gray, RGB or RGBA, as pdf.js decodes a page image) as a PNG an OCR program can read.
|
|
3
|
+
const SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
4
|
+
function chunk(type, body) {
|
|
5
|
+
const typed = Buffer.concat([Buffer.from(type, "latin1"), body]);
|
|
6
|
+
const head = Buffer.alloc(4);
|
|
7
|
+
head.writeUInt32BE(body.length);
|
|
8
|
+
const tail = Buffer.alloc(4);
|
|
9
|
+
tail.writeUInt32BE(crc32(typed));
|
|
10
|
+
return Buffer.concat([head, typed, tail]);
|
|
11
|
+
}
|
|
12
|
+
export function encodePng(width, height, channels, data) {
|
|
13
|
+
const stride = width * channels;
|
|
14
|
+
const raw = Buffer.alloc((stride + 1) * height);
|
|
15
|
+
for (let y = 0; y < height; y += 1) {
|
|
16
|
+
// Each row starts with its filter type; 0 is none.
|
|
17
|
+
raw.set(data.subarray(y * stride, (y + 1) * stride), y * (stride + 1) + 1);
|
|
18
|
+
}
|
|
19
|
+
const header = Buffer.alloc(13);
|
|
20
|
+
header.writeUInt32BE(width, 0);
|
|
21
|
+
header.writeUInt32BE(height, 4);
|
|
22
|
+
header[8] = 8;
|
|
23
|
+
header[9] = channels === 1 ? 0 : channels === 3 ? 2 : 6;
|
|
24
|
+
return Buffer.concat([SIGNATURE, chunk("IHDR", header), chunk("IDAT", deflateSync(raw)), chunk("IEND", Buffer.alloc(0))]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../../src/utils/png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE/C,iHAAiH;AAEjH,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEhF,SAAS,KAAK,CAAC,IAAY,EAAE,IAAY;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,QAAmB,EAAE,IAAoC;IAChH,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,mDAAmD;QACnD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACd,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5H,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function readRegularFile(path: string, options?: {
|
|
2
|
+
maxBytes?: number;
|
|
3
|
+
binary?: false;
|
|
4
|
+
}): Promise<string>;
|
|
5
|
+
export declare function readRegularFile(path: string, options: {
|
|
6
|
+
maxBytes?: number;
|
|
7
|
+
binary: true;
|
|
8
|
+
}): Promise<Buffer>;
|
|
9
|
+
//# sourceMappingURL=regular-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regular-file.d.ts","sourceRoot":"","sources":["../../src/utils/regular-file.ts"],"names":[],"mappings":"AAcA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACtH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { lstat, open } from "node:fs/promises";
|
|
3
|
+
const DEFAULT_MAX_BYTES = 256 * 1024 * 1024;
|
|
4
|
+
function notRegular(path, code, why) {
|
|
5
|
+
return Object.assign(new Error(`${path}: ${why}`), { code });
|
|
6
|
+
}
|
|
7
|
+
export async function readRegularFile(path, options = {}) {
|
|
8
|
+
const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
9
|
+
let handle;
|
|
10
|
+
try {
|
|
11
|
+
handle = await open(path, constants.O_RDONLY | constants.O_NONBLOCK);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (error.code === "ENOENT" && (await lstat(path).catch(() => undefined))) {
|
|
15
|
+
throw notRegular(path, "ENOTREG", "a symlink to nothing is in the place of this file");
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const info = await handle.stat();
|
|
21
|
+
if (!info.isFile())
|
|
22
|
+
throw notRegular(path, "ENOTREG", "not a regular file");
|
|
23
|
+
if (info.size > maxBytes)
|
|
24
|
+
throw notRegular(path, "EFBIG", `larger than ${maxBytes} bytes`);
|
|
25
|
+
const data = await handle.readFile();
|
|
26
|
+
if (data.length > maxBytes)
|
|
27
|
+
throw notRegular(path, "EFBIG", `larger than ${maxBytes} bytes`);
|
|
28
|
+
return options.binary ? data : data.toString("utf8");
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await handle.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=regular-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regular-file.js","sourceRoot":"","sources":["../../src/utils/regular-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAE5C,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY,EAAE,GAAW;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/D,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAAO,GAA4C,EAAE;IACvG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACvD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACrG,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,mDAAmD,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,IAAI,GAAG,QAAQ;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,QAAQ,QAAQ,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ;YAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,QAAQ,QAAQ,CAAC,CAAC;QAC7F,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-policy.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"runtime-policy.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2B3F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAIpE;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW,GAClB,IAAI,CAMN;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,OAAO,GACjB;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAoBA;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAK/E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAI5E;AAMD,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAQN;AAUD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,UAAU,EAAE,MAAM,EAAE,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,OAAO,GAAG,SAAS,GAC7B,IAAI,CAsBN;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
|
|
@@ -13,6 +13,8 @@ export function sanitizeRuntimeConfig(runtime) {
|
|
|
13
13
|
idleWatchEnabled: runtime.idleWatchEnabled,
|
|
14
14
|
idleMaxSeconds: runtime.idleMaxSeconds,
|
|
15
15
|
confirmDestructive: runtime.confirmDestructive,
|
|
16
|
+
approval: runtime.approval ?? "off",
|
|
17
|
+
delegation: runtime.delegation ?? "off",
|
|
16
18
|
allowEmptyFolder: runtime.allowEmptyFolder,
|
|
17
19
|
restrictOutboundToSelf: runtime.restrictOutboundToSelf,
|
|
18
20
|
allowFileDownloadDir: runtime.allowFileDownloadDir ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-policy.js","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-policy.js","sourceRoot":"","sources":["../../src/utils/runtime-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface WriteFileNoFollowDeps {
|
|
2
|
+
rename?: (from: string, to: string) => Promise<void>;
|
|
3
|
+
sleep?: (ms: number) => Promise<unknown>;
|
|
4
|
+
/** Retry a rename that fails as locked: on by default on Windows only (elsewhere those codes are real permission errors). */
|
|
5
|
+
retry?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function writeFileNoFollow(path: string, data: Buffer, deps?: WriteFileNoFollowDeps): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=safe-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-write.d.ts","sourceRoot":"","sources":["../../src/utils/safe-write.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,6HAA6H;IAC7H,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BnH"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { open, rename, rm } from "node:fs/promises";
|
|
3
|
+
import { setTimeout as sleepFor } from "node:timers/promises";
|
|
4
|
+
// Windows refuses to replace a file another program has open (even with write sharing), and antivirus scanners and search
|
|
5
|
+
// indexers hold short-lived handles too, so the rename is tried again for about two seconds before giving up.
|
|
6
|
+
const LOCKED_CODES = new Set(["EPERM", "EBUSY", "EACCES"]);
|
|
7
|
+
const RETRY_DELAYS_MS = [10, 20, 40, 80, 160, 320, 640, 730];
|
|
8
|
+
// Writes decrypted mail content to `path` without ever following a symbolic link at the final component: the bytes
|
|
9
|
+
// go to a new, exclusively created, owner-only file next to it, which is then renamed over `path`. A rename replaces a
|
|
10
|
+
// link instead of writing through it, so a link planted at `path` (dangling or not) cannot send the write elsewhere.
|
|
11
|
+
export async function writeFileNoFollow(path, data, deps = {}) {
|
|
12
|
+
const renameFile = deps.rename ?? rename;
|
|
13
|
+
const sleep = deps.sleep ?? sleepFor;
|
|
14
|
+
const retry = deps.retry ?? process.platform === "win32";
|
|
15
|
+
const tempPath = `${path}.${randomBytes(6).toString("hex")}.tmp`;
|
|
16
|
+
const handle = await open(tempPath, "wx", 0o600);
|
|
17
|
+
try {
|
|
18
|
+
await handle.writeFile(data);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
await handle.close();
|
|
22
|
+
await rm(tempPath, { force: true });
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
await handle.close();
|
|
26
|
+
for (let attempt = 0;; attempt += 1) {
|
|
27
|
+
try {
|
|
28
|
+
await renameFile(tempPath, path);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const code = error?.code;
|
|
33
|
+
const locked = code !== undefined && LOCKED_CODES.has(code);
|
|
34
|
+
if (retry && locked && attempt < RETRY_DELAYS_MS.length) {
|
|
35
|
+
await sleep(RETRY_DELAYS_MS[attempt]);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
await rm(tempPath, { force: true });
|
|
39
|
+
if (!retry || !locked)
|
|
40
|
+
throw error;
|
|
41
|
+
// Names the destination, not the temp file, and keeps the system error as the cause.
|
|
42
|
+
throw Object.assign(new Error(`Cannot replace ${path}: the file is open in another program or locked (${code}). The existing file was left unchanged; close the program using it and try again.`, { cause: error }), { code });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=safe-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-write.js","sourceRoot":"","sources":["../../src/utils/safe-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE9D,0HAA0H;AAC1H,8GAA8G;AAC9G,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3D,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAS7D,mHAAmH;AACnH,uHAAuH;AACvH,qHAAqH;AACrH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAY,EAAE,IAAI,GAA0B,EAAE;IAClG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBACxD,MAAM,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM,KAAK,CAAC;YACnC,qFAAqF;YACrF,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,IAAI,oDAAoD,IAAI,oFAAoF,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACjO,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ServerStateConfig {
|
|
2
|
+
dataDir: string;
|
|
3
|
+
accounts?: ReadonlyArray<{
|
|
4
|
+
dataDir: string;
|
|
5
|
+
}>;
|
|
6
|
+
runtime?: {
|
|
7
|
+
tlsCaFile?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
/** Whether `target` lies in the server's own state. Its existing part is expected to be a real path already. */
|
|
11
|
+
export declare function isInsideServerState(target: string, config: ServerStateConfig | undefined): boolean;
|
|
12
|
+
//# sourceMappingURL=server-state-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-state-paths.d.ts","sourceRoot":"","sources":["../../src/utils/server-state-paths.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAiCD,gHAAgH;AAChH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CA0BlG"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
2
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
3
|
+
import { isPathInside } from "./helpers.js";
|
|
4
|
+
// The folder the server saves attachments to when no download directory is set: nothing else lives in it.
|
|
5
|
+
const ATTACHMENTS_FOLDER = "attachments";
|
|
6
|
+
/** The deepest existing part of the path by real path (symlinks followed), the rest as written. */
|
|
7
|
+
function canonical(path) {
|
|
8
|
+
const absolute = resolve(path);
|
|
9
|
+
let existing = absolute;
|
|
10
|
+
while (!existsSync(existing)) {
|
|
11
|
+
const parent = dirname(existing);
|
|
12
|
+
if (parent === existing)
|
|
13
|
+
break;
|
|
14
|
+
existing = parent;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
return join(realpathSync(existing), relative(existing, absolute));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return absolute;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// The same file or directory by device and inode, so a different spelling (the case of a name on macOS and Windows, a hard
|
|
24
|
+
// link, a symlink) cannot make a path look like something else.
|
|
25
|
+
function sameFile(a, b) {
|
|
26
|
+
try {
|
|
27
|
+
const left = statSync(a, { bigint: true });
|
|
28
|
+
const right = statSync(b, { bigint: true });
|
|
29
|
+
return left.ino !== 0n && left.ino === right.ino && left.dev === right.dev;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Whether `target` lies in the server's own state. Its existing part is expected to be a real path already. */
|
|
36
|
+
export function isInsideServerState(target, config) {
|
|
37
|
+
if (!config)
|
|
38
|
+
return false;
|
|
39
|
+
// The target and each of its parents up to the root.
|
|
40
|
+
const chain = [];
|
|
41
|
+
for (let path = resolve(target);; path = dirname(path)) {
|
|
42
|
+
chain.push(path);
|
|
43
|
+
if (dirname(path) === path)
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
for (const dataDir of new Set([config.dataDir, ...(config.accounts ?? []).map((account) => account.dataDir)].filter(Boolean))) {
|
|
47
|
+
const real = canonical(dataDir);
|
|
48
|
+
// The exemption holds only while the folder really is a folder inside the data dir (not a link back to it or out of it).
|
|
49
|
+
const realAttachments = canonical(join(real, ATTACHMENTS_FOLDER));
|
|
50
|
+
const exempt = realAttachments !== real && isPathInside(real, realAttachments);
|
|
51
|
+
if (exempt && isPathInside(realAttachments, target))
|
|
52
|
+
continue;
|
|
53
|
+
if (!existsSync(dataDir)) {
|
|
54
|
+
if (isPathInside(real, target))
|
|
55
|
+
return true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const attachments = join(dataDir, ATTACHMENTS_FOLDER);
|
|
59
|
+
for (const ancestor of chain) {
|
|
60
|
+
if (exempt && sameFile(ancestor, attachments))
|
|
61
|
+
break;
|
|
62
|
+
if (sameFile(ancestor, dataDir))
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const trusted = config.runtime?.tlsCaFile;
|
|
67
|
+
return Boolean(trusted) && (canonical(trusted) === target || sameFile(target, trusted));
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=server-state-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-state-paths.js","sourceRoot":"","sources":["../../src/utils/server-state-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,8 +22,26 @@ export interface StyleProfile {
|
|
|
22
22
|
byRecipient: Record<string, StyleSummary>;
|
|
23
23
|
byDomain: Record<string, StyleSummary>;
|
|
24
24
|
}
|
|
25
|
+
/** The languages detectLanguage can tell apart. */
|
|
26
|
+
export declare const STYLE_LANGUAGES: string[];
|
|
27
|
+
/** en, pl or de by common words (at least three of them), or undefined when it cannot tell. */
|
|
28
|
+
export declare function detectLanguage(text: string): string | undefined;
|
|
25
29
|
export declare function summarise(samples: SentSample[]): StyleSummary;
|
|
30
|
+
/** Recipients are kept under a short hash, not their address: the profile does not list whom you write to. */
|
|
31
|
+
export declare function recipientKey(address: string): string;
|
|
26
32
|
export declare function buildProfile(samples: SentSample[], now?: Date): StyleProfile;
|
|
27
33
|
/** A few plain lines a model can follow when drafting for `recipient`. */
|
|
28
34
|
export declare function styleHints(profile: StyleProfile, recipient?: string): string[];
|
|
35
|
+
/**
|
|
36
|
+
* The greeting ("Hi {name},") and closing ("Best regards") you use with `recipient` in `language`: from what you write
|
|
37
|
+
* to them, else to their domain, else in general. Only short patterns of the expected shape are taken, as the file
|
|
38
|
+
* could have been edited by hand.
|
|
39
|
+
*/
|
|
40
|
+
export declare function greetingAndClosing(profile: StyleProfile, recipient: string, language: string): {
|
|
41
|
+
greeting?: string;
|
|
42
|
+
closing?: string;
|
|
43
|
+
};
|
|
44
|
+
/** Whether a text already opens with a greeting (its first line) and ends with a closing (one of its last lines). */
|
|
45
|
+
export declare function hasGreeting(text: string): boolean;
|
|
46
|
+
export declare function hasClosing(text: string): boolean;
|
|
29
47
|
//# sourceMappingURL=style-profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style-profile.d.ts","sourceRoot":"","sources":["../../src/utils/style-profile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style-profile.d.ts","sourceRoot":"","sources":["../../src/utils/style-profile.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC;AAkBD,mDAAmD;AACnD,eAAO,MAAM,eAAe,UAAyB,CAAC;AAEtD,+FAA+F;AAC/F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU/D;AA0BD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAwC7D;AAED,8GAA8G;AAC9G,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,OAAa,GAAG,YAAY,CAelF;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAY9E;AASD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAYtI;AAED,qHAAqH;AACrH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|