matchers.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const TYPE_REGEX = 'regex'
  2. const TYPE_URL = 'url'
  3. const TYPE_PATH = 'path'
  4. const NPM_SECRET = {
  5. type: TYPE_REGEX,
  6. pattern: /\b(npms?_)[a-zA-Z0-9]{36,48}\b/gi,
  7. replacement: `[REDACTED_NPM_SECRET]`,
  8. }
  9. const AUTH_HEADER = {
  10. type: TYPE_REGEX,
  11. pattern: /\b(Basic\s+|Bearer\s+)[\w+=\-.]+\b/gi,
  12. replacement: `[REDACTED_AUTH_HEADER]`,
  13. }
  14. const JSON_WEB_TOKEN = {
  15. type: TYPE_REGEX,
  16. pattern: /\b[A-Za-z0-9-_]{10,}(?!\.\d+\.)\.[A-Za-z0-9-_]{3,}\.[A-Za-z0-9-_]{20,}\b/gi,
  17. replacement: `[REDACTED_JSON_WEB_TOKEN]`,
  18. }
  19. const UUID = {
  20. type: TYPE_REGEX,
  21. pattern: /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,
  22. replacement: `[REDACTED_UUID]`,
  23. }
  24. const URL_MATCHER = {
  25. type: TYPE_REGEX,
  26. pattern: /(?:https?|ftp):\/\/[^\s/"$.?#].[^\s"]*/gi,
  27. replacement: '[REDACTED_URL]',
  28. }
  29. const DEEP_HEADER_AUTHORIZATION = {
  30. type: TYPE_PATH,
  31. predicate: ({ path }) => path.endsWith('.headers.authorization'),
  32. replacement: '[REDACTED_HEADER_AUTHORIZATION]',
  33. }
  34. const DEEP_HEADER_SET_COOKIE = {
  35. type: TYPE_PATH,
  36. predicate: ({ path }) => path.endsWith('.headers.set-cookie'),
  37. replacement: '[REDACTED_HEADER_SET_COOKIE]',
  38. }
  39. const DEEP_HEADER_COOKIE = {
  40. type: TYPE_PATH,
  41. predicate: ({ path }) => path.endsWith('.headers.cookie'),
  42. replacement: '[REDACTED_HEADER_COOKIE]',
  43. }
  44. const REWRITE_REQUEST = {
  45. type: TYPE_PATH,
  46. predicate: ({ path }) => path.endsWith('.request'),
  47. replacement: (input) => ({
  48. method: input?.method,
  49. path: input?.path,
  50. headers: input?.headers,
  51. url: input?.url,
  52. }),
  53. }
  54. const REWRITE_RESPONSE = {
  55. type: TYPE_PATH,
  56. predicate: ({ path }) => path.endsWith('.response'),
  57. replacement: (input) => ({
  58. data: input?.data,
  59. status: input?.status,
  60. headers: input?.headers,
  61. }),
  62. }
  63. module.exports = {
  64. TYPE_REGEX,
  65. TYPE_URL,
  66. TYPE_PATH,
  67. NPM_SECRET,
  68. AUTH_HEADER,
  69. JSON_WEB_TOKEN,
  70. UUID,
  71. URL_MATCHER,
  72. DEEP_HEADER_AUTHORIZATION,
  73. DEEP_HEADER_SET_COOKIE,
  74. DEEP_HEADER_COOKIE,
  75. REWRITE_REQUEST,
  76. REWRITE_RESPONSE,
  77. }