@emailcheck/email-validator-js 2.14.2 → 3.0.1-beta.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/README.md +279 -18
- package/dist/adapters/lru-adapter.d.ts +2 -2
- package/dist/adapters/redis-adapter.d.ts +4 -4
- package/dist/batch-verifier.d.ts +5 -0
- package/dist/cache-interface.d.ts +23 -15
- package/dist/cache.d.ts +7 -5
- package/dist/check-if-email-exists.d.ts +205 -0
- package/dist/domain-suggester.d.ts +6 -6
- package/dist/{validator.d.ts → email-validator.d.ts} +2 -2
- package/dist/email-verifier-types.d.ts +225 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.esm.js +779 -266
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +783 -268
- package/dist/index.js.map +1 -1
- package/dist/mx-resolver.d.ts +2 -0
- package/dist/name-detector.d.ts +6 -6
- package/dist/serverless/adapters/aws-lambda.cjs.js.map +1 -1
- package/dist/serverless/adapters/aws-lambda.esm.js.map +1 -1
- package/dist/serverless/adapters/cloudflare.cjs.js.map +1 -1
- package/dist/serverless/adapters/cloudflare.esm.js.map +1 -1
- package/dist/serverless/adapters/vercel.cjs.js.map +1 -1
- package/dist/serverless/adapters/vercel.esm.js.map +1 -1
- package/dist/serverless/index.cjs.js.map +1 -1
- package/dist/serverless/index.d.ts +1 -1
- package/dist/serverless/index.esm.js.map +1 -1
- package/dist/serverless/{core.cjs.js → verifier.cjs.js} +1 -1
- package/dist/serverless/verifier.cjs.js.map +1 -0
- package/dist/serverless/{core.esm.js → verifier.esm.js} +1 -1
- package/dist/serverless/verifier.esm.js.map +1 -0
- package/dist/smtp-verifier.d.ts +7 -0
- package/dist/types.d.ts +170 -28
- package/dist/whois.d.ts +3 -3
- package/package.json +19 -19
- package/dist/batch.d.ts +0 -5
- package/dist/dns.d.ts +0 -2
- package/dist/serverless/core.cjs.js.map +0 -1
- package/dist/serverless/core.esm.js.map +0 -1
- package/dist/smtp.d.ts +0 -2
- /package/dist/serverless/{core.d.ts → verifier.d.ts} +0 -0
- /package/dist/serverless/{core.min.js → verifier.min.js} +0 -0
package/dist/types.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Cache } from './cache-interface';
|
|
2
2
|
/**
|
|
3
3
|
* Error codes for email verification failures
|
|
4
4
|
*/
|
|
5
5
|
export declare enum VerificationErrorCode {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
invalidFormat = "INVALID_FORMAT",
|
|
7
|
+
invalidDomain = "INVALID_DOMAIN",
|
|
8
|
+
noMxRecords = "NO_MX_RECORDS",
|
|
9
|
+
smtpConnectionFailed = "SMTP_CONNECTION_FAILED",
|
|
10
|
+
smtpTimeout = "SMTP_TIMEOUT",
|
|
11
|
+
mailboxNotFound = "MAILBOX_NOT_FOUND",
|
|
12
|
+
mailboxFull = "MAILBOX_FULL",
|
|
13
|
+
networkError = "NETWORK_ERROR",
|
|
14
|
+
disposableEmail = "DISPOSABLE_EMAIL",
|
|
15
|
+
freeEmailProvider = "FREE_EMAIL_PROVIDER"
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Main verification result interface (flat structure)
|
|
@@ -37,7 +37,7 @@ export interface VerificationResult {
|
|
|
37
37
|
/**
|
|
38
38
|
* Parameters for email verification
|
|
39
39
|
*/
|
|
40
|
-
export interface
|
|
40
|
+
export interface VerifyEmailParams {
|
|
41
41
|
emailAddress: string;
|
|
42
42
|
timeout?: number;
|
|
43
43
|
verifyMx?: boolean;
|
|
@@ -57,12 +57,12 @@ export interface IVerifyEmailParams {
|
|
|
57
57
|
whoisTimeout?: number;
|
|
58
58
|
skipMxForDisposable?: boolean;
|
|
59
59
|
skipDomainWhoisForDisposable?: boolean;
|
|
60
|
-
cache?:
|
|
60
|
+
cache?: Cache;
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Parameters for batch verification
|
|
64
64
|
*/
|
|
65
|
-
export interface
|
|
65
|
+
export interface BatchVerifyParams {
|
|
66
66
|
emailAddresses: string[];
|
|
67
67
|
concurrency?: number;
|
|
68
68
|
timeout?: number;
|
|
@@ -77,7 +77,91 @@ export interface IBatchVerifyParams {
|
|
|
77
77
|
commonDomains?: string[];
|
|
78
78
|
skipMxForDisposable?: boolean;
|
|
79
79
|
skipDomainWhoisForDisposable?: boolean;
|
|
80
|
-
cache?:
|
|
80
|
+
cache?: Cache;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Rich cache result types for storing detailed verification results
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* Result for disposable email detection with metadata
|
|
87
|
+
*/
|
|
88
|
+
export interface DisposableEmailResult {
|
|
89
|
+
/** Whether the email/domain is disposable */
|
|
90
|
+
isDisposable: boolean;
|
|
91
|
+
/** Source that identified this as disposable (e.g., list name, service) */
|
|
92
|
+
source?: string;
|
|
93
|
+
/** Category of disposable email (e.g., 'temp', 'alias', 'forwarding') */
|
|
94
|
+
category?: string;
|
|
95
|
+
/** Timestamp when this was checked */
|
|
96
|
+
checkedAt: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Result for free email provider detection with metadata
|
|
100
|
+
*/
|
|
101
|
+
export interface FreeEmailResult {
|
|
102
|
+
/** Whether the email/domain is from a free provider */
|
|
103
|
+
isFree: boolean;
|
|
104
|
+
/** Name of the free provider (e.g., 'gmail', 'yahoo', 'outlook') */
|
|
105
|
+
provider?: string;
|
|
106
|
+
/** Timestamp when this was checked */
|
|
107
|
+
checkedAt: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Result for domain validation with metadata
|
|
111
|
+
*/
|
|
112
|
+
export interface DomainValidResult {
|
|
113
|
+
/** Whether the domain is valid */
|
|
114
|
+
isValid: boolean;
|
|
115
|
+
/** Whether MX records were found */
|
|
116
|
+
hasMX: boolean;
|
|
117
|
+
/** The MX records that were found */
|
|
118
|
+
mxRecords?: string[];
|
|
119
|
+
/** Timestamp when this was checked */
|
|
120
|
+
checkedAt: number;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Email providers enum
|
|
124
|
+
*/
|
|
125
|
+
export declare enum EmailProvider {
|
|
126
|
+
gmail = "gmail",
|
|
127
|
+
hotmailB2b = "hotmail_b2b",
|
|
128
|
+
hotmailB2c = "hotmail_b2c",
|
|
129
|
+
proofpoint = "proofpoint",
|
|
130
|
+
mimecast = "mimecast",
|
|
131
|
+
yahoo = "yahoo",
|
|
132
|
+
everythingElse = "everything_else"
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Result for SMTP verification with metadata
|
|
136
|
+
* Uses camelCase for consistency with TypeScript conventions
|
|
137
|
+
*/
|
|
138
|
+
export interface SmtpVerificationResult {
|
|
139
|
+
/** Whether SMTP connection was successful */
|
|
140
|
+
canConnectSmtp: boolean;
|
|
141
|
+
/** Whether the mailbox is full */
|
|
142
|
+
hasFullInbox: boolean;
|
|
143
|
+
/** Whether the domain has catch-all enabled */
|
|
144
|
+
isCatchAll: boolean;
|
|
145
|
+
/** Whether the email is deliverable */
|
|
146
|
+
isDeliverable: boolean;
|
|
147
|
+
/** Whether the email/account is disabled */
|
|
148
|
+
isDisabled: boolean;
|
|
149
|
+
/** Error message if verification failed */
|
|
150
|
+
error?: string;
|
|
151
|
+
/** Which provider was detected/used */
|
|
152
|
+
providerUsed?: EmailProvider;
|
|
153
|
+
/** Additional compatibility properties */
|
|
154
|
+
success?: boolean;
|
|
155
|
+
canConnect?: boolean;
|
|
156
|
+
responseCode?: number;
|
|
157
|
+
/** Provider-specific error details */
|
|
158
|
+
providerSpecific?: {
|
|
159
|
+
errorCode?: string;
|
|
160
|
+
actionRequired?: string;
|
|
161
|
+
details?: string;
|
|
162
|
+
};
|
|
163
|
+
/** Timestamp when this was checked (for cache) */
|
|
164
|
+
checkedAt?: number;
|
|
81
165
|
}
|
|
82
166
|
/**
|
|
83
167
|
* Result for batch verification
|
|
@@ -92,17 +176,74 @@ export interface BatchVerificationResult {
|
|
|
92
176
|
processingTime: number;
|
|
93
177
|
};
|
|
94
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Parse SMTP error message to determine error type
|
|
181
|
+
* Handles both SMTP protocol errors and system/network errors
|
|
182
|
+
*/
|
|
183
|
+
export declare function parseSmtpError(errorMessage: string): {
|
|
184
|
+
isDisabled: boolean;
|
|
185
|
+
hasFullInbox: boolean;
|
|
186
|
+
isInvalid: boolean;
|
|
187
|
+
isCatchAll: boolean;
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Port configuration for SMTP verification
|
|
191
|
+
*/
|
|
192
|
+
export interface SMTPPortConfig {
|
|
193
|
+
ports: number[];
|
|
194
|
+
timeout: number;
|
|
195
|
+
maxRetries: number;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* TLS configuration options
|
|
199
|
+
*/
|
|
200
|
+
export interface SMTPTLSConfig {
|
|
201
|
+
rejectUnauthorized?: boolean;
|
|
202
|
+
minVersion?: 'TLSv1.2' | 'TLSv1.3';
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* SMTP protocol steps enum
|
|
206
|
+
*/
|
|
207
|
+
export declare enum SMTPStep {
|
|
208
|
+
greeting = "GREETING",
|
|
209
|
+
ehlo = "EHLO",
|
|
210
|
+
helo = "HELO",
|
|
211
|
+
startTls = "STARTTLS",
|
|
212
|
+
mailFrom = "MAIL_FROM",
|
|
213
|
+
rcptTo = "RCPT_TO",
|
|
214
|
+
vrfy = "VRFY",
|
|
215
|
+
quit = "QUIT"
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Custom SMTP sequence configuration
|
|
219
|
+
*/
|
|
220
|
+
export interface SMTPSequence {
|
|
221
|
+
steps: SMTPStep[];
|
|
222
|
+
from?: string;
|
|
223
|
+
vrfyTarget?: string;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* SMTP verification options
|
|
227
|
+
*/
|
|
228
|
+
export interface SMTPVerifyOptions {
|
|
229
|
+
ports?: number[];
|
|
230
|
+
timeout?: number;
|
|
231
|
+
maxRetries?: number;
|
|
232
|
+
tls?: boolean | SMTPTLSConfig;
|
|
233
|
+
hostname?: string;
|
|
234
|
+
useVRFY?: boolean;
|
|
235
|
+
cache?: Cache | null;
|
|
236
|
+
debug?: boolean;
|
|
237
|
+
sequence?: SMTPSequence;
|
|
238
|
+
}
|
|
95
239
|
/**
|
|
96
240
|
* SMTP verification parameters
|
|
97
241
|
*/
|
|
98
242
|
export interface VerifyMailboxSMTPParams {
|
|
99
|
-
port?: number;
|
|
100
243
|
local: string;
|
|
101
244
|
domain: string;
|
|
102
245
|
mxRecords: string[];
|
|
103
|
-
|
|
104
|
-
debug: boolean;
|
|
105
|
-
retryAttempts?: number;
|
|
246
|
+
options?: SMTPVerifyOptions;
|
|
106
247
|
}
|
|
107
248
|
/**
|
|
108
249
|
* Connection pool configuration
|
|
@@ -135,11 +276,11 @@ export type DomainSuggestionMethod = (domain: string) => DomainSuggestion | null
|
|
|
135
276
|
/**
|
|
136
277
|
* Parameters for domain suggestion
|
|
137
278
|
*/
|
|
138
|
-
export interface
|
|
279
|
+
export interface DomainSuggestionParams {
|
|
139
280
|
domain: string;
|
|
140
281
|
customMethod?: DomainSuggestionMethod;
|
|
141
282
|
commonDomains?: string[];
|
|
142
|
-
cache?:
|
|
283
|
+
cache?: Cache;
|
|
143
284
|
}
|
|
144
285
|
/**
|
|
145
286
|
* Result of name detection from email
|
|
@@ -156,7 +297,7 @@ export type NameDetectionMethod = (email: string) => DetectedName | null;
|
|
|
156
297
|
/**
|
|
157
298
|
* Parameters for name detection
|
|
158
299
|
*/
|
|
159
|
-
export interface
|
|
300
|
+
export interface NameDetectionParams {
|
|
160
301
|
email: string;
|
|
161
302
|
customMethod?: NameDetectionMethod;
|
|
162
303
|
}
|
|
@@ -210,25 +351,25 @@ export interface DomainSuggesterOptions {
|
|
|
210
351
|
/**
|
|
211
352
|
* Parameters for isDisposableEmail function
|
|
212
353
|
*/
|
|
213
|
-
export interface
|
|
354
|
+
export interface DisposableEmailCheckParams {
|
|
214
355
|
emailOrDomain: string;
|
|
215
|
-
cache?:
|
|
356
|
+
cache?: Cache | null;
|
|
216
357
|
logger?: (...args: unknown[]) => void;
|
|
217
358
|
}
|
|
218
359
|
/**
|
|
219
360
|
* Parameters for isFreeEmail function
|
|
220
361
|
*/
|
|
221
|
-
export interface
|
|
362
|
+
export interface FreeEmailCheckParams {
|
|
222
363
|
emailOrDomain: string;
|
|
223
|
-
cache?:
|
|
364
|
+
cache?: Cache | null;
|
|
224
365
|
logger?: (...args: unknown[]) => void;
|
|
225
366
|
}
|
|
226
367
|
/**
|
|
227
368
|
* Parameters for resolveMxRecords function
|
|
228
369
|
*/
|
|
229
|
-
export interface
|
|
370
|
+
export interface ResolveMxParams {
|
|
230
371
|
domain: string;
|
|
231
|
-
cache?:
|
|
372
|
+
cache?: Cache | null;
|
|
232
373
|
logger?: (...args: unknown[]) => void;
|
|
233
374
|
}
|
|
234
375
|
/**
|
|
@@ -275,3 +416,4 @@ export interface EmailValidationResult {
|
|
|
275
416
|
export interface ValidatorResult {
|
|
276
417
|
valid: boolean;
|
|
277
418
|
}
|
|
419
|
+
export type { Cache, CacheStore } from './cache-interface';
|
package/dist/whois.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Cache } from './cache-interface';
|
|
2
2
|
import type { DomainAgeInfo, DomainRegistrationInfo } from './types';
|
|
3
|
-
export declare function getDomainAge(domain: string, timeout?: number, debug?: boolean, cache?:
|
|
4
|
-
export declare function getDomainRegistrationStatus(domain: string, timeout?: number, debug?: boolean, cache?:
|
|
3
|
+
export declare function getDomainAge(domain: string, timeout?: number, debug?: boolean, cache?: Cache): Promise<DomainAgeInfo | null>;
|
|
4
|
+
export declare function getDomainRegistrationStatus(domain: string, timeout?: number, debug?: boolean, cache?: Cache): Promise<DomainRegistrationInfo | null>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emailcheck/email-validator-js",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1-beta.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Advanced email validation with MX records, SMTP verification, disposable email detection, batch processing, and caching. Production-ready with TypeScript support.",
|
|
6
6
|
"keywords": [
|
|
@@ -30,32 +30,32 @@
|
|
|
30
30
|
"exports": {
|
|
31
31
|
".": {
|
|
32
32
|
"require": "./dist/index.js",
|
|
33
|
-
"import": "./dist/index.js",
|
|
33
|
+
"import": "./dist/index.esm.js",
|
|
34
34
|
"types": "./dist/index.d.ts"
|
|
35
35
|
},
|
|
36
36
|
"./serverless": {
|
|
37
|
-
"require": "./dist/serverless/index.js",
|
|
38
|
-
"import": "./dist/serverless/index.js",
|
|
37
|
+
"require": "./dist/serverless/index.cjs.js",
|
|
38
|
+
"import": "./dist/serverless/index.esm.js",
|
|
39
39
|
"types": "./dist/serverless/index.d.ts"
|
|
40
40
|
},
|
|
41
|
-
"./serverless/
|
|
42
|
-
"require": "./dist/serverless/
|
|
43
|
-
"import": "./dist/serverless/
|
|
44
|
-
"types": "./dist/serverless/
|
|
41
|
+
"./serverless/verifier": {
|
|
42
|
+
"require": "./dist/serverless/verifier.cjs.js",
|
|
43
|
+
"import": "./dist/serverless/verifier.esm.js",
|
|
44
|
+
"types": "./dist/serverless/verifier.d.ts"
|
|
45
45
|
},
|
|
46
46
|
"./serverless/aws": {
|
|
47
|
-
"require": "./dist/serverless/adapters/aws-lambda.js",
|
|
48
|
-
"import": "./dist/serverless/adapters/aws-lambda.js",
|
|
47
|
+
"require": "./dist/serverless/adapters/aws-lambda.cjs.js",
|
|
48
|
+
"import": "./dist/serverless/adapters/aws-lambda.esm.js",
|
|
49
49
|
"types": "./dist/serverless/adapters/aws-lambda.d.ts"
|
|
50
50
|
},
|
|
51
51
|
"./serverless/vercel": {
|
|
52
|
-
"require": "./dist/serverless/adapters/vercel.js",
|
|
53
|
-
"import": "./dist/serverless/adapters/vercel.js",
|
|
52
|
+
"require": "./dist/serverless/adapters/vercel.cjs.js",
|
|
53
|
+
"import": "./dist/serverless/adapters/vercel.esm.js",
|
|
54
54
|
"types": "./dist/serverless/adapters/vercel.d.ts"
|
|
55
55
|
},
|
|
56
56
|
"./serverless/cloudflare": {
|
|
57
|
-
"require": "./dist/serverless/adapters/cloudflare.js",
|
|
58
|
-
"import": "./dist/serverless/adapters/cloudflare.js",
|
|
57
|
+
"require": "./dist/serverless/adapters/cloudflare.cjs.js",
|
|
58
|
+
"import": "./dist/serverless/adapters/cloudflare.esm.js",
|
|
59
59
|
"types": "./dist/serverless/adapters/cloudflare.d.ts"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"tiny-lru": "^11.4.5"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
|
-
"@biomejs/biome": "^2.3.
|
|
99
|
+
"@biomejs/biome": "^2.3.10",
|
|
100
100
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
101
101
|
"@rollup/plugin-json": "^6.1.0",
|
|
102
102
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
@@ -104,15 +104,15 @@
|
|
|
104
104
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
105
105
|
"@types/aws-lambda": "^8.10.159",
|
|
106
106
|
"@types/jest": "^30.0.0",
|
|
107
|
-
"@types/node": "25.0.
|
|
107
|
+
"@types/node": "25.0.3",
|
|
108
108
|
"@types/sinon": "21.0.0",
|
|
109
|
-
"esbuild": "^0.27.
|
|
109
|
+
"esbuild": "^0.27.2",
|
|
110
110
|
"husky": "9.1.7",
|
|
111
111
|
"jest": "^30.2.0",
|
|
112
112
|
"lint-staged": "16.2.7",
|
|
113
|
-
"rollup": "^4.
|
|
113
|
+
"rollup": "^4.54.0",
|
|
114
114
|
"rollup-plugin-esbuild": "^6.2.1",
|
|
115
|
-
"sinon": "21.0.
|
|
115
|
+
"sinon": "21.0.1",
|
|
116
116
|
"ts-jest": "^29.4.6",
|
|
117
117
|
"tslib": "^2.8.1",
|
|
118
118
|
"typescript": "5.9.3"
|
package/dist/batch.d.ts
DELETED
package/dist/dns.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.cjs.js","sources":["../../node_modules/string-similarity-js/dist/string-similarity.js","../../src/serverless/core.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringSimilarity = void 0;\n/* global exports, Map */\n/**\n * Calculate similarity between two strings\n * @param {string} str1 First string to match\n * @param {string} str2 Second string to match\n * @param {number} [substringLength=2] Optional. Length of substring to be used in calculating similarity. Default 2.\n * @param {boolean} [caseSensitive=false] Optional. Whether you want to consider case in string matching. Default false;\n * @returns Number between 0 and 1, with 0 being a low match score.\n */\nvar stringSimilarity = function (str1, str2, substringLength, caseSensitive) {\n if (substringLength === void 0) { substringLength = 2; }\n if (caseSensitive === void 0) { caseSensitive = false; }\n if (!caseSensitive) {\n str1 = str1.toLowerCase();\n str2 = str2.toLowerCase();\n }\n if (str1.length < substringLength || str2.length < substringLength)\n return 0;\n var map = new Map();\n for (var i = 0; i < str1.length - (substringLength - 1); i++) {\n var substr1 = str1.substr(i, substringLength);\n map.set(substr1, map.has(substr1) ? map.get(substr1) + 1 : 1);\n }\n var match = 0;\n for (var j = 0; j < str2.length - (substringLength - 1); j++) {\n var substr2 = str2.substr(j, substringLength);\n var count = map.has(substr2) ? map.get(substr2) : 0;\n if (count > 0) {\n map.set(substr2, count - 1);\n match++;\n }\n }\n return (match * 2) / (str1.length + str2.length - ((substringLength - 1) * 2));\n};\nexports.stringSimilarity = stringSimilarity;\nexports.default = exports.stringSimilarity;\n//# sourceMappingURL=string-similarity.js.map","/**\n * Core serverless email validator\n * Platform-agnostic implementation without Node.js dependencies\n */\n\n// Import utility functions\nimport { stringSimilarity } from 'string-similarity-js';\n\n// Import full data files for comprehensive validation\n// These are the complete, unminified JSON files\nimport disposableProviders from '../disposable-email-providers.json';\nimport freeProviders from '../free-email-providers.json';\nimport type { DomainSuggesterOptions, EmailValidationResult, ValidateEmailOptions } from '../types';\n\n// Platform-agnostic cache implementation\nexport class EdgeCache<T> {\n private cache = new Map<string, { value: T; expires: number }>();\n private maxSize: number;\n private ttl: number;\n\n constructor(maxSize = 1000, ttl = 3600000) {\n this.maxSize = maxSize;\n this.ttl = ttl;\n }\n\n get(key: string): T | undefined {\n const item = this.cache.get(key);\n if (!item) return undefined;\n if (Date.now() > item.expires) {\n this.cache.delete(key);\n return undefined;\n }\n return item.value;\n }\n\n set(key: string, value: T): void {\n if (this.cache.size >= this.maxSize) {\n // Remove oldest entries\n const entriesToRemove = Math.max(1, Math.floor(this.maxSize * 0.1));\n const keys = Array.from(this.cache.keys()).slice(0, entriesToRemove);\n keys.forEach((key) => this.cache.delete(key));\n }\n this.cache.set(key, {\n value,\n expires: Date.now() + this.ttl,\n });\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n// Global cache instances\nexport const validationCache = new EdgeCache<EmailValidationResult>(1000);\nexport const mxCache = new EdgeCache<string[]>(500);\n\n// Email validation regex patterns\nconst VALID_EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n// Common email provider domains for typo detection\nexport const COMMON_DOMAINS = [\n 'gmail.com',\n 'yahoo.com',\n 'hotmail.com',\n 'outlook.com',\n 'icloud.com',\n 'aol.com',\n 'msn.com',\n 'live.com',\n 'ymail.com',\n 'protonmail.com',\n 'zoho.com',\n 'mail.com',\n 'gmx.com',\n 'fastmail.com',\n 'tutanota.com',\n 'qq.com',\n '163.com',\n '126.com',\n 'sina.com',\n 'foxmail.com',\n 'yandex.com',\n 'mail.ru',\n 'rambler.ru',\n 'gmx.de',\n 'web.de',\n 't-online.de',\n 'orange.fr',\n 'wanadoo.fr',\n 'free.fr',\n 'sfr.fr',\n 'laposte.net',\n 'libero.it',\n 'virgilio.it',\n 'alice.it',\n 'tin.it',\n 'bt.com',\n 'btinternet.com',\n 'virginmedia.com',\n 'sky.com',\n 'talktalk.net',\n 'rogers.com',\n 'shaw.ca',\n 'sympatico.ca',\n 'bellsouth.net',\n 'comcast.net',\n 'cox.net',\n 'earthlink.net',\n 'charter.net',\n 'optonline.net',\n 'verizon.net',\n 'att.net',\n 'sbcglobal.net',\n 'me.com',\n 'mac.com',\n 'rocketmail.com',\n];\n\n// Common typo patterns\nconst TYPO_PATTERNS = [\n // Gmail typos\n { pattern: /gmial\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmai\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmil\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.co$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.con$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.cm$/i, replacement: 'gmail.com' },\n { pattern: /gmal\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gnail\\.com$/i, replacement: 'gmail.com' },\n\n // Yahoo typos\n { pattern: /yahooo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaho\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yahoo\\.co$/i, replacement: 'yahoo.com' },\n { pattern: /yaoo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaboo\\.com$/i, replacement: 'yahoo.com' },\n\n // Hotmail typos\n { pattern: /hotmial\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmai\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmil\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmail\\.co$/i, replacement: 'hotmail.com' },\n { pattern: /hormail\\.com$/i, replacement: 'hotmail.com' },\n\n // Outlook typos\n { pattern: /outlok\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outloo\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outlook\\.co$/i, replacement: 'outlook.com' },\n { pattern: /putlook\\.com$/i, replacement: 'outlook.com' },\n\n // iCloud typos\n { pattern: /iclud\\.com$/i, replacement: 'icloud.com' },\n { pattern: /icloud\\.co$/i, replacement: 'icloud.com' },\n { pattern: /icoud\\.com$/i, replacement: 'icloud.com' },\n];\n\n// Platform-agnostic DNS resolution interface\nexport interface DNSResolver {\n resolveMx(domain: string): Promise<Array<{ exchange: string; priority: number }>>;\n\n resolveTxt(domain: string): Promise<string[]>;\n}\n\n// Stub DNS resolver for environments without DNS capabilities\nexport class StubDNSResolver implements DNSResolver {\n async resolveMx(_domain: string): Promise<Array<{ exchange: string; priority: number }>> {\n // Return null to indicate DNS is not available\n return [];\n }\n\n async resolveTxt(_domain: string): Promise<string[]> {\n return [];\n }\n}\n\n// Domain suggestion function\nexport function suggestDomain(domain: string, options?: DomainSuggesterOptions): string | null {\n const threshold = options?.threshold || 2;\n const domains = options?.customDomains || COMMON_DOMAINS;\n\n // Check common typos first\n for (const { pattern, replacement } of TYPO_PATTERNS) {\n if (pattern.test(domain)) {\n return replacement;\n }\n }\n\n // If domain is already in the list of common domains, it's correct\n if (domains.includes(domain)) {\n return null;\n }\n\n // Find closest domain using Levenshtein distance\n let minDistance = Infinity;\n let suggestion: string | null = null;\n\n for (const commonDomain of domains) {\n // Skip if it's the same domain (case-insensitive)\n if (domain.toLowerCase() === commonDomain.toLowerCase()) {\n return null;\n }\n\n // Use string similarity to calculate distance\n const similarity = stringSimilarity(domain.toLowerCase(), commonDomain.toLowerCase());\n const distance = Math.round((1 - similarity) * Math.max(domain.length, commonDomain.length));\n if (distance > 0 && distance <= threshold && distance < minDistance) {\n minDistance = distance;\n suggestion = commonDomain;\n }\n }\n\n return suggestion;\n}\n\n// Core validation function\nexport async function validateEmailCore(\n email: string,\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult> {\n const normalizedEmail = email.toLowerCase().trim();\n\n // Check cache\n if (!options?.skipCache) {\n const cached = validationCache.get(normalizedEmail);\n if (cached) return cached;\n }\n\n const result: EmailValidationResult = {\n valid: false,\n email: normalizedEmail,\n validators: {},\n };\n\n // Syntax validation\n if (options?.validateSyntax !== false) {\n const syntaxValid = VALID_EMAIL_REGEX.test(normalizedEmail);\n result.validators.syntax = { valid: syntaxValid };\n if (!syntaxValid) {\n validationCache.set(normalizedEmail, result);\n return result;\n }\n }\n\n const [local, domain] = normalizedEmail.split('@');\n result.local = local;\n result.domain = domain;\n\n // Typo detection and suggestion\n if (options?.validateTypo !== false) {\n const suggestion = suggestDomain(domain, options?.domainSuggesterOptions);\n result.validators.typo = {\n valid: !suggestion,\n suggestion: suggestion || undefined,\n };\n }\n\n // Disposable email check\n if (options?.validateDisposable !== false) {\n const isDisposable = disposableProviders.includes(domain);\n result.validators.disposable = { valid: !isDisposable };\n }\n\n // Free email check\n if (options?.validateFree !== false) {\n const isFree = freeProviders.includes(domain);\n result.validators.free = { valid: !isFree };\n }\n\n // MX record validation (if DNS resolver is available)\n if (options?.validateMx && options.dnsResolver) {\n try {\n const mxRecords = await options.dnsResolver.resolveMx(domain);\n const hasMx = mxRecords && mxRecords.length > 0;\n result.validators.mx = {\n valid: hasMx,\n records: hasMx ? mxRecords.map((r) => r.exchange) : undefined,\n };\n } catch (error) {\n result.validators.mx = {\n valid: false,\n error: error instanceof Error ? error.message : 'MX validation failed',\n };\n }\n }\n\n // Overall valid status - only syntax, typo, disposable, and MX matter for validity\n // Free provider detection is informational only\n const criticalValidators = ['syntax', 'typo', 'disposable', 'mx'];\n result.valid = criticalValidators.every((key) => {\n const validator = result.validators[key as keyof typeof result.validators];\n return !validator || validator.valid !== false;\n });\n\n // Cache result\n if (!options?.skipCache) {\n validationCache.set(normalizedEmail, result);\n }\n\n return result;\n}\n\n// Batch validation\nexport async function validateEmailBatch(\n emails: string[],\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult[]> {\n // Process in chunks to avoid overwhelming the system\n const chunkSize = options?.batchSize || 10;\n const results: EmailValidationResult[] = [];\n\n for (let i = 0; i < emails.length; i += chunkSize) {\n const chunk = emails.slice(i, i + chunkSize);\n const chunkResults = await Promise.all(chunk.map((email) => validateEmailCore(email, options)));\n results.push(...chunkResults);\n }\n\n return results;\n}\n\n// Export cache control functions\nexport function clearCache(): void {\n validationCache.clear();\n mxCache.clear();\n}\n\n// Export types\nexport type {\n DomainSuggesterOptions,\n EmailValidationResult,\n ValidateEmailOptions,\n} from '../types';\n"],"names":["exports","key","stringSimilarity"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core.esm.js","sources":["../../node_modules/string-similarity-js/dist/string-similarity.js","../../src/serverless/core.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringSimilarity = void 0;\n/* global exports, Map */\n/**\n * Calculate similarity between two strings\n * @param {string} str1 First string to match\n * @param {string} str2 Second string to match\n * @param {number} [substringLength=2] Optional. Length of substring to be used in calculating similarity. Default 2.\n * @param {boolean} [caseSensitive=false] Optional. Whether you want to consider case in string matching. Default false;\n * @returns Number between 0 and 1, with 0 being a low match score.\n */\nvar stringSimilarity = function (str1, str2, substringLength, caseSensitive) {\n if (substringLength === void 0) { substringLength = 2; }\n if (caseSensitive === void 0) { caseSensitive = false; }\n if (!caseSensitive) {\n str1 = str1.toLowerCase();\n str2 = str2.toLowerCase();\n }\n if (str1.length < substringLength || str2.length < substringLength)\n return 0;\n var map = new Map();\n for (var i = 0; i < str1.length - (substringLength - 1); i++) {\n var substr1 = str1.substr(i, substringLength);\n map.set(substr1, map.has(substr1) ? map.get(substr1) + 1 : 1);\n }\n var match = 0;\n for (var j = 0; j < str2.length - (substringLength - 1); j++) {\n var substr2 = str2.substr(j, substringLength);\n var count = map.has(substr2) ? map.get(substr2) : 0;\n if (count > 0) {\n map.set(substr2, count - 1);\n match++;\n }\n }\n return (match * 2) / (str1.length + str2.length - ((substringLength - 1) * 2));\n};\nexports.stringSimilarity = stringSimilarity;\nexports.default = exports.stringSimilarity;\n//# sourceMappingURL=string-similarity.js.map","/**\n * Core serverless email validator\n * Platform-agnostic implementation without Node.js dependencies\n */\n\n// Import utility functions\nimport { stringSimilarity } from 'string-similarity-js';\n\n// Import full data files for comprehensive validation\n// These are the complete, unminified JSON files\nimport disposableProviders from '../disposable-email-providers.json';\nimport freeProviders from '../free-email-providers.json';\nimport type { DomainSuggesterOptions, EmailValidationResult, ValidateEmailOptions } from '../types';\n\n// Platform-agnostic cache implementation\nexport class EdgeCache<T> {\n private cache = new Map<string, { value: T; expires: number }>();\n private maxSize: number;\n private ttl: number;\n\n constructor(maxSize = 1000, ttl = 3600000) {\n this.maxSize = maxSize;\n this.ttl = ttl;\n }\n\n get(key: string): T | undefined {\n const item = this.cache.get(key);\n if (!item) return undefined;\n if (Date.now() > item.expires) {\n this.cache.delete(key);\n return undefined;\n }\n return item.value;\n }\n\n set(key: string, value: T): void {\n if (this.cache.size >= this.maxSize) {\n // Remove oldest entries\n const entriesToRemove = Math.max(1, Math.floor(this.maxSize * 0.1));\n const keys = Array.from(this.cache.keys()).slice(0, entriesToRemove);\n keys.forEach((key) => this.cache.delete(key));\n }\n this.cache.set(key, {\n value,\n expires: Date.now() + this.ttl,\n });\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n// Global cache instances\nexport const validationCache = new EdgeCache<EmailValidationResult>(1000);\nexport const mxCache = new EdgeCache<string[]>(500);\n\n// Email validation regex patterns\nconst VALID_EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n// Common email provider domains for typo detection\nexport const COMMON_DOMAINS = [\n 'gmail.com',\n 'yahoo.com',\n 'hotmail.com',\n 'outlook.com',\n 'icloud.com',\n 'aol.com',\n 'msn.com',\n 'live.com',\n 'ymail.com',\n 'protonmail.com',\n 'zoho.com',\n 'mail.com',\n 'gmx.com',\n 'fastmail.com',\n 'tutanota.com',\n 'qq.com',\n '163.com',\n '126.com',\n 'sina.com',\n 'foxmail.com',\n 'yandex.com',\n 'mail.ru',\n 'rambler.ru',\n 'gmx.de',\n 'web.de',\n 't-online.de',\n 'orange.fr',\n 'wanadoo.fr',\n 'free.fr',\n 'sfr.fr',\n 'laposte.net',\n 'libero.it',\n 'virgilio.it',\n 'alice.it',\n 'tin.it',\n 'bt.com',\n 'btinternet.com',\n 'virginmedia.com',\n 'sky.com',\n 'talktalk.net',\n 'rogers.com',\n 'shaw.ca',\n 'sympatico.ca',\n 'bellsouth.net',\n 'comcast.net',\n 'cox.net',\n 'earthlink.net',\n 'charter.net',\n 'optonline.net',\n 'verizon.net',\n 'att.net',\n 'sbcglobal.net',\n 'me.com',\n 'mac.com',\n 'rocketmail.com',\n];\n\n// Common typo patterns\nconst TYPO_PATTERNS = [\n // Gmail typos\n { pattern: /gmial\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmai\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmil\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.co$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.con$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.cm$/i, replacement: 'gmail.com' },\n { pattern: /gmal\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gnail\\.com$/i, replacement: 'gmail.com' },\n\n // Yahoo typos\n { pattern: /yahooo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaho\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yahoo\\.co$/i, replacement: 'yahoo.com' },\n { pattern: /yaoo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaboo\\.com$/i, replacement: 'yahoo.com' },\n\n // Hotmail typos\n { pattern: /hotmial\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmai\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmil\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmail\\.co$/i, replacement: 'hotmail.com' },\n { pattern: /hormail\\.com$/i, replacement: 'hotmail.com' },\n\n // Outlook typos\n { pattern: /outlok\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outloo\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outlook\\.co$/i, replacement: 'outlook.com' },\n { pattern: /putlook\\.com$/i, replacement: 'outlook.com' },\n\n // iCloud typos\n { pattern: /iclud\\.com$/i, replacement: 'icloud.com' },\n { pattern: /icloud\\.co$/i, replacement: 'icloud.com' },\n { pattern: /icoud\\.com$/i, replacement: 'icloud.com' },\n];\n\n// Platform-agnostic DNS resolution interface\nexport interface DNSResolver {\n resolveMx(domain: string): Promise<Array<{ exchange: string; priority: number }>>;\n\n resolveTxt(domain: string): Promise<string[]>;\n}\n\n// Stub DNS resolver for environments without DNS capabilities\nexport class StubDNSResolver implements DNSResolver {\n async resolveMx(_domain: string): Promise<Array<{ exchange: string; priority: number }>> {\n // Return null to indicate DNS is not available\n return [];\n }\n\n async resolveTxt(_domain: string): Promise<string[]> {\n return [];\n }\n}\n\n// Domain suggestion function\nexport function suggestDomain(domain: string, options?: DomainSuggesterOptions): string | null {\n const threshold = options?.threshold || 2;\n const domains = options?.customDomains || COMMON_DOMAINS;\n\n // Check common typos first\n for (const { pattern, replacement } of TYPO_PATTERNS) {\n if (pattern.test(domain)) {\n return replacement;\n }\n }\n\n // If domain is already in the list of common domains, it's correct\n if (domains.includes(domain)) {\n return null;\n }\n\n // Find closest domain using Levenshtein distance\n let minDistance = Infinity;\n let suggestion: string | null = null;\n\n for (const commonDomain of domains) {\n // Skip if it's the same domain (case-insensitive)\n if (domain.toLowerCase() === commonDomain.toLowerCase()) {\n return null;\n }\n\n // Use string similarity to calculate distance\n const similarity = stringSimilarity(domain.toLowerCase(), commonDomain.toLowerCase());\n const distance = Math.round((1 - similarity) * Math.max(domain.length, commonDomain.length));\n if (distance > 0 && distance <= threshold && distance < minDistance) {\n minDistance = distance;\n suggestion = commonDomain;\n }\n }\n\n return suggestion;\n}\n\n// Core validation function\nexport async function validateEmailCore(\n email: string,\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult> {\n const normalizedEmail = email.toLowerCase().trim();\n\n // Check cache\n if (!options?.skipCache) {\n const cached = validationCache.get(normalizedEmail);\n if (cached) return cached;\n }\n\n const result: EmailValidationResult = {\n valid: false,\n email: normalizedEmail,\n validators: {},\n };\n\n // Syntax validation\n if (options?.validateSyntax !== false) {\n const syntaxValid = VALID_EMAIL_REGEX.test(normalizedEmail);\n result.validators.syntax = { valid: syntaxValid };\n if (!syntaxValid) {\n validationCache.set(normalizedEmail, result);\n return result;\n }\n }\n\n const [local, domain] = normalizedEmail.split('@');\n result.local = local;\n result.domain = domain;\n\n // Typo detection and suggestion\n if (options?.validateTypo !== false) {\n const suggestion = suggestDomain(domain, options?.domainSuggesterOptions);\n result.validators.typo = {\n valid: !suggestion,\n suggestion: suggestion || undefined,\n };\n }\n\n // Disposable email check\n if (options?.validateDisposable !== false) {\n const isDisposable = disposableProviders.includes(domain);\n result.validators.disposable = { valid: !isDisposable };\n }\n\n // Free email check\n if (options?.validateFree !== false) {\n const isFree = freeProviders.includes(domain);\n result.validators.free = { valid: !isFree };\n }\n\n // MX record validation (if DNS resolver is available)\n if (options?.validateMx && options.dnsResolver) {\n try {\n const mxRecords = await options.dnsResolver.resolveMx(domain);\n const hasMx = mxRecords && mxRecords.length > 0;\n result.validators.mx = {\n valid: hasMx,\n records: hasMx ? mxRecords.map((r) => r.exchange) : undefined,\n };\n } catch (error) {\n result.validators.mx = {\n valid: false,\n error: error instanceof Error ? error.message : 'MX validation failed',\n };\n }\n }\n\n // Overall valid status - only syntax, typo, disposable, and MX matter for validity\n // Free provider detection is informational only\n const criticalValidators = ['syntax', 'typo', 'disposable', 'mx'];\n result.valid = criticalValidators.every((key) => {\n const validator = result.validators[key as keyof typeof result.validators];\n return !validator || validator.valid !== false;\n });\n\n // Cache result\n if (!options?.skipCache) {\n validationCache.set(normalizedEmail, result);\n }\n\n return result;\n}\n\n// Batch validation\nexport async function validateEmailBatch(\n emails: string[],\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult[]> {\n // Process in chunks to avoid overwhelming the system\n const chunkSize = options?.batchSize || 10;\n const results: EmailValidationResult[] = [];\n\n for (let i = 0; i < emails.length; i += chunkSize) {\n const chunk = emails.slice(i, i + chunkSize);\n const chunkResults = await Promise.all(chunk.map((email) => validateEmailCore(email, options)));\n results.push(...chunkResults);\n }\n\n return results;\n}\n\n// Export cache control functions\nexport function clearCache(): void {\n validationCache.clear();\n mxCache.clear();\n}\n\n// Export types\nexport type {\n DomainSuggesterOptions,\n EmailValidationResult,\n ValidateEmailOptions,\n} from '../types';\n"],"names":["exports","key","stringSimilarity"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/smtp.d.ts
DELETED
|
File without changes
|
|
File without changes
|