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.
Files changed (245) hide show
  1. package/README.md +149 -12
  2. package/dist/cli.d.ts +16 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +178 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config-env.d.ts +2 -1
  7. package/dist/config-env.d.ts.map +1 -1
  8. package/dist/config-env.js +24 -0
  9. package/dist/config-env.js.map +1 -1
  10. package/dist/index.d.ts +5 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +180 -11
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/account-manager.d.ts +7 -0
  15. package/dist/services/account-manager.d.ts.map +1 -1
  16. package/dist/services/account-manager.js +59 -0
  17. package/dist/services/account-manager.js.map +1 -1
  18. package/dist/services/audit-service.d.ts +20 -0
  19. package/dist/services/audit-service.d.ts.map +1 -1
  20. package/dist/services/audit-service.js +266 -9
  21. package/dist/services/audit-service.js.map +1 -1
  22. package/dist/services/autoresponder-service.d.ts +35 -6
  23. package/dist/services/autoresponder-service.d.ts.map +1 -1
  24. package/dist/services/autoresponder-service.js +223 -108
  25. package/dist/services/autoresponder-service.js.map +1 -1
  26. package/dist/services/brief-service.d.ts +7 -1
  27. package/dist/services/brief-service.d.ts.map +1 -1
  28. package/dist/services/brief-service.js +19 -5
  29. package/dist/services/brief-service.js.map +1 -1
  30. package/dist/services/category-service.d.ts +91 -0
  31. package/dist/services/category-service.d.ts.map +1 -0
  32. package/dist/services/category-service.js +320 -0
  33. package/dist/services/category-service.js.map +1 -0
  34. package/dist/services/commitment-service.d.ts.map +1 -1
  35. package/dist/services/commitment-service.js +9 -3
  36. package/dist/services/commitment-service.js.map +1 -1
  37. package/dist/services/contact-service.d.ts +60 -0
  38. package/dist/services/contact-service.d.ts.map +1 -0
  39. package/dist/services/contact-service.js +248 -0
  40. package/dist/services/contact-service.js.map +1 -0
  41. package/dist/services/delivery-queue-service.d.ts +4 -0
  42. package/dist/services/delivery-queue-service.d.ts.map +1 -1
  43. package/dist/services/delivery-queue-service.js +12 -2
  44. package/dist/services/delivery-queue-service.js.map +1 -1
  45. package/dist/services/draft-store-service.d.ts.map +1 -1
  46. package/dist/services/draft-store-service.js +3 -2
  47. package/dist/services/draft-store-service.js.map +1 -1
  48. package/dist/services/embedding-service.d.ts +68 -0
  49. package/dist/services/embedding-service.d.ts.map +1 -0
  50. package/dist/services/embedding-service.js +465 -0
  51. package/dist/services/embedding-service.js.map +1 -0
  52. package/dist/services/event-log-service.d.ts +67 -0
  53. package/dist/services/event-log-service.d.ts.map +1 -0
  54. package/dist/services/event-log-service.js +280 -0
  55. package/dist/services/event-log-service.js.map +1 -0
  56. package/dist/services/grant-service.d.ts +84 -0
  57. package/dist/services/grant-service.d.ts.map +1 -0
  58. package/dist/services/grant-service.js +214 -0
  59. package/dist/services/grant-service.js.map +1 -0
  60. package/dist/services/local-index-service.d.ts +18 -1
  61. package/dist/services/local-index-service.d.ts.map +1 -1
  62. package/dist/services/local-index-service.js +54 -4
  63. package/dist/services/local-index-service.js.map +1 -1
  64. package/dist/services/reply-reminder-service.d.ts +4 -0
  65. package/dist/services/reply-reminder-service.d.ts.map +1 -1
  66. package/dist/services/reply-reminder-service.js +22 -2
  67. package/dist/services/reply-reminder-service.js.map +1 -1
  68. package/dist/services/rules-service.d.ts +9 -1
  69. package/dist/services/rules-service.d.ts.map +1 -1
  70. package/dist/services/rules-service.js +8 -3
  71. package/dist/services/rules-service.js.map +1 -1
  72. package/dist/services/sieve-export.d.ts +19 -0
  73. package/dist/services/sieve-export.d.ts.map +1 -0
  74. package/dist/services/sieve-export.js +192 -0
  75. package/dist/services/sieve-export.js.map +1 -0
  76. package/dist/services/simple-imap-service.d.ts +13 -0
  77. package/dist/services/simple-imap-service.d.ts.map +1 -1
  78. package/dist/services/simple-imap-service.js +142 -18
  79. package/dist/services/simple-imap-service.js.map +1 -1
  80. package/dist/services/smtp-service.d.ts +1 -0
  81. package/dist/services/smtp-service.d.ts.map +1 -1
  82. package/dist/services/smtp-service.js +20 -0
  83. package/dist/services/smtp-service.js.map +1 -1
  84. package/dist/services/snooze-service.d.ts +4 -0
  85. package/dist/services/snooze-service.d.ts.map +1 -1
  86. package/dist/services/snooze-service.js +12 -3
  87. package/dist/services/snooze-service.js.map +1 -1
  88. package/dist/services/template-service.d.ts.map +1 -1
  89. package/dist/services/template-service.js +3 -2
  90. package/dist/services/template-service.js.map +1 -1
  91. package/dist/services/triage-plan-service.d.ts +10 -2
  92. package/dist/services/triage-plan-service.d.ts.map +1 -1
  93. package/dist/services/triage-plan-service.js +23 -3
  94. package/dist/services/triage-plan-service.js.map +1 -1
  95. package/dist/tools/attachments.js +1 -1
  96. package/dist/tools/attachments.js.map +1 -1
  97. package/dist/tools/brief.d.ts.map +1 -1
  98. package/dist/tools/brief.js +14 -4
  99. package/dist/tools/brief.js.map +1 -1
  100. package/dist/tools/categories.d.ts +4 -0
  101. package/dist/tools/categories.d.ts.map +1 -0
  102. package/dist/tools/categories.js +269 -0
  103. package/dist/tools/categories.js.map +1 -0
  104. package/dist/tools/commitments.d.ts.map +1 -1
  105. package/dist/tools/commitments.js +6 -2
  106. package/dist/tools/commitments.js.map +1 -1
  107. package/dist/tools/contacts.d.ts +6 -0
  108. package/dist/tools/contacts.d.ts.map +1 -0
  109. package/dist/tools/contacts.js +295 -0
  110. package/dist/tools/contacts.js.map +1 -0
  111. package/dist/tools/context.d.ts +4 -0
  112. package/dist/tools/context.d.ts.map +1 -1
  113. package/dist/tools/context.js +3 -0
  114. package/dist/tools/context.js.map +1 -1
  115. package/dist/tools/definitions.d.ts +333 -5
  116. package/dist/tools/definitions.d.ts.map +1 -1
  117. package/dist/tools/definitions.js +169 -5
  118. package/dist/tools/definitions.js.map +1 -1
  119. package/dist/tools/delegation.d.ts +44 -0
  120. package/dist/tools/delegation.d.ts.map +1 -0
  121. package/dist/tools/delegation.js +180 -0
  122. package/dist/tools/delegation.js.map +1 -0
  123. package/dist/tools/diagnostics.d.ts.map +1 -1
  124. package/dist/tools/diagnostics.js +6 -0
  125. package/dist/tools/diagnostics.js.map +1 -1
  126. package/dist/tools/drafts-support.d.ts +2 -1
  127. package/dist/tools/drafts-support.d.ts.map +1 -1
  128. package/dist/tools/drafts-support.js +14 -6
  129. package/dist/tools/drafts-support.js.map +1 -1
  130. package/dist/tools/drafts.d.ts.map +1 -1
  131. package/dist/tools/drafts.js +22 -1
  132. package/dist/tools/drafts.js.map +1 -1
  133. package/dist/tools/events.d.ts +47 -0
  134. package/dist/tools/events.d.ts.map +1 -0
  135. package/dist/tools/events.js +240 -0
  136. package/dist/tools/events.js.map +1 -0
  137. package/dist/tools/reading.d.ts.map +1 -1
  138. package/dist/tools/reading.js +125 -4
  139. package/dist/tools/reading.js.map +1 -1
  140. package/dist/tools/resources.d.ts +4 -0
  141. package/dist/tools/resources.d.ts.map +1 -1
  142. package/dist/tools/resources.js +9 -0
  143. package/dist/tools/resources.js.map +1 -1
  144. package/dist/tools/rules-runner.d.ts.map +1 -1
  145. package/dist/tools/rules-runner.js +1 -0
  146. package/dist/tools/rules-runner.js.map +1 -1
  147. package/dist/tools/rules.d.ts +9 -0
  148. package/dist/tools/rules.d.ts.map +1 -1
  149. package/dist/tools/rules.js +50 -19
  150. package/dist/tools/rules.js.map +1 -1
  151. package/dist/tools/sending.d.ts.map +1 -1
  152. package/dist/tools/sending.js +4 -0
  153. package/dist/tools/sending.js.map +1 -1
  154. package/dist/tools/style.d.ts +2 -0
  155. package/dist/tools/style.d.ts.map +1 -1
  156. package/dist/tools/style.js +3 -3
  157. package/dist/tools/style.js.map +1 -1
  158. package/dist/tools/templates-and-reminders.d.ts +3 -0
  159. package/dist/tools/templates-and-reminders.d.ts.map +1 -1
  160. package/dist/tools/templates-and-reminders.js +31 -17
  161. package/dist/tools/templates-and-reminders.js.map +1 -1
  162. package/dist/tools/triage.d.ts.map +1 -1
  163. package/dist/tools/triage.js +33 -11
  164. package/dist/tools/triage.js.map +1 -1
  165. package/dist/types/index.d.ts +23 -0
  166. package/dist/types/index.d.ts.map +1 -1
  167. package/dist/utils/account-identity.d.ts.map +1 -1
  168. package/dist/utils/account-identity.js +3 -2
  169. package/dist/utils/account-identity.js.map +1 -1
  170. package/dist/utils/approval.d.ts +133 -0
  171. package/dist/utils/approval.d.ts.map +1 -0
  172. package/dist/utils/approval.js +507 -0
  173. package/dist/utils/approval.js.map +1 -0
  174. package/dist/utils/atomic-write.d.ts +1 -1
  175. package/dist/utils/atomic-write.d.ts.map +1 -1
  176. package/dist/utils/atomic-write.js +10 -3
  177. package/dist/utils/atomic-write.js.map +1 -1
  178. package/dist/utils/commitment-phrases.d.ts.map +1 -1
  179. package/dist/utils/commitment-phrases.js +31 -18
  180. package/dist/utils/commitment-phrases.js.map +1 -1
  181. package/dist/utils/contact-text.d.ts +8 -0
  182. package/dist/utils/contact-text.d.ts.map +1 -0
  183. package/dist/utils/contact-text.js +24 -0
  184. package/dist/utils/contact-text.js.map +1 -0
  185. package/dist/utils/delegation.d.ts +17 -0
  186. package/dist/utils/delegation.d.ts.map +1 -0
  187. package/dist/utils/delegation.js +72 -0
  188. package/dist/utils/delegation.js.map +1 -0
  189. package/dist/utils/file-lock.d.ts.map +1 -1
  190. package/dist/utils/file-lock.js +5 -4
  191. package/dist/utils/file-lock.js.map +1 -1
  192. package/dist/utils/mail-security.d.ts +9 -1
  193. package/dist/utils/mail-security.d.ts.map +1 -1
  194. package/dist/utils/mail-security.js +444 -62
  195. package/dist/utils/mail-security.js.map +1 -1
  196. package/dist/utils/ocr.d.ts +24 -0
  197. package/dist/utils/ocr.d.ts.map +1 -0
  198. package/dist/utils/ocr.js +109 -0
  199. package/dist/utils/ocr.js.map +1 -0
  200. package/dist/utils/office-text-worker.d.ts +2 -0
  201. package/dist/utils/office-text-worker.d.ts.map +1 -0
  202. package/dist/utils/office-text-worker.js +17 -0
  203. package/dist/utils/office-text-worker.js.map +1 -0
  204. package/dist/utils/office-text.d.ts +32 -0
  205. package/dist/utils/office-text.d.ts.map +1 -0
  206. package/dist/utils/office-text.js +540 -0
  207. package/dist/utils/office-text.js.map +1 -0
  208. package/dist/utils/pdf-text-worker.js +2 -2
  209. package/dist/utils/pdf-text-worker.js.map +1 -1
  210. package/dist/utils/pdf-text.d.ts +10 -0
  211. package/dist/utils/pdf-text.d.ts.map +1 -1
  212. package/dist/utils/pdf-text.js +49 -9
  213. package/dist/utils/pdf-text.js.map +1 -1
  214. package/dist/utils/png.d.ts +2 -0
  215. package/dist/utils/png.d.ts.map +1 -0
  216. package/dist/utils/png.js +26 -0
  217. package/dist/utils/png.js.map +1 -0
  218. package/dist/utils/regular-file.d.ts +9 -0
  219. package/dist/utils/regular-file.d.ts.map +1 -0
  220. package/dist/utils/regular-file.js +34 -0
  221. package/dist/utils/regular-file.js.map +1 -0
  222. package/dist/utils/runtime-policy.d.ts.map +1 -1
  223. package/dist/utils/runtime-policy.js +2 -0
  224. package/dist/utils/runtime-policy.js.map +1 -1
  225. package/dist/utils/safe-write.d.ts +8 -0
  226. package/dist/utils/safe-write.d.ts.map +1 -0
  227. package/dist/utils/safe-write.js +46 -0
  228. package/dist/utils/safe-write.js.map +1 -0
  229. package/dist/utils/server-state-paths.d.ts +12 -0
  230. package/dist/utils/server-state-paths.d.ts.map +1 -0
  231. package/dist/utils/server-state-paths.js +69 -0
  232. package/dist/utils/server-state-paths.js.map +1 -0
  233. package/dist/utils/style-profile.d.ts +18 -0
  234. package/dist/utils/style-profile.d.ts.map +1 -1
  235. package/dist/utils/style-profile.js +63 -14
  236. package/dist/utils/style-profile.js.map +1 -1
  237. package/dist/utils/vcard.d.ts +27 -0
  238. package/dist/utils/vcard.d.ts.map +1 -0
  239. package/dist/utils/vcard.js +141 -0
  240. package/dist/utils/vcard.js.map +1 -0
  241. package/dist/utils/zip-reader.d.ts +16 -0
  242. package/dist/utils/zip-reader.d.ts.map +1 -0
  243. package/dist/utils/zip-reader.js +108 -0
  244. package/dist/utils/zip-reader.js.map +1 -0
  245. package/package.json +3 -3
@@ -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 pages = [];
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
- pages.push(`--- Page ${pageNumber} of ${totalPages} ---\n${pageText.trim()}`);
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
- if (omittedPages > 0) {
95
- pages.push(`--- Truncated: read ${extractedPages} of ${totalPages} pages; ${omittedPages} page${omittedPages === 1 ? "" : "s"} not included (limit PROTONMAIL_PDF_MAX_PAGES=${maxPages}) ---`);
96
- }
97
- return { text: pages.join("\n\n"), totalPages, extractedPages, omittedPages, truncated: omittedPages > 0 };
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;AAEzC,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;AAgBhD,+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;SACjH,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,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;aACb,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,KAAK,GAAa,EAAE,CAAC;YAC3B,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;gBACpC,KAAK,CAAC,IAAI,CAAC,YAAY,UAAU,OAAO,UAAU,SAAS,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,YAAY,CACpB,eAAe,EACf,4GAA4G,CAC7G,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;YACjD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,IAAI,CACR,uBAAuB,cAAc,OAAO,UAAU,WAAW,YAAY,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iDAAiD,QAAQ,OAAO,CACnL,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC;QAC7G,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;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"}
1
+ {"version":3,"file":"pdf-text.js","sourceRoot":"","sources":["../../src/utils/pdf-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function encodePng(width: number, height: number, channels: 1 | 3 | 4, data: Uint8Array | Uint8ClampedArray): Buffer;
2
+ //# sourceMappingURL=png.d.ts.map
@@ -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,CAyB3F;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"}
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":"AAIA,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;AA4CD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY,CAwC7D;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,OAAa,GAAG,YAAY,CAclF;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAY9E"}
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"}