@fluxmail/provider-imap 0.19.1 → 0.21.0

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 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgC,KAAK,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAenH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,UAAU,CAyC7E"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgC,KAAK,YAAY,EAAwB,MAAM,gBAAgB,CAAC;AAkBnH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,UAAU,CAiD7E"}
package/dist/errors.js CHANGED
@@ -11,6 +11,8 @@ const IMAPFLOW_REASONS = {
11
11
  LineTooLarge: 'invalid_response',
12
12
  LiteralTooLarge: 'invalid_response',
13
13
  };
14
+ /** RFC 5530 response codes for a login refused for a temporary reason. */
15
+ const TEMPORARY_LOGIN_CODES = new Set(['LIMIT', 'UNAVAILABLE']);
14
16
  /**
15
17
  * Map an ImapFlow or Nodemailer error to an EmailError. `phase` names the step
16
18
  * that failed. An EmailError keeps any failure detail it already has.
@@ -27,7 +29,13 @@ export function mapImapError(error, phase) {
27
29
  const detail = value?.responseText ? `${message} (${value.responseStatus ?? 'NO'}: ${value.responseText})` : message;
28
30
  const network = networkFailure(error);
29
31
  const failure = { ...base, ...(network?.ioCode ? { ioCode: network.ioCode } : {}) };
30
- if (value?.authenticationFailed || value?.code === 'EAUTH' || /auth|credential|login/i.test(message)) {
32
+ if (value?.authenticationFailed || value?.code === 'EAUTH') {
33
+ if (isTemporaryLoginFailure(value)) {
34
+ return new EmailError('rate_limited', `IMAP/SMTP login temporarily refused: ${detail}`, undefined, {
35
+ ...failure,
36
+ reason: unavailableReason(value, network?.reason),
37
+ });
38
+ }
31
39
  return new EmailError('auth_expired', `IMAP/SMTP authentication failed: ${detail}`, undefined, failure);
32
40
  }
33
41
  if (value?.code === 'EENVELOPE' || value?.code === 'EMESSAGE') {
@@ -44,6 +52,14 @@ export function mapImapError(error, phase) {
44
52
  reason: unavailableReason(value, network?.reason),
45
53
  });
46
54
  }
55
+ /** A server that throttles with a plain NO or a 5xx reply looks like a wrong password here. */
56
+ function isTemporaryLoginFailure(value) {
57
+ if (value.code === 'EAUTH') {
58
+ const reply = value.responseCode ?? 0;
59
+ return reply >= 400 && reply < 500;
60
+ }
61
+ return TEMPORARY_LOGIN_CODES.has(value.serverResponseCode ?? '');
62
+ }
47
63
  function unavailableReason(value, networkReason) {
48
64
  if (value?.responseStatus === 'BAD')
49
65
  return 'server_bad';
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAA2C,MAAM,gBAAgB,CAAC;AAEnH,MAAM,gBAAgB,GAA8C;IAClE,eAAe,EAAE,oBAAoB;IACrC,eAAe,EAAE,oBAAoB;IACrC,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,kBAAkB;IAChC,iBAAiB,EAAE,kBAAkB;IACrC,WAAW,EAAE,kBAAkB;IAC/B,eAAe,EAAE,kBAAkB;IACnC,mBAAmB,EAAE,kBAAkB;IACvC,YAAY,EAAE,kBAAkB;IAChC,eAAe,EAAE,kBAAkB;CACpC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc,EAAE,KAAoB;IAC/D,MAAM,IAAI,GAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,KAQb,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,wGAAwG;IACxG,MAAM,MAAM,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,cAAc,IAAI,IAAI,KAAK,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;IACrH,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAoB,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrG,IAAI,KAAK,EAAE,oBAAoB,IAAI,KAAK,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3D,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,UAAU,CAAC,cAAc,EAAE,wCAAwC,MAAM,EAAE,EAAE,SAAS,EAAE;gBACjG,GAAG,OAAO;gBACV,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,cAAc,EAAE,oCAAoC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1G,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9D,OAAO,IAAI,UAAU,CAAC,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IACD,+EAA+E;IAC/E,0DAA0D;IAC1D,IACE,KAAK,EAAE,IAAI,KAAK,kBAAkB;QAClC,sEAAsE,CAAC,IAAI,CAAC,OAAO,CAAC,EACpF,CAAC;QACD,OAAO,IAAI,UAAU,CACnB,sBAAsB,EACtB,+BAA+B,MAAM,0IAA0I,EAC/K,SAAS,EACT,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CACvC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,sBAAsB,EAAE,+BAA+B,MAAM,EAAE,EAAE,SAAS,EAAE;QAChG,GAAG,OAAO;QACV,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;KAClD,CAAC,CAAC;AACL,CAAC;AAED,+FAA+F;AAC/F,SAAS,uBAAuB,CAAC,KAIhC;IACC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QACtC,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAoF,EACpF,aAAwC;IAExC,IAAI,KAAK,EAAE,cAAc,KAAK,KAAK;QAAE,OAAO,YAAY,CAAC;IACzD,IAAI,KAAK,EAAE,cAAc,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY;QAAE,OAAO,WAAW,CAAC;IAC9E,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC;AAClE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluxmail/provider-imap",
3
- "version": "0.19.1",
3
+ "version": "0.21.0",
4
4
  "description": "IMAP and SMTP adapter for the Fluxmail unified email API",
5
5
  "license": "Elastic-2.0",
6
6
  "repository": {
@@ -25,15 +25,15 @@
25
25
  "access": "public"
26
26
  },
27
27
  "dependencies": {
28
+ "@fluxmail/core": "0.21.0",
28
29
  "iconv-lite": "^0.7.3",
29
30
  "imapflow": "^1.4.7",
30
31
  "nodemailer": "^10.2.1",
31
- "postal-mime": "^2.7.5",
32
- "@fluxmail/core": "0.19.1"
32
+ "postal-mime": "^2.7.5"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.15.0",
36
- "@types/nodemailer": "^8.0.1"
36
+ "@types/nodemailer": "^8.0.2"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -p tsconfig.json",