@emailcheck/email-validator-js 5.0.0-beta.2 → 5.1.0-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.
Files changed (44) hide show
  1. package/README.md +40 -4
  2. package/dist/cli/index.js +34 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.esm.js +36 -3
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +36 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/sender-strategy.d.ts +26 -0
  10. package/dist/serverless/adapters/aws-lambda.cjs.js +5 -5
  11. package/dist/serverless/adapters/aws-lambda.cjs.js.map +1 -1
  12. package/dist/serverless/adapters/aws-lambda.esm.js +5 -5
  13. package/dist/serverless/adapters/aws-lambda.esm.js.map +1 -1
  14. package/dist/serverless/adapters/azure.cjs.js +5 -5
  15. package/dist/serverless/adapters/azure.cjs.js.map +1 -1
  16. package/dist/serverless/adapters/azure.esm.js +5 -5
  17. package/dist/serverless/adapters/azure.esm.js.map +1 -1
  18. package/dist/serverless/adapters/cloudflare.cjs.js +5 -5
  19. package/dist/serverless/adapters/cloudflare.cjs.js.map +1 -1
  20. package/dist/serverless/adapters/cloudflare.esm.js +5 -5
  21. package/dist/serverless/adapters/cloudflare.esm.js.map +1 -1
  22. package/dist/serverless/adapters/gcp.cjs.js +5 -5
  23. package/dist/serverless/adapters/gcp.cjs.js.map +1 -1
  24. package/dist/serverless/adapters/gcp.esm.js +5 -5
  25. package/dist/serverless/adapters/gcp.esm.js.map +1 -1
  26. package/dist/serverless/adapters/netlify.cjs.js +5 -5
  27. package/dist/serverless/adapters/netlify.cjs.js.map +1 -1
  28. package/dist/serverless/adapters/netlify.esm.js +5 -5
  29. package/dist/serverless/adapters/netlify.esm.js.map +1 -1
  30. package/dist/serverless/adapters/vercel.cjs.js +5 -5
  31. package/dist/serverless/adapters/vercel.cjs.js.map +1 -1
  32. package/dist/serverless/adapters/vercel.esm.js +5 -5
  33. package/dist/serverless/adapters/vercel.esm.js.map +1 -1
  34. package/dist/serverless/index.cjs.js +5 -5
  35. package/dist/serverless/index.cjs.js.map +1 -1
  36. package/dist/serverless/index.esm.js +5 -5
  37. package/dist/serverless/index.esm.js.map +1 -1
  38. package/dist/serverless/verifier.cjs.js +5 -5
  39. package/dist/serverless/verifier.cjs.js.map +1 -1
  40. package/dist/serverless/verifier.esm.js +5 -5
  41. package/dist/serverless/verifier.esm.js.map +1 -1
  42. package/dist/serverless/verifier.min.js +1 -1
  43. package/dist/types.d.ts +72 -0
  44. package/package.json +3 -3
package/dist/types.d.ts CHANGED
@@ -139,6 +139,22 @@ export interface VerifyEmailParams {
139
139
  * and any per-MX hint cached from a previous probe.
140
140
  */
141
141
  smtpPort?: number;
142
+ /**
143
+ * Strategy for the `MAIL FROM:` envelope sender during the SMTP probe.
144
+ * See `SMTPSenderStrategy` for the menu. Picking a deliberate strategy
145
+ * (e.g. `{ kind: 'null-sender' }`) reduces spam-flagging vs. the library
146
+ * default of `<recipient@domain>`. Default: unset → uses recipient address
147
+ * (preserved for backwards compatibility, but not recommended for
148
+ * production probes).
149
+ */
150
+ smtpSender?: SMTPSenderStrategy;
151
+ /**
152
+ * EHLO/HELO hostname presented to the MX during the SMTP probe. Should be
153
+ * a real FQDN — `'localhost'` from a public IP is a spam-bot signature
154
+ * and gets rejected by careful MXes. Default: `'localhost'` (preserved for
155
+ * backwards compatibility; override in production).
156
+ */
157
+ smtpHeloHostname?: string;
142
158
  /** Per-WHOIS-query timeout in milliseconds. Default: `5000`. */
143
159
  whoisTimeoutMs?: number;
144
160
  /** Optional shared cache for MX, WHOIS, disposable / free, SMTP, and domain results. */
@@ -367,6 +383,50 @@ export interface SMTPSequence {
367
383
  /** Override MAIL FROM payload — supply with angle brackets or `<>` for null sender. */
368
384
  from?: string;
369
385
  }
386
+ /**
387
+ * High-level policy for picking the `MAIL FROM:` payload sent during SMTP
388
+ * verification. Most callers should use this rather than `SMTPSequence.from`.
389
+ *
390
+ * Why this matters: `MAIL FROM:` is the single biggest spam-fingerprint on a
391
+ * verification probe. The library's historical default (`<recipient@domain>`)
392
+ * is exactly what blocklists key on — sender == recipient is the textbook
393
+ * "fake bounce probe" pattern. Picking a deliberate strategy lets you choose
394
+ * how the probe presents itself to the MX:
395
+ *
396
+ * - `'null-sender'`: RFC 5321 §4.5.5 null reverse-path `<>`. DSN/bounce-shaped.
397
+ * Best deliverability vs spam-flagging on Gmail / Outlook (they whitelist
398
+ * `<>` so they don't recursively bounce a bounce). Some strict gateways
399
+ * (Yahoo / Proofpoint / Mimecast) reject `<>` from unknown IPs — those
400
+ * rejections are clean `550`s, they don't burn IP reputation.
401
+ * - `'fixed'`: a real address on a domain you own (with valid SPF / PTR /
402
+ * DMARC). Best deliverability when properly authenticated; worst when not.
403
+ * - `'random-at-recipient'`: random local-part on the recipient's own domain
404
+ * (e.g. `<probe-a3x9…@gmail.com>` when probing `alice@gmail.com`). Looks
405
+ * like internal-domain mail to MTAs that prefer same-envelope-domain.
406
+ * - `'random-at-domain'`: random local-part on a fixed sender domain. Useful
407
+ * when you control a domain but want unique probe envelopes per call.
408
+ * - `'custom'`: full escape hatch — receives the recipient, returns the
409
+ * literal `MAIL FROM:` payload (with angle brackets).
410
+ */
411
+ export type SMTPSenderStrategy = {
412
+ kind: 'null-sender';
413
+ } | {
414
+ kind: 'fixed';
415
+ address: string;
416
+ } | {
417
+ kind: 'random-at-recipient';
418
+ localPrefix?: string;
419
+ } | {
420
+ kind: 'random-at-domain';
421
+ domain: string;
422
+ localPrefix?: string;
423
+ } | {
424
+ kind: 'custom';
425
+ build: (recipient: {
426
+ local: string;
427
+ domain: string;
428
+ }) => string;
429
+ };
370
430
  /**
371
431
  * Optional retry policy for connection-class failures (timeout / connection
372
432
  * error / connection closed) on a single MX × port. Definitive answers
@@ -499,6 +559,18 @@ export interface SMTPVerifyOptions {
499
559
  * Default: no retries.
500
560
  */
501
561
  retry?: RetryPolicy;
562
+ /**
563
+ * Strategy for picking the `MAIL FROM:` envelope sender. See
564
+ * `SMTPSenderStrategy` for the full menu (`null-sender` / `fixed` /
565
+ * `random-at-recipient` / `random-at-domain` / `custom`).
566
+ *
567
+ * When set, this overrides any `sequence.from`. When unset, the probe falls
568
+ * back to `sequence.from` (legacy low-level override) and finally to the
569
+ * default `<local@domain>` (the recipient's own address — note that this
570
+ * default is the textbook spam-probe fingerprint, so opting into a real
571
+ * strategy is recommended for production use).
572
+ */
573
+ sender?: SMTPSenderStrategy;
502
574
  /**
503
575
  * Override the per-attempt SMTP step list. Defaults to
504
576
  * `[greeting, ehlo, startTls, mailFrom, rcptTo]` — covering the entire
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@emailcheck/email-validator-js",
3
- "version": "5.0.0-beta.2",
3
+ "version": "5.1.0-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": [
@@ -150,8 +150,8 @@
150
150
  "conventional-changelog-conventionalcommits": "^9.3.1",
151
151
  "esbuild": "^0.28.0",
152
152
  "husky": "9.1.7",
153
- "lint-staged": "16.4.0",
154
- "rollup": "^4.60.2",
153
+ "lint-staged": "17.0.2",
154
+ "rollup": "^4.60.3",
155
155
  "rollup-plugin-esbuild": "^6.2.1",
156
156
  "semantic-release": "^25.0.3",
157
157
  "tslib": "^2.8.1",