@konfeature/ap-email-guessr 0.1.1 → 0.1.2
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/package.json +25 -3
- package/src/lib/actions/find-email.js +31 -35
- package/src/lib/actions/find-email.js.map +1 -1
- package/src/lib/actions/generate-emails.js +9 -13
- package/src/lib/actions/generate-emails.js.map +1 -1
- package/src/lib/common/dns.js +23 -26
- package/src/lib/common/dns.js.map +1 -1
- package/src/lib/common/find-email.d.ts +4 -2
- package/src/lib/common/find-email.d.ts.map +1 -1
- package/src/lib/common/find-email.js +36 -36
- package/src/lib/common/find-email.js.map +1 -1
- package/src/lib/common/find-person.js +59 -55
- package/src/lib/common/find-person.js.map +1 -1
- package/src/lib/common/http.js +7 -5
- package/src/lib/common/http.js.map +1 -1
- package/src/lib/common/mx-fingerprint.js +3 -4
- package/src/lib/common/mx-fingerprint.js.map +1 -1
- package/src/lib/common/patterns.js +5 -6
- package/src/lib/common/patterns.js.map +1 -1
- package/src/lib/common/providers/o365.js +73 -81
- package/src/lib/common/providers/o365.js.map +1 -1
- package/src/lib/common/verifier.d.ts +2 -0
- package/src/lib/common/verifier.d.ts.map +1 -1
- package/src/lib/common/verifiers/no2bounce-verifier.d.ts +15 -6
- package/src/lib/common/verifiers/no2bounce-verifier.d.ts.map +1 -1
- package/src/lib/common/verifiers/no2bounce-verifier.js +232 -96
- package/src/lib/common/verifiers/no2bounce-verifier.js.map +1 -1
- package/src/lib/common/verifiers/o365-verifier.d.ts.map +1 -1
- package/src/lib/common/verifiers/o365-verifier.js +17 -18
- package/src/lib/common/verifiers/o365-verifier.js.map +1 -1
|
@@ -12,10 +12,9 @@ exports.normalizeNamePart = normalizeNamePart;
|
|
|
12
12
|
exports.normalizeDomain = normalizeDomain;
|
|
13
13
|
exports.generateEmailCandidates = generateEmailCandidates;
|
|
14
14
|
function stripDiacritics(input) {
|
|
15
|
-
var _a;
|
|
16
15
|
let result = "";
|
|
17
16
|
for (const char of input.normalize("NFKD")) {
|
|
18
|
-
const code =
|
|
17
|
+
const code = char.codePointAt(0) ?? 0;
|
|
19
18
|
// Drop combining diacritical marks (U+0300–U+036F).
|
|
20
19
|
if (code >= 0x0300 && code <= 0x036f) {
|
|
21
20
|
continue;
|
|
@@ -26,13 +25,13 @@ function stripDiacritics(input) {
|
|
|
26
25
|
}
|
|
27
26
|
/** Lowercase, strip accents and keep only [a-z0-9]. */
|
|
28
27
|
function normalizeNamePart(value) {
|
|
29
|
-
return stripDiacritics(value
|
|
28
|
+
return stripDiacritics(value ?? "")
|
|
30
29
|
.toLowerCase()
|
|
31
30
|
.replace(/[^a-z0-9]/g, "");
|
|
32
31
|
}
|
|
33
32
|
/** Strip protocol, path, leading "@" and lowercase a domain input. */
|
|
34
33
|
function normalizeDomain(value) {
|
|
35
|
-
return (value
|
|
34
|
+
return (value ?? "")
|
|
36
35
|
.trim()
|
|
37
36
|
.toLowerCase()
|
|
38
37
|
.replace(/^https?:\/\//, "")
|
|
@@ -75,7 +74,6 @@ const PATTERNS = [
|
|
|
75
74
|
* Returns an empty array when the domain or both name parts are missing.
|
|
76
75
|
*/
|
|
77
76
|
function generateEmailCandidates(params) {
|
|
78
|
-
var _a;
|
|
79
77
|
const first = normalizeNamePart(params.firstName);
|
|
80
78
|
const last = normalizeNamePart(params.lastName);
|
|
81
79
|
const domain = normalizeDomain(params.domain);
|
|
@@ -98,7 +96,8 @@ function generateEmailCandidates(params) {
|
|
|
98
96
|
seen.add(local);
|
|
99
97
|
locals.push(local);
|
|
100
98
|
}
|
|
101
|
-
const limit =
|
|
99
|
+
const limit = params.maxVariants ??
|
|
100
|
+
(params.patternSet === "common" ? COMMON_LIMIT : locals.length);
|
|
102
101
|
return locals
|
|
103
102
|
.slice(0, Math.max(0, limit))
|
|
104
103
|
.map((local) => `${local}@${domain}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/lib/common/patterns.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAgBH,8CAIC;AAGD,0CAQC;AA4DD,0DAkCC;AA3HD,SAAS,eAAe,CAAC,KAAa
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/lib/common/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,6 @@ exports.isMicrosoftConsumerDomain = isMicrosoftConsumerDomain;
|
|
|
25
25
|
exports.interpretIfExists = interpretIfExists;
|
|
26
26
|
exports.getUserRealm = getUserRealm;
|
|
27
27
|
exports.checkO365Account = checkO365Account;
|
|
28
|
-
const tslib_1 = require("tslib");
|
|
29
28
|
const http_1 = require("../http");
|
|
30
29
|
exports.O365_UNCHECKED = {
|
|
31
30
|
checked: false,
|
|
@@ -77,60 +76,55 @@ function interpretIfExists(code) {
|
|
|
77
76
|
return null;
|
|
78
77
|
}
|
|
79
78
|
/** Classify a domain's Microsoft namespace. Returns null on any failure. */
|
|
80
|
-
function getUserRealm(domain, timeoutMs) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (res.status !== 200) {
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
92
|
-
const data = JSON.parse(res.body);
|
|
93
|
-
const ns = data.NameSpaceType;
|
|
94
|
-
if (ns === "Managed" || ns === "Federated" || ns === "Unknown") {
|
|
95
|
-
return ns;
|
|
96
|
-
}
|
|
79
|
+
async function getUserRealm(domain, timeoutMs) {
|
|
80
|
+
const login = encodeURIComponent(`probe@${domain}`);
|
|
81
|
+
try {
|
|
82
|
+
const res = await (0, http_1.httpRequest)({
|
|
83
|
+
url: `https://login.microsoftonline.com/getuserrealm.srf?login=${login}&json=1`,
|
|
84
|
+
method: "GET",
|
|
85
|
+
timeoutMs,
|
|
86
|
+
});
|
|
87
|
+
if (res.status !== 200) {
|
|
97
88
|
return null;
|
|
98
89
|
}
|
|
99
|
-
|
|
100
|
-
|
|
90
|
+
const data = JSON.parse(res.body);
|
|
91
|
+
const ns = data.NameSpaceType;
|
|
92
|
+
if (ns === "Managed" || ns === "Federated" || ns === "Unknown") {
|
|
93
|
+
return ns;
|
|
101
94
|
}
|
|
102
|
-
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
103
100
|
}
|
|
104
101
|
/** Query GetCredentialType for a single address. Returns null code on failure. */
|
|
105
|
-
function probeCredentialType(email, timeoutMs) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
});
|
|
119
|
-
if (res.status !== 200) {
|
|
120
|
-
return { ifExistsResult: null, throttled: false };
|
|
121
|
-
}
|
|
122
|
-
const data = JSON.parse(res.body);
|
|
123
|
-
return {
|
|
124
|
-
ifExistsResult: typeof data.IfExistsResult === "number"
|
|
125
|
-
? data.IfExistsResult
|
|
126
|
-
: null,
|
|
127
|
-
throttled: ((_a = data.ThrottleStatus) !== null && _a !== void 0 ? _a : 0) !== 0,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
catch (_b) {
|
|
102
|
+
async function probeCredentialType(email, timeoutMs) {
|
|
103
|
+
try {
|
|
104
|
+
const res = await (0, http_1.httpRequest)({
|
|
105
|
+
url: "https://login.microsoftonline.com/common/GetCredentialType?mkt=en-US",
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: { "Content-Type": "application/json; charset=UTF-8" },
|
|
108
|
+
body: JSON.stringify({
|
|
109
|
+
Username: email,
|
|
110
|
+
isOtherIdpSupported: true,
|
|
111
|
+
}),
|
|
112
|
+
timeoutMs,
|
|
113
|
+
});
|
|
114
|
+
if (res.status !== 200) {
|
|
131
115
|
return { ifExistsResult: null, throttled: false };
|
|
132
116
|
}
|
|
133
|
-
|
|
117
|
+
const data = JSON.parse(res.body);
|
|
118
|
+
return {
|
|
119
|
+
ifExistsResult: typeof data.IfExistsResult === "number"
|
|
120
|
+
? data.IfExistsResult
|
|
121
|
+
: null,
|
|
122
|
+
throttled: (data.ThrottleStatus ?? 0) !== 0,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return { ifExistsResult: null, throttled: false };
|
|
127
|
+
}
|
|
134
128
|
}
|
|
135
129
|
/**
|
|
136
130
|
* Run the account-existence check for one email, given a pre-resolved namespace
|
|
@@ -138,42 +132,40 @@ function probeCredentialType(email, timeoutMs) {
|
|
|
138
132
|
* be Microsoft-backed (Managed namespace, Microsoft MX, or a consumer domain);
|
|
139
133
|
* otherwise GetCredentialType returns noise for unrelated domains.
|
|
140
134
|
*/
|
|
141
|
-
function checkO365Account(email, namespace, applicable, timeoutMs) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (probe.throttled) {
|
|
148
|
-
return {
|
|
149
|
-
checked: false,
|
|
150
|
-
exists: null,
|
|
151
|
-
namespace,
|
|
152
|
-
ifExistsResult: probe.ifExistsResult,
|
|
153
|
-
reason: "throttled",
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if (probe.ifExistsResult === null) {
|
|
157
|
-
return {
|
|
158
|
-
checked: false,
|
|
159
|
-
exists: null,
|
|
160
|
-
namespace,
|
|
161
|
-
ifExistsResult: null,
|
|
162
|
-
reason: "no_result",
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
const exists = interpretIfExists(probe.ifExistsResult);
|
|
135
|
+
async function checkO365Account(email, namespace, applicable, timeoutMs) {
|
|
136
|
+
if (!applicable) {
|
|
137
|
+
return { ...exports.O365_UNCHECKED, namespace, reason: "not_microsoft_domain" };
|
|
138
|
+
}
|
|
139
|
+
const probe = await probeCredentialType(email, timeoutMs);
|
|
140
|
+
if (probe.throttled) {
|
|
166
141
|
return {
|
|
167
|
-
checked:
|
|
168
|
-
exists,
|
|
142
|
+
checked: false,
|
|
143
|
+
exists: null,
|
|
169
144
|
namespace,
|
|
170
145
|
ifExistsResult: probe.ifExistsResult,
|
|
171
|
-
reason:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
146
|
+
reason: "throttled",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (probe.ifExistsResult === null) {
|
|
150
|
+
return {
|
|
151
|
+
checked: false,
|
|
152
|
+
exists: null,
|
|
153
|
+
namespace,
|
|
154
|
+
ifExistsResult: null,
|
|
155
|
+
reason: "no_result",
|
|
176
156
|
};
|
|
177
|
-
}
|
|
157
|
+
}
|
|
158
|
+
const exists = interpretIfExists(probe.ifExistsResult);
|
|
159
|
+
return {
|
|
160
|
+
checked: exists !== null,
|
|
161
|
+
exists,
|
|
162
|
+
namespace,
|
|
163
|
+
ifExistsResult: probe.ifExistsResult,
|
|
164
|
+
reason: exists === true
|
|
165
|
+
? "account_exists"
|
|
166
|
+
: exists === false
|
|
167
|
+
? "account_not_found"
|
|
168
|
+
: "inconclusive",
|
|
169
|
+
};
|
|
178
170
|
}
|
|
179
171
|
//# sourceMappingURL=o365.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o365.js","sourceRoot":"","sources":["../../../../../src/lib/common/providers/o365.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA+CH,8DAEC;AAUD,8CAQC;AAGD,oCAuBC;AAgDD,4CA6CC
|
|
1
|
+
{"version":3,"file":"o365.js","sourceRoot":"","sources":["../../../../../src/lib/common/providers/o365.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,5 +18,7 @@ export interface VerifyOutcome {
|
|
|
18
18
|
export interface Verifier {
|
|
19
19
|
readonly name: string;
|
|
20
20
|
verify(email: string): Promise<VerifyOutcome>;
|
|
21
|
+
/** Optional bulk path: returns one outcome per input email, in input order. */
|
|
22
|
+
verifyBatch?(emails: string[]): Promise<VerifyOutcome[]>;
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/verifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/verifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;IACvB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC5D"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Verifier adapter for the no2bounce API (wire format confirmed against the
|
|
3
|
-
*
|
|
2
|
+
* Verifier adapter for the no2bounce API (wire format confirmed against the live
|
|
3
|
+
* API; the published docs were out of date).
|
|
4
4
|
*
|
|
5
|
-
* Async flow: POST
|
|
6
|
-
* GET-poll `?trackingId
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Async flow: POST an `emailList` to get a `trackingId` (under `data`), then
|
|
6
|
+
* GET-poll `?trackingId=`. A single address completes with top-level aggregate
|
|
7
|
+
* counts that are that address's verdict. A multi-address batch completes with
|
|
8
|
+
* those same counts (now sums, which can't identify individual addresses) plus
|
|
9
|
+
* `result.downloadFile` — a signed CSV whose rows
|
|
10
|
+
* (`email,finalScore,finalScoreValue,catchall`) carry the per-address verdicts.
|
|
11
|
+
* Billing is 1 credit per email with no refund, charged on submit.
|
|
9
12
|
*/
|
|
10
13
|
import type { Verifier, VerifyVerdict } from "../verifier";
|
|
11
14
|
export interface No2BounceOptions {
|
|
@@ -28,7 +31,13 @@ export interface DecodedResult {
|
|
|
28
31
|
verdict: VerifyVerdict;
|
|
29
32
|
catchAll: boolean;
|
|
30
33
|
}
|
|
34
|
+
interface ReportRow {
|
|
35
|
+
value: string;
|
|
36
|
+
catchall: boolean;
|
|
37
|
+
}
|
|
31
38
|
export declare function decodeSingle(r: PollResult): DecodedResult;
|
|
39
|
+
export declare function decodeReportRow(row: ReportRow): DecodedResult;
|
|
40
|
+
export declare function parseReport(csv: string): Map<string, ReportRow>;
|
|
32
41
|
export declare function createNo2BounceVerifier(options: No2BounceOptions): Verifier;
|
|
33
42
|
export {};
|
|
34
43
|
//# sourceMappingURL=no2bounce-verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no2bounce-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/no2bounce-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"no2bounce-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/no2bounce-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAiB,aAAa,EAAE,MAAM,aAAa,CAAC;AAK1E,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,UAAU,UAAU;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAMD,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,SAAS;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACrB;AAKD,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,aAAa,CAiBzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,aAAa,CAY7D;AAgCD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAyB/D;AAKD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CA0K3E"}
|