eslint-plugin-secure-coding 2.3.3 → 2.4.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 (337) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/README.md +2 -2
  3. package/package.json +1 -1
  4. package/src/index.d.ts +32 -0
  5. package/src/index.js +416 -0
  6. package/src/rules/detect-child-process/index.d.ts +11 -0
  7. package/src/rules/detect-child-process/index.js +529 -0
  8. package/src/rules/detect-eval-with-expression/index.d.ts +9 -0
  9. package/src/rules/detect-eval-with-expression/index.js +392 -0
  10. package/src/rules/detect-mixed-content/index.d.ts +8 -0
  11. package/src/rules/detect-mixed-content/index.js +44 -0
  12. package/src/rules/detect-non-literal-fs-filename/index.d.ts +7 -0
  13. package/src/rules/detect-non-literal-fs-filename/index.js +454 -0
  14. package/src/rules/detect-non-literal-regexp/index.d.ts +9 -0
  15. package/src/rules/detect-non-literal-regexp/index.js +403 -0
  16. package/src/rules/detect-object-injection/index.d.ts +11 -0
  17. package/src/rules/detect-object-injection/index.js +560 -0
  18. package/src/rules/detect-suspicious-dependencies/index.d.ts +8 -0
  19. package/src/rules/detect-suspicious-dependencies/index.js +71 -0
  20. package/src/rules/detect-weak-password-validation/index.d.ts +6 -0
  21. package/src/rules/detect-weak-password-validation/index.js +58 -0
  22. package/src/rules/no-allow-arbitrary-loads/index.d.ts +8 -0
  23. package/src/rules/no-allow-arbitrary-loads/index.js +47 -0
  24. package/src/rules/no-arbitrary-file-access/index.d.ts +13 -0
  25. package/src/rules/no-arbitrary-file-access/index.js +195 -0
  26. package/src/rules/no-buffer-overread/index.d.ts +29 -0
  27. package/src/rules/no-buffer-overread/index.js +606 -0
  28. package/src/rules/no-clickjacking/index.d.ts +10 -0
  29. package/src/rules/no-clickjacking/index.js +396 -0
  30. package/src/rules/no-client-side-auth-logic/index.d.ts +6 -0
  31. package/src/rules/no-client-side-auth-logic/index.js +69 -0
  32. package/src/rules/no-credentials-in-query-params/index.d.ts +8 -0
  33. package/src/rules/no-credentials-in-query-params/index.js +57 -0
  34. package/src/rules/no-data-in-temp-storage/index.d.ts +6 -0
  35. package/src/rules/no-data-in-temp-storage/index.js +64 -0
  36. package/src/rules/no-debug-code-in-production/index.d.ts +8 -0
  37. package/src/rules/no-debug-code-in-production/index.js +51 -0
  38. package/src/rules/no-directive-injection/index.d.ts +12 -0
  39. package/src/rules/no-directive-injection/index.js +457 -0
  40. package/src/rules/no-disabled-certificate-validation/index.d.ts +6 -0
  41. package/src/rules/no-disabled-certificate-validation/index.js +61 -0
  42. package/src/rules/no-dynamic-dependency-loading/index.d.ts +8 -0
  43. package/src/rules/no-dynamic-dependency-loading/index.js +51 -0
  44. package/src/rules/no-electron-security-issues/index.d.ts +10 -0
  45. package/src/rules/no-electron-security-issues/index.js +423 -0
  46. package/src/rules/no-exposed-debug-endpoints/index.d.ts +6 -0
  47. package/src/rules/no-exposed-debug-endpoints/index.js +62 -0
  48. package/src/rules/no-exposed-sensitive-data/index.d.ts +11 -0
  49. package/src/rules/no-exposed-sensitive-data/index.js +340 -0
  50. package/src/rules/no-format-string-injection/index.d.ts +17 -0
  51. package/src/rules/no-format-string-injection/index.js +660 -0
  52. package/src/rules/no-graphql-injection/index.d.ts +12 -0
  53. package/src/rules/no-graphql-injection/index.js +411 -0
  54. package/src/rules/no-hardcoded-credentials/index.d.ts +26 -0
  55. package/src/rules/no-hardcoded-credentials/index.js +376 -0
  56. package/src/rules/no-hardcoded-session-tokens/index.d.ts +6 -0
  57. package/src/rules/no-hardcoded-session-tokens/index.js +59 -0
  58. package/src/rules/no-http-urls/index.d.ts +12 -0
  59. package/src/rules/no-http-urls/index.js +114 -0
  60. package/src/rules/no-improper-sanitization/index.d.ts +12 -0
  61. package/src/rules/no-improper-sanitization/index.js +411 -0
  62. package/src/rules/no-improper-type-validation/index.d.ts +10 -0
  63. package/src/rules/no-improper-type-validation/index.js +475 -0
  64. package/src/rules/no-insecure-comparison/index.d.ts +7 -0
  65. package/src/rules/no-insecure-comparison/index.js +193 -0
  66. package/src/rules/no-insecure-redirects/index.d.ts +7 -0
  67. package/src/rules/no-insecure-redirects/index.js +216 -0
  68. package/src/rules/no-insecure-websocket/index.d.ts +6 -0
  69. package/src/rules/no-insecure-websocket/index.js +61 -0
  70. package/src/rules/no-ldap-injection/index.d.ts +10 -0
  71. package/src/rules/no-ldap-injection/index.js +455 -0
  72. package/src/rules/no-missing-authentication/index.d.ts +13 -0
  73. package/src/rules/no-missing-authentication/index.js +333 -0
  74. package/src/rules/no-missing-cors-check/index.d.ts +9 -0
  75. package/src/rules/no-missing-cors-check/index.js +399 -0
  76. package/src/rules/no-missing-csrf-protection/index.d.ts +11 -0
  77. package/src/rules/no-missing-csrf-protection/index.js +180 -0
  78. package/src/rules/no-missing-security-headers/index.d.ts +7 -0
  79. package/src/rules/no-missing-security-headers/index.js +218 -0
  80. package/src/rules/no-password-in-url/index.d.ts +8 -0
  81. package/src/rules/no-password-in-url/index.js +54 -0
  82. package/src/rules/no-permissive-cors/index.d.ts +8 -0
  83. package/src/rules/no-permissive-cors/index.js +65 -0
  84. package/src/rules/no-pii-in-logs/index.d.ts +8 -0
  85. package/src/rules/no-pii-in-logs/index.js +70 -0
  86. package/src/rules/no-privilege-escalation/index.d.ts +13 -0
  87. package/src/rules/no-privilege-escalation/index.js +321 -0
  88. package/src/rules/no-redos-vulnerable-regex/index.d.ts +7 -0
  89. package/src/rules/no-redos-vulnerable-regex/index.js +306 -0
  90. package/src/rules/no-sensitive-data-exposure/index.d.ts +11 -0
  91. package/src/rules/no-sensitive-data-exposure/index.js +250 -0
  92. package/src/rules/no-sensitive-data-in-analytics/index.d.ts +8 -0
  93. package/src/rules/no-sensitive-data-in-analytics/index.js +62 -0
  94. package/src/rules/no-sensitive-data-in-cache/index.d.ts +8 -0
  95. package/src/rules/no-sensitive-data-in-cache/index.js +52 -0
  96. package/src/rules/no-toctou-vulnerability/index.d.ts +7 -0
  97. package/src/rules/no-toctou-vulnerability/index.js +208 -0
  98. package/src/rules/no-tracking-without-consent/index.d.ts +6 -0
  99. package/src/rules/no-tracking-without-consent/index.js +67 -0
  100. package/src/rules/no-unchecked-loop-condition/index.d.ts +12 -0
  101. package/src/rules/no-unchecked-loop-condition/index.js +646 -0
  102. package/src/rules/no-unencrypted-transmission/index.d.ts +11 -0
  103. package/src/rules/no-unencrypted-transmission/index.js +236 -0
  104. package/src/rules/no-unescaped-url-parameter/index.d.ts +9 -0
  105. package/src/rules/no-unescaped-url-parameter/index.js +355 -0
  106. package/src/rules/no-unlimited-resource-allocation/index.d.ts +12 -0
  107. package/src/rules/no-unlimited-resource-allocation/index.js +643 -0
  108. package/src/rules/no-unsafe-deserialization/index.d.ts +10 -0
  109. package/src/rules/no-unsafe-deserialization/index.js +491 -0
  110. package/src/rules/no-unsafe-dynamic-require/index.d.ts +5 -0
  111. package/src/rules/no-unsafe-dynamic-require/index.js +106 -0
  112. package/src/rules/no-unsafe-regex-construction/index.d.ts +9 -0
  113. package/src/rules/no-unsafe-regex-construction/index.js +291 -0
  114. package/src/rules/no-unvalidated-deeplinks/index.d.ts +6 -0
  115. package/src/rules/no-unvalidated-deeplinks/index.js +62 -0
  116. package/src/rules/no-unvalidated-user-input/index.d.ts +9 -0
  117. package/src/rules/no-unvalidated-user-input/index.js +420 -0
  118. package/src/rules/no-verbose-error-messages/index.d.ts +8 -0
  119. package/src/rules/no-verbose-error-messages/index.js +68 -0
  120. package/src/rules/no-weak-password-recovery/index.d.ts +12 -0
  121. package/src/rules/no-weak-password-recovery/index.js +424 -0
  122. package/src/rules/no-xpath-injection/index.d.ts +10 -0
  123. package/src/rules/no-xpath-injection/index.js +487 -0
  124. package/src/rules/no-xxe-injection/index.d.ts +7 -0
  125. package/src/rules/no-xxe-injection/index.js +266 -0
  126. package/src/rules/no-zip-slip/index.d.ts +9 -0
  127. package/src/rules/no-zip-slip/index.js +445 -0
  128. package/src/rules/require-backend-authorization/index.d.ts +6 -0
  129. package/src/rules/require-backend-authorization/index.js +60 -0
  130. package/src/rules/require-code-minification/index.d.ts +8 -0
  131. package/src/rules/require-code-minification/index.js +47 -0
  132. package/src/rules/require-csp-headers/index.d.ts +6 -0
  133. package/src/rules/require-csp-headers/index.js +64 -0
  134. package/src/rules/require-data-minimization/index.d.ts +8 -0
  135. package/src/rules/require-data-minimization/index.js +53 -0
  136. package/src/rules/require-dependency-integrity/index.d.ts +6 -0
  137. package/src/rules/require-dependency-integrity/index.js +64 -0
  138. package/src/rules/require-https-only/index.d.ts +8 -0
  139. package/src/rules/require-https-only/index.js +62 -0
  140. package/src/rules/require-mime-type-validation/index.d.ts +6 -0
  141. package/src/rules/require-mime-type-validation/index.js +66 -0
  142. package/src/rules/require-network-timeout/index.d.ts +8 -0
  143. package/src/rules/require-network-timeout/index.js +50 -0
  144. package/src/rules/require-package-lock/index.d.ts +8 -0
  145. package/src/rules/require-package-lock/index.js +63 -0
  146. package/src/rules/require-secure-credential-storage/index.d.ts +8 -0
  147. package/src/rules/require-secure-credential-storage/index.js +50 -0
  148. package/src/rules/require-secure-defaults/index.d.ts +8 -0
  149. package/src/rules/require-secure-defaults/index.js +47 -0
  150. package/src/rules/require-secure-deletion/index.d.ts +8 -0
  151. package/src/rules/require-secure-deletion/index.js +44 -0
  152. package/src/rules/require-storage-encryption/index.d.ts +8 -0
  153. package/src/rules/require-storage-encryption/index.js +50 -0
  154. package/src/rules/require-url-validation/index.d.ts +6 -0
  155. package/src/rules/require-url-validation/index.js +72 -0
  156. package/src/types/index.d.ts +106 -0
  157. package/src/types/index.js +16 -0
  158. package/src/index.ts +0 -605
  159. package/src/rules/__tests__/integration-demo.test.ts +0 -290
  160. package/src/rules/__tests__/integration-llm.test.ts +0 -89
  161. package/src/rules/database-injection/database-injection.test.ts +0 -456
  162. package/src/rules/database-injection/index.ts +0 -488
  163. package/src/rules/detect-child-process/detect-child-process.test.ts +0 -207
  164. package/src/rules/detect-child-process/index.ts +0 -634
  165. package/src/rules/detect-eval-with-expression/detect-eval-with-expression.test.ts +0 -416
  166. package/src/rules/detect-eval-with-expression/index.ts +0 -463
  167. package/src/rules/detect-mixed-content/detect-mixed-content.test.ts +0 -28
  168. package/src/rules/detect-mixed-content/index.ts +0 -52
  169. package/src/rules/detect-non-literal-fs-filename/detect-non-literal-fs-filename.test.ts +0 -269
  170. package/src/rules/detect-non-literal-fs-filename/index.ts +0 -551
  171. package/src/rules/detect-non-literal-regexp/detect-non-literal-regexp.test.ts +0 -189
  172. package/src/rules/detect-non-literal-regexp/index.ts +0 -490
  173. package/src/rules/detect-object-injection/detect-object-injection.test.ts +0 -440
  174. package/src/rules/detect-object-injection/index.ts +0 -674
  175. package/src/rules/detect-suspicious-dependencies/detect-suspicious-dependencies.test.ts +0 -32
  176. package/src/rules/detect-suspicious-dependencies/index.ts +0 -84
  177. package/src/rules/detect-weak-password-validation/detect-weak-password-validation.test.ts +0 -31
  178. package/src/rules/detect-weak-password-validation/index.ts +0 -68
  179. package/src/rules/no-allow-arbitrary-loads/index.ts +0 -54
  180. package/src/rules/no-allow-arbitrary-loads/no-allow-arbitrary-loads.test.ts +0 -28
  181. package/src/rules/no-arbitrary-file-access/index.ts +0 -238
  182. package/src/rules/no-arbitrary-file-access/no-arbitrary-file-access.test.ts +0 -119
  183. package/src/rules/no-buffer-overread/index.ts +0 -724
  184. package/src/rules/no-buffer-overread/no-buffer-overread.test.ts +0 -313
  185. package/src/rules/no-clickjacking/index.ts +0 -481
  186. package/src/rules/no-clickjacking/no-clickjacking.test.ts +0 -253
  187. package/src/rules/no-client-side-auth-logic/index.ts +0 -81
  188. package/src/rules/no-client-side-auth-logic/no-client-side-auth-logic.test.ts +0 -33
  189. package/src/rules/no-credentials-in-query-params/index.ts +0 -69
  190. package/src/rules/no-credentials-in-query-params/no-credentials-in-query-params.test.ts +0 -33
  191. package/src/rules/no-credentials-in-storage-api/index.ts +0 -64
  192. package/src/rules/no-credentials-in-storage-api/no-credentials-in-storage-api.test.ts +0 -31
  193. package/src/rules/no-data-in-temp-storage/index.ts +0 -75
  194. package/src/rules/no-data-in-temp-storage/no-data-in-temp-storage.test.ts +0 -33
  195. package/src/rules/no-debug-code-in-production/index.ts +0 -59
  196. package/src/rules/no-debug-code-in-production/no-debug-code-in-production.test.ts +0 -26
  197. package/src/rules/no-directive-injection/index.ts +0 -551
  198. package/src/rules/no-directive-injection/no-directive-injection.test.ts +0 -305
  199. package/src/rules/no-disabled-certificate-validation/index.ts +0 -72
  200. package/src/rules/no-disabled-certificate-validation/no-disabled-certificate-validation.test.ts +0 -33
  201. package/src/rules/no-document-cookie/index.ts +0 -113
  202. package/src/rules/no-document-cookie/no-document-cookie.test.ts +0 -382
  203. package/src/rules/no-dynamic-dependency-loading/index.ts +0 -60
  204. package/src/rules/no-dynamic-dependency-loading/no-dynamic-dependency-loading.test.ts +0 -27
  205. package/src/rules/no-electron-security-issues/index.ts +0 -504
  206. package/src/rules/no-electron-security-issues/no-electron-security-issues.test.ts +0 -324
  207. package/src/rules/no-exposed-debug-endpoints/index.ts +0 -73
  208. package/src/rules/no-exposed-debug-endpoints/no-exposed-debug-endpoints.test.ts +0 -40
  209. package/src/rules/no-exposed-sensitive-data/index.ts +0 -428
  210. package/src/rules/no-exposed-sensitive-data/no-exposed-sensitive-data.test.ts +0 -75
  211. package/src/rules/no-format-string-injection/index.ts +0 -801
  212. package/src/rules/no-format-string-injection/no-format-string-injection.test.ts +0 -437
  213. package/src/rules/no-graphql-injection/index.ts +0 -508
  214. package/src/rules/no-graphql-injection/no-graphql-injection.test.ts +0 -371
  215. package/src/rules/no-hardcoded-credentials/index.ts +0 -478
  216. package/src/rules/no-hardcoded-credentials/no-hardcoded-credentials.test.ts +0 -639
  217. package/src/rules/no-hardcoded-session-tokens/index.ts +0 -69
  218. package/src/rules/no-hardcoded-session-tokens/no-hardcoded-session-tokens.test.ts +0 -42
  219. package/src/rules/no-http-urls/index.ts +0 -131
  220. package/src/rules/no-http-urls/no-http-urls.test.ts +0 -60
  221. package/src/rules/no-improper-sanitization/index.ts +0 -502
  222. package/src/rules/no-improper-sanitization/no-improper-sanitization.test.ts +0 -156
  223. package/src/rules/no-improper-type-validation/index.ts +0 -572
  224. package/src/rules/no-improper-type-validation/no-improper-type-validation.test.ts +0 -372
  225. package/src/rules/no-insecure-comparison/index.ts +0 -232
  226. package/src/rules/no-insecure-comparison/no-insecure-comparison.test.ts +0 -218
  227. package/src/rules/no-insecure-cookie-settings/index.ts +0 -391
  228. package/src/rules/no-insecure-cookie-settings/no-insecure-cookie-settings.test.ts +0 -409
  229. package/src/rules/no-insecure-jwt/index.ts +0 -467
  230. package/src/rules/no-insecure-jwt/no-insecure-jwt.test.ts +0 -259
  231. package/src/rules/no-insecure-redirects/index.ts +0 -267
  232. package/src/rules/no-insecure-redirects/no-insecure-redirects.test.ts +0 -108
  233. package/src/rules/no-insecure-websocket/index.ts +0 -72
  234. package/src/rules/no-insecure-websocket/no-insecure-websocket.test.ts +0 -42
  235. package/src/rules/no-insufficient-postmessage-validation/index.ts +0 -497
  236. package/src/rules/no-insufficient-postmessage-validation/no-insufficient-postmessage-validation.test.ts +0 -360
  237. package/src/rules/no-insufficient-random/index.ts +0 -288
  238. package/src/rules/no-insufficient-random/no-insufficient-random.test.ts +0 -246
  239. package/src/rules/no-ldap-injection/index.ts +0 -547
  240. package/src/rules/no-ldap-injection/no-ldap-injection.test.ts +0 -317
  241. package/src/rules/no-missing-authentication/index.ts +0 -408
  242. package/src/rules/no-missing-authentication/no-missing-authentication.test.ts +0 -350
  243. package/src/rules/no-missing-cors-check/index.ts +0 -453
  244. package/src/rules/no-missing-cors-check/no-missing-cors-check.test.ts +0 -392
  245. package/src/rules/no-missing-csrf-protection/index.ts +0 -229
  246. package/src/rules/no-missing-csrf-protection/no-missing-csrf-protection.test.ts +0 -222
  247. package/src/rules/no-missing-security-headers/index.ts +0 -266
  248. package/src/rules/no-missing-security-headers/no-missing-security-headers.test.ts +0 -98
  249. package/src/rules/no-password-in-url/index.ts +0 -64
  250. package/src/rules/no-password-in-url/no-password-in-url.test.ts +0 -27
  251. package/src/rules/no-permissive-cors/index.ts +0 -78
  252. package/src/rules/no-permissive-cors/no-permissive-cors.test.ts +0 -28
  253. package/src/rules/no-pii-in-logs/index.ts +0 -83
  254. package/src/rules/no-pii-in-logs/no-pii-in-logs.test.ts +0 -26
  255. package/src/rules/no-postmessage-origin-wildcard/index.ts +0 -67
  256. package/src/rules/no-postmessage-origin-wildcard/no-postmessage-origin-wildcard.test.ts +0 -27
  257. package/src/rules/no-privilege-escalation/index.ts +0 -403
  258. package/src/rules/no-privilege-escalation/no-privilege-escalation.test.ts +0 -306
  259. package/src/rules/no-redos-vulnerable-regex/index.ts +0 -379
  260. package/src/rules/no-redos-vulnerable-regex/no-redos-vulnerable-regex.test.ts +0 -83
  261. package/src/rules/no-sensitive-data-exposure/index.ts +0 -294
  262. package/src/rules/no-sensitive-data-exposure/no-sensitive-data-exposure.test.ts +0 -262
  263. package/src/rules/no-sensitive-data-in-analytics/index.ts +0 -73
  264. package/src/rules/no-sensitive-data-in-analytics/no-sensitive-data-in-analytics.test.ts +0 -42
  265. package/src/rules/no-sensitive-data-in-cache/index.ts +0 -59
  266. package/src/rules/no-sensitive-data-in-cache/no-sensitive-data-in-cache.test.ts +0 -32
  267. package/src/rules/no-sql-injection/index.ts +0 -424
  268. package/src/rules/no-sql-injection/no-sql-injection.test.ts +0 -303
  269. package/src/rules/no-timing-attack/index.ts +0 -552
  270. package/src/rules/no-timing-attack/no-timing-attack.test.ts +0 -348
  271. package/src/rules/no-toctou-vulnerability/index.ts +0 -250
  272. package/src/rules/no-toctou-vulnerability/no-toctou-vulnerability.test.ts +0 -60
  273. package/src/rules/no-tracking-without-consent/index.ts +0 -78
  274. package/src/rules/no-tracking-without-consent/no-tracking-without-consent.test.ts +0 -34
  275. package/src/rules/no-unchecked-loop-condition/index.ts +0 -781
  276. package/src/rules/no-unchecked-loop-condition/no-unchecked-loop-condition.test.ts +0 -459
  277. package/src/rules/no-unencrypted-local-storage/index.ts +0 -73
  278. package/src/rules/no-unencrypted-local-storage/no-unencrypted-local-storage.test.ts +0 -41
  279. package/src/rules/no-unencrypted-transmission/index.ts +0 -296
  280. package/src/rules/no-unencrypted-transmission/no-unencrypted-transmission.test.ts +0 -287
  281. package/src/rules/no-unescaped-url-parameter/index.ts +0 -424
  282. package/src/rules/no-unescaped-url-parameter/no-unescaped-url-parameter.test.ts +0 -263
  283. package/src/rules/no-unlimited-resource-allocation/index.ts +0 -767
  284. package/src/rules/no-unlimited-resource-allocation/no-unlimited-resource-allocation.test.ts +0 -544
  285. package/src/rules/no-unsafe-deserialization/index.ts +0 -593
  286. package/src/rules/no-unsafe-deserialization/no-unsafe-deserialization.test.ts +0 -310
  287. package/src/rules/no-unsafe-dynamic-require/index.ts +0 -125
  288. package/src/rules/no-unsafe-dynamic-require/no-unsafe-dynamic-require.test.ts +0 -151
  289. package/src/rules/no-unsafe-regex-construction/index.ts +0 -370
  290. package/src/rules/no-unsafe-regex-construction/no-unsafe-regex-construction.test.ts +0 -181
  291. package/src/rules/no-unsanitized-html/index.ts +0 -400
  292. package/src/rules/no-unsanitized-html/no-unsanitized-html.test.ts +0 -488
  293. package/src/rules/no-unvalidated-deeplinks/index.ts +0 -73
  294. package/src/rules/no-unvalidated-deeplinks/no-unvalidated-deeplinks.test.ts +0 -29
  295. package/src/rules/no-unvalidated-user-input/index.ts +0 -498
  296. package/src/rules/no-unvalidated-user-input/no-unvalidated-user-input.test.ts +0 -463
  297. package/src/rules/no-verbose-error-messages/index.ts +0 -83
  298. package/src/rules/no-verbose-error-messages/no-verbose-error-messages.test.ts +0 -34
  299. package/src/rules/no-weak-crypto/index.ts +0 -447
  300. package/src/rules/no-weak-crypto/no-weak-crypto.test.ts +0 -297
  301. package/src/rules/no-weak-password-recovery/index.ts +0 -509
  302. package/src/rules/no-weak-password-recovery/no-weak-password-recovery.test.ts +0 -184
  303. package/src/rules/no-xpath-injection/index.ts +0 -596
  304. package/src/rules/no-xpath-injection/no-xpath-injection.test.ts +0 -405
  305. package/src/rules/no-xxe-injection/index.ts +0 -342
  306. package/src/rules/no-xxe-injection/no-xxe-injection.test.ts +0 -122
  307. package/src/rules/no-zip-slip/index.ts +0 -526
  308. package/src/rules/no-zip-slip/no-zip-slip.test.ts +0 -305
  309. package/src/rules/require-backend-authorization/index.ts +0 -71
  310. package/src/rules/require-backend-authorization/require-backend-authorization.test.ts +0 -31
  311. package/src/rules/require-code-minification/index.ts +0 -54
  312. package/src/rules/require-code-minification/require-code-minification.test.ts +0 -30
  313. package/src/rules/require-csp-headers/index.ts +0 -74
  314. package/src/rules/require-csp-headers/require-csp-headers.test.ts +0 -34
  315. package/src/rules/require-data-minimization/index.ts +0 -65
  316. package/src/rules/require-data-minimization/require-data-minimization.test.ts +0 -31
  317. package/src/rules/require-dependency-integrity/index.ts +0 -78
  318. package/src/rules/require-dependency-integrity/require-dependency-integrity.test.ts +0 -44
  319. package/src/rules/require-https-only/index.ts +0 -75
  320. package/src/rules/require-https-only/require-https-only.test.ts +0 -26
  321. package/src/rules/require-mime-type-validation/index.ts +0 -77
  322. package/src/rules/require-mime-type-validation/require-mime-type-validation.test.ts +0 -32
  323. package/src/rules/require-network-timeout/index.ts +0 -58
  324. package/src/rules/require-network-timeout/require-network-timeout.test.ts +0 -26
  325. package/src/rules/require-package-lock/index.ts +0 -75
  326. package/src/rules/require-package-lock/require-package-lock.test.ts +0 -27
  327. package/src/rules/require-secure-credential-storage/index.ts +0 -60
  328. package/src/rules/require-secure-credential-storage/require-secure-credential-storage.test.ts +0 -26
  329. package/src/rules/require-secure-defaults/index.ts +0 -54
  330. package/src/rules/require-secure-defaults/require-secure-defaults.test.ts +0 -26
  331. package/src/rules/require-secure-deletion/index.ts +0 -52
  332. package/src/rules/require-secure-deletion/require-secure-deletion.test.ts +0 -29
  333. package/src/rules/require-storage-encryption/index.ts +0 -60
  334. package/src/rules/require-storage-encryption/require-storage-encryption.test.ts +0 -26
  335. package/src/rules/require-url-validation/index.ts +0 -85
  336. package/src/rules/require-url-validation/require-url-validation.test.ts +0 -32
  337. package/src/types/index.ts +0 -235
@@ -1,639 +0,0 @@
1
- /**
2
- * Comprehensive tests for no-hardcoded-credentials rule
3
- * CWE-798: Use of Hard-coded Credentials
4
- */
5
- import { RuleTester } from '@typescript-eslint/rule-tester';
6
- import { describe, it, afterAll } from 'vitest';
7
- import parser from '@typescript-eslint/parser';
8
- import { noHardcodedCredentials } from './index';
9
-
10
- // Configure RuleTester for Vitest
11
- RuleTester.afterAll = afterAll;
12
- RuleTester.it = it;
13
- RuleTester.itOnly = it.only;
14
- RuleTester.describe = describe;
15
-
16
- // Use Flat Config format (ESLint 9+)
17
- const ruleTester = new RuleTester({
18
- languageOptions: {
19
- parser,
20
- ecmaVersion: 2022,
21
- sourceType: 'module',
22
- parserOptions: {
23
- ecmaFeatures: {
24
- jsx: true,
25
- },
26
- },
27
- },
28
- });
29
-
30
- describe('no-hardcoded-credentials', () => {
31
- describe('Valid Code', () => {
32
- ruleTester.run('valid - no hardcoded credentials', noHardcodedCredentials, {
33
- valid: [
34
- // Environment variables
35
- {
36
- code: 'const apiKey = process.env.API_KEY;',
37
- },
38
- {
39
- code: 'const password = process.env.DATABASE_PASSWORD;',
40
- },
41
- {
42
- code: 'const config = { apiKey: process.env.API_KEY };',
43
- },
44
- // Short strings (below minLength)
45
- {
46
- code: 'const key = "short";',
47
- },
48
- {
49
- code: 'const pass = "1234567";', // 7 chars, below default minLength of 8
50
- },
51
- // Non-credential strings
52
- {
53
- code: 'const message = "Hello, world!";',
54
- },
55
- {
56
- code: 'const url = "https://example.com/api";',
57
- },
58
- // Ignored patterns
59
- {
60
- code: 'const testKey = "test-api-key-12345";',
61
- options: [{ ignorePatterns: ['^test-'] }],
62
- },
63
- // Test files (when allowInTests is true)
64
- {
65
- code: 'const apiKey = "sk_test_FAKE_TEST_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890";',
66
- filename: 'test.spec.ts',
67
- options: [{ allowInTests: true }],
68
- },
69
- {
70
- code: 'const password = "test-password-123";',
71
- filename: '__tests__/config.test.ts',
72
- options: [{ allowInTests: true }],
73
- },
74
- ],
75
- invalid: [],
76
- });
77
- });
78
-
79
- describe('Invalid Code - API Keys', () => {
80
- ruleTester.run('invalid - API keys', noHardcodedCredentials, {
81
- valid: [],
82
- invalid: [
83
- {
84
- code: 'const apiKey = "sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890";',
85
- errors: [
86
- {
87
- messageId: 'useEnvironmentVariable',
88
- suggestions: [
89
- {
90
- messageId: 'useEnvironmentVariable',
91
- data: { envVarName: 'API_KEY', credentialType: 'API key' },
92
- output: 'const apiKey = process.env.API_KEY || \'sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890\';',
93
- },
94
- {
95
- messageId: 'useSecretManager',
96
- data: { credentialType: 'API key' },
97
- output: 'const apiKey = await getSecret(\'api_key\');',
98
- },
99
- ],
100
- },
101
- ],
102
- },
103
- {
104
- code: 'const key = "AKIAIOSFODNN7EXAMPLE";',
105
- errors: [
106
- {
107
- messageId: 'useEnvironmentVariable',
108
- suggestions: [
109
- {
110
- messageId: 'useEnvironmentVariable',
111
- data: { envVarName: 'KEY', credentialType: 'AWS access key' },
112
- output: 'const key = process.env.KEY || \'AKIAIOSFODNN7EXAMPLE\';',
113
- },
114
- {
115
- messageId: 'useSecretManager',
116
- data: { credentialType: 'AWS access key' },
117
- output: 'const key = await getSecret(\'key\');',
118
- },
119
- ],
120
- },
121
- ],
122
- },
123
- {
124
- code: 'const awsKey = "AKIA1234567890ABCDEF";',
125
- errors: [
126
- {
127
- messageId: 'useEnvironmentVariable',
128
- suggestions: [
129
- {
130
- messageId: 'useEnvironmentVariable',
131
- data: { envVarName: 'AWS_KEY', credentialType: 'AWS access key' },
132
- output: 'const awsKey = process.env.AWS_KEY || \'AKIA1234567890ABCDEF\';',
133
- },
134
- {
135
- messageId: 'useSecretManager',
136
- data: { credentialType: 'AWS access key' },
137
- output: 'const awsKey = await getSecret(\'aws_key\');',
138
- },
139
- ],
140
- },
141
- ],
142
- },
143
- {
144
- code: 'const config = { apiKey: "sk_test_FAKE_TEST_KEY_FOR_TESTING_PURPOSES_ONLY_ABCDEF" };',
145
- errors: [
146
- {
147
- messageId: 'useEnvironmentVariable',
148
- suggestions: [
149
- {
150
- messageId: 'useEnvironmentVariable',
151
- data: { envVarName: 'API_KEY', credentialType: 'API key' },
152
- output: 'const config = { apiKey: process.env.API_KEY || \'sk_test_FAKE_TEST_KEY_FOR_TESTING_PURPOSES_ONLY_ABCDEF\' };',
153
- },
154
- {
155
- messageId: 'useSecretManager',
156
- data: { credentialType: 'API key' },
157
- output: 'const config = { apiKey: await getSecret(\'api_key\') };',
158
- },
159
- ],
160
- },
161
- ],
162
- },
163
- ],
164
- });
165
- });
166
-
167
- describe('Invalid Code - Tokens', () => {
168
- ruleTester.run('invalid - tokens', noHardcodedCredentials, {
169
- valid: [],
170
- invalid: [
171
- {
172
- code: 'const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";',
173
- errors: [
174
- {
175
- messageId: 'useEnvironmentVariable',
176
- suggestions: [
177
- {
178
- messageId: 'useEnvironmentVariable',
179
- data: { envVarName: 'TOKEN', credentialType: 'JWT token' },
180
- output: 'const token = process.env.TOKEN || \'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\';',
181
- },
182
- {
183
- messageId: 'useSecretManager',
184
- data: { credentialType: 'JWT token' },
185
- output: 'const token = await getSecret(\'token\');',
186
- },
187
- ],
188
- },
189
- ],
190
- },
191
- {
192
- code: 'const authToken = "ghp_1234567890123456789012345678901234567890";',
193
- errors: [
194
- {
195
- messageId: 'useEnvironmentVariable',
196
- suggestions: [
197
- {
198
- messageId: 'useEnvironmentVariable',
199
- data: { envVarName: 'AUTH_TOKEN', credentialType: 'OAuth token' },
200
- output: 'const authToken = process.env.AUTH_TOKEN || \'ghp_1234567890123456789012345678901234567890\';',
201
- },
202
- {
203
- messageId: 'useSecretManager',
204
- data: { credentialType: 'OAuth token' },
205
- output: 'const authToken = await getSecret(\'auth_token\');',
206
- },
207
- ],
208
- },
209
- ],
210
- },
211
- {
212
- code: 'const token = "gho_1234567890123456789012345678901234567890";',
213
- errors: [
214
- {
215
- messageId: 'useEnvironmentVariable',
216
- suggestions: [
217
- {
218
- messageId: 'useEnvironmentVariable',
219
- data: { envVarName: 'TOKEN', credentialType: 'OAuth token' },
220
- output: 'const token = process.env.TOKEN || \'gho_1234567890123456789012345678901234567890\';',
221
- },
222
- {
223
- messageId: 'useSecretManager',
224
- data: { credentialType: 'OAuth token' },
225
- output: 'const token = await getSecret(\'token\');',
226
- },
227
- ],
228
- },
229
- ],
230
- },
231
- {
232
- code: 'const token = "ghu_1234567890123456789012345678901234567890";',
233
- errors: [
234
- {
235
- messageId: 'useEnvironmentVariable',
236
- suggestions: [
237
- {
238
- messageId: 'useEnvironmentVariable',
239
- data: { envVarName: 'TOKEN', credentialType: 'OAuth token' },
240
- output: 'const token = process.env.TOKEN || \'ghu_1234567890123456789012345678901234567890\';',
241
- },
242
- {
243
- messageId: 'useSecretManager',
244
- data: { credentialType: 'OAuth token' },
245
- output: 'const token = await getSecret(\'token\');',
246
- },
247
- ],
248
- },
249
- ],
250
- },
251
- {
252
- code: 'const token = "ghs_1234567890123456789012345678901234567890";',
253
- errors: [
254
- {
255
- messageId: 'useEnvironmentVariable',
256
- suggestions: [
257
- {
258
- messageId: 'useEnvironmentVariable',
259
- data: { envVarName: 'TOKEN', credentialType: 'OAuth token' },
260
- output: 'const token = process.env.TOKEN || \'ghs_1234567890123456789012345678901234567890\';',
261
- },
262
- {
263
- messageId: 'useSecretManager',
264
- data: { credentialType: 'OAuth token' },
265
- output: 'const token = await getSecret(\'token\');',
266
- },
267
- ],
268
- },
269
- ],
270
- },
271
- {
272
- code: 'const token = "ghr_1234567890123456789012345678901234567890";',
273
- errors: [
274
- {
275
- messageId: 'useEnvironmentVariable',
276
- suggestions: [
277
- {
278
- messageId: 'useEnvironmentVariable',
279
- data: { envVarName: 'TOKEN', credentialType: 'OAuth token' },
280
- output: 'const token = process.env.TOKEN || \'ghr_1234567890123456789012345678901234567890\';',
281
- },
282
- {
283
- messageId: 'useSecretManager',
284
- data: { credentialType: 'OAuth token' },
285
- output: 'const token = await getSecret(\'token\');',
286
- },
287
- ],
288
- },
289
- ],
290
- },
291
- ],
292
- });
293
- });
294
-
295
- describe('Invalid Code - Passwords', () => {
296
- ruleTester.run('invalid - passwords', noHardcodedCredentials, {
297
- valid: [],
298
- invalid: [
299
- {
300
- code: 'const password = "password123";',
301
- errors: [
302
- {
303
- messageId: 'useEnvironmentVariable',
304
- suggestions: [
305
- {
306
- messageId: 'useEnvironmentVariable',
307
- data: { envVarName: 'PASSWORD', credentialType: 'Common password' },
308
- output: 'const password = process.env.PASSWORD || \'password123\';',
309
- },
310
- {
311
- messageId: 'useSecretManager',
312
- data: { credentialType: 'Common password' },
313
- output: 'const password = await getSecret(\'password\');',
314
- },
315
- ],
316
- },
317
- ],
318
- },
319
- {
320
- code: 'const pwd = "admin";',
321
- errors: [
322
- {
323
- messageId: 'useEnvironmentVariable',
324
- suggestions: [
325
- {
326
- messageId: 'useEnvironmentVariable',
327
- data: { envVarName: 'PWD', credentialType: 'Common password' },
328
- output: 'const pwd = process.env.PWD || \'admin\';',
329
- },
330
- {
331
- messageId: 'useSecretManager',
332
- data: { credentialType: 'Common password' },
333
- output: 'const pwd = await getSecret(\'pwd\');',
334
- },
335
- ],
336
- },
337
- ],
338
- },
339
- {
340
- code: 'const pass = "123456";',
341
- errors: [
342
- {
343
- messageId: 'useEnvironmentVariable',
344
- suggestions: [
345
- {
346
- messageId: 'useEnvironmentVariable',
347
- data: { envVarName: 'PASS', credentialType: 'Common password' },
348
- output: 'const pass = process.env.PASS || \'123456\';',
349
- },
350
- {
351
- messageId: 'useSecretManager',
352
- data: { credentialType: 'Common password' },
353
- output: 'const pass = await getSecret(\'pass\');',
354
- },
355
- ],
356
- },
357
- ],
358
- },
359
- ],
360
- });
361
- });
362
-
363
- describe('Invalid Code - Database Connection Strings', () => {
364
- ruleTester.run('invalid - database strings', noHardcodedCredentials, {
365
- valid: [],
366
- invalid: [
367
- {
368
- code: 'const dbUrl = "mysql://user:password@localhost:3306/dbname";',
369
- errors: [
370
- {
371
- messageId: 'useEnvironmentVariable',
372
- suggestions: [
373
- {
374
- messageId: 'useEnvironmentVariable',
375
- data: { envVarName: 'DB_URL', credentialType: 'Database connection string' },
376
- output: 'const dbUrl = process.env.DB_URL || \'mysql://user:password@localhost:3306/dbname\';',
377
- },
378
- {
379
- messageId: 'useSecretManager',
380
- data: { credentialType: 'Database connection string' },
381
- output: 'const dbUrl = await getSecret(\'db_url\');',
382
- },
383
- ],
384
- },
385
- ],
386
- },
387
- {
388
- code: 'const mongoUri = "mongodb://admin:secret123@localhost:27017/mydb";',
389
- errors: [
390
- {
391
- messageId: 'useEnvironmentVariable',
392
- suggestions: [
393
- {
394
- messageId: 'useEnvironmentVariable',
395
- data: { envVarName: 'MONGO_URI', credentialType: 'Database connection string' },
396
- output: 'const mongoUri = process.env.MONGO_URI || \'mongodb://admin:secret123@localhost:27017/mydb\';',
397
- },
398
- {
399
- messageId: 'useSecretManager',
400
- data: { credentialType: 'Database connection string' },
401
- output: 'const mongoUri = await getSecret(\'mongo_uri\');',
402
- },
403
- ],
404
- },
405
- ],
406
- },
407
- {
408
- code: 'const connString = "postgres://user:pass@localhost:5432/db";',
409
- errors: [
410
- {
411
- messageId: 'useEnvironmentVariable',
412
- suggestions: [
413
- {
414
- messageId: 'useEnvironmentVariable',
415
- data: { envVarName: 'CONN_STRING', credentialType: 'Database connection string' },
416
- output: 'const connString = process.env.CONN_STRING || \'postgres://user:pass@localhost:5432/db\';',
417
- },
418
- {
419
- messageId: 'useSecretManager',
420
- data: { credentialType: 'Database connection string' },
421
- output: 'const connString = await getSecret(\'conn_string\');',
422
- },
423
- ],
424
- },
425
- ],
426
- },
427
- ],
428
- });
429
- });
430
-
431
- describe('Invalid Code - Secret Keys', () => {
432
- ruleTester.run('invalid - secret keys', noHardcodedCredentials, {
433
- valid: [],
434
- invalid: [
435
- {
436
- code: 'const secret = "dGhpcyBpcyBhIHNlY3JldCBrZXkgdGhhdCBpcyB2ZXJ5IGxvbmc=";',
437
- errors: [
438
- {
439
- messageId: 'useEnvironmentVariable',
440
- suggestions: [
441
- {
442
- messageId: 'useEnvironmentVariable',
443
- data: { envVarName: 'SECRET', credentialType: 'Secret key' },
444
- output: 'const secret = process.env.SECRET || \'dGhpcyBpcyBhIHNlY3JldCBrZXkgdGhhdCBpcyB2ZXJ5IGxvbmc=\';',
445
- },
446
- {
447
- messageId: 'useSecretManager',
448
- data: { credentialType: 'Secret key' },
449
- output: 'const secret = await getSecret(\'secret\');',
450
- },
451
- ],
452
- },
453
- ],
454
- },
455
- {
456
- code: 'const key = "abcdef1234567890abcdef1234567890abcdef12";',
457
- errors: [
458
- {
459
- messageId: 'useEnvironmentVariable',
460
- suggestions: [
461
- {
462
- messageId: 'useEnvironmentVariable',
463
- data: { envVarName: 'KEY', credentialType: 'Secret key' },
464
- output: 'const key = process.env.KEY || \'abcdef1234567890abcdef1234567890abcdef12\';',
465
- },
466
- {
467
- messageId: 'useSecretManager',
468
- data: { credentialType: 'Secret key' },
469
- output: 'const key = await getSecret(\'key\');',
470
- },
471
- ],
472
- },
473
- ],
474
- },
475
- ],
476
- });
477
- });
478
-
479
- describe('Template Literals', () => {
480
- ruleTester.run('template literals', noHardcodedCredentials, {
481
- valid: [],
482
- invalid: [
483
- {
484
- code: 'const query = `sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456`;',
485
- errors: [
486
- {
487
- messageId: 'useEnvironmentVariable',
488
- suggestions: [
489
- {
490
- messageId: 'useEnvironmentVariable',
491
- data: { envVarName: 'API_KEY', credentialType: 'API key' },
492
- output: 'const query = process.env.API_KEY || `sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456`;',
493
- },
494
- {
495
- messageId: 'useSecretManager',
496
- data: { credentialType: 'API key' },
497
- output: 'const query = await getSecret(\'api_key\');',
498
- },
499
- ],
500
- },
501
- ],
502
- },
503
- {
504
- code: 'const query = `sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456${someVar}`;',
505
- errors: [
506
- {
507
- messageId: 'useEnvironmentVariable',
508
- // Template literals with interpolations don't have suggestions
509
- },
510
- ],
511
- },
512
- ],
513
- });
514
- });
515
-
516
- describe('Options', () => {
517
- ruleTester.run('options testing', noHardcodedCredentials, {
518
- valid: [
519
- // Ignore patterns
520
- {
521
- code: 'const key = "test-api-key-12345678901234567890";',
522
- options: [{ ignorePatterns: ['^test-'] }],
523
- },
524
- // Custom minLength
525
- {
526
- code: 'const key = "short123";',
527
- options: [{ minLength: 10 }],
528
- },
529
- // Disable API key detection
530
- {
531
- code: 'const key = "sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890";',
532
- options: [{ detectApiKeys: false }],
533
- },
534
- // Disable password detection
535
- {
536
- code: 'const password = "password123";',
537
- options: [{ detectPasswords: false }],
538
- },
539
- // Disable token detection
540
- {
541
- code: 'const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";',
542
- options: [{ detectTokens: false }],
543
- },
544
- // Disable database string detection
545
- {
546
- code: 'const dbUrl = "mysql://user:password@localhost:3306/dbname";',
547
- options: [{ detectDatabaseStrings: false }],
548
- },
549
- ],
550
- invalid: [
551
- // Test file but allowInTests is false
552
- {
553
- code: 'const apiKey = "sk_test_FAKE_TEST_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890";',
554
- filename: 'test.spec.ts',
555
- options: [{ allowInTests: false }],
556
- errors: [
557
- {
558
- messageId: 'useEnvironmentVariable',
559
- suggestions: [
560
- {
561
- messageId: 'useEnvironmentVariable',
562
- data: { envVarName: 'API_KEY', credentialType: 'API key' },
563
- output: 'const apiKey = process.env.API_KEY || \'sk_test_FAKE_TEST_KEY_FOR_TESTING_PURPOSES_ONLY_1234567890\';',
564
- },
565
- {
566
- messageId: 'useSecretManager',
567
- data: { credentialType: 'API key' },
568
- output: 'const apiKey = await getSecret(\'api_key\');',
569
- },
570
- ],
571
- },
572
- ],
573
- },
574
- ],
575
- });
576
- });
577
-
578
- describe('Edge Cases', () => {
579
- ruleTester.run('edge cases', noHardcodedCredentials, {
580
- valid: [
581
- // Non-string literals
582
- {
583
- code: 'const num = 12345;',
584
- },
585
- {
586
- code: 'const bool = true;',
587
- },
588
- {
589
- code: 'const obj = { key: "value" };',
590
- },
591
- ],
592
- invalid: [
593
- // Variable in object property
594
- {
595
- code: 'const config = { apiKey: "sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456" };',
596
- errors: [
597
- {
598
- messageId: 'useEnvironmentVariable',
599
- suggestions: [
600
- {
601
- messageId: 'useEnvironmentVariable',
602
- data: { envVarName: 'API_KEY', credentialType: 'API key' },
603
- output: 'const config = { apiKey: process.env.API_KEY || \'sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456\' };',
604
- },
605
- {
606
- messageId: 'useSecretManager',
607
- data: { credentialType: 'API key' },
608
- output: 'const config = { apiKey: await getSecret(\'api_key\') };',
609
- },
610
- ],
611
- },
612
- ],
613
- },
614
- // Variable declaration
615
- {
616
- code: 'const myApiKey = "sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456";',
617
- errors: [
618
- {
619
- messageId: 'useEnvironmentVariable',
620
- suggestions: [
621
- {
622
- messageId: 'useEnvironmentVariable',
623
- data: { envVarName: 'MY_API_KEY', credentialType: 'API key' },
624
- output: 'const myApiKey = process.env.MY_API_KEY || \'sk_live_FAKE_LIVE_KEY_FOR_TESTING_PURPOSES_ONLY_123456\';',
625
- },
626
- {
627
- messageId: 'useSecretManager',
628
- data: { credentialType: 'API key' },
629
- output: 'const myApiKey = await getSecret(\'my_api_key\');',
630
- },
631
- ],
632
- },
633
- ],
634
- },
635
- ],
636
- });
637
- });
638
- });
639
-