@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.
@@ -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":"AAgBA,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7D,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAMnD,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CACb,yBAAyB,EACzB,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AA4DD,MAAM,UAAU,sBAAsB,CACpC,IAAkB,EAClB,QAAQ,GAAG,EAAE;IAEb,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IAC/E,IACE,WAAW,KAAK,YAAY;QAC5B,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,MAAM,EACN,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ;YACR,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI,cAAc,EAAE;YAC9E,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,KAAK,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;QAClC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;KAC/C,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,GAAG,GAAqE,EAAE,CAAC;IACjF,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC5D,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAExB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CACrB,IAAI,MAAM,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAChF,CAAC;IACF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAChC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChE,IAAI,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,SAAS;QACX,CAAC;QACD,IAAI,WAAW,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,mBAAmB,GAAG,SAAS,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;SAClB,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAGD,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -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":"AAwBA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAgD,MAAM,UAAU,CAAC;AAG7F,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAA4B,CAAC;AAG9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAA4B,CAAC;AAG9D,MAAM,CAAC,MAAM,yBAAyB,GACpC,mGAAmG,CAAC;AAEtG,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,iBAAiB,CAAC;IAElC;QACE,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,GAAG,iBAAiB,CAAC;IAElC;QACE,KAAK,CAAC,4DAA4D,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAGD,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,kBAAkB;IAClB,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,6BAA6B;IAC7B,mBAAmB;IACnB,2BAA2B;IAC3B,2BAA2B;IAC3B,mCAAmC;IACnC,iCAAiC;CAClC,CAAC,CAAC;AAQH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAKzC,CAAC;IAIF,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACpG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,IAAI,KAAK,MAAM;QACf,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAC3B,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAClC,CAAC;AACJ,CAAC;AASD,MAAM,YAAY,GAA2C;IAC3D,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,YAAY,EAAE,EAAE,CAAC;IAClB,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,aAAa,EAAE,EAAE,CAAC;IACnB,CAAC,YAAY,EAAE,EAAE,CAAC;IAClB,CAAC,WAAW,EAAE,EAAE,CAAC;IACjB,CAAC,WAAW,EAAE,EAAE,CAAC;IACjB,CAAC,aAAa,EAAE,EAAE,CAAC;IACnB,CAAC,aAAa,EAAE,EAAE,CAAC;IACnB,CAAC,YAAY,EAAE,EAAE,CAAC;IAClB,CAAC,cAAc,EAAE,EAAE,CAAC;IACpB,CAAC,aAAa,EAAE,EAAE,CAAC;IACnB,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,WAAW,EAAE,CAAC,CAAC;CACjB,CAAC;AAEF,MAAM,YAAY,GAA2C;IAC3D,CAAC,IAAI,EAAE,GAAG,CAAC;IACX,CAAC,KAAK,EAAE,GAAG,CAAC;IACZ,CAAC,cAAc,EAAE,EAAE,CAAC;IACpB,CAAC,WAAW,EAAE,EAAE,CAAC;IACjB,CAAC,aAAa,EAAE,EAAE,CAAC;IACnB,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,YAAY,EAAE,EAAE,CAAC;IAClB,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,CAAC,CAAC;CACd,CAAC;AAEF,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;AAEjC,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAMD,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAMD,SAAS,YAAY,CAAC,KAAiB;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC;AAOD,SAAS,SAAS,CAAC,EAAU;IAC3B,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAY,EAAE;QACvC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACjF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACtB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAClC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AASD,MAAM,UAAU,GAAqE;IACnF,IAAI,EAAE,IAAI,GAAG,CAAsB;QACjC,CAAC,GAAG,EAAE,UAAU,CAAC;QACjB,CAAC,GAAG,EAAE,UAAU,CAAC;KAClB,CAAC;IACF,IAAI,EAAE,IAAI,GAAG,CAAsB;QACjC,CAAC,GAAG,EAAE,UAAU,CAAC;QACjB,CAAC,GAAG,EAAE,UAAU,CAAC;KAClB,CAAC;CACH,CAAC;AAGF,MAAM,UAAU,kBAAkB,CAAC,QAAsB,EAAE,IAAY;IACrE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAYD,MAAM,cAAc,GAAqB,CAAC,IAAI,EAAE,EAAE,CAChD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAClE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAiBL,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAsB,EACtB,IAAY,EACZ,IAAY,EACZ,UAA2B,EAAE;IAE7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,oBAAoB,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC;IAClD,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7D,CAAC;AAOD,MAAM,UAAU,cAAc,CAC5B,MAAsB,EACtB,QAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO;QACL,GAAG,KAAK;QACR,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpD,kBAAkB,EAAE,IAAI;QACxB,UAAU,EAAE,SAAS;QACrB,mBAAmB,EAAE,CAAC,QAAgB,EAAE,IAAqB,EAAE,EAAE,CAC/D,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC"}