@postalsys/email-content 0.0.4 → 0.1.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 +207 -17
- package/dist/.tsbuildinfo +1 -1
- package/dist/analyze.d.ts +55 -15
- package/dist/analyze.d.ts.map +1 -1
- package/dist/analyze.js +264 -61
- package/dist/analyze.js.map +1 -1
- package/dist/canonical/html.d.ts +21 -2
- package/dist/canonical/html.d.ts.map +1 -1
- package/dist/canonical/html.js +213 -14
- package/dist/canonical/html.js.map +1 -1
- package/dist/classify/confidence.d.ts +12 -0
- package/dist/classify/confidence.d.ts.map +1 -1
- package/dist/classify/confidence.js +54 -4
- package/dist/classify/confidence.js.map +1 -1
- package/dist/classify/reconcile.d.ts +25 -17
- package/dist/classify/reconcile.d.ts.map +1 -1
- package/dist/classify/reconcile.js +52 -20
- package/dist/classify/reconcile.js.map +1 -1
- package/dist/cli/annotate.d.ts.map +1 -1
- package/dist/cli/annotate.js +6 -3
- package/dist/cli/annotate.js.map +1 -1
- package/dist/cli/args.d.ts +14 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +48 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/benchmark.d.ts +39 -0
- package/dist/cli/benchmark.d.ts.map +1 -1
- package/dist/cli/benchmark.js +179 -66
- package/dist/cli/benchmark.js.map +1 -1
- package/dist/cli/corpus.d.ts.map +1 -1
- package/dist/cli/corpus.js +13 -8
- package/dist/cli/corpus.js.map +1 -1
- package/dist/cli/disagreements.d.ts.map +1 -1
- package/dist/cli/disagreements.js +7 -4
- package/dist/cli/disagreements.js.map +1 -1
- package/dist/cli/evaluate.d.ts.map +1 -1
- package/dist/cli/evaluate.js +34 -10
- package/dist/cli/evaluate.js.map +1 -1
- package/dist/cli/extract.d.ts.map +1 -1
- package/dist/cli/extract.js +8 -3
- package/dist/cli/extract.js.map +1 -1
- package/dist/cli/main.js +8 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/corpus/scanner.d.ts +9 -1
- package/dist/corpus/scanner.d.ts.map +1 -1
- package/dist/corpus/scanner.js +52 -13
- package/dist/corpus/scanner.js.map +1 -1
- package/dist/corpus/store.d.ts +33 -2
- package/dist/corpus/store.d.ts.map +1 -1
- package/dist/corpus/store.js +64 -4
- package/dist/corpus/store.js.map +1 -1
- package/dist/detect/patterns.d.ts +29 -0
- package/dist/detect/patterns.d.ts.map +1 -1
- package/dist/detect/patterns.js +80 -6
- package/dist/detect/patterns.js.map +1 -1
- package/dist/detect/reply-header.d.ts +14 -0
- package/dist/detect/reply-header.d.ts.map +1 -1
- package/dist/detect/reply-header.js +80 -37
- package/dist/detect/reply-header.js.map +1 -1
- package/dist/eval/oracle.d.ts +80 -0
- package/dist/eval/oracle.d.ts.map +1 -0
- package/dist/eval/oracle.js +250 -0
- package/dist/eval/oracle.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -56
- package/dist/index.js.map +1 -1
- package/dist/mime/model.d.ts +28 -3
- package/dist/mime/model.d.ts.map +1 -1
- package/dist/mime/model.js +41 -1
- package/dist/mime/model.js.map +1 -1
- package/dist/mime/parse.d.ts.map +1 -1
- package/dist/mime/parse.js +19 -2
- package/dist/mime/parse.js.map +1 -1
- package/dist/mime/select.d.ts +71 -0
- package/dist/mime/select.d.ts.map +1 -0
- package/dist/mime/select.js +198 -0
- package/dist/mime/select.js.map +1 -0
- package/dist/segment/html-blocks.d.ts +1 -1
- package/dist/segment/html-blocks.d.ts.map +1 -1
- package/dist/segment/html-blocks.js +77 -8
- package/dist/segment/html-blocks.js.map +1 -1
- package/dist/segment/text-blocks.d.ts.map +1 -1
- package/dist/segment/text-blocks.js +18 -1
- package/dist/segment/text-blocks.js.map +1 -1
- package/dist/segment/types.d.ts +14 -0
- package/dist/segment/types.d.ts.map +1 -1
- package/dist/types.d.ts +132 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +37 -3
- package/dist/types.js.map +1 -1
- package/dist/util/worker-pool.d.ts +21 -0
- package/dist/util/worker-pool.d.ts.map +1 -1
- package/dist/util/worker-pool.js +61 -13
- package/dist/util/worker-pool.js.map +1 -1
- package/package.json +6 -5
package/dist/mime/model.d.ts
CHANGED
|
@@ -98,14 +98,39 @@ export interface ParsedMessage {
|
|
|
98
98
|
structure: string;
|
|
99
99
|
}
|
|
100
100
|
export interface ParseOptions {
|
|
101
|
-
/** Maximum decoded bytes retained per text part. Default 1 MiB. */
|
|
101
|
+
/** Maximum decoded bytes retained per text part. Default 1 MiB. Recommended ceiling 32 MiB. */
|
|
102
102
|
maxTextPartBytes?: number;
|
|
103
|
-
/** Maximum number of parts before the walk stops recording. Default 500. */
|
|
103
|
+
/** Maximum number of parts before the walk stops recording. Default 500. Recommended ceiling 10,000. */
|
|
104
104
|
maxParts?: number;
|
|
105
|
-
/** Maximum raw header block size per part, passed to mailsplit. Default 1 MiB. */
|
|
105
|
+
/** Maximum raw header block size per part, passed to mailsplit. Default 1 MiB. Recommended ceiling 16 MiB. */
|
|
106
106
|
maxHeadSize?: number;
|
|
107
107
|
/** Treat message/rfc822 as an opaque leaf instead of descending into it. Default false. */
|
|
108
108
|
ignoreEmbedded?: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Maximum raw message size accepted. Default 64 MiB.
|
|
111
|
+
*
|
|
112
|
+
* Per part limits do not bound total work: an attacker can submit many individually legal
|
|
113
|
+
* parts. This is a circuit breaker over the whole input, not a sandbox, and the raw message has
|
|
114
|
+
* already been allocated by the time it is checked. Reject oversized payloads at the transport
|
|
115
|
+
* where you can.
|
|
116
|
+
*/
|
|
117
|
+
maxMessageBytes?: number;
|
|
118
|
+
/**
|
|
119
|
+
* Maximum decoded text retained across every text part combined. Default 16 MiB.
|
|
120
|
+
*
|
|
121
|
+
* Once reached, later parts are not decoded and the result carries `input_limit_exceeded`.
|
|
122
|
+
*/
|
|
123
|
+
maxTotalDecodedTextBytes?: number;
|
|
109
124
|
}
|
|
110
125
|
export declare const DEFAULT_PARSE_OPTIONS: Required<ParseOptions>;
|
|
126
|
+
/**
|
|
127
|
+
* Validate caller supplied parse options and fill in the defaults.
|
|
128
|
+
*
|
|
129
|
+
* Rejects what is meaningless, and does not reject what is merely large. `NaN`, infinities,
|
|
130
|
+
* negatives, zero and fractions are always programmer errors and always throw. Upper bounds are
|
|
131
|
+
* documented as recommendations rather than enforced: a hard failure on a value the caller chose
|
|
132
|
+
* deliberately is more likely to take down a consuming service than to protect it, and the host is
|
|
133
|
+
* better placed than this library to know what its own memory budget is.
|
|
134
|
+
*/
|
|
135
|
+
export declare function validateParseOptions(input?: ParseOptions): Required<ParseOptions>;
|
|
111
136
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/mime/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/mime/model.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/mime/model.ts"],"names":[],"mappings":"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"}
|
package/dist/mime/model.js
CHANGED
|
@@ -8,10 +8,50 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.DEFAULT_PARSE_OPTIONS = void 0;
|
|
11
|
+
exports.validateParseOptions = validateParseOptions;
|
|
12
|
+
const types_1 = require("../types");
|
|
11
13
|
exports.DEFAULT_PARSE_OPTIONS = {
|
|
12
14
|
maxTextPartBytes: 1024 * 1024,
|
|
13
15
|
maxParts: 500,
|
|
14
16
|
maxHeadSize: 1024 * 1024,
|
|
15
|
-
ignoreEmbedded: false
|
|
17
|
+
ignoreEmbedded: false,
|
|
18
|
+
maxMessageBytes: 64 * 1024 * 1024,
|
|
19
|
+
maxTotalDecodedTextBytes: 16 * 1024 * 1024
|
|
16
20
|
};
|
|
21
|
+
function requirePositiveInteger(value, option) {
|
|
22
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {
|
|
23
|
+
throw new types_1.ConfigurationError(option, 'a positive safe integer');
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate caller supplied parse options and fill in the defaults.
|
|
29
|
+
*
|
|
30
|
+
* Rejects what is meaningless, and does not reject what is merely large. `NaN`, infinities,
|
|
31
|
+
* negatives, zero and fractions are always programmer errors and always throw. Upper bounds are
|
|
32
|
+
* documented as recommendations rather than enforced: a hard failure on a value the caller chose
|
|
33
|
+
* deliberately is more likely to take down a consuming service than to protect it, and the host is
|
|
34
|
+
* better placed than this library to know what its own memory budget is.
|
|
35
|
+
*/
|
|
36
|
+
function validateParseOptions(input) {
|
|
37
|
+
if (input === undefined || input === null) {
|
|
38
|
+
return { ...exports.DEFAULT_PARSE_OPTIONS };
|
|
39
|
+
}
|
|
40
|
+
if (typeof input !== 'object') {
|
|
41
|
+
throw new types_1.ConfigurationError('parse', 'an object');
|
|
42
|
+
}
|
|
43
|
+
const options = { ...exports.DEFAULT_PARSE_OPTIONS };
|
|
44
|
+
for (const key of ['maxTextPartBytes', 'maxParts', 'maxHeadSize', 'maxMessageBytes', 'maxTotalDecodedTextBytes']) {
|
|
45
|
+
if (input[key] !== undefined) {
|
|
46
|
+
options[key] = requirePositiveInteger(input[key], `parse.${key}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (input.ignoreEmbedded !== undefined) {
|
|
50
|
+
if (typeof input.ignoreEmbedded !== 'boolean') {
|
|
51
|
+
throw new types_1.ConfigurationError('parse.ignoreEmbedded', 'a boolean');
|
|
52
|
+
}
|
|
53
|
+
options.ignoreEmbedded = input.ignoreEmbedded;
|
|
54
|
+
}
|
|
55
|
+
return options;
|
|
56
|
+
}
|
|
17
57
|
//# sourceMappingURL=model.js.map
|
package/dist/mime/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/mime/model.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/mime/model.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAwJH,oDAqBC;AA3KD,oCAA4D;AA6H/C,QAAA,qBAAqB,GAA2B;IACzD,gBAAgB,EAAE,IAAI,GAAG,IAAI;IAC7B,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,IAAI,GAAG,IAAI;IACxB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACjC,wBAAwB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;CAC7C,CAAC;AAEF,SAAS,sBAAsB,CAAC,KAAc,EAAE,MAAc;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,0BAAkB,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAC,KAAoB;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,EAAE,GAAG,6BAAqB,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,0BAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,GAAG,6BAAqB,EAAE,CAAC;IACrE,KAAK,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,0BAA0B,CAAU,EAAE,CAAC;QACxH,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,OAAO,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,IAAI,0BAAkB,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
package/dist/mime/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/mime/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/mime/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAwB,MAAM,SAAS,CAAC;AA4HvH,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B/H;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkNlG"}
|
package/dist/mime/parse.js
CHANGED
|
@@ -164,7 +164,7 @@ function structureSignature(parts, partsById, rootId) {
|
|
|
164
164
|
* that is converted into a parsed message carrying a `mime_parse_error` warning.
|
|
165
165
|
*/
|
|
166
166
|
async function parseMessage(raw, options = {}) {
|
|
167
|
-
const opts =
|
|
167
|
+
const opts = (0, model_1.validateParseOptions)(options);
|
|
168
168
|
const warnings = [];
|
|
169
169
|
const pendingParts = [];
|
|
170
170
|
const partsById = new Map();
|
|
@@ -301,12 +301,29 @@ async function parseMessage(raw, options = {}) {
|
|
|
301
301
|
finish();
|
|
302
302
|
}
|
|
303
303
|
});
|
|
304
|
+
// Aggregate budget across every text part. Per part caps do not bound total work: a thousand
|
|
305
|
+
// individually legal parts add up to the same memory as one enormous one.
|
|
306
|
+
let decodedBudget = opts.maxTotalDecodedTextBytes;
|
|
307
|
+
let aggregateReported = false;
|
|
304
308
|
for (const pending of pendingParts) {
|
|
305
309
|
if (pending.nonContiguous) {
|
|
306
310
|
warnings.push({ code: 'non_contiguous_body', mimePart: pending.part.partId });
|
|
307
311
|
}
|
|
312
|
+
if (pending.collecting && pending.bodyBytes > 0 && decodedBudget <= 0) {
|
|
313
|
+
if (!aggregateReported) {
|
|
314
|
+
aggregateReported = true;
|
|
315
|
+
warnings.push({
|
|
316
|
+
code: 'input_limit_exceeded',
|
|
317
|
+
mimePart: pending.part.partId,
|
|
318
|
+
detail: `maxTotalDecodedTextBytes (${opts.maxTotalDecodedTextBytes})`
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
pending.bodyChunks.length = 0;
|
|
322
|
+
continue;
|
|
323
|
+
}
|
|
308
324
|
if (pending.collecting && pending.bodyBytes > 0) {
|
|
309
|
-
pending.part.decoded = await decodeTextPart(pending, opts.maxTextPartBytes, warnings);
|
|
325
|
+
pending.part.decoded = await decodeTextPart(pending, Math.min(opts.maxTextPartBytes, decodedBudget), warnings);
|
|
326
|
+
decodedBudget -= pending.part.decoded.text.length;
|
|
310
327
|
}
|
|
311
328
|
else if (pending.collecting) {
|
|
312
329
|
pending.part.decoded = {
|
package/dist/mime/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/mime/parse.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/mime/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which parts of a MIME tree hold the message body.
|
|
3
|
+
*
|
|
4
|
+
* This used to be four lines: walk the flat part list, keep the longest `text/plain` and the
|
|
5
|
+
* longest `text/html`. That is wrong in a way that loses content silently. In
|
|
6
|
+
* `multipart/mixed(P, P)` the two children are not two renderings of one thing, they are two
|
|
7
|
+
* pieces of the message, and picking the longer one deleted the shorter. A three line authored
|
|
8
|
+
* reply followed by a long gateway disclaimer came out as the disclaimer alone, with no warning.
|
|
9
|
+
*
|
|
10
|
+
* MIME structure carries the meaning that length does not:
|
|
11
|
+
*
|
|
12
|
+
* - `multipart/alternative` holds alternative renderings of the same content. At most one text and
|
|
13
|
+
* one HTML representation come out of one group.
|
|
14
|
+
* - `multipart/mixed` holds ordered sibling content, all of which may belong to the visible message.
|
|
15
|
+
* Each body-bearing child is an independent section.
|
|
16
|
+
* - `multipart/related` holds one root body plus inline resources. The root is named by the
|
|
17
|
+
* container's `start` parameter or is simply the first child.
|
|
18
|
+
* - `message/rfc822` is embedded content, not the container's own body.
|
|
19
|
+
* - An attachment disposition excludes a part. The *absence* of one does not make sibling parts
|
|
20
|
+
* alternatives, which is the assumption the old code made.
|
|
21
|
+
*
|
|
22
|
+
* Length survives only as a tie breaker inside one structurally equivalent group. Document order
|
|
23
|
+
* decides everything else.
|
|
24
|
+
*/
|
|
25
|
+
import { type MimePart, type ParsedMessage } from './model';
|
|
26
|
+
/** Where a section sits in the message. The first body-bearing section is the primary one. */
|
|
27
|
+
export type SectionRole = 'primary' | 'appended';
|
|
28
|
+
/** One structurally independent piece of the body, in whichever representations it has. */
|
|
29
|
+
export interface PlannedSection {
|
|
30
|
+
text: MimePart | null;
|
|
31
|
+
html: MimePart | null;
|
|
32
|
+
role: SectionRole;
|
|
33
|
+
}
|
|
34
|
+
/** Why an eligible looking text part is not in the plan. Machine readable, never free text. */
|
|
35
|
+
export type ExclusionReason =
|
|
36
|
+
/** Another member of the same `multipart/alternative` group represents this content. */
|
|
37
|
+
'alternative_not_preferred'
|
|
38
|
+
/** An inline resource of a `multipart/related`, not its root. */
|
|
39
|
+
| 'related_resource'
|
|
40
|
+
/** Inside a `message/rfc822`. Embedded messages are content for the caller to render, not body. */
|
|
41
|
+
| 'embedded_message'
|
|
42
|
+
/** Carried an attachment disposition. */
|
|
43
|
+
| 'attachment'
|
|
44
|
+
/** Nesting deeper than the walk is willing to follow. */
|
|
45
|
+
| 'max_depth_exceeded';
|
|
46
|
+
export interface ExcludedPart {
|
|
47
|
+
partId: string;
|
|
48
|
+
reason: ExclusionReason;
|
|
49
|
+
}
|
|
50
|
+
export interface BodyPlan {
|
|
51
|
+
/** Body-bearing sections in document order. Empty when the message has no body. */
|
|
52
|
+
sections: PlannedSection[];
|
|
53
|
+
excluded: ExcludedPart[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build the ordered body plan for a parsed message.
|
|
57
|
+
*
|
|
58
|
+
* The first body-bearing section is `primary`; everything after it is `appended`. Appended sections
|
|
59
|
+
* are ordinary content until a rule says otherwise: gateways append substantive text as often as
|
|
60
|
+
* they append disclaimers, so position is evidence, not a label.
|
|
61
|
+
*/
|
|
62
|
+
export declare function planBody(message: ParsedMessage): BodyPlan;
|
|
63
|
+
/**
|
|
64
|
+
* Exclusions a caller should be told about.
|
|
65
|
+
*
|
|
66
|
+
* An unused `multipart/alternative` member, an attachment and an embedded message are all excluded
|
|
67
|
+
* by a written rule and are not losses. A text part dropped because it was not the related root, or
|
|
68
|
+
* because the tree nested past the walk's limit, is content that exists and is not represented.
|
|
69
|
+
*/
|
|
70
|
+
export declare function reportableExclusions(plan: BodyPlan): ExcludedPart[];
|
|
71
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/mime/select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D,8FAA8F;AAC9F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjD,2FAA2F;AAC3F,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;CACrB;AAED,+FAA+F;AAC/F,MAAM,MAAM,eAAe;AACvB,wFAAwF;AACtF,2BAA2B;AAC7B,iEAAiE;GAC/D,kBAAkB;AACpB,mGAAmG;GACjG,kBAAkB;AACpB,yCAAyC;GACvC,YAAY;AACd,yDAAyD;GACvD,oBAAoB,CAAC;AAE3B,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACrB,mFAAmF;IACnF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AA8JD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAazD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,CAEnE"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Which parts of a MIME tree hold the message body.
|
|
4
|
+
*
|
|
5
|
+
* This used to be four lines: walk the flat part list, keep the longest `text/plain` and the
|
|
6
|
+
* longest `text/html`. That is wrong in a way that loses content silently. In
|
|
7
|
+
* `multipart/mixed(P, P)` the two children are not two renderings of one thing, they are two
|
|
8
|
+
* pieces of the message, and picking the longer one deleted the shorter. A three line authored
|
|
9
|
+
* reply followed by a long gateway disclaimer came out as the disclaimer alone, with no warning.
|
|
10
|
+
*
|
|
11
|
+
* MIME structure carries the meaning that length does not:
|
|
12
|
+
*
|
|
13
|
+
* - `multipart/alternative` holds alternative renderings of the same content. At most one text and
|
|
14
|
+
* one HTML representation come out of one group.
|
|
15
|
+
* - `multipart/mixed` holds ordered sibling content, all of which may belong to the visible message.
|
|
16
|
+
* Each body-bearing child is an independent section.
|
|
17
|
+
* - `multipart/related` holds one root body plus inline resources. The root is named by the
|
|
18
|
+
* container's `start` parameter or is simply the first child.
|
|
19
|
+
* - `message/rfc822` is embedded content, not the container's own body.
|
|
20
|
+
* - An attachment disposition excludes a part. The *absence* of one does not make sibling parts
|
|
21
|
+
* alternatives, which is the assumption the old code made.
|
|
22
|
+
*
|
|
23
|
+
* Length survives only as a tie breaker inside one structurally equivalent group. Document order
|
|
24
|
+
* decides everything else.
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.planBody = planBody;
|
|
28
|
+
exports.reportableExclusions = reportableExclusions;
|
|
29
|
+
/**
|
|
30
|
+
* Nesting depth the walk follows.
|
|
31
|
+
*
|
|
32
|
+
* Real mail nests a handful of levels. The parser already caps the part count; this caps the shape,
|
|
33
|
+
* so a tree crafted to be deep rather than wide cannot drive the recursion into the stack.
|
|
34
|
+
*/
|
|
35
|
+
const MAX_DEPTH = 32;
|
|
36
|
+
function isEligibleLeaf(part) {
|
|
37
|
+
return (part.contentType === 'text/plain' || part.contentType === 'text/html') && part.disposition !== 'attachment' && Boolean(part.decoded);
|
|
38
|
+
}
|
|
39
|
+
/** Every text leaf under a subtree, for recording what a whole branch excluded. */
|
|
40
|
+
function textLeavesUnder(message, part, into, reason, depth = 0) {
|
|
41
|
+
if (depth > MAX_DEPTH) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (isEligibleLeaf(part)) {
|
|
45
|
+
into.push({ partId: part.partId, reason });
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
for (const childId of part.childIds) {
|
|
49
|
+
const child = message.partsById.get(childId);
|
|
50
|
+
if (child) {
|
|
51
|
+
textLeavesUnder(message, child, into, reason, depth + 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Normalise a `Content-ID` or a `start` parameter to a bare token for comparison. */
|
|
56
|
+
function normaliseContentId(value) {
|
|
57
|
+
return (value ?? '').trim().replace(/^</, '').replace(/>$/, '').toLowerCase();
|
|
58
|
+
}
|
|
59
|
+
function contentIdOf(part) {
|
|
60
|
+
return normaliseContentId(part.headers.find(entry => entry.key === 'content-id')?.value);
|
|
61
|
+
}
|
|
62
|
+
/** The root body of a `multipart/related`: named by `start`, else the first child. */
|
|
63
|
+
function relatedRoot(message, part) {
|
|
64
|
+
const children = part.childIds.map(id => message.partsById.get(id)).filter(Boolean);
|
|
65
|
+
if (!children.length) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const start = normaliseContentId(part.contentTypeParams.start);
|
|
69
|
+
if (start) {
|
|
70
|
+
const named = children.find(child => contentIdOf(child) === start);
|
|
71
|
+
if (named) {
|
|
72
|
+
return named;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return children[0];
|
|
76
|
+
}
|
|
77
|
+
function sectionsOf(message, part, excluded, depth) {
|
|
78
|
+
if (depth > MAX_DEPTH) {
|
|
79
|
+
textLeavesUnder(message, part, excluded, 'max_depth_exceeded');
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
if (part.disposition === 'attachment') {
|
|
83
|
+
if (isEligibleLeaf(part) || part.contentType === 'text/plain' || part.contentType === 'text/html') {
|
|
84
|
+
excluded.push({ partId: part.partId, reason: 'attachment' });
|
|
85
|
+
}
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
// An embedded message is content to classify or to render as an attachment, never the outer
|
|
89
|
+
// message's own body. Descending into one lets a forwarded thread replace what the sender wrote.
|
|
90
|
+
if (part.rfc822 || part.embeddedRoot) {
|
|
91
|
+
textLeavesUnder(message, part, excluded, 'embedded_message');
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
const children = part.childIds.map(id => message.partsById.get(id)).filter(Boolean);
|
|
95
|
+
if (part.multipart === 'alternative') {
|
|
96
|
+
// The unit of choice is a *branch*, not a part.
|
|
97
|
+
//
|
|
98
|
+
// An alternative member can itself be multipart, and `alternative(P, mixed(H, app, H))` is
|
|
99
|
+
// real mail: the HTML rendering is spread over two parts. Choosing "the last html part"
|
|
100
|
+
// there keeps the second and deletes the first, which is the loss this module exists to
|
|
101
|
+
// stop. So each branch is evaluated whole, the last branch offering each representation
|
|
102
|
+
// wins, and the two winners are paired position by position.
|
|
103
|
+
const branches = children.map(child => ({ child, sections: sectionsOf(message, child, excluded, depth + 1) }));
|
|
104
|
+
const textBranch = [...branches].reverse().find(branch => branch.sections.some(section => section.text));
|
|
105
|
+
const htmlBranch = [...branches].reverse().find(branch => branch.sections.some(section => section.html));
|
|
106
|
+
for (const branch of branches) {
|
|
107
|
+
if (branch !== textBranch && branch !== htmlBranch) {
|
|
108
|
+
textLeavesUnder(message, branch.child, excluded, 'alternative_not_preferred');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (!textBranch || textBranch === htmlBranch) {
|
|
112
|
+
return htmlBranch?.sections ?? [];
|
|
113
|
+
}
|
|
114
|
+
if (!htmlBranch) {
|
|
115
|
+
return textBranch.sections;
|
|
116
|
+
}
|
|
117
|
+
// Two different branches, so one supplies the text rendering and the other the HTML one.
|
|
118
|
+
// Pairing by position keeps a multi part branch intact instead of flattening it.
|
|
119
|
+
const merged = [];
|
|
120
|
+
const length = Math.max(textBranch.sections.length, htmlBranch.sections.length);
|
|
121
|
+
for (let i = 0; i < length; i++) {
|
|
122
|
+
const fromText = textBranch.sections[i];
|
|
123
|
+
const fromHtml = htmlBranch.sections[i];
|
|
124
|
+
if (fromText?.html) {
|
|
125
|
+
excluded.push({ partId: fromText.html.partId, reason: 'alternative_not_preferred' });
|
|
126
|
+
}
|
|
127
|
+
if (fromHtml?.text) {
|
|
128
|
+
excluded.push({ partId: fromHtml.text.partId, reason: 'alternative_not_preferred' });
|
|
129
|
+
}
|
|
130
|
+
const text = fromText?.text ?? null;
|
|
131
|
+
const html = fromHtml?.html ?? null;
|
|
132
|
+
if (text || html) {
|
|
133
|
+
merged.push({ text, html, role: 'primary' });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return merged;
|
|
137
|
+
}
|
|
138
|
+
if (part.multipart === 'related') {
|
|
139
|
+
const root = relatedRoot(message, part);
|
|
140
|
+
const sections = [];
|
|
141
|
+
for (const child of children) {
|
|
142
|
+
if (child === root) {
|
|
143
|
+
sections.push(...sectionsOf(message, child, excluded, depth + 1));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
textLeavesUnder(message, child, excluded, 'related_resource');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return sections;
|
|
150
|
+
}
|
|
151
|
+
if (part.multipart) {
|
|
152
|
+
// mixed, signed, report, digest and anything unrecognised. Ordered sibling content: keep
|
|
153
|
+
// every body-bearing child, in document order. Treating an unknown subtype as mixed retains
|
|
154
|
+
// more rather than less, which is the safe direction when a tree is malformed or novel.
|
|
155
|
+
const sections = [];
|
|
156
|
+
for (const child of children) {
|
|
157
|
+
sections.push(...sectionsOf(message, child, excluded, depth + 1));
|
|
158
|
+
}
|
|
159
|
+
return sections;
|
|
160
|
+
}
|
|
161
|
+
if (part.contentType === 'text/plain' && part.decoded) {
|
|
162
|
+
return [{ text: part, html: null, role: 'primary' }];
|
|
163
|
+
}
|
|
164
|
+
if (part.contentType === 'text/html' && part.decoded) {
|
|
165
|
+
return [{ text: null, html: part, role: 'primary' }];
|
|
166
|
+
}
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Build the ordered body plan for a parsed message.
|
|
171
|
+
*
|
|
172
|
+
* The first body-bearing section is `primary`; everything after it is `appended`. Appended sections
|
|
173
|
+
* are ordinary content until a rule says otherwise: gateways append substantive text as often as
|
|
174
|
+
* they append disclaimers, so position is evidence, not a label.
|
|
175
|
+
*/
|
|
176
|
+
function planBody(message) {
|
|
177
|
+
const root = message.partsById.get(message.rootId) ?? message.parts[0];
|
|
178
|
+
if (!root) {
|
|
179
|
+
return { sections: [], excluded: [] };
|
|
180
|
+
}
|
|
181
|
+
const excluded = [];
|
|
182
|
+
const sections = sectionsOf(message, root, excluded, 0).filter(section => section.text || section.html);
|
|
183
|
+
return {
|
|
184
|
+
sections: sections.map((section, index) => ({ ...section, role: index === 0 ? 'primary' : 'appended' })),
|
|
185
|
+
excluded
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Exclusions a caller should be told about.
|
|
190
|
+
*
|
|
191
|
+
* An unused `multipart/alternative` member, an attachment and an embedded message are all excluded
|
|
192
|
+
* by a written rule and are not losses. A text part dropped because it was not the related root, or
|
|
193
|
+
* because the tree nested past the walk's limit, is content that exists and is not represented.
|
|
194
|
+
*/
|
|
195
|
+
function reportableExclusions(plan) {
|
|
196
|
+
return plan.excluded.filter(entry => entry.reason === 'related_resource' || entry.reason === 'max_depth_exceeded');
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/mime/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ export interface HtmlSegmentation {
|
|
|
22
22
|
/** True when parsing failed and a degraded single block was produced. */
|
|
23
23
|
degraded: boolean;
|
|
24
24
|
}
|
|
25
|
-
/** True when markup is
|
|
25
|
+
/** True when markup is shaped badly enough that parsing it is not worth the time. */
|
|
26
26
|
export declare function isPathologicalHtml(html: string): boolean;
|
|
27
27
|
export declare function segmentHtmlBlocks(html: string, mimePart: string): HtmlSegmentation;
|
|
28
28
|
//# sourceMappingURL=html-blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-blocks.d.ts","sourceRoot":"","sources":["../../src/segment/html-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,OAAO,EAAE,KAAK,KAAK,EAAiC,MAAM,SAAS,CAAC;AAmWpE,MAAM,WAAW,gBAAgB;IAC7B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"html-blocks.d.ts","sourceRoot":"","sources":["../../src/segment/html-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,OAAO,EAAE,KAAK,KAAK,EAAiC,MAAM,SAAS,CAAC;AAmWpE,MAAM,WAAW,gBAAgB;IAC7B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;CACrB;AA4ED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAgQlF"}
|