@n8n/eslint-plugin-community-nodes 0.26.0 → 0.28.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.
Files changed (92) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/README.md +7 -1
  3. package/dist/plugin.d.ts +36 -0
  4. package/dist/plugin.d.ts.map +1 -1
  5. package/dist/plugin.js +12 -0
  6. package/dist/plugin.js.map +1 -1
  7. package/dist/rules/credential-password-field.d.ts.map +1 -1
  8. package/dist/rules/credential-password-field.js +3 -31
  9. package/dist/rules/credential-password-field.js.map +1 -1
  10. package/dist/rules/credential-unnecessary-password.d.ts +2 -0
  11. package/dist/rules/credential-unnecessary-password.d.ts.map +1 -0
  12. package/dist/rules/credential-unnecessary-password.js +54 -0
  13. package/dist/rules/credential-unnecessary-password.js.map +1 -0
  14. package/dist/rules/index.d.ts +7 -1
  15. package/dist/rules/index.d.ts.map +1 -1
  16. package/dist/rules/index.js +12 -0
  17. package/dist/rules/index.js.map +1 -1
  18. package/dist/rules/no-dead-files.d.ts +7 -0
  19. package/dist/rules/no-dead-files.d.ts.map +1 -0
  20. package/dist/rules/no-dead-files.js +57 -0
  21. package/dist/rules/no-dead-files.js.map +1 -0
  22. package/dist/rules/no-hardcoded-secrets.d.ts +2 -0
  23. package/dist/rules/no-hardcoded-secrets.d.ts.map +1 -0
  24. package/dist/rules/no-hardcoded-secrets.js +147 -0
  25. package/dist/rules/no-hardcoded-secrets.js.map +1 -0
  26. package/dist/rules/no-restricted-globals.d.ts +1 -1
  27. package/dist/rules/no-restricted-globals.d.ts.map +1 -1
  28. package/dist/rules/no-restricted-globals.js +18 -5
  29. package/dist/rules/no-restricted-globals.js.map +1 -1
  30. package/dist/rules/no-silent-error-swallowing.d.ts +2 -0
  31. package/dist/rules/no-silent-error-swallowing.d.ts.map +1 -0
  32. package/dist/rules/no-silent-error-swallowing.js +112 -0
  33. package/dist/rules/no-silent-error-swallowing.js.map +1 -0
  34. package/dist/rules/require-files-array.d.ts +2 -0
  35. package/dist/rules/require-files-array.d.ts.map +1 -0
  36. package/dist/rules/require-files-array.js +41 -0
  37. package/dist/rules/require-files-array.js.map +1 -0
  38. package/dist/rules/require-homepage.d.ts +2 -0
  39. package/dist/rules/require-homepage.d.ts.map +1 -0
  40. package/dist/rules/require-homepage.js +52 -0
  41. package/dist/rules/require-homepage.js.map +1 -0
  42. package/dist/rules/webhook-lifecycle-complete.d.ts.map +1 -1
  43. package/dist/rules/webhook-lifecycle-complete.js +2 -3
  44. package/dist/rules/webhook-lifecycle-complete.js.map +1 -1
  45. package/dist/typecheck.tsbuildinfo +1 -1
  46. package/dist/utils/constants.d.ts +5 -0
  47. package/dist/utils/constants.d.ts.map +1 -0
  48. package/dist/utils/constants.js +15 -0
  49. package/dist/utils/constants.js.map +1 -0
  50. package/dist/utils/credential-fields.d.ts +20 -0
  51. package/dist/utils/credential-fields.d.ts.map +1 -0
  52. package/dist/utils/credential-fields.js +45 -0
  53. package/dist/utils/credential-fields.js.map +1 -0
  54. package/dist/utils/file-utils.d.ts +6 -0
  55. package/dist/utils/file-utils.d.ts.map +1 -1
  56. package/dist/utils/file-utils.js +16 -0
  57. package/dist/utils/file-utils.js.map +1 -1
  58. package/dist/utils/index.d.ts +2 -0
  59. package/dist/utils/index.d.ts.map +1 -1
  60. package/dist/utils/index.js +2 -0
  61. package/dist/utils/index.js.map +1 -1
  62. package/docs/rules/credential-password-field.md +3 -1
  63. package/docs/rules/credential-unnecessary-password.md +46 -0
  64. package/docs/rules/no-dead-files.md +56 -0
  65. package/docs/rules/no-hardcoded-secrets.md +59 -0
  66. package/docs/rules/no-restricted-globals.md +14 -0
  67. package/docs/rules/no-silent-error-swallowing.md +72 -0
  68. package/docs/rules/require-files-array.md +43 -0
  69. package/docs/rules/require-homepage.md +49 -0
  70. package/package.json +2 -2
  71. package/src/plugin.ts +12 -0
  72. package/src/rules/credential-password-field.ts +4 -40
  73. package/src/rules/credential-unnecessary-password.test.ts +105 -0
  74. package/src/rules/credential-unnecessary-password.ts +72 -0
  75. package/src/rules/index.ts +12 -0
  76. package/src/rules/no-dead-files.test.ts +128 -0
  77. package/src/rules/no-dead-files.ts +71 -0
  78. package/src/rules/no-hardcoded-secrets.test.ts +124 -0
  79. package/src/rules/no-hardcoded-secrets.ts +161 -0
  80. package/src/rules/no-restricted-globals.test.ts +26 -2
  81. package/src/rules/no-restricted-globals.ts +22 -5
  82. package/src/rules/no-silent-error-swallowing.test.ts +245 -0
  83. package/src/rules/no-silent-error-swallowing.ts +127 -0
  84. package/src/rules/require-files-array.test.ts +57 -0
  85. package/src/rules/require-files-array.ts +50 -0
  86. package/src/rules/require-homepage.test.ts +80 -0
  87. package/src/rules/require-homepage.ts +59 -0
  88. package/src/rules/webhook-lifecycle-complete.ts +4 -5
  89. package/src/utils/constants.ts +21 -0
  90. package/src/utils/credential-fields.ts +57 -0
  91. package/src/utils/file-utils.ts +23 -0
  92. package/src/utils/index.ts +2 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > @n8n/eslint-plugin-community-nodes@0.26.0 build /home/runner/work/n8n/n8n/packages/@n8n/eslint-plugin-community-nodes
2
+ > @n8n/eslint-plugin-community-nodes@0.28.0 build /home/runner/work/n8n/n8n/packages/@n8n/eslint-plugin-community-nodes
3
3
  > tsc --project tsconfig.build.json
4
4
 
package/README.md CHANGED
@@ -50,8 +50,9 @@ export default [
50
50
  | [cred-class-field-icon-missing](docs/rules/cred-class-field-icon-missing.md) | Credential class must have an `icon` property defined | ✅ ☑️ | | | 💡 | |
51
51
  | [cred-class-oauth2-naming](docs/rules/cred-class-oauth2-naming.md) | OAuth2 credentials must include `OAuth2` in the class name, `name`, and `displayName` | ✅ ☑️ | | 🔧 | | |
52
52
  | [credential-documentation-url](docs/rules/credential-documentation-url.md) | Enforce valid credential documentationUrl format (URL or lowercase alphanumeric slug) | ✅ ☑️ | | 🔧 | | |
53
- | [credential-password-field](docs/rules/credential-password-field.md) | Ensure credential fields with sensitive names have typeOptions.password = true | ✅ ☑️ | | 🔧 | | |
53
+ | [credential-password-field](docs/rules/credential-password-field.md) | Ensure fields with sensitive names have typeOptions.password = true | ✅ ☑️ | | 🔧 | | |
54
54
  | [credential-test-required](docs/rules/credential-test-required.md) | Ensure credentials have a credential test | ✅ ☑️ | | | 💡 | |
55
+ | [credential-unnecessary-password](docs/rules/credential-unnecessary-password.md) | Warn when a credential field with no sensitive name uses typeOptions.password = true | | ✅ ☑️ | | | |
55
56
  | [icon-prefer-themed-variants](docs/rules/icon-prefer-themed-variants.md) | Encourage node and credential icons to provide light/dark variants instead of a single icon file | | ✅ ☑️ | | | |
56
57
  | [icon-validation](docs/rules/icon-validation.md) | Validate node and credential icon files exist, use the file: protocol, and that light/dark icons are different | ✅ ☑️ | | | 💡 | |
57
58
  | [missing-paired-item](docs/rules/missing-paired-item.md) | Require pairedItem on INodeExecutionData objects in execute() methods to preserve item linking. | ✅ ☑️ | | | | |
@@ -59,20 +60,25 @@ export default [
59
60
  | [no-builder-hint-leakage](docs/rules/no-builder-hint-leakage.md) | Disallow wire-format expression syntax (={{...}}) and NodeConnectionType string literals in builderHint texts and AI-builder prompts. Use expr() and SDK-canonical references instead. | ✅ ☑️ | | | | |
60
61
  | [no-credential-reuse](docs/rules/no-credential-reuse.md) | Prevent credential re-use security issues by ensuring nodes only reference credentials from the same package | ✅ ☑️ | | | 💡 | |
61
62
  | [no-dangerous-functions](docs/rules/no-dangerous-functions.md) | Disallow `eval`, the `Function` constructor, and `child_process` process-spawning functions (`exec`, `spawn`, etc.) in community nodes. | ✅ ☑️ | | | | |
63
+ | [no-dead-files](docs/rules/no-dead-files.md) | Disallow leftover backup, editor, and test-artifact files in the `nodes/` and `credentials/` directories of a community node package | | ✅ ☑️ | | | |
62
64
  | [no-deprecated-workflow-functions](docs/rules/no-deprecated-workflow-functions.md) | Disallow usage of deprecated functions and types from n8n-workflow package | ✅ ☑️ | | | 💡 | |
63
65
  | [no-emoji-in-options](docs/rules/no-emoji-in-options.md) | Disallow emoji characters in node option name and displayName values | ✅ ☑️ | | | | |
64
66
  | [no-forbidden-lifecycle-scripts](docs/rules/no-forbidden-lifecycle-scripts.md) | Ban lifecycle scripts (prepare, preinstall, postinstall, etc.) in community node packages | ✅ ☑️ | | | | |
67
+ | [no-hardcoded-secrets](docs/rules/no-hardcoded-secrets.md) | Disallow hardcoded secrets (API keys, tokens, passwords) embedded as string literals in source. | ✅ ☑️ | | | | |
65
68
  | [no-http-request-with-manual-auth](docs/rules/no-http-request-with-manual-auth.md) | Disallow this.helpers.httpRequest() in functions that call this.getCredentials(). Use this.helpers.httpRequestWithAuthentication() instead. | ✅ ☑️ | | | | |
66
69
  | [no-overrides-field](docs/rules/no-overrides-field.md) | Ban the "overrides" field in community node package.json | ✅ ☑️ | | | | |
67
70
  | [no-restricted-globals](docs/rules/no-restricted-globals.md) | Disallow usage of restricted global variables in community nodes. | ✅ | | | | |
68
71
  | [no-restricted-imports](docs/rules/no-restricted-imports.md) | Disallow usage of restricted imports in community nodes. | ✅ | | | | |
69
72
  | [no-runtime-dependencies](docs/rules/no-runtime-dependencies.md) | Disallow non-empty "dependencies" in community node package.json | ✅ ☑️ | | | | |
73
+ | [no-silent-error-swallowing](docs/rules/no-silent-error-swallowing.md) | Disallow webhook lifecycle methods (checkExists, create, delete) from silently swallowing errors in catch blocks | ✅ ☑️ | | | | |
70
74
  | [no-template-placeholders](docs/rules/no-template-placeholders.md) | Disallow unresolved template placeholders in package.json | ✅ ☑️ | | | | |
71
75
  | [node-class-description-icon-missing](docs/rules/node-class-description-icon-missing.md) | Node class description must have an `icon` property defined. Deprecated: use `require-node-description-fields` instead. | | | | 💡 | ❌ |
72
76
  | [node-connection-type-literal](docs/rules/node-connection-type-literal.md) | Disallow string literals in node description `inputs`/`outputs` — use `NodeConnectionTypes` enum instead | ✅ ☑️ | | 🔧 | | |
73
77
  | [node-registration-complete](docs/rules/node-registration-complete.md) | Ensure every `.node.ts` file in the `nodes/` directory is registered in the "n8n.nodes" array of package.json | | ✅ ☑️ | | | |
74
78
  | [node-usable-as-tool](docs/rules/node-usable-as-tool.md) | Ensure node classes have usableAsTool property | ✅ ☑️ | | 🔧 | | |
75
79
  | [package-name-convention](docs/rules/package-name-convention.md) | Enforce correct package naming convention for n8n community nodes | ✅ ☑️ | | | 💡 | |
80
+ | [require-files-array](docs/rules/require-files-array.md) | Require a non-empty "files" array in package.json | | ✅ ☑️ | | | |
81
+ | [require-homepage](docs/rules/require-homepage.md) | Require a "homepage" field with a valid URL in package.json | | ✅ ☑️ | | | |
76
82
  | [require-node-api-error](docs/rules/require-node-api-error.md) | Require NodeApiError or NodeOperationError for error wrapping in catch blocks. Raw errors lose HTTP context in the n8n UI. | ✅ ☑️ | | | | |
77
83
  | [require-node-description-fields](docs/rules/require-node-description-fields.md) | Node class description must define all required fields: icon, subtitle | ✅ ☑️ | | | | |
78
84
  | [require-version](docs/rules/require-version.md) | Require a valid "version" field in community node package.json | ✅ ☑️ | | | | |
package/dist/plugin.d.ts CHANGED
@@ -18,6 +18,7 @@ declare const configs: {
18
18
  '@n8n/community-nodes/no-restricted-globals': "error";
19
19
  '@n8n/community-nodes/no-restricted-imports': "error";
20
20
  '@n8n/community-nodes/credential-password-field': "error";
21
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
21
22
  '@n8n/community-nodes/n8n-object-validation': "error";
22
23
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
23
24
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -26,10 +27,13 @@ declare const configs: {
26
27
  '@n8n/community-nodes/credential-test-required': "error";
27
28
  '@n8n/community-nodes/no-credential-reuse': "error";
28
29
  '@n8n/community-nodes/no-dangerous-functions': "error";
30
+ '@n8n/community-nodes/no-dead-files': "warn";
29
31
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
32
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
30
33
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
31
34
  '@n8n/community-nodes/no-overrides-field': "error";
32
35
  '@n8n/community-nodes/no-runtime-dependencies': "error";
36
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
33
37
  '@n8n/community-nodes/no-template-placeholders': "error";
34
38
  '@n8n/community-nodes/icon-validation': "error";
35
39
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -42,6 +46,8 @@ declare const configs: {
42
46
  '@n8n/community-nodes/missing-paired-item': "error";
43
47
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
44
48
  '@n8n/community-nodes/node-registration-complete': "warn";
49
+ '@n8n/community-nodes/require-files-array': "warn";
50
+ '@n8n/community-nodes/require-homepage': "warn";
45
51
  '@n8n/community-nodes/require-node-api-error': "error";
46
52
  '@n8n/community-nodes/require-node-description-fields': "error";
47
53
  '@n8n/community-nodes/require-version': "error";
@@ -67,6 +73,7 @@ declare const configs: {
67
73
  rules: {
68
74
  '@n8n/community-nodes/ai-node-package-json': "error";
69
75
  '@n8n/community-nodes/credential-password-field': "error";
76
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
70
77
  '@n8n/community-nodes/n8n-object-validation': "error";
71
78
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
72
79
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -75,10 +82,13 @@ declare const configs: {
75
82
  '@n8n/community-nodes/credential-test-required': "error";
76
83
  '@n8n/community-nodes/no-credential-reuse': "error";
77
84
  '@n8n/community-nodes/no-dangerous-functions': "error";
85
+ '@n8n/community-nodes/no-dead-files': "warn";
78
86
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
87
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
79
88
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
80
89
  '@n8n/community-nodes/no-overrides-field': "error";
81
90
  '@n8n/community-nodes/no-runtime-dependencies': "error";
91
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
82
92
  '@n8n/community-nodes/no-template-placeholders': "error";
83
93
  '@n8n/community-nodes/icon-validation': "error";
84
94
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -91,6 +101,8 @@ declare const configs: {
91
101
  '@n8n/community-nodes/missing-paired-item': "error";
92
102
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
93
103
  '@n8n/community-nodes/node-registration-complete': "warn";
104
+ '@n8n/community-nodes/require-files-array': "warn";
105
+ '@n8n/community-nodes/require-homepage': "warn";
94
106
  '@n8n/community-nodes/require-node-api-error': "error";
95
107
  '@n8n/community-nodes/require-node-description-fields': "error";
96
108
  '@n8n/community-nodes/require-version': "error";
@@ -127,6 +139,7 @@ declare const pluginWithConfigs: {
127
139
  '@n8n/community-nodes/no-restricted-globals': "error";
128
140
  '@n8n/community-nodes/no-restricted-imports': "error";
129
141
  '@n8n/community-nodes/credential-password-field': "error";
142
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
130
143
  '@n8n/community-nodes/n8n-object-validation': "error";
131
144
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
132
145
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -135,10 +148,13 @@ declare const pluginWithConfigs: {
135
148
  '@n8n/community-nodes/credential-test-required': "error";
136
149
  '@n8n/community-nodes/no-credential-reuse': "error";
137
150
  '@n8n/community-nodes/no-dangerous-functions': "error";
151
+ '@n8n/community-nodes/no-dead-files': "warn";
138
152
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
153
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
139
154
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
140
155
  '@n8n/community-nodes/no-overrides-field': "error";
141
156
  '@n8n/community-nodes/no-runtime-dependencies': "error";
157
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
142
158
  '@n8n/community-nodes/no-template-placeholders': "error";
143
159
  '@n8n/community-nodes/icon-validation': "error";
144
160
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -151,6 +167,8 @@ declare const pluginWithConfigs: {
151
167
  '@n8n/community-nodes/missing-paired-item': "error";
152
168
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
153
169
  '@n8n/community-nodes/node-registration-complete': "warn";
170
+ '@n8n/community-nodes/require-files-array': "warn";
171
+ '@n8n/community-nodes/require-homepage': "warn";
154
172
  '@n8n/community-nodes/require-node-api-error': "error";
155
173
  '@n8n/community-nodes/require-node-description-fields': "error";
156
174
  '@n8n/community-nodes/require-version': "error";
@@ -176,6 +194,7 @@ declare const pluginWithConfigs: {
176
194
  rules: {
177
195
  '@n8n/community-nodes/ai-node-package-json': "error";
178
196
  '@n8n/community-nodes/credential-password-field': "error";
197
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
179
198
  '@n8n/community-nodes/n8n-object-validation': "error";
180
199
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
181
200
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -184,10 +203,13 @@ declare const pluginWithConfigs: {
184
203
  '@n8n/community-nodes/credential-test-required': "error";
185
204
  '@n8n/community-nodes/no-credential-reuse': "error";
186
205
  '@n8n/community-nodes/no-dangerous-functions': "error";
206
+ '@n8n/community-nodes/no-dead-files': "warn";
187
207
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
208
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
188
209
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
189
210
  '@n8n/community-nodes/no-overrides-field': "error";
190
211
  '@n8n/community-nodes/no-runtime-dependencies': "error";
212
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
191
213
  '@n8n/community-nodes/no-template-placeholders': "error";
192
214
  '@n8n/community-nodes/icon-validation': "error";
193
215
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -200,6 +222,8 @@ declare const pluginWithConfigs: {
200
222
  '@n8n/community-nodes/missing-paired-item': "error";
201
223
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
202
224
  '@n8n/community-nodes/node-registration-complete': "warn";
225
+ '@n8n/community-nodes/require-files-array': "warn";
226
+ '@n8n/community-nodes/require-homepage': "warn";
203
227
  '@n8n/community-nodes/require-node-api-error': "error";
204
228
  '@n8n/community-nodes/require-node-description-fields': "error";
205
229
  '@n8n/community-nodes/require-version': "error";
@@ -237,6 +261,7 @@ declare const n8nCommunityNodesPlugin: {
237
261
  '@n8n/community-nodes/no-restricted-globals': "error";
238
262
  '@n8n/community-nodes/no-restricted-imports': "error";
239
263
  '@n8n/community-nodes/credential-password-field': "error";
264
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
240
265
  '@n8n/community-nodes/n8n-object-validation': "error";
241
266
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
242
267
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -245,10 +270,13 @@ declare const n8nCommunityNodesPlugin: {
245
270
  '@n8n/community-nodes/credential-test-required': "error";
246
271
  '@n8n/community-nodes/no-credential-reuse': "error";
247
272
  '@n8n/community-nodes/no-dangerous-functions': "error";
273
+ '@n8n/community-nodes/no-dead-files': "warn";
248
274
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
275
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
249
276
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
250
277
  '@n8n/community-nodes/no-overrides-field': "error";
251
278
  '@n8n/community-nodes/no-runtime-dependencies': "error";
279
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
252
280
  '@n8n/community-nodes/no-template-placeholders': "error";
253
281
  '@n8n/community-nodes/icon-validation': "error";
254
282
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -261,6 +289,8 @@ declare const n8nCommunityNodesPlugin: {
261
289
  '@n8n/community-nodes/missing-paired-item': "error";
262
290
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
263
291
  '@n8n/community-nodes/node-registration-complete': "warn";
292
+ '@n8n/community-nodes/require-files-array': "warn";
293
+ '@n8n/community-nodes/require-homepage': "warn";
264
294
  '@n8n/community-nodes/require-node-api-error': "error";
265
295
  '@n8n/community-nodes/require-node-description-fields': "error";
266
296
  '@n8n/community-nodes/require-version': "error";
@@ -286,6 +316,7 @@ declare const n8nCommunityNodesPlugin: {
286
316
  rules: {
287
317
  '@n8n/community-nodes/ai-node-package-json': "error";
288
318
  '@n8n/community-nodes/credential-password-field': "error";
319
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
289
320
  '@n8n/community-nodes/n8n-object-validation': "error";
290
321
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
291
322
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -294,10 +325,13 @@ declare const n8nCommunityNodesPlugin: {
294
325
  '@n8n/community-nodes/credential-test-required': "error";
295
326
  '@n8n/community-nodes/no-credential-reuse': "error";
296
327
  '@n8n/community-nodes/no-dangerous-functions': "error";
328
+ '@n8n/community-nodes/no-dead-files': "warn";
297
329
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
330
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
298
331
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
299
332
  '@n8n/community-nodes/no-overrides-field': "error";
300
333
  '@n8n/community-nodes/no-runtime-dependencies': "error";
334
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
301
335
  '@n8n/community-nodes/no-template-placeholders': "error";
302
336
  '@n8n/community-nodes/icon-validation': "error";
303
337
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -310,6 +344,8 @@ declare const n8nCommunityNodesPlugin: {
310
344
  '@n8n/community-nodes/missing-paired-item': "error";
311
345
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
312
346
  '@n8n/community-nodes/node-registration-complete': "warn";
347
+ '@n8n/community-nodes/require-files-array': "warn";
348
+ '@n8n/community-nodes/require-homepage': "warn";
313
349
  '@n8n/community-nodes/require-node-api-error': "error";
314
350
  '@n8n/community-nodes/require-node-description-fields': "error";
315
351
  '@n8n/community-nodes/require-version': "error";
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAYzC,QAAA,MAAM,OAAO;;;;YAIV,sBAAsB;;oBAZvB,IAAI;oBACJ,OAAO;oBACP,SAAS;;uBAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAmDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCgB,CAAC;AAE1C,QAAA,MAAM,iBAAiB;;QAjGrB,IAAI;QACJ,OAAO;QACP,SAAS;;WAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;gBAOpC,sBAAsB;;wBAZvB,IAAI;wBACJ,OAAO;wBACP,SAAS;;2BAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAmDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC+C,CAAC;AAEzE,QAAA,MAAM,uBAAuB;;QAnG3B,IAAI;QACJ,OAAO;QACP,SAAS;;WAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;gBAOpC,sBAAsB;;wBAZvB,IAAI;wBACJ,OAAO;wBACP,SAAS;;2BAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAmDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CwB,CAAC;eACnC,iBAAiB;AAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAYzC,QAAA,MAAM,OAAO;;;;YAIV,sBAAsB;;oBAZvB,IAAI;oBACJ,OAAO;oBACP,SAAS;;uBAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAyDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CgB,CAAC;AAE1C,QAAA,MAAM,iBAAiB;;QA7GrB,IAAI;QACJ,OAAO;QACP,SAAS;;WAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;gBAOpC,sBAAsB;;wBAZvB,IAAI;wBACJ,OAAO;wBACP,SAAS;;2BAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAyDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C+C,CAAC;AAEzE,QAAA,MAAM,uBAAuB;;QA/G3B,IAAI;QACJ,OAAO;QACP,SAAS;;WAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;gBAOpC,sBAAsB;;wBAZvB,IAAI;wBACJ,OAAO;wBACP,SAAS;;2BAGM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAyDpC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDwB,CAAC;eACnC,iBAAiB;AAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
package/dist/plugin.js CHANGED
@@ -20,6 +20,7 @@ const configs = {
20
20
  '@n8n/community-nodes/no-restricted-globals': 'error',
21
21
  '@n8n/community-nodes/no-restricted-imports': 'error',
22
22
  '@n8n/community-nodes/credential-password-field': 'error',
23
+ '@n8n/community-nodes/credential-unnecessary-password': 'warn',
23
24
  '@n8n/community-nodes/n8n-object-validation': 'error',
24
25
  '@n8n/community-nodes/no-deprecated-workflow-functions': 'error',
25
26
  '@n8n/community-nodes/no-emoji-in-options': 'error',
@@ -28,10 +29,13 @@ const configs = {
28
29
  '@n8n/community-nodes/credential-test-required': 'error',
29
30
  '@n8n/community-nodes/no-credential-reuse': 'error',
30
31
  '@n8n/community-nodes/no-dangerous-functions': 'error',
32
+ '@n8n/community-nodes/no-dead-files': 'warn',
31
33
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': 'error',
34
+ '@n8n/community-nodes/no-hardcoded-secrets': 'error',
32
35
  '@n8n/community-nodes/no-http-request-with-manual-auth': 'error',
33
36
  '@n8n/community-nodes/no-overrides-field': 'error',
34
37
  '@n8n/community-nodes/no-runtime-dependencies': 'error',
38
+ '@n8n/community-nodes/no-silent-error-swallowing': 'error',
35
39
  '@n8n/community-nodes/no-template-placeholders': 'error',
36
40
  '@n8n/community-nodes/icon-validation': 'error',
37
41
  '@n8n/community-nodes/icon-prefer-themed-variants': 'warn',
@@ -44,6 +48,8 @@ const configs = {
44
48
  '@n8n/community-nodes/missing-paired-item': 'error',
45
49
  '@n8n/community-nodes/no-builder-hint-leakage': 'error',
46
50
  '@n8n/community-nodes/node-registration-complete': 'warn',
51
+ '@n8n/community-nodes/require-files-array': 'warn',
52
+ '@n8n/community-nodes/require-homepage': 'warn',
47
53
  '@n8n/community-nodes/require-node-api-error': 'error',
48
54
  '@n8n/community-nodes/require-node-description-fields': 'error',
49
55
  '@n8n/community-nodes/require-version': 'error',
@@ -62,6 +68,7 @@ const configs = {
62
68
  rules: {
63
69
  '@n8n/community-nodes/ai-node-package-json': 'error',
64
70
  '@n8n/community-nodes/credential-password-field': 'error',
71
+ '@n8n/community-nodes/credential-unnecessary-password': 'warn',
65
72
  '@n8n/community-nodes/n8n-object-validation': 'error',
66
73
  '@n8n/community-nodes/no-deprecated-workflow-functions': 'error',
67
74
  '@n8n/community-nodes/no-emoji-in-options': 'error',
@@ -70,10 +77,13 @@ const configs = {
70
77
  '@n8n/community-nodes/credential-test-required': 'error',
71
78
  '@n8n/community-nodes/no-credential-reuse': 'error',
72
79
  '@n8n/community-nodes/no-dangerous-functions': 'error',
80
+ '@n8n/community-nodes/no-dead-files': 'warn',
73
81
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': 'error',
82
+ '@n8n/community-nodes/no-hardcoded-secrets': 'error',
74
83
  '@n8n/community-nodes/no-http-request-with-manual-auth': 'error',
75
84
  '@n8n/community-nodes/no-overrides-field': 'error',
76
85
  '@n8n/community-nodes/no-runtime-dependencies': 'error',
86
+ '@n8n/community-nodes/no-silent-error-swallowing': 'error',
77
87
  '@n8n/community-nodes/no-template-placeholders': 'error',
78
88
  '@n8n/community-nodes/icon-validation': 'error',
79
89
  '@n8n/community-nodes/icon-prefer-themed-variants': 'warn',
@@ -86,6 +96,8 @@ const configs = {
86
96
  '@n8n/community-nodes/missing-paired-item': 'error',
87
97
  '@n8n/community-nodes/no-builder-hint-leakage': 'error',
88
98
  '@n8n/community-nodes/node-registration-complete': 'warn',
99
+ '@n8n/community-nodes/require-files-array': 'warn',
100
+ '@n8n/community-nodes/require-homepage': 'warn',
89
101
  '@n8n/community-nodes/require-node-api-error': 'error',
90
102
  '@n8n/community-nodes/require-node-description-fields': 'error',
91
103
  '@n8n/community-nodes/require-version': 'error',
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,MAAM,GAAG;IACd,IAAI,EAAE;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,sBAAsB;KACjC;IACD,8EAA8E;IAC9E,KAAK,EAAE,KAA+B;CACd,CAAC;AAE1B,MAAM,OAAO,GAAG;IACf,WAAW,EAAE;QACZ,OAAO,EAAE,CAAC,+BAA+B,CAAC;QAC1C,OAAO,EAAE;YACR,sBAAsB,EAAE,MAAM;SAC9B;QACD,KAAK,EAAE;YACN,2CAA2C,EAAE,OAAO;YACpD,4CAA4C,EAAE,OAAO;YACrD,4CAA4C,EAAE,OAAO;YACrD,gDAAgD,EAAE,OAAO;YACzD,4CAA4C,EAAE,OAAO;YACrD,uDAAuD,EAAE,OAAO;YAChE,0CAA0C,EAAE,OAAO;YACnD,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,0CAA0C,EAAE,OAAO;YACnD,6CAA6C,EAAE,OAAO;YACtD,qDAAqD,EAAE,OAAO;YAC9D,uDAAuD,EAAE,OAAO;YAChE,yCAAyC,EAAE,OAAO;YAClD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,sCAAsC,EAAE,OAAO;YAC/C,kDAAkD,EAAE,MAAM;YAC1D,iDAAiD,EAAE,MAAM;YACzD,+CAA+C,EAAE,OAAO;YACxD,mDAAmD,EAAE,OAAO;YAC5D,oDAAoD,EAAE,OAAO;YAC7D,+CAA+C,EAAE,OAAO;YACxD,mDAAmD,EAAE,OAAO;YAC5D,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,MAAM;YACzD,6CAA6C,EAAE,OAAO;YACtD,sDAAsD,EAAE,OAAO;YAC/D,sCAAsC,EAAE,OAAO;YAC/C,mCAAmC,EAAE,OAAO;YAC5C,kDAAkD,EAAE,OAAO;YAC3D,wCAAwC,EAAE,OAAO;YACjD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,OAAO;SAC1D;KACD;IACD,iCAAiC,EAAE;QAClC,OAAO,EAAE,CAAC,+BAA+B,CAAC;QAC1C,OAAO,EAAE;YACR,sBAAsB,EAAE,MAAM;SAC9B;QACD,KAAK,EAAE;YACN,2CAA2C,EAAE,OAAO;YACpD,gDAAgD,EAAE,OAAO;YACzD,4CAA4C,EAAE,OAAO;YACrD,uDAAuD,EAAE,OAAO;YAChE,0CAA0C,EAAE,OAAO;YACnD,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,0CAA0C,EAAE,OAAO;YACnD,6CAA6C,EAAE,OAAO;YACtD,qDAAqD,EAAE,OAAO;YAC9D,uDAAuD,EAAE,OAAO;YAChE,yCAAyC,EAAE,OAAO;YAClD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,sCAAsC,EAAE,OAAO;YAC/C,kDAAkD,EAAE,MAAM;YAC1D,mDAAmD,EAAE,OAAO;YAC5D,iDAAiD,EAAE,MAAM;YACzD,+CAA+C,EAAE,OAAO;YACxD,oDAAoD,EAAE,OAAO;YAC7D,+CAA+C,EAAE,OAAO;YACxD,mDAAmD,EAAE,OAAO;YAC5D,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,MAAM;YACzD,6CAA6C,EAAE,OAAO;YACtD,sDAAsD,EAAE,OAAO;YAC/D,sCAAsC,EAAE,OAAO;YAC/C,mCAAmC,EAAE,OAAO;YAC5C,kDAAkD,EAAE,OAAO;YAC3D,wCAAwC,EAAE,OAAO;YACjD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,OAAO;SAC1D;KACD;CACuC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAA0B,CAAC;AAEzE,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAClD,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"credential-password-field.d.ts","sourceRoot":"","sources":["../../src/rules/credential-password-field.ts"],"names":[],"mappings":"AAoFA,eAAO,MAAM,2BAA2B,0JAwDtC,CAAC"}
1
+ {"version":3,"file":"credential-password-field.d.ts","sourceRoot":"","sources":["../../src/rules/credential-password-field.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,2BAA2B,0JAwDtC,CAAC"}
@@ -1,33 +1,5 @@
1
1
  import { TSESTree } from '@typescript-eslint/utils';
2
- import { isCredentialTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, getBooleanLiteralValue, createRule, } from '../utils/index.js';
3
- const SENSITIVE_PATTERNS = [
4
- 'password',
5
- 'secret',
6
- 'token',
7
- 'cert',
8
- 'passphrase',
9
- 'apikey',
10
- 'secretkey',
11
- 'privatekey',
12
- 'authkey',
13
- ];
14
- const NON_SENSITIVE_PATTERNS = ['url', 'pub', 'id'];
15
- function isSensitiveFieldName(name) {
16
- const lowerName = name.toLowerCase();
17
- if (NON_SENSITIVE_PATTERNS.some((pattern) => lowerName.includes(pattern))) {
18
- return false;
19
- }
20
- return SENSITIVE_PATTERNS.some((pattern) => lowerName.includes(pattern));
21
- }
22
- function hasPasswordTypeOption(element) {
23
- const typeOptionsProperty = findObjectProperty(element, 'typeOptions');
24
- if (typeOptionsProperty?.value.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
25
- return false;
26
- }
27
- const passwordProperty = findObjectProperty(typeOptionsProperty.value, 'password');
28
- const passwordValue = passwordProperty ? getBooleanLiteralValue(passwordProperty.value) : null;
29
- return passwordValue === true;
30
- }
2
+ import { isCredentialTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isSensitiveName, hasPasswordTypeOption, createRule, } from '../utils/index.js';
31
3
  function createPasswordFix(element, typeOptionsProperty) {
32
4
  return (fixer) => {
33
5
  if (typeOptionsProperty?.value.type === TSESTree.AST_NODE_TYPES.ObjectExpression) {
@@ -62,7 +34,7 @@ export const CredentialPasswordFieldRule = createRule({
62
34
  meta: {
63
35
  type: 'problem',
64
36
  docs: {
65
- description: 'Ensure credential fields with sensitive names have typeOptions.password = true',
37
+ description: 'Ensure fields with sensitive names have typeOptions.password = true',
66
38
  },
67
39
  messages: {
68
40
  missingPasswordOption: "Field '{{ fieldName }}' appears to be a sensitive field but is missing 'typeOptions: { password: true }'",
@@ -88,7 +60,7 @@ export const CredentialPasswordFieldRule = createRule({
88
60
  }
89
61
  const nameProperty = findObjectProperty(element, 'name');
90
62
  const fieldName = nameProperty ? getStringLiteralValue(nameProperty.value) : null;
91
- if (!fieldName || !isSensitiveFieldName(fieldName)) {
63
+ if (!fieldName || !isSensitiveName(fieldName)) {
92
64
  continue;
93
65
  }
94
66
  if (!hasPasswordTypeOption(element)) {
@@ -1 +1 @@
1
- {"version":3,"file":"credential-password-field.js","sourceRoot":"","sources":["../../src/rules/credential-password-field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credential-password-field.js","sourceRoot":"","sources":["../../src/rules/credential-password-field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const CredentialUnnecessaryPasswordRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"unnecessaryPasswordOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ //# sourceMappingURL=credential-unnecessary-password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-unnecessary-password.d.ts","sourceRoot":"","sources":["../../src/rules/credential-unnecessary-password.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,iCAAiC,8JA2D5C,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
+ import { isCredentialTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isSensitiveName, hasPasswordTypeOption, createRule, } from '../utils/index.js';
3
+ export const CredentialUnnecessaryPasswordRule = createRule({
4
+ name: 'credential-unnecessary-password',
5
+ meta: {
6
+ type: 'suggestion',
7
+ docs: {
8
+ description: 'Warn when a credential field with no sensitive name uses typeOptions.password = true',
9
+ },
10
+ messages: {
11
+ unnecessaryPasswordOption: "Field '{{ fieldName }}' does not appear to be sensitive but uses 'typeOptions: { password: true }'. Remove it unless the field holds a secret",
12
+ },
13
+ schema: [],
14
+ },
15
+ defaultOptions: [],
16
+ create(context) {
17
+ return {
18
+ ClassDeclaration(node) {
19
+ if (!isCredentialTypeClass(node)) {
20
+ return;
21
+ }
22
+ const propertiesProperty = findClassProperty(node, 'properties');
23
+ if (!propertiesProperty?.value ||
24
+ propertiesProperty.value.type !== TSESTree.AST_NODE_TYPES.ArrayExpression) {
25
+ return;
26
+ }
27
+ for (const element of propertiesProperty.value.elements) {
28
+ if (element?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
29
+ continue;
30
+ }
31
+ const nameProperty = findObjectProperty(element, 'name');
32
+ const fieldName = nameProperty ? getStringLiteralValue(nameProperty.value) : null;
33
+ if (!fieldName || !hasPasswordTypeOption(element)) {
34
+ continue;
35
+ }
36
+ // Only flag a masked field when its name carries no sensitive marker at all.
37
+ // We check with `exclusions: []` (raw patterns, no URL/ID/pub exclusions) so a
38
+ // real secret like `androidToken` — non-sensitive under the default exclusions
39
+ // only because it contains the substring `id` — is not wrongly flagged.
40
+ // Reported without a fix: removing masking could still be wrong for an
41
+ // unlisted secret name, so the author confirms.
42
+ if (!isSensitiveName(fieldName, { exclusions: [] })) {
43
+ context.report({
44
+ node: element,
45
+ messageId: 'unnecessaryPasswordOption',
46
+ data: { fieldName },
47
+ });
48
+ }
49
+ }
50
+ },
51
+ };
52
+ },
53
+ });
54
+ //# sourceMappingURL=credential-unnecessary-password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-unnecessary-password.js","sourceRoot":"","sources":["../../src/rules/credential-unnecessary-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;IAC3D,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACL,WAAW,EACV,sFAAsF;SACvF;QACD,QAAQ,EAAE;YACT,yBAAyB,EACxB,+IAA+I;SAChJ;QACD,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,OAAO;YACN,gBAAgB,CAAC,IAAI;gBACpB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO;gBACR,CAAC;gBAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACjE,IACC,CAAC,kBAAkB,EAAE,KAAK;oBAC1B,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,eAAe,EACxE,CAAC;oBACF,OAAO;gBACR,CAAC;gBAED,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACzD,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;wBAChE,SAAS;oBACV,CAAC;oBAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAElF,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;wBACnD,SAAS;oBACV,CAAC;oBAED,6EAA6E;oBAC7E,+EAA+E;oBAC/E,+EAA+E;oBAC/E,wEAAwE;oBACxE,uEAAuE;oBACvE,gDAAgD;oBAChD,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;wBACrD,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE,2BAA2B;4BACtC,IAAI,EAAE,EAAE,SAAS,EAAE;yBACnB,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export declare const rules: {
2
2
  'ai-node-package-json': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidSdkVersion" | "missingPeerDep" | "missingSdkVersion" | "wrongLocation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
- 'no-restricted-globals': import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedGlobal", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
3
+ 'no-restricted-globals': import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedGlobal" | "restrictedGlobalWithHint", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
4
4
  'no-restricted-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedDynamicImport" | "restrictedImport" | "restrictedRequire", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
5
5
  'credential-password-field': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingPasswordOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
6
  'no-deprecated-workflow-functions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFunction" | "deprecatedRequestFunction" | "deprecatedType" | "deprecatedWithoutReplacement" | "suggestReplaceFunction" | "suggestReplaceType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -8,12 +8,16 @@ export declare const rules: {
8
8
  'node-usable-as-tool': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingUsableAsTool", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
9
  'package-name-convention': import("@typescript-eslint/utils/ts-eslint").RuleModule<"defaultPlaceholderName" | "invalidPackageName" | "missingName" | "renameTo", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
10
10
  'credential-test-required': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addTemplate" | "missingCredentialTest", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
11
+ 'credential-unnecessary-password': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unnecessaryPasswordOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
11
12
  'no-credential-reuse': import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialNotInPackage" | "didYouMean" | "useAvailable", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
12
13
  'no-dangerous-functions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noChildProcess" | "noEval" | "noFunctionConstructor", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
14
+ 'no-dead-files': import("@typescript-eslint/utils/ts-eslint").RuleModule<"deadFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
13
15
  'no-forbidden-lifecycle-scripts': import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenScript", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
16
+ 'no-hardcoded-secrets': import("@typescript-eslint/utils/ts-eslint").RuleModule<"hardcodedSecret", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
14
17
  'no-http-request-with-manual-auth': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useHttpRequestWithAuthentication", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
15
18
  'no-overrides-field': import("@typescript-eslint/utils/ts-eslint").RuleModule<"overridesForbidden", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
16
19
  'no-runtime-dependencies': import("@typescript-eslint/utils/ts-eslint").RuleModule<"runtimeDependenciesForbidden", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
20
+ 'no-silent-error-swallowing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"emptyCatch" | "silentReturn", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
17
21
  'no-template-placeholders': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unresolvedPlaceholder", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
18
22
  'icon-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addFileProtocol" | "addPlaceholder" | "iconFileNotFound" | "invalidIconPath" | "lightDarkSame" | "missingIcon" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
19
23
  'icon-prefer-themed-variants': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingThemedVariants", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -33,6 +37,8 @@ export declare const rules: {
33
37
  scope?: 'builderHint' | 'all';
34
38
  }], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
35
39
  'n8n-object-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialPathNotInDist" | "credentialPathNotString" | "emptyN8nNodes" | "invalidNodesApiVersion" | "invalidStrict" | "missingN8nNodes" | "missingN8nObject" | "missingNodesApiVersion" | "n8nCredentialsNotArray" | "n8nNodesNotArray" | "nodePathNotInDist" | "nodePathNotString" | "wrongLocationApiVersion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
40
+ 'require-files-array': import("@typescript-eslint/utils/ts-eslint").RuleModule<"filesEmpty" | "filesMissing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
41
+ 'require-homepage': import("@typescript-eslint/utils/ts-eslint").RuleModule<"homepageInvalid" | "homepageMissing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
36
42
  'require-node-api-error': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useNodeApiError" | "useNodeApiErrorInsteadOfGeneric", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
37
43
  'require-node-description-fields': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingField" | "missingFields", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
38
44
  'require-version': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidVersion" | "missingVersion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CuB,CAAC"}
@@ -4,6 +4,7 @@ import { CredClassOAuth2NamingRule } from './cred-class-oauth2-naming.js';
4
4
  import { CredentialDocumentationUrlRule } from './credential-documentation-url.js';
5
5
  import { CredentialPasswordFieldRule } from './credential-password-field.js';
6
6
  import { CredentialTestRequiredRule } from './credential-test-required.js';
7
+ import { CredentialUnnecessaryPasswordRule } from './credential-unnecessary-password.js';
7
8
  import { IconPreferThemedVariantsRule } from './icon-prefer-themed-variants.js';
8
9
  import { IconValidationRule } from './icon-validation.js';
9
10
  import { MissingPairedItemRule } from './missing-paired-item.js';
@@ -11,20 +12,25 @@ import { N8nObjectValidationRule } from './n8n-object-validation.js';
11
12
  import { NoBuilderHintLeakageRule } from './no-builder-hint-leakage.js';
12
13
  import { NoCredentialReuseRule } from './no-credential-reuse.js';
13
14
  import { NoDangerousFunctionsRule } from './no-dangerous-functions.js';
15
+ import { NoDeadFilesRule } from './no-dead-files.js';
14
16
  import { NoDeprecatedWorkflowFunctionsRule } from './no-deprecated-workflow-functions.js';
15
17
  import { NoEmojiInOptionsRule } from './no-emoji-in-options.js';
16
18
  import { NoForbiddenLifecycleScriptsRule } from './no-forbidden-lifecycle-scripts.js';
19
+ import { NoHardcodedSecretsRule } from './no-hardcoded-secrets.js';
17
20
  import { NoHttpRequestWithManualAuthRule } from './no-http-request-with-manual-auth.js';
18
21
  import { NoOverridesFieldRule } from './no-overrides-field.js';
19
22
  import { NoRestrictedGlobalsRule } from './no-restricted-globals.js';
20
23
  import { NoRestrictedImportsRule } from './no-restricted-imports.js';
21
24
  import { NoRuntimeDependenciesRule } from './no-runtime-dependencies.js';
25
+ import { NoSilentErrorSwallowingRule } from './no-silent-error-swallowing.js';
22
26
  import { NoTemplatePlaceholdersRule } from './no-template-placeholders.js';
23
27
  import { NodeClassDescriptionIconMissingRule } from './node-class-description-icon-missing.js';
24
28
  import { NodeConnectionTypeLiteralRule } from './node-connection-type-literal.js';
25
29
  import { NodeRegistrationCompleteRule } from './node-registration-complete.js';
26
30
  import { NodeUsableAsToolRule } from './node-usable-as-tool.js';
27
31
  import { PackageNameConventionRule } from './package-name-convention.js';
32
+ import { RequireFilesArrayRule } from './require-files-array.js';
33
+ import { RequireHomepageRule } from './require-homepage.js';
28
34
  import { RequireNodeApiErrorRule } from './require-node-api-error.js';
29
35
  import { RequireNodeDescriptionFieldsRule } from './require-node-description-fields.js';
30
36
  import { RequireVersionRule } from './require-version.js';
@@ -45,12 +51,16 @@ export const rules = {
45
51
  'node-usable-as-tool': NodeUsableAsToolRule,
46
52
  'package-name-convention': PackageNameConventionRule,
47
53
  'credential-test-required': CredentialTestRequiredRule,
54
+ 'credential-unnecessary-password': CredentialUnnecessaryPasswordRule,
48
55
  'no-credential-reuse': NoCredentialReuseRule,
49
56
  'no-dangerous-functions': NoDangerousFunctionsRule,
57
+ 'no-dead-files': NoDeadFilesRule,
50
58
  'no-forbidden-lifecycle-scripts': NoForbiddenLifecycleScriptsRule,
59
+ 'no-hardcoded-secrets': NoHardcodedSecretsRule,
51
60
  'no-http-request-with-manual-auth': NoHttpRequestWithManualAuthRule,
52
61
  'no-overrides-field': NoOverridesFieldRule,
53
62
  'no-runtime-dependencies': NoRuntimeDependenciesRule,
63
+ 'no-silent-error-swallowing': NoSilentErrorSwallowingRule,
54
64
  'no-template-placeholders': NoTemplatePlaceholdersRule,
55
65
  'icon-validation': IconValidationRule,
56
66
  'icon-prefer-themed-variants': IconPreferThemedVariantsRule,
@@ -65,6 +75,8 @@ export const rules = {
65
75
  'missing-paired-item': MissingPairedItemRule,
66
76
  'no-builder-hint-leakage': NoBuilderHintLeakageRule,
67
77
  'n8n-object-validation': N8nObjectValidationRule,
78
+ 'require-files-array': RequireFilesArrayRule,
79
+ 'require-homepage': RequireHomepageRule,
68
80
  'require-node-api-error': RequireNodeApiErrorRule,
69
81
  'require-node-description-fields': RequireNodeDescriptionFieldsRule,
70
82
  'require-version': RequireVersionRule,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}