@n8n/eslint-plugin-community-nodes 0.25.0 → 0.27.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 (111) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/README.md +7 -1
  3. package/dist/plugin.d.ts +51 -15
  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/ai-node-package-json.d.ts +1 -1
  8. package/dist/rules/cred-class-field-icon-missing.d.ts +1 -1
  9. package/dist/rules/cred-class-oauth2-naming.d.ts +1 -1
  10. package/dist/rules/credential-password-field.d.ts.map +1 -1
  11. package/dist/rules/credential-password-field.js +3 -31
  12. package/dist/rules/credential-password-field.js.map +1 -1
  13. package/dist/rules/credential-unnecessary-password.d.ts +2 -0
  14. package/dist/rules/credential-unnecessary-password.d.ts.map +1 -0
  15. package/dist/rules/credential-unnecessary-password.js +54 -0
  16. package/dist/rules/credential-unnecessary-password.js.map +1 -0
  17. package/dist/rules/icon-validation.d.ts +1 -1
  18. package/dist/rules/index.d.ts +26 -20
  19. package/dist/rules/index.d.ts.map +1 -1
  20. package/dist/rules/index.js +12 -0
  21. package/dist/rules/index.js.map +1 -1
  22. package/dist/rules/no-credential-reuse.d.ts +1 -1
  23. package/dist/rules/no-dangerous-functions.d.ts +1 -1
  24. package/dist/rules/no-dead-files.d.ts +7 -0
  25. package/dist/rules/no-dead-files.d.ts.map +1 -0
  26. package/dist/rules/no-dead-files.js +57 -0
  27. package/dist/rules/no-dead-files.js.map +1 -0
  28. package/dist/rules/no-deprecated-workflow-functions.d.ts +1 -1
  29. package/dist/rules/no-hardcoded-secrets.d.ts +2 -0
  30. package/dist/rules/no-hardcoded-secrets.d.ts.map +1 -0
  31. package/dist/rules/no-hardcoded-secrets.js +147 -0
  32. package/dist/rules/no-hardcoded-secrets.js.map +1 -0
  33. package/dist/rules/no-restricted-imports.d.ts +1 -1
  34. package/dist/rules/no-restricted-imports.d.ts.map +1 -1
  35. package/dist/rules/no-restricted-imports.js +14 -5
  36. package/dist/rules/no-restricted-imports.js.map +1 -1
  37. package/dist/rules/no-silent-error-swallowing.d.ts +2 -0
  38. package/dist/rules/no-silent-error-swallowing.d.ts.map +1 -0
  39. package/dist/rules/no-silent-error-swallowing.js +112 -0
  40. package/dist/rules/no-silent-error-swallowing.js.map +1 -0
  41. package/dist/rules/node-class-description-icon-missing.d.ts +1 -1
  42. package/dist/rules/node-connection-type-literal.js.map +1 -1
  43. package/dist/rules/package-name-convention.d.ts +1 -1
  44. package/dist/rules/require-files-array.d.ts +2 -0
  45. package/dist/rules/require-files-array.d.ts.map +1 -0
  46. package/dist/rules/require-files-array.js +41 -0
  47. package/dist/rules/require-files-array.js.map +1 -0
  48. package/dist/rules/require-homepage.d.ts +2 -0
  49. package/dist/rules/require-homepage.d.ts.map +1 -0
  50. package/dist/rules/require-homepage.js +52 -0
  51. package/dist/rules/require-homepage.js.map +1 -0
  52. package/dist/rules/require-version.d.ts +1 -1
  53. package/dist/rules/trigger-node-conventions.d.ts +1 -1
  54. package/dist/rules/valid-author.d.ts +1 -1
  55. package/dist/rules/valid-credential-references.d.ts +1 -1
  56. package/dist/rules/valid-description.d.ts +1 -1
  57. package/dist/rules/valid-peer-dependencies.d.ts +1 -1
  58. package/dist/rules/webhook-lifecycle-complete.d.ts +1 -1
  59. package/dist/rules/webhook-lifecycle-complete.d.ts.map +1 -1
  60. package/dist/rules/webhook-lifecycle-complete.js +2 -3
  61. package/dist/rules/webhook-lifecycle-complete.js.map +1 -1
  62. package/dist/typecheck.tsbuildinfo +1 -1
  63. package/dist/utils/ast-utils.js.map +1 -1
  64. package/dist/utils/constants.d.ts +5 -0
  65. package/dist/utils/constants.d.ts.map +1 -0
  66. package/dist/utils/constants.js +15 -0
  67. package/dist/utils/constants.js.map +1 -0
  68. package/dist/utils/credential-fields.d.ts +20 -0
  69. package/dist/utils/credential-fields.d.ts.map +1 -0
  70. package/dist/utils/credential-fields.js +45 -0
  71. package/dist/utils/credential-fields.js.map +1 -0
  72. package/dist/utils/file-utils.d.ts +13 -0
  73. package/dist/utils/file-utils.d.ts.map +1 -1
  74. package/dist/utils/file-utils.js +44 -6
  75. package/dist/utils/file-utils.js.map +1 -1
  76. package/dist/utils/index.d.ts +2 -0
  77. package/dist/utils/index.d.ts.map +1 -1
  78. package/dist/utils/index.js +2 -0
  79. package/dist/utils/index.js.map +1 -1
  80. package/docs/rules/credential-password-field.md +3 -1
  81. package/docs/rules/credential-unnecessary-password.md +46 -0
  82. package/docs/rules/no-dead-files.md +56 -0
  83. package/docs/rules/no-hardcoded-secrets.md +59 -0
  84. package/docs/rules/no-restricted-imports.md +9 -0
  85. package/docs/rules/no-silent-error-swallowing.md +72 -0
  86. package/docs/rules/require-files-array.md +43 -0
  87. package/docs/rules/require-homepage.md +49 -0
  88. package/package.json +5 -4
  89. package/src/plugin.ts +12 -0
  90. package/src/rules/credential-password-field.ts +4 -40
  91. package/src/rules/credential-unnecessary-password.test.ts +105 -0
  92. package/src/rules/credential-unnecessary-password.ts +72 -0
  93. package/src/rules/index.ts +12 -0
  94. package/src/rules/no-dead-files.test.ts +128 -0
  95. package/src/rules/no-dead-files.ts +71 -0
  96. package/src/rules/no-hardcoded-secrets.test.ts +124 -0
  97. package/src/rules/no-hardcoded-secrets.ts +161 -0
  98. package/src/rules/no-restricted-imports.test.ts +63 -0
  99. package/src/rules/no-restricted-imports.ts +17 -4
  100. package/src/rules/no-silent-error-swallowing.test.ts +245 -0
  101. package/src/rules/no-silent-error-swallowing.ts +127 -0
  102. package/src/rules/require-files-array.test.ts +57 -0
  103. package/src/rules/require-files-array.ts +50 -0
  104. package/src/rules/require-homepage.test.ts +80 -0
  105. package/src/rules/require-homepage.ts +59 -0
  106. package/src/rules/webhook-lifecycle-complete.ts +4 -5
  107. package/src/utils/constants.ts +21 -0
  108. package/src/utils/credential-fields.ts +57 -0
  109. package/src/utils/file-utils.ts +50 -6
  110. package/src/utils/index.ts +2 -0
  111. package/tsconfig.json +1 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > @n8n/eslint-plugin-community-nodes@0.25.0 build /home/runner/work/n8n/n8n/packages/@n8n/eslint-plugin-community-nodes
2
+ > @n8n/eslint-plugin-community-nodes@0.27.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
@@ -10,7 +10,7 @@ declare const configs: {
10
10
  version: string;
11
11
  namespace: string;
12
12
  };
13
- rules: ESLint.Plugin["rules"];
13
+ rules: ESLint.Plugin['rules'];
14
14
  };
15
15
  };
16
16
  rules: {
@@ -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";
@@ -61,12 +67,13 @@ declare const configs: {
61
67
  version: string;
62
68
  namespace: string;
63
69
  };
64
- rules: ESLint.Plugin["rules"];
70
+ rules: ESLint.Plugin['rules'];
65
71
  };
66
72
  };
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";
@@ -103,6 +115,12 @@ declare const configs: {
103
115
  };
104
116
  };
105
117
  declare const pluginWithConfigs: {
118
+ meta: {
119
+ name: string;
120
+ version: string;
121
+ namespace: string;
122
+ };
123
+ rules: ESLint.Plugin['rules'];
106
124
  configs: {
107
125
  recommended: {
108
126
  ignores: string[];
@@ -113,7 +131,7 @@ declare const pluginWithConfigs: {
113
131
  version: string;
114
132
  namespace: string;
115
133
  };
116
- rules: ESLint.Plugin["rules"];
134
+ rules: ESLint.Plugin['rules'];
117
135
  };
118
136
  };
119
137
  rules: {
@@ -121,6 +139,7 @@ declare const pluginWithConfigs: {
121
139
  '@n8n/community-nodes/no-restricted-globals': "error";
122
140
  '@n8n/community-nodes/no-restricted-imports': "error";
123
141
  '@n8n/community-nodes/credential-password-field': "error";
142
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
124
143
  '@n8n/community-nodes/n8n-object-validation': "error";
125
144
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
126
145
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -129,10 +148,13 @@ declare const pluginWithConfigs: {
129
148
  '@n8n/community-nodes/credential-test-required': "error";
130
149
  '@n8n/community-nodes/no-credential-reuse': "error";
131
150
  '@n8n/community-nodes/no-dangerous-functions': "error";
151
+ '@n8n/community-nodes/no-dead-files': "warn";
132
152
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
153
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
133
154
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
134
155
  '@n8n/community-nodes/no-overrides-field': "error";
135
156
  '@n8n/community-nodes/no-runtime-dependencies': "error";
157
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
136
158
  '@n8n/community-nodes/no-template-placeholders': "error";
137
159
  '@n8n/community-nodes/icon-validation': "error";
138
160
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -145,6 +167,8 @@ declare const pluginWithConfigs: {
145
167
  '@n8n/community-nodes/missing-paired-item': "error";
146
168
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
147
169
  '@n8n/community-nodes/node-registration-complete': "warn";
170
+ '@n8n/community-nodes/require-files-array': "warn";
171
+ '@n8n/community-nodes/require-homepage': "warn";
148
172
  '@n8n/community-nodes/require-node-api-error': "error";
149
173
  '@n8n/community-nodes/require-node-description-fields': "error";
150
174
  '@n8n/community-nodes/require-version': "error";
@@ -164,12 +188,13 @@ declare const pluginWithConfigs: {
164
188
  version: string;
165
189
  namespace: string;
166
190
  };
167
- rules: ESLint.Plugin["rules"];
191
+ rules: ESLint.Plugin['rules'];
168
192
  };
169
193
  };
170
194
  rules: {
171
195
  '@n8n/community-nodes/ai-node-package-json': "error";
172
196
  '@n8n/community-nodes/credential-password-field': "error";
197
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
173
198
  '@n8n/community-nodes/n8n-object-validation': "error";
174
199
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
175
200
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -178,10 +203,13 @@ declare const pluginWithConfigs: {
178
203
  '@n8n/community-nodes/credential-test-required': "error";
179
204
  '@n8n/community-nodes/no-credential-reuse': "error";
180
205
  '@n8n/community-nodes/no-dangerous-functions': "error";
206
+ '@n8n/community-nodes/no-dead-files': "warn";
181
207
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
208
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
182
209
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
183
210
  '@n8n/community-nodes/no-overrides-field': "error";
184
211
  '@n8n/community-nodes/no-runtime-dependencies': "error";
212
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
185
213
  '@n8n/community-nodes/no-template-placeholders': "error";
186
214
  '@n8n/community-nodes/icon-validation': "error";
187
215
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -194,6 +222,8 @@ declare const pluginWithConfigs: {
194
222
  '@n8n/community-nodes/missing-paired-item': "error";
195
223
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
196
224
  '@n8n/community-nodes/node-registration-complete': "warn";
225
+ '@n8n/community-nodes/require-files-array': "warn";
226
+ '@n8n/community-nodes/require-homepage': "warn";
197
227
  '@n8n/community-nodes/require-node-api-error': "error";
198
228
  '@n8n/community-nodes/require-node-description-fields': "error";
199
229
  '@n8n/community-nodes/require-version': "error";
@@ -205,14 +235,14 @@ declare const pluginWithConfigs: {
205
235
  };
206
236
  };
207
237
  };
238
+ };
239
+ declare const n8nCommunityNodesPlugin: {
208
240
  meta: {
209
241
  name: string;
210
242
  version: string;
211
243
  namespace: string;
212
244
  };
213
- rules: ESLint.Plugin["rules"];
214
- };
215
- declare const n8nCommunityNodesPlugin: {
245
+ rules: ESLint.Plugin['rules'];
216
246
  configs: {
217
247
  recommended: {
218
248
  ignores: string[];
@@ -223,7 +253,7 @@ declare const n8nCommunityNodesPlugin: {
223
253
  version: string;
224
254
  namespace: string;
225
255
  };
226
- rules: ESLint.Plugin["rules"];
256
+ rules: ESLint.Plugin['rules'];
227
257
  };
228
258
  };
229
259
  rules: {
@@ -231,6 +261,7 @@ declare const n8nCommunityNodesPlugin: {
231
261
  '@n8n/community-nodes/no-restricted-globals': "error";
232
262
  '@n8n/community-nodes/no-restricted-imports': "error";
233
263
  '@n8n/community-nodes/credential-password-field': "error";
264
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
234
265
  '@n8n/community-nodes/n8n-object-validation': "error";
235
266
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
236
267
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -239,10 +270,13 @@ declare const n8nCommunityNodesPlugin: {
239
270
  '@n8n/community-nodes/credential-test-required': "error";
240
271
  '@n8n/community-nodes/no-credential-reuse': "error";
241
272
  '@n8n/community-nodes/no-dangerous-functions': "error";
273
+ '@n8n/community-nodes/no-dead-files': "warn";
242
274
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
275
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
243
276
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
244
277
  '@n8n/community-nodes/no-overrides-field': "error";
245
278
  '@n8n/community-nodes/no-runtime-dependencies': "error";
279
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
246
280
  '@n8n/community-nodes/no-template-placeholders': "error";
247
281
  '@n8n/community-nodes/icon-validation': "error";
248
282
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -255,6 +289,8 @@ declare const n8nCommunityNodesPlugin: {
255
289
  '@n8n/community-nodes/missing-paired-item': "error";
256
290
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
257
291
  '@n8n/community-nodes/node-registration-complete': "warn";
292
+ '@n8n/community-nodes/require-files-array': "warn";
293
+ '@n8n/community-nodes/require-homepage': "warn";
258
294
  '@n8n/community-nodes/require-node-api-error': "error";
259
295
  '@n8n/community-nodes/require-node-description-fields': "error";
260
296
  '@n8n/community-nodes/require-version': "error";
@@ -274,12 +310,13 @@ declare const n8nCommunityNodesPlugin: {
274
310
  version: string;
275
311
  namespace: string;
276
312
  };
277
- rules: ESLint.Plugin["rules"];
313
+ rules: ESLint.Plugin['rules'];
278
314
  };
279
315
  };
280
316
  rules: {
281
317
  '@n8n/community-nodes/ai-node-package-json': "error";
282
318
  '@n8n/community-nodes/credential-password-field': "error";
319
+ '@n8n/community-nodes/credential-unnecessary-password': "warn";
283
320
  '@n8n/community-nodes/n8n-object-validation': "error";
284
321
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
285
322
  '@n8n/community-nodes/no-emoji-in-options': "error";
@@ -288,10 +325,13 @@ declare const n8nCommunityNodesPlugin: {
288
325
  '@n8n/community-nodes/credential-test-required': "error";
289
326
  '@n8n/community-nodes/no-credential-reuse': "error";
290
327
  '@n8n/community-nodes/no-dangerous-functions': "error";
328
+ '@n8n/community-nodes/no-dead-files': "warn";
291
329
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
330
+ '@n8n/community-nodes/no-hardcoded-secrets': "error";
292
331
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
293
332
  '@n8n/community-nodes/no-overrides-field': "error";
294
333
  '@n8n/community-nodes/no-runtime-dependencies': "error";
334
+ '@n8n/community-nodes/no-silent-error-swallowing': "error";
295
335
  '@n8n/community-nodes/no-template-placeholders': "error";
296
336
  '@n8n/community-nodes/icon-validation': "error";
297
337
  '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
@@ -304,6 +344,8 @@ declare const n8nCommunityNodesPlugin: {
304
344
  '@n8n/community-nodes/missing-paired-item': "error";
305
345
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
306
346
  '@n8n/community-nodes/node-registration-complete': "warn";
347
+ '@n8n/community-nodes/require-files-array': "warn";
348
+ '@n8n/community-nodes/require-homepage': "warn";
307
349
  '@n8n/community-nodes/require-node-api-error': "error";
308
350
  '@n8n/community-nodes/require-node-description-fields': "error";
309
351
  '@n8n/community-nodes/require-version': "error";
@@ -315,12 +357,6 @@ declare const n8nCommunityNodesPlugin: {
315
357
  };
316
358
  };
317
359
  };
318
- meta: {
319
- name: string;
320
- version: string;
321
- namespace: string;
322
- };
323
- rules: ESLint.Plugin["rules"];
324
360
  };
325
361
  export default pluginWithConfigs;
326
362
  export { rules, configs, n8nCommunityNodesPlugin };
@@ -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;;;;;;;;;;uBAHI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FE,CAAC;AAE1C,QAAA,MAAM,iBAAiB;;;;;;;;;;;2BA5FN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA4FiC,CAAC;AAEzE,QAAA,MAAM,uBAAuB;;;;;;;;;;;2BA9FZ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA8FU,CAAC;AAClD,eAAe,iBAAiB,CAAC;AACjC,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":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const AiNodePackageJsonRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingPeerDep" | "missingSdkVersion" | "invalidSdkVersion" | "wrongLocation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
1
+ export declare const AiNodePackageJsonRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidSdkVersion" | "missingPeerDep" | "missingSdkVersion" | "wrongLocation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
2
  //# sourceMappingURL=ai-node-package-json.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const CredClassFieldIconMissingRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingIcon" | "addPlaceholder", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
1
+ export declare const CredClassFieldIconMissingRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"addPlaceholder" | "missingIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
2
  //# sourceMappingURL=cred-class-field-icon-missing.d.ts.map
@@ -1,2 +1,2 @@
1
- export declare const CredClassOAuth2NamingRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"classNameMissingOAuth2" | "nameMissingOAuth2" | "displayNameMissingOAuth2", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
1
+ export declare const CredClassOAuth2NamingRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"classNameMissingOAuth2" | "displayNameMissingOAuth2" | "nameMissingOAuth2", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
2
  //# sourceMappingURL=cred-class-oauth2-naming.d.ts.map
@@ -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,2 +1,2 @@
1
- export declare const IconValidationRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingIcon" | "addPlaceholder" | "iconFileNotFound" | "lightDarkSame" | "invalidIconPath" | "addFileProtocol" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
1
+ export declare const IconValidationRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"addFileProtocol" | "addPlaceholder" | "iconFileNotFound" | "invalidIconPath" | "lightDarkSame" | "missingIcon" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
2
  //# sourceMappingURL=icon-validation.d.ts.map