@xemahq/biomes-platform-imap 0.6.0 → 0.7.1
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/SECURITY-BOUNDS.md +85 -0
- package/dist/THIRD-PARTY-NOTICES.txt +657 -0
- package/dist/connector-adapters/imap-client.factory.d.ts +8 -2
- package/dist/connector-adapters/imap-fetch.d.ts +94 -13
- package/dist/connector-adapters/imap-message-parts.d.ts +8 -1
- package/dist/connector-adapters/index.js +76264 -127
- package/dist/connector-adapters/mail-dial-guard.d.ts +74 -0
- package/package.json +36 -10
- package/xema-biome.json +2 -2
- package/dist/connector-adapters/imap-client.factory.d.ts.map +0 -1
- package/dist/connector-adapters/imap-client.factory.js +0 -77
- package/dist/connector-adapters/imap-client.factory.js.map +0 -1
- package/dist/connector-adapters/imap-fetch.d.ts.map +0 -1
- package/dist/connector-adapters/imap-fetch.js +0 -554
- package/dist/connector-adapters/imap-fetch.js.map +0 -1
- package/dist/connector-adapters/imap-message-parts.d.ts.map +0 -1
- package/dist/connector-adapters/imap-message-parts.js +0 -103
- package/dist/connector-adapters/imap-message-parts.js.map +0 -1
- package/dist/connector-adapters/index.d.ts.map +0 -1
- package/dist/connector-adapters/index.js.map +0 -1
- package/dist/connector-adapters/mail-dial-guard.d.ts.map +0 -1
- package/dist/connector-adapters/mail-dial-guard.js +0 -220
- package/dist/connector-adapters/mail-dial-guard.js.map +0 -1
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_ATTACHMENT_SIZE_LIMIT = 5 * 1024 * 1024;
|
|
2
|
-
const MIN_ATTACHMENT_SIZE_LIMIT = 1024;
|
|
3
|
-
const MAX_ATTACHMENT_SIZE_LIMIT = 16 * 1024 * 1024;
|
|
4
|
-
export function clampAttachmentSizeLimit(value) {
|
|
5
|
-
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
6
|
-
return DEFAULT_ATTACHMENT_SIZE_LIMIT;
|
|
7
|
-
}
|
|
8
|
-
return Math.max(MIN_ATTACHMENT_SIZE_LIMIT, Math.min(MAX_ATTACHMENT_SIZE_LIMIT, Math.floor(value)));
|
|
9
|
-
}
|
|
10
|
-
export function flattenAttachmentParts(node, parentId = '') {
|
|
11
|
-
const out = [];
|
|
12
|
-
const partId = node.part ?? parentId;
|
|
13
|
-
const disposition = node.disposition?.toLowerCase();
|
|
14
|
-
const filename = node.dispositionParameters?.filename ?? node.parameters?.name;
|
|
15
|
-
if (disposition === 'attachment' &&
|
|
16
|
-
filename &&
|
|
17
|
-
typeof node.size === 'number' &&
|
|
18
|
-
partId) {
|
|
19
|
-
out.push({
|
|
20
|
-
filename,
|
|
21
|
-
contentType: `${node.type ?? 'application'}/${node.subtype ?? 'octet-stream'}`,
|
|
22
|
-
size: node.size,
|
|
23
|
-
partId,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
if (Array.isArray(node.childNodes)) {
|
|
27
|
-
for (const child of node.childNodes) {
|
|
28
|
-
out.push(...flattenAttachmentParts(child, partId));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return out;
|
|
32
|
-
}
|
|
33
|
-
function splitHeadersBody(raw) {
|
|
34
|
-
const match = raw.match(/\r?\n\r?\n/);
|
|
35
|
-
if (match?.index === undefined) {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
return {
|
|
39
|
-
headers: raw.slice(0, match.index),
|
|
40
|
-
body: raw.slice(match.index + match[0].length),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export function extractBodies(raw) {
|
|
44
|
-
const out = {};
|
|
45
|
-
const boundaryMatch = raw.match(/boundary="?([^"\r\n;]+)/i);
|
|
46
|
-
if (!boundaryMatch?.[1]) {
|
|
47
|
-
const split = splitHeadersBody(raw);
|
|
48
|
-
if (split) {
|
|
49
|
-
out.text = split.body;
|
|
50
|
-
}
|
|
51
|
-
return out;
|
|
52
|
-
}
|
|
53
|
-
const boundary = boundaryMatch[1];
|
|
54
|
-
const parts = raw.split(new RegExp(`--${boundary.replace(/[/\\^$*+?.()|[\]{}]/g, '\\$&')}(?:--)?`, 'g'));
|
|
55
|
-
const filenames = [];
|
|
56
|
-
for (const part of parts) {
|
|
57
|
-
const split = splitHeadersBody(part);
|
|
58
|
-
if (!split) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
const { headers, body } = split;
|
|
62
|
-
const contentTypeMatch = headers.match(/content-type:\s*([^\r\n;]+)/i);
|
|
63
|
-
const contentType = contentTypeMatch?.[1]?.toLowerCase().trim();
|
|
64
|
-
const dispositionMatch = headers.match(/content-disposition:\s*([^\r\n;]+)/i);
|
|
65
|
-
const filenameMatch = headers.match(/filename="?([^"\r\n;]+)/i);
|
|
66
|
-
if (dispositionMatch?.[1]?.toLowerCase().includes('attachment') && filenameMatch?.[1]) {
|
|
67
|
-
filenames.push(filenameMatch[1]);
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
if (contentType === 'text/plain' && !out.text) {
|
|
71
|
-
out.text = body.trim();
|
|
72
|
-
}
|
|
73
|
-
else if (contentType === 'text/html' && !out.html) {
|
|
74
|
-
out.html = body.trim();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (filenames.length > 0) {
|
|
78
|
-
out.attachmentFilenames = filenames;
|
|
79
|
-
}
|
|
80
|
-
return out;
|
|
81
|
-
}
|
|
82
|
-
export function extractReferences(raw) {
|
|
83
|
-
const blankIdx = raw.search(/\r?\n\r?\n/);
|
|
84
|
-
const head = blankIdx >= 0 ? raw.slice(0, blankIdx) : raw;
|
|
85
|
-
const match = head.match(/^references:\s*((?:.|\r?\n[ \t])+)/im);
|
|
86
|
-
if (!match?.[1]) {
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
89
|
-
const refs = match[1]
|
|
90
|
-
.replace(/\r?\n[ \t]+/g, ' ')
|
|
91
|
-
.split(/\s+/)
|
|
92
|
-
.filter((r) => r.length > 0);
|
|
93
|
-
return refs.length > 0 ? refs : undefined;
|
|
94
|
-
}
|
|
95
|
-
export function parseSource(raw) {
|
|
96
|
-
const body = extractBodies(raw);
|
|
97
|
-
const references = extractReferences(raw);
|
|
98
|
-
return {
|
|
99
|
-
...body,
|
|
100
|
-
...(references ? { references } : {}),
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=imap-message-parts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imap-message-parts.js","sourceRoot":"","sources":["../../src/connector-adapters/imap-message-parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAQL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AA2CrC,eAAO,MAAM,yBAAyB,sDAGrC,CAAC;AACF,eAAO,MAAM,gCAAgC,sDAG5C,CAAC;AACF,eAAO,MAAM,0BAA0B,sDAGtC,CAAC;AACF,eAAO,MAAM,wBAAwB,sDAGpC,CAAC;AAEF,eAAO,MAAM,eAAe,2DAAoC,CAAC;AACjE,eAAO,MAAM,oBAAoB,2DAAyC,CAAC;AAC3E,eAAO,MAAM,gBAAgB,2DAAqC,CAAC;AACnE,eAAO,MAAM,cAAc,2DAAmC,CAAC;AAiE/D,eAAO,MAAM,YAAY,EAAE,sBAazB,CAAC;AAEH,QAAA,MAAM,iBAAiB,EAAE,SAAS,sBAAsB,EAAmB,CAAC;AAC5E,eAAe,iBAAiB,CAAC;AAIjC,eAAO,MAAM,kBAAkB,EAAE,kBAWhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,SAAS,mBAAmB,EAqC9D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail-dial-guard.d.ts","sourceRoot":"","sources":["../../src/connector-adapters/mail-dial-guard.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAuB,KAAK,iBAAiB,EAAwB,MAAM,UAAU,CAAC;AAG7F,eAAO,MAAM,iBAAiB,EAAG,mBAA4B,CAAC;AAG9D,eAAO,MAAM,iBAAiB,EAAG,mBAA4B,CAAC;AAG9D,eAAO,MAAM,yBAAyB,sGAC+D,CAAC;AAEtG,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,sBAAqB;;CAMnC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,sBAAqB;;CAMnC;AAsBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBpD;AA8DD,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAiBnD;AA6DD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAG3C,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;AAclD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEhG;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAAC;AAcrF,MAAM,WAAW,cAAc;IAE7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAE9B,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAYD,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAOD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAM,GACxC,iBAAiB,CAUnB"}
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { lookup as dnsLookup } from 'node:dns';
|
|
2
|
-
import { BlockList, isIP } from 'node:net';
|
|
3
|
-
import { checkServerIdentity } from 'node:tls';
|
|
4
|
-
export const MAIL_DIAL_REFUSED = 'MAIL_DIAL_REFUSED';
|
|
5
|
-
export const MAIL_TLS_REQUIRED = 'MAIL_TLS_REQUIRED';
|
|
6
|
-
export const MAIL_DIAL_REFUSED_MESSAGE = 'mail server refused: the host must resolve only to public addresses and use a supported mail port';
|
|
7
|
-
export class MailDialRefusedError extends Error {
|
|
8
|
-
code = MAIL_DIAL_REFUSED;
|
|
9
|
-
constructor() {
|
|
10
|
-
super(MAIL_DIAL_REFUSED_MESSAGE);
|
|
11
|
-
this.name = 'MailDialRefusedError';
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export class MailTlsRequiredError extends Error {
|
|
15
|
-
code = MAIL_TLS_REQUIRED;
|
|
16
|
-
constructor() {
|
|
17
|
-
super('mail server did not complete TLS; no credentials were sent');
|
|
18
|
-
this.name = 'MailTlsRequiredError';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
const CERTIFICATE_ERROR_CODES = new Set([
|
|
22
|
-
'CERT_HAS_EXPIRED',
|
|
23
|
-
'CERT_NOT_YET_VALID',
|
|
24
|
-
'CERT_REVOKED',
|
|
25
|
-
'CERT_UNTRUSTED',
|
|
26
|
-
'DEPTH_ZERO_SELF_SIGNED_CERT',
|
|
27
|
-
'HOSTNAME_MISMATCH',
|
|
28
|
-
'SELF_SIGNED_CERT_IN_CHAIN',
|
|
29
|
-
'UNABLE_TO_GET_ISSUER_CERT',
|
|
30
|
-
'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',
|
|
31
|
-
'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
|
|
32
|
-
]);
|
|
33
|
-
export function isTlsFailure(cause) {
|
|
34
|
-
if (cause === null || typeof cause !== 'object') {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
const { tlsFailed, code, cert, reason } = cause;
|
|
38
|
-
if (tlsFailed === true || (typeof cert === 'object' && cert !== null && typeof reason === 'string')) {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
if (typeof code !== 'string') {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
return (code === 'ETLS' ||
|
|
45
|
-
code.startsWith('ERR_TLS_') ||
|
|
46
|
-
code.startsWith('ERR_SSL_') ||
|
|
47
|
-
CERTIFICATE_ERROR_CODES.has(code));
|
|
48
|
-
}
|
|
49
|
-
const BLOCKED_IPV4 = [
|
|
50
|
-
['0.0.0.0', 8],
|
|
51
|
-
['10.0.0.0', 8],
|
|
52
|
-
['100.64.0.0', 10],
|
|
53
|
-
['127.0.0.0', 8],
|
|
54
|
-
['169.254.0.0', 16],
|
|
55
|
-
['172.16.0.0', 12],
|
|
56
|
-
['192.0.0.0', 24],
|
|
57
|
-
['192.0.2.0', 24],
|
|
58
|
-
['192.88.99.0', 24],
|
|
59
|
-
['192.168.0.0', 16],
|
|
60
|
-
['198.18.0.0', 15],
|
|
61
|
-
['198.51.100.0', 24],
|
|
62
|
-
['203.0.113.0', 24],
|
|
63
|
-
['224.0.0.0', 4],
|
|
64
|
-
['240.0.0.0', 4],
|
|
65
|
-
];
|
|
66
|
-
const BLOCKED_IPV6 = [
|
|
67
|
-
['::', 128],
|
|
68
|
-
['::1', 128],
|
|
69
|
-
['::ffff:0:0:0', 96],
|
|
70
|
-
['64:ff9b::', 96],
|
|
71
|
-
['64:ff9b:1::', 48],
|
|
72
|
-
['100::', 64],
|
|
73
|
-
['2001::', 23],
|
|
74
|
-
['2001:db8::', 32],
|
|
75
|
-
['2002::', 16],
|
|
76
|
-
['3fff::', 20],
|
|
77
|
-
['5f00::', 16],
|
|
78
|
-
['fc00::', 7],
|
|
79
|
-
['fe80::', 10],
|
|
80
|
-
['fec0::', 10],
|
|
81
|
-
['ff00::', 8],
|
|
82
|
-
];
|
|
83
|
-
const BLOCKED = buildBlockList();
|
|
84
|
-
function buildBlockList() {
|
|
85
|
-
const list = new BlockList();
|
|
86
|
-
for (const [net, prefix] of BLOCKED_IPV4) {
|
|
87
|
-
list.addSubnet(net, prefix, 'ipv4');
|
|
88
|
-
}
|
|
89
|
-
for (const [net, prefix] of BLOCKED_IPV6) {
|
|
90
|
-
list.addSubnet(net, prefix, 'ipv6');
|
|
91
|
-
}
|
|
92
|
-
return list;
|
|
93
|
-
}
|
|
94
|
-
export function isPublicAddress(ip) {
|
|
95
|
-
const kind = isIP(ip);
|
|
96
|
-
if (kind === 4) {
|
|
97
|
-
return !BLOCKED.check(ip, 'ipv4');
|
|
98
|
-
}
|
|
99
|
-
if (kind !== 6) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
const bytes = ipv6Bytes(ip);
|
|
103
|
-
if (bytes === undefined) {
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
const embedded = embeddedIpv4(bytes);
|
|
107
|
-
if (embedded !== undefined) {
|
|
108
|
-
return !BLOCKED.check(embedded, 'ipv4');
|
|
109
|
-
}
|
|
110
|
-
return !BLOCKED.check(ip, 'ipv6');
|
|
111
|
-
}
|
|
112
|
-
function embeddedIpv4(bytes) {
|
|
113
|
-
for (let i = 0; i < 10; i += 1) {
|
|
114
|
-
if (bytes[i] !== 0) {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const marker = ((bytes[10] ?? 0) << 8) | (bytes[11] ?? 0);
|
|
119
|
-
if (marker !== 0xffff && marker !== 0) {
|
|
120
|
-
return undefined;
|
|
121
|
-
}
|
|
122
|
-
return `${bytes[12]}.${bytes[13]}.${bytes[14]}.${bytes[15]}`;
|
|
123
|
-
}
|
|
124
|
-
function ipv6Bytes(ip) {
|
|
125
|
-
if (ip.includes('%')) {
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
const words = (part) => {
|
|
129
|
-
if (part === '') {
|
|
130
|
-
return [];
|
|
131
|
-
}
|
|
132
|
-
const out = [];
|
|
133
|
-
for (const group of part.split(':')) {
|
|
134
|
-
if (group.includes('.')) {
|
|
135
|
-
const [a = 0, b = 0, c = 0, d = 0] = group.split('.').map(Number);
|
|
136
|
-
out.push((a << 8) | b, (c << 8) | d);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
out.push(Number.parseInt(group, 16));
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return out;
|
|
143
|
-
};
|
|
144
|
-
const [head = '', tail] = ip.split('::');
|
|
145
|
-
const left = words(head);
|
|
146
|
-
const right = tail === undefined ? [] : words(tail);
|
|
147
|
-
const fill = 8 - left.length - right.length;
|
|
148
|
-
const all = [...left, ...new Array(Math.max(fill, 0)).fill(0), ...right];
|
|
149
|
-
if (all.length !== 8) {
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
const bytes = new Uint8Array(16);
|
|
153
|
-
all.forEach((word, i) => {
|
|
154
|
-
bytes[i * 2] = (word >> 8) & 0xff;
|
|
155
|
-
bytes[i * 2 + 1] = word & 0xff;
|
|
156
|
-
});
|
|
157
|
-
return bytes;
|
|
158
|
-
}
|
|
159
|
-
const MAIL_PORTS = {
|
|
160
|
-
imap: new Map([
|
|
161
|
-
[993, 'implicit'],
|
|
162
|
-
[143, 'starttls'],
|
|
163
|
-
]),
|
|
164
|
-
smtp: new Map([
|
|
165
|
-
[465, 'implicit'],
|
|
166
|
-
[587, 'starttls'],
|
|
167
|
-
]),
|
|
168
|
-
};
|
|
169
|
-
export function mailTlsModeForPort(protocol, port) {
|
|
170
|
-
return MAIL_PORTS[protocol].get(port);
|
|
171
|
-
}
|
|
172
|
-
const systemResolver = (host) => new Promise((resolve, reject) => {
|
|
173
|
-
dnsLookup(host, { all: true, verbatim: true }, (error, addresses) => {
|
|
174
|
-
if (error) {
|
|
175
|
-
reject(error);
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
resolve(addresses);
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
function unbracket(host) {
|
|
182
|
-
return host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
183
|
-
}
|
|
184
|
-
export async function resolveMailDialTarget(protocol, host, port, options = {}) {
|
|
185
|
-
const tlsMode = mailTlsModeForPort(protocol, port);
|
|
186
|
-
const hostname = unbracket(host.trim()).toLowerCase();
|
|
187
|
-
if (tlsMode === undefined || hostname === '' || hostname.includes('%')) {
|
|
188
|
-
throw new MailDialRefusedError();
|
|
189
|
-
}
|
|
190
|
-
if (isIP(hostname) !== 0) {
|
|
191
|
-
if (!isPublicAddress(hostname)) {
|
|
192
|
-
throw new MailDialRefusedError();
|
|
193
|
-
}
|
|
194
|
-
return { hostname, address: hostname, port, tlsMode };
|
|
195
|
-
}
|
|
196
|
-
const resolve = options.resolve ?? systemResolver;
|
|
197
|
-
let records;
|
|
198
|
-
try {
|
|
199
|
-
records = await resolve(hostname);
|
|
200
|
-
}
|
|
201
|
-
catch {
|
|
202
|
-
throw new MailDialRefusedError();
|
|
203
|
-
}
|
|
204
|
-
const first = records[0];
|
|
205
|
-
if (first === undefined || !records.every((record) => isPublicAddress(record.address))) {
|
|
206
|
-
throw new MailDialRefusedError();
|
|
207
|
-
}
|
|
208
|
-
return { hostname, address: first.address, port, tlsMode };
|
|
209
|
-
}
|
|
210
|
-
export function mailTlsOptions(target, extra = {}) {
|
|
211
|
-
const hostIsIp = isIP(target.hostname) !== 0;
|
|
212
|
-
return {
|
|
213
|
-
...extra,
|
|
214
|
-
...(hostIsIp ? {} : { servername: target.hostname }),
|
|
215
|
-
rejectUnauthorized: true,
|
|
216
|
-
minVersion: 'TLSv1.2',
|
|
217
|
-
checkServerIdentity: (_dialled, cert) => checkServerIdentity(target.hostname, cert),
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=mail-dial-guard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mail-dial-guard.js","sourceRoot":"","sources":["../../src/connector-adapters/mail-dial-guard.ts"],"names":[],"mappings":"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"}
|