@konfeature/ap-email-guessr 0.1.1 → 0.1.3
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.d.ts.map +1 -1
- package/src/lib/actions/find-email.js +38 -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 +18 -6
- package/src/lib/common/verifiers/no2bounce-verifier.d.ts.map +1 -1
- package/src/lib/common/verifiers/no2bounce-verifier.js +251 -97
- 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
|
@@ -1,135 +1,289 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Verifier adapter for the no2bounce API (wire format confirmed against the
|
|
4
|
-
*
|
|
3
|
+
* Verifier adapter for the no2bounce API (wire format confirmed against the live
|
|
4
|
+
* API; the published docs were out of date).
|
|
5
5
|
*
|
|
6
|
-
* Async flow: POST
|
|
7
|
-
* GET-poll `?trackingId
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Async flow: POST an `emailList` to get a `trackingId` (under `data`), then
|
|
7
|
+
* GET-poll `?trackingId=`. A single address completes with top-level aggregate
|
|
8
|
+
* counts that are that address's verdict. A multi-address batch completes with
|
|
9
|
+
* those same counts (now sums, which can't identify individual addresses) plus
|
|
10
|
+
* `result.downloadFile` — a signed CSV whose rows
|
|
11
|
+
* (`email,finalScore,finalScoreValue,catchall`) carry the per-address verdicts.
|
|
12
|
+
* Billing is 1 credit per email with no refund, charged on submit.
|
|
10
13
|
*/
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.No2BounceAuthError = void 0;
|
|
12
16
|
exports.decodeSingle = decodeSingle;
|
|
17
|
+
exports.decodeReportRow = decodeReportRow;
|
|
18
|
+
exports.parseReport = parseReport;
|
|
19
|
+
exports.isInvalidToken = isInvalidToken;
|
|
13
20
|
exports.createNo2BounceVerifier = createNo2BounceVerifier;
|
|
14
|
-
const tslib_1 = require("tslib");
|
|
15
21
|
const http_1 = require("../http");
|
|
16
22
|
const ENDPOINT = "https://connect.no2bounce.com/v2/n2b_validate_bulk";
|
|
23
|
+
const BATCH_WAIT_PER_EMAIL_MS = 8000;
|
|
17
24
|
// no2bounce risk-scores accept-all domains per address: "Deliverable/AcceptAll"
|
|
18
25
|
// is a predicted hit, "UnDeliverable/AcceptAll" a predicted miss, and
|
|
19
26
|
// "Risky/AcceptAll" genuinely uncertain (so we stop on it).
|
|
20
27
|
function decodeSingle(r) {
|
|
21
|
-
|
|
22
|
-
if (((_a = r.Deliverable) !== null && _a !== void 0 ? _a : 0) >= 1) {
|
|
28
|
+
if ((r.Deliverable ?? 0) >= 1) {
|
|
23
29
|
return { verdict: "valid", catchAll: false };
|
|
24
30
|
}
|
|
25
|
-
if ((
|
|
31
|
+
if ((r["Deliverable/AcceptAll"] ?? 0) >= 1) {
|
|
26
32
|
return { verdict: "valid", catchAll: true };
|
|
27
33
|
}
|
|
28
|
-
if ((
|
|
34
|
+
if ((r["Risky/AcceptAll"] ?? 0) >= 1) {
|
|
29
35
|
return { verdict: "catch_all", catchAll: true };
|
|
30
36
|
}
|
|
31
|
-
if ((
|
|
37
|
+
if ((r.Undeliverable ?? 0) >= 1) {
|
|
32
38
|
return { verdict: "invalid", catchAll: false };
|
|
33
39
|
}
|
|
34
|
-
if ((
|
|
40
|
+
if ((r["UnDeliverable/AcceptAll"] ?? 0) >= 1) {
|
|
35
41
|
return { verdict: "invalid", catchAll: true };
|
|
36
42
|
}
|
|
37
43
|
return { verdict: "unknown", catchAll: false };
|
|
38
44
|
}
|
|
39
|
-
function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.
|
|
43
|
-
|
|
45
|
+
function decodeReportRow(row) {
|
|
46
|
+
const v = row.value.toLowerCase().replace(/[^a-z]/g, "");
|
|
47
|
+
if (v.startsWith("undeliver")) {
|
|
48
|
+
return { verdict: "invalid", catchAll: row.catchall };
|
|
49
|
+
}
|
|
50
|
+
if (v.startsWith("deliver")) {
|
|
51
|
+
return { verdict: "valid", catchAll: row.catchall };
|
|
52
|
+
}
|
|
53
|
+
if (v.includes("risk") || v.includes("catch") || v.includes("accept")) {
|
|
54
|
+
return { verdict: "catch_all", catchAll: true };
|
|
55
|
+
}
|
|
56
|
+
return { verdict: "unknown", catchAll: row.catchall };
|
|
57
|
+
}
|
|
58
|
+
function splitCsvLine(line) {
|
|
59
|
+
const out = [];
|
|
60
|
+
let cur = "";
|
|
61
|
+
let quoted = false;
|
|
62
|
+
for (let i = 0; i < line.length; i++) {
|
|
63
|
+
const c = line[i];
|
|
64
|
+
if (quoted) {
|
|
65
|
+
if (c === '"') {
|
|
66
|
+
if (line[i + 1] === '"') {
|
|
67
|
+
cur += '"';
|
|
68
|
+
i++;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
quoted = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
cur += c;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (c === '"') {
|
|
79
|
+
quoted = true;
|
|
80
|
+
}
|
|
81
|
+
else if (c === ",") {
|
|
82
|
+
out.push(cur);
|
|
83
|
+
cur = "";
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
cur += c;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
out.push(cur);
|
|
90
|
+
return out.map((s) => s.trim());
|
|
91
|
+
}
|
|
92
|
+
function parseReport(csv) {
|
|
93
|
+
const map = new Map();
|
|
94
|
+
const lines = csv.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
95
|
+
if (lines.length < 2) {
|
|
96
|
+
return map;
|
|
97
|
+
}
|
|
98
|
+
const header = splitCsvLine(lines[0]).map((h) => h.toLowerCase());
|
|
99
|
+
const iEmail = header.indexOf("email");
|
|
100
|
+
const iValue = header.indexOf("finalscorevalue");
|
|
101
|
+
const iCatch = header.indexOf("catchall");
|
|
102
|
+
if (iEmail < 0 || iValue < 0) {
|
|
103
|
+
return map;
|
|
104
|
+
}
|
|
105
|
+
for (let i = 1; i < lines.length; i++) {
|
|
106
|
+
const cells = splitCsvLine(lines[i]);
|
|
107
|
+
const email = (cells[iEmail] ?? "").toLowerCase();
|
|
108
|
+
if (email.length === 0) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
map.set(email, {
|
|
112
|
+
value: cells[iValue] ?? "",
|
|
113
|
+
catchall: iCatch >= 0 && (cells[iCatch] ?? "").toLowerCase() === "true",
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return map;
|
|
44
117
|
}
|
|
45
118
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
119
|
+
class No2BounceAuthError extends Error {
|
|
120
|
+
}
|
|
121
|
+
exports.No2BounceAuthError = No2BounceAuthError;
|
|
122
|
+
function isInvalidToken(body) {
|
|
123
|
+
return /api\s*token|api\s*key|invalid or expired|unauthor/i.test(body);
|
|
124
|
+
}
|
|
46
125
|
function createNo2BounceVerifier(options) {
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
headers: Object.assign(Object.assign({}, authHeader), { "Content-Type": "application/json" }),
|
|
58
|
-
body: JSON.stringify({ emailList: [email] }),
|
|
59
|
-
timeoutMs: options.timeoutMs,
|
|
60
|
-
});
|
|
61
|
-
if (res.status !== 200) {
|
|
62
|
-
throw new Error(`submit_${res.status}`);
|
|
63
|
-
}
|
|
64
|
-
const json = JSON.parse(res.body);
|
|
65
|
-
const id = (_b = (_a = json.data) === null || _a === void 0 ? void 0 : _a.trackingId) !== null && _b !== void 0 ? _b : (_c = json.data) === null || _c === void 0 ? void 0 : _c.taskId;
|
|
66
|
-
return id === undefined ? undefined : String(id);
|
|
126
|
+
const pollIntervalMs = options.pollIntervalMs ?? 2000;
|
|
127
|
+
const maxWaitMs = options.maxWaitMs ?? 30000;
|
|
128
|
+
const authHeader = { apitoken: options.apitoken.trim() };
|
|
129
|
+
async function submitBatch(emails) {
|
|
130
|
+
const res = await (0, http_1.httpRequest)({
|
|
131
|
+
url: ENDPOINT,
|
|
132
|
+
method: "POST",
|
|
133
|
+
headers: { ...authHeader, "Content-Type": "application/json" },
|
|
134
|
+
body: JSON.stringify({ emailList: emails }),
|
|
135
|
+
timeoutMs: options.timeoutMs,
|
|
67
136
|
});
|
|
137
|
+
if (res.status !== 200) {
|
|
138
|
+
const detail = `submit_${res.status}: ${res.body.slice(0, 200)}`;
|
|
139
|
+
if (res.status === 401 || res.status === 403 || isInvalidToken(res.body)) {
|
|
140
|
+
throw new No2BounceAuthError(detail);
|
|
141
|
+
}
|
|
142
|
+
throw new Error(detail);
|
|
143
|
+
}
|
|
144
|
+
const json = JSON.parse(res.body);
|
|
145
|
+
const id = json.data?.trackingId ?? json.data?.taskId;
|
|
146
|
+
return id === undefined ? undefined : String(id);
|
|
68
147
|
}
|
|
69
|
-
function poll(trackingId) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
const parsed = JSON.parse(res.body);
|
|
86
|
-
if (isComplete(parsed)) {
|
|
87
|
-
return parsed;
|
|
88
|
-
}
|
|
148
|
+
async function poll(trackingId, waitMs, done) {
|
|
149
|
+
const url = `${ENDPOINT}?trackingId=${encodeURIComponent(trackingId)}`;
|
|
150
|
+
const deadline = Date.now() + waitMs;
|
|
151
|
+
while (Date.now() < deadline) {
|
|
152
|
+
await sleep(pollIntervalMs);
|
|
153
|
+
try {
|
|
154
|
+
const res = await (0, http_1.httpRequest)({
|
|
155
|
+
url,
|
|
156
|
+
method: "GET",
|
|
157
|
+
headers: authHeader,
|
|
158
|
+
timeoutMs: options.timeoutMs,
|
|
159
|
+
});
|
|
160
|
+
if (res.status !== 200) {
|
|
161
|
+
continue;
|
|
89
162
|
}
|
|
90
|
-
|
|
91
|
-
|
|
163
|
+
const parsed = JSON.parse(res.body);
|
|
164
|
+
if (done(parsed)) {
|
|
165
|
+
return parsed;
|
|
92
166
|
}
|
|
93
167
|
}
|
|
168
|
+
catch {
|
|
169
|
+
// Transient poll error; keep trying until the deadline.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
function aggregatesDone(r) {
|
|
175
|
+
return (String(r.overallStatus ?? "")
|
|
176
|
+
.toLowerCase()
|
|
177
|
+
.startsWith("complet") || (r.percent ?? 0) >= 100);
|
|
178
|
+
}
|
|
179
|
+
function reportDone(r) {
|
|
180
|
+
const file = r.result?.downloadFile;
|
|
181
|
+
return typeof file === "string" && file.length > 0;
|
|
182
|
+
}
|
|
183
|
+
async function fetchReport(url) {
|
|
184
|
+
try {
|
|
185
|
+
const res = await (0, http_1.httpRequest)({
|
|
186
|
+
url,
|
|
187
|
+
method: "GET",
|
|
188
|
+
timeoutMs: options.timeoutMs,
|
|
189
|
+
});
|
|
190
|
+
if (res.status !== 200) {
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
return parseReport(res.body);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
94
196
|
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async function verifySingle(email) {
|
|
200
|
+
let trackingId;
|
|
201
|
+
try {
|
|
202
|
+
trackingId = await submitBatch([email]);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
if (error instanceof No2BounceAuthError) {
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
email,
|
|
210
|
+
verdict: "unknown",
|
|
211
|
+
creditsUsed: 0,
|
|
212
|
+
reason: error instanceof Error ? error.message : "submit_failed",
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
if (!trackingId) {
|
|
216
|
+
return { email, verdict: "unknown", creditsUsed: 0, reason: "no_tracking_id" };
|
|
217
|
+
}
|
|
218
|
+
const parsed = await poll(trackingId, maxWaitMs, aggregatesDone);
|
|
219
|
+
if (!parsed) {
|
|
220
|
+
return { email, verdict: "unknown", creditsUsed: 1, reason: "poll_timeout" };
|
|
221
|
+
}
|
|
222
|
+
const { verdict, catchAll } = decodeSingle(parsed);
|
|
223
|
+
return {
|
|
224
|
+
email,
|
|
225
|
+
verdict,
|
|
226
|
+
catchAll,
|
|
227
|
+
creditsUsed: parsed.creditDebited ?? 1,
|
|
228
|
+
reason: `n2b_${verdict}${catchAll ? "_acceptall" : ""}`,
|
|
229
|
+
raw: parsed,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
async function verifyMany(emails) {
|
|
233
|
+
const unknownAll = (creditsUsed, reason) => emails.map((email) => ({
|
|
234
|
+
email,
|
|
235
|
+
verdict: "unknown",
|
|
236
|
+
creditsUsed,
|
|
237
|
+
reason,
|
|
238
|
+
}));
|
|
239
|
+
let trackingId;
|
|
240
|
+
try {
|
|
241
|
+
trackingId = await submitBatch(emails);
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
if (error instanceof No2BounceAuthError) {
|
|
245
|
+
throw error;
|
|
246
|
+
}
|
|
247
|
+
return unknownAll(0, error instanceof Error ? error.message : "submit_failed");
|
|
248
|
+
}
|
|
249
|
+
if (!trackingId) {
|
|
250
|
+
return unknownAll(0, "no_tracking_id");
|
|
251
|
+
}
|
|
252
|
+
const waitMs = Math.max(maxWaitMs, emails.length * BATCH_WAIT_PER_EMAIL_MS);
|
|
253
|
+
const parsed = await poll(trackingId, waitMs, reportDone);
|
|
254
|
+
if (!parsed) {
|
|
255
|
+
return unknownAll(1, "poll_timeout");
|
|
256
|
+
}
|
|
257
|
+
const url = parsed.result?.downloadFile;
|
|
258
|
+
const report = typeof url === "string" ? await fetchReport(url) : null;
|
|
259
|
+
if (!report) {
|
|
260
|
+
return unknownAll(1, "n2b_report_unavailable");
|
|
261
|
+
}
|
|
262
|
+
return emails.map((email) => {
|
|
263
|
+
const row = report.get(email.toLowerCase());
|
|
264
|
+
if (!row) {
|
|
265
|
+
return { email, verdict: "unknown", creditsUsed: 1, reason: "n2b_no_report_row" };
|
|
266
|
+
}
|
|
267
|
+
const { verdict, catchAll } = decodeReportRow(row);
|
|
268
|
+
return {
|
|
269
|
+
email,
|
|
270
|
+
verdict,
|
|
271
|
+
catchAll,
|
|
272
|
+
creditsUsed: 1,
|
|
273
|
+
reason: `n2b_${verdict}${catchAll ? "_acceptall" : ""}`,
|
|
274
|
+
raw: row,
|
|
275
|
+
};
|
|
95
276
|
});
|
|
96
277
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
// Submission rejected → no credit charged.
|
|
108
|
-
return {
|
|
109
|
-
email,
|
|
110
|
-
verdict: "unknown",
|
|
111
|
-
creditsUsed: 0,
|
|
112
|
-
reason: error instanceof Error ? error.message : "submit_failed",
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
if (!trackingId) {
|
|
116
|
-
return { email, verdict: "unknown", creditsUsed: 0, reason: "no_tracking_id" };
|
|
117
|
-
}
|
|
118
|
-
const parsed = yield poll(trackingId);
|
|
119
|
-
if (!parsed) {
|
|
120
|
-
return { email, verdict: "unknown", creditsUsed: 1, reason: "poll_timeout" };
|
|
121
|
-
}
|
|
122
|
-
const { verdict, catchAll } = decodeSingle(parsed);
|
|
123
|
-
return {
|
|
124
|
-
email,
|
|
125
|
-
verdict,
|
|
126
|
-
catchAll,
|
|
127
|
-
creditsUsed: (_a = parsed.creditDebited) !== null && _a !== void 0 ? _a : 1,
|
|
128
|
-
reason: `n2b_${verdict}${catchAll ? "_acceptall" : ""}`,
|
|
129
|
-
raw: parsed,
|
|
130
|
-
};
|
|
131
|
-
});
|
|
132
|
-
},
|
|
133
|
-
};
|
|
278
|
+
async function verifyBatch(emails) {
|
|
279
|
+
if (emails.length === 0) {
|
|
280
|
+
return [];
|
|
281
|
+
}
|
|
282
|
+
if (emails.length === 1) {
|
|
283
|
+
return [await verifySingle(emails[0])];
|
|
284
|
+
}
|
|
285
|
+
return verifyMany(emails);
|
|
286
|
+
}
|
|
287
|
+
return { name: "no2bounce", verify: verifySingle, verifyBatch };
|
|
134
288
|
}
|
|
135
289
|
//# sourceMappingURL=no2bounce-verifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no2bounce-verifier.js","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/no2bounce-verifier.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"no2bounce-verifier.js","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/no2bounce-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o365-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/o365-verifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAE3D,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM,GAClB,QAAQ,
|
|
1
|
+
{"version":3,"file":"o365-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/o365-verifier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAE3D,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM,GAClB,QAAQ,CA4BV"}
|
|
@@ -6,28 +6,27 @@
|
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.createO365Verifier = createO365Verifier;
|
|
9
|
-
const tslib_1 = require("tslib");
|
|
10
9
|
const o365_1 = require("../providers/o365");
|
|
11
10
|
function createO365Verifier(namespace, applicable, timeoutMs) {
|
|
11
|
+
async function verify(email) {
|
|
12
|
+
const result = await (0, o365_1.checkO365Account)(email, namespace, applicable, timeoutMs);
|
|
13
|
+
const verdict = result.exists === true
|
|
14
|
+
? "valid"
|
|
15
|
+
: result.exists === false
|
|
16
|
+
? "invalid"
|
|
17
|
+
: "unknown";
|
|
18
|
+
return {
|
|
19
|
+
email,
|
|
20
|
+
verdict,
|
|
21
|
+
creditsUsed: 0,
|
|
22
|
+
reason: result.reason,
|
|
23
|
+
raw: result,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
12
26
|
return {
|
|
13
27
|
name: "o365",
|
|
14
|
-
verify
|
|
15
|
-
|
|
16
|
-
const result = yield (0, o365_1.checkO365Account)(email, namespace, applicable, timeoutMs);
|
|
17
|
-
const verdict = result.exists === true
|
|
18
|
-
? "valid"
|
|
19
|
-
: result.exists === false
|
|
20
|
-
? "invalid"
|
|
21
|
-
: "unknown";
|
|
22
|
-
return {
|
|
23
|
-
email,
|
|
24
|
-
verdict,
|
|
25
|
-
creditsUsed: 0,
|
|
26
|
-
reason: result.reason,
|
|
27
|
-
raw: result,
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
},
|
|
28
|
+
verify,
|
|
29
|
+
verifyBatch: (emails) => Promise.all(emails.map(verify)),
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
32
|
//# sourceMappingURL=o365-verifier.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"o365-verifier.js","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/o365-verifier.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,
|
|
1
|
+
{"version":3,"file":"o365-verifier.js","sourceRoot":"","sources":["../../../../../src/lib/common/verifiers/o365-verifier.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAKH,gDAgCC;AAnCD,4CAAyE;AAGzE,SAAgB,kBAAkB,CAC9B,SAAwB,EACxB,UAAmB,EACnB,SAAiB;IAEjB,KAAK,UAAU,MAAM,CAAC,KAAa;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAgB,EACjC,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,CACZ,CAAC;QACF,MAAM,OAAO,GACT,MAAM,CAAC,MAAM,KAAK,IAAI;YAClB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK;gBACvB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS,CAAC;QACtB,OAAO;YACH,KAAK;YACL,OAAO;YACP,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,EAAE,MAAM;SACd,CAAC;IACN,CAAC;IAED,OAAO;QACH,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,WAAW,EAAE,CAAC,MAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACrE,CAAC;AACN,CAAC"}
|