@nocobase/plugin-workflow-mailer 2.2.16 → 2.2.18

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 (53) hide show
  1. package/dist/externalVersion.js +6 -6
  2. package/dist/node_modules/joi/dist/joi-browser.min.js +1 -1
  3. package/dist/node_modules/joi/lib/index.js +1 -1
  4. package/dist/node_modules/joi/lib/messages.js +35 -6
  5. package/dist/node_modules/joi/lib/types/keys.js +18 -1
  6. package/dist/node_modules/joi/lib/types/link.js +18 -2
  7. package/dist/node_modules/joi/lib/types/string.js +2 -2
  8. package/dist/node_modules/joi/package.json +1 -1
  9. package/dist/node_modules/nodemailer/.ncurc.js +2 -0
  10. package/dist/node_modules/nodemailer/.prettierignore +8 -0
  11. package/dist/node_modules/nodemailer/.prettierrc +12 -0
  12. package/dist/node_modules/nodemailer/.prettierrc.js +2 -0
  13. package/dist/node_modules/nodemailer/.release-please-config.json +9 -0
  14. package/dist/node_modules/nodemailer/eslint.config.js +88 -0
  15. package/dist/node_modules/nodemailer/lib/addressparser/index.js +314 -71
  16. package/dist/node_modules/nodemailer/lib/base64/index.js +9 -13
  17. package/dist/node_modules/nodemailer/lib/dkim/index.js +17 -18
  18. package/dist/node_modules/nodemailer/lib/dkim/message-parser.js +12 -13
  19. package/dist/node_modules/nodemailer/lib/dkim/relaxed-body.js +3 -3
  20. package/dist/node_modules/nodemailer/lib/dkim/sign.js +22 -18
  21. package/dist/node_modules/nodemailer/lib/errors.js +59 -0
  22. package/dist/node_modules/nodemailer/lib/fetch/cookies.js +14 -19
  23. package/dist/node_modules/nodemailer/lib/fetch/index.js +164 -27
  24. package/dist/node_modules/nodemailer/lib/json-transport/index.js +4 -4
  25. package/dist/node_modules/nodemailer/lib/mail-composer/index.js +229 -155
  26. package/dist/node_modules/nodemailer/lib/mailer/index.js +106 -54
  27. package/dist/node_modules/nodemailer/lib/mailer/mail-message.js +106 -68
  28. package/dist/node_modules/nodemailer/lib/mime-funcs/index.js +105 -59
  29. package/dist/node_modules/nodemailer/lib/mime-funcs/mime-types.js +21 -14
  30. package/dist/node_modules/nodemailer/lib/mime-node/index.js +389 -137
  31. package/dist/node_modules/nodemailer/lib/mime-node/last-newline.js +1 -1
  32. package/dist/node_modules/nodemailer/lib/mime-node/le-unix.js +4 -7
  33. package/dist/node_modules/nodemailer/lib/mime-node/le-windows.js +1 -4
  34. package/dist/node_modules/nodemailer/lib/nodemailer.js +1 -1
  35. package/dist/node_modules/nodemailer/lib/punycode/index.js +1 -1
  36. package/dist/node_modules/nodemailer/lib/qp/index.js +33 -22
  37. package/dist/node_modules/nodemailer/lib/sendmail-transport/index.js +54 -44
  38. package/dist/node_modules/nodemailer/lib/ses-transport/index.js +110 -193
  39. package/dist/node_modules/nodemailer/lib/shared/index.js +299 -240
  40. package/dist/node_modules/nodemailer/lib/shared/objects.js +42 -0
  41. package/dist/node_modules/nodemailer/lib/shared/url.js +151 -0
  42. package/dist/node_modules/nodemailer/lib/smtp-connection/data-stream.js +3 -6
  43. package/dist/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +50 -19
  44. package/dist/node_modules/nodemailer/lib/smtp-connection/index.js +415 -223
  45. package/dist/node_modules/nodemailer/lib/smtp-pool/index.js +27 -34
  46. package/dist/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +19 -16
  47. package/dist/node_modules/nodemailer/lib/smtp-transport/index.js +66 -53
  48. package/dist/node_modules/nodemailer/lib/stream-transport/index.js +16 -7
  49. package/dist/node_modules/nodemailer/lib/well-known/index.js +7 -7
  50. package/dist/node_modules/nodemailer/lib/well-known/services.json +328 -38
  51. package/dist/node_modules/nodemailer/lib/xoauth2/index.js +105 -33
  52. package/dist/node_modules/nodemailer/package.json +1 -1
  53. package/package.json +4 -4
@@ -37,11 +37,21 @@ exports.compile = function (messages, target) {
37
37
  if (code === 'root' ||
38
38
  Template.isTemplate(message)) {
39
39
 
40
+ // A flat code named __proto__ triggers the legacy accessor on plain-object assignment, and
41
+ // what we assign is always a Template, i.e. an object the accessor accepts, so it replaces
42
+ // target's own prototype instead of creating an own property. That in turn makes
43
+ // Template.isTemplate(target) true, so every code renders that one message
44
+
45
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
46
+
40
47
  target[code] = message;
41
48
  continue;
42
49
  }
43
50
 
44
51
  if (typeof message === 'string') {
52
+
53
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
54
+
45
55
  target[code] = new Template(message);
46
56
  continue;
47
57
  }
@@ -51,20 +61,26 @@ exports.compile = function (messages, target) {
51
61
  Assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);
52
62
 
53
63
  const language = code;
54
- target[language] = target[language] || {};
64
+
65
+ // Don't reuse an inherited object, otherwise a language named __proto__ or constructor writes on the prototype
66
+
67
+ const localizedTarget = Object.prototype.hasOwnProperty.call(target, language) ? target[language] : {};
68
+ target[language] = localizedTarget;
55
69
 
56
70
  for (code in message) {
57
71
  const localized = message[code];
58
72
 
73
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
74
+
59
75
  if (code === 'root' ||
60
76
  Template.isTemplate(localized)) {
61
77
 
62
- target[language][code] = localized;
78
+ localizedTarget[code] = localized;
63
79
  continue;
64
80
  }
65
81
 
66
82
  Assert(typeof localized === 'string', 'Invalid message for', code, 'in', language);
67
- target[language][code] = new Template(localized);
83
+ localizedTarget[code] = new Template(localized);
68
84
  }
69
85
  }
70
86
 
@@ -143,11 +159,18 @@ exports.merge = function (base, extended) {
143
159
  if (code === 'root' ||
144
160
  Template.isTemplate(message)) {
145
161
 
162
+ // Same as in compile(), a flat code named __proto__ replaces target's own prototype
163
+
164
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
165
+
146
166
  target[code] = message;
147
167
  continue;
148
168
  }
149
169
 
150
170
  if (typeof message === 'string') {
171
+
172
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
173
+
151
174
  target[code] = new Template(message);
152
175
  continue;
153
176
  }
@@ -157,20 +180,26 @@ exports.merge = function (base, extended) {
157
180
  Assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);
158
181
 
159
182
  const language = code;
160
- target[language] = target[language] || {};
183
+
184
+ // Same as in compile(), don't reuse an inherited object
185
+
186
+ const localizedTarget = Object.prototype.hasOwnProperty.call(target, language) ? target[language] : {};
187
+ target[language] = localizedTarget;
161
188
 
162
189
  for (code in message) {
163
190
  const localized = message[code];
164
191
 
192
+ Assert(code !== '__proto__', 'Cannot use __proto__ as a message code');
193
+
165
194
  if (code === 'root' ||
166
195
  Template.isTemplate(localized)) {
167
196
 
168
- target[language][code] = localized;
197
+ localizedTarget[code] = localized;
169
198
  continue;
170
199
  }
171
200
 
172
201
  Assert(typeof localized === 'string', 'Invalid message for', code, 'in', language);
173
- target[language][code] = new Template(localized);
202
+ localizedTarget[code] = new Template(localized);
174
203
  }
175
204
  }
176
205
 
@@ -547,6 +547,7 @@ module.exports = Any.extend({
547
547
  'object.regex': '{{#label}} must be a RegExp object',
548
548
  'object.rename.multiple': '{{#label}} cannot rename {{:#from}} because multiple renames are disabled and another key was already renamed to {{:#to}}',
549
549
  'object.rename.override': '{{#label}} cannot rename {{:#from}} because override is disabled and target {{:#to}} exists',
550
+ 'object.rename.proto': '{{#label}} cannot rename {{:#from}} because target {{:#to}} is a reserved key',
550
551
  'object.schema': '{{#label}} must be a Joi schema of {{#type}} type',
551
552
  'object.unknown': '{{#label}} is not allowed',
552
553
  'object.with': '{{:#mainWithLabel}} missing required peer {{:#peerWithLabel}}',
@@ -567,8 +568,15 @@ internals.clone = function (value, prefs) {
567
568
  return Clone(value, { shallow: true });
568
569
  }
569
570
 
570
- const clone = Object.create(Object.getPrototypeOf(value));
571
+ const proto = Object.getPrototypeOf(value);
572
+ const clone = Object.create(proto);
571
573
  Object.assign(clone, value);
574
+
575
+ // Restore the prototype in case of pre-existing prototype pollution
576
+ if (Object.getPrototypeOf(clone) !== proto) {
577
+ Object.setPrototypeOf(clone, proto);
578
+ }
579
+
572
580
  return clone;
573
581
  }
574
582
 
@@ -867,6 +875,15 @@ internals.rename = function (schema, value, state, prefs, errors) {
867
875
  }
868
876
  }
869
877
 
878
+ if (to === '__proto__') {
879
+ errors.push(schema.$_createError('object.rename.proto', value, { from, to, pattern }, state, prefs));
880
+ if (prefs.abortEarly) {
881
+ return false;
882
+ }
883
+
884
+ continue;
885
+ }
886
+
870
887
  if (value[from] === undefined) {
871
888
  delete value[to];
872
889
  }
@@ -29,13 +29,25 @@ module.exports = Any.extend({
29
29
  return schema.ref(ref);
30
30
  },
31
31
 
32
- validate(value, { schema, state, prefs }) {
32
+ validate(value, { schema, state, prefs, error }) {
33
33
 
34
34
  Assert(schema.$_terms.link, 'Uninitialized link schema');
35
35
 
36
36
  const linked = internals.generate(schema, value, state, prefs);
37
37
  const ref = schema.$_terms.link[0].ref;
38
- return linked.$_validate(value, state.nest(linked, `link:${ref.display}:${linked.type}`), prefs);
38
+
39
+ try {
40
+ return linked.$_validate(value, state.nest(linked, `link:${ref.display}:${linked.type}`), prefs);
41
+ }
42
+ catch (err) {
43
+ /* $lab:coverage:off$ */
44
+ if (!(err instanceof RangeError)) {
45
+ throw err;
46
+ }
47
+ /* $lab:coverage:on$ */
48
+
49
+ return { value, errors: error('link.depth') };
50
+ }
39
51
  },
40
52
 
41
53
  generate(schema, value, state, prefs) {
@@ -88,6 +100,10 @@ module.exports = Any.extend({
88
100
  }
89
101
  },
90
102
 
103
+ messages: {
104
+ 'link.depth': '{{#label}} exceeds maximum recursion depth supported by the runtime'
105
+ },
106
+
91
107
  manifest: {
92
108
 
93
109
  build(obj, desc) {
@@ -829,8 +829,8 @@ internals.isoDate = function (value) {
829
829
  return null;
830
830
  }
831
831
 
832
- if (/.*T.*[+-]\d\d$/.test(value)) { // Add missing trailing zeros to timeshift
833
- value += '00';
832
+ if (/T.*[+-]\d\d$/.test(value)) { // Add missing separator and trailing zeros to timeshift
833
+ value += ':00';
834
834
  }
835
835
 
836
836
  const date = new Date(value);
@@ -1 +1 @@
1
- {"name":"joi","description":"Object schema validation","version":"17.13.3","repository":"git://github.com/hapijs/joi","main":"lib/index.js","types":"lib/index.d.ts","browser":"dist/joi-browser.min.js","files":["lib/**/*","dist/*"],"keywords":["schema","validation"],"dependencies":{"@hapi/hoek":"^9.3.0","@hapi/topo":"^5.1.0","@sideway/address":"^4.1.5","@sideway/formula":"^3.0.1","@sideway/pinpoint":"^2.0.0"},"devDependencies":{"@hapi/bourne":"2.x.x","@hapi/code":"8.x.x","@hapi/joi-legacy-test":"npm:@hapi/joi@15.x.x","@hapi/lab":"^25.1.3","@types/node":"^14.18.63","typescript":"4.3.x"},"scripts":{"prepublishOnly":"cd browser && npm install && npm run build","test":"lab -t 100 -a @hapi/code -L -Y","test-cov-html":"lab -r html -o coverage.html -a @hapi/code"},"license":"BSD-3-Clause","_lastModified":"2026-09-21T01:35:20.327Z"}
1
+ {"name":"joi","description":"Object schema validation","version":"17.13.8","repository":"git://github.com/hapijs/joi","main":"lib/index.js","types":"lib/index.d.ts","browser":"dist/joi-browser.min.js","files":["lib/**/*","dist/*"],"keywords":["schema","validation"],"dependencies":{"@hapi/hoek":"^9.3.0","@hapi/topo":"^5.1.0","@sideway/address":"^4.1.5","@sideway/formula":"^3.0.1","@sideway/pinpoint":"^2.0.0"},"devDependencies":{"@hapi/bourne":"2.x.x","@hapi/code":"8.x.x","@hapi/joi-legacy-test":"npm:@hapi/joi@15.x.x","@hapi/lab":"^25.1.3","@types/node":"^14.18.63","typescript":"4.3.x"},"scripts":{"prepublishOnly":"cd browser && npm install && npm run build","test":"lab -t 100 -a @hapi/code -L -Y","test-cov-html":"lab -r html -o coverage.html -a @hapi/code"},"license":"BSD-3-Clause","_lastModified":"2026-09-25T14:54:18.030Z"}
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  module.exports = {
2
4
  upgrade: true,
3
5
  reject: [
@@ -0,0 +1,8 @@
1
+ node_modules
2
+ coverage
3
+ *.min.js
4
+ dist
5
+ build
6
+ .nyc_output
7
+ package-lock.json
8
+ CHANGELOG.md
@@ -0,0 +1,12 @@
1
+ {
2
+ "printWidth": 140,
3
+ "tabWidth": 4,
4
+ "useTabs": false,
5
+ "semi": true,
6
+ "singleQuote": true,
7
+ "quoteProps": "as-needed",
8
+ "trailingComma": "none",
9
+ "bracketSpacing": true,
10
+ "arrowParens": "avoid",
11
+ "endOfLine": "lf"
12
+ }
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  module.exports = {
2
4
  printWidth: 160,
3
5
  tabWidth: 4,
@@ -0,0 +1,9 @@
1
+ {
2
+ "packages": {
3
+ ".": {
4
+ "release-type": "node",
5
+ "package-name": "nodemailer",
6
+ "pull-request-title-pattern": "chore${scope}: release ${version} [skip-ci]"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ const globals = require('globals');
4
+
5
+ module.exports = [
6
+ {
7
+ ignores: ['node_modules/**', 'coverage/**', 'dist/**', 'build/**', '.nyc_output/**']
8
+ },
9
+ {
10
+ files: ['**/*.js'],
11
+ languageOptions: {
12
+ ecmaVersion: 2017,
13
+ sourceType: 'script',
14
+ globals: Object.assign({}, globals.node, globals.es2017, {
15
+ it: true,
16
+ describe: true,
17
+ beforeEach: true,
18
+ afterEach: true
19
+ })
20
+ },
21
+ rules: {
22
+ // Error detection
23
+ 'for-direction': 'error',
24
+ 'no-await-in-loop': 'error',
25
+ 'no-div-regex': 'error',
26
+ eqeqeq: 'error',
27
+ 'dot-notation': 'error',
28
+ curly: 'error',
29
+ 'no-fallthrough': 'error',
30
+ 'no-unused-expressions': [
31
+ 'error',
32
+ {
33
+ allowShortCircuit: true
34
+ }
35
+ ],
36
+ 'no-unused-vars': [
37
+ 'error',
38
+ {
39
+ varsIgnorePattern: '^_',
40
+ argsIgnorePattern: '^_',
41
+ caughtErrorsIgnorePattern: '^_'
42
+ }
43
+ ],
44
+ 'handle-callback-err': 'error',
45
+ 'no-new': 'error',
46
+ 'new-cap': 'error',
47
+ 'no-eval': 'error',
48
+ 'no-invalid-this': 'error',
49
+ radix: ['error', 'always'],
50
+ 'no-use-before-define': ['error', 'nofunc'],
51
+ 'callback-return': ['error', ['callback', 'cb', 'done']],
52
+ 'no-regex-spaces': 'error',
53
+ 'no-empty': 'error',
54
+ 'no-duplicate-case': 'error',
55
+ 'no-empty-character-class': 'error',
56
+ 'no-redeclare': 'off', // Disabled per project preference
57
+ 'block-scoped-var': 'error',
58
+ 'no-sequences': 'error',
59
+ 'no-throw-literal': 'error',
60
+ 'no-useless-call': 'error',
61
+ 'no-useless-concat': 'error',
62
+ 'no-void': 'error',
63
+ yoda: 'error',
64
+ 'no-undef': 'error',
65
+ 'global-require': 'error',
66
+ 'no-var': 'error',
67
+ 'no-bitwise': 'error',
68
+ 'no-lonely-if': 'error',
69
+ 'no-mixed-spaces-and-tabs': 'error',
70
+ 'arrow-body-style': ['error', 'as-needed'],
71
+ 'arrow-parens': ['error', 'as-needed'],
72
+ 'prefer-arrow-callback': 'error',
73
+ 'object-shorthand': 'error',
74
+ 'prefer-spread': 'error',
75
+ 'no-prototype-builtins': 'off', // Disabled per project preference
76
+ strict: ['error', 'global'],
77
+
78
+ // Disable all formatting rules (handled by Prettier)
79
+ indent: 'off',
80
+ quotes: 'off',
81
+ 'linebreak-style': 'off',
82
+ semi: 'off',
83
+ 'quote-props': 'off',
84
+ 'comma-dangle': 'off',
85
+ 'comma-style': 'off'
86
+ }
87
+ }
88
+ ];